Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into upstream-merge-27474
This commit is contained in:
@@ -419,13 +419,18 @@
|
||||
set desc="Restarts the world immediately"
|
||||
if (!usr.client.holder)
|
||||
return
|
||||
var/confirm = alert("Restart the game world?", "Restart", "Yes", "Cancel")
|
||||
if(confirm == "Cancel")
|
||||
return
|
||||
if(confirm == "Yes")
|
||||
SSticker.delay_end = 0
|
||||
|
||||
var/list/options = list("Regular Restart", "Hard Restart (No Delay/Feeback Reason)", "Hardest Restart (No actions, just reboot)")
|
||||
var result = input(usr, "Select reboot method", "World Reboot", options[1]) as null|anything in options
|
||||
if(result)
|
||||
SSblackbox.add_details("admin_verb","Reboot World") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10)
|
||||
switch(result)
|
||||
if("Regular Restart")
|
||||
SSticker.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10)
|
||||
if("Hard Restart (No Delay, No Feeback Reason)")
|
||||
world.Reboot()
|
||||
if("Hardest Restart (No actions, just reboot)")
|
||||
world.Reboot(fast_track = TRUE)
|
||||
|
||||
/datum/admins/proc/end_round()
|
||||
set category = "Server"
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
message_admins("[key_name_admin(ghost)] has taken control of ([key_name_admin(body)])")
|
||||
body.ghostize(0)
|
||||
body.key = ghost.key
|
||||
new /obj/effect/overlay/temp/gravpush(get_turf(body))
|
||||
new /obj/effect/temp_visual/gravpush(get_turf(body))
|
||||
|
||||
/obj/effect/fun_balloon/sentience/emergency_shuttle
|
||||
name = "shuttle sentience fun balloon"
|
||||
@@ -79,7 +79,7 @@
|
||||
/obj/effect/fun_balloon/scatter/effect()
|
||||
for(var/mob/living/M in range(effect_range, get_turf(src)))
|
||||
var/turf/T = find_safe_turf()
|
||||
new /obj/effect/overlay/temp/gravpush(get_turf(M))
|
||||
new /obj/effect/temp_visual/gravpush(get_turf(M))
|
||||
M.forceMove(T)
|
||||
to_chat(M, "<span class='notice'>Pop!</span>")
|
||||
|
||||
|
||||
@@ -442,7 +442,7 @@
|
||||
dat += "</table>"
|
||||
|
||||
for(var/datum/gang/G in SSticker.mode.gangs)
|
||||
dat += "<br><table cellspacing=5><tr><td><B>[G.name] Gang: <a href='?_src_=holder;gangpoints=\ref[G]'>[G.points] Influence</a> | [round((G.territory.len/GLOB.start_state.num_territories)*100, 1)]% Control</B></td><td></td></tr>"
|
||||
dat += "<br><table cellspacing=5><tr><td><B>[G.name] Gang: [round((G.territory.len/GLOB.start_state.num_territories)*100, 1)]% Control</B></td><td></td></tr>"
|
||||
for(var/datum/mind/N in G.bosses)
|
||||
var/mob/M = N.current
|
||||
if(!M)
|
||||
|
||||
+34
-40
@@ -282,6 +282,11 @@
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] edited the Emergency Shuttle's timeleft to [timer] seconds.</span>")
|
||||
href_list["secrets"] = "check_antagonist"
|
||||
|
||||
else if(href_list["trigger_centcom_recall"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
usr.client.trigger_centcom_recall()
|
||||
else if(href_list["toggle_continuous"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -1170,7 +1175,7 @@
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(SSticker.HasRoundStarted())
|
||||
if(SSticker.HasRoundStarted())
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
var/dat = {"<B>What mode do you wish to play?</B><HR>"}
|
||||
for(var/mode in config.modes)
|
||||
@@ -1184,7 +1189,7 @@
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(SSticker.HasRoundStarted())
|
||||
if(SSticker.HasRoundStarted())
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "secret")
|
||||
return alert(usr, "The game mode has to be secret!", null, null, null, null)
|
||||
@@ -1199,21 +1204,21 @@
|
||||
if(!check_rights(R_ADMIN|R_SERVER))
|
||||
return
|
||||
|
||||
if (SSticker.HasRoundStarted())
|
||||
if (SSticker.HasRoundStarted())
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
GLOB.master_mode = href_list["c_mode2"]
|
||||
log_admin("[key_name(usr)] set the mode as [GLOB.master_mode].")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] set the mode as [GLOB.master_mode].</span>")
|
||||
to_chat(world, "<span class='adminnotice'><b>The mode is now: [GLOB.master_mode]</b></span>")
|
||||
Game() // updates the main game menu
|
||||
world.save_mode(GLOB.master_mode)
|
||||
SSticker.save_mode(GLOB.master_mode)
|
||||
.(href, list("c_mode"=1))
|
||||
|
||||
else if(href_list["f_secret2"])
|
||||
if(!check_rights(R_ADMIN|R_SERVER))
|
||||
return
|
||||
|
||||
if(SSticker.HasRoundStarted())
|
||||
if(SSticker.HasRoundStarted())
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "secret")
|
||||
return alert(usr, "The game mode has to be secret!", null, null, null, null)
|
||||
@@ -1511,17 +1516,6 @@
|
||||
|
||||
usr.client.cmd_admin_animalize(M)
|
||||
|
||||
else if(href_list["gangpoints"])
|
||||
var/datum/gang/G = locate(href_list["gangpoints"]) in SSticker.mode.gangs
|
||||
if(G)
|
||||
var/newpoints = input("Set [G.name ] Gang's influence.","Set Influence",G.points) as null|num
|
||||
if(!newpoints)
|
||||
return
|
||||
message_admins("[key_name_admin(usr)] changed the [G.name] Gang's influence from [G.points] to [newpoints].</span>")
|
||||
log_admin("[key_name(usr)] changed the [G.name] Gang's influence from [G.points] to [newpoints].</span>")
|
||||
G.points = newpoints
|
||||
G.message_gangtools("Your gang now has [G.points] influence.")
|
||||
|
||||
else if(href_list["adminplayeropts"])
|
||||
var/mob/M = locate(href_list["adminplayeropts"])
|
||||
show_player_panel(M)
|
||||
@@ -1799,18 +1793,18 @@
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["languagemenu"]) in GLOB.mob_list
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob.")
|
||||
var/mob/M = locate(href_list["languagemenu"]) in GLOB.mob_list
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob.")
|
||||
return
|
||||
var/datum/language_holder/H = M.get_language_holder()
|
||||
H.open_language_menu(usr)
|
||||
var/datum/language_holder/H = M.get_language_holder()
|
||||
H.open_language_menu(usr)
|
||||
|
||||
else if(href_list["traitor"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(!SSticker.HasRoundStarted())
|
||||
if(!SSticker.HasRoundStarted())
|
||||
alert("The game hasn't started yet!")
|
||||
return
|
||||
|
||||
@@ -2161,7 +2155,7 @@
|
||||
else if(href_list["kick_all_from_lobby"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(SSticker.IsRoundInProgress())
|
||||
if(SSticker.IsRoundInProgress())
|
||||
var/afkonly = text2num(href_list["afkonly"])
|
||||
if(alert("Are you sure you want to kick all [afkonly ? "AFK" : ""] clients from the lobby??","Message","Yes","Cancel") != "Yes")
|
||||
to_chat(usr, "Kick clients from lobby aborted")
|
||||
@@ -2242,20 +2236,20 @@
|
||||
if(href_list["viewruntime_backto"])
|
||||
error_viewer.show_to(owner, locate(href_list["viewruntime_backto"]), href_list["viewruntime_linear"])
|
||||
else
|
||||
error_viewer.show_to(owner, null, href_list["viewruntime_linear"])
|
||||
else if(href_list["showrelatedacc"])
|
||||
var/client/C = locate(href_list["client"]) in GLOB.clients
|
||||
var/list/thing_to_check
|
||||
if(href_list["showrelatedacc"] == "cid")
|
||||
thing_to_check = C.related_accounts_cid
|
||||
else
|
||||
thing_to_check = C.related_accounts_ip
|
||||
thing_to_check = splittext(thing_to_check, ", ")
|
||||
|
||||
|
||||
var/dat = "Related accounts by [uppertext(href_list["showrelatedacc"])]:<br>"
|
||||
for(var/thing in thing_to_check)
|
||||
dat += "[thing]<br>"
|
||||
|
||||
usr << browse(dat, "size=420x300")
|
||||
|
||||
error_viewer.show_to(owner, null, href_list["viewruntime_linear"])
|
||||
else if(href_list["showrelatedacc"])
|
||||
var/client/C = locate(href_list["client"]) in GLOB.clients
|
||||
var/list/thing_to_check
|
||||
if(href_list["showrelatedacc"] == "cid")
|
||||
thing_to_check = C.related_accounts_cid
|
||||
else
|
||||
thing_to_check = C.related_accounts_ip
|
||||
thing_to_check = splittext(thing_to_check, ", ")
|
||||
|
||||
|
||||
var/dat = "Related accounts by [uppertext(href_list["showrelatedacc"])]:<br>"
|
||||
for(var/thing in thing_to_check)
|
||||
dat += "[thing]<br>"
|
||||
|
||||
usr << browse(dat, "size=420x300")
|
||||
|
||||
|
||||
@@ -52,10 +52,7 @@
|
||||
if(!check_rights(R_SOUNDS))
|
||||
return
|
||||
|
||||
if(SSticker)
|
||||
SSticker.round_end_sound = fcopy_rsc(S)
|
||||
else
|
||||
return
|
||||
SSticker.SetRoundEndSound(S)
|
||||
|
||||
log_admin("[key_name(src)] set the round end sound to [S]")
|
||||
message_admins("[key_name_admin(src)] set the round end sound to [S]")
|
||||
|
||||
@@ -1194,3 +1194,16 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
|
||||
message_admins(msg)
|
||||
admin_ticket_log(target, msg)
|
||||
log_admin("[key_name(usr)] punished [key_name(target)] with [punishment].")
|
||||
|
||||
|
||||
/client/proc/trigger_centcom_recall()
|
||||
if(!holder)
|
||||
return
|
||||
var/message = pick(GLOB.admiral_messages)
|
||||
message = input("Enter message from the on-call admiral to be put in the recall report.", "Admiral Message", message) as text|null
|
||||
|
||||
if(!message)
|
||||
return
|
||||
|
||||
message_admins("[key_name_admin(usr)] triggered a Centcom recall, with the admiral message of: [message]")
|
||||
log_game("[key_name(usr)] triggered a Centcom recall, with the message of: [message]")
|
||||
@@ -172,11 +172,11 @@
|
||||
|
||||
/obj/item/device/assembly/flash/cyborg/attack(mob/living/M, mob/user)
|
||||
..()
|
||||
new /obj/effect/overlay/temp/borgflash(get_turf(src))
|
||||
new /obj/effect/temp_visual/borgflash(get_turf(src))
|
||||
|
||||
/obj/item/device/assembly/flash/cyborg/attack_self(mob/user)
|
||||
..()
|
||||
new /obj/effect/overlay/temp/borgflash(get_turf(src))
|
||||
new /obj/effect/temp_visual/borgflash(get_turf(src))
|
||||
|
||||
/obj/item/device/assembly/flash/cyborg/attackby(obj/item/weapon/W, mob/user, params)
|
||||
return
|
||||
|
||||
@@ -76,7 +76,6 @@
|
||||
/datum/gas_reaction/freon/react(datum/gas_mixture/air, turf/open/location)
|
||||
. = NO_REACTION
|
||||
if(location && location.freon_gas_act())
|
||||
air.gases["freon"][MOLES] -= MOLES_PLASMA_VISIBLE
|
||||
. = REACTING
|
||||
|
||||
//water vapor: puts out fires?
|
||||
|
||||
@@ -433,7 +433,7 @@
|
||||
|
||||
/obj/item/projectile/beam/ctf/red
|
||||
icon_state = "laser"
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/red_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
|
||||
|
||||
// BLUE TEAM GUNS
|
||||
|
||||
@@ -448,7 +448,7 @@
|
||||
|
||||
/obj/item/projectile/beam/ctf/blue
|
||||
icon_state = "bluelaser"
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
|
||||
/datum/outfit/ctf
|
||||
name = "CTF"
|
||||
|
||||
@@ -672,3 +672,7 @@ GLOBAL_LIST(external_rsc_urls)
|
||||
CRASH("change_view called without argument.")
|
||||
|
||||
view = new_size
|
||||
|
||||
/client/proc/AnnouncePR(announcement)
|
||||
if(prefs && prefs.chat_toggles & CHAT_PULLR)
|
||||
to_chat(src, announcement)
|
||||
@@ -211,6 +211,14 @@
|
||||
item_state = "black_suit_fem"
|
||||
item_color = "black_suit_fem"
|
||||
|
||||
/obj/item/clothing/under/suit_jacket/green
|
||||
name = "green suit"
|
||||
desc = "A green suit and yellow necktie. Baller."
|
||||
icon_state = "green_suit"
|
||||
item_state = "dg_suit"
|
||||
item_color = "green_suit"
|
||||
can_adjust = 0
|
||||
|
||||
/obj/item/clothing/under/suit_jacket/red
|
||||
name = "red suit"
|
||||
desc = "A red suit and blue tie. Somewhat formal."
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
/obj/item/clothing/under/syndicate/sniper
|
||||
name = "Tactical turtleneck suit"
|
||||
desc = "A double seamed tactical turtleneck disguised as a civillian grade silk suit. Intended for the most formal operator. The collar is really sharp"
|
||||
desc = "A double seamed tactical turtleneck disguised as a civilian grade silk suit. Intended for the most formal operator. The collar is really sharp"
|
||||
icon_state = "really_black_suit"
|
||||
item_state = "bl_suit"
|
||||
item_color = "black_suit"
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
var/process_edge_turfs = FALSE //Don't do this either unless it's absolutely necessary, you can just track what things are inside manually or on the initial setup.
|
||||
var/setup_edge_turfs = FALSE //Setup edge turfs/all field turfs. Set either or both to ON when you need it, it's defaulting to off unless you do to save CPU.
|
||||
var/setup_field_turfs = FALSE
|
||||
var/use_host_turf = FALSE //For fields from items carried on mobs to check turf instead of loc...
|
||||
|
||||
var/list/turf/field_turfs = list()
|
||||
var/list/turf/edge_turfs = list()
|
||||
@@ -90,8 +91,19 @@
|
||||
for(var/turf/T in field_turfs)
|
||||
cleanup_field_turf(T)
|
||||
|
||||
/datum/proximity_monitor/advanced/proc/check_movement()
|
||||
if(!use_host_turf)
|
||||
if(host.loc != last_host_loc)
|
||||
last_host_loc = host.loc
|
||||
return TRUE
|
||||
else
|
||||
if(get_turf(host) != last_host_loc)
|
||||
last_host_loc = get_turf(host)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/proximity_monitor/advanced/proc/recalculate_field(ignore_movement_check = FALSE) //Call every time the field moves (done automatically if you use update_center) or a setup specification is changed.
|
||||
if(!(ignore_movement_check || ((host.loc != last_host_loc) && (field_shape != FIELD_NO_SHAPE))))
|
||||
if(!(ignore_movement_check || check_movement()) && (field_shape != FIELD_NO_SHAPE))
|
||||
return
|
||||
update_new_turfs()
|
||||
var/list/turf/needs_setup = field_turfs_new.Copy()
|
||||
@@ -173,7 +185,6 @@
|
||||
/datum/proximity_monitor/advanced/proc/update_new_turfs()
|
||||
if(!istype(host))
|
||||
return FALSE
|
||||
last_host_loc = host.loc
|
||||
var/turf/center = get_turf(host)
|
||||
field_turfs_new = list()
|
||||
edge_turfs_new = list()
|
||||
|
||||
@@ -15,9 +15,11 @@
|
||||
var/static/image/southwest_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southwest")
|
||||
var/static/image/northeast_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_northeast")
|
||||
var/static/image/southeast_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southeast")
|
||||
var/static/image/generic_edge = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_generic")
|
||||
var/obj/item/borg/projectile_dampen/projector = null
|
||||
var/list/obj/item/projectile/tracked
|
||||
var/list/obj/item/projectile/staging
|
||||
use_host_turf = TRUE
|
||||
|
||||
/datum/proximity_monitor/advanced/peaceborg_dampener/New()
|
||||
tracked = list()
|
||||
@@ -71,6 +73,8 @@
|
||||
return southeast_corner
|
||||
if(SOUTHWEST)
|
||||
return southwest_corner
|
||||
else
|
||||
return generic_edge
|
||||
|
||||
/datum/proximity_monitor/advanced/peaceborg_dampener/proc/capture_projectile(obj/item/projectile/P, track_projectile = TRUE)
|
||||
if(P in tracked)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
alpha = 0
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
flags = ABSTRACT|ON_BORDER
|
||||
mouse_opacity = 0
|
||||
var/datum/proximity_monitor/advanced/parent = null
|
||||
|
||||
/obj/effect/abstract/proximity_checker/advanced/Initialize(mapload, _monitor)
|
||||
|
||||
@@ -447,10 +447,10 @@
|
||||
minerals += M
|
||||
if(minerals.len)
|
||||
for(var/turf/closed/mineral/M in minerals)
|
||||
var/obj/effect/overlay/temp/mining_overlay/C = new /obj/effect/overlay/temp/mining_overlay(M)
|
||||
var/obj/effect/temp_visual/mining_overlay/C = new /obj/effect/temp_visual/mining_overlay(M)
|
||||
C.icon_state = M.scan_state
|
||||
|
||||
/obj/effect/overlay/temp/mining_overlay
|
||||
/obj/effect/temp_visual/mining_overlay
|
||||
layer = FLASH_LAYER
|
||||
icon = 'icons/turf/smoothrocks.dmi'
|
||||
anchored = 1
|
||||
@@ -510,79 +510,69 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("smashed", "crushed", "cleaved", "chopped", "pulped")
|
||||
sharpness = IS_SHARP
|
||||
var/charged = 1
|
||||
var/charge_time = 16
|
||||
var/atom/mark = null
|
||||
var/mutable_appearance/marked_underlay
|
||||
var/charged = TRUE
|
||||
var/charge_time = 14
|
||||
|
||||
/obj/item/projectile/destabilizer
|
||||
name = "destabilizing force"
|
||||
icon_state = "pulse1"
|
||||
nodamage = TRUE
|
||||
damage = 0 //We're just here to mark people. This is still a melee weapon.
|
||||
damage_type = BRUTE
|
||||
flag = "bomb"
|
||||
range = 6
|
||||
var/obj/item/weapon/twohanded/required/mining_hammer/hammer_synced = null
|
||||
log_override = TRUE
|
||||
var/obj/item/weapon/twohanded/required/mining_hammer/hammer_synced
|
||||
|
||||
/obj/item/projectile/destabilizer/Destroy()
|
||||
hammer_synced = null
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = 0)
|
||||
if(hammer_synced)
|
||||
if(hammer_synced.mark == target)
|
||||
return ..()
|
||||
if(isliving(target))
|
||||
if(hammer_synced.mark && hammer_synced.marked_underlay)
|
||||
hammer_synced.mark.underlays -= hammer_synced.marked_underlay
|
||||
hammer_synced.marked_underlay = null
|
||||
var/mob/living/L = target
|
||||
if(L.mob_size >= MOB_SIZE_LARGE)
|
||||
hammer_synced.mark = L
|
||||
hammer_synced.marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2")
|
||||
hammer_synced.marked_underlay.pixel_x = -L.pixel_x
|
||||
hammer_synced.marked_underlay.pixel_y = -L.pixel_y
|
||||
L.underlays += hammer_synced.marked_underlay
|
||||
var/target_turf = get_turf(target)
|
||||
if(ismineralturf(target_turf))
|
||||
var/turf/closed/mineral/M = target_turf
|
||||
new /obj/effect/overlay/temp/kinetic_blast(M)
|
||||
M.gets_drilled(firer)
|
||||
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
var/datum/status_effect/crusher_mark/CM = L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK)
|
||||
CM.hammer_synced = hammer_synced
|
||||
var/target_turf = get_turf(target)
|
||||
if(ismineralturf(target_turf))
|
||||
var/turf/closed/mineral/M = target_turf
|
||||
new /obj/effect/temp_visual/kinetic_blast(M)
|
||||
M.gets_drilled(firer)
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/weapon/twohanded/required/mining_hammer/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(!proximity_flag && charged)//Mark a target, or mine a tile.
|
||||
var/turf/proj_turf = get_turf(src)
|
||||
var/turf/proj_turf = user.loc
|
||||
if(!isturf(proj_turf))
|
||||
return
|
||||
var/datum/gas_mixture/environment = proj_turf.return_air()
|
||||
var/pressure = environment.return_pressure()
|
||||
if(pressure > 50)
|
||||
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
|
||||
return
|
||||
var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(user.loc)
|
||||
D.preparePixelProjectile(target,get_turf(target), user)
|
||||
var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(proj_turf)
|
||||
D.preparePixelProjectile(target, get_turf(target), user)
|
||||
D.hammer_synced = src
|
||||
playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1)
|
||||
D.fire()
|
||||
charged = 0
|
||||
charged = FALSE
|
||||
icon_state = "mining_hammer1_uncharged"
|
||||
addtimer(CALLBACK(src, .proc/Recharge), charge_time)
|
||||
return
|
||||
if(proximity_flag && target == mark && isliving(target))
|
||||
if(proximity_flag && isliving(target))
|
||||
var/mob/living/L = target
|
||||
new /obj/effect/overlay/temp/kinetic_blast(get_turf(L))
|
||||
mark = 0
|
||||
if(L.mob_size >= MOB_SIZE_LARGE)
|
||||
L.underlays -= marked_underlay
|
||||
QDEL_NULL(marked_underlay)
|
||||
var/backstab_dir = get_dir(user, L)
|
||||
var/def_check = L.getarmor(type = "bomb")
|
||||
if((user.dir & backstab_dir) && (L.dir & backstab_dir))
|
||||
L.apply_damage(80, BRUTE, blocked = def_check)
|
||||
playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong
|
||||
else
|
||||
L.apply_damage(50, BRUTE, blocked = def_check)
|
||||
var/datum/status_effect/crusher_mark/CM = L.has_status_effect(STATUS_EFFECT_CRUSHERMARK)
|
||||
if(!CM || CM.hammer_synced != src || !L.remove_status_effect(STATUS_EFFECT_CRUSHERMARK))
|
||||
return
|
||||
new /obj/effect/temp_visual/kinetic_blast(get_turf(L))
|
||||
var/backstab_dir = get_dir(user, L)
|
||||
var/def_check = L.getarmor(type = "bomb")
|
||||
if((user.dir & backstab_dir) && (L.dir & backstab_dir))
|
||||
L.apply_damage(80, BRUTE, blocked = def_check)
|
||||
playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong
|
||||
else
|
||||
L.apply_damage(50, BRUTE, blocked = def_check)
|
||||
|
||||
|
||||
/obj/item/weapon/twohanded/required/mining_hammer/proc/Recharge()
|
||||
if(!charged)
|
||||
charged = 1
|
||||
charged = TRUE
|
||||
icon_state = "mining_hammer1"
|
||||
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
|
||||
|
||||
@@ -673,7 +673,7 @@
|
||||
if(!istype(T))
|
||||
return
|
||||
if(!istype(T, turf_type))
|
||||
var/obj/effect/overlay/temp/lavastaff/L = new /obj/effect/overlay/temp/lavastaff(T)
|
||||
var/obj/effect/temp_visual/lavastaff/L = new /obj/effect/temp_visual/lavastaff(T)
|
||||
L.alpha = 0
|
||||
animate(L, alpha = 255, time = create_delay)
|
||||
user.visible_message("<span class='danger'>[user] points [src] at [T]!</span>")
|
||||
@@ -696,7 +696,7 @@
|
||||
timer = world.time + reset_cooldown
|
||||
playsound(T,'sound/magic/Fireball.ogg', 200, 1)
|
||||
|
||||
/obj/effect/overlay/temp/lavastaff
|
||||
/obj/effect/temp_visual/lavastaff
|
||||
icon_state = "lavastaff_warn"
|
||||
duration = 50
|
||||
|
||||
@@ -821,9 +821,7 @@
|
||||
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
|
||||
var/obj/effect/overlay/temp/hierophant/chaser/C = new(get_turf(user), user, target, chaser_speed, friendly_fire_check)
|
||||
C.damage = 30
|
||||
C.monster_damage_boost = FALSE
|
||||
new /obj/effect/temp_visual/hierophant/chaser(get_turf(user), user, target, chaser_speed, friendly_fire_check)
|
||||
add_logs(user, target, "fired a chaser at", src)
|
||||
else
|
||||
INVOKE_ASYNC(src, .proc/cardinal_blasts, T, user) //otherwise, just do cardinal blast
|
||||
@@ -878,7 +876,7 @@
|
||||
if(do_after(user, 50, target = user) && !beacon)
|
||||
var/turf/T = get_turf(user)
|
||||
playsound(T,'sound/magic/Blind.ogg', 200, 1, -4)
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph/teleport(T, user)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, user)
|
||||
beacon = new/obj/effect/hierophant(T)
|
||||
user.update_action_buttons_icon()
|
||||
user.visible_message("<span class='hierophant_warning'>[user] places a strange machine beneath [user.p_their()] feet!</span>", \
|
||||
@@ -905,8 +903,8 @@
|
||||
timer = world.time + 50
|
||||
INVOKE_ASYNC(src, .proc/prepare_icon_update)
|
||||
beacon.icon_state = "hierophant_tele_on"
|
||||
var/obj/effect/overlay/temp/hierophant/telegraph/edge/TE1 = new /obj/effect/overlay/temp/hierophant/telegraph/edge(user.loc)
|
||||
var/obj/effect/overlay/temp/hierophant/telegraph/edge/TE2 = new /obj/effect/overlay/temp/hierophant/telegraph/edge(beacon.loc)
|
||||
var/obj/effect/temp_visual/hierophant/telegraph/edge/TE1 = new /obj/effect/temp_visual/hierophant/telegraph/edge(user.loc)
|
||||
var/obj/effect/temp_visual/hierophant/telegraph/edge/TE2 = new /obj/effect/temp_visual/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)
|
||||
@@ -918,8 +916,8 @@
|
||||
INVOKE_ASYNC(src, .proc/prepare_icon_update)
|
||||
beacon.icon_state = "hierophant_tele_off"
|
||||
return
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph(T, user)
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph(source, user)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph(T, user)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph(source, user)
|
||||
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 || QDELETED(beacon)) //no walking away shitlord
|
||||
@@ -940,13 +938,13 @@
|
||||
beacon.icon_state = "hierophant_tele_off"
|
||||
return
|
||||
add_logs(user, beacon, "teleported self from ([source.x],[source.y],[source.z]) to")
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph/teleport(T, user)
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph/teleport(source, user)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, user)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, user)
|
||||
for(var/t in RANGE_TURFS(1, T))
|
||||
var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, user, TRUE) //No friendly fire, this is a utility tool
|
||||
var/obj/effect/temp_visual/hierophant/blast/B = new /obj/effect/temp_visual/hierophant/blast(t, user, TRUE) //blasts produced will not hurt allies
|
||||
B.damage = 30
|
||||
for(var/t in RANGE_TURFS(1, source))
|
||||
var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, user, TRUE)
|
||||
var/obj/effect/temp_visual/hierophant/blast/B = new /obj/effect/temp_visual/hierophant/blast(t, user, TRUE) //but absolutely will hurt enemies
|
||||
B.damage = 30
|
||||
for(var/mob/living/L in range(1, source))
|
||||
INVOKE_ASYNC(src, .proc/teleport_mob, source, L, T, user) //regardless, take all mobs near us along
|
||||
@@ -991,10 +989,10 @@
|
||||
/obj/item/weapon/hierophant_club/proc/cardinal_blasts(turf/T, mob/living/user) //fire cardinal cross blasts with a delay
|
||||
if(!T)
|
||||
return
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph/cardinal(T, user)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/cardinal(T, user)
|
||||
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
|
||||
sleep(2)
|
||||
new /obj/effect/overlay/temp/hierophant/blast(T, user, friendly_fire_check)
|
||||
new /obj/effect/temp_visual/hierophant/blast(T, user, friendly_fire_check)
|
||||
for(var/d in GLOB.cardinal)
|
||||
INVOKE_ASYNC(src, .proc/blast_wall, T, d, user)
|
||||
|
||||
@@ -1007,18 +1005,15 @@
|
||||
for(var/i in 1 to range)
|
||||
if(!J)
|
||||
return
|
||||
var/obj/effect/overlay/temp/hierophant/blast/B = new(J, user, friendly_fire_check)
|
||||
B.damage = 30
|
||||
B.monster_damage_boost = FALSE
|
||||
new /obj/effect/temp_visual/hierophant/blast(J, user, friendly_fire_check)
|
||||
previousturf = J
|
||||
J = get_step(previousturf, dir)
|
||||
|
||||
/obj/item/weapon/hierophant_club/proc/aoe_burst(turf/T, mob/living/user) //make a 3x3 blast around a target
|
||||
if(!T)
|
||||
return
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph(T, user)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph(T, user)
|
||||
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
|
||||
sleep(2)
|
||||
for(var/t in RANGE_TURFS(1, T))
|
||||
var/obj/effect/overlay/temp/hierophant/blast/B = new(t, user, friendly_fire_check)
|
||||
B.damage = 15 //keeps monster damage boost due to lower damage
|
||||
new /obj/effect/temp_visual/hierophant/blast(t, user, friendly_fire_check)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
check_friendly_fire = 1
|
||||
stop_automated_movement_when_pulled = 1
|
||||
attacktext = "drills"
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
new /obj/effect/gibspawner/xenobodypartless(loc,viruses)
|
||||
|
||||
/mob/living/carbon/alien/gib_animation()
|
||||
new /obj/effect/overlay/temp/gib_animation(loc, "gibbed-a")
|
||||
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-a")
|
||||
|
||||
/mob/living/carbon/alien/spawn_dust()
|
||||
new /obj/effect/decal/remains/xeno(loc)
|
||||
|
||||
/mob/living/carbon/alien/dust_animation()
|
||||
new /obj/effect/overlay/temp/dust_animation(loc, "dust-a")
|
||||
new /obj/effect/temp_visual/dust_animation(loc, "dust-a")
|
||||
|
||||
@@ -13,10 +13,10 @@
|
||||
new /obj/effect/gibspawner/larvabodypartless(loc,viruses)
|
||||
|
||||
/mob/living/carbon/alien/larva/gib_animation()
|
||||
new /obj/effect/overlay/temp/gib_animation(loc, "gibbed-l")
|
||||
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-l")
|
||||
|
||||
/mob/living/carbon/alien/larva/spawn_dust()
|
||||
new /obj/effect/decal/remains/xeno(loc)
|
||||
|
||||
/mob/living/carbon/alien/larva/dust_animation()
|
||||
new /obj/effect/overlay/temp/dust_animation(loc, "dust-l")
|
||||
new /obj/effect/temp_visual/dust_animation(loc, "dust-l")
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/mob/living/carbon/human/gib_animation()
|
||||
new /obj/effect/overlay/temp/gib_animation(loc, "gibbed-h")
|
||||
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-h")
|
||||
|
||||
/mob/living/carbon/human/dust_animation()
|
||||
new /obj/effect/overlay/temp/dust_animation(loc, "dust-h")
|
||||
new /obj/effect/temp_visual/dust_animation(loc, "dust-h")
|
||||
|
||||
/mob/living/carbon/human/spawn_gibs(with_bodyparts)
|
||||
if(with_bodyparts)
|
||||
|
||||
@@ -664,7 +664,7 @@
|
||||
return
|
||||
|
||||
invisibility = INVISIBILITY_MAXIMUM //disappear before the animation
|
||||
new /obj/effect/overlay/temp/mummy_animation(get_turf(src))
|
||||
new /obj/effect/temp_visual/mummy_animation(get_turf(src))
|
||||
if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE))
|
||||
cloth_golem.grab_ghost() //won't pull if it's a suicide
|
||||
sleep(20)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/carbon/monkey/gib_animation()
|
||||
new /obj/effect/overlay/temp/gib_animation(loc, "gibbed-m")
|
||||
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-m")
|
||||
|
||||
/mob/living/carbon/monkey/dust_animation()
|
||||
new /obj/effect/overlay/temp/dust_animation(loc, "dust-m")
|
||||
new /obj/effect/temp_visual/dust_animation(loc, "dust-m")
|
||||
|
||||
@@ -797,9 +797,6 @@
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/update_stamina()
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/update_stamina()
|
||||
if(staminaloss)
|
||||
var/total_health = (health - staminaloss)
|
||||
if(total_health <= HEALTH_THRESHOLD_CRIT && !stat)
|
||||
@@ -808,6 +805,9 @@
|
||||
setStaminaLoss(health - 2)
|
||||
update_health_hud()
|
||||
|
||||
/mob/living/carbon/alien/update_stamina()
|
||||
return
|
||||
|
||||
/mob/living/proc/owns_soul()
|
||||
if(mind)
|
||||
return mind.soulOwner == mind
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/mob/living/silicon/robot/gib_animation()
|
||||
new /obj/effect/overlay/temp/gib_animation(loc, "gibbed-r")
|
||||
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-r")
|
||||
|
||||
/mob/living/silicon/robot/dust()
|
||||
if(mmi)
|
||||
@@ -11,7 +11,7 @@
|
||||
new /obj/effect/decal/remains/robot(loc)
|
||||
|
||||
/mob/living/silicon/robot/dust_animation()
|
||||
new /obj/effect/overlay/temp/dust_animation(loc, "dust-r")
|
||||
new /obj/effect/temp_visual/dust_animation(loc, "dust-r")
|
||||
|
||||
/mob/living/silicon/robot/death(gibbed)
|
||||
if(stat == DEAD)
|
||||
|
||||
@@ -198,9 +198,9 @@
|
||||
/obj/item/weapon/robot_module/proc/do_transform_animation()
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
R.notransform = TRUE
|
||||
var/obj/effect/overlay/temp/decoy/fading/fivesecond/ANM = new /obj/effect/overlay/temp/decoy/fading/fivesecond(R.loc, R)
|
||||
var/obj/effect/temp_visual/decoy/fading/fivesecond/ANM = new /obj/effect/temp_visual/decoy/fading/fivesecond(R.loc, R)
|
||||
ANM.layer = R.layer - 0.01
|
||||
new /obj/effect/overlay/temp/small_smoke(R.loc)
|
||||
new /obj/effect/temp_visual/small_smoke(R.loc)
|
||||
if(R.hat)
|
||||
R.hat.forceMove(get_turf(R))
|
||||
R.hat = null
|
||||
|
||||
@@ -299,7 +299,7 @@
|
||||
/mob/living/simple_animal/bot/emp_act(severity)
|
||||
var/was_on = on
|
||||
stat |= EMPED
|
||||
new /obj/effect/overlay/temp/emp(loc)
|
||||
new /obj/effect/temp_visual/emp(loc)
|
||||
if(paicard)
|
||||
paicard.emp_act(severity)
|
||||
src.visible_message("[paicard] is flies out of [bot_name]!","<span class='warning'>You are forcefully ejected from [bot_name]!</span>")
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
maxHealth = 100
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
obj_damage = 60
|
||||
environment_smash = 2 //Walls can't stop THE LAW
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS //Walls can't stop THE LAW
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
|
||||
radio_key = /obj/item/device/encryptionkey/headset_sec
|
||||
@@ -444,7 +444,7 @@ Auto Patrol[]"},
|
||||
if(severity==2 && prob(70))
|
||||
..(severity-1)
|
||||
else
|
||||
new /obj/effect/overlay/temp/emp(loc)
|
||||
new /obj/effect/temp_visual/emp(loc)
|
||||
var/list/mob/living/carbon/targets = new
|
||||
for(var/mob/living/carbon/C in view(12,src))
|
||||
if(C.stat==2)
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
melee_damage_upper = 30
|
||||
attacktext = "smashes their armored gauntlet into"
|
||||
speed = 3
|
||||
environment_smash = 2
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
attack_sound = 'sound/weapons/punch3.ogg'
|
||||
status_flags = 0
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/armored/hostile //actually hostile, will move around, hit things
|
||||
AIStatus = AI_ON
|
||||
environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP
|
||||
environment_smash = ENVIRONMENT_SMASH_STRUCTURES //only token destruction, don't smash the cult wall NO STOP
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/armored/bullet_act(obj/item/projectile/P)
|
||||
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
|
||||
@@ -218,7 +218,7 @@
|
||||
retreat_distance = 10
|
||||
minimum_distance = 10 //AI artificers will flee like fuck
|
||||
attacktext = "rams"
|
||||
environment_smash = 2
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
attack_sound = 'sound/weapons/punch2.ogg'
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall,
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/floor,
|
||||
@@ -272,7 +272,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/builder/hostile //actually hostile, will move around, hit things, heal other constructs
|
||||
AIStatus = AI_ON
|
||||
environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP
|
||||
environment_smash = ENVIRONMENT_SMASH_STRUCTURES //only token destruction, don't smash the cult wall NO STOP
|
||||
|
||||
/////////////////////////////Non-cult Artificer/////////////////////////
|
||||
/mob/living/simple_animal/hostile/construct/builder/noncult
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
if(change)
|
||||
if(change > 0)
|
||||
if(M && stat != DEAD)
|
||||
new /obj/effect/overlay/temp/heart(loc)
|
||||
new /obj/effect/temp_visual/heart(loc)
|
||||
emote("me", 1, "purrs!")
|
||||
else
|
||||
if(M && stat != DEAD)
|
||||
|
||||
@@ -553,7 +553,7 @@
|
||||
if(change)
|
||||
if(change > 0)
|
||||
if(M && stat != DEAD) // Added check to see if this mob (the dog) is dead to fix issue 2454
|
||||
new /obj/effect/overlay/temp/heart(loc)
|
||||
new /obj/effect/temp_visual/heart(loc)
|
||||
emote("me", 1, "yaps happily!")
|
||||
else
|
||||
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
maxHealth = 40
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 2
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
stop_automated_movement_when_pulled = 1
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
var/obj/item/udder/udder = null
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
gold_core_spawnable = 2
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
var/list/edibles = list(/mob/living/simple_animal/butterfly,/mob/living/simple_animal/cockroach) //list of atoms, however turfs won't affect AI, but will affect consumption.
|
||||
|
||||
/mob/living/simple_animal/hostile/lizard/CanAttack(atom/the_target)//Can we actually attack a possible target?
|
||||
|
||||
@@ -31,7 +31,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
health = INFINITY
|
||||
healable = FALSE //don't brusepack the guardian
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) //how much damage from each damage type we transfer to the owner
|
||||
environment_smash = 1
|
||||
environment_smash = ENVIRONMENT_SMASH_STRUCTURES
|
||||
obj_damage = 40
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
@@ -175,9 +175,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
if(istype(summoner.loc, /obj/effect))
|
||||
Recall(TRUE)
|
||||
else
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(loc)
|
||||
new /obj/effect/temp_visual/guardian/phase/out(loc)
|
||||
forceMove(summoner.loc)
|
||||
new /obj/effect/overlay/temp/guardian/phase(loc)
|
||||
new /obj/effect/temp_visual/guardian/phase(loc)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/canSuicide()
|
||||
return 0
|
||||
@@ -315,7 +315,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
return FALSE
|
||||
if(loc == summoner)
|
||||
forceMove(summoner.loc)
|
||||
new /obj/effect/overlay/temp/guardian/phase(loc)
|
||||
new /obj/effect/temp_visual/guardian/phase(loc)
|
||||
cooldown = world.time + 10
|
||||
return TRUE
|
||||
return FALSE
|
||||
@@ -323,7 +323,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
/mob/living/simple_animal/hostile/guardian/proc/Recall(forced)
|
||||
if(!summoner || loc == summoner || (cooldown > world.time && !forced))
|
||||
return FALSE
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(loc)
|
||||
new /obj/effect/temp_visual/guardian/phase/out(loc)
|
||||
|
||||
forceMove(summoner)
|
||||
cooldown = world.time + 10
|
||||
|
||||
@@ -71,8 +71,11 @@
|
||||
melee_damage_upper = 50
|
||||
armour_penetration = 100
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(src))
|
||||
|
||||
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
|
||||
new /obj/effect/temp_visual/guardian/phase/out(get_turf(src))
|
||||
alpha = 15
|
||||
if(!forced)
|
||||
to_chat(src, "<span class='danger'><B>You enter stealth, empowering your next attack.</span></B>")
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/Move()
|
||||
if(charging)
|
||||
new /obj/effect/overlay/temp/decoy/fading(loc,src)
|
||||
new /obj/effect/temp_visual/decoy/fading(loc,src)
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/snapback()
|
||||
|
||||
@@ -21,14 +21,14 @@
|
||||
if(. && prob(40) && isliving(target))
|
||||
var/mob/living/M = target
|
||||
if(!M.anchored && M != summoner && !hasmatchingsummoner(M))
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(M))
|
||||
new /obj/effect/temp_visual/guardian/phase/out(get_turf(M))
|
||||
do_teleport(M, M, 10)
|
||||
for(var/mob/living/L in range(1, M))
|
||||
if(hasmatchingsummoner(L)) //if the summoner matches don't hurt them
|
||||
continue
|
||||
if(L != src && L != summoner)
|
||||
L.apply_damage(15, BRUTE)
|
||||
new /obj/effect/overlay/temp/explosion(get_turf(M))
|
||||
new /obj/effect/temp_visual/explosion(get_turf(M))
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/bomb/AltClickOn(atom/movable/A)
|
||||
if(!istype(A))
|
||||
@@ -75,7 +75,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
stored_obj.forceMove(T)
|
||||
playsound(T,'sound/effects/Explosion2.ogg', 200, 1)
|
||||
new /obj/effect/overlay/temp/explosion(T)
|
||||
new /obj/effect/temp_visual/explosion(T)
|
||||
user.ex_act(2)
|
||||
qdel(src)
|
||||
else
|
||||
|
||||
@@ -63,6 +63,6 @@
|
||||
else
|
||||
to_chat(summoner, "<span class='holoparasite'>You moved out of range, and were pulled back! You can only move [range] meters from <font color=\"[namedatum.colour]\"><b>[real_name]</b></font>!</span>")
|
||||
summoner.visible_message("<span class='danger'>\The [summoner] jumps back to [summoner.p_their()] protector.</span>")
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(summoner))
|
||||
new /obj/effect/temp_visual/guardian/phase/out(get_turf(summoner))
|
||||
summoner.forceMove(get_turf(src))
|
||||
new /obj/effect/overlay/temp/guardian/phase(get_turf(summoner))
|
||||
new /obj/effect/temp_visual/guardian/phase(get_turf(summoner))
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
alpha = 45
|
||||
range = 255
|
||||
incorporeal_move = 1
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
melee_damage_upper = 20
|
||||
obj_damage = 80
|
||||
next_move_modifier = 0.8 //attacks 20% faster
|
||||
environment_smash = 2
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
playstyle_string = "<span class='holoparasite'>As a <b>standard</b> type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls.</span>"
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the Assistant, faceless and generic, but never to be underestimated.</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Standard combat modules loaded. Holoparasite swarm online.</span>"
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
C.adjustFireLoss(-5)
|
||||
C.adjustOxyLoss(-5)
|
||||
C.adjustToxLoss(-5)
|
||||
var/obj/effect/overlay/temp/heal/H = new /obj/effect/overlay/temp/heal(get_turf(C))
|
||||
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(C))
|
||||
if(namedatum)
|
||||
H.color = namedatum.colour
|
||||
if(C == summoner)
|
||||
@@ -136,11 +136,11 @@
|
||||
to_chat(src, "<span class='danger'><B>You need to hold still!</span></B>")
|
||||
return
|
||||
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(T)
|
||||
new /obj/effect/temp_visual/guardian/phase/out(T)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
L.flash_act()
|
||||
A.visible_message("<span class='danger'>[A] disappears in a flash of light!</span>", \
|
||||
"<span class='userdanger'>Your vision is obscured by a flash of light!</span>")
|
||||
do_teleport(A, beacon, 0)
|
||||
new /obj/effect/overlay/temp/guardian/phase(get_turf(A))
|
||||
new /obj/effect/temp_visual/guardian/phase(get_turf(A))
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
a_intent = INTENT_HELP
|
||||
friendly = "caresses"
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
gold_core_spawnable = 1
|
||||
icon_state = "maid"
|
||||
icon_living = "maid"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
faction = list("hostile")
|
||||
move_to_delay = 0
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
mouse_opacity = 2
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
mob_size = MOB_SIZE_TINY
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
icon = 'icons/mob/simple_human.dmi'
|
||||
icon_state = "paperwizard"
|
||||
ranged = 1
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
minimum_distance = 3
|
||||
retreat_distance = 3
|
||||
obj_damage = 0
|
||||
@@ -16,7 +16,7 @@
|
||||
melee_damage_upper = 20
|
||||
health = 1000
|
||||
maxHealth = 1000
|
||||
loot = list(/obj/effect/overlay/temp/paperwiz_dying)
|
||||
loot = list(/obj/effect/temp_visual/paperwiz_dying)
|
||||
projectiletype = /obj/item/projectile/temp
|
||||
projectilesound = 'sound/weapons/emitter.ogg'
|
||||
attack_sound = 'sound/hallucinations/growl1.ogg'
|
||||
@@ -129,7 +129,7 @@
|
||||
qdel(src) //I see through your ruse!
|
||||
|
||||
//fancy effects
|
||||
/obj/effect/overlay/temp/paper_scatter
|
||||
/obj/effect/temp_visual/paper_scatter
|
||||
name = "scattering paper"
|
||||
desc = "Pieces of paper scattering to the wind."
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
@@ -139,7 +139,7 @@
|
||||
duration = 5
|
||||
randomdir = FALSE
|
||||
|
||||
/obj/effect/overlay/temp/paperwiz_dying
|
||||
/obj/effect/temp_visual/paperwiz_dying
|
||||
name = "craft portal"
|
||||
desc = "A wormhole sucking the wizard into the void. Neat."
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
@@ -149,18 +149,18 @@
|
||||
duration = 18
|
||||
randomdir = FALSE
|
||||
|
||||
/obj/effect/overlay/temp/paperwiz_dying/Initialize()
|
||||
/obj/effect/temp_visual/paperwiz_dying/Initialize()
|
||||
. = ..()
|
||||
visible_message("<span class='boldannounce'>The wizard cries out in pain as a gate appears behind him, sucking him in!</span>")
|
||||
playsound(get_turf(src),'sound/magic/MandSwap.ogg', 50, 1, 1)
|
||||
playsound(get_turf(src),'sound/hallucinations/wail.ogg', 50, 1, 1)
|
||||
|
||||
/obj/effect/overlay/temp/paperwiz_dying/Destroy()
|
||||
/obj/effect/temp_visual/paperwiz_dying/Destroy()
|
||||
for(var/mob/M in range(7,src))
|
||||
shake_camera(M, 7, 1)
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T,'sound/magic/Summon_Magic.ogg', 50, 1, 1)
|
||||
new /obj/effect/overlay/temp/paper_scatter(T)
|
||||
new /obj/effect/temp_visual/paper_scatter(T)
|
||||
new /obj/item/clothing/suit/wizrobe/paper(T)
|
||||
new /obj/item/clothing/head/collectable/paper(T)
|
||||
return ..()
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
icon_living = "flan"
|
||||
icon_dead = "flan_dead"
|
||||
turns_per_move = 5
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
speed = -2
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
robust_searching = 1
|
||||
stat_attack = 2
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
speak_emote = list("squeaks")
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
var/datum/mind/origin
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
faction = list("hostile")
|
||||
stop_automated_movement_when_pulled = 0
|
||||
obj_damage = 40
|
||||
environment_smash = 1 //Set to 1 to break closets,tables,racks, etc; 2 for walls; 3 for rwalls
|
||||
environment_smash = ENVIRONMENT_SMASH_STRUCTURES //Set to 1 to break closets,tables,racks, etc; 2 for walls; 3 for rwalls
|
||||
var/atom/target
|
||||
var/ranged = 0
|
||||
var/rapid = 0
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
melee_damage_upper = 0
|
||||
speed = -1
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/illusion/escape/AttackingTarget()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
faction = list("jungle")
|
||||
weather_immunities = list("acid")
|
||||
obj_damage = 30
|
||||
environment_smash = 2
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 450
|
||||
response_help = "pokes"
|
||||
|
||||
@@ -134,7 +134,7 @@ Difficulty: Hard
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/Move()
|
||||
if(charging)
|
||||
new /obj/effect/overlay/temp/decoy/fading(loc,src)
|
||||
new /obj/effect/temp_visual/decoy/fading(loc,src)
|
||||
DestroySurroundings()
|
||||
. = ..()
|
||||
if(!stat && .)
|
||||
@@ -150,12 +150,12 @@ Difficulty: Hard
|
||||
var/turf/T = get_turf(target)
|
||||
if(!T || T == loc)
|
||||
return
|
||||
new /obj/effect/overlay/temp/dragon_swoop/bubblegum(T)
|
||||
new /obj/effect/temp_visual/dragon_swoop/bubblegum(T)
|
||||
charging = TRUE
|
||||
DestroySurroundings()
|
||||
walk(src, 0)
|
||||
setDir(get_dir(src, T))
|
||||
var/obj/effect/overlay/temp/decoy/D = new /obj/effect/overlay/temp/decoy(loc,src)
|
||||
var/obj/effect/temp_visual/decoy/D = new /obj/effect/temp_visual/decoy(loc,src)
|
||||
animate(D, alpha = 0, color = "#FF0000", transform = matrix()*2, time = 3)
|
||||
sleep(3)
|
||||
throw_at(T, get_dist(src, T), 1, src, 0, callback = CALLBACK(src, .charge_end, bonus_charges))
|
||||
@@ -245,9 +245,9 @@ Difficulty: Hard
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/bloodsmack(turf/T, handedness)
|
||||
if(handedness)
|
||||
new /obj/effect/overlay/temp/bubblegum_hands/rightsmack(T)
|
||||
new /obj/effect/temp_visual/bubblegum_hands/rightsmack(T)
|
||||
else
|
||||
new /obj/effect/overlay/temp/bubblegum_hands/leftsmack(T)
|
||||
new /obj/effect/temp_visual/bubblegum_hands/leftsmack(T)
|
||||
sleep(2.5)
|
||||
for(var/mob/living/L in T)
|
||||
if(!faction_check_mob(L))
|
||||
@@ -259,11 +259,11 @@ Difficulty: Hard
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/bloodgrab(turf/T, handedness)
|
||||
if(handedness)
|
||||
new /obj/effect/overlay/temp/bubblegum_hands/rightpaw(T)
|
||||
new /obj/effect/overlay/temp/bubblegum_hands/rightthumb(T)
|
||||
new /obj/effect/temp_visual/bubblegum_hands/rightpaw(T)
|
||||
new /obj/effect/temp_visual/bubblegum_hands/rightthumb(T)
|
||||
else
|
||||
new /obj/effect/overlay/temp/bubblegum_hands/leftpaw(T)
|
||||
new /obj/effect/overlay/temp/bubblegum_hands/leftthumb(T)
|
||||
new /obj/effect/temp_visual/bubblegum_hands/leftpaw(T)
|
||||
new /obj/effect/temp_visual/bubblegum_hands/leftthumb(T)
|
||||
sleep(6)
|
||||
for(var/mob/living/L in T)
|
||||
if(!faction_check_mob(L))
|
||||
@@ -276,31 +276,31 @@ Difficulty: Hard
|
||||
addtimer(CALLBACK(src, .proc/devour, L), 2)
|
||||
sleep(1)
|
||||
|
||||
/obj/effect/overlay/temp/dragon_swoop/bubblegum
|
||||
/obj/effect/temp_visual/dragon_swoop/bubblegum
|
||||
duration = 10
|
||||
|
||||
/obj/effect/overlay/temp/bubblegum_hands
|
||||
/obj/effect/temp_visual/bubblegum_hands
|
||||
icon = 'icons/effects/bubblegum.dmi'
|
||||
duration = 9
|
||||
|
||||
/obj/effect/overlay/temp/bubblegum_hands/rightthumb
|
||||
/obj/effect/temp_visual/bubblegum_hands/rightthumb
|
||||
icon_state = "rightthumbgrab"
|
||||
|
||||
/obj/effect/overlay/temp/bubblegum_hands/leftthumb
|
||||
/obj/effect/temp_visual/bubblegum_hands/leftthumb
|
||||
icon_state = "leftthumbgrab"
|
||||
|
||||
/obj/effect/overlay/temp/bubblegum_hands/rightpaw
|
||||
/obj/effect/temp_visual/bubblegum_hands/rightpaw
|
||||
icon_state = "rightpawgrab"
|
||||
layer = BELOW_MOB_LAYER
|
||||
|
||||
/obj/effect/overlay/temp/bubblegum_hands/leftpaw
|
||||
/obj/effect/temp_visual/bubblegum_hands/leftpaw
|
||||
icon_state = "leftpawgrab"
|
||||
layer = BELOW_MOB_LAYER
|
||||
|
||||
/obj/effect/overlay/temp/bubblegum_hands/rightsmack
|
||||
/obj/effect/temp_visual/bubblegum_hands/rightsmack
|
||||
icon_state = "rightsmack"
|
||||
|
||||
/obj/effect/overlay/temp/bubblegum_hands/leftsmack
|
||||
/obj/effect/temp_visual/bubblegum_hands/leftsmack
|
||||
icon_state = "leftsmack"
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/blood_warp()
|
||||
@@ -316,7 +316,7 @@ Difficulty: Hard
|
||||
if(!pools.len)
|
||||
return FALSE
|
||||
|
||||
var/obj/effect/overlay/temp/decoy/DA = new /obj/effect/overlay/temp/decoy(loc,src)
|
||||
var/obj/effect/temp_visual/decoy/DA = new /obj/effect/temp_visual/decoy(loc,src)
|
||||
DA.color = "#FF0000"
|
||||
var/oldtransform = DA.transform
|
||||
DA.transform = matrix()*2
|
||||
@@ -358,7 +358,7 @@ Difficulty: Hard
|
||||
new /obj/effect/decal/cleanable/blood/bubblegum(J)
|
||||
for(var/i in 1 to range)
|
||||
J = get_step(previousturf, targetdir)
|
||||
new /obj/effect/overlay/temp/dir_setting/bloodsplatter(previousturf, get_dir(previousturf, J))
|
||||
new /obj/effect/temp_visual/dir_setting/bloodsplatter(previousturf, get_dir(previousturf, J))
|
||||
playsound(previousturf,'sound/effects/splat.ogg', 100, 1, -1)
|
||||
if(!J || !previousturf.atmos_adjacent_turfs || !previousturf.atmos_adjacent_turfs[J])
|
||||
break
|
||||
|
||||
@@ -95,7 +95,7 @@ Difficulty: Very Hard
|
||||
..()
|
||||
internal = new/obj/item/device/gps/internal/colossus(src)
|
||||
|
||||
/obj/effect/overlay/temp/at_shield
|
||||
/obj/effect/temp_visual/at_shield
|
||||
name = "anti-toolbox field"
|
||||
desc = "A shimmering forcefield protecting the colossus."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
@@ -105,14 +105,14 @@ Difficulty: Very Hard
|
||||
duration = 8
|
||||
var/target
|
||||
|
||||
/obj/effect/overlay/temp/at_shield/Initialize(mapload, new_target)
|
||||
/obj/effect/temp_visual/at_shield/Initialize(mapload, new_target)
|
||||
. = ..()
|
||||
target = new_target
|
||||
INVOKE_ASYNC(src, /atom/movable/proc/orbit, target, 0, FALSE, 0, 0, FALSE, TRUE)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/bullet_act(obj/item/projectile/P)
|
||||
if(!stat)
|
||||
var/obj/effect/overlay/temp/at_shield/AT = new /obj/effect/overlay/temp/at_shield(src.loc, src)
|
||||
var/obj/effect/temp_visual/at_shield/AT = new /obj/effect/temp_visual/at_shield(src.loc, src)
|
||||
var/random_x = rand(-32, 32)
|
||||
AT.pixel_x += random_x
|
||||
|
||||
@@ -581,7 +581,7 @@ Difficulty: Very Hard
|
||||
if(..())
|
||||
for(var/i in range(1, src))
|
||||
if(isturf(i))
|
||||
new /obj/effect/overlay/temp/cult/sparks(i)
|
||||
new /obj/effect/temp_visual/cult/sparks(i)
|
||||
continue
|
||||
if(ishuman(i))
|
||||
var/mob/living/carbon/human/H = i
|
||||
@@ -657,7 +657,7 @@ Difficulty: Very Hard
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 1500
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
AIStatus = AI_OFF
|
||||
stop_automated_movement = 1
|
||||
var/heal_power = 5
|
||||
@@ -675,7 +675,7 @@ Difficulty: Very Hard
|
||||
var/mob/living/L = target
|
||||
if(L.stat != DEAD)
|
||||
L.heal_overall_damage(heal_power, heal_power)
|
||||
new /obj/effect/overlay/temp/heal(get_turf(target), "#80F5FF")
|
||||
new /obj/effect/temp_visual/heal(get_turf(target), "#80F5FF")
|
||||
|
||||
/mob/living/simple_animal/hostile/lightgeist/ghostize()
|
||||
. = ..()
|
||||
@@ -699,7 +699,7 @@ Difficulty: Very Hard
|
||||
if(..())
|
||||
var/list/L = list()
|
||||
var/turf/T = get_step(src, dir)
|
||||
new /obj/effect/overlay/temp/emp/pulse(T)
|
||||
new /obj/effect/temp_visual/emp/pulse(T)
|
||||
for(var/i in T)
|
||||
if(istype(i, /obj/item) && !is_type_in_typecache(i, banned_items_typecache))
|
||||
var/obj/item/W = i
|
||||
|
||||
@@ -124,7 +124,7 @@ Difficulty: Medium
|
||||
target.visible_message("<span class='boldwarning'>Fire rains from the sky!</span>")
|
||||
for(var/turf/turf in range(9,get_turf(target)))
|
||||
if(prob(11))
|
||||
new /obj/effect/overlay/temp/target(turf)
|
||||
new /obj/effect/temp_visual/target(turf)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_walls()
|
||||
playsound(get_turf(src),'sound/magic/Fireball.ogg', 200, 1)
|
||||
@@ -179,7 +179,7 @@ Difficulty: Medium
|
||||
negative = FALSE
|
||||
else if(target.x == initial_x) //if their x is the same, pick a direction
|
||||
negative = prob(50)
|
||||
var/obj/effect/overlay/temp/dragon_flight/F = new /obj/effect/overlay/temp/dragon_flight(loc, negative)
|
||||
var/obj/effect/temp_visual/dragon_flight/F = new /obj/effect/temp_visual/dragon_flight(loc, negative)
|
||||
|
||||
negative = !negative //invert it for the swoop down later
|
||||
|
||||
@@ -208,7 +208,7 @@ Difficulty: Medium
|
||||
if(L.stat == DEAD)
|
||||
break //target is dead and we're on em, slam they
|
||||
if(fire_rain)
|
||||
new /obj/effect/overlay/temp/target(loc, flame_hit)
|
||||
new /obj/effect/temp_visual/target(loc, flame_hit)
|
||||
forceMove(get_step(src, get_dir(src, target)))
|
||||
if(loc == get_turf(target))
|
||||
if(!fire_rain)
|
||||
@@ -228,8 +228,8 @@ Difficulty: Medium
|
||||
else
|
||||
if(IsInRange(x, initial_x - DRAKE_SWOOP_DIRECTION_CHANGE_RANGE, initial_x - 1))
|
||||
negative = TRUE
|
||||
new /obj/effect/overlay/temp/dragon_flight/end(loc, negative)
|
||||
new /obj/effect/overlay/temp/dragon_swoop(loc)
|
||||
new /obj/effect/temp_visual/dragon_flight/end(loc, negative)
|
||||
new /obj/effect/temp_visual/dragon_swoop(loc)
|
||||
animate(src, transform = oldtransform, time = 5)
|
||||
sleep(5)
|
||||
swooping &= ~SWOOP_INVULNERABLE
|
||||
@@ -271,7 +271,7 @@ Difficulty: Medium
|
||||
invisibility = 100
|
||||
|
||||
|
||||
/obj/effect/overlay/temp/fireball
|
||||
/obj/effect/temp_visual/fireball
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "fireball"
|
||||
name = "fireball"
|
||||
@@ -281,28 +281,28 @@ Difficulty: Medium
|
||||
duration = 9
|
||||
pixel_z = DRAKE_SWOOP_HEIGHT
|
||||
|
||||
/obj/effect/overlay/temp/fireball/Initialize()
|
||||
/obj/effect/temp_visual/fireball/Initialize()
|
||||
. = ..()
|
||||
animate(src, pixel_z = 0, time = duration)
|
||||
|
||||
/obj/effect/overlay/temp/target
|
||||
/obj/effect/temp_visual/target
|
||||
icon = 'icons/mob/actions.dmi'
|
||||
icon_state = "sniper_zoom"
|
||||
layer = BELOW_MOB_LAYER
|
||||
light_range = 2
|
||||
duration = 9
|
||||
|
||||
/obj/effect/overlay/temp/target/ex_act()
|
||||
/obj/effect/temp_visual/target/ex_act()
|
||||
return
|
||||
|
||||
/obj/effect/overlay/temp/target/Initialize(mapload, list/flame_hit)
|
||||
/obj/effect/temp_visual/target/Initialize(mapload, list/flame_hit)
|
||||
. = ..()
|
||||
INVOKE_ASYNC(src, .proc/fall, flame_hit)
|
||||
|
||||
/obj/effect/overlay/temp/target/proc/fall(list/flame_hit)
|
||||
/obj/effect/temp_visual/target/proc/fall(list/flame_hit)
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T,'sound/magic/Fireball.ogg', 80, 1)
|
||||
new /obj/effect/overlay/temp/fireball(T)
|
||||
new /obj/effect/temp_visual/fireball(T)
|
||||
sleep(duration)
|
||||
if(ismineralturf(T))
|
||||
var/turf/closed/mineral/M = T
|
||||
@@ -320,7 +320,7 @@ Difficulty: Medium
|
||||
else
|
||||
L.adjustFireLoss(10) //if we've already hit them, do way less damage
|
||||
|
||||
/obj/effect/overlay/temp/dragon_swoop
|
||||
/obj/effect/temp_visual/dragon_swoop
|
||||
name = "certain death"
|
||||
desc = "Don't just stand there, move!"
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
@@ -331,7 +331,7 @@ Difficulty: Medium
|
||||
color = "#FF0000"
|
||||
duration = 5
|
||||
|
||||
/obj/effect/overlay/temp/dragon_flight
|
||||
/obj/effect/temp_visual/dragon_flight
|
||||
icon = 'icons/mob/lavaland/dragon.dmi'
|
||||
icon_state = "dragon"
|
||||
layer = ABOVE_ALL_MOB_LAYER
|
||||
@@ -339,11 +339,11 @@ Difficulty: Medium
|
||||
duration = 10
|
||||
randomdir = FALSE
|
||||
|
||||
/obj/effect/overlay/temp/dragon_flight/Initialize(mapload, negative)
|
||||
/obj/effect/temp_visual/dragon_flight/Initialize(mapload, negative)
|
||||
. = ..()
|
||||
INVOKE_ASYNC(src, .proc/flight, negative)
|
||||
|
||||
/obj/effect/overlay/temp/dragon_flight/proc/flight(negative)
|
||||
/obj/effect/temp_visual/dragon_flight/proc/flight(negative)
|
||||
if(negative)
|
||||
animate(src, pixel_x = -DRAKE_SWOOP_HEIGHT*0.10, pixel_z = DRAKE_SWOOP_HEIGHT*0.15, time = 3, easing = BOUNCE_EASING)
|
||||
else
|
||||
@@ -355,12 +355,12 @@ Difficulty: Medium
|
||||
else
|
||||
animate(src, pixel_x = DRAKE_SWOOP_HEIGHT, pixel_z = DRAKE_SWOOP_HEIGHT, time = 7)
|
||||
|
||||
/obj/effect/overlay/temp/dragon_flight/end
|
||||
/obj/effect/temp_visual/dragon_flight/end
|
||||
pixel_x = DRAKE_SWOOP_HEIGHT
|
||||
pixel_z = DRAKE_SWOOP_HEIGHT
|
||||
duration = 5
|
||||
|
||||
/obj/effect/overlay/temp/dragon_flight/end/flight(negative)
|
||||
/obj/effect/temp_visual/dragon_flight/end/flight(negative)
|
||||
if(negative)
|
||||
pixel_x = -DRAKE_SWOOP_HEIGHT
|
||||
animate(src, pixel_x = -16, pixel_z = 0, time = 5)
|
||||
|
||||
@@ -150,7 +150,7 @@ Difficulty: Hard
|
||||
var/prevloc = loc
|
||||
. = ..()
|
||||
if(!stat && .)
|
||||
var/obj/effect/overlay/temp/hierophant/squares/HS = new /obj/effect/overlay/temp/hierophant/squares(prevloc)
|
||||
var/obj/effect/temp_visual/hierophant/squares/HS = new /obj/effect/temp_visual/hierophant/squares(prevloc)
|
||||
HS.dir = dir
|
||||
playsound(loc, 'sound/mecha/mechmove04.ogg', 150, 1, -4)
|
||||
if(target)
|
||||
@@ -250,7 +250,7 @@ Difficulty: Hard
|
||||
pickedtarget = pick_n_take(targets)
|
||||
if(!istype(pickedtarget) || pickedtarget.stat == DEAD)
|
||||
pickedtarget = target
|
||||
var/obj/effect/overlay/temp/hierophant/chaser/C = new /obj/effect/overlay/temp/hierophant/chaser(loc, src, pickedtarget, chaser_speed, FALSE)
|
||||
var/obj/effect/temp_visual/hierophant/chaser/C = new /obj/effect/temp_visual/hierophant/chaser(loc, src, pickedtarget, chaser_speed, FALSE)
|
||||
C.moving = 3
|
||||
C.moving_dir = pick_n_take(cardinal_copy)
|
||||
sleep(10)
|
||||
@@ -280,10 +280,10 @@ Difficulty: Hard
|
||||
else
|
||||
INVOKE_ASYNC(src, .proc/diagonal_blasts, target)
|
||||
else if(chaser_cooldown < world.time) //if chasers are off cooldown, fire some!
|
||||
var/obj/effect/overlay/temp/hierophant/chaser/C = new /obj/effect/overlay/temp/hierophant/chaser(loc, src, target, chaser_speed, FALSE)
|
||||
var/obj/effect/temp_visual/hierophant/chaser/C = new /obj/effect/temp_visual/hierophant/chaser(loc, src, target, chaser_speed, FALSE)
|
||||
chaser_cooldown = world.time + initial(chaser_cooldown)
|
||||
if((prob(anger_modifier) || target.Adjacent(src)) && target != src)
|
||||
var/obj/effect/overlay/temp/hierophant/chaser/OC = new /obj/effect/overlay/temp/hierophant/chaser(loc, src, target, max(1.5, 5 - anger_modifier * 0.07), FALSE)
|
||||
var/obj/effect/temp_visual/hierophant/chaser/OC = new /obj/effect/temp_visual/hierophant/chaser(loc, src, target, max(1.5, 5 - anger_modifier * 0.07), FALSE)
|
||||
OC.moving = 4
|
||||
OC.moving_dir = pick(GLOB.cardinal - C.moving_dir)
|
||||
else //just release a burst of power
|
||||
@@ -293,10 +293,10 @@ Difficulty: Hard
|
||||
var/turf/T = get_turf(victim)
|
||||
if(!T)
|
||||
return
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph/diagonal(T, src)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/diagonal(T, src)
|
||||
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
|
||||
sleep(2)
|
||||
new /obj/effect/overlay/temp/hierophant/blast(T, src, FALSE)
|
||||
new /obj/effect/temp_visual/hierophant/blast(T, src, FALSE)
|
||||
for(var/d in GLOB.diagonals)
|
||||
INVOKE_ASYNC(src, .proc/blast_wall, T, d)
|
||||
|
||||
@@ -304,10 +304,10 @@ Difficulty: Hard
|
||||
var/turf/T = get_turf(victim)
|
||||
if(!T)
|
||||
return
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph/cardinal(T, src)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/cardinal(T, src)
|
||||
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
|
||||
sleep(2)
|
||||
new /obj/effect/overlay/temp/hierophant/blast(T, src, FALSE)
|
||||
new /obj/effect/temp_visual/hierophant/blast(T, src, FALSE)
|
||||
for(var/d in GLOB.cardinal)
|
||||
INVOKE_ASYNC(src, .proc/blast_wall, T, d)
|
||||
|
||||
@@ -315,10 +315,10 @@ Difficulty: Hard
|
||||
var/turf/T = get_turf(victim)
|
||||
if(!T)
|
||||
return
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph(T, src)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph(T, src)
|
||||
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
|
||||
sleep(2)
|
||||
new /obj/effect/overlay/temp/hierophant/blast(T, src, FALSE)
|
||||
new /obj/effect/temp_visual/hierophant/blast(T, src, FALSE)
|
||||
for(var/d in GLOB.alldirs)
|
||||
INVOKE_ASYNC(src, .proc/blast_wall, T, d)
|
||||
|
||||
@@ -327,7 +327,7 @@ Difficulty: Hard
|
||||
var/turf/previousturf = T
|
||||
var/turf/J = get_step(previousturf, set_dir)
|
||||
for(var/i in 1 to range)
|
||||
new /obj/effect/overlay/temp/hierophant/blast(J, src, FALSE)
|
||||
new /obj/effect/temp_visual/hierophant/blast(J, src, FALSE)
|
||||
previousturf = J
|
||||
J = get_step(previousturf, set_dir)
|
||||
|
||||
@@ -342,8 +342,8 @@ Difficulty: Hard
|
||||
INVOKE_ASYNC(src, .proc/arena_squares, 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)
|
||||
new /obj/effect/overlay/temp/hierophant/blast(t, src, FALSE)
|
||||
new /obj/effect/temp_visual/hierophant/wall(t)
|
||||
new /obj/effect/temp_visual/hierophant/blast(t, src, FALSE)
|
||||
if(get_dist(src, T) >= 11) //hey you're out of range I need to get closer to you!
|
||||
INVOKE_ASYNC(src, .proc/blink, T)
|
||||
|
||||
@@ -351,7 +351,7 @@ Difficulty: Hard
|
||||
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 = new /obj/effect/overlay/temp/hierophant/squares(J)
|
||||
var/obj/effect/temp_visual/hierophant/squares/HS = new /obj/effect/temp_visual/hierophant/squares(J)
|
||||
HS.dir = set_dir
|
||||
previousturf = J
|
||||
J = get_step(previousturf, set_dir)
|
||||
@@ -362,19 +362,19 @@ Difficulty: Hard
|
||||
return
|
||||
var/turf/T = get_turf(victim)
|
||||
var/turf/source = get_turf(src)
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph(T, src)
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph(source, src)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph(T, src)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph(source, src)
|
||||
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...
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph/teleport(T, src)
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph/teleport(source, src)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, src)
|
||||
for(var/t in RANGE_TURFS(1, T))
|
||||
var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, src, FALSE)
|
||||
var/obj/effect/temp_visual/hierophant/blast/B = new /obj/effect/temp_visual/hierophant/blast(t, src, FALSE)
|
||||
B.damage = 30
|
||||
for(var/t in RANGE_TURFS(1, source))
|
||||
var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, src, FALSE)
|
||||
var/obj/effect/temp_visual/hierophant/blast/B = new /obj/effect/temp_visual/hierophant/blast(t, src, FALSE)
|
||||
B.damage = 30
|
||||
animate(src, alpha = 0, time = 2, easing = EASE_OUT) //fade out
|
||||
sleep(1)
|
||||
@@ -396,11 +396,11 @@ Difficulty: Hard
|
||||
var/turf/T = get_turf(victim)
|
||||
if(!T)
|
||||
return
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph(T, src)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph(T, src)
|
||||
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
|
||||
sleep(2)
|
||||
for(var/t in RANGE_TURFS(1, T))
|
||||
new /obj/effect/overlay/temp/hierophant/blast(t, src, FALSE)
|
||||
new /obj/effect/temp_visual/hierophant/blast(t, src, FALSE)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/proc/burst(turf/original) //release a wave of blasts
|
||||
playsound(original,'sound/machines/AirlockOpen.ogg', 200, 1)
|
||||
@@ -413,7 +413,7 @@ Difficulty: Hard
|
||||
if(dist > last_dist)
|
||||
last_dist = dist
|
||||
sleep(1 + min(burst_range - last_dist, 12) * 0.5) //gets faster as it gets further out
|
||||
new /obj/effect/overlay/temp/hierophant/blast(T, src, FALSE)
|
||||
new /obj/effect/temp_visual/hierophant/blast(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)
|
||||
if(!istype(A) || get_dist(A, src) <= 2)
|
||||
@@ -421,29 +421,29 @@ Difficulty: Hard
|
||||
blink(A)
|
||||
|
||||
//Hierophant overlays
|
||||
/obj/effect/overlay/temp/hierophant
|
||||
/obj/effect/temp_visual/hierophant
|
||||
name = "vortex energy"
|
||||
layer = BELOW_MOB_LAYER
|
||||
var/mob/living/caster //who made this, anyway
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/Initialize(mapload, new_caster)
|
||||
/obj/effect/temp_visual/hierophant/Initialize(mapload, new_caster)
|
||||
. = ..()
|
||||
if(new_caster)
|
||||
caster = new_caster
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/squares
|
||||
/obj/effect/temp_visual/hierophant/squares
|
||||
icon_state = "hierophant_squares"
|
||||
duration = 3
|
||||
light_range = 1
|
||||
randomdir = FALSE
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/squares/Initialize(mapload, new_caster)
|
||||
/obj/effect/temp_visual/hierophant/squares/Initialize(mapload, new_caster)
|
||||
. = ..()
|
||||
if(ismineralturf(loc))
|
||||
var/turf/closed/mineral/M = loc
|
||||
M.gets_drilled(caster)
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/wall //smoothing and pooling were not friends, but pooling is dead.
|
||||
/obj/effect/temp_visual/hierophant/wall //smoothing and pooling were not friends, but pooling is dead.
|
||||
name = "vortex wall"
|
||||
icon = 'icons/turf/walls/hierophant_wall_temp.dmi'
|
||||
icon_state = "wall"
|
||||
@@ -451,21 +451,21 @@ Difficulty: Hard
|
||||
duration = 100
|
||||
smooth = SMOOTH_TRUE
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/wall/Initialize(mapload, new_caster)
|
||||
/obj/effect/temp_visual/hierophant/wall/Initialize(mapload, new_caster)
|
||||
. = ..()
|
||||
queue_smooth_neighbors(src)
|
||||
queue_smooth(src)
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/wall/Destroy()
|
||||
/obj/effect/temp_visual/hierophant/wall/Destroy()
|
||||
queue_smooth_neighbors(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/wall/CanPass(atom/movable/mover, turf/target, height = 0)
|
||||
/obj/effect/temp_visual/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.
|
||||
/obj/effect/temp_visual/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
|
||||
var/turf/targetturf //what turf the target is actually on
|
||||
@@ -479,9 +479,9 @@ Difficulty: Hard
|
||||
var/currently_seeking = FALSE
|
||||
var/friendly_fire_check = FALSE //if blasts produced apply friendly fire
|
||||
var/monster_damage_boost = TRUE
|
||||
var/damage = 10
|
||||
var/damage = 10
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/chaser/Initialize(mapload, new_caster, new_target, new_speed, is_friendly_fire)
|
||||
/obj/effect/temp_visual/hierophant/chaser/Initialize(mapload, new_caster, new_target, new_speed, is_friendly_fire)
|
||||
. = ..()
|
||||
target = new_target
|
||||
friendly_fire_check = is_friendly_fire
|
||||
@@ -489,14 +489,14 @@ Difficulty: Hard
|
||||
speed = new_speed
|
||||
addtimer(CALLBACK(src, .proc/seek_target), 1)
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/chaser/proc/get_target_dir()
|
||||
/obj/effect/temp_visual/hierophant/chaser/proc/get_target_dir()
|
||||
. = get_cardinal_dir(src, targetturf)
|
||||
if((. != previous_moving_dir && . == more_previouser_moving_dir) || . == 0) //we're alternating, recalculate
|
||||
var/list/cardinal_copy = GLOB.cardinal.Copy()
|
||||
cardinal_copy -= more_previouser_moving_dir
|
||||
. = pick(cardinal_copy)
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/chaser/proc/seek_target()
|
||||
/obj/effect/temp_visual/hierophant/chaser/proc/seek_target()
|
||||
if(!currently_seeking)
|
||||
currently_seeking = TRUE
|
||||
targetturf = get_turf(target)
|
||||
@@ -523,33 +523,32 @@ Difficulty: Hard
|
||||
moving--
|
||||
sleep(speed)
|
||||
targetturf = get_turf(target)
|
||||
/obj/effect/overlay/temp/hierophant/chaser/proc/make_blast()
|
||||
var/obj/effect/overlay/temp/hierophant/blast/B = new(loc, caster, friendly_fire_check)
|
||||
B.damage = damage
|
||||
B.monster_damage_boost = monster_damage_boost
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/telegraph
|
||||
/obj/effect/temp_visual/hierophant/chaser/proc/make_blast()
|
||||
new /obj/effect/temp_visual/hierophant/blast(loc, caster, friendly_fire_check)
|
||||
|
||||
/obj/effect/temp_visual/hierophant/telegraph
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "hierophant_telegraph"
|
||||
pixel_x = -32
|
||||
pixel_y = -32
|
||||
duration = 3
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/telegraph/diagonal
|
||||
/obj/effect/temp_visual/hierophant/telegraph/diagonal
|
||||
icon_state = "hierophant_telegraph_diagonal"
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/telegraph/cardinal
|
||||
/obj/effect/temp_visual/hierophant/telegraph/cardinal
|
||||
icon_state = "hierophant_telegraph_cardinal"
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/telegraph/teleport
|
||||
/obj/effect/temp_visual/hierophant/telegraph/teleport
|
||||
icon_state = "hierophant_telegraph_teleport"
|
||||
duration = 9
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/telegraph/edge
|
||||
/obj/effect/temp_visual/hierophant/telegraph/edge
|
||||
icon_state = "hierophant_telegraph_edge"
|
||||
duration = 40
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/blast
|
||||
/obj/effect/temp_visual/hierophant/blast
|
||||
icon_state = "hierophant_blast"
|
||||
name = "vortex blast"
|
||||
light_range = 1
|
||||
@@ -561,7 +560,7 @@ Difficulty: Hard
|
||||
var/friendly_fire_check = FALSE
|
||||
var/bursting = FALSE //if we're bursting and need to hit anyone crossing us
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/blast/Initialize(mapload, new_caster, friendly_fire)
|
||||
/obj/effect/temp_visual/hierophant/blast/Initialize(mapload, new_caster, friendly_fire)
|
||||
. = ..()
|
||||
friendly_fire_check = friendly_fire
|
||||
if(new_caster)
|
||||
@@ -571,7 +570,7 @@ Difficulty: Hard
|
||||
M.gets_drilled(caster)
|
||||
INVOKE_ASYNC(src, .proc/blast)
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/blast/proc/blast()
|
||||
/obj/effect/temp_visual/hierophant/blast/proc/blast()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
return
|
||||
@@ -582,12 +581,12 @@ Difficulty: Hard
|
||||
sleep(1.3) //slightly forgiving; the burst animation is 1.5 deciseconds
|
||||
bursting = FALSE //we no longer damage crossers
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/blast/Crossed(atom/movable/AM)
|
||||
/obj/effect/temp_visual/hierophant/blast/Crossed(atom/movable/AM)
|
||||
..()
|
||||
if(bursting)
|
||||
do_damage(get_turf(src))
|
||||
|
||||
/obj/effect/overlay/temp/hierophant/blast/proc/do_damage(turf/T)
|
||||
/obj/effect/temp_visual/hierophant/blast/proc/do_damage(turf/T)
|
||||
for(var/mob/living/L in T.contents - hit_things) //find and damage mobs...
|
||||
hit_things += L
|
||||
if((friendly_fire_check && caster && caster.faction_check_mob(L)) || L.stat == DEAD)
|
||||
@@ -634,7 +633,7 @@ Difficulty: Hard
|
||||
INVOKE_ASYNC(H, /obj/item/weapon/hierophant_club.proc/prepare_icon_update)
|
||||
if(do_after(user, 50, target = src))
|
||||
playsound(src,'sound/magic/Blind.ogg', 200, 1, -4)
|
||||
new /obj/effect/overlay/temp/hierophant/telegraph/teleport(get_turf(src), user)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(get_turf(src), user)
|
||||
to_chat(user, "<span class='hierophant_warning'>You collect [src], reattaching it to the club!</span>")
|
||||
H.beacon = null
|
||||
user.update_action_buttons_icon()
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
maxHealth = 1000
|
||||
a_intent = INTENT_HARM
|
||||
sentience_type = SENTIENCE_BOSS
|
||||
environment_smash = 3
|
||||
environment_smash = ENVIRONMENT_SMASH_RWALLS
|
||||
obj_damage = 400
|
||||
light_range = 3
|
||||
faction = list("mining", "boss")
|
||||
|
||||
@@ -203,7 +203,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
|
||||
if(..())
|
||||
emote_see = list("aims menacingly")
|
||||
obj_damage = 0
|
||||
environment_smash = 0 //needed? seems weird for them to do so
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE //needed? seems weird for them to do so
|
||||
ranged = 1
|
||||
retreat_distance = 1 //just enough to shoot
|
||||
minimum_distance = 6
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
faction = list("mining")
|
||||
weather_immunities = list("lava","ash")
|
||||
obj_damage = 30
|
||||
environment_smash = 2
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
response_help = "pokes"
|
||||
@@ -215,7 +215,7 @@
|
||||
ranged_cooldown = 0
|
||||
ranged_cooldown_time = 20
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
retreat_distance = 3
|
||||
minimum_distance = 3
|
||||
pass_flags = PASSTABLE
|
||||
@@ -334,7 +334,7 @@
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
throw_message = "falls right through the strange body of the"
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
pass_flags = PASSTABLE
|
||||
del_on_death = 1
|
||||
|
||||
@@ -595,7 +595,7 @@
|
||||
aggro_vision_range = 9
|
||||
idle_vision_range = 5
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
var/wumbo = 0
|
||||
var/inflate_cooldown = 0
|
||||
loot = list(/obj/item/asteroid/fugu_gland{layer = ABOVE_MOB_LAYER})
|
||||
@@ -640,7 +640,7 @@
|
||||
minimum_distance = 1
|
||||
move_to_delay = 6
|
||||
transform *= 2
|
||||
environment_smash = 2
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
speed = 1
|
||||
addtimer(CALLBACK(src, .proc/Deflate), 100)
|
||||
@@ -660,7 +660,7 @@
|
||||
move_to_delay = 2
|
||||
transform /= 2
|
||||
inflate_cooldown = 4
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
speed = 0
|
||||
|
||||
@@ -800,11 +800,12 @@
|
||||
del_on_death = 1
|
||||
stat_attack = 1
|
||||
robust_searching = 1
|
||||
var/can_infest_dead = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/Life()
|
||||
if(isturf(loc))
|
||||
for(var/mob/living/carbon/human/H in view(src,1)) //Only for corpse right next to/on same tile
|
||||
if(H.stat == UNCONSCIOUS)
|
||||
if(H.stat == UNCONSCIOUS || (can_infest_dead && H.stat == DEAD))
|
||||
infest(H)
|
||||
..()
|
||||
|
||||
@@ -818,6 +819,58 @@
|
||||
H.forceMove(L)
|
||||
qdel(src)
|
||||
|
||||
//Advanced Legion is slightly tougher to kill and can raise corpses (revive other legions)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/advanced
|
||||
stat_attack = 2
|
||||
maxHealth = 120
|
||||
health = 120
|
||||
brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/advanced
|
||||
icon_state = "dwarf_legion"
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/advanced
|
||||
stat_attack = 2
|
||||
can_infest_dead = TRUE
|
||||
|
||||
//Legion that spawns Legions
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/legion
|
||||
name = "legion"
|
||||
desc = "One of many."
|
||||
icon = 'icons/mob/lavaland/dragon.dmi'
|
||||
icon_state = "legion"
|
||||
icon_living = "legion"
|
||||
icon_dead = "legion"
|
||||
health = 450
|
||||
maxHealth = 450
|
||||
max_mobs = 3
|
||||
spawn_time = 200
|
||||
spawn_text = "peels itself off from"
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
anchored = FALSE
|
||||
AIStatus = AI_ON
|
||||
stop_automated_movement = FALSE
|
||||
wander = TRUE
|
||||
maxbodytemp = INFINITY
|
||||
layer = MOB_LAYER
|
||||
del_on_death = TRUE
|
||||
sentience_type = SENTIENCE_BOSS
|
||||
loot = list(/obj/item/organ/hivelord_core/legion = 3, /obj/effect/mob_spawn/human/corpse/damaged = 5)
|
||||
move_to_delay = 14
|
||||
vision_range = 5
|
||||
aggro_vision_range = 9
|
||||
idle_vision_range = 5
|
||||
speed = 3
|
||||
faction = list("mining")
|
||||
weather_immunities = list("lava","ash")
|
||||
obj_damage = 30
|
||||
environment_smash = ENVIRONMENT_SMASH_STRUCTURES
|
||||
see_in_dark = 8
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
|
||||
//Organ
|
||||
|
||||
/obj/item/organ/hivelord_core/legion
|
||||
name = "legion's soul"
|
||||
desc = "A strange rock that still crackles with power... its \
|
||||
@@ -871,7 +924,7 @@
|
||||
speak_chance = 1
|
||||
turns_per_move = 8
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
move_to_delay = 15
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
attacktext = "chomps"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
faction = list("mushroom")
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
stat_attack = 2
|
||||
mouse_opacity = 1
|
||||
speed = 1
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
faction = list("hostile")
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
mob_size = MOB_SIZE_TINY
|
||||
movement_type = FLYING
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
attacktext = "attacks"
|
||||
attack_sound = 'sound/items/bikehorn.ogg'
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
del_on_death = 1
|
||||
loot = list(/obj/effect/mob_spawn/human/clown/corpse)
|
||||
|
||||
|
||||
@@ -20,6 +20,6 @@
|
||||
attacktext = "hits"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
del_on_death = 0
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
speed = 0
|
||||
stat_attack = 1
|
||||
robust_searching = 1
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
harm_intent_damage = 5
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/stickman/Initialize(mapload, var/wizard_summoned)
|
||||
..()
|
||||
new /obj/effect/overlay/temp/paper_scatter(src)
|
||||
new /obj/effect/temp_visual/paper_scatter(src)
|
||||
summoned_by_wizard = wizard_summoned
|
||||
|
||||
/mob/living/simple_animal/hostile/stickman/death()
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
minimum_distance = 10
|
||||
retreat_distance = 10
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/civilian/Aggro()
|
||||
..()
|
||||
@@ -150,7 +150,7 @@
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
attacktext = "cuts"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
faction = list("syndicate")
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
var/attacktext = "attacks"
|
||||
var/attack_sound = null
|
||||
var/friendly = "nuzzles" //If the mob does no damage with it's attack
|
||||
var/environment_smash = 0 //Set to 1 to allow breaking of crates,lockers,racks,tables; 2 for walls; 3 for Rwalls
|
||||
var/environment_smash = ENVIRONMENT_SMASH_NONE //Set to 1 to allow breaking of crates,lockers,racks,tables; 2 for walls; 3 for Rwalls
|
||||
|
||||
var/speed = 1 //LETS SEE IF I CAN SET SPEEDS FOR SIMPLE MOBS WITHOUT DESTROYING EVERYTHING. Higher speed is slower, negative speed is faster
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
|
||||
/mob/living/simple_animal/gib_animation()
|
||||
if(icon_gib)
|
||||
new /obj/effect/overlay/temp/gib_animation/animal(loc, icon_gib)
|
||||
new /obj/effect/temp_visual/gib_animation/animal(loc, icon_gib)
|
||||
|
||||
/mob/living/simple_animal/say_mod(input, message_mode)
|
||||
if(speak_emote && speak_emote.len)
|
||||
|
||||
@@ -293,14 +293,14 @@
|
||||
|
||||
if(!src || !isturf(src.loc) || !(A in view(src.loc)))
|
||||
return 0
|
||||
if(istype(A, /obj/effect/overlay/temp/point))
|
||||
if(istype(A, /obj/effect/temp_visual/point))
|
||||
return 0
|
||||
|
||||
var/tile = get_turf(A)
|
||||
if (!tile)
|
||||
return 0
|
||||
|
||||
new /obj/effect/overlay/temp/point(A,invisibility)
|
||||
new /obj/effect/temp_visual/point(A,invisibility)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -242,12 +242,12 @@
|
||||
L.loc = locate(locx,locy,mobloc.z)
|
||||
var/limit = 2//For only two trailing shadows.
|
||||
for(var/turf/T in getline(mobloc, L.loc))
|
||||
new /obj/effect/overlay/temp/dir_setting/ninja/shadow(T, L.dir)
|
||||
new /obj/effect/temp_visual/dir_setting/ninja/shadow(T, L.dir)
|
||||
limit--
|
||||
if(limit<=0)
|
||||
break
|
||||
else
|
||||
new /obj/effect/overlay/temp/dir_setting/ninja/shadow(mobloc, L.dir)
|
||||
new /obj/effect/temp_visual/dir_setting/ninja/shadow(mobloc, L.dir)
|
||||
L.loc = get_step(L, direct)
|
||||
L.setDir(direct)
|
||||
if(3) //Incorporeal move, but blocked by holy-watered tiles and salt piles.
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
cut_overlays()
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
new /obj/effect/overlay/temp/monkeyify(loc)
|
||||
new /obj/effect/temp_visual/monkeyify(loc)
|
||||
sleep(22)
|
||||
var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( loc )
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
icon = null
|
||||
cut_overlays()
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
new /obj/effect/overlay/temp/monkeyify/humanify(loc)
|
||||
new /obj/effect/temp_visual/monkeyify/humanify(loc)
|
||||
sleep(22)
|
||||
var/mob/living/carbon/human/O = new( loc )
|
||||
for(var/obj/item/C in O.loc)
|
||||
|
||||
@@ -72,7 +72,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
M.dropItemToGround(W)
|
||||
|
||||
playsound(M.loc, 'sound/effects/sparks4.ogg', 50, 1)
|
||||
new /obj/effect/overlay/temp/dir_setting/ninja/phase/out(get_turf(M), M.dir)
|
||||
new /obj/effect/temp_visual/dir_setting/ninja/phase/out(get_turf(M), M.dir)
|
||||
|
||||
visible_message("[M] suddenly vanishes!")
|
||||
M.forceMove(pick(GLOB.holdingfacility)) //Throw mob in to the holding facility.
|
||||
@@ -86,7 +86,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
spark_system.start()
|
||||
playsound(M.loc, 'sound/effects/phasein.ogg', 25, 1)
|
||||
playsound(M.loc, 'sound/effects/sparks2.ogg', 50, 1)
|
||||
new /obj/effect/overlay/temp/dir_setting/ninja/phase(get_turf(M), M.dir)
|
||||
new /obj/effect/temp_visual/dir_setting/ninja/phase(get_turf(M), M.dir)
|
||||
qdel(src)
|
||||
|
||||
else//And they are free.
|
||||
|
||||
@@ -27,7 +27,7 @@ Contents:
|
||||
|
||||
if(destination && isturf(mobloc))//So we don't teleport out of containers
|
||||
playsound(H.loc, "sparks", 50, 1)
|
||||
new /obj/effect/overlay/temp/dir_setting/ninja/phase/out(get_turf(H), H.dir)
|
||||
new /obj/effect/temp_visual/dir_setting/ninja/phase/out(get_turf(H), H.dir)
|
||||
|
||||
handle_teleport_grab(destination, H)
|
||||
H.loc = destination
|
||||
@@ -35,7 +35,7 @@ Contents:
|
||||
spark_system.start()
|
||||
playsound(H.loc, 'sound/effects/phasein.ogg', 25, 1)
|
||||
playsound(H.loc, "sparks", 50, 1)
|
||||
new /obj/effect/overlay/temp/dir_setting/ninja/phase(get_turf(H), H.dir)
|
||||
new /obj/effect/temp_visual/dir_setting/ninja/phase(get_turf(H), H.dir)
|
||||
|
||||
destination.phase_damage_creatures(20,H)//Paralyse and damage mobs and mechas on the turf
|
||||
s_coold = 1
|
||||
@@ -55,7 +55,7 @@ Contents:
|
||||
var/turf/mobloc = get_turf(H.loc)//To make sure that certain things work properly below.
|
||||
if(!T.density && isturf(mobloc))
|
||||
playsound(H.loc, "sparks", 50, 1)
|
||||
new /obj/effect/overlay/temp/dir_setting/ninja/phase/out(get_turf(H), H.dir)
|
||||
new /obj/effect/temp_visual/dir_setting/ninja/phase/out(get_turf(H), H.dir)
|
||||
|
||||
handle_teleport_grab(T, H)
|
||||
H.forceMove(T)
|
||||
@@ -63,7 +63,7 @@ Contents:
|
||||
spark_system.start()
|
||||
playsound(H.loc, 'sound/effects/phasein.ogg', 25, 1)
|
||||
playsound(H.loc, "sparks", 50, 1)
|
||||
new /obj/effect/overlay/temp/dir_setting/ninja/phase(get_turf(H), H.dir)
|
||||
new /obj/effect/temp_visual/dir_setting/ninja/phase(get_turf(H), H.dir)
|
||||
|
||||
T.phase_damage_creatures(20,H)//Paralyse and damage mobs and mechas on the turf
|
||||
s_coold = 1
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
var/info //What's actually written on the paper.
|
||||
var/info_links //A different version of the paper which includes html links at fields and EOF
|
||||
var/stamps //The (text for the) stamps on the paper.
|
||||
var/fields //Amount of user created fields
|
||||
var/fields = 0 //Amount of user created fields
|
||||
var/list/stamped
|
||||
var/rigged = 0
|
||||
var/spam_flag = 0
|
||||
|
||||
@@ -53,8 +53,8 @@
|
||||
desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure."
|
||||
icon = 'icons/obj/supermatter.dmi'
|
||||
icon_state = "darkmatter_shard"
|
||||
density = 1
|
||||
anchored = 0
|
||||
density = TRUE
|
||||
anchored = FALSE
|
||||
light_range = 4
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT."
|
||||
var/explosion_point = 900
|
||||
|
||||
var/emergency_issued = 0
|
||||
var/emergency_issued = FALSE
|
||||
|
||||
var/explosion_power = 12
|
||||
var/temp_factor = 30
|
||||
@@ -116,12 +116,12 @@
|
||||
var/common_channel = null
|
||||
|
||||
//for logging
|
||||
var/has_been_powered = 0
|
||||
var/has_reached_emergency = 0
|
||||
var/has_been_powered = FALSE
|
||||
var/has_reached_emergency = FALSE
|
||||
|
||||
// For making hugbox supermatter
|
||||
var/takes_damage = 1
|
||||
var/produces_gas = 1
|
||||
var/takes_damage = TRUE
|
||||
var/produces_gas = TRUE
|
||||
var/obj/effect/countdown/supermatter/countdown
|
||||
|
||||
/obj/machinery/power/supermatter_shard/make_frozen_visual()
|
||||
@@ -385,7 +385,7 @@
|
||||
/obj/machinery/power/supermatter_shard/bullet_act(obj/item/projectile/Proj)
|
||||
var/turf/L = loc
|
||||
if(!istype(L)) // We don't run process() when we are in space
|
||||
return 0 // This stops people from being able to really power up the supermatter
|
||||
return FALSE // This stops people from being able to really power up the supermatter
|
||||
// Then bring it inside to explode instantly upon landing on a valid turf.
|
||||
if(!istype(Proj.firer, /obj/machinery/power/emitter))
|
||||
investigate_log("has been hit by [Proj] fired by [Proj.firer]", "supermatter")
|
||||
@@ -394,10 +394,10 @@
|
||||
if(!has_been_powered)
|
||||
investigate_log("has been powered for the first time.", "supermatter")
|
||||
message_admins("[src] has been powered for the first time [ADMIN_JMP(src)].")
|
||||
has_been_powered = 1
|
||||
has_been_powered = TRUE
|
||||
else if(takes_damage)
|
||||
damage += Proj.damage * config_bullet_energy
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/power/supermatter_shard/singularity_act()
|
||||
var/gain = 100
|
||||
@@ -409,7 +409,7 @@
|
||||
M << 'sound/effects/supermatter.ogg' //everyone goan know bout this
|
||||
to_chat(M, "<span class='boldannounce'>A horrible screeching fills your ears, and a wave of dread washes over you...</span>")
|
||||
qdel(src)
|
||||
return(gain)
|
||||
return gain
|
||||
|
||||
/obj/machinery/power/supermatter_shard/blob_act(obj/structure/blob/B)
|
||||
if(B && !isspaceturf(loc)) //does nothing in space
|
||||
@@ -450,7 +450,7 @@
|
||||
user.visible_message("<span class='danger'>\The [user] reaches out and touches \the [src], inducing a resonance... [user.p_their()] body starts to glow and bursts into flames before flashing into ash.</span>",\
|
||||
"<span class='userdanger'>You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"</span>",\
|
||||
"<span class='italics'>You hear an unearthly noise as a wave of heat washes over you.</span>")
|
||||
|
||||
investigate_log("has been attacked (hand) by [user]", "supermatter")
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
|
||||
Consume(user)
|
||||
@@ -464,11 +464,11 @@
|
||||
if(!istype(W) || (W.flags & ABSTRACT) || !istype(user))
|
||||
return
|
||||
if(user.drop_item(W))
|
||||
Consume(W)
|
||||
user.visible_message("<span class='danger'>As [user] touches \the [src] with \a [W], silence fills the room...</span>",\
|
||||
"<span class='userdanger'>You touch \the [src] with \the [W], and everything suddenly goes silent.</span>\n<span class='notice'>\The [W] flashes into dust as you flinch away from \the [src].</span>",\
|
||||
"<span class='italics'>Everything suddenly goes silent.</span>")
|
||||
|
||||
investigate_log("has been attacked ([W]) by [user]", "supermatter")
|
||||
Consume(W)
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
|
||||
radiation_pulse(get_turf(src), 1, 1, 150, 1)
|
||||
@@ -517,15 +517,15 @@
|
||||
// When you wanna make a supermatter shard for the dramatic effect, but
|
||||
// don't want it exploding suddenly
|
||||
/obj/machinery/power/supermatter_shard/hugbox
|
||||
takes_damage = 0
|
||||
produces_gas = 0
|
||||
takes_damage = FALSE
|
||||
produces_gas = FALSE
|
||||
|
||||
/obj/machinery/power/supermatter_shard/crystal
|
||||
name = "supermatter crystal"
|
||||
desc = "A strangely translucent and iridescent crystal."
|
||||
base_icon_state = "darkmatter"
|
||||
icon_state = "darkmatter"
|
||||
anchored = 1
|
||||
anchored = TRUE
|
||||
gasefficency = 0.15
|
||||
explosion_power = 35
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
var/randomspread = 0 //Randomspread for automatics
|
||||
var/delay = 0 //Delay for energy weapons
|
||||
var/click_cooldown_override = 0 //Override this to make your gun have a faster fire rate, in tenths of a second. 4 is the default gun cooldown.
|
||||
var/firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect //the visual effect appearing when the ammo is fired.
|
||||
var/firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect //the visual effect appearing when the ammo is fired.
|
||||
|
||||
|
||||
/obj/item/ammo_casing/New()
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
icon_state = "s-casing-live"
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect/energy
|
||||
firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/energy
|
||||
|
||||
/obj/item/ammo_casing/caseless/laser/gatling
|
||||
projectile_type = /obj/item/projectile/beam/weak
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot.
|
||||
var/select_name = "energy"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect/energy
|
||||
firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/energy
|
||||
|
||||
/obj/item/ammo_casing/energy/chameleon
|
||||
projectile_type = /obj/item/projectile/energy/chameleon
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "magic casing"
|
||||
desc = "I didn't even know magic needed ammo..."
|
||||
projectile_type = /obj/item/projectile/magic
|
||||
firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect/magic
|
||||
firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/magic
|
||||
|
||||
/obj/item/ammo_casing/magic/change
|
||||
projectile_type = /obj/item/projectile/magic/change
|
||||
@@ -89,4 +89,4 @@
|
||||
select_name = "spraydown"
|
||||
fire_sound = 'sound/weapons/gunshot_smg.ogg'
|
||||
e_cost = 20
|
||||
firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect
|
||||
firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
if(ismineralturf(target_turf))
|
||||
var/turf/closed/mineral/M = target_turf
|
||||
M.gets_drilled(firer)
|
||||
var/obj/effect/overlay/temp/kinetic_blast/K = new /obj/effect/overlay/temp/kinetic_blast(target_turf)
|
||||
var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/kinetic_blast(target_turf)
|
||||
K.color = color
|
||||
for(var/obj/item/borg/upgrade/modkit/M in kinetic_modules)
|
||||
if(QDELETED(M)) //whoever shot this was very, very unfortunate.
|
||||
@@ -358,7 +358,7 @@
|
||||
/obj/item/borg/upgrade/modkit/aoe/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target)
|
||||
if(stats_stolen)
|
||||
return
|
||||
new /obj/effect/overlay/temp/explosion/fast(target_turf)
|
||||
new /obj/effect/temp_visual/explosion/fast(target_turf)
|
||||
if(turf_aoe)
|
||||
for(var/T in RANGE_TURFS(1, target_turf) - target_turf)
|
||||
if(ismineralturf(T))
|
||||
@@ -370,7 +370,6 @@
|
||||
L.apply_damage(K.damage*modifier, K.damage_type, K.def_zone, armor)
|
||||
to_chat(L, "<span class='userdanger'>You're struck by a [K.name]!</span>")
|
||||
|
||||
|
||||
/obj/item/borg/upgrade/modkit/aoe/turfs
|
||||
name = "mining explosion"
|
||||
desc = "Causes the kinetic accelerator to destroy rock in an AoE."
|
||||
@@ -392,11 +391,11 @@
|
||||
//Indoors
|
||||
/obj/item/borg/upgrade/modkit/indoors
|
||||
name = "decrease pressure penalty"
|
||||
desc = "Increases the damage a kinetic accelerator does in a high pressure environment."
|
||||
desc = "A syndicate modification kit that increases the damage a kinetic accelerator does in a high pressure environment."
|
||||
modifier = 2
|
||||
denied_type = /obj/item/borg/upgrade/modkit/indoors
|
||||
maximum_of_type = 2
|
||||
cost = 40
|
||||
cost = 35
|
||||
|
||||
/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
K.pressure_decrease *= modifier
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
item_state = null
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 10
|
||||
modifystate = TRUE
|
||||
modifystate = TRUE
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
|
||||
@@ -40,7 +40,7 @@
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
slot_flags = SLOT_BELT
|
||||
icon_state = "pulse_carbine"
|
||||
item_state = null
|
||||
item_state = null
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/pulse/carbine"
|
||||
can_flashlight = 1
|
||||
flight_x_offset = 18
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
|
||||
/obj/item/weapon/gun/medbeam/proc/on_beam_tick(var/mob/living/target)
|
||||
if(target.health != target.maxHealth)
|
||||
new /obj/effect/overlay/temp/heal(get_turf(target), "#80F5FF")
|
||||
new /obj/effect/temp_visual/heal(get_turf(target), "#80F5FF")
|
||||
target.adjustBruteLoss(-4)
|
||||
target.adjustFireLoss(-4)
|
||||
return
|
||||
|
||||
@@ -90,9 +90,9 @@
|
||||
if(starting)
|
||||
splatter_dir = get_dir(starting, target_loca)
|
||||
if(isalien(L))
|
||||
new /obj/effect/overlay/temp/dir_setting/bloodsplatter/xenosplatter(target_loca, splatter_dir)
|
||||
new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(target_loca, splatter_dir)
|
||||
else
|
||||
new /obj/effect/overlay/temp/dir_setting/bloodsplatter(target_loca, splatter_dir)
|
||||
new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir)
|
||||
if(prob(33))
|
||||
L.add_splatter_floor(target_loca)
|
||||
else if(impact_effect_type)
|
||||
@@ -224,7 +224,7 @@
|
||||
pixel_y_offset += 32
|
||||
old_pixel_y += 32
|
||||
new_y--
|
||||
|
||||
|
||||
pixel_x = old_pixel_x
|
||||
pixel_y = old_pixel_y
|
||||
step_towards(src, locate(new_x, new_y, z))
|
||||
@@ -237,7 +237,7 @@
|
||||
animate(src, pixel_x = pixel_x_offset, pixel_y = pixel_y_offset, time = max(1, (delay <= 3 ? delay - 1 : delay)), flags = ANIMATION_END_NOW)
|
||||
old_pixel_x = pixel_x_offset
|
||||
old_pixel_y = pixel_y_offset
|
||||
|
||||
|
||||
if(original && (original.layer>=2.75) || ismob(original))
|
||||
if(loc == get_turf(original))
|
||||
if(!(original in permutated))
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
flag = "laser"
|
||||
eyeblur = 2
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/red_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/item/projectile/beam/laser
|
||||
@@ -25,7 +25,7 @@
|
||||
var/mob/living/carbon/M = target
|
||||
M.IgniteMob()
|
||||
else if(isturf(target))
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/red_laser/wall
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser/wall
|
||||
|
||||
/obj/item/projectile/beam/weak
|
||||
damage = 15
|
||||
@@ -48,7 +48,7 @@
|
||||
irradiate = 30
|
||||
range = 15
|
||||
forcedodge = 1
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/green_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/item/projectile/beam/disabler
|
||||
@@ -59,14 +59,14 @@
|
||||
flag = "energy"
|
||||
hitsound = 'sound/weapons/tap.ogg'
|
||||
eyeblur = 0
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/projectile/beam/pulse
|
||||
name = "pulse"
|
||||
icon_state = "u_laser"
|
||||
damage = 50
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/projectile/beam/pulse/on_hit(atom/target, blocked = 0)
|
||||
@@ -94,7 +94,7 @@
|
||||
damage = 30
|
||||
legacy = 1
|
||||
animate_movement = SLIDE_STEPS
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/green_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/item/projectile/beam/emitter/singularity_pull()
|
||||
@@ -108,7 +108,7 @@
|
||||
damage_type = STAMINA
|
||||
flag = "laser"
|
||||
var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag)
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/projectile/beam/lasertag/on_hit(atom/target, blocked = 0)
|
||||
@@ -122,7 +122,7 @@
|
||||
/obj/item/projectile/beam/lasertag/redtag
|
||||
icon_state = "laser"
|
||||
suit_types = list(/obj/item/clothing/suit/bluetag)
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/red_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/item/projectile/beam/lasertag/bluetag
|
||||
@@ -134,17 +134,17 @@
|
||||
icon_state = "purple_laser"
|
||||
damage = 200
|
||||
damage_type = BURN
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/purple_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
|
||||
light_color = LIGHT_COLOR_PURPLE
|
||||
|
||||
/obj/item/projectile/beam/instakill/blue
|
||||
icon_state = "blue_laser"
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/projectile/beam/instakill/red
|
||||
icon_state = "red_laser"
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/red_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/item/projectile/beam/instakill/on_hit(atom/target)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
nodamage = 0
|
||||
flag = "bullet"
|
||||
hitsound_wall = "ricochet"
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet //beanbag, heavy stamina damage
|
||||
damage = 5
|
||||
@@ -190,7 +190,7 @@
|
||||
name = "dart"
|
||||
icon_state = "cbbolt"
|
||||
damage = 6
|
||||
var/piercing = FALSE
|
||||
var/piercing = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/dart/New()
|
||||
..()
|
||||
@@ -201,15 +201,15 @@
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
if(blocked != 100) // not completely blocked
|
||||
if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body.
|
||||
if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body.
|
||||
..()
|
||||
reagents.reaction(M, INJECT)
|
||||
reagents.trans_to(M, reagents.total_volume)
|
||||
return TRUE
|
||||
return TRUE
|
||||
else
|
||||
blocked = 100
|
||||
target.visible_message("<span class='danger'>\The [src] was deflected!</span>", \
|
||||
"<span class='userdanger'>You were protected against \the [src]!</span>")
|
||||
target.visible_message("<span class='danger'>\The [src] was deflected!</span>", \
|
||||
"<span class='userdanger'>You were protected against \the [src]!</span>")
|
||||
|
||||
..(target, blocked)
|
||||
reagents.set_reacting(TRUE)
|
||||
@@ -240,28 +240,28 @@
|
||||
nodamage = 1
|
||||
. = ..() // Execute the rest of the code.
|
||||
|
||||
/obj/item/projectile/bullet/dnainjector
|
||||
name = "\improper DNA injector"
|
||||
icon_state = "syringeproj"
|
||||
var/obj/item/weapon/dnainjector/injector
|
||||
|
||||
/obj/item/projectile/bullet/dnainjector/on_hit(atom/target, blocked = 0)
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
if(blocked != 100)
|
||||
if(M.can_inject(null, FALSE, def_zone, FALSE))
|
||||
if(injector.inject(M, firer))
|
||||
QDEL_NULL(injector)
|
||||
return TRUE
|
||||
else
|
||||
blocked = 100
|
||||
target.visible_message("<span class='danger'>\The [src] was deflected!</span>", \
|
||||
"<span class='userdanger'>You were protected against \the [src]!</span>")
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/bullet/dnainjector/Destroy()
|
||||
QDEL_NULL(injector)
|
||||
return ..()
|
||||
/obj/item/projectile/bullet/dnainjector
|
||||
name = "\improper DNA injector"
|
||||
icon_state = "syringeproj"
|
||||
var/obj/item/weapon/dnainjector/injector
|
||||
|
||||
/obj/item/projectile/bullet/dnainjector/on_hit(atom/target, blocked = 0)
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
if(blocked != 100)
|
||||
if(M.can_inject(null, FALSE, def_zone, FALSE))
|
||||
if(injector.inject(M, firer))
|
||||
QDEL_NULL(injector)
|
||||
return TRUE
|
||||
else
|
||||
blocked = 100
|
||||
target.visible_message("<span class='danger'>\The [src] was deflected!</span>", \
|
||||
"<span class='userdanger'>You were protected against \the [src]!</span>")
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/bullet/dnainjector/Destroy()
|
||||
QDEL_NULL(injector)
|
||||
return ..()
|
||||
|
||||
//// SNIPER BULLETS
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
damage = 20
|
||||
damage_type = CLONE
|
||||
irradiate = 10
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/green_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
||||
|
||||
/obj/item/projectile/energy/dart //ninja throwing dart
|
||||
name = "dart"
|
||||
@@ -164,7 +164,7 @@
|
||||
/obj/item/projectile/energy/tesla
|
||||
name = "tesla bolt"
|
||||
icon_state = "tesla_projectile"
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
var/chain
|
||||
|
||||
/obj/item/projectile/energy/tesla/fire(setAngle)
|
||||
|
||||
@@ -7,7 +7,6 @@ obj/item/projectile/energy/plasmabolt
|
||||
damage_type = BURN
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/green_laser
|
||||
light_range = 3
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
flag = "energy"
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/ion
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/ion
|
||||
|
||||
|
||||
/obj/item/projectile/ion/on_hit(atom/target, blocked = 0)
|
||||
@@ -202,7 +202,7 @@
|
||||
damage = 5
|
||||
range = 3.5 //works as 4, but doubles to 7
|
||||
dismemberment = 20
|
||||
impact_effect_type = /obj/effect/overlay/temp/impact_effect/purple_laser
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
|
||||
|
||||
/obj/item/projectile/plasma/Initialize()
|
||||
. = ..()
|
||||
@@ -273,7 +273,7 @@
|
||||
A.throw_at(throwtarget,power+1,1)
|
||||
thrown_items[A] = A
|
||||
for(var/turf/F in range(T,power))
|
||||
new /obj/effect/overlay/temp/gravpush(F)
|
||||
new /obj/effect/temp_visual/gravpush(F)
|
||||
|
||||
/obj/item/projectile/gravityattract
|
||||
name = "attraction bolt"
|
||||
@@ -303,7 +303,7 @@
|
||||
A.throw_at(T, power+1, 1)
|
||||
thrown_items[A] = A
|
||||
for(var/turf/F in range(T,power))
|
||||
new /obj/effect/overlay/temp/gravpush(F)
|
||||
new /obj/effect/temp_visual/gravpush(F)
|
||||
|
||||
/obj/item/projectile/gravitychaos
|
||||
name = "gravitational blast"
|
||||
@@ -333,5 +333,5 @@
|
||||
A.throw_at(get_edge_target_turf(A, pick(GLOB.cardinal)), power+1, 1)
|
||||
thrown_items[A] = A
|
||||
for(var/turf/Z in range(T,power))
|
||||
new /obj/effect/overlay/temp/gravpush(Z)
|
||||
new /obj/effect/temp_visual/gravpush(Z)
|
||||
|
||||
|
||||
@@ -298,7 +298,7 @@
|
||||
var/initial_volume = reac_volume
|
||||
reac_volume = ..()
|
||||
if(reac_volume >= 10) //if it's not a spore cloud, bad time incoming
|
||||
var/obj/effect/overlay/temp/explosion/fast/E = new /obj/effect/overlay/temp/explosion/fast(get_turf(M))
|
||||
var/obj/effect/temp_visual/explosion/fast/E = new /obj/effect/temp_visual/explosion/fast(get_turf(M))
|
||||
E.alpha = 150
|
||||
for(var/mob/living/L in orange(get_turf(M), 1))
|
||||
if("blob" in L.faction) //no friendly fire
|
||||
|
||||
@@ -378,7 +378,7 @@
|
||||
if(N.w_uniform)
|
||||
M.visible_message(pick("<b>[M]</b>'s collar pops up without warning.</span>", "<b>[M]</b> flexes [M.p_their()] arms."))
|
||||
else
|
||||
M.visible_message("<b>[M]</b> [M.p_their()] their arms.")
|
||||
M.visible_message("<b>[M]</b> flexes [M.p_their()] arms.")
|
||||
if(prob(10))
|
||||
M.say(pick("Check these sweet biceps bro!", "Deal with it.", "CHUG! CHUG! CHUG! CHUG!", "Winning!", "NERDS!", "My name is John and I hate every single one of you."))
|
||||
..()
|
||||
|
||||
@@ -249,16 +249,6 @@ other types of metals and chemistry for reagents).
|
||||
build_path = /obj/item/borg/upgrade/modkit/range
|
||||
category = list("Mining Designs", "Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/superaccelerator
|
||||
name = "Kinetic Accelerator Pressure Mod"
|
||||
desc = "A modification kit which allows Kinetic Accelerators to do more damage while indoors."
|
||||
id = "indoormod"
|
||||
req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_URANIUM = 2000)
|
||||
build_path = /obj/item/borg/upgrade/modkit/indoors
|
||||
category = list("Mining Designs", "Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/hyperaccelerator
|
||||
name = "Kinetic Accelerator Mining AoE Mod"
|
||||
desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts that destroy rock."
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/overlay/temp/ripple
|
||||
/obj/effect/temp_visual/ripple
|
||||
name = "hyperspace ripple"
|
||||
desc = "Something is coming through hyperspace, you can see the \
|
||||
visual disturbances. It's probably best not to be on top of these \
|
||||
@@ -13,10 +13,10 @@
|
||||
|
||||
duration = 3 * SHUTTLE_RIPPLE_TIME
|
||||
|
||||
/obj/effect/overlay/temp/ripple/Initialize(mapload, time_left)
|
||||
/obj/effect/temp_visual/ripple/Initialize(mapload, time_left)
|
||||
. = ..()
|
||||
animate(src, alpha=255, time=time_left)
|
||||
addtimer(CALLBACK(src, .proc/stop_animation), 8, TIMER_CLIENT_TIME)
|
||||
|
||||
/obj/effect/overlay/temp/ripple/proc/stop_animation()
|
||||
/obj/effect/temp_visual/ripple/proc/stop_animation()
|
||||
icon_state = "medi_holo_no_anim"
|
||||
|
||||
@@ -404,7 +404,7 @@
|
||||
/obj/docking_port/mobile/proc/create_ripples(obj/docking_port/stationary/S1, animate_time)
|
||||
var/list/turfs = ripple_area(S1)
|
||||
for(var/t in turfs)
|
||||
ripples += new /obj/effect/overlay/temp/ripple(t, animate_time)
|
||||
ripples += new /obj/effect/temp_visual/ripple(t, animate_time)
|
||||
|
||||
/obj/docking_port/mobile/proc/remove_ripples()
|
||||
for(var/R in ripples)
|
||||
@@ -764,6 +764,6 @@
|
||||
if(T in block(T0,T1))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
|
||||
|
||||
#undef DOCKING_PORT_HIGHLIGHT
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
/mob/living/simple_animal/hostile/bear/fightpit
|
||||
name = "fight pit bear"
|
||||
desc = "This bear's trained through ancient Russian secrets to fear the walls of its glass prison."
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
|
||||
/obj/effect/decal/hammerandsickle
|
||||
name = "hammer and sickle"
|
||||
|
||||
@@ -128,8 +128,8 @@
|
||||
action_icon_state = "phaseshift"
|
||||
action_background_icon_state = "bg_demon"
|
||||
jaunt_in_time = 12
|
||||
jaunt_in_type = /obj/effect/overlay/temp/dir_setting/wraith
|
||||
jaunt_out_type = /obj/effect/overlay/temp/dir_setting/wraith/out
|
||||
jaunt_in_type = /obj/effect/temp_visual/dir_setting/wraith
|
||||
jaunt_out_type = /obj/effect/temp_visual/dir_setting/wraith/out
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/jaunt_steam(mobloc)
|
||||
return
|
||||
@@ -256,7 +256,7 @@
|
||||
S.add_atom_colour("#990000", FIXED_COLOUR_PRIORITY)
|
||||
S.faction = list("cult")
|
||||
playsound(get_turf(S), 'sound/effects/ghost.ogg', 100, 1)
|
||||
new /obj/effect/overlay/temp/cult/sac(get_turf(S))
|
||||
new /obj/effect/temp_visual/cult/sac(get_turf(S))
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/dominate/can_target(mob/living/target)
|
||||
if(!isanimal(target) || target.stat)
|
||||
@@ -267,5 +267,5 @@
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem
|
||||
charge_max = 800
|
||||
jaunt_in_type = /obj/effect/overlay/temp/dir_setting/cult/phase
|
||||
jaunt_out_type = /obj/effect/overlay/temp/dir_setting/cult/phase/out
|
||||
jaunt_in_type = /obj/effect/temp_visual/dir_setting/cult/phase
|
||||
jaunt_out_type = /obj/effect/temp_visual/dir_setting/cult/phase/out
|
||||
@@ -13,8 +13,8 @@
|
||||
nonabstract_req = 1
|
||||
var/jaunt_duration = 50 //in deciseconds
|
||||
var/jaunt_in_time = 5
|
||||
var/jaunt_in_type = /obj/effect/overlay/temp/wizard
|
||||
var/jaunt_out_type = /obj/effect/overlay/temp/wizard/out
|
||||
var/jaunt_in_type = /obj/effect/temp_visual/wizard
|
||||
var/jaunt_out_type = /obj/effect/temp_visual/wizard/out
|
||||
action_icon_state = "jaunt"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/cast(list/targets,mob/user = usr) //magnets, so mostly hardcoded
|
||||
|
||||
@@ -257,7 +257,7 @@
|
||||
selection_type = "view"
|
||||
sound = 'sound/magic/Repulse.ogg'
|
||||
var/maxthrow = 5
|
||||
var/sparkle_path = /obj/effect/overlay/temp/gravpush
|
||||
var/sparkle_path = /obj/effect/temp_visual/gravpush
|
||||
|
||||
action_icon_state = "repulse"
|
||||
|
||||
@@ -300,7 +300,7 @@
|
||||
range = 2
|
||||
cooldown_min = 150
|
||||
invocation_type = "none"
|
||||
sparkle_path = /obj/effect/overlay/temp/dir_setting/tailsweep
|
||||
sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep
|
||||
action_icon_state = "tailsweep"
|
||||
action_background_icon_state = "bg_alien"
|
||||
|
||||
|
||||
@@ -1282,7 +1282,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
|
||||
cost = 10
|
||||
item = /obj/item/weapon/pneumatic_cannon/pie/selfcharge
|
||||
restricted_roles = list("Clown")
|
||||
surplus = 0 //No fun unless you're the clown!
|
||||
surplus = 0 //No fun unless you're the clown!
|
||||
|
||||
/datum/uplink_item/role_restricted/ancient_jumpsuit
|
||||
name = "Ancient Jumpsuit"
|
||||
@@ -1298,8 +1298,8 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
|
||||
item = /obj/item/toy/eightball/haunted
|
||||
cost = 2
|
||||
restricted_roles = list("Curator")
|
||||
limited_stock = 1 // please don't spam deadchat
|
||||
|
||||
limited_stock = 1 //please don't spam deadchat
|
||||
|
||||
/datum/uplink_item/role_restricted/modified_syringe_gun
|
||||
name = "Modified Syringe Gun"
|
||||
desc = "A syringe gun that fires DNA injectors instead of normal syringes."
|
||||
@@ -1307,6 +1307,14 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
|
||||
cost = 14
|
||||
restricted_roles = list("Geneticist", "Chief Medical Officer")
|
||||
|
||||
/datum/uplink_item/role_restricted/pressure_mod
|
||||
name = "Kinetic Accelerator Pressure Mod"
|
||||
desc = "A modification kit which allows Kinetic Accelerators to do greatly increased damage while indoors. Occupies 35% mod capacity."
|
||||
item = /obj/item/borg/upgrade/modkit/indoors
|
||||
cost = 5 //you need two for full damage, so total of 10 for maximum damage
|
||||
limited_stock = 2 //you can't use more than two!
|
||||
restricted_roles = list("Shaft Miner")
|
||||
|
||||
// Pointless
|
||||
/datum/uplink_item/badass
|
||||
category = "(Pointless) Badassery"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
/obj/vehicle/space/speedbike/Move(newloc,move_dir)
|
||||
if(has_buckled_mobs())
|
||||
new /obj/effect/overlay/temp/dir_setting/speedbike_trail(loc,move_dir)
|
||||
new /obj/effect/temp_visual/dir_setting/speedbike_trail(loc,move_dir)
|
||||
. = ..()
|
||||
|
||||
/obj/vehicle/space/speedbike/red
|
||||
|
||||
Reference in New Issue
Block a user