mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-24 13:46:53 +01:00
Merge pull request #8384 from Atermonera/cynosure_map
Updates Cynosure map to master
This commit is contained in:
@@ -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>")
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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].")
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user