mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-21 03:55:05 +01:00
/obj/item/projectile --> /obj/projectile (#30411)
* yers * vars * map changes * some comments (clearly not stolen from items) * fix component * summary
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
ai_controller = /datum/ai_controller/basic_controller/alien/queen
|
||||
|
||||
is_ranged = TRUE
|
||||
projectile_type = /obj/item/projectile/neurotox
|
||||
projectile_type = /obj/projectile/neurotox
|
||||
projectile_sound = 'sound/weapons/pierce.ogg'
|
||||
ranged_cooldown = 3 SECONDS
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
ai_controller = /datum/ai_controller/basic_controller/alien/sentinel
|
||||
|
||||
is_ranged = TRUE
|
||||
projectile_type = /obj/item/projectile/neurotox
|
||||
projectile_type = /obj/projectile/neurotox
|
||||
projectile_sound = 'sound/weapons/pierce.ogg'
|
||||
ranged_cooldown = 3 SECONDS
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/projectile/hivebotbullet
|
||||
/obj/projectile/hivebotbullet
|
||||
|
||||
/mob/living/basic/hivebot
|
||||
name = "Hivebot"
|
||||
@@ -28,7 +28,7 @@
|
||||
basic_mob_flags = DEL_ON_DEATH
|
||||
step_type = FOOTSTEP_MOB_CLAW
|
||||
ai_controller = /datum/ai_controller/basic_controller/hivebot
|
||||
projectile_type = /obj/item/projectile/hivebotbullet
|
||||
projectile_type = /obj/projectile/hivebotbullet
|
||||
projectile_sound = 'sound/weapons/gunshots/gunshot.ogg'
|
||||
|
||||
/mob/living/basic/hivebot/range
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
icon_state = "piratespaceranged"
|
||||
icon_living = "piratespaceranged"
|
||||
is_ranged = TRUE
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
projectile_type = /obj/projectile/beam
|
||||
projectile_sound = 'sound/weapons/laser.ogg'
|
||||
ranged_burst_count = 2
|
||||
ranged_burst_interval = 0.5 SECONDS // Same fire rate as people!
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
step_type = FOOTSTEP_MOB_SHOE
|
||||
|
||||
is_ranged = TRUE
|
||||
projectile_type = /obj/item/projectile/plasma/adv
|
||||
projectile_type = /obj/projectile/plasma/adv
|
||||
projectile_sound = 'sound/weapons/laser.ogg'
|
||||
ranged_cooldown = 1.75 SECONDS
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
icon_state = "vox_foreman"
|
||||
icon_living = "vox_foreman"
|
||||
ai_controller = /datum/ai_controller/basic_controller/simple/vox_foreman
|
||||
projectile_type = /obj/item/projectile/bullet/spike
|
||||
projectile_type = /obj/projectile/bullet/spike
|
||||
projectile_sound = 'sound/weapons/bladeslice.ogg'
|
||||
ranged_burst_count = 2
|
||||
ranged_burst_interval = 0.5 SECONDS
|
||||
|
||||
@@ -130,14 +130,14 @@
|
||||
return ..()
|
||||
|
||||
/mob/living/basic/mining_drone/CanPass(atom/movable/O)
|
||||
if(istype(O, /obj/item/projectile/kinetic))
|
||||
var/obj/item/projectile/kinetic/K = O
|
||||
if(istype(O, /obj/projectile/kinetic))
|
||||
var/obj/projectile/kinetic/K = O
|
||||
if(K.kinetic_gun)
|
||||
for(var/A in K.kinetic_gun.get_modkits())
|
||||
var/obj/item/borg/upgrade/modkit/M = A
|
||||
if(istype(M, /obj/item/borg/upgrade/modkit/minebot_passthrough))
|
||||
return TRUE
|
||||
if(istype(O, /obj/item/projectile/destabilizer))
|
||||
if(istype(O, /obj/projectile/destabilizer))
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
ai_controller = /datum/ai_controller/basic_controller/watcher
|
||||
is_ranged = TRUE
|
||||
ranged_cooldown = 3 SECONDS
|
||||
projectile_type = /obj/item/projectile/temp/basilisk
|
||||
projectile_type = /obj/projectile/temp/basilisk
|
||||
projectile_sound = 'sound/weapons/pierce.ogg'
|
||||
|
||||
loot = list(/obj/item/stack/ore/diamond{layer = ABOVE_MOB_LAYER},
|
||||
@@ -35,12 +35,12 @@
|
||||
. = ..()
|
||||
AddElement(/datum/element/ai_retaliate)
|
||||
|
||||
/obj/item/projectile/temp/basilisk
|
||||
/obj/projectile/temp/basilisk
|
||||
name = "freezing blast"
|
||||
icon_state = "ice_2"
|
||||
temperature = 50
|
||||
|
||||
/obj/item/projectile/temp/basilisk/on_hit(atom/target, blocked)
|
||||
/obj/projectile/temp/basilisk/on_hit(atom/target, blocked)
|
||||
..()
|
||||
if(isrobot(target))
|
||||
var/mob/living/silicon/robot/cyborg = target
|
||||
@@ -94,7 +94,7 @@
|
||||
light_range = 3
|
||||
light_power = 2.5
|
||||
light_color = LIGHT_COLOR_LAVA
|
||||
projectile_type = /obj/item/projectile/temp/basilisk/magmawing
|
||||
projectile_type = /obj/projectile/temp/basilisk/magmawing
|
||||
crusher_loot = /obj/item/crusher_trophy/blaster_tubes/magma_wing
|
||||
crusher_drop_mod = 100 // These things are extremely rare (1/133 per spawner). You shouldn't have to hope for another stroke of luck to get it's trophy after finding it
|
||||
|
||||
@@ -107,12 +107,12 @@
|
||||
icon_dead = "watcher_icewing_dead"
|
||||
maxHealth = 170
|
||||
health = 170
|
||||
projectile_type = /obj/item/projectile/temp/basilisk/icewing
|
||||
projectile_type = /obj/projectile/temp/basilisk/icewing
|
||||
butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/bone = 1) // No sinew; the wings are too fragile to be usable
|
||||
crusher_loot = /obj/item/crusher_trophy/watcher_wing/ice_wing
|
||||
crusher_drop_mod = 100 // These things are extremely rare (1/400 per spawner). You shouldn't have to hope for another stroke of luck to get it's trophy after finding it
|
||||
|
||||
/obj/item/projectile/temp/basilisk/magmawing
|
||||
/obj/projectile/temp/basilisk/magmawing
|
||||
name = "scorching blast"
|
||||
icon_state = "lava"
|
||||
damage = 5
|
||||
@@ -120,11 +120,11 @@
|
||||
temperature = 500 // Heats you up!
|
||||
immolate = 1
|
||||
|
||||
/obj/item/projectile/temp/basilisk/icewing
|
||||
/obj/projectile/temp/basilisk/icewing
|
||||
damage = 5
|
||||
nodamage = FALSE
|
||||
|
||||
/obj/item/projectile/temp/basilisk/icewing/on_hit(atom/target, blocked = FALSE)
|
||||
/obj/projectile/temp/basilisk/icewing/on_hit(atom/target, blocked = FALSE)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/mob/living/L = target
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
for(var/obj/item/stack/ore/ore in src)
|
||||
ore.forceMove(loc)
|
||||
|
||||
/mob/living/basic/mining/goldgrub/bullet_act(obj/item/projectile/P)
|
||||
/mob/living/basic/mining/goldgrub/bullet_act(obj/projectile/P)
|
||||
if(P.armor_penetration_flat + P.armor_penetration_percentage >= 100)
|
||||
return ..()
|
||||
visible_message("<span class='danger'>[P.name] was repelled by [name]'s girth!</span>")
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
/// Message to output if throwing damage is absorbed
|
||||
var/throw_blocked_message = "bounces off"
|
||||
|
||||
/mob/living/basic/mining/bullet_act(obj/item/projectile/P) // Reduces damage from most projectiles to curb off-screen kills
|
||||
/mob/living/basic/mining/bullet_act(obj/projectile/P) // Reduces damage from most projectiles to curb off-screen kills
|
||||
if(P.damage < 30 && P.damage_type != BRUTE && has_laser_resist)
|
||||
P.damage = (P.damage / 3)
|
||||
visible_message("<span class='danger'>[P] has a reduced effect on [src]!</span>")
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
/mob/living/basic/netherworld/Initialize(mapload)
|
||||
. = ..()
|
||||
if(prob(grappler_chance))
|
||||
AddComponent(/datum/component/ranged_attacks, projectile_type = /obj/item/projectile/energy/demonic_grappler, projectile_sound = 'sound/weapons/wave.ogg')
|
||||
AddComponent(/datum/component/ranged_attacks, projectile_type = /obj/projectile/energy/demonic_grappler, projectile_sound = 'sound/weapons/wave.ogg')
|
||||
name = "grappling " + name
|
||||
ai_controller = new /datum/ai_controller/basic_controller/simple/simple_skirmisher/prowler(src)
|
||||
update_appearance(UPDATE_NAME)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
is_ranged = TRUE
|
||||
ranged_burst_count = 3
|
||||
ranged_burst_interval = 0.4
|
||||
projectile_type = /obj/item/projectile/beam/immolator/weak/hitscan
|
||||
projectile_type = /obj/projectile/beam/immolator/weak/hitscan
|
||||
projectile_sound = 'sound/weapons/laser3.ogg'
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minimum_survivable_temperature = 0
|
||||
@@ -88,7 +88,7 @@
|
||||
update_icons()
|
||||
|
||||
/// We overide the basic effect, as malfunctioning drones are in space, and use jets to dodge. Also lets us do cool effects.
|
||||
/mob/living/basic/malf_drone/advanced_bullet_dodge(mob/living/source, obj/item/projectile/hitting_projectile)
|
||||
/mob/living/basic/malf_drone/advanced_bullet_dodge(mob/living/source, obj/projectile/hitting_projectile)
|
||||
if(HAS_TRAIT(source, TRAIT_IMMOBILIZED))
|
||||
return NONE
|
||||
if(source.stat != CONSCIOUS)
|
||||
|
||||
@@ -8,7 +8,7 @@ emp_act
|
||||
*/
|
||||
|
||||
|
||||
/mob/living/carbon/human/bullet_act(obj/item/projectile/P, def_zone)
|
||||
/mob/living/carbon/human/bullet_act(obj/projectile/P, def_zone)
|
||||
if(!dna.species.bullet_act(P, src, def_zone))
|
||||
add_attack_logs(P.firer, src, "hit by [P.type] but got deflected by species '[dna.species]'")
|
||||
P.reflect_back(src) //It has to be here, not on species. Why? Who knows. Testing showed me no reason why it doesn't work on species, and neither did tracing. It has to be here, or it gets qdel'd by bump.
|
||||
@@ -21,7 +21,7 @@ emp_act
|
||||
if(1) // proper reflection
|
||||
reflected = TRUE
|
||||
if(2) //If target is holding a toy sword
|
||||
var/static/list/safe_list = list(/obj/item/projectile/beam/lasertag, /obj/item/projectile/beam/practice)
|
||||
var/static/list/safe_list = list(/obj/projectile/beam/lasertag, /obj/projectile/beam/practice)
|
||||
reflected = is_type_in_list(P, safe_list) //And it's safe
|
||||
|
||||
if(reflected)
|
||||
@@ -147,7 +147,7 @@ emp_act
|
||||
log_game("[key_name(user)] set [key_name(src)] on fire with [I]")
|
||||
|
||||
|
||||
/mob/living/carbon/human/check_projectile_dismemberment(obj/item/projectile/P, def_zone)
|
||||
/mob/living/carbon/human/check_projectile_dismemberment(obj/projectile/P, def_zone)
|
||||
var/obj/item/organ/external/affecting = get_organ(check_zone(def_zone))
|
||||
if(affecting && !(affecting.limb_flags & CANNOT_DISMEMBER) && affecting.get_damage() >= (affecting.max_damage - P.dismemberment))
|
||||
var/damtype = DROPLIMB_SHARP
|
||||
@@ -826,7 +826,7 @@ emp_act
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/projectile_hit_check(obj/item/projectile/P)
|
||||
/mob/living/carbon/human/projectile_hit_check(obj/projectile/P)
|
||||
return (HAS_TRAIT(src, TRAIT_FLOORED) || HAS_TRAIT(src, TRAIT_NOKNOCKDOWNSLOWDOWN)) && !density && !(P.always_hit_living_nondense && (stat != DEAD) && !isLivingSSD(src)) // hit mobs that are intentionally lying down to prevent combat crawling.
|
||||
|
||||
/mob/living/carbon/human/canBeHandcuffed()
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
var/last_hit = 0
|
||||
var/timer_id = TIMER_ID_NULL
|
||||
|
||||
/mob/living/carbon/human/dummy/bullet_act(obj/item/projectile/P, def_zone)
|
||||
/mob/living/carbon/human/dummy/bullet_act(obj/projectile/P, def_zone)
|
||||
if(!first_hit)
|
||||
first_hit = world.time
|
||||
visible_message("Started tracking hit at time [first_hit]!")
|
||||
|
||||
@@ -1071,7 +1071,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u
|
||||
/datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source, method = REAGENT_TOUCH)
|
||||
M.adjust_bodytemperature(clamp((temperature + M.bodytemperature) * 0.5 - M.bodytemperature, BODYTEMP_COOLING_MAX, BODYTEMP_HEATING_MAX)) // Approximation for gradual heating or cooling.
|
||||
|
||||
/datum/species/proc/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) //return TRUE if hit, FALSE if stopped/reflected/etc
|
||||
/datum/species/proc/bullet_act(obj/projectile/P, mob/living/carbon/human/H) //return TRUE if hit, FALSE if stopped/reflected/etc
|
||||
return TRUE
|
||||
|
||||
/datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
|
||||
|
||||
@@ -114,8 +114,8 @@
|
||||
H.adjustBruteLoss(2)
|
||||
..()
|
||||
|
||||
/datum/species/diona/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H, def_zone)
|
||||
if(istype(P, /obj/item/projectile/energy/floramut))
|
||||
/datum/species/diona/bullet_act(obj/projectile/P, mob/living/carbon/human/H, def_zone)
|
||||
if(istype(P, /obj/projectile/energy/floramut))
|
||||
P.nodamage = TRUE
|
||||
H.Weaken(1 SECONDS)
|
||||
if(prob(80))
|
||||
@@ -123,7 +123,7 @@
|
||||
else
|
||||
randmutg(H)
|
||||
H.visible_message("[H] writhes for a moment as [H.p_their()] nymphs squirm and mutate.", "All of you squirm uncomfortably for a moment as you feel your genes changing.")
|
||||
else if(istype(P, /obj/item/projectile/energy/florayield))
|
||||
else if(istype(P, /obj/projectile/energy/florayield))
|
||||
P.nodamage = TRUE
|
||||
var/obj/item/organ/external/organ = H.get_organ(check_zone(def_zone))
|
||||
if(!organ)
|
||||
|
||||
@@ -384,7 +384,7 @@
|
||||
new /obj/item/stack/ore/glass(get_turf(H))
|
||||
qdel(H)
|
||||
|
||||
/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
|
||||
/datum/species/golem/sand/bullet_act(obj/projectile/P, mob/living/carbon/human/H)
|
||||
if(!(P.original == H && P.firer == H))
|
||||
if((P.flag == BULLET || P.flag == BOMB) && P.armor_penetration_percentage < 100)
|
||||
playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1)
|
||||
@@ -418,7 +418,7 @@
|
||||
new /obj/item/shard(get_turf(H))
|
||||
qdel(H)
|
||||
|
||||
/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
|
||||
/datum/species/golem/glass/bullet_act(obj/projectile/P, mob/living/carbon/human/H)
|
||||
if(!(P.original == H && P.firer == H)) //self-shots don't reflect
|
||||
if(P.is_reflectable(REFLECTABILITY_ENERGY))
|
||||
H.visible_message("<span class='danger'>[P] gets reflected by [H]'s glass skin!</span>", \
|
||||
@@ -485,7 +485,7 @@
|
||||
if(world.time > last_teleport + teleport_cooldown && user != H)
|
||||
reactive_teleport(H)
|
||||
|
||||
/datum/species/golem/bluespace/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
|
||||
/datum/species/golem/bluespace/bullet_act(obj/projectile/P, mob/living/carbon/human/H)
|
||||
if(world.time > last_teleport + teleport_cooldown)
|
||||
reactive_teleport(H)
|
||||
return TRUE
|
||||
@@ -604,7 +604,7 @@
|
||||
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
||||
last_banana = world.time
|
||||
|
||||
/datum/species/golem/bananium/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
|
||||
/datum/species/golem/bananium/bullet_act(obj/projectile/P, mob/living/carbon/human/H)
|
||||
if(world.time > last_banana + banana_cooldown)
|
||||
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
|
||||
last_banana = world.time
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
/mob/living/proc/is_eyes_covered(check_glasses = TRUE, check_head = TRUE, check_mask = TRUE)
|
||||
return FALSE
|
||||
|
||||
/mob/living/bullet_act(obj/item/projectile/P, def_zone)
|
||||
/mob/living/bullet_act(obj/projectile/P, def_zone)
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, P, def_zone)
|
||||
//Armor
|
||||
var/armor = run_armor_check(def_zone, P.flag, armor_penetration_flat = P.armor_penetration_flat, armor_penetration_percentage = P.armor_penetration_percentage)
|
||||
@@ -57,7 +57,7 @@
|
||||
return P.on_hit(src, armor, def_zone)
|
||||
|
||||
/// Tries to dodge incoming bullets if we aren't disabled for any reasons. Advised to overide with advanced effects, this is as basic example admins can apply.
|
||||
/mob/living/proc/advanced_bullet_dodge(mob/living/source, obj/item/projectile/hitting_projectile)
|
||||
/mob/living/proc/advanced_bullet_dodge(mob/living/source, obj/projectile/hitting_projectile)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(HAS_TRAIT(source, TRAIT_IMMOBILIZED))
|
||||
@@ -79,7 +79,7 @@
|
||||
advanced_bullet_dodge_chance = 0
|
||||
return ATOM_PREHIT_FAILURE
|
||||
|
||||
/mob/living/proc/check_projectile_dismemberment(obj/item/projectile/P, def_zone)
|
||||
/mob/living/proc/check_projectile_dismemberment(obj/projectile/P, def_zone)
|
||||
return 0
|
||||
|
||||
///As the name suggests, this should be called to apply electric shocks.
|
||||
|
||||
@@ -904,7 +904,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
|
||||
if(target)
|
||||
open_nearest_door(target)
|
||||
|
||||
/mob/living/silicon/ai/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/silicon/ai/bullet_act(obj/projectile/Proj)
|
||||
..(Proj)
|
||||
return 2
|
||||
|
||||
|
||||
@@ -393,7 +393,7 @@
|
||||
|
||||
. += msg
|
||||
|
||||
/mob/living/silicon/pai/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/silicon/pai/bullet_act(obj/projectile/Proj)
|
||||
..(Proj)
|
||||
if(stat != 2)
|
||||
spawn(1)
|
||||
|
||||
@@ -929,7 +929,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
return
|
||||
|
||||
|
||||
/mob/living/silicon/robot/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/silicon/robot/bullet_act(obj/projectile/Proj)
|
||||
..(Proj)
|
||||
if(prob(75) && Proj.damage > 0) spark_system.start()
|
||||
return 2
|
||||
@@ -1212,7 +1212,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
if(emagged)
|
||||
to_chat(user, "<span class='warning'>The emag sparks, and flashes red. [src] has already been emagged!</span>")
|
||||
return
|
||||
|
||||
|
||||
if(wiresexposed)
|
||||
to_chat(user, "<span class='warning'>You must close the wiring panel first!</span>")
|
||||
return
|
||||
@@ -1614,7 +1614,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
else
|
||||
to_chat(src, "<span class='boldwarning'>Your allegiance has not been compromised. Keep serving all Syndicate agents to the best of your abilities.</span>")
|
||||
to_chat(src, "<span class='boldwarning'>Warning: Remote lockdown and detonation protections have been disabled due to system instability.</span>")
|
||||
|
||||
|
||||
if(module)
|
||||
module.emag_act(flayer)
|
||||
module.module_type = "Malf" // For the cool factor.
|
||||
@@ -1626,7 +1626,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
|
||||
/mob/living/silicon/robot/proc/remove_robot_mindslave()
|
||||
clear_zeroth_law()
|
||||
if(mind)
|
||||
if(mind)
|
||||
mind.remove_antag_datum(/datum/antagonist/mindslave/malf_robot)
|
||||
mind.remove_antag_datum(/datum/antagonist/mindslave/emagged_robot)
|
||||
mind.remove_antag_datum(/datum/antagonist/mindslave/mindflayer_mindslave_robot)
|
||||
@@ -1683,7 +1683,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
radio.recalculateChannels()
|
||||
playsound(get_turf(src), 'sound/mecha/nominalnano.ogg', 75, FALSE)
|
||||
|
||||
/mob/living/silicon/robot/deathsquad/bullet_act(obj/item/projectile/P)
|
||||
/mob/living/silicon/robot/deathsquad/bullet_act(obj/projectile/P)
|
||||
if(istype(P) && P.is_reflectable(REFLECTABILITY_ENERGY) && P.starting)
|
||||
visible_message("<span class='danger'>[P] gets reflected by [src]!</span>", "<span class='userdanger'>[P] gets reflected by [src]!</span>")
|
||||
P.reflect_back(src)
|
||||
|
||||
@@ -421,7 +421,7 @@
|
||||
if(!current_syringes || chambered?.BB)
|
||||
return
|
||||
|
||||
chambered.BB = new /obj/item/projectile/bullet/dart/syringe/heavyduty(src)
|
||||
chambered.BB = new /obj/projectile/bullet/dart/syringe/heavyduty(src)
|
||||
chambered.BB.reagents.add_reagent_list(list("toxin" = 2))
|
||||
chambered.BB.name = "heavy duty syringe"
|
||||
current_syringes--
|
||||
|
||||
@@ -284,7 +284,7 @@
|
||||
user.visible_message("<span class='alert'>[user] patches some dents on [src] with [I].</span>")
|
||||
|
||||
|
||||
/mob/living/silicon/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/silicon/bullet_act(obj/projectile/Proj)
|
||||
if(!Proj.nodamage)
|
||||
var/damage = run_armor(Proj.damage, Proj.damage_type, Proj.flag, 0, Proj.armor_penetration_flat, Proj.armor_penetration_percentage)
|
||||
switch(Proj.damage_type)
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
apply_damage(damage, damagetype, null, getarmor(armor_type = armorcheck))
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/simple_animal/bullet_act(obj/projectile/Proj)
|
||||
if(!Proj)
|
||||
return
|
||||
apply_damage(Proj.damage, Proj.damage_type)
|
||||
|
||||
@@ -515,7 +515,7 @@
|
||||
add_fingerprint(user)
|
||||
user.visible_message("[user] repairs [src]!","<span class='notice'>You repair [src].</span>")
|
||||
|
||||
/mob/living/simple_animal/bot/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/simple_animal/bot/bullet_act(obj/projectile/Proj)
|
||||
if(Proj && (Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
||||
if(prob(75) && Proj.damage > 0)
|
||||
do_sparks(5, 1, src)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
var/weapons_check = TRUE //If true, arrest people for weapons if they don't have access
|
||||
var/check_records = TRUE //Does it check security records?
|
||||
var/no_handcuffs = FALSE //If true, don't handcuff
|
||||
var/projectile = /obj/item/projectile/beam/disabler //Holder for projectile type
|
||||
var/projectile = /obj/projectile/beam/disabler //Holder for projectile type
|
||||
var/shoot_sound = 'sound/weapons/taser.ogg'
|
||||
var/baton_delayed = FALSE
|
||||
var/obj/item/melee/baton/infinite_cell/baton = null // stunbaton bot uses to melee attack
|
||||
@@ -200,15 +200,15 @@
|
||||
icon_state = "[lasercolor]ed209[on]"
|
||||
set_weapon()
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/simple_animal/bot/ed209/bullet_act(obj/projectile/Proj)
|
||||
if(!disabled)
|
||||
var/lasertag_check = FALSE
|
||||
if(lasercolor == "b")
|
||||
if(istype(Proj, /obj/item/projectile/beam/lasertag/redtag))
|
||||
if(istype(Proj, /obj/projectile/beam/lasertag/redtag))
|
||||
lasertag_check = TRUE
|
||||
|
||||
else if(lasercolor == "r")
|
||||
if(istype(Proj, /obj/item/projectile/beam/lasertag/bluetag))
|
||||
if(istype(Proj, /obj/projectile/beam/lasertag/bluetag))
|
||||
lasertag_check = TRUE
|
||||
|
||||
if(lasertag_check)
|
||||
@@ -219,7 +219,7 @@
|
||||
addtimer(CALLBACK(src, PROC_REF(unset_disabled)), 10 SECONDS)
|
||||
return TRUE
|
||||
|
||||
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
|
||||
if(istype(Proj ,/obj/projectile/beam)||istype(Proj,/obj/projectile/bullet))
|
||||
if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
|
||||
if(!Proj.nodamage && Proj.damage < src.health)
|
||||
retaliate(Proj.firer)
|
||||
@@ -440,16 +440,16 @@
|
||||
shoot_sound = 'sound/weapons/laser.ogg'
|
||||
if(emagged)
|
||||
if(lasercolor)
|
||||
projectile = /obj/item/projectile/beam/disabler
|
||||
projectile = /obj/projectile/beam/disabler
|
||||
else
|
||||
projectile = /obj/item/projectile/beam
|
||||
projectile = /obj/projectile/beam
|
||||
else
|
||||
if(!lasercolor)
|
||||
projectile = /obj/item/projectile/beam/disabler
|
||||
projectile = /obj/projectile/beam/disabler
|
||||
else if(lasercolor == "b")
|
||||
projectile = /obj/item/projectile/beam/lasertag/bluetag
|
||||
projectile = /obj/projectile/beam/lasertag/bluetag
|
||||
else if(lasercolor == "r")
|
||||
projectile = /obj/item/projectile/beam/lasertag/redtag
|
||||
projectile = /obj/projectile/beam/lasertag/redtag
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/proc/shootAt(mob/target)
|
||||
if(lastfired && world.time - lastfired < shot_delay)
|
||||
@@ -469,7 +469,7 @@
|
||||
|
||||
if(!isturf(U))
|
||||
return
|
||||
var/obj/item/projectile/A = new projectile(loc)
|
||||
var/obj/projectile/A = new projectile(loc)
|
||||
playsound(loc, shoot_sound, 50, 1)
|
||||
A.current = U
|
||||
A.yo = U.y - T.y
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
var/mob/living/carbon/C = A
|
||||
sword_attack(C)
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/bullet_act(obj/item/projectile/P) //so uncivilized
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/bullet_act(obj/projectile/P) //so uncivilized
|
||||
retaliate(P.firer)
|
||||
if((icon_state == spin_icon) && (prob(block_chance_ranged))) //only when the eswords are on
|
||||
visible_message("[src] deflects [P] with its energy swords!")
|
||||
|
||||
@@ -156,8 +156,8 @@
|
||||
if(HAS_TRAIT(src, TRAIT_CMAGGED))
|
||||
. += "<span class='warning'>Yellow ooze seems to be seeping from the case...</span>"
|
||||
|
||||
/mob/living/simple_animal/bot/honkbot/bullet_act(obj/item/projectile/Proj)
|
||||
if((istype(Proj,/obj/item/projectile/beam)) || (istype(Proj,/obj/item/projectile/bullet) && (Proj.damage_type == BURN))||(Proj.damage_type == BRUTE) && (!Proj.nodamage && Proj.damage < health && ishuman(Proj.firer)))
|
||||
/mob/living/simple_animal/bot/honkbot/bullet_act(obj/projectile/Proj)
|
||||
if((istype(Proj,/obj/projectile/beam)) || (istype(Proj,/obj/projectile/bullet) && (Proj.damage_type == BURN))||(Proj.damage_type == BRUTE) && (!Proj.nodamage && Proj.damage < health && ishuman(Proj.firer)))
|
||||
retaliate(Proj.firer)
|
||||
..()
|
||||
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
wires.cut_random()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/simple_animal/bot/mulebot/bullet_act(obj/projectile/Proj)
|
||||
if(..())
|
||||
if(prob(50) && !isnull(load))
|
||||
unload(0)
|
||||
|
||||
@@ -207,14 +207,14 @@
|
||||
declare_arrests = FALSE
|
||||
icon_state = "[base_icon][on]"
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/bullet_act(obj/item/projectile/Proj)
|
||||
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
|
||||
/mob/living/simple_animal/bot/secbot/bullet_act(obj/projectile/Proj)
|
||||
if(istype(Proj ,/obj/projectile/beam)||istype(Proj,/obj/projectile/bullet))
|
||||
if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
|
||||
if(!Proj.nodamage && Proj.damage < src.health)
|
||||
retaliate(Proj.firer)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/projectile_hit_check(obj/item/projectile/P)
|
||||
/mob/living/simple_animal/bot/secbot/projectile_hit_check(obj/projectile/P)
|
||||
return FALSE
|
||||
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
if(lastfired && world.time - lastfired < shot_delay)
|
||||
return
|
||||
lastfired = world.time
|
||||
var/obj/item/projectile/P = new projectile(loc)
|
||||
var/obj/projectile/P = new projectile(loc)
|
||||
playsound(loc, shoot_sound, 100, 1)
|
||||
P.current = loc
|
||||
P.starting = loc
|
||||
@@ -176,7 +176,7 @@
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/set_weapon()
|
||||
projectile = /obj/item/projectile/bullet/a40mm
|
||||
projectile = /obj/projectile/bullet/a40mm
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/emp_act(severity)
|
||||
return
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
damage_shield()
|
||||
playsound(src,'sound/hallucinations/veryfar_noise.ogg', 40, 1)
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork_construct/clockwork_marauder/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/simple_animal/hostile/clockwork_construct/clockwork_marauder/bullet_act(obj/projectile/Proj)
|
||||
if(shield_health > 0)
|
||||
damage_shield()
|
||||
to_chat(src, "<span class='danger'>Your shield blocks the attack!</span>")
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
AIStatus = AI_ON
|
||||
environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/armoured/bullet_act(obj/item/projectile/P)
|
||||
/mob/living/simple_animal/hostile/construct/armoured/bullet_act(obj/projectile/P)
|
||||
if(P.is_reflectable(REFLECTABILITY_ENERGY))
|
||||
if(P.damage_type == BRUTE || P.damage_type == BURN)
|
||||
adjustBruteLoss(P.damage * 0.8) // 16 hit with security laser gun
|
||||
|
||||
@@ -621,7 +621,7 @@
|
||||
var/turf/U = get_turf(target)
|
||||
if(!T || !U)
|
||||
return
|
||||
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam(loc)
|
||||
var/obj/projectile/beam/A = new /obj/projectile/beam(loc)
|
||||
A.icon = 'icons/effects/genetics.dmi'
|
||||
A.icon_state = "eyelasers"
|
||||
playsound(src.loc, 'sound/weapons/taser2.ogg', 75, 1)
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
to_chat(src, "<span class='userdanger'>With our egg laid, our death approaches rapidly...</span>")
|
||||
addtimer(CALLBACK(src, PROC_REF(death)), 25 SECONDS)
|
||||
|
||||
/mob/living/simple_animal/hostile/headslug/projectile_hit_check(obj/item/projectile/P)
|
||||
/mob/living/simple_animal/hostile/headslug/projectile_hit_check(obj/projectile/P)
|
||||
return (stat || FALSE)
|
||||
|
||||
/obj/item/organ/internal/body_egg/changeling_egg
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
if(stat == CONSCIOUS && !target && AIStatus != AI_OFF && !client && user)
|
||||
FindTarget(list(user), 1)
|
||||
|
||||
/mob/living/simple_animal/hostile/bullet_act(obj/item/projectile/P)
|
||||
/mob/living/simple_animal/hostile/bullet_act(obj/projectile/P)
|
||||
if(stat == CONSCIOUS && !target && AIStatus != AI_OFF && !client)
|
||||
if(P.firer && get_dist(src, P.firer) <= aggro_vision_range)
|
||||
FindTarget(list(P.firer), 1)
|
||||
@@ -397,7 +397,7 @@
|
||||
playsound(src, projectilesound, 100, 1)
|
||||
casing.fire(targeted_atom, src, zone_override = ran_zone(), firer_source_atom = src)
|
||||
else if(projectiletype)
|
||||
var/obj/item/projectile/P = new projectiletype(startloc)
|
||||
var/obj/projectile/P = new projectiletype(startloc)
|
||||
playsound(src, projectilesound, 100, 1)
|
||||
P.current = startloc
|
||||
P.starting = startloc
|
||||
|
||||
@@ -359,7 +359,7 @@ Difficulty: Hard
|
||||
addtimer(CALLBACK(src, PROC_REF(body_shield)), BODY_SHIELD_COOLDOWN_TIME)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/ancient_robot/bullet_act(obj/item/projectile/P)
|
||||
/mob/living/simple_animal/hostile/megafauna/ancient_robot/bullet_act(obj/projectile/P)
|
||||
if(!body_shield_enabled)
|
||||
return ..()
|
||||
do_sparks(2, 1, src)
|
||||
@@ -435,7 +435,7 @@ Difficulty: Hard
|
||||
var/turf/S = get_turf(src)
|
||||
if(!S || !T)
|
||||
return
|
||||
var/obj/item/projectile/energy/tesla_bolt/O = new /obj/item/projectile/energy/tesla_bolt(S)
|
||||
var/obj/projectile/energy/tesla_bolt/O = new /obj/projectile/energy/tesla_bolt(S)
|
||||
O.current = S
|
||||
O.yo = T.y - S.y
|
||||
O.xo = T.x - S.x
|
||||
@@ -488,7 +488,7 @@ Difficulty: Hard
|
||||
var/turf/T = get_turf(target)
|
||||
if(!spot || !T)
|
||||
return
|
||||
var/obj/item/projectile/bullet/rock/O = new /obj/item/projectile/bullet/rock(spot)
|
||||
var/obj/projectile/bullet/rock/O = new /obj/projectile/bullet/rock(spot)
|
||||
O.current = spot
|
||||
O.yo = T.y - spot.y
|
||||
O.xo = T.x - spot.x
|
||||
@@ -662,7 +662,7 @@ Difficulty: Hard
|
||||
check_friendly_fire = 1
|
||||
ranged = TRUE
|
||||
projectilesound = 'sound/weapons/gunshots/gunshot.ogg'
|
||||
projectiletype = /obj/item/projectile/bullet/ancient_robot_bullet
|
||||
projectiletype = /obj/projectile/bullet/ancient_robot_bullet
|
||||
attacktext = "stomps on"
|
||||
armor_penetration_percentage = 50
|
||||
melee_damage_lower = 15
|
||||
@@ -707,7 +707,7 @@ Difficulty: Hard
|
||||
..()
|
||||
health_and_snap_check(TRUE)
|
||||
|
||||
/mob/living/simple_animal/hostile/ancient_robot_leg/bullet_act(obj/item/projectile/P)
|
||||
/mob/living/simple_animal/hostile/ancient_robot_leg/bullet_act(obj/projectile/P)
|
||||
if(core.stat == CONSCIOUS && !core.target && core.AIStatus != AI_OFF && !core.client)
|
||||
if(P.firer && get_dist(core, P.firer) <= core.aggro_vision_range)
|
||||
core.FindTarget(list(P.firer), 1)
|
||||
@@ -809,10 +809,10 @@ Difficulty: Hard
|
||||
/mob/living/simple_animal/hostile/ancient_robot_leg/electrocute_act(shock_damage, source, siemens_coeff, flags)
|
||||
return
|
||||
|
||||
/obj/item/projectile/bullet/ancient_robot_bullet
|
||||
/obj/projectile/bullet/ancient_robot_bullet
|
||||
damage = 8
|
||||
|
||||
/obj/item/projectile/bullet/rock
|
||||
/obj/projectile/bullet/rock
|
||||
name= "thrown rock"
|
||||
damage = 25
|
||||
icon = 'icons/obj/meteor.dmi'
|
||||
@@ -827,7 +827,7 @@ Difficulty: Hard
|
||||
|
||||
|
||||
/// Leaving here for adminbus / so vetus still uses it.
|
||||
/obj/item/projectile/energy/tesla_bolt
|
||||
/obj/projectile/energy/tesla_bolt
|
||||
name = "shock bolt"
|
||||
icon_state = "purple_laser"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
|
||||
@@ -838,16 +838,16 @@ Difficulty: Hard
|
||||
|
||||
/obj/item/ammo_casing/energy/tesla_bolt/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
|
||||
..()
|
||||
var/obj/item/projectile/energy/tesla_bolt/P = BB
|
||||
var/obj/projectile/energy/tesla_bolt/P = BB
|
||||
spawn(1)
|
||||
P.chain = P.Beam(user, icon_state = "purple_lightning", icon = 'icons/effects/effects.dmi', time = 1000, maxdistance = 30)
|
||||
|
||||
/obj/item/projectile/energy/tesla_bolt/on_hit(atom/target)
|
||||
/obj/projectile/energy/tesla_bolt/on_hit(atom/target)
|
||||
. = ..()
|
||||
tesla_zap(src, zap_range, power, zap_flags)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/energy/tesla_bolt/Bump(atom/A) // Don't want the projectile hitting the legs
|
||||
/obj/projectile/energy/tesla_bolt/Bump(atom/A) // Don't want the projectile hitting the legs
|
||||
if(!istype(/mob/living/simple_animal/hostile/ancient_robot_leg, A))
|
||||
return ..()
|
||||
var/turf/target_turf = get_turf(A)
|
||||
|
||||
@@ -32,7 +32,7 @@ Difficulty: Medium
|
||||
light_color = "#E4C7C5"
|
||||
speak_emote = list("roars")
|
||||
speed = 3
|
||||
projectiletype = /obj/item/projectile/kinetic/miner
|
||||
projectiletype = /obj/projectile/kinetic/miner
|
||||
projectilesound = 'sound/weapons/kenetic_accel.ogg'
|
||||
ranged = TRUE
|
||||
ranged_cooldown_time = 16
|
||||
@@ -120,13 +120,13 @@ Difficulty: Medium
|
||||
..()
|
||||
target.remove_stun_absorption("miner")
|
||||
|
||||
/obj/item/projectile/kinetic/miner
|
||||
/obj/projectile/kinetic/miner
|
||||
damage = 20
|
||||
speed = 0.9
|
||||
icon_state = "ka_tracer"
|
||||
range = MINER_DASH_RANGE
|
||||
|
||||
/obj/item/projectile/kinetic/miner/enraged
|
||||
/obj/projectile/kinetic/miner/enraged
|
||||
damage = 35
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/adjustHealth(amount, updating_health = TRUE)
|
||||
@@ -201,7 +201,7 @@ Difficulty: Medium
|
||||
miner_saw = new /obj/item/melee/energy/cleaving_saw(src) //Real saw for real men.
|
||||
dash_cooldown_to_use = 0.5 SECONDS //Becomes a teleporting shit.
|
||||
ranged_cooldown_time = 5 //They got some cooldown mods.
|
||||
projectiletype = /obj/item/projectile/kinetic/miner/enraged
|
||||
projectiletype = /obj/projectile/kinetic/miner/enraged
|
||||
maxHealth = 1800
|
||||
health = 1800 //Bit more of a challenge.
|
||||
|
||||
|
||||
@@ -513,7 +513,7 @@ Difficulty: Hard
|
||||
if(.)
|
||||
recovery_time = world.time + 20 // can only attack melee once every 2 seconds but rapid_melee gives higher priority
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/bullet_act(obj/item/projectile/P)
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/bullet_act(obj/projectile/P)
|
||||
if(BUBBLEGUM_IS_ENRAGED)
|
||||
visible_message("<span class='danger'>[src] deflects the projectile; [p_they()] can't be hit with ranged weapons while enraged!</span>", "<span class='userdanger'>You deflect the projectile!</span>")
|
||||
playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 300, TRUE)
|
||||
@@ -654,7 +654,7 @@ Difficulty: Hard
|
||||
second_life = TRUE
|
||||
enraged = TRUE
|
||||
rapid_melee = 12
|
||||
projectiletype = /obj/item/projectile/magic/arcane_barrage/blood
|
||||
projectiletype = /obj/projectile/magic/arcane_barrage/blood
|
||||
projectilesound = 'sound/effects/splat.ogg'
|
||||
deathmessage = null
|
||||
death_sound = 'sound/hallucinations/veryfar_noise.ogg'
|
||||
|
||||
@@ -222,7 +222,7 @@ Difficulty: Very Hard
|
||||
if(!startloc || !endloc || endloc == loc)
|
||||
return
|
||||
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/colossus(startloc)
|
||||
var/obj/projectile/P = new /obj/projectile/colossus(startloc)
|
||||
P.preparePixelProjectile(endloc, startloc)
|
||||
P.firer = src
|
||||
P.firer_source_atom = src
|
||||
@@ -334,7 +334,7 @@ Difficulty: Very Hard
|
||||
target = new_target
|
||||
INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, orbit), target, 0, FALSE, 0, 0, FALSE, TRUE)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/bullet_act(obj/item/projectile/P)
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/bullet_act(obj/projectile/P)
|
||||
if(stat == CONSCIOUS)
|
||||
var/obj/effect/temp_visual/at_shield/AT = new /obj/effect/temp_visual/at_shield(loc, src)
|
||||
var/random_x = rand(-32, 32)
|
||||
@@ -356,14 +356,14 @@ Difficulty: Very Hard
|
||||
for(var/I in 1 to 2)
|
||||
loot += pick_n_take(choices)
|
||||
|
||||
/obj/item/projectile/colossus
|
||||
/obj/projectile/colossus
|
||||
name = "death bolt"
|
||||
icon_state = "chronobolt"
|
||||
damage = 25
|
||||
armor_penetration_percentage = 100
|
||||
speed = 2
|
||||
|
||||
/obj/item/projectile/colossus/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/colossus/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(isturf(target) || isobj(target))
|
||||
target.ex_act(EXPLODE_HEAVY)
|
||||
|
||||
@@ -549,7 +549,7 @@ Difficulty: Hard
|
||||
burst_range = initial(burst_range) + round(anger_modifier * 0.08)
|
||||
beam_range = initial(beam_range) + round(anger_modifier * 0.12)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/bullet_act(obj/item/projectile/P)
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/bullet_act(obj/projectile/P)
|
||||
if(stat == CONSCIOUS && !target && AIStatus != AI_OFF && !client)
|
||||
if(P.firer && get_dist(src, P.firer) <= aggro_vision_range)
|
||||
FindTarget(list(P.firer), 1)
|
||||
@@ -608,7 +608,7 @@ Difficulty: Hard
|
||||
if(mover == caster.pulledby)
|
||||
return TRUE
|
||||
if(isprojectile(mover))
|
||||
var/obj/item/projectile/P = mover
|
||||
var/obj/projectile/P = mover
|
||||
if(P.firer == caster)
|
||||
return TRUE
|
||||
if(mover == caster)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
environment_smash = ENVIRONMENT_SMASH_STRUCTURES
|
||||
attacktext = "drills into"
|
||||
attack_sound = 'sound/weapons/circsawhit.ogg'
|
||||
projectiletype = /obj/item/projectile/kinetic
|
||||
projectiletype = /obj/projectile/kinetic
|
||||
projectilesound = 'sound/weapons/kenetic_accel.ogg'
|
||||
speak_emote = list("states")
|
||||
throw_message = "does not go through the armor of"
|
||||
@@ -70,9 +70,9 @@
|
||||
. += "<span class='notice'><b>[rand(-30, 110)]%</b> mod capacity remaining.\nThere is a module installed, using <b>[rand(-5, 35)]%</b> capacity.\n...or at least you think so.</span>"
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/abandoned_minebot/CanPass(atom/movable/O)
|
||||
if(!istype(O, /obj/item/projectile/kinetic))
|
||||
if(!istype(O, /obj/projectile/kinetic))
|
||||
return ..()
|
||||
var/obj/item/projectile/kinetic/K = O
|
||||
var/obj/projectile/kinetic/K = O
|
||||
if(K.kinetic_gun)
|
||||
for(var/A in K.kinetic_gun.get_modkits())
|
||||
var/obj/item/borg/upgrade/modkit/M = A
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/shoot_projectile(turf/marker, set_angle, is_teleshot, is_trishot)
|
||||
var/turf/startloc = get_turf(src)
|
||||
if(!is_teleshot)
|
||||
var/obj/item/projectile/H = new /obj/item/projectile/herald(startloc)
|
||||
var/obj/projectile/H = new /obj/projectile/herald(startloc)
|
||||
H.preparePixelProjectile(marker, startloc)
|
||||
H.firer = src
|
||||
H.firer_source_atom = src
|
||||
@@ -139,7 +139,7 @@
|
||||
shoot_projectile(marker, set_angle + 15, FALSE, FALSE)
|
||||
shoot_projectile(marker, set_angle - 15, FALSE, FALSE)
|
||||
else
|
||||
var/obj/item/projectile/H = new /obj/item/projectile/herald/teleshot(startloc)
|
||||
var/obj/projectile/H = new /obj/projectile/herald/teleshot(startloc)
|
||||
H.preparePixelProjectile(marker, startloc)
|
||||
H.firer = src
|
||||
H.firer_source_atom = src
|
||||
@@ -222,19 +222,19 @@
|
||||
my_master = null
|
||||
. = ..()
|
||||
|
||||
/obj/item/projectile/herald
|
||||
/obj/projectile/herald
|
||||
name = "death bolt"
|
||||
icon_state = "chronobolt"
|
||||
damage = 15
|
||||
armor_penetration_percentage = 50
|
||||
speed = 2
|
||||
|
||||
/obj/item/projectile/herald/teleshot
|
||||
/obj/projectile/herald/teleshot
|
||||
name = "golden bolt"
|
||||
damage = 0
|
||||
color = rgb(255,255,102)
|
||||
|
||||
/obj/item/projectile/herald/prehit(atom/target)
|
||||
/obj/projectile/herald/prehit(atom/target)
|
||||
if(ismob(target) && ismob(firer))
|
||||
var/mob/living/mob_target = target
|
||||
if(mob_target.faction_check_mob(firer))
|
||||
@@ -244,13 +244,13 @@
|
||||
if(mob_target.buckled && mob_target.stat == DEAD)
|
||||
mob_target.dust() //no body cheese
|
||||
|
||||
/obj/item/projectile/herald/on_hit(atom/target, blocked = FALSE)
|
||||
/obj/projectile/herald/on_hit(atom/target, blocked = FALSE)
|
||||
. = ..()
|
||||
if(ismineralturf(target))
|
||||
var/turf/simulated/mineral/M = target
|
||||
M.gets_drilled()
|
||||
|
||||
/obj/item/projectile/herald/teleshot/on_hit(atom/target, blocked = FALSE)
|
||||
/obj/projectile/herald/teleshot/on_hit(atom/target, blocked = FALSE)
|
||||
. = ..()
|
||||
if(!istype(target, /mob/living/simple_animal/hostile/asteroid/elite/herald))
|
||||
firer.forceMove(get_turf(src))
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
return
|
||||
icon_state = icon_living
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/bullet_act(obj/item/projectile/P)//Reduces damage from most projectiles to curb off-screen kills
|
||||
/mob/living/simple_animal/hostile/asteroid/bullet_act(obj/projectile/P)//Reduces damage from most projectiles to curb off-screen kills
|
||||
if(stat == CONSCIOUS)
|
||||
Aggro()
|
||||
if(P.damage < 30 && P.damage_type != BRUTE && has_laser_resist)
|
||||
|
||||
@@ -511,7 +511,7 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/simple_animal/hostile/syndicate/bullet_act(obj/projectile/Proj)
|
||||
if(!Proj)
|
||||
return
|
||||
if(((melee_type == MELEE_WEAPON_DSWORD || syndie_flags & ESHIELD) || (melee_type == MELEE_WEAPON_ESWORD && prob(reflect_chance))) && Proj.is_reflectable(REFLECTABILITY_ENERGY))
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
/obj/structure/spider/terrorweb/CanPass(atom/movable/mover, border_dir)
|
||||
if(isterrorspider(mover))
|
||||
return TRUE
|
||||
if(istype(mover, /obj/item/projectile/terrorqueenspit))
|
||||
if(istype(mover, /obj/projectile/terrorqueenspit))
|
||||
return TRUE
|
||||
if(isliving(mover))
|
||||
var/mob/living/M = mover
|
||||
@@ -202,7 +202,7 @@
|
||||
if(!QDELETED(C) && C.loc == loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/spider/terrorweb/bullet_act(obj/item/projectile/Proj)
|
||||
/obj/structure/spider/terrorweb/bullet_act(obj/projectile/Proj)
|
||||
if(Proj.damage_type != BRUTE && Proj.damage_type != BURN)
|
||||
visible_message("<span class='danger'>[src] is undamaged by [Proj]!</span>")
|
||||
// Webs don't care about disablers, tasers, etc. Or toxin damage. They're organic, but not alive.
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
ai_playercontrol_allowtype = 0
|
||||
canlay = 1000
|
||||
spider_tier = TS_TIER_5
|
||||
projectiletype = /obj/item/projectile/terrorqueenspit/empress
|
||||
projectiletype = /obj/projectile/terrorqueenspit/empress
|
||||
icon = 'icons/mob/terrorspider64.dmi'
|
||||
pixel_x = -16
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
@@ -107,6 +107,6 @@
|
||||
qdel(T)
|
||||
to_chat(src, "<span class='userdanger'>All Terror Spiders, except yourself, will die off shortly.</span>")
|
||||
|
||||
/obj/item/projectile/terrorqueenspit/empress
|
||||
/obj/projectile/terrorqueenspit/empress
|
||||
damage = 90
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
projectilesound = 'sound/weapons/pierce.ogg'
|
||||
projectiletype = /obj/item/projectile/terrorqueenspit
|
||||
projectiletype = /obj/projectile/terrorqueenspit
|
||||
spider_tier = TS_TIER_4
|
||||
loudspeaker = TRUE
|
||||
spider_opens_doors = 2
|
||||
@@ -352,7 +352,7 @@
|
||||
if(is_station_level((get_turf(src)).z) && stat != DEAD)
|
||||
return list(ASSIGNMENT_SECURITY = 3, ASSIGNMENT_CREW = 30, ASSIGNMENT_MEDICAL = 2)
|
||||
|
||||
/obj/item/projectile/terrorqueenspit
|
||||
/obj/projectile/terrorqueenspit
|
||||
name = "acid spit"
|
||||
damage = 40
|
||||
icon_state = "toxin"
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
ranged = TRUE
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
projectiletype = /obj/item/projectile/snowball
|
||||
projectiletype = /obj/projectile/snowball
|
||||
|
||||
/mob/living/simple_animal/hostile/winter/reindeer
|
||||
name = "reindeer"
|
||||
@@ -104,7 +104,7 @@
|
||||
maxHealth = 200 //DID YOU REALLY BELIEVE IT WOULD BE THIS EASY!??!!
|
||||
health = 200
|
||||
ranged = TRUE
|
||||
projectiletype = /obj/item/projectile/ornament
|
||||
projectiletype = /obj/projectile/ornament
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
ranged = TRUE
|
||||
rapid = 3
|
||||
speed = 0 //he's lost some weight from the fighting
|
||||
projectiletype = /obj/item/projectile/ornament
|
||||
projectiletype = /obj/projectile/ornament
|
||||
retreat_distance = 3
|
||||
minimum_distance = 3
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@
|
||||
drop_held_item(FALSE)
|
||||
|
||||
//Bullets
|
||||
/mob/living/simple_animal/parrot/bullet_act(obj/item/projectile/P)
|
||||
/mob/living/simple_animal/parrot/bullet_act(obj/projectile/P)
|
||||
..()
|
||||
if(stat == CONSCIOUS && !client)
|
||||
if(parrot_state == PARROT_PERCH)
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
amount = -abs(amount)
|
||||
return ..() //Heals them
|
||||
|
||||
/mob/living/simple_animal/slime/bullet_act(obj/item/projectile/Proj)
|
||||
/mob/living/simple_animal/slime/bullet_act(obj/projectile/Proj)
|
||||
if(!Proj)
|
||||
return
|
||||
attacked += 10
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
return TRUE
|
||||
return (!mover.density || !density || horizontal)
|
||||
|
||||
/mob/proc/projectile_hit_check(obj/item/projectile/P)
|
||||
/mob/proc/projectile_hit_check(obj/projectile/P)
|
||||
return !(P.always_hit_living_nondense && (stat != DEAD) && !isLivingSSD(src)) && !density
|
||||
|
||||
/client/verb/toggle_throw_mode()
|
||||
|
||||
Reference in New Issue
Block a user