Merge pull request #8384 from Atermonera/cynosure_map

Updates Cynosure map to master
This commit is contained in:
Atermonera
2022-01-27 20:08:24 -08:00
committed by GitHub
541 changed files with 3542 additions and 3828 deletions
+1 -1
View File
@@ -150,7 +150,7 @@
qdel(W)
if(8)
if(W.is_screwdriver())
if(W.get_tool_quality(TOOL_SCREWDRIVER))
playsound(src, W.usesound, 100, 1)
var/turf/T = get_turf(user)
to_chat(user, "<span class='notice'>Now attaching the gun to the frame...</span>")
+1 -1
View File
@@ -101,7 +101,7 @@
else
to_chat(user, "<span class='warning'>Access denied.</span>")
return
else if(O.is_screwdriver())
else if(O.get_tool_quality(TOOL_SCREWDRIVER))
if(!locked)
open = !open
to_chat(user, "<span class='notice'>Maintenance panel is now [open ? "opened" : "closed"].</span>")
+1 -1
View File
@@ -137,7 +137,7 @@
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
qdel(src)
+2 -2
View File
@@ -44,7 +44,7 @@
else
new /obj/item/clothing/suit/storage/vest(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
@@ -188,7 +188,7 @@
qdel(W)
if(8)
if(W.is_screwdriver())
if(W.get_tool_quality(TOOL_SCREWDRIVER))
playsound(src, W.usesound, 100, 1)
var/turf/T = get_turf(user)
to_chat(user, "<span class='notice'>Now attaching the gun to the frame...</span>")
+2 -2
View File
@@ -65,7 +65,7 @@
else
new /obj/item/device/assembly/prox_sensor(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
qdel(src)
@@ -193,7 +193,7 @@
qdel(W)
if(7)
if(W.is_screwdriver())
if(W.get_tool_quality(TOOL_SCREWDRIVER))
playsound(src, W.usesound, 100, 1)
var/turf/T = get_turf(user)
to_chat(user, "<span class='notice'>Attatching the mop to the frame...</span>")
+1 -1
View File
@@ -279,7 +279,7 @@
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
qdel(src)
+1 -1
View File
@@ -304,7 +304,7 @@
new /obj/item/robot_parts/l_arm(Tsec)
var/obj/item/stack/tile/floor/T = new /obj/item/stack/tile/floor(Tsec)
T.amount = amount
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
qdel(src)
+1 -1
View File
@@ -344,7 +344,7 @@
if(emagged && prob(25))
playsound(src, 'sound/voice/medbot/minsult.ogg', 50, 0)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
qdel(src)
+1 -1
View File
@@ -258,7 +258,7 @@
new /obj/item/stack/rods(Tsec)
new /obj/item/stack/cable_coil/cut(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
+1 -1
View File
@@ -360,7 +360,7 @@
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
+2 -2
View File
@@ -260,7 +260,7 @@
src.searching = 0
var/turf/T = get_turf_or_move(src.loc)
var/turf/T = get_turf(src.loc)
for (var/mob/M in viewers(T))
M.show_message("<font color='blue'>\The [src] buzzes quietly, and the golden lights fade away. Perhaps you could try again?</font>")
@@ -278,7 +278,7 @@
// to_chat(src.brainmob, "<b>Use say #b to speak to other artificial intelligences.</b>")
src.brainmob.mind.assigned_role = "Synthetic Brain"
var/turf/T = get_turf_or_move(src.loc)
var/turf/T = get_turf(src.loc)
for (var/mob/M in viewers(T))
M.show_message("<font color='blue'>\The [src] chimes quietly.</font>")
@@ -66,7 +66,7 @@
to_chat(src.brainmob, "<b>Use say #b to speak to other artificial intelligences.</b>")
src.brainmob.mind.assigned_role = "Positronic Brain"
var/turf/T = get_turf_or_move(src.loc)
var/turf/T = get_turf(src.loc)
for (var/mob/M in viewers(T))
M.show_message("<font color='blue'>The positronic brain beeps as it loads a personality.</font>")
playsound(src, 'sound/misc/boobeebeep.ogg', 50, 1)
@@ -80,7 +80,7 @@
src.searching = 0
icon_state = "posibrain"
var/turf/T = get_turf_or_move(src.loc)
var/turf/T = get_turf(src.loc)
for (var/mob/M in viewers(T))
M.show_message("<font color='blue'>The positronic brain buzzes and beeps, and the golden lights fade away. Perhaps you could try again?</font>")
playsound(src, 'sound/misc/buzzbeep.ogg', 50, 1)
+1 -1
View File
@@ -73,7 +73,7 @@
if(wear_mask && (wear_mask.item_flags & BLOCK_GAS_SMOKE_EFFECT))
return
for(var/obj/effect/effect/smoke/chem/smoke in view(1, src))
for(var/obj/effect/vfx/smoke/chem/smoke in view(1, src))
if(smoke.reagents.total_volume)
smoke.reagents.trans_to_mob(src, 10, CHEM_INGEST, copy = 1)
//maybe check air pressure here or something to see if breathing in smoke is even possible.
+1 -1
View File
@@ -189,7 +189,7 @@
if(31 to INFINITY)
Weaken(10) //This should work for now, more is really silly and makes you lay there forever
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, loc)
s.start()
@@ -13,8 +13,8 @@
return 0
//Apply weapon damage
var/weapon_sharp = is_sharp(I)
var/weapon_edge = has_edge(I)
var/weapon_sharp = I.sharp
var/weapon_edge = I.edge
var/hit_embed_chance = I.embed_chance
if(prob(getarmor(hit_zone, "melee"))) //melee armour provides a chance to turn sharp/edge weapon attacks into blunt ones
weapon_sharp = 0
@@ -39,7 +39,7 @@
if(generate_id_gender)
identifying_gender = pick(list(MALE, FEMALE, PLURAL, NEUTER))
..(loc, generate_species)
. = ..(loc, generate_species)
h_style = to_wear_hair
@@ -154,7 +154,7 @@
amount *= M.incoming_damage_percent
if(!isnull(M.incoming_brute_damage_percent))
amount *= M.incoming_brute_damage_percent
O.take_damage(amount, 0, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source)
O.take_damage(amount, 0, damage_source.sharp, damage_source.edge, damage_source)
else
for(var/datum/modifier/M in modifiers)
if(!isnull(M.incoming_healing_percent))
@@ -175,7 +175,7 @@
amount *= M.incoming_damage_percent
if(!isnull(M.incoming_fire_damage_percent))
amount *= M.incoming_fire_damage_percent
O.take_damage(0, amount, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source)
O.take_damage(0, amount, damage_source.sharp, damage_source.edge, damage_source)
else
for(var/datum/modifier/M in modifiers)
if(!isnull(M.incoming_healing_percent))
@@ -441,14 +441,13 @@ emp_act
var/armor = run_armor_check(affecting, "melee", O.armor_penetration, "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].") //I guess "melee" is the best fit here
if(armor < 100)
apply_damage(throw_damage, dtype, zone, armor, soaked, is_sharp(O), has_edge(O), O)
apply_damage(throw_damage, dtype, zone, armor, soaked, O.sharp, O.edge, O)
//thrown weapon embedded object code.
if(dtype == BRUTE && istype(O,/obj/item))
var/obj/item/I = O
if (!is_robot_module(I))
var/sharp = is_sharp(I)
var/damage = throw_damage
if (soaked)
damage -= soaked
@@ -456,12 +455,11 @@ emp_act
damage /= armor+1
//blunt objects should really not be embedding in things unless a huge amount of force is involved
var/embed_chance = sharp? damage/I.w_class : damage/(I.w_class*3)
var/embed_threshold = sharp? 5*I.w_class : 15*I.w_class
var/embed_chance = I.sharp ? damage/I.w_class : damage/(I.w_class*3)
var/embed_threshold = I.sharp ? 5*I.w_class : 15*I.w_class
//Sharp objects will always embed if they do enough damage.
//Thrown sharp objects have some momentum already and have a small chance to embed even if the damage is below the threshold
if((sharp && prob(damage/(10*I.w_class)*100)) || (damage > embed_threshold && prob(embed_chance)))
if((I.sharp && prob(damage/(10*I.w_class)*100)) || (damage > embed_threshold && prob(embed_chance)))
affecting.embed(I)
// Begin BS12 momentum-transfer code.
@@ -92,7 +92,7 @@
stance_damage += 2
if(prob(10))
visible_message("\The [src]'s [E.name] [pick("twitches", "shudders")] and sparks!")
var/datum/effect/effect/system/spark_spread/spark_system = new ()
var/datum/effect_system/spark_spread/spark_system = new ()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system.start()
@@ -177,7 +177,7 @@
custom_emote(VISIBLE_MESSAGE, "drops what they were holding, their [E.name] malfunctioning!")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system.start()
+20
View File
@@ -1136,3 +1136,23 @@
// Each mob does vision a bit differently so this is just for inheritence and also so overrided procs can make the vision apply instantly if they call `..()`.
/mob/living/proc/disable_spoiler_vision()
handle_vision()
/mob/living/proc/get_player_regions()
// A living player is always in a universal region
. = list(EVENT_REGION_UNIVERSAL)
var/turf/T = get_turf(src)
var/obj/effect/overmap/visitable/M = get_overmap_sector(T.z)
if(istype(M))
if(M.in_space)
if(T.z in using_map.station_levels)
. |= EVENT_REGION_SPACESTATION
else
. |= EVENT_REGION_DEEPSPACE
else
. |= EVENT_REGION_PLANETSURFACE
var/datum/map_z_level/zlevel = using_map.zlevels["[T.z]"]
if(istype(zlevel))
. |= zlevel.event_regions
+5 -5
View File
@@ -115,8 +115,8 @@
//Armor
var/soaked = get_armor_soak(def_zone, P.check_armour, P.armor_penetration)
var/absorb = run_armor_check(def_zone, P.check_armour, P.armor_penetration)
var/proj_sharp = is_sharp(P)
var/proj_edge = has_edge(P)
var/proj_sharp = P.sharp
var/proj_edge = P.edge
if ((proj_sharp || proj_edge) && (soaked >= round(P.damage*0.8)))
proj_sharp = 0
@@ -246,8 +246,8 @@
if(!effective_force || blocked >= 100)
return 0
//Apply weapon damage
var/weapon_sharp = is_sharp(I)
var/weapon_edge = has_edge(I)
var/weapon_sharp = I.sharp
var/weapon_edge = I.edge
if(getsoak(hit_zone, "melee",) - (I.armor_penetration/5) > round(effective_force*0.8)) //soaking a hit turns sharp attacks into blunt ones
weapon_sharp = 0
@@ -282,7 +282,7 @@
var/soaked = get_armor_soak(null, "melee")
apply_damage(throw_damage, dtype, null, armor, soaked, is_sharp(O), has_edge(O), O)
apply_damage(throw_damage, dtype, null, armor, soaked, O.sharp, O.edge, O)
O.throwing = 0 //it hit, so stop moving
+3 -3
View File
@@ -760,14 +760,14 @@ var/list/ai_verbs_default = list(
var/obj/item/device/aicard/card = W
card.grab_ai(src, user)
else if(W.is_wrench())
else if(W.get_tool_quality(TOOL_WRENCH))
if(user == deployed_shell)
to_chat(user, "<span class='notice'>The shell's subsystems resist your efforts to tamper with your bolts.</span>")
return
if(anchored)
playsound(src, W.usesound, 50, 1)
user.visible_message("<font color='blue'>\The [user] starts to unbolt \the [src] from the plating...</font>")
if(!do_after(user,40 * W.toolspeed))
if(!do_after(user,40 * W.get_tool_speed(TOOL_WRENCH)))
user.visible_message("<font color='blue'>\The [user] decides not to unbolt \the [src].</font>")
return
user.visible_message("<font color='blue'>\The [user] finishes unfastening \the [src]!</font>")
@@ -776,7 +776,7 @@ var/list/ai_verbs_default = list(
else
playsound(src, W.usesound, 50, 1)
user.visible_message("<font color='blue'>\The [user] starts to bolt \the [src] to the plating...</font>")
if(!do_after(user,40 * W.toolspeed))
if(!do_after(user,40 * W.get_tool_speed(TOOL_WRENCH)))
user.visible_message("<font color='blue'>\The [user] decides not to bolt \the [src].</font>")
return
user.visible_message("<font color='blue'>\The [user] finishes fastening down \the [src]!</font>")
+1 -1
View File
@@ -1,6 +1,6 @@
/mob/living/silicon/gib()
..("gibbed-r")
gibs(loc, null, /obj/effect/gibspawner/robot)
gibs(loc, null, /obj/effect/spawner/gibs/robot)
/mob/living/silicon/dust()
..("dust-r", /obj/effect/decal/remains/robot)
+1 -1
View File
@@ -5,7 +5,7 @@
if(src.cable)
if(get_dist(src, src.cable) > 1)
var/turf/T = get_turf_or_move(src.loc)
var/turf/T = get_turf(src.loc)
for (var/mob/M in viewers(T))
M.show_message("<font color='red'>The data cable rapidly retracts back into its spool.</font>", 3, "<font color='red'>You hear a click and the sound of wire spooling rapidly.</font>", 2)
playsound(src, 'sound/machines/click.ogg', 50, 1)
+1 -1
View File
@@ -162,7 +162,7 @@
src.silence_time = world.timeofday + 120 * 10 // Silence for 2 minutes
to_chat(src, "<font color=green><b>Communication circuit overload. Shutting down and reloading communication circuits - speech and messaging functionality will be unavailable until the reboot is complete.</b></font>")
if(prob(20))
var/turf/T = get_turf_or_move(src.loc)
var/turf/T = get_turf(src.loc)
for (var/mob/M in viewers(T))
M.show_message("<font color='red'>A shower of sparks spray from [src]'s inner workings.</font>", 3, "<font color='red'>You hear and smell the ozone hiss of electrical sparks being expelled violently.</font>", 2)
return src.death(0)
@@ -178,7 +178,7 @@ var/list/mob_hat_cache = list()
to_chat(user, "<span class='danger'>\The [src] is not compatible with \the [W].</span>")
return
else if (W.is_crowbar())
else if (W.get_tool_quality(TOOL_CROWBAR))
to_chat(user, "<span class='danger'>\The [src] is hermetically sealed. You can't open the case.</span>")
return
@@ -76,8 +76,8 @@
var/modtype = "Default"
var/lower_mod = 0
var/jetpack = 0
var/datum/effect/effect/system/ion_trail_follow/ion_trail = null
var/datum/effect/effect/system/spark_spread/spark_system//So they can initialize sparks whenever/N
var/datum/effect_system/ion_trail_follow/ion_trail = null
var/datum/effect_system/spark_spread/spark_system//So they can initialize sparks whenever/N
var/jeton = 0
var/killswitch = 0
var/killswitch_time = 60
@@ -99,7 +99,7 @@
)
/mob/living/silicon/robot/Initialize(var/ml, var/unfinished = 0)
spark_system = new /datum/effect/effect/system/spark_spread()
spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
@@ -540,7 +540,7 @@
for(var/mob/O in viewers(user, null))
O.show_message(text("<font color='red'>[user] has fixed some of the burnt wires on [src]!</font>"), 1)
else if (W.is_crowbar() && user.a_intent != I_HURT) // crowbar means open or close the cover
else if (W.get_tool_quality(TOOL_CROWBAR) && user.a_intent != I_HURT) // crowbar means open or close the cover
if(opened)
if(cell)
to_chat(user, "You close the cover.")
@@ -617,26 +617,26 @@
C.brute_damage = 0
C.electronics_damage = 0
else if (W.is_wirecutter() || istype(W, /obj/item/device/multitool))
else if (W.get_tool_quality(TOOL_WIRECUTTER) || W.get_tool_quality(TOOL_MULTITOOL))
if (wiresexposed)
wires.Interact(user)
else
to_chat(user, "You can't reach the wiring.")
else if(W.is_screwdriver() && opened && !cell) // haxing
else if(W.get_tool_quality(TOOL_SCREWDRIVER) && opened && !cell) // haxing
wiresexposed = !wiresexposed
to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"]")
playsound(src, W.usesound, 50, 1)
updateicon()
else if(W.is_screwdriver() && opened && cell) // radio
else if(W.get_tool_quality(TOOL_SCREWDRIVER) && opened && cell) // radio
if(radio)
radio.attackby(W,user)//Push it to the radio to let it handle everything
else
to_chat(user, "Unable to locate a radio.")
updateicon()
else if(W.is_wrench() && opened && !cell)
else if(W.get_tool_quality(TOOL_WRENCH) && opened && !cell)
if(bolt)
to_chat(user,"You begin removing \the [bolt].")
+1 -1
View File
@@ -81,7 +81,7 @@
/mob/living/silicon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 0.0, var/def_zone = null, var/stun = 1)
if(shock_damage > 0)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, loc)
s.start()
@@ -2,7 +2,4 @@
gib_on_butchery = TRUE
/mob/living/simple_mob/can_butcher(var/mob/user, var/obj/item/I) // Override for special butchering checks.
. = ..()
if(. && (!is_sharp(I) || !has_edge(I)))
return FALSE
return ..() && I.sharp && I.edge
@@ -86,6 +86,10 @@
//The actual top-level ranged attack proc
/mob/living/simple_mob/proc/shoot_target(atom/A)
set waitfor = FALSE
if(!istype(A) || QDELETED(A))
return
setClickCooldown(get_attack_speed())
face_atom(A)
@@ -187,7 +187,7 @@
apply_damage(damage = shock_damage, damagetype = BURN, def_zone = null, blocked = null, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
playsound(src, "sparks", 50, 1, -1)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, loc)
s.start()
@@ -74,7 +74,7 @@
"rad" = 0
)
var/datum/effect/effect/system/smoke_spread/frost/smoke_special
var/datum/effect_system/smoke_spread/frost/smoke_special
say_list_type = /datum/say_list/frostfly
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/frostfly
@@ -59,7 +59,7 @@
var/energy = 100
var/max_energy = 100
var/datum/effect/effect/system/smoke_spread/mothspore/smoke_spore
var/datum/effect_system/smoke_spread/mothspore/smoke_spore
say_list_type = /datum/say_list/tymisian
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/frostfly //Uses frostfly AI, since so similar mechanically
@@ -80,12 +80,13 @@
threaten_sound = 'sound/effects/spray3.ogg'
stand_down_sound = 'sound/effects/squelch1.ogg'
/obj/effect/effect/smoke/elemental/mothspore
/obj/effect/vfx/smoke/elemental/mothspore
name = "spore cloud"
desc = "A dust cloud filled with disorienting bacterial spores."
color = "#80AB82"
/obj/effect/effect/smoke/elemental/mothspore/affect(mob/living/L) //Similar to a very weak flash, but depends on breathing instead of eye protection.
/obj/effect/vfx/smoke/elemental/mothspore/affect(mob/living/L) //Similar to a very weak flash, but depends on breathing instead of eye protection.
if(iscarbon(L))
var/mob/living/carbon/C = L
if(C.stat != DEAD)
@@ -97,8 +98,8 @@
H.eye_blurry = max(H.eye_blurry, spore_strength)
H.adjustHalLoss(10 * (spore_strength / 5))
/datum/effect/effect/system/smoke_spread/mothspore
smoke_type = /obj/effect/effect/smoke/elemental/mothspore
/datum/effect_system/smoke_spread/mothspore
smoke_type = /obj/effect/vfx/smoke/elemental/mothspore
/mob/living/simple_mob/animal/sif/tymisian/do_special_attack(atom/A)
. = TRUE
@@ -301,6 +301,10 @@
/mob/living/simple_mob/humanoid/merc/ranged/sniper/shoot_target(atom/A)
set waitfor = FALSE
if(!istype(A) || QDELETED(A))
return
setClickCooldown(get_attack_speed())
face_atom(A)
@@ -59,7 +59,7 @@
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening
say_list_type = /datum/say_list/malf_drone
var/datum/effect/effect/system/ion_trail_follow/ion_trail = null
var/datum/effect_system/ion_trail_follow/ion_trail = null
var/obj/item/shield_projector/shields = null
/mob/living/simple_mob/mechanical/combat_drone/Initialize()
@@ -60,7 +60,7 @@
/obj/item/weapon/ore = 5
)
var/datum/effect/effect/system/ion_trail_follow/ion_trail = null
var/datum/effect_system/ion_trail_follow/ion_trail = null
var/obj/item/shield_projector/shields = null
var/obj/item/weapon/storage/bag/ore/my_storage = null
@@ -73,7 +73,7 @@
..()
visible_message("\The [src] disintegrates!")
new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
qdel(src)
@@ -29,7 +29,7 @@
..()
visible_message(span("warning","\The [src] blows apart!"))
new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
qdel(src)
@@ -53,6 +53,7 @@
melee_damage_upper = 15
projectile_dispersion = 5
projectile_accuracy = -15
projectilesound = 'sound/weapons/mech_autocannon.ogg'
// Also beefy, but tries to stay at their 'home', ideal for base defense.
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard
@@ -113,6 +114,7 @@
name = "siege engine hivebot"
desc = "A large robot capable of delivering long range bombardment."
projectiletype = /obj/item/projectile/arc/test
projectilesound = 'sound/weapons/mech_mortar.ogg'
icon_scale_x = 2
icon_scale_y = 2
icon_state = "red"
@@ -230,7 +230,7 @@
icon_state = "mortar"
/obj/item/projectile/arc/explosive_rocket/on_impact(turf/T)
new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently.
new /obj/effect/vfx/explosion(T) // Weak explosions don't produce this on their own, apparently.
explosion(T, 0, 0, 2, adminlog = FALSE)
/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/launch_microsingularity(atom/target)
@@ -29,14 +29,13 @@
base_attack_cooldown = 2 SECONDS
organ_names = /decl/mob_organ_names/hoverpod
var/datum/effect/effect/system/ion_trail_follow/ion_trail
var/datum/effect_system/ion_trail_follow/ion_trail
/mob/living/simple_mob/mechanical/mecha/hoverpod/manned
pilot_type = /mob/living/simple_mob/humanoid/merc/ranged
/mob/living/simple_mob/mechanical/mecha/hoverpod/Initialize()
ion_trail = new /datum/effect/effect/system/ion_trail_follow()
ion_trail = new /datum/effect_system/ion_trail_follow()
ion_trail.set_up(src)
ion_trail.start()
return ..()
@@ -35,7 +35,7 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee
say_list_type = /datum/say_list/malf_drone
var/datum/effect/effect/system/spark_spread/sparks
var/datum/effect_system/spark_spread/sparks
var/wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark
var/pilot_type = null // Set to spawn a pilot when destroyed. Setting this also makes the mecha vulnerable to things that affect sentient minds.
var/deflect_chance = 10 // Chance to outright stop an attack, just like a normal exosuit.
@@ -64,7 +64,7 @@
if(!(P.damage_type == BRUTE || P.damage_type == BURN))
projectile_dam_type = BRUTE
incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to brute for physical projectiles, though severely decreased.
apply_damage(incoming_damage, projectile_dam_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P)
apply_damage(incoming_damage, projectile_dam_type, null, armorcheck, soakedcheck, P.sharp, P.edge, P)
return -1 //Doesn't reflect non-beams or non-energy projectiles. They just smack and drop with little to no effect.
else
visible_message("<span class='danger'>The [P.name] gets reflected by [src]'s shell!</span>", \
@@ -74,7 +74,7 @@
if(!(P.damage_type == BRUTE || P.damage_type == BURN))
projectile_dam_type = BURN
incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to burn for energy-type projectiles, though severely decreased.
apply_damage(incoming_damage, P.damage_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P)
apply_damage(incoming_damage, P.damage_type, null, armorcheck, soakedcheck, P.sharp, P.edge, P)
// Find a turf near or on the original location to bounce to
if(P.starting)
@@ -28,7 +28,7 @@
L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents slimes from jumping on you.
L.stuttering = max(L.stuttering, stun_power)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, L)
s.start()
@@ -358,9 +358,9 @@
to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to."))
return FALSE
var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s1 = new /datum/effect_system/spark_spread
s1.set_up(5, 1, T)
var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s2 = new /datum/effect_system/spark_spread
s2.set_up(5, 1, target_turf)