mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 19:44:09 +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:
@@ -253,7 +253,7 @@
|
||||
/obj/item/ammo_casing/magic/tentacle
|
||||
name = "tentacle"
|
||||
desc = "a tentacle."
|
||||
projectile_type = /obj/item/projectile/tentacle
|
||||
projectile_type = /obj/projectile/tentacle
|
||||
caliber = "tentacle"
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "tentacle_end"
|
||||
@@ -269,7 +269,7 @@
|
||||
gun = null
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/tentacle
|
||||
/obj/projectile/tentacle
|
||||
name = "tentacle"
|
||||
icon_state = "tentacle_end"
|
||||
damage = 0
|
||||
@@ -278,11 +278,11 @@
|
||||
reflectability = REFLECTABILITY_NEVER //Let us not reflect this ever. It's not quite a bullet, and a cling should never wrap its tentacle around itself, it controls its body well
|
||||
var/obj/item/ammo_casing/magic/tentacle/source //the item that shot it
|
||||
|
||||
/obj/item/projectile/tentacle/New(obj/item/ammo_casing/magic/tentacle/tentacle_casing)
|
||||
/obj/projectile/tentacle/New(obj/item/ammo_casing/magic/tentacle/tentacle_casing)
|
||||
source = tentacle_casing
|
||||
..()
|
||||
|
||||
/obj/item/projectile/tentacle/fire(setAngle)
|
||||
/obj/projectile/tentacle/fire(setAngle)
|
||||
if(firer)
|
||||
chain = firer.Beam(src, icon_state = "tentacle", time = INFINITY, maxdistance = INFINITY)
|
||||
..()
|
||||
@@ -298,7 +298,7 @@
|
||||
I.melee_attack_chain(src, C)//Hits the victim with whatever they are holding that is no the zero force tentacle
|
||||
|
||||
|
||||
/obj/item/projectile/tentacle/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/tentacle/on_hit(atom/target, blocked = 0)
|
||||
var/mob/living/carbon/human/H = firer
|
||||
source.gun.hit_something = TRUE
|
||||
source.gun.check_should_delete()
|
||||
@@ -369,7 +369,7 @@
|
||||
C.throw_at(get_step_towards(H,C), 8, 2, callback=CALLBACK(H, TYPE_PROC_REF(/mob, tentacle_stab), C))
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/tentacle/Destroy()
|
||||
/obj/projectile/tentacle/Destroy()
|
||||
qdel(chain)
|
||||
source = null
|
||||
return ..()
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
/obj/item/ammo_casing/magic/grapple_ammo
|
||||
name = "grapple"
|
||||
desc = "a hand"
|
||||
projectile_type = /obj/item/projectile/tether/flayer
|
||||
projectile_type = /obj/projectile/tether/flayer
|
||||
icon = 'icons/obj/clothing/modsuit/mod_modules.dmi'
|
||||
icon_state = "flayer_claw"
|
||||
caliber = "grapple"
|
||||
@@ -149,7 +149,7 @@
|
||||
. = ..()
|
||||
grapple = null
|
||||
|
||||
/obj/item/projectile/tether/flayer
|
||||
/obj/projectile/tether/flayer
|
||||
name = "Grapple Arm"
|
||||
range = 10
|
||||
damage = 15
|
||||
@@ -160,20 +160,20 @@
|
||||
/// The ammo this came from
|
||||
var/obj/item/ammo_casing/magic/grapple_ammo/ammo
|
||||
|
||||
/obj/item/projectile/tether/flayer/Initialize(mapload, obj/item/ammo_casing/magic/grapple_ammo/grapple_casing)
|
||||
/obj/projectile/tether/flayer/Initialize(mapload, obj/item/ammo_casing/magic/grapple_ammo/grapple_casing)
|
||||
. = ..()
|
||||
ammo = grapple_casing
|
||||
|
||||
/obj/item/projectile/tether/flayer/fire(setAngle)
|
||||
/obj/projectile/tether/flayer/fire(setAngle)
|
||||
. = ..()
|
||||
make_chain()
|
||||
SEND_SIGNAL(firer, COMSIG_FLAYER_RETRACT_IMPLANTS)
|
||||
|
||||
/obj/item/projectile/tether/flayer/Destroy()
|
||||
/obj/projectile/tether/flayer/Destroy()
|
||||
. = ..()
|
||||
ammo = null
|
||||
|
||||
/obj/item/projectile/tether/flayer/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/tether/flayer/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
playsound(target, 'sound/items/zip.ogg', 75, TRUE)
|
||||
if(isliving(target) && blocked < 100)
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
desc = "Summon a hand of demonic energy, snaring and throwing its target around, based on your intent. Disarm pushes, grab pulls."
|
||||
gain_desc = "You have gained the ability to snare and disrupt people with demonic appendages."
|
||||
base_cooldown = 30 SECONDS
|
||||
fireball_type = /obj/item/projectile/magic/demonic_grasp
|
||||
fireball_type = /obj/projectile/magic/demonic_grasp
|
||||
|
||||
selection_activated_message = "<span class='notice'>You raise your hand, full of demonic energy! <B>Left-click to cast at a target!</B></span>"
|
||||
selection_deactivated_message = "<span class='notice'>You re-absorb the energy...for now.</span>"
|
||||
@@ -149,17 +149,17 @@
|
||||
V.required_blood = 20
|
||||
return V
|
||||
|
||||
/obj/item/projectile/magic/demonic_grasp
|
||||
/obj/projectile/magic/demonic_grasp
|
||||
name = "demonic grasp"
|
||||
// parry this you filthy casual
|
||||
reflectability = REFLECTABILITY_NEVER
|
||||
icon_state = null
|
||||
|
||||
/obj/item/projectile/magic/demonic_grasp/pixel_move(trajectory_multiplier)
|
||||
/obj/projectile/magic/demonic_grasp/pixel_move(trajectory_multiplier)
|
||||
. = ..()
|
||||
new /obj/effect/temp_visual/demonic_grasp(loc)
|
||||
|
||||
/obj/item/projectile/magic/demonic_grasp/on_hit(atom/target, blocked, hit_zone)
|
||||
/obj/projectile/magic/demonic_grasp/on_hit(atom/target, blocked, hit_zone)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
@@ -184,7 +184,7 @@
|
||||
throw_target = get_step(firer, get_dir(firer, L))
|
||||
L.throw_at(throw_target, 2, 5, spin = FALSE, diagonals_first = TRUE, callback = CALLBACK(src, PROC_REF(create_snare), L)) // pull towards
|
||||
|
||||
/obj/item/projectile/magic/demonic_grasp/proc/create_snare(mob/target)
|
||||
/obj/projectile/magic/demonic_grasp/proc/create_snare(mob/target)
|
||||
new /obj/effect/temp_visual/demonic_snare(target.loc)
|
||||
|
||||
/obj/effect/temp_visual/demonic_grasp
|
||||
|
||||
@@ -323,7 +323,7 @@
|
||||
for(var/mob/living/L in view(8, owner))
|
||||
if(L.affects_vampire(owner))
|
||||
L.adjust_bodytemperature(-3 * TEMPERATURE_DAMAGE_COEFFICIENT) //The dark is cold and unforgiving. Equivelnt to -60 with previous values.
|
||||
for(var/obj/item/projectile/P in view(8, owner))
|
||||
for(var/obj/projectile/P in view(8, owner))
|
||||
if(P.flag == ENERGY || P.flag == LASER)
|
||||
P.damage *= 0.7
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/turf/cordon/TerraformTurf(path, list/new_baseturfs, flags)
|
||||
return
|
||||
|
||||
/turf/cordon/bullet_act(obj/item/projectile/hitting_projectile, def_zone, piercing_hit)
|
||||
/turf/cordon/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit)
|
||||
SHOULD_CALL_PARENT(FALSE) // Fuck you
|
||||
return
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@
|
||||
ranged = TRUE
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
projectiletype = /obj/item/projectile/neurotox
|
||||
projectiletype = /obj/projectile/neurotox
|
||||
projectilesound = 'sound/weapons/pierce.ogg'
|
||||
|
||||
// Below here is ruin specific code
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
icon_state = "syndicate_harbinger"
|
||||
icon_living = "syndicate_harbinger"
|
||||
speak_emote = list("snarls")
|
||||
projectiletype = /obj/item/projectile/bullet/heavybullet
|
||||
projectiletype = /obj/projectile/bullet/heavybullet
|
||||
projectilesound = 'sound/weapons/gunshots/gunshot_rifle.ogg'
|
||||
internal_gps = null
|
||||
faction = list("syndicate", "spawned_corpse")
|
||||
|
||||
@@ -190,7 +190,7 @@ GLOBAL_LIST_EMPTY(telecomms_trap_tank)
|
||||
GLOB.telecomms_trap_tank -= src
|
||||
return ..()
|
||||
|
||||
/obj/structure/telecomms_trap_tank/bullet_act(obj/item/projectile/P)
|
||||
/obj/structure/telecomms_trap_tank/bullet_act(obj/projectile/P)
|
||||
explode()
|
||||
|
||||
/obj/structure/telecomms_trap_tank/proc/explode()
|
||||
@@ -337,7 +337,7 @@ GLOBAL_LIST_EMPTY(telecomms_trap_tank)
|
||||
maxHealth = 200
|
||||
faction = list("malf_drone")
|
||||
speed = 0.5
|
||||
projectile_type = /obj/item/projectile/beam/disabler/weak
|
||||
projectile_type = /obj/projectile/beam/disabler/weak
|
||||
projectile_sound = 'sound/weapons/taser2.ogg'
|
||||
ranged_burst_count = 2
|
||||
gold_core_spawnable = NO_SPAWN // Could you imagine xenobio with this? lmao.
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
/// Datum which keeps us hanging out with our parent
|
||||
var/datum/movement_detector/tracker
|
||||
/// Type of projectile we fire
|
||||
var/projectile_type = /obj/item/projectile/baby_watcher_blast
|
||||
var/projectile_type = /obj/projectile/baby_watcher_blast
|
||||
/// Sound to make when we shoot
|
||||
var/projectile_sound = 'sound/weapons/pierce.ogg'
|
||||
/// Time between taking potshots at goliaths
|
||||
@@ -193,7 +193,7 @@
|
||||
var/turf/U = get_turf(target)
|
||||
if(!T || !U)
|
||||
return
|
||||
var/obj/item/projectile/O = new projectile_type(T)
|
||||
var/obj/projectile/O = new projectile_type(T)
|
||||
playsound(get_turf(src), projectile_sound, 75, TRUE)
|
||||
O.firer = parent // no hitting owner.
|
||||
O.current = T
|
||||
@@ -253,6 +253,6 @@
|
||||
|
||||
|
||||
/// Beam fired by a baby watcher, doesn't actually do less damage than its parent
|
||||
/obj/item/projectile/baby_watcher_blast
|
||||
/obj/projectile/baby_watcher_blast
|
||||
name = "hatchling beam"
|
||||
icon_state = "ice_2"
|
||||
|
||||
@@ -454,8 +454,8 @@
|
||||
/obj/item/clothing/suit/armor/reactive/proc/reaction_check(hitby)
|
||||
if(prob(hit_reaction_chance))
|
||||
if(isprojectile(hitby))
|
||||
var/obj/item/projectile/P = hitby
|
||||
if(istype(P, /obj/item/projectile/ion))
|
||||
var/obj/projectile/P = hitby
|
||||
if(istype(P, /obj/projectile/ion))
|
||||
return FALSE
|
||||
if(!P.nodamage || P.stun || P.weaken)
|
||||
return TRUE
|
||||
@@ -550,7 +550,7 @@
|
||||
var/turf/U = get_turf(target)
|
||||
if(!T || !U)
|
||||
return
|
||||
var/obj/item/projectile/temp/basilisk/O = new /obj/item/projectile/temp/basilisk(T)
|
||||
var/obj/projectile/temp/basilisk/O = new /obj/projectile/temp/basilisk(T)
|
||||
playsound(get_turf(src), 'sound/weapons/taser2.ogg', 75, TRUE)
|
||||
O.current = T
|
||||
O.yo = U.y - T.y
|
||||
|
||||
@@ -75,8 +75,8 @@ GLOBAL_LIST_EMPTY(blob_minions)
|
||||
/obj/structure/blob/blob_act(obj/structure/blob/B)
|
||||
return
|
||||
|
||||
/obj/structure/blob/bullet_act(obj/item/projectile/P)
|
||||
if(istype(P, /obj/item/projectile/kinetic))
|
||||
/obj/structure/blob/bullet_act(obj/projectile/P)
|
||||
if(istype(P, /obj/projectile/kinetic))
|
||||
P.damage /= 2
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
. = ..()
|
||||
SEND_SIGNAL(src, COMSIG_SPAWNER_SET_TARGET, user)
|
||||
|
||||
/obj/structure/spawner/nether/demon_incursion/bullet_act(obj/item/projectile/P)
|
||||
/obj/structure/spawner/nether/demon_incursion/bullet_act(obj/projectile/P)
|
||||
. = ..()
|
||||
if(P.firer)
|
||||
SEND_SIGNAL(src, COMSIG_SPAWNER_SET_TARGET, P.firer)
|
||||
|
||||
@@ -501,7 +501,7 @@
|
||||
|
||||
/obj/effect/hallucination/sniper/proc/fire_bullet(turf/shot_loc, mob/living/carbon/target)
|
||||
// Fire the bullet
|
||||
var/obj/item/projectile/bullet/sniper/penetrator/hallucination/bullet = new(shot_loc)
|
||||
var/obj/projectile/bullet/sniper/penetrator/hallucination/bullet = new(shot_loc)
|
||||
bullet.hallucinator = target
|
||||
bullet.def_zone = BODY_ZONE_HEAD
|
||||
bullet.suppressed = TRUE
|
||||
@@ -537,7 +537,7 @@
|
||||
hallucination_icon_state = pick("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
|
||||
|
||||
|
||||
/obj/item/projectile/bullet/sniper/penetrator/hallucination
|
||||
/obj/projectile/bullet/sniper/penetrator/hallucination
|
||||
nodamage = TRUE
|
||||
invisibility = INVISIBILITY_MAXIMUM // You no see boolet
|
||||
/// The hallucinator
|
||||
@@ -545,7 +545,7 @@
|
||||
/// Handles only the victim seeing it
|
||||
var/image/bullet_image = null
|
||||
|
||||
/obj/item/projectile/bullet/sniper/penetrator/hallucination/on_hit(atom/target, blocked, hit_zone)
|
||||
/obj/projectile/bullet/sniper/penetrator/hallucination/on_hit(atom/target, blocked, hit_zone)
|
||||
if(!isliving(target))
|
||||
return
|
||||
if(target != hallucinator)
|
||||
@@ -560,7 +560,7 @@
|
||||
new /obj/effect/hallucination/sniper_bloodsplatter(get_turf(src), hit_target)
|
||||
to_chat(hit_target, "<span class='userdanger'>You're shot by \a [src][organ_hit_text]!</span>")
|
||||
|
||||
/obj/item/projectile/bullet/sniper/penetrator/hallucination/Bump(atom/A, yes)
|
||||
/obj/projectile/bullet/sniper/penetrator/hallucination/Bump(atom/A, yes)
|
||||
if(!yes) // prevents double bumps.
|
||||
return
|
||||
var/turf/target_turf = get_turf(A)
|
||||
|
||||
@@ -169,13 +169,13 @@
|
||||
update_state()
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/bullet_act(obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables.
|
||||
/obj/machinery/hydroponics/bullet_act(obj/projectile/Proj) //Works with the Somatoray to modify plant variables.
|
||||
if(!myseed)
|
||||
return ..()
|
||||
if(istype(Proj ,/obj/item/projectile/energy/floramut))
|
||||
if(istype(Proj ,/obj/projectile/energy/floramut))
|
||||
mut_beamed = TRUE
|
||||
return ..()
|
||||
else if(istype(Proj ,/obj/item/projectile/energy/florayield))
|
||||
else if(istype(Proj ,/obj/projectile/energy/florayield))
|
||||
yield_beamed = TRUE
|
||||
return ..()
|
||||
else
|
||||
|
||||
@@ -174,8 +174,8 @@
|
||||
if("weed chance")
|
||||
adjust_weed_chance(mod)
|
||||
|
||||
/obj/item/seeds/bullet_act(obj/item/projectile/Proj) // Works with the Somatoray to modify plant variables.
|
||||
if(istype(Proj, /obj/item/projectile/energy/florayield))
|
||||
/obj/item/seeds/bullet_act(obj/projectile/Proj) // Works with the Somatoray to modify plant variables.
|
||||
if(istype(Proj, /obj/projectile/energy/florayield))
|
||||
var/rating = 1
|
||||
if(istype(loc, /obj/machinery/hydroponics))
|
||||
var/obj/machinery/hydroponics/H = loc
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
var/turf/proj_turf = get_turf_for_projectile(user)
|
||||
if(!isturf(proj_turf))
|
||||
return
|
||||
var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(proj_turf)
|
||||
var/obj/projectile/destabilizer/D = new /obj/projectile/destabilizer(proj_turf)
|
||||
for(var/t in trophies)
|
||||
var/obj/item/crusher_trophy/T = t
|
||||
T.on_projectile_fire(D, user)
|
||||
@@ -197,7 +197,7 @@
|
||||
update_action_buttons()
|
||||
|
||||
//destablizing force
|
||||
/obj/item/projectile/destabilizer
|
||||
/obj/projectile/destabilizer
|
||||
name = "destabilizing force"
|
||||
icon_state = "pulse1"
|
||||
nodamage = TRUE
|
||||
@@ -207,11 +207,11 @@
|
||||
log_override = TRUE
|
||||
var/obj/item/kinetic_crusher/hammer_synced
|
||||
|
||||
/obj/item/projectile/destabilizer/Destroy()
|
||||
/obj/projectile/destabilizer/Destroy()
|
||||
hammer_synced = null
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = FALSE)
|
||||
/obj/projectile/destabilizer/on_hit(atom/target, blocked = FALSE)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
var/had_effect = (L.has_status_effect(STATUS_EFFECT_CRUSHERMARK)) //used as a boolean
|
||||
@@ -279,7 +279,7 @@
|
||||
/obj/item/crusher_trophy/proc/on_melee_hit(mob/living/target, mob/living/user) //the target and the user
|
||||
return
|
||||
|
||||
/obj/item/crusher_trophy/proc/on_projectile_fire(obj/item/projectile/destabilizer/marker, mob/living/user) //the projectile fired and the user
|
||||
/obj/item/crusher_trophy/proc/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user) //the projectile fired and the user
|
||||
return
|
||||
|
||||
/obj/item/crusher_trophy/proc/on_mark_application(mob/living/target, datum/status_effect/crusher_mark/mark, had_mark) //the target, the mark applied, and if the target had a mark before
|
||||
@@ -346,7 +346,7 @@
|
||||
/obj/item/crusher_trophy/blaster_tubes/magma_wing/effect_desc()
|
||||
return "mark detonation to make the next destabilizer shot deal <b>[bonus_value]</b> damage"
|
||||
|
||||
/obj/item/crusher_trophy/blaster_tubes/magma_wing/on_projectile_fire(obj/item/projectile/destabilizer/marker, mob/living/user)
|
||||
/obj/item/crusher_trophy/blaster_tubes/magma_wing/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user)
|
||||
if(deadly_shot)
|
||||
marker.name = "heated [marker.name]"
|
||||
marker.icon_state = "lava"
|
||||
@@ -479,7 +479,7 @@
|
||||
/obj/item/crusher_trophy/blaster_tubes/effect_desc()
|
||||
return "mark detonation to make the next destabilizer shot deal <b>[bonus_value]</b> damage but move slower"
|
||||
|
||||
/obj/item/crusher_trophy/blaster_tubes/on_projectile_fire(obj/item/projectile/destabilizer/marker, mob/living/user)
|
||||
/obj/item/crusher_trophy/blaster_tubes/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user)
|
||||
if(deadly_shot)
|
||||
marker.name = "deadly [marker.name]"
|
||||
marker.icon_state = "chronobolt"
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
ActivationReaction(user, "weapon")
|
||||
return ..()
|
||||
|
||||
/obj/machinery/anomalous_crystal/bullet_act(obj/item/projectile/P, def_zone)
|
||||
/obj/machinery/anomalous_crystal/bullet_act(obj/projectile/P, def_zone)
|
||||
..()
|
||||
if(istype(P, /obj/item/projectile/magic))
|
||||
if(istype(P, /obj/projectile/magic))
|
||||
ActivationReaction(P.firer, "magic", P.damage_type)
|
||||
return
|
||||
ActivationReaction(P.firer, P.flag, P.damage_type)
|
||||
@@ -140,16 +140,16 @@
|
||||
/// Generates a projectile when interacted with
|
||||
/obj/machinery/anomalous_crystal/emitter
|
||||
cooldown_add = 50
|
||||
var/generated_projectile = /obj/item/projectile/beam/emitter
|
||||
var/generated_projectile = /obj/projectile/beam/emitter
|
||||
|
||||
/obj/machinery/anomalous_crystal/emitter/Initialize(mapload)
|
||||
. = ..()
|
||||
generated_projectile = pick(/obj/item/projectile/magic/fireball/infernal,
|
||||
/obj/item/projectile/bullet/meteorshot, /obj/item/projectile/beam/xray, /obj/item/projectile/colossus)
|
||||
generated_projectile = pick(/obj/projectile/magic/fireball/infernal,
|
||||
/obj/projectile/bullet/meteorshot, /obj/projectile/beam/xray, /obj/projectile/colossus)
|
||||
|
||||
/obj/machinery/anomalous_crystal/emitter/ActivationReaction(mob/user, method)
|
||||
if(..())
|
||||
var/obj/item/projectile/P = new generated_projectile(get_turf(src))
|
||||
var/obj/projectile/P = new generated_projectile(get_turf(src))
|
||||
P.dir = dir
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
|
||||
@@ -349,13 +349,13 @@
|
||||
/obj/item/ammo_casing/magic/hook
|
||||
name = "hook"
|
||||
desc = "a hook."
|
||||
projectile_type = /obj/item/projectile/hook
|
||||
projectile_type = /obj/projectile/hook
|
||||
caliber = "hook"
|
||||
icon = 'icons/obj/lavaland/artefacts.dmi'
|
||||
icon_state = "hook"
|
||||
muzzle_flash_effect = null
|
||||
|
||||
/obj/item/projectile/hook
|
||||
/obj/projectile/hook
|
||||
name = "hook"
|
||||
icon_state = "hook"
|
||||
icon = 'icons/obj/lavaland/artefacts.dmi'
|
||||
@@ -365,13 +365,13 @@
|
||||
weaken = 1 SECONDS
|
||||
knockdown = 6 SECONDS
|
||||
|
||||
/obj/item/projectile/hook/fire(setAngle)
|
||||
/obj/projectile/hook/fire(setAngle)
|
||||
if(firer)
|
||||
chain = firer.Beam(src, icon_state = "chain", time = INFINITY, maxdistance = INFINITY)
|
||||
..()
|
||||
//TODO: root the firer until the chain returns
|
||||
|
||||
/obj/item/projectile/hook/on_hit(atom/target)
|
||||
/obj/projectile/hook/on_hit(atom/target)
|
||||
. = ..()
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
@@ -382,7 +382,7 @@
|
||||
L.forceMove(get_turf(firer))
|
||||
L.density = old_density
|
||||
|
||||
/obj/item/projectile/hook/Destroy()
|
||||
/obj/projectile/hook/Destroy()
|
||||
QDEL_NULL(chain)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
if(berserk_active)
|
||||
return
|
||||
if(isprojectile(hitby))
|
||||
var/obj/item/projectile/P = hitby
|
||||
var/obj/projectile/P = hitby
|
||||
if(P.damage_type == STAMINA)
|
||||
return //no disabler rage
|
||||
var/berserk_value = damage * DAMAGE_TO_CHARGE_SCALE
|
||||
|
||||
@@ -311,7 +311,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/gibtonite/bullet_act(obj/item/projectile/P)
|
||||
/obj/item/gibtonite/bullet_act(obj/projectile/P)
|
||||
GibtoniteReaction(P.firer)
|
||||
..()
|
||||
|
||||
@@ -416,7 +416,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
|
||||
materials = list(MAT_PLASMA = 400)
|
||||
credits = 80
|
||||
|
||||
/obj/item/coin/plasma/bullet_act(obj/item/projectile/P)
|
||||
/obj/item/coin/plasma/bullet_act(obj/projectile/P)
|
||||
if(!QDELETED(src) && !P.nodamage && (P.damage_type == BURN))
|
||||
log_and_set_aflame(P.firer, P)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -318,7 +318,7 @@
|
||||
return
|
||||
unstealth(source)
|
||||
|
||||
/obj/item/mod/module/stealth/proc/on_bullet_act(datum/source, obj/item/projectile)
|
||||
/obj/item/mod/module/stealth/proc/on_bullet_act(datum/source, obj/projectile)
|
||||
SIGNAL_HANDLER
|
||||
unstealth(source)
|
||||
|
||||
|
||||
@@ -119,16 +119,16 @@
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
var/obj/item/projectile/tether = new /obj/item/projectile/tether(get_turf(mod.wearer))
|
||||
var/obj/projectile/tether = new /obj/projectile/tether(get_turf(mod.wearer))
|
||||
tether.original = target
|
||||
tether.firer = mod.wearer
|
||||
tether.preparePixelProjectile(target, mod.wearer)
|
||||
tether.fire()
|
||||
playsound(src, 'sound/weapons/batonextend.ogg', 25, TRUE)
|
||||
INVOKE_ASYNC(tether, TYPE_PROC_REF(/obj/item/projectile/tether, make_chain))
|
||||
INVOKE_ASYNC(tether, TYPE_PROC_REF(/obj/projectile/tether, make_chain))
|
||||
drain_power(use_power_cost)
|
||||
|
||||
/obj/item/projectile/tether
|
||||
/obj/projectile/tether
|
||||
name = "tether"
|
||||
icon_state = "tether_projectile"
|
||||
icon = 'icons/obj/clothing/modsuit/mod_modules.dmi'
|
||||
@@ -141,18 +141,18 @@
|
||||
///How fast the tether will throw the user at the target
|
||||
var/yank_speed = 1
|
||||
|
||||
/obj/item/projectile/tether/proc/make_chain()
|
||||
/obj/projectile/tether/proc/make_chain()
|
||||
if(firer)
|
||||
chain = Beam(firer, chain_icon_state, icon, time = 10 SECONDS, maxdistance = range)
|
||||
|
||||
/obj/item/projectile/tether/on_hit(atom/target)
|
||||
/obj/projectile/tether/on_hit(atom/target)
|
||||
. = ..()
|
||||
if(firer && isliving(firer))
|
||||
var/mob/living/L = firer
|
||||
L.apply_status_effect(STATUS_EFFECT_IMPACT_IMMUNE)
|
||||
L.throw_at(target, 15, yank_speed, L, FALSE, FALSE, callback = CALLBACK(L, TYPE_PROC_REF(/mob/living, remove_status_effect), STATUS_EFFECT_IMPACT_IMMUNE), block_movement = FALSE)
|
||||
|
||||
/obj/item/projectile/tether/Destroy()
|
||||
/obj/projectile/tether/Destroy()
|
||||
QDEL_NULL(chain)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -474,7 +474,7 @@
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
var/obj/item/projectile/bomb = new /obj/item/projectile/bullet/reusable/mining_bomb(get_turf(mod.wearer))
|
||||
var/obj/projectile/bomb = new /obj/projectile/bullet/reusable/mining_bomb(get_turf(mod.wearer))
|
||||
bomb.original = target
|
||||
bomb.firer = mod.wearer
|
||||
bomb.preparePixelProjectile(target, mod.wearer)
|
||||
@@ -494,7 +494,7 @@
|
||||
return
|
||||
on_deactivation()
|
||||
|
||||
/obj/item/projectile/bullet/reusable/mining_bomb
|
||||
/obj/projectile/bullet/reusable/mining_bomb
|
||||
name = "mining bomb"
|
||||
desc = "A bomb. Why are you staring at this?"
|
||||
icon_state = "mine_bomb"
|
||||
@@ -506,7 +506,7 @@
|
||||
light_color = LIGHT_COLOR_ORANGE
|
||||
ammo_type = /obj/structure/mining_bomb
|
||||
|
||||
/obj/item/projectile/bullet/reusable/mining_bomb/handle_drop()
|
||||
/obj/projectile/bullet/reusable/mining_bomb/handle_drop()
|
||||
if(!dropped)
|
||||
new ammo_type(loc, firer)
|
||||
dropped = TRUE
|
||||
@@ -566,7 +566,7 @@
|
||||
object.take_damage(damage, BRUTE, BOMB)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/bullet/reusable/mining_bomb/mecha
|
||||
/obj/projectile/bullet/reusable/mining_bomb/mecha
|
||||
ammo_type = /obj/structure/mining_bomb/mecha
|
||||
|
||||
/obj/structure/mining_bomb/mecha
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
/// Locked by an ID card
|
||||
var/locked = FALSE
|
||||
|
||||
var/projectile_type = /obj/item/projectile/beam/emitter/hitscan
|
||||
var/projectile_type = /obj/projectile/beam/emitter/hitscan
|
||||
var/projectile_sound = 'sound/weapons/emitter.ogg'
|
||||
var/datum/effect_system/spark_spread/sparks
|
||||
|
||||
@@ -282,7 +282,7 @@
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/power/emitter/proc/fire_beam()
|
||||
var/obj/item/projectile/P = new projectile_type(get_turf(src))
|
||||
var/obj/projectile/P = new projectile_type(get_turf(src))
|
||||
playsound(get_turf(src), projectile_sound, 50, TRUE)
|
||||
if(prob(35))
|
||||
sparks.start()
|
||||
|
||||
@@ -180,7 +180,7 @@ field_generator energy level display
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/field/generator/bullet_act(obj/item/projectile/Proj)
|
||||
/obj/machinery/field/generator/bullet_act(obj/projectile/Proj)
|
||||
if(Proj.flag != BULLET && !Proj.nodamage)
|
||||
energy = min(energy + Proj.damage, FIELD_GENERATOR_MAX_ENERGY)
|
||||
check_energy_level()
|
||||
|
||||
@@ -129,7 +129,7 @@ GLOBAL_VAR_INIT(global_singulo_id, 1)
|
||||
return
|
||||
|
||||
|
||||
/obj/singularity/bullet_act(obj/item/projectile/P)
|
||||
/obj/singularity/bullet_act(obj/projectile/P)
|
||||
qdel(P)
|
||||
return 0 //Will there be an impact? Who knows. Will we see it? No.
|
||||
|
||||
|
||||
@@ -692,11 +692,11 @@
|
||||
countdown()
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/supermatter_crystal/bullet_act(obj/item/projectile/proj)
|
||||
/obj/machinery/atmospherics/supermatter_crystal/bullet_act(obj/projectile/proj)
|
||||
var/turf/L = loc
|
||||
if(!istype(L))
|
||||
return FALSE
|
||||
if(!istype(proj, /obj/item/projectile/beam/emitter/hitscan) && power_changes)
|
||||
if(!istype(proj, /obj/projectile/beam/emitter/hitscan) && power_changes)
|
||||
investigate_log("has been hit by [proj] fired by [key_name(proj.firer)]", INVESTIGATE_SUPERMATTER)
|
||||
if(proj.flag != BULLET)
|
||||
if(power_changes) //This needs to be here I swear
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/casing_drop_sound = "casingdrop" //What sound should play when this ammo hits the ground
|
||||
var/caliber = null //Which kind of guns it can be loaded into
|
||||
var/projectile_type = null //The bullet type to create when New() is called
|
||||
var/obj/item/projectile/BB = null //The loaded bullet
|
||||
var/obj/projectile/BB = null //The loaded bullet
|
||||
var/pellets = 1 //Pellets for spreadshot
|
||||
var/variance = 0 //Variance for inaccuracy fundamental to the casing
|
||||
var/delay = 0 //Delay for energy weapons
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "A .357 magnum cartridge, often used in revolvers. Very deadly."
|
||||
icon_state = "magnum_steel"
|
||||
caliber = "357"
|
||||
projectile_type = /obj/item/projectile/bullet
|
||||
projectile_type = /obj/projectile/bullet
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
|
||||
@@ -12,44 +12,44 @@
|
||||
desc = "A 9mm pistol cartridge. This one has a rubber tip for less-lethal takedowns."
|
||||
icon_state = "pistol_brass_rubber"
|
||||
caliber = "9mm"
|
||||
projectile_type = /obj/item/projectile/bullet/weakbullet4
|
||||
projectile_type = /obj/projectile/bullet/weakbullet4
|
||||
|
||||
/obj/item/ammo_casing/a762
|
||||
name = "7.62mm round"
|
||||
desc = "A 7.62mm rifle cartridge, often used in Soviet rifles."
|
||||
icon_state = "rifle_brass"
|
||||
caliber = "a762"
|
||||
projectile_type = /obj/item/projectile/bullet
|
||||
projectile_type = /obj/projectile/bullet
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
|
||||
/obj/item/ammo_casing/a762/enchanted
|
||||
name = "enchanted 7.62 round"
|
||||
desc = "A 7.62mm rifle cartridge. It sparkles with magic."
|
||||
projectile_type = /obj/item/projectile/bullet/weakbullet3
|
||||
projectile_type = /obj/projectile/bullet/weakbullet3
|
||||
|
||||
/obj/item/ammo_casing/a50
|
||||
name = ".50 AE round"
|
||||
desc = "A .50AE pistol cartridge, used in large caliber handguns."
|
||||
icon_state = "magnum_steel"
|
||||
caliber = ".50"
|
||||
projectile_type = /obj/item/projectile/bullet
|
||||
projectile_type = /obj/projectile/bullet
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
|
||||
/obj/item/ammo_casing/c38/invisible
|
||||
projectile_type = /obj/item/projectile/bullet/mime
|
||||
projectile_type = /obj/projectile/bullet/mime
|
||||
muzzle_flash_effect = null // invisible eh
|
||||
|
||||
/obj/item/ammo_casing/c38/invisible/fake
|
||||
projectile_type = /obj/item/projectile/bullet/mime/fake
|
||||
projectile_type = /obj/projectile/bullet/mime/fake
|
||||
|
||||
/obj/item/ammo_casing/c10mm
|
||||
name = "10mm round"
|
||||
desc = "A 10mm pistol cartridge, commonly used in Syndicate sidearms."
|
||||
icon_state = "pistol_steel"
|
||||
caliber = "10mm"
|
||||
projectile_type = /obj/item/projectile/bullet/midbullet3
|
||||
projectile_type = /obj/projectile/bullet/midbullet3
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
|
||||
@@ -57,51 +57,51 @@
|
||||
name = "10mm armor piercing round"
|
||||
desc = "A 10mm pistol cartridge, with a Teflon coating to increase armor penetration, at the cost of damage."
|
||||
icon_state = "pistol_steel_ap"
|
||||
projectile_type = /obj/item/projectile/bullet/midbullet3/ap
|
||||
projectile_type = /obj/projectile/bullet/midbullet3/ap
|
||||
|
||||
/obj/item/ammo_casing/c10mm/fire
|
||||
name = "10mm incendiary round"
|
||||
desc = "A 10mm pistol cartridge, containing a payload of flammable chemicals."
|
||||
icon_state = "pistol_steel_incin"
|
||||
projectile_type = /obj/item/projectile/bullet/midbullet3/fire
|
||||
projectile_type = /obj/projectile/bullet/midbullet3/fire
|
||||
muzzle_flash_color = LIGHT_COLOR_FIRE
|
||||
|
||||
/obj/item/ammo_casing/c10mm/hp
|
||||
name = "10mm hollow point round"
|
||||
desc = "A 10mm pistol cartridge, with an expanding tip that greatly increases stopping power, at the cost of armor penetration."
|
||||
icon_state = "pistol_steel_hollow"
|
||||
projectile_type = /obj/item/projectile/bullet/midbullet3/hp
|
||||
projectile_type = /obj/projectile/bullet/midbullet3/hp
|
||||
|
||||
/obj/item/ammo_casing/overgrown
|
||||
name = "overgrown round"
|
||||
desc = "A pistol cartridge... probably. Why does it resemble a pea?"
|
||||
projectile_type = /obj/item/projectile/bullet/midbullet3/overgrown
|
||||
projectile_type = /obj/projectile/bullet/midbullet3/overgrown
|
||||
icon_state = "peashooter_bullet"
|
||||
|
||||
/obj/item/ammo_casing/c9mm
|
||||
name = "9mm round"
|
||||
desc = "A 9mm pistol cartridge, commonly used in handguns and submachine guns."
|
||||
caliber = "9mm"
|
||||
projectile_type = /obj/item/projectile/bullet/weakbullet3
|
||||
projectile_type = /obj/projectile/bullet/weakbullet3
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
|
||||
/obj/item/ammo_casing/c9mm/ap
|
||||
name = "9mm armor piercing round"
|
||||
desc = "A 9mm pistol cartridge, with a Teflon coating to increase armor penetration, at the cost of stopping power."
|
||||
icon_state = "pistol_brass_ap"
|
||||
projectile_type = /obj/item/projectile/bullet/armourpiercing
|
||||
projectile_type = /obj/projectile/bullet/armourpiercing
|
||||
|
||||
/obj/item/ammo_casing/c9mm/tox
|
||||
name = "9mm toxic round"
|
||||
desc = "A 9mm pistol cartridge, tipped with lethal toxins. Likely a war crime."
|
||||
icon_state = "pistol_brass_toxin"
|
||||
projectile_type = /obj/item/projectile/bullet/toxinbullet
|
||||
projectile_type = /obj/projectile/bullet/toxinbullet
|
||||
|
||||
/obj/item/ammo_casing/c9mm/inc
|
||||
name = "9mm incendiary round"
|
||||
desc = "A 9mm pistol cartridge, tipped with an incendiary chemical payload."
|
||||
icon_state = "pistol_brass_incin"
|
||||
projectile_type = /obj/item/projectile/bullet/incendiary/firebullet
|
||||
projectile_type = /obj/projectile/bullet/incendiary/firebullet
|
||||
muzzle_flash_color = LIGHT_COLOR_FIRE
|
||||
|
||||
/obj/item/ammo_casing/c46x30mm
|
||||
@@ -109,26 +109,26 @@
|
||||
desc = "A 4.6x30mm PDW cartridge, commonly used in submachine guns and small-caliber rifles."
|
||||
icon_state = "magnum_brass"
|
||||
caliber = "4.6x30mm"
|
||||
projectile_type = /obj/item/projectile/bullet/weakbullet3
|
||||
projectile_type = /obj/projectile/bullet/weakbullet3
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
|
||||
/obj/item/ammo_casing/c46x30mm/ap
|
||||
name = "4.6x30mm armor piercing round"
|
||||
desc = "A 4.6x30mm PDW cartridge, with a tungsten core to increase armor penetration, at the cost of stopping power."
|
||||
icon_state = "magnum_brass_ap"
|
||||
projectile_type = /obj/item/projectile/bullet/armourpiercing/wt550
|
||||
projectile_type = /obj/projectile/bullet/armourpiercing/wt550
|
||||
|
||||
/obj/item/ammo_casing/c46x30mm/tox
|
||||
name = "4.6x30mm toxic round"
|
||||
desc = "A 4.6x30mm PDW cartridge, tipped with lethal toxins. Probably a war crime."
|
||||
icon_state = "magnum_brass_toxin"
|
||||
projectile_type = /obj/item/projectile/bullet/toxinbullet
|
||||
projectile_type = /obj/projectile/bullet/toxinbullet
|
||||
|
||||
/obj/item/ammo_casing/c46x30mm/inc
|
||||
name = "4.6x30 incendiary round"
|
||||
desc = "a 4.6x30mm PDW cartridge, tipped with an incendiary chemical payload."
|
||||
icon_state = "magnum_brass_incin"
|
||||
projectile_type = /obj/item/projectile/bullet/incendiary/firebullet
|
||||
projectile_type = /obj/projectile/bullet/incendiary/firebullet
|
||||
muzzle_flash_color = LIGHT_COLOR_FIRE
|
||||
|
||||
/obj/item/ammo_casing/rubber45
|
||||
@@ -136,7 +136,7 @@
|
||||
desc = "A .45 caliber pistol cartridge. Features a rubber bullet for less-lethal takedowns."
|
||||
icon_state = "pistol_steel_rubber"
|
||||
caliber = ".45"
|
||||
projectile_type = /obj/item/projectile/bullet/midbullet_r
|
||||
projectile_type = /obj/projectile/bullet/midbullet_r
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
|
||||
@@ -145,26 +145,26 @@
|
||||
desc = "A .45 caliber pistol cartridge, commonly used in pistols and submachine guns."
|
||||
icon_state = "pistol_steel"
|
||||
caliber = ".45"
|
||||
projectile_type = /obj/item/projectile/bullet/midbullet
|
||||
projectile_type = /obj/projectile/bullet/midbullet
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
|
||||
/obj/item/ammo_casing/c45/nostamina
|
||||
projectile_type = /obj/item/projectile/bullet/weakbullet3
|
||||
projectile_type = /obj/projectile/bullet/weakbullet3
|
||||
|
||||
/obj/item/ammo_casing/n762
|
||||
name = "7.62x38mmR round"
|
||||
desc = "A 7.62x38mmR pistol cartridge, commonly used by antique revolvers."
|
||||
icon_state = "magnum_brass"
|
||||
caliber = "n762"
|
||||
projectile_type = /obj/item/projectile/bullet
|
||||
projectile_type = /obj/projectile/bullet
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
|
||||
/obj/item/ammo_casing/caseless/magspear
|
||||
name = "magnetic spear"
|
||||
desc = "A reusable spear that is typically loaded into kinetic spearguns."
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/magspear
|
||||
projectile_type = /obj/projectile/bullet/reusable/magspear
|
||||
caliber = "speargun"
|
||||
icon_state = "magspear"
|
||||
throwforce = 15 //still deadly when thrown
|
||||
@@ -177,7 +177,7 @@
|
||||
icon_state = "slug"
|
||||
caliber = "shotgun"
|
||||
casing_drop_sound = 'sound/weapons/gun_interactions/shotgun_fall.ogg'
|
||||
projectile_type = /obj/item/projectile/bullet
|
||||
projectile_type = /obj/projectile/bullet
|
||||
materials = list(MAT_METAL=4000)
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
@@ -186,7 +186,7 @@
|
||||
name = "buckshot shell"
|
||||
desc = "A 12 gauge buckshot shell. Fires a spread of lethal shot."
|
||||
icon_state = "buckshot"
|
||||
projectile_type = /obj/item/projectile/bullet/pellet
|
||||
projectile_type = /obj/projectile/bullet/pellet
|
||||
pellets = 6
|
||||
variance = 25
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
name = "rubbershot shell"
|
||||
desc = "A 12 gauge shell filled with densely-packed rubber balls, used to incapacitate crowds from a distance."
|
||||
icon_state = "rubbershot"
|
||||
projectile_type = /obj/item/projectile/bullet/pellet/rubber
|
||||
projectile_type = /obj/projectile/bullet/pellet/rubber
|
||||
pellets = 6
|
||||
variance = 25
|
||||
materials = list(MAT_METAL=4000)
|
||||
@@ -203,7 +203,7 @@
|
||||
name = "beanbag slug"
|
||||
desc = "A 12 gauge shell loaded with a beanbag slug for less-lethal takedowns."
|
||||
icon_state = "beanbag"
|
||||
projectile_type = /obj/item/projectile/bullet/weakbullet
|
||||
projectile_type = /obj/projectile/bullet/weakbullet
|
||||
materials = list(MAT_METAL=250)
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
@@ -212,7 +212,7 @@
|
||||
name = "taser slug"
|
||||
desc = "A 12 gauge shell loaded with a taser cartridge, somehow."
|
||||
icon_state = "taser"
|
||||
projectile_type = /obj/item/projectile/bullet/stunshot
|
||||
projectile_type = /obj/projectile/bullet/stunshot
|
||||
materials = list(MAT_METAL=250)
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
@@ -223,33 +223,33 @@
|
||||
name = "meteorslug shell"
|
||||
desc = "A 12 gauge shell rigged with CMC technology, which launches a massive slug when fired."
|
||||
icon_state = "meteor"
|
||||
projectile_type = /obj/item/projectile/bullet/meteorshot
|
||||
projectile_type = /obj/projectile/bullet/meteorshot
|
||||
|
||||
/obj/item/ammo_casing/shotgun/pulseslug
|
||||
name = "proto pulse slug"
|
||||
desc = "A 12 gauge shell loaded with a powerful energy emitter, firing a devastating pulse blast."
|
||||
icon_state = "pulse"
|
||||
projectile_type = /obj/item/projectile/beam/pulse/shot
|
||||
projectile_type = /obj/projectile/beam/pulse/shot
|
||||
muzzle_flash_color = LIGHT_COLOR_DARKBLUE
|
||||
|
||||
/obj/item/ammo_casing/shotgun/incendiary
|
||||
name = "incendiary slug"
|
||||
desc = "A 12 gauge slug shell containing an incendiary chemical payload."
|
||||
icon_state = "incendiary"
|
||||
projectile_type = /obj/item/projectile/bullet/incendiary/shell
|
||||
projectile_type = /obj/projectile/bullet/incendiary/shell
|
||||
muzzle_flash_color = LIGHT_COLOR_FIRE
|
||||
|
||||
/obj/item/ammo_casing/shotgun/frag12
|
||||
name = "\improper FRAG-12 slug"
|
||||
desc = "A 12 gauge shell, loaded with a high-explosive slug."
|
||||
icon_state = "frag"
|
||||
projectile_type = /obj/item/projectile/bullet/frag12
|
||||
projectile_type = /obj/projectile/bullet/frag12
|
||||
|
||||
/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath
|
||||
name = "dragonsbreath shell"
|
||||
desc = "A 12 gauge shell which fires a spread of incendiary pellets."
|
||||
icon_state = "dragonsbreath"
|
||||
projectile_type = /obj/item/projectile/bullet/incendiary/shell/dragonsbreath
|
||||
projectile_type = /obj/projectile/bullet/incendiary/shell/dragonsbreath
|
||||
pellets = 4
|
||||
variance = 35
|
||||
|
||||
@@ -257,7 +257,7 @@
|
||||
name = "ion shell"
|
||||
desc = "An advanced 12 gauge shell that fires a spread of ion bolts."
|
||||
icon_state = "ion"
|
||||
projectile_type = /obj/item/projectile/ion/weak
|
||||
projectile_type = /obj/projectile/ion/weak
|
||||
pellets = 6
|
||||
variance = 40
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
@@ -268,7 +268,7 @@
|
||||
name = "laser slug"
|
||||
desc = "A rudimentary 12 gauge shotgun shell that replicates the effects of a laser weapon with a low-powered laser."
|
||||
icon_state = "improvised"
|
||||
projectile_type = /obj/item/projectile/beam/laser
|
||||
projectile_type = /obj/projectile/beam/laser
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
muzzle_flash_color = LIGHT_COLOR_DARKRED
|
||||
@@ -277,7 +277,7 @@
|
||||
name = "lasershot"
|
||||
desc = "An advanced 12 gauge shell that uses a multitude of lenses to split a high-powered laser into eight small beams."
|
||||
icon_state = "laser"
|
||||
projectile_type = /obj/item/projectile/beam/scatter
|
||||
projectile_type = /obj/projectile/beam/scatter
|
||||
pellets = 8
|
||||
variance = 25
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
@@ -295,7 +295,7 @@
|
||||
desc = "A 12 gauge shell loaded with a hypodermic needle. Can be injected with up to 30 units of any chemical."
|
||||
icon_state = "dart"
|
||||
container_type = OPENCONTAINER
|
||||
projectile_type = /obj/item/projectile/bullet/dart
|
||||
projectile_type = /obj/projectile/bullet/dart
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
name = "tranquilizer dart"
|
||||
desc = "A 12 gauge dart shell loaded with powerful tranquilizers."
|
||||
icon_state = "dart"
|
||||
projectile_type = /obj/item/projectile/bullet/dart/syringe/tranquilizer
|
||||
projectile_type = /obj/projectile/bullet/dart/syringe/tranquilizer
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
materials = list(MAT_METAL=250)
|
||||
@@ -330,7 +330,7 @@
|
||||
name = "holy water dart"
|
||||
desc = "A 12 gauge dart shell loaded with holy water."
|
||||
icon_state = "holydart"
|
||||
projectile_type = /obj/item/projectile/bullet/dart/syringe/holy
|
||||
projectile_type = /obj/projectile/bullet/dart/syringe/holy
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
materials = list(MAT_METAL=250)
|
||||
@@ -339,11 +339,11 @@
|
||||
name = "confettishot"
|
||||
desc = "A 12 gauge shell loaded with... confetti?"
|
||||
icon_state = "confetti"
|
||||
projectile_type = /obj/item/projectile/bullet/confetti
|
||||
projectile_type = /obj/projectile/bullet/confetti
|
||||
|
||||
/obj/item/ammo_casing/shotgun/shrapnel
|
||||
name = "shrapnel rounds"
|
||||
projectile_type = /obj/item/projectile/bullet/shrapnel
|
||||
projectile_type = /obj/projectile/bullet/shrapnel
|
||||
pellets = 3
|
||||
variance = 20
|
||||
|
||||
@@ -352,7 +352,7 @@
|
||||
desc = "A 5.56mm rifle round, produced in incredible quantities by the Trans-Solar Federation."
|
||||
icon_state = "rifle_steel"
|
||||
caliber = "a556"
|
||||
projectile_type = /obj/item/projectile/bullet/heavybullet
|
||||
projectile_type = /obj/projectile/bullet/heavybullet
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
|
||||
@@ -361,7 +361,7 @@
|
||||
desc = "A 5.45x39mm rifle round, used by the elite marines of the USSP."
|
||||
icon_state = "rifle_brass"
|
||||
caliber = "a545"
|
||||
projectile_type = /obj/item/projectile/bullet/midbullet3
|
||||
projectile_type = /obj/projectile/bullet/midbullet3
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
|
||||
@@ -369,7 +369,7 @@
|
||||
name = "beanbag shell"
|
||||
desc = "A 12 gauge beanbag slug. Smells strongly of alcohol."
|
||||
icon_state = "beanbag"
|
||||
projectile_type = /obj/item/projectile/bullet/weakbullet/booze
|
||||
projectile_type = /obj/projectile/bullet/weakbullet/booze
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
|
||||
@@ -377,7 +377,7 @@
|
||||
name = "rocket propelled grenade"
|
||||
desc = "A high explosive rocket meant to be fired from a launcher."
|
||||
icon_state = "rocket"
|
||||
projectile_type = /obj/item/projectile/missile
|
||||
projectile_type = /obj/projectile/missile
|
||||
caliber = "rocket"
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
@@ -396,7 +396,7 @@
|
||||
desc = "A .75 caliber gyrojet cartridge, for use in experimental weaponry. There's a Sunburst Heavy Industries logo on the side."
|
||||
icon_state = "magnum_steel"
|
||||
caliber = "75"
|
||||
projectile_type = /obj/item/projectile/bullet/gyro
|
||||
projectile_type = /obj/projectile/bullet/gyro
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
|
||||
@@ -405,14 +405,14 @@
|
||||
desc = "A 40mm high-explosive grenade round, meant to be fired from a grenade launcher."
|
||||
icon_state = "40mmHE"
|
||||
caliber = "40mm"
|
||||
projectile_type = /obj/item/projectile/bullet/a40mm
|
||||
projectile_type = /obj/projectile/bullet/a40mm
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
|
||||
/obj/item/ammo_casing/caseless/foam_dart
|
||||
name = "foam dart"
|
||||
desc = "It's nerf or nothing! Ages 8 and up."
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/foam_dart
|
||||
projectile_type = /obj/projectile/bullet/reusable/foam_dart
|
||||
muzzle_flash_effect = null
|
||||
caliber = "foam_force"
|
||||
icon = 'icons/obj/guns/toy.dmi'
|
||||
@@ -437,7 +437,7 @@
|
||||
|
||||
/obj/item/ammo_casing/caseless/foam_dart/attackby__legacy__attackchain(obj/item/A, mob/user, params)
|
||||
..()
|
||||
var/obj/item/projectile/bullet/reusable/foam_dart/FD = BB
|
||||
var/obj/projectile/bullet/reusable/foam_dart/FD = BB
|
||||
if((is_pen(A)) && modified && !FD.pen)
|
||||
if(!user.unequip(A)) // forceMove happens in add_pen
|
||||
return
|
||||
@@ -448,7 +448,7 @@
|
||||
if(modified)
|
||||
return
|
||||
|
||||
var/obj/item/projectile/bullet/reusable/foam_dart/FD = BB
|
||||
var/obj/projectile/bullet/reusable/foam_dart/FD = BB
|
||||
I.play_tool_sound(src)
|
||||
modified = TRUE
|
||||
FD.damage_type = BRUTE
|
||||
@@ -456,7 +456,7 @@
|
||||
return TRUE
|
||||
|
||||
/obj/item/ammo_casing/caseless/foam_dart/proc/add_pen(obj/item/pen/P)
|
||||
var/obj/item/projectile/bullet/reusable/foam_dart/FD = BB
|
||||
var/obj/projectile/bullet/reusable/foam_dart/FD = BB
|
||||
harmful = TRUE
|
||||
P.forceMove(FD)
|
||||
FD.log_override = FALSE
|
||||
@@ -465,7 +465,7 @@
|
||||
FD.nodamage = FALSE
|
||||
|
||||
/obj/item/ammo_casing/caseless/foam_dart/attack_self__legacy__attackchain(mob/living/user)
|
||||
var/obj/item/projectile/bullet/reusable/foam_dart/FD = BB
|
||||
var/obj/projectile/bullet/reusable/foam_dart/FD = BB
|
||||
if(FD.pen)
|
||||
FD.damage = initial(FD.damage)
|
||||
FD.nodamage = initial(FD.nodamage)
|
||||
@@ -476,14 +476,14 @@
|
||||
/obj/item/ammo_casing/caseless/foam_dart/riot
|
||||
name = "riot foam dart"
|
||||
desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up."
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/riot
|
||||
projectile_type = /obj/projectile/bullet/reusable/foam_dart/riot
|
||||
icon_state = "foamdart_riot"
|
||||
|
||||
/obj/item/ammo_casing/caseless/foam_dart/sniper
|
||||
name = "foam sniper dart"
|
||||
desc = "For the big nerf! Ages 8 and up."
|
||||
caliber = "foam_force_sniper"
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/sniper
|
||||
projectile_type = /obj/projectile/bullet/reusable/foam_dart/sniper
|
||||
icon_state = "foamdartsniper"
|
||||
|
||||
|
||||
@@ -505,13 +505,13 @@
|
||||
/obj/item/ammo_casing/caseless/foam_dart/sniper/riot
|
||||
name = "riot foam sniper dart"
|
||||
desc = "For the bigger brother of the crowd control toy. Ages 18 and up."
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/sniper/riot
|
||||
projectile_type = /obj/projectile/bullet/reusable/foam_dart/sniper/riot
|
||||
icon_state = "foamdartsniper_riot"
|
||||
|
||||
/obj/item/ammo_casing/shotgun/assassination
|
||||
name = "assassination shell"
|
||||
desc = "A 12 gauge buckshot shell containing a powerful silencing toxin."
|
||||
projectile_type = /obj/item/projectile/bullet/pellet/assassination
|
||||
projectile_type = /obj/projectile/bullet/pellet/assassination
|
||||
muzzle_flash_effect = null
|
||||
icon_state = "buckshot"
|
||||
pellets = 6
|
||||
@@ -521,7 +521,7 @@
|
||||
name = "cap"
|
||||
desc = "A cap for children toys."
|
||||
caliber = "cap"
|
||||
projectile_type = /obj/item/projectile/bullet/cap
|
||||
projectile_type = /obj/projectile/bullet/cap
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
harmful = FALSE
|
||||
@@ -530,7 +530,7 @@
|
||||
name = "caseless laser round"
|
||||
desc = "An experimental laser casing, designed to vaporize when fired."
|
||||
caliber = "laser"
|
||||
projectile_type = /obj/item/projectile/beam/laser/ik //Subtype that breaks on firing if emp'd
|
||||
projectile_type = /obj/projectile/beam/laser/ik //Subtype that breaks on firing if emp'd
|
||||
muzzle_flash_effect = /obj/effect/temp_visual/target_angled/muzzle_flash/energy
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
|
||||
muzzle_flash_color = LIGHT_COLOR_DARKRED
|
||||
@@ -540,5 +540,5 @@
|
||||
name = "\improper C-Foam blob"
|
||||
desc = "You shouldn't see this! Make an issue report on Github!"
|
||||
caliber = "c_foam"
|
||||
projectile_type = /obj/item/projectile/c_foam
|
||||
projectile_type = /obj/projectile/c_foam
|
||||
muzzle_flash_color = LIGHT_COLOR_DARKRED
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "energy weapon lens"
|
||||
desc = "The part of the gun that makes the laser go pew."
|
||||
caliber = "energy"
|
||||
projectile_type = /obj/item/projectile/energy
|
||||
projectile_type = /obj/projectile/energy
|
||||
var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot.
|
||||
var/select_name = "energy"
|
||||
fire_sound = 'sound/weapons/laser.ogg'
|
||||
@@ -13,7 +13,7 @@
|
||||
var/lens_speed_multiplier = 1
|
||||
|
||||
/obj/item/ammo_casing/energy/laser
|
||||
projectile_type = /obj/item/projectile/beam/laser
|
||||
projectile_type = /obj/projectile/beam/laser
|
||||
muzzle_flash_color = LIGHT_COLOR_DARKRED
|
||||
select_name = "kill"
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
e_cost = 250
|
||||
|
||||
/obj/item/ammo_casing/energy/lasergun
|
||||
projectile_type = /obj/item/projectile/beam/laser
|
||||
projectile_type = /obj/projectile/beam/laser
|
||||
muzzle_flash_color = LIGHT_COLOR_DARKRED
|
||||
e_cost = 83
|
||||
select_name = "kill"
|
||||
@@ -34,18 +34,18 @@
|
||||
e_cost = 120
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/practice
|
||||
projectile_type = /obj/item/projectile/beam/practice
|
||||
projectile_type = /obj/projectile/beam/practice
|
||||
select_name = "practice"
|
||||
harmful = FALSE
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/scatter
|
||||
projectile_type = /obj/item/projectile/beam/scatter
|
||||
projectile_type = /obj/projectile/beam/scatter
|
||||
pellets = 5
|
||||
variance = 25
|
||||
select_name = "scatter"
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/eshotgun
|
||||
projectile_type = /obj/item/projectile/beam/scatter/eshotgun
|
||||
projectile_type = /obj/projectile/beam/scatter/eshotgun
|
||||
pellets = 6
|
||||
variance = 25
|
||||
delay = 1 SECONDS
|
||||
@@ -54,51 +54,51 @@
|
||||
e_cost = 500
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/heavy
|
||||
projectile_type = /obj/item/projectile/beam/laser/heavylaser
|
||||
projectile_type = /obj/projectile/beam/laser/heavylaser
|
||||
select_name = "anti-vehicle"
|
||||
fire_sound = 'sound/weapons/lasercannonfire.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/sparker
|
||||
projectile_type = /obj/item/projectile/beam/laser/sparker
|
||||
projectile_type = /obj/projectile/beam/laser/sparker
|
||||
select_name = "spark"
|
||||
e_cost = (100 / 3) * 2 // 15 * 12.5 damage = 187.5 damage. Almost as much as a base laser gun, but takes longer to get all the shots out.
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/pulse
|
||||
projectile_type = /obj/item/projectile/beam/pulse/hitscan
|
||||
projectile_type = /obj/projectile/beam/pulse/hitscan
|
||||
muzzle_flash_color = LIGHT_COLOR_DARKBLUE
|
||||
e_cost = 200
|
||||
select_name = "DESTROY"
|
||||
fire_sound = 'sound/weapons/pulse.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/scatter/pulse
|
||||
projectile_type = /obj/item/projectile/beam/pulse/hitscan
|
||||
projectile_type = /obj/projectile/beam/pulse/hitscan
|
||||
e_cost = 200
|
||||
select_name = "ANNIHILATE"
|
||||
fire_sound = 'sound/weapons/pulse.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/bluetag
|
||||
projectile_type = /obj/item/projectile/beam/lasertag/bluetag
|
||||
projectile_type = /obj/projectile/beam/lasertag/bluetag
|
||||
muzzle_flash_color = LIGHT_COLOR_BLUE
|
||||
select_name = "bluetag"
|
||||
harmful = FALSE
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/redtag
|
||||
projectile_type = /obj/item/projectile/beam/lasertag/redtag
|
||||
projectile_type = /obj/projectile/beam/lasertag/redtag
|
||||
select_name = "redtag"
|
||||
harmful = FALSE
|
||||
|
||||
/obj/item/ammo_casing/energy/xray
|
||||
projectile_type = /obj/item/projectile/beam/xray
|
||||
projectile_type = /obj/projectile/beam/xray
|
||||
muzzle_flash_color = LIGHT_COLOR_GREEN
|
||||
fire_sound = 'sound/weapons/laser3.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/immolator
|
||||
projectile_type = /obj/item/projectile/beam/immolator
|
||||
projectile_type = /obj/projectile/beam/immolator
|
||||
fire_sound = 'sound/weapons/laser3.ogg'
|
||||
e_cost = 125
|
||||
|
||||
/obj/item/ammo_casing/energy/immolator/strong
|
||||
projectile_type = /obj/item/projectile/beam/immolator/strong
|
||||
projectile_type = /obj/projectile/beam/immolator/strong
|
||||
select_name = "precise"
|
||||
|
||||
/obj/item/ammo_casing/energy/immolator/strong/cyborg
|
||||
@@ -106,7 +106,7 @@
|
||||
e_cost = 1000 // 5x that of the standard laser, for 2.25x the damage (if 1/1 shots hit) plus ignite. Not energy-efficient, but can be used for sniping.
|
||||
|
||||
/obj/item/ammo_casing/energy/immolator/scatter
|
||||
projectile_type = /obj/item/projectile/beam/immolator/weak
|
||||
projectile_type = /obj/projectile/beam/immolator/weak
|
||||
pellets = 6
|
||||
variance = 25
|
||||
select_name = "scatter"
|
||||
@@ -116,7 +116,7 @@
|
||||
e_cost = 1000 // 5x that of the standard laser, for 7.5x the damage (if 6/6 shots hit) plus ignite. Efficient only if you hit with at least 4/6 of the shots.
|
||||
|
||||
/obj/item/ammo_casing/energy/electrode
|
||||
projectile_type = /obj/item/projectile/energy/electrode
|
||||
projectile_type = /obj/projectile/energy/electrode
|
||||
muzzle_flash_color = "#FFFF00"
|
||||
select_name = "stun"
|
||||
fire_sound = 'sound/weapons/taser.ogg'
|
||||
@@ -124,23 +124,23 @@
|
||||
harmful = FALSE
|
||||
|
||||
/obj/item/ammo_casing/energy/ion
|
||||
projectile_type = /obj/item/projectile/ion
|
||||
projectile_type = /obj/projectile/ion
|
||||
muzzle_flash_color = LIGHT_COLOR_LIGHTBLUE
|
||||
select_name = "ion"
|
||||
fire_sound = 'sound/weapons/ionrifle.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/ion/hos
|
||||
projectile_type = /obj/item/projectile/ion/weak
|
||||
projectile_type = /obj/projectile/ion/weak
|
||||
e_cost = 300
|
||||
|
||||
/obj/item/ammo_casing/energy/declone
|
||||
projectile_type = /obj/item/projectile/energy/declone
|
||||
projectile_type = /obj/projectile/energy/declone
|
||||
muzzle_flash_color = LIGHT_COLOR_GREEN
|
||||
select_name = "declone"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/mindflayer
|
||||
projectile_type = /obj/item/projectile/energy/mindflayer
|
||||
projectile_type = /obj/projectile/energy/mindflayer
|
||||
muzzle_flash_color = LIGHT_COLOR_PURPLE
|
||||
select_name = "mindflayer"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
@@ -151,15 +151,15 @@
|
||||
harmful = FALSE
|
||||
|
||||
/obj/item/ammo_casing/energy/flora/yield
|
||||
projectile_type = /obj/item/projectile/energy/florayield
|
||||
projectile_type = /obj/projectile/energy/florayield
|
||||
select_name = "yield"
|
||||
|
||||
/obj/item/ammo_casing/energy/flora/mut
|
||||
projectile_type = /obj/item/projectile/energy/floramut
|
||||
projectile_type = /obj/projectile/energy/floramut
|
||||
select_name = "mutation"
|
||||
|
||||
/obj/item/ammo_casing/energy/temp
|
||||
projectile_type = /obj/item/projectile/temp
|
||||
projectile_type = /obj/projectile/temp
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
var/temp = 300
|
||||
|
||||
@@ -171,13 +171,13 @@
|
||||
..(temp)
|
||||
|
||||
/obj/item/ammo_casing/energy/meteor
|
||||
projectile_type = /obj/item/projectile/meteor
|
||||
projectile_type = /obj/projectile/meteor
|
||||
muzzle_flash_effect = /obj/effect/temp_visual/target_angled/muzzle_flash
|
||||
muzzle_flash_color = null
|
||||
select_name = "goddamn meteor"
|
||||
|
||||
/obj/item/ammo_casing/energy/disabler
|
||||
projectile_type = /obj/item/projectile/beam/disabler
|
||||
projectile_type = /obj/projectile/beam/disabler
|
||||
muzzle_flash_color = LIGHT_COLOR_LIGHTBLUE
|
||||
select_name = "disable"
|
||||
e_cost = 50
|
||||
@@ -186,7 +186,7 @@
|
||||
delay = 0.6 SECONDS
|
||||
|
||||
/obj/item/ammo_casing/energy/disabler/smg
|
||||
projectile_type = /obj/item/projectile/beam/disabler/weak
|
||||
projectile_type = /obj/projectile/beam/disabler/weak
|
||||
e_cost = 25
|
||||
fire_sound = 'sound/weapons/taser3.ogg'
|
||||
click_cooldown_override = 2
|
||||
@@ -195,11 +195,11 @@
|
||||
delay = 0
|
||||
|
||||
/obj/item/ammo_casing/energy/disabler/fake
|
||||
projectile_type = /obj/item/projectile/beam/disabler/fake
|
||||
projectile_type = /obj/projectile/beam/disabler/fake
|
||||
e_cost = 100
|
||||
|
||||
/obj/item/ammo_casing/energy/disabler/eshotgun
|
||||
projectile_type = /obj/item/projectile/beam/disabler/pellet
|
||||
projectile_type = /obj/projectile/beam/disabler/pellet
|
||||
e_cost = 75
|
||||
delay = 1 SECONDS
|
||||
pellets = 6
|
||||
@@ -213,7 +213,7 @@
|
||||
e_cost = 60
|
||||
|
||||
/obj/item/ammo_casing/energy/plasma
|
||||
projectile_type = /obj/item/projectile/plasma
|
||||
projectile_type = /obj/projectile/plasma
|
||||
muzzle_flash_color = LIGHT_COLOR_PURPLE
|
||||
select_name = "plasma burst"
|
||||
fire_sound = 'sound/weapons/pulse.ogg'
|
||||
@@ -221,12 +221,12 @@
|
||||
e_cost = 75
|
||||
|
||||
/obj/item/ammo_casing/energy/plasma/adv
|
||||
projectile_type = /obj/item/projectile/plasma/adv
|
||||
projectile_type = /obj/projectile/plasma/adv
|
||||
delay = 10
|
||||
e_cost = 10
|
||||
|
||||
/obj/item/ammo_casing/energy/wormhole
|
||||
projectile_type = /obj/item/projectile/beam/wormhole
|
||||
projectile_type = /obj/projectile/beam/wormhole
|
||||
muzzle_flash_color = "#33CCFF"
|
||||
delay = 10
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
@@ -239,12 +239,12 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/ammo_casing/energy/wormhole/orange
|
||||
projectile_type = /obj/item/projectile/beam/wormhole/orange
|
||||
projectile_type = /obj/projectile/beam/wormhole/orange
|
||||
muzzle_flash_color = "#FF6600"
|
||||
select_name = "orange"
|
||||
|
||||
/obj/item/ammo_casing/energy/bolt
|
||||
projectile_type = /obj/item/projectile/energy/bolt
|
||||
projectile_type = /obj/projectile/energy/bolt
|
||||
muzzle_flash_color = null
|
||||
muzzle_flash_effect = /obj/effect/temp_visual/target_angled/muzzle_flash
|
||||
select_name = "bolt"
|
||||
@@ -252,21 +252,21 @@
|
||||
fire_sound = 'sound/weapons/genhit.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/bolt/large
|
||||
projectile_type = /obj/item/projectile/energy/bolt/large
|
||||
projectile_type = /obj/projectile/energy/bolt/large
|
||||
select_name = "heavy bolt"
|
||||
|
||||
/obj/item/ammo_casing/energy/instakill
|
||||
projectile_type = /obj/item/projectile/beam/instakill
|
||||
projectile_type = /obj/projectile/beam/instakill
|
||||
muzzle_flash_color = LIGHT_COLOR_PURPLE
|
||||
e_cost = 0
|
||||
select_name = "DESTROY"
|
||||
|
||||
/obj/item/ammo_casing/energy/instakill/blue
|
||||
projectile_type = /obj/item/projectile/beam/instakill/blue
|
||||
projectile_type = /obj/projectile/beam/instakill/blue
|
||||
muzzle_flash_color = LIGHT_COLOR_DARKBLUE
|
||||
|
||||
/obj/item/ammo_casing/energy/instakill/red
|
||||
projectile_type = /obj/item/projectile/beam/instakill/red
|
||||
projectile_type = /obj/projectile/beam/instakill/red
|
||||
muzzle_flash_color = LIGHT_COLOR_DARKRED
|
||||
|
||||
/obj/item/ammo_casing/energy/tesla_bolt
|
||||
@@ -274,13 +274,13 @@
|
||||
e_cost = 200
|
||||
select_name = "lightning beam"
|
||||
muzzle_flash_color = LIGHT_COLOR_FADEDPURPLE
|
||||
projectile_type = /obj/item/projectile/energy/tesla_bolt
|
||||
projectile_type = /obj/projectile/energy/tesla_bolt
|
||||
|
||||
/obj/item/ammo_casing/energy/arc_revolver
|
||||
fire_sound = 'sound/magic/lightningbolt.ogg' //New sound
|
||||
select_name = "lightning beam" //I guess
|
||||
muzzle_flash_color = LIGHT_COLOR_FADEDPURPLE // Depends on sprite
|
||||
projectile_type = /obj/item/projectile/energy/arc_revolver
|
||||
projectile_type = /obj/projectile/energy/arc_revolver
|
||||
///This number is randomly generated when the arc revolver is made. This ensures the beams only link to beams from the gun, one lower or higher than the number on the boosted object.
|
||||
var/random_link_number
|
||||
|
||||
@@ -290,32 +290,32 @@
|
||||
|
||||
/obj/item/ammo_casing/energy/arc_revolver/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
|
||||
..()
|
||||
var/obj/item/projectile/energy/arc_revolver/P = BB
|
||||
var/obj/projectile/energy/arc_revolver/P = BB
|
||||
P.charge_number = random_link_number
|
||||
random_link_number++
|
||||
|
||||
/obj/item/ammo_casing/energy/weak_plasma
|
||||
projectile_type = /obj/item/projectile/energy/weak_plasma
|
||||
projectile_type = /obj/projectile/energy/weak_plasma
|
||||
e_cost = 75 // With no charging, 162.5 damage from 13 shots.
|
||||
muzzle_flash_color = LIGHT_COLOR_FADEDPURPLE
|
||||
fire_sound = 'sound/weapons/taser2.ogg'
|
||||
select_name = null //If the select name is null, it does not send a message of switching modes to the user, important on the pistol.
|
||||
|
||||
/obj/item/ammo_casing/energy/charged_plasma
|
||||
projectile_type = /obj/item/projectile/homing/charged_plasma
|
||||
projectile_type = /obj/projectile/homing/charged_plasma
|
||||
e_cost = 0 //Charge is used when you charge the gun. Prevents issues.
|
||||
muzzle_flash_color = LIGHT_COLOR_FADEDPURPLE
|
||||
fire_sound = 'sound/weapons/marauder.ogg' //Should be different enough to get attention
|
||||
select_name = null
|
||||
|
||||
/obj/item/ammo_casing/energy/clown
|
||||
projectile_type = /obj/item/projectile/clown
|
||||
projectile_type = /obj/projectile/clown
|
||||
muzzle_flash_effect = null
|
||||
fire_sound = 'sound/weapons/gunshots/gunshot_smg.ogg'
|
||||
select_name = "clown"
|
||||
|
||||
/obj/item/ammo_casing/energy/emitter
|
||||
projectile_type = /obj/item/projectile/beam/emitter
|
||||
projectile_type = /obj/projectile/beam/emitter
|
||||
muzzle_flash_color = LIGHT_COLOR_GREEN
|
||||
fire_sound = 'sound/weapons/emitter.ogg'
|
||||
delay = 2 SECONDS // Lasers fire twice every second for 40 dps, this fires every 2 seconds for 15 dps. Seems fair, since every cyborg will have this with more shots?
|
||||
@@ -331,7 +331,7 @@
|
||||
delay = 2 SECONDS
|
||||
|
||||
/obj/item/ammo_casing/energy/bsg
|
||||
projectile_type = /obj/item/projectile/energy/bsg
|
||||
projectile_type = /obj/projectile/energy/bsg
|
||||
muzzle_flash_color = LIGHT_COLOR_DARKBLUE
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
|
||||
@@ -341,7 +341,7 @@
|
||||
delay = 4 SECONDS //Looooooong cooldown // Used to be 10 seconds, has been rebalanced to be normal firing rate now
|
||||
|
||||
/obj/item/ammo_casing/energy/teleport
|
||||
projectile_type = /obj/item/projectile/energy/teleport
|
||||
projectile_type = /obj/projectile/energy/teleport
|
||||
muzzle_flash_color = LIGHT_COLOR_LIGHTBLUE
|
||||
fire_sound = 'sound/weapons/wave.ogg'
|
||||
e_cost = 250
|
||||
@@ -356,7 +356,7 @@
|
||||
..(teleport_target)
|
||||
|
||||
/obj/item/ammo_casing/energy/mimic
|
||||
projectile_type = /obj/item/projectile/mimic
|
||||
projectile_type = /obj/projectile/mimic
|
||||
muzzle_flash_effect = null
|
||||
fire_sound = 'sound/weapons/bite.ogg'
|
||||
select_name = "gun mimic"
|
||||
@@ -370,22 +370,22 @@
|
||||
..(mimic_type)
|
||||
|
||||
/obj/item/ammo_casing/energy/detective
|
||||
projectile_type = /obj/item/projectile/beam/laser/detective
|
||||
projectile_type = /obj/projectile/beam/laser/detective
|
||||
fire_sound = 'sound/weapons/gunshots/gunshot_det_energy.ogg'
|
||||
select_name = "disabler"
|
||||
|
||||
/obj/item/ammo_casing/energy/detective/tracker_warrant
|
||||
projectile_type = /obj/item/projectile/beam/laser/detective/tracker_warrant_shot
|
||||
projectile_type = /obj/projectile/beam/laser/detective/tracker_warrant_shot
|
||||
e_cost = 50
|
||||
select_name = "tracker and warrant generator"
|
||||
|
||||
/obj/item/ammo_casing/energy/detective/overcharge
|
||||
projectile_type = /obj/item/projectile/beam/laser/detective/overcharged
|
||||
projectile_type = /obj/projectile/beam/laser/detective/overcharged
|
||||
e_cost = 200
|
||||
select_name = "overcharged"
|
||||
|
||||
/obj/item/ammo_casing/energy/silencer_ammo
|
||||
projectile_type = /obj/item/projectile/beam/silencer
|
||||
projectile_type = /obj/projectile/beam/silencer
|
||||
muzzle_flash_effect = null
|
||||
select_name = "silencing dissidents"
|
||||
e_cost = 50 // 16 shots
|
||||
|
||||
@@ -1,45 +1,45 @@
|
||||
/obj/item/ammo_casing/magic
|
||||
name = "magic casing"
|
||||
desc = "I didn't even know magic needed ammo..."
|
||||
projectile_type = /obj/item/projectile/magic
|
||||
projectile_type = /obj/projectile/magic
|
||||
muzzle_flash_color = COLOR_BLUE_GRAY
|
||||
muzzle_flash_effect = /obj/effect/temp_visual/target_angled/muzzle_flash/magic
|
||||
|
||||
/obj/item/ammo_casing/magic/change
|
||||
projectile_type = /obj/item/projectile/magic/change
|
||||
projectile_type = /obj/projectile/magic/change
|
||||
|
||||
/obj/item/ammo_casing/magic/animate
|
||||
projectile_type = /obj/item/projectile/magic/animate
|
||||
projectile_type = /obj/projectile/magic/animate
|
||||
|
||||
/obj/item/ammo_casing/magic/heal
|
||||
projectile_type = /obj/item/projectile/magic/resurrection
|
||||
projectile_type = /obj/projectile/magic/resurrection
|
||||
harmful = FALSE
|
||||
|
||||
/obj/item/ammo_casing/magic/death
|
||||
projectile_type = /obj/item/projectile/magic/death
|
||||
projectile_type = /obj/projectile/magic/death
|
||||
|
||||
/obj/item/ammo_casing/magic/teleport
|
||||
projectile_type = /obj/item/projectile/magic/teleport
|
||||
projectile_type = /obj/projectile/magic/teleport
|
||||
harmful = FALSE
|
||||
|
||||
/obj/item/ammo_casing/magic/door
|
||||
projectile_type = /obj/item/projectile/magic/door
|
||||
projectile_type = /obj/projectile/magic/door
|
||||
harmful = FALSE
|
||||
|
||||
/obj/item/ammo_casing/magic/fireball
|
||||
projectile_type = /obj/item/projectile/magic/fireball
|
||||
projectile_type = /obj/projectile/magic/fireball
|
||||
|
||||
/obj/item/ammo_casing/magic/chaos
|
||||
projectile_type = /obj/item/projectile/magic/chaos
|
||||
projectile_type = /obj/projectile/magic/chaos
|
||||
|
||||
/obj/item/ammo_casing/magic/slipping
|
||||
projectile_type = /obj/item/projectile/magic/slipping
|
||||
projectile_type = /obj/projectile/magic/slipping
|
||||
|
||||
/obj/item/ammo_casing/magic/arcane_barrage
|
||||
projectile_type = /obj/item/projectile/magic/arcane_barrage
|
||||
projectile_type = /obj/projectile/magic/arcane_barrage
|
||||
|
||||
/obj/item/ammo_casing/magic/forcebolt
|
||||
projectile_type = /obj/item/projectile/forcebolt
|
||||
projectile_type = /obj/projectile/forcebolt
|
||||
|
||||
/obj/item/ammo_casing/syringegun
|
||||
name = "syringe gun spring"
|
||||
@@ -48,7 +48,7 @@
|
||||
muzzle_flash_effect = null
|
||||
|
||||
/obj/item/ammo_casing/energy/c3dbullet
|
||||
projectile_type = /obj/item/projectile/bullet/midbullet3
|
||||
projectile_type = /obj/projectile/bullet/midbullet3
|
||||
select_name = "spraydown"
|
||||
fire_sound = 'sound/weapons/gunshots/gunshot_mg.ogg'
|
||||
e_cost = 20
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
* - deviation: (Optional) How the trajectory should deviate from the target in degrees.
|
||||
* - //Spread is FORCED!
|
||||
*/
|
||||
/obj/item/projectile/proc/preparePixelProjectile(atom/target, atom/source, list/modifiers = null, deviation = 0)
|
||||
/obj/projectile/proc/preparePixelProjectile(atom/target, atom/source, list/modifiers = null, deviation = 0)
|
||||
if(!(isnull(modifiers) || islist(modifiers)))
|
||||
stack_trace("WARNING: Projectile [type] fired with non-list modifiers, likely was passed click params.")
|
||||
modifiers = null
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#define CHAOS_STAFF_GIFT_CHANCE 15
|
||||
#define CHAOS_STAFF_GREAT_GIFT_CHANCE 5
|
||||
|
||||
/obj/item/projectile/magic/chaos
|
||||
/obj/projectile/magic/chaos
|
||||
name = "chaos bolt"
|
||||
icon_state = "ice_1"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/chaos
|
||||
@@ -16,7 +16,7 @@
|
||||
/// Name of random effect to be applied on target mob.
|
||||
var/chaos_effect
|
||||
|
||||
/obj/item/projectile/magic/chaos/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/magic/chaos/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
@@ -31,7 +31,7 @@
|
||||
return
|
||||
chaos_chaos(L)
|
||||
|
||||
/obj/item/projectile/magic/chaos/Initialize(mapload)
|
||||
/obj/projectile/magic/chaos/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("bluespace", "pulse1", "magicm", "declone", "fireball", "blood_bolt", "arcane_barrage", "laser", "u_laser")
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
* Arguments:
|
||||
* * target - mob/living that will have effect applied on them
|
||||
*/
|
||||
/obj/item/projectile/magic/chaos/proc/chaos_chaos(mob/living/target)
|
||||
/obj/projectile/magic/chaos/proc/chaos_chaos(mob/living/target)
|
||||
var/category = pick(prob(CHAOS_STAFF_LETHAL_CHANCE);"lethal", prob(CHAOS_STAFF_NEGATIVE_CHANCE);"negative", prob(CHAOS_STAFF_MISC_CHANCE);"misc",\
|
||||
prob(CHAOS_STAFF_GIFT_CHANCE);"gift", prob(CHAOS_STAFF_GREAT_GIFT_CHANCE);"great gift")
|
||||
switch(category)
|
||||
@@ -96,7 +96,7 @@
|
||||
/**
|
||||
* Picks and apply a lethal effect on mob/living/target. Some are more instantaneous than others.
|
||||
*/
|
||||
/obj/item/projectile/magic/chaos/proc/apply_lethal_effect(mob/living/target)
|
||||
/obj/projectile/magic/chaos/proc/apply_lethal_effect(mob/living/target)
|
||||
if(!ishuman(target))
|
||||
target.visible_message("<span class='chaosverybad'>[target] suddenly dies!</span>", "<span class='chaosverybad'>Game over!</span>")
|
||||
target.death(FALSE)
|
||||
@@ -176,7 +176,7 @@
|
||||
/**
|
||||
* Picks and apply a negative effect on mob/living/target. Usually causes damage and/or incapacitating effect.
|
||||
*/
|
||||
/obj/item/projectile/magic/chaos/proc/apply_negative_effect(mob/living/target)
|
||||
/obj/projectile/magic/chaos/proc/apply_negative_effect(mob/living/target)
|
||||
if(!ishuman(target))
|
||||
if(prob(50))
|
||||
target.apply_damage(CHAOS_STAFF_DAMAGE, BRUTE)
|
||||
@@ -263,7 +263,7 @@
|
||||
/**
|
||||
* Picks and apply a random miscellaneous effect on mob/living/target. Can be negative or mildly positive.
|
||||
*/
|
||||
/obj/item/projectile/magic/chaos/proc/apply_misc_effect(mob/living/target)
|
||||
/obj/projectile/magic/chaos/proc/apply_misc_effect(mob/living/target)
|
||||
if(!ishuman(target))
|
||||
chaos_effect = pick("recolor", "bark", "confetti", "smoke", "wand of nothing", "bike horn")
|
||||
else
|
||||
@@ -314,7 +314,7 @@
|
||||
/**
|
||||
* Picks a random gift to be given to mob/living/target. Should be mildly useful and/or funny.
|
||||
*/
|
||||
/obj/item/projectile/magic/chaos/proc/apply_gift_effect(mob/living/target)
|
||||
/obj/projectile/magic/chaos/proc/apply_gift_effect(mob/living/target)
|
||||
chaos_effect = pick("toy sword", "toy revolver", "cheese", "food", "medkit", "tarot pack", \
|
||||
"insulated gloves", "wand of doors", "golden bike horn", "ban hammer", "banana")
|
||||
switch(chaos_effect)
|
||||
@@ -354,7 +354,7 @@
|
||||
/**
|
||||
* Picks a random gift to be given to mob/living/target. Should be valuable and/or threatening to the wizard.
|
||||
*/
|
||||
/obj/item/projectile/magic/chaos/proc/apply_great_gift_effect(mob/living/target)
|
||||
/obj/projectile/magic/chaos/proc/apply_great_gift_effect(mob/living/target)
|
||||
chaos_effect = pick("esword", "emag", "chaos wand", "revolver", "aeg", "tarot deck", \
|
||||
"bluespace banana", "banana grenade", "disco ball", "syndicate minibomb", "crystal ball")
|
||||
switch(chaos_effect)
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
for(var/A in modkits)
|
||||
. += A
|
||||
|
||||
/obj/item/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
/obj/item/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/projectile/kinetic/K)
|
||||
K.kinetic_gun = src //do something special on-hit, easy!
|
||||
for(var/A in get_modkits())
|
||||
var/obj/item/borg/upgrade/modkit/M = A
|
||||
@@ -183,7 +183,7 @@
|
||||
|
||||
//Casing
|
||||
/obj/item/ammo_casing/energy/kinetic
|
||||
projectile_type = /obj/item/projectile/kinetic
|
||||
projectile_type = /obj/projectile/kinetic
|
||||
muzzle_flash_color = null
|
||||
select_name = "kinetic"
|
||||
e_cost = 500
|
||||
@@ -197,10 +197,10 @@
|
||||
|
||||
//Malf casing
|
||||
/obj/item/ammo_casing/energy/kinetic/malf
|
||||
projectile_type = /obj/item/projectile/kinetic/malf
|
||||
projectile_type = /obj/projectile/kinetic/malf
|
||||
|
||||
//Projectiles
|
||||
/obj/item/projectile/kinetic
|
||||
/obj/projectile/kinetic
|
||||
name = "kinetic force"
|
||||
icon_state = null
|
||||
damage = 40
|
||||
@@ -211,23 +211,23 @@
|
||||
var/pressure_decrease = 0.25
|
||||
var/obj/item/gun/energy/kinetic_accelerator/kinetic_gun
|
||||
|
||||
/obj/item/projectile/kinetic/malf
|
||||
/obj/projectile/kinetic/malf
|
||||
pressure_decrease = 1
|
||||
color = "#FFFFFF"
|
||||
icon_state = "ka_tracer"
|
||||
|
||||
/obj/item/projectile/kinetic/pod
|
||||
/obj/projectile/kinetic/pod
|
||||
range = 4
|
||||
|
||||
/obj/item/projectile/kinetic/pod/regular
|
||||
/obj/projectile/kinetic/pod/regular
|
||||
damage = 50
|
||||
pressure_decrease = 0.5
|
||||
|
||||
/obj/item/projectile/kinetic/Destroy()
|
||||
/obj/projectile/kinetic/Destroy()
|
||||
kinetic_gun = null
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/kinetic/prehit(atom/target)
|
||||
/obj/projectile/kinetic/prehit(atom/target)
|
||||
. = ..()
|
||||
if(.)
|
||||
if(kinetic_gun)
|
||||
@@ -240,15 +240,15 @@
|
||||
pressure_decrease_active = TRUE
|
||||
|
||||
|
||||
/obj/item/projectile/kinetic/on_range()
|
||||
/obj/projectile/kinetic/on_range()
|
||||
strike_thing()
|
||||
..()
|
||||
|
||||
/obj/item/projectile/kinetic/on_hit(atom/target)
|
||||
/obj/projectile/kinetic/on_hit(atom/target)
|
||||
strike_thing(target)
|
||||
. = ..()
|
||||
|
||||
/obj/item/projectile/kinetic/proc/strike_thing(atom/target)
|
||||
/obj/projectile/kinetic/proc/strike_thing(atom/target)
|
||||
var/turf/target_turf = get_turf(target)
|
||||
if(!target_turf)
|
||||
target_turf = get_turf(src)
|
||||
@@ -362,19 +362,19 @@
|
||||
accelerator.modkits -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/projectile/kinetic/K)
|
||||
return
|
||||
|
||||
//use this one for effects you want to trigger before any damage is done at all and before damage is decreased by pressure
|
||||
/obj/item/borg/upgrade/modkit/proc/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/proc/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
return
|
||||
|
||||
//use this one for effects you want to trigger before mods that do damage
|
||||
/obj/item/borg/upgrade/modkit/proc/projectile_strike_predamage(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/proc/projectile_strike_predamage(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
return
|
||||
|
||||
//and this one for things that don't need to trigger before other damage-dealing mods
|
||||
/obj/item/borg/upgrade/modkit/proc/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/proc/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
return
|
||||
|
||||
//Range
|
||||
@@ -383,7 +383,7 @@
|
||||
desc = "Increases the range of a kinetic accelerator when installed."
|
||||
cost = 24 //so you can fit four plus a tracer cosmetic
|
||||
|
||||
/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/projectile/kinetic/K)
|
||||
K.range += modifier
|
||||
|
||||
|
||||
@@ -393,7 +393,7 @@
|
||||
desc = "Increases the damage of kinetic accelerator when installed."
|
||||
modifier = 10
|
||||
|
||||
/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/projectile/kinetic/K)
|
||||
K.damage += modifier
|
||||
|
||||
|
||||
@@ -448,7 +448,7 @@
|
||||
turf_aoe = initial(turf_aoe)
|
||||
stats_stolen = FALSE
|
||||
|
||||
/obj/item/borg/upgrade/modkit/aoe/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/aoe/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
if(stats_stolen)
|
||||
return
|
||||
new /obj/effect/temp_visual/pka_explosion(target_turf)
|
||||
@@ -494,7 +494,7 @@
|
||||
modifier = -14 //Makes the cooldown 3 seconds(with no cooldown mods) if you miss. Don't miss.
|
||||
cost = 50
|
||||
|
||||
/obj/item/borg/upgrade/modkit/cooldown/repeater/projectile_strike_predamage(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/cooldown/repeater/projectile_strike_predamage(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
var/valid_repeat = FALSE
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
@@ -514,7 +514,7 @@
|
||||
cost = 20
|
||||
var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
|
||||
|
||||
/obj/item/borg/upgrade/modkit/lifesteal/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/lifesteal/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
if(isliving(target) && isliving(K.firer))
|
||||
var/mob/living/L = target
|
||||
if(L.stat == DEAD)
|
||||
@@ -528,7 +528,7 @@
|
||||
denied_type = /obj/item/borg/upgrade/modkit/resonator_blasts
|
||||
modifier = 0.25 //A bonus 15 damage if you burst the field on a target, 60 if you lure them into it.
|
||||
|
||||
/obj/item/borg/upgrade/modkit/resonator_blasts/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/resonator_blasts/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
if(target_turf && !ismineralturf(target_turf)) //Don't make fields on mineral turfs.
|
||||
var/obj/effect/temp_visual/resonance/R = locate(/obj/effect/temp_visual/resonance) in target_turf
|
||||
if(R)
|
||||
@@ -545,7 +545,7 @@
|
||||
var/maximum_bounty = 25
|
||||
var/list/bounties_reaped = list()
|
||||
|
||||
/obj/item/borg/upgrade/modkit/bounty/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/bounty/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
var/list/existing_marks = L.has_status_effect_list(STATUS_EFFECT_SYPHONMARK)
|
||||
@@ -556,7 +556,7 @@
|
||||
qdel(SM)
|
||||
L.apply_status_effect(STATUS_EFFECT_SYPHONMARK, src)
|
||||
|
||||
/obj/item/borg/upgrade/modkit/bounty/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
/obj/item/borg/upgrade/modkit/bounty/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(bounties_reaped[L.type])
|
||||
@@ -584,7 +584,7 @@
|
||||
maximum_of_type = 2
|
||||
cost = 35
|
||||
|
||||
/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/projectile/kinetic/K)
|
||||
K.pressure_decrease *= modifier
|
||||
|
||||
|
||||
@@ -648,7 +648,7 @@
|
||||
denied_type = /obj/item/borg/upgrade/modkit/tracer
|
||||
var/bolt_color = "#FFFFFF"
|
||||
|
||||
/obj/item/borg/upgrade/modkit/tracer/modify_projectile(obj/item/projectile/kinetic/K)
|
||||
/obj/item/borg/upgrade/modkit/tracer/modify_projectile(obj/projectile/kinetic/K)
|
||||
K.icon_state = "ka_tracer"
|
||||
K.color = bolt_color
|
||||
|
||||
|
||||
@@ -181,17 +181,17 @@
|
||||
. += "At any rate, Nanotrasen is looking to sell these to sniper units who will undoubtedly appreciate the devastating effect that one of these can have when given proper operating distance."
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/accelerator
|
||||
projectile_type = /obj/item/projectile/beam/laser/accelerator
|
||||
projectile_type = /obj/projectile/beam/laser/accelerator
|
||||
select_name = "accelerator"
|
||||
fire_sound = 'sound/weapons/lasercannonfire.ogg'
|
||||
|
||||
/obj/item/projectile/beam/laser/accelerator
|
||||
/obj/projectile/beam/laser/accelerator
|
||||
name = "accelerator laser"
|
||||
icon_state = "heavylaser"
|
||||
range = 255
|
||||
damage = 6
|
||||
|
||||
/obj/item/projectile/beam/laser/accelerator/Range()
|
||||
/obj/projectile/beam/laser/accelerator/Range()
|
||||
..()
|
||||
damage = min(damage+7, 100)
|
||||
|
||||
@@ -250,7 +250,7 @@
|
||||
return //no manual ammo changing.
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/sniper
|
||||
projectile_type = /obj/item/projectile/beam/laser/sniper
|
||||
projectile_type = /obj/projectile/beam/laser/sniper
|
||||
muzzle_flash_color = LIGHT_COLOR_PINK
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
|
||||
@@ -259,9 +259,9 @@
|
||||
delay = 2 SECONDS
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/sniper/pierce
|
||||
projectile_type = /obj/item/projectile/beam/laser/sniper/pierce
|
||||
projectile_type = /obj/projectile/beam/laser/sniper/pierce
|
||||
|
||||
/obj/item/projectile/beam/laser/sniper
|
||||
/obj/projectile/beam/laser/sniper
|
||||
name = "sniper laser"
|
||||
icon_state = "sniperlaser"
|
||||
range = 255
|
||||
@@ -271,18 +271,18 @@
|
||||
forced_accuracy = TRUE
|
||||
var/can_knockdown = TRUE
|
||||
|
||||
/obj/item/projectile/beam/laser/sniper/Range()
|
||||
/obj/projectile/beam/laser/sniper/Range()
|
||||
..()
|
||||
damage = min(damage + 5, 100)
|
||||
|
||||
/obj/item/projectile/beam/laser/sniper/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
/obj/projectile/beam/laser/sniper/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
..()
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(istype(H) && damage >= 40 && can_knockdown)
|
||||
H.KnockDown(2 SECONDS * (damage / 10))
|
||||
can_knockdown = FALSE //Projectiles that pierce can not knockdown, no wall knockdowns.
|
||||
|
||||
/obj/item/projectile/beam/laser/sniper/pierce
|
||||
/obj/projectile/beam/laser/sniper/pierce
|
||||
forcedodge = 1 // Can pierce one non wall thing.
|
||||
speed = 0.5
|
||||
always_hit_living_nondense = TRUE //This means if you are scoped in sniping at crit xenomorphs or crit humans, you can always hit them even if you do not directly click on them
|
||||
@@ -290,7 +290,7 @@
|
||||
var/hit_a_r_wall = FALSE
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSGIRDER
|
||||
|
||||
/obj/item/projectile/beam/laser/sniper/pierce/prehit(atom/target)
|
||||
/obj/projectile/beam/laser/sniper/pierce/prehit(atom/target)
|
||||
if(istype(target, /turf/simulated/wall/r_wall))
|
||||
if(!hit_a_r_wall)
|
||||
hit_a_r_wall = TRUE
|
||||
|
||||
@@ -345,7 +345,7 @@
|
||||
if(blue)
|
||||
blue.target = null
|
||||
|
||||
/obj/item/gun/energy/wormhole_projector/proc/create_portal(obj/item/projectile/beam/wormhole/W)
|
||||
/obj/item/gun/energy/wormhole_projector/proc/create_portal(obj/projectile/beam/wormhole/W)
|
||||
var/obj/effect/portal/P = new /obj/effect/portal(get_turf(W), null, src)
|
||||
P.precision = 0
|
||||
P.failchance = 0
|
||||
@@ -1084,12 +1084,12 @@
|
||||
/obj/item/ammo_casing/energy/spike
|
||||
name = "alloy spike"
|
||||
desc = "A broadhead spike made out of a weird silvery metal."
|
||||
projectile_type = /obj/item/projectile/bullet/spike
|
||||
projectile_type = /obj/projectile/bullet/spike
|
||||
muzzle_flash_effect = null
|
||||
select_name = "spike"
|
||||
fire_sound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
/obj/item/projectile/bullet/spike
|
||||
/obj/projectile/bullet/spike
|
||||
name = "alloy spike"
|
||||
desc = "It's about a foot of weird silvery metal with a wicked point."
|
||||
damage = 25
|
||||
@@ -1097,7 +1097,7 @@
|
||||
armor_penetration_flat = 30
|
||||
icon_state = "magspear"
|
||||
|
||||
/obj/item/projectile/bullet/spike/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/spike/on_hit(atom/target, blocked = 0)
|
||||
if((blocked < 100) && ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.bleed(50)
|
||||
@@ -1120,7 +1120,7 @@
|
||||
cell_type = /obj/item/stock_parts/cell/infinite
|
||||
|
||||
/obj/item/ammo_casing/energy/vortex_blast
|
||||
projectile_type = /obj/item/projectile/energy/vortex_blast
|
||||
projectile_type = /obj/projectile/energy/vortex_blast
|
||||
muzzle_flash_effect = /obj/effect/temp_visual/target_angled/muzzle_flash/vortex_blast
|
||||
variance = 70
|
||||
pellets = 8
|
||||
@@ -1128,7 +1128,7 @@
|
||||
select_name = "vortex blast"
|
||||
fire_sound = 'sound/weapons/wave.ogg'
|
||||
|
||||
/obj/item/projectile/energy/vortex_blast
|
||||
/obj/projectile/energy/vortex_blast
|
||||
name = "vortex blast"
|
||||
hitscan = TRUE
|
||||
damage = 2
|
||||
@@ -1138,7 +1138,7 @@
|
||||
hitsound_wall = null
|
||||
suppressed = TRUE
|
||||
|
||||
/obj/item/projectile/energy/vortex_blast/prehit(atom/target)
|
||||
/obj/projectile/energy/vortex_blast/prehit(atom/target)
|
||||
. = ..()
|
||||
if(ishuman(target))
|
||||
return
|
||||
@@ -1147,7 +1147,7 @@
|
||||
return
|
||||
damage *= 6 //objects tend to fall apart as atoms are ripped up
|
||||
|
||||
/obj/item/projectile/energy/vortex_blast/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/energy/vortex_blast/on_hit(atom/target, blocked = 0)
|
||||
if(blocked >= 100)
|
||||
return ..()
|
||||
if(ishuman(target))
|
||||
|
||||
@@ -278,7 +278,7 @@ CONTENTS:
|
||||
"Would you like a glass of water?", "What fun is there in making sense?", "Maybe you ought to go back home and crawl under your bed.", \
|
||||
"Time to dual wield chaos wands!", "Sixty percent of the time, it works every time.", "Cheese for everyone!", "You hear a deep voice cackling.", \
|
||||
"Xom bursts into laughter!", "Xom thinks this is hilarious!")]</span>")
|
||||
var/obj/item/projectile/magic/chaos/proj = new /obj/item/projectile/magic/chaos(src)
|
||||
var/obj/projectile/magic/chaos/proj = new /obj/projectile/magic/chaos(src)
|
||||
proj.chaos_chaos(user)
|
||||
qdel(proj)
|
||||
charges--
|
||||
|
||||
@@ -89,11 +89,11 @@
|
||||
var/turf/targturf = get_turf(target)
|
||||
message_admins("Blast wave fired from [ADMIN_COORDJMP(starting)] ([get_area_name(user, TRUE)]) at [ADMIN_COORDJMP(targturf)] ([target.name]) by [key_name_admin(user)] with power [heavy]/[medium]/[light].")
|
||||
log_game("Blast wave fired from ([starting.x], [starting.y], [starting.z]) ([get_area_name(user, TRUE)]) at ([target.x], [target.y], [target.z]) ([target]) by [key_name(user)] with power [heavy]/[medium]/[light].")
|
||||
var/obj/item/projectile/blastwave/BW = new(loc, heavy, medium, light)
|
||||
var/obj/projectile/blastwave/BW = new(loc, heavy, medium, light)
|
||||
BW.preparePixelProjectile(target, get_turf(src), params2list(params), 0)
|
||||
BW.fire()
|
||||
|
||||
/obj/item/projectile/blastwave
|
||||
/obj/projectile/blastwave
|
||||
name = "blast wave"
|
||||
icon_state = "blastwave"
|
||||
damage = 0
|
||||
@@ -103,13 +103,13 @@
|
||||
var/mediumr = 0
|
||||
var/lightr = 0
|
||||
|
||||
/obj/item/projectile/blastwave/New(loc, _h, _m, _l)
|
||||
/obj/projectile/blastwave/New(loc, _h, _m, _l)
|
||||
..()
|
||||
heavyr = _h
|
||||
mediumr = _m
|
||||
lightr = _l
|
||||
|
||||
/obj/item/projectile/blastwave/Range()
|
||||
/obj/projectile/blastwave/Range()
|
||||
..()
|
||||
var/amount_destruction = 0
|
||||
if(heavyr)
|
||||
@@ -132,5 +132,5 @@
|
||||
mediumr = max(mediumr - 1, 0)
|
||||
lightr = max(lightr - 1, 0)
|
||||
|
||||
/obj/item/projectile/blastwave/ex_act()
|
||||
/obj/projectile/blastwave/ex_act()
|
||||
return
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
max_ammo = 1
|
||||
|
||||
|
||||
/obj/item/projectile/bullet/reusable/arrow
|
||||
/obj/projectile/bullet/reusable/arrow
|
||||
name = "arrow"
|
||||
icon_state = "arrow"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/arrow
|
||||
@@ -77,7 +77,7 @@
|
||||
desc = "Stab, stab, stab."
|
||||
icon_state = "arrow"
|
||||
force = 10
|
||||
projectile_type = /obj/item/projectile/bullet/reusable/arrow
|
||||
projectile_type = /obj/projectile/bullet/reusable/arrow
|
||||
muzzle_flash_effect = null
|
||||
caliber = "arrow"
|
||||
|
||||
|
||||
@@ -70,34 +70,34 @@
|
||||
|
||||
//ammo//
|
||||
|
||||
/obj/item/projectile/bullet/saw
|
||||
/obj/projectile/bullet/saw
|
||||
damage = 45
|
||||
armor_penetration_flat = 5
|
||||
|
||||
/obj/item/projectile/bullet/saw/bleeding
|
||||
/obj/projectile/bullet/saw/bleeding
|
||||
damage = 20
|
||||
armor_penetration_flat = 0
|
||||
|
||||
/obj/item/projectile/bullet/saw/bleeding/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
/obj/projectile/bullet/saw/bleeding/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
. = ..()
|
||||
if((blocked != 100) && iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
C.bleed(35)
|
||||
|
||||
/obj/item/projectile/bullet/saw/hollow
|
||||
/obj/projectile/bullet/saw/hollow
|
||||
damage = 60
|
||||
armor_penetration_flat = -30
|
||||
|
||||
/obj/item/projectile/bullet/saw/ap
|
||||
/obj/projectile/bullet/saw/ap
|
||||
damage = 40
|
||||
armor_penetration_percentage = 100
|
||||
|
||||
/obj/item/projectile/bullet/saw/incen
|
||||
/obj/projectile/bullet/saw/incen
|
||||
damage = 7
|
||||
armor_penetration_flat = 0
|
||||
immolate = 3
|
||||
|
||||
/obj/item/projectile/bullet/saw/incen/Move()
|
||||
/obj/projectile/bullet/saw/incen/Move()
|
||||
..()
|
||||
var/turf/location = get_turf(src)
|
||||
if(location)
|
||||
@@ -144,7 +144,7 @@
|
||||
desc = "A 7.62x51mm full-metal jacket rifle cartridge, commonly used in general-purpose machine guns."
|
||||
icon_state = "rifle_brass"
|
||||
caliber = "mm762x51"
|
||||
projectile_type = /obj/item/projectile/bullet/saw
|
||||
projectile_type = /obj/projectile/bullet/saw
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
|
||||
@@ -152,23 +152,23 @@
|
||||
name = "7.62x51mm 'Shredder' round"
|
||||
desc = "A 7.62x51mm 'Shredder' cartridge, with a heavily serrated tip intended to cause massive bleeding."
|
||||
icon_state = "rifle_brass_surplus"
|
||||
projectile_type = /obj/item/projectile/bullet/saw/bleeding
|
||||
projectile_type = /obj/projectile/bullet/saw/bleeding
|
||||
|
||||
/obj/item/ammo_casing/mm762x51/hollow
|
||||
name = "7.62x51mm hollow point round"
|
||||
desc = "A 7.62x51mm rifle cartridge designed to cause more damage to unarmored targets."
|
||||
icon_state = "rifle_brass_hollow"
|
||||
projectile_type = /obj/item/projectile/bullet/saw/hollow
|
||||
projectile_type = /obj/projectile/bullet/saw/hollow
|
||||
|
||||
/obj/item/ammo_casing/mm762x51/ap
|
||||
name = "7.62x51mm armor-piercing round"
|
||||
desc = "A 7.62x51mm rifle cartridge with a hardened tungsten core to increase armor penetration."
|
||||
icon_state = "rifle_brass_ap"
|
||||
projectile_type = /obj/item/projectile/bullet/saw/ap
|
||||
projectile_type = /obj/projectile/bullet/saw/ap
|
||||
|
||||
/obj/item/ammo_casing/mm762x51/incen
|
||||
name = "7.62x51mm incendiary round"
|
||||
desc = "A 7.62x51mm rifle cartridge with an incendiary chemical payload."
|
||||
icon_state = "rifle_brass_incin"
|
||||
projectile_type = /obj/item/projectile/bullet/saw/incen
|
||||
projectile_type = /obj/projectile/bullet/saw/incen
|
||||
muzzle_flash_color = LIGHT_COLOR_FIRE
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
AddComponent(/datum/component/scope, range_modifier = 2, flags = SCOPE_TURF_ONLY | SCOPE_NEED_ACTIVE_HAND)
|
||||
|
||||
/obj/item/gun/projectile/automatic/sniper_rifle/process_fire(atom/target, mob/living/user, message = TRUE, params, zone_override, bonus_spread = 0)
|
||||
if(istype(chambered.BB, /obj/item/projectile/bullet/sniper) && !HAS_TRAIT(user, TRAIT_SCOPED))
|
||||
var/obj/item/projectile/bullet/sniper/S = chambered.BB
|
||||
if(istype(chambered.BB, /obj/projectile/bullet/sniper) && !HAS_TRAIT(user, TRAIT_SCOPED))
|
||||
var/obj/projectile/bullet/sniper/S = chambered.BB
|
||||
if(S.non_zoom_spread)
|
||||
to_chat(user, "<span class='warning'>[src] must be zoomed in to fire this ammunition accurately!</span>")
|
||||
bonus_spread += S.non_zoom_spread
|
||||
@@ -62,11 +62,11 @@
|
||||
desc = "A .50 BMG rifle cartridge, commonly used in anti-materiel rifles and heavy machine guns."
|
||||
icon_state = "heavy_steel"
|
||||
caliber = ".50"
|
||||
projectile_type = /obj/item/projectile/bullet/sniper
|
||||
projectile_type = /obj/projectile/bullet/sniper
|
||||
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
|
||||
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
|
||||
|
||||
/obj/item/projectile/bullet/sniper
|
||||
/obj/projectile/bullet/sniper
|
||||
damage = 70
|
||||
weaken = 10 SECONDS
|
||||
armor_penetration_flat = 70
|
||||
@@ -86,14 +86,14 @@
|
||||
desc = "A .50 BMG high-explosive cartridge. Does not actually contain antimatter."
|
||||
icon_state = "heavy_steel_incin"
|
||||
caliber = ".50"
|
||||
projectile_type = /obj/item/projectile/bullet/sniper/antimatter
|
||||
projectile_type = /obj/projectile/bullet/sniper/antimatter
|
||||
|
||||
/obj/item/projectile/bullet/sniper/antimatter
|
||||
/obj/projectile/bullet/sniper/antimatter
|
||||
name = "antimatter bullet"
|
||||
dismemberment = 50
|
||||
non_zoom_spread = 60
|
||||
|
||||
/obj/item/projectile/bullet/sniper/antimatter/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
/obj/projectile/bullet/sniper/antimatter/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
if((blocked != 100) && (!ismob(target)))
|
||||
target.ex_act(rand(1,2))
|
||||
|
||||
@@ -113,15 +113,15 @@
|
||||
desc = "A .50 BMG hypodermic cartridge, loaded with sedatives for instant incapacitation."
|
||||
icon_state = "heavy_steel_rubber"
|
||||
caliber = ".50"
|
||||
projectile_type = /obj/item/projectile/bullet/sniper/soporific
|
||||
projectile_type = /obj/projectile/bullet/sniper/soporific
|
||||
harmful = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/sniper/soporific
|
||||
/obj/projectile/bullet/sniper/soporific
|
||||
armor_penetration_flat = 0
|
||||
nodamage = 1
|
||||
weaken = 0
|
||||
|
||||
/obj/item/projectile/bullet/sniper/soporific/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
/obj/projectile/bullet/sniper/soporific/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
if((blocked != 100) && isliving(target))
|
||||
var/mob/living/L = target
|
||||
L.SetSleeping(40 SECONDS)
|
||||
@@ -141,14 +141,14 @@
|
||||
desc = "A .50 BMG 'Shredder' cartridge, with a heavily serrated bullet intended to cause massive blood loss."
|
||||
icon_state = "heavy_steel_hollow"
|
||||
caliber = ".50"
|
||||
projectile_type = /obj/item/projectile/bullet/sniper/haemorrhage
|
||||
projectile_type = /obj/projectile/bullet/sniper/haemorrhage
|
||||
|
||||
/obj/item/projectile/bullet/sniper/haemorrhage
|
||||
/obj/projectile/bullet/sniper/haemorrhage
|
||||
armor_penetration_flat = 25
|
||||
damage = 45
|
||||
weaken = 6 SECONDS
|
||||
|
||||
/obj/item/projectile/bullet/sniper/haemorrhage/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
/obj/projectile/bullet/sniper/haemorrhage/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
if((blocked != 100) && iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
C.bleed(150)
|
||||
@@ -169,9 +169,9 @@
|
||||
desc = "A .50 BMG Sabot Penetrator cartridge, capable of punching through just about anything."
|
||||
icon_state = "heavy_steel_ap"
|
||||
caliber = ".50"
|
||||
projectile_type = /obj/item/projectile/bullet/sniper/penetrator
|
||||
projectile_type = /obj/projectile/bullet/sniper/penetrator
|
||||
|
||||
/obj/item/projectile/bullet/sniper/penetrator
|
||||
/obj/projectile/bullet/sniper/penetrator
|
||||
icon_state = "gauss"
|
||||
name = "penetrator round"
|
||||
damage = 60
|
||||
|
||||
@@ -319,7 +319,7 @@
|
||||
if(!S)
|
||||
return
|
||||
|
||||
chambered.BB = new /obj/item/projectile/bullet/dart/syringe/pierce_ignore(src)
|
||||
chambered.BB = new /obj/projectile/bullet/dart/syringe/pierce_ignore(src)
|
||||
update_loaded_syringe()
|
||||
chambered.BB.name = S.name
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/projectile/beam
|
||||
/obj/projectile/beam
|
||||
name = "laser"
|
||||
icon_state = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
@@ -15,25 +15,25 @@
|
||||
ricochets_max = 50 //Honk!
|
||||
ricochet_chance = 80
|
||||
|
||||
/obj/item/projectile/beam/laser
|
||||
/obj/projectile/beam/laser
|
||||
|
||||
|
||||
/obj/item/projectile/beam/laser/ik
|
||||
/obj/projectile/beam/laser/ik
|
||||
|
||||
/obj/item/projectile/beam/laser/ik/emp_act(severity)
|
||||
/obj/projectile/beam/laser/ik/emp_act(severity)
|
||||
if(prob(40 / severity))
|
||||
range = 0
|
||||
|
||||
/obj/item/projectile/beam/laser/ik/on_range() //Should spark out of the gun. Theoretically, one could emp projectiles out of the air. However, its more practical to EMP the guns, rather than projectiles in flight
|
||||
/obj/projectile/beam/laser/ik/on_range() //Should spark out of the gun. Theoretically, one could emp projectiles out of the air. However, its more practical to EMP the guns, rather than projectiles in flight
|
||||
do_sparks(1, 1, src)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/laser/heavylaser
|
||||
/obj/projectile/beam/laser/heavylaser
|
||||
name = "heavy laser"
|
||||
icon_state = "heavylaser"
|
||||
damage = 40
|
||||
|
||||
/obj/item/projectile/beam/laser/ai_turret
|
||||
/obj/projectile/beam/laser/ai_turret
|
||||
damage = 17.5 //Slight loss in damage because hitscan
|
||||
forcedodge = 1
|
||||
hitscan = TRUE
|
||||
@@ -50,7 +50,7 @@
|
||||
impact_light_range = 2.5
|
||||
impact_light_color_override = LIGHT_COLOR_DARKRED
|
||||
|
||||
/obj/item/projectile/beam/laser/ai_turret/prehit(atom/target)
|
||||
/obj/projectile/beam/laser/ai_turret/prehit(atom/target)
|
||||
if(is_ai(target))
|
||||
damage = 0 //cheater cheater I don't want AI to die to stupid placement eater
|
||||
nodamage = 1
|
||||
@@ -58,31 +58,31 @@
|
||||
forcedodge = 0 //no peircing after hitting a mob to avoid rooms destroying itself. If someone does monkey chair on AI sat though, I swear to god
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/laser/ai_turret/heavylaser
|
||||
/obj/projectile/beam/laser/ai_turret/heavylaser
|
||||
damage = 35
|
||||
muzzle_type = /obj/effect/projectile/muzzle/heavy_laser
|
||||
tracer_type = /obj/effect/projectile/tracer/heavy_laser
|
||||
impact_type = /obj/effect/projectile/impact/heavy_laser
|
||||
|
||||
|
||||
/obj/item/projectile/beam/practice
|
||||
/obj/projectile/beam/practice
|
||||
name = "practice laser"
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
log_override = TRUE
|
||||
|
||||
/obj/item/projectile/beam/scatter
|
||||
/obj/projectile/beam/scatter
|
||||
name = "laser pellet"
|
||||
icon_state = "scatterlaser"
|
||||
damage = 5
|
||||
|
||||
/obj/item/projectile/beam/scatter/eshotgun
|
||||
/obj/projectile/beam/scatter/eshotgun
|
||||
damage = 6
|
||||
tile_dropoff = 0.5
|
||||
tile_dropoff_s = 0.5
|
||||
range = 8
|
||||
|
||||
/obj/item/projectile/beam/xray
|
||||
/obj/projectile/beam/xray
|
||||
name = "xray beam"
|
||||
icon_state = "xray"
|
||||
damage = 15
|
||||
@@ -93,7 +93,7 @@
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/item/projectile/beam/disabler
|
||||
/obj/projectile/beam/disabler
|
||||
name = "disabler beam"
|
||||
icon_state = "omnilaser"
|
||||
damage = 30
|
||||
@@ -104,25 +104,25 @@
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_CYAN
|
||||
|
||||
/obj/item/projectile/beam/disabler/weak
|
||||
/obj/projectile/beam/disabler/weak
|
||||
name = "weakened disabler beam"
|
||||
damage = 15
|
||||
armor_penetration_flat = -10
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/projectile/beam/disabler/fake
|
||||
/obj/projectile/beam/disabler/fake
|
||||
name = "weakened disabler beam"
|
||||
nodamage = 1
|
||||
damage = 0
|
||||
|
||||
/obj/item/projectile/beam/disabler/pellet
|
||||
/obj/projectile/beam/disabler/pellet
|
||||
name = "split disabler beam"
|
||||
icon_state = "scatterdisabler"
|
||||
damage = 10
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
range = 8
|
||||
|
||||
/obj/item/projectile/beam/pulse
|
||||
/obj/projectile/beam/pulse
|
||||
name = "pulse"
|
||||
icon_state = "u_laser"
|
||||
damage = 50
|
||||
@@ -131,7 +131,7 @@
|
||||
/// If this shot can immediately destroy rwalls or not
|
||||
var/weakened_against_rwalls = FALSE
|
||||
|
||||
/obj/item/projectile/beam/pulse/hitscan
|
||||
/obj/projectile/beam/pulse/hitscan
|
||||
impact_effect_type = null
|
||||
light_color = null
|
||||
hitscan = TRUE
|
||||
@@ -147,26 +147,26 @@
|
||||
impact_light_range = 2.5
|
||||
impact_light_color_override = LIGHT_COLOR_DARKBLUE
|
||||
|
||||
/obj/item/projectile/beam/pulse/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/beam/pulse/on_hit(atom/target, blocked = 0)
|
||||
if(isreinforcedwallturf(target) && weakened_against_rwalls)
|
||||
target.ex_act(EXPLODE_LIGHT)
|
||||
else if(isturf(target) || isstructure(target) || ismachinery(target))
|
||||
target.ex_act(EXPLODE_HEAVY)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/pulse/shot
|
||||
/obj/projectile/beam/pulse/shot
|
||||
name = "proto pulse"
|
||||
damage = 40
|
||||
weakened_against_rwalls = TRUE
|
||||
|
||||
/obj/item/projectile/beam/emitter
|
||||
/obj/projectile/beam/emitter
|
||||
name = "emitter beam"
|
||||
icon_state = "emitter"
|
||||
damage = 30
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/item/projectile/beam/emitter/hitscan
|
||||
/obj/projectile/beam/emitter/hitscan
|
||||
hitscan = TRUE
|
||||
muzzle_type = /obj/effect/projectile/muzzle/laser/emitter
|
||||
tracer_type = /obj/effect/projectile/tracer/laser/emitter
|
||||
@@ -181,10 +181,10 @@
|
||||
impact_light_range = 2.5
|
||||
impact_light_color_override = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/item/projectile/beam/emitter/singularity_pull()
|
||||
/obj/projectile/beam/emitter/singularity_pull()
|
||||
return //don't want the emitters to miss
|
||||
|
||||
/obj/item/projectile/beam/lasertag
|
||||
/obj/projectile/beam/lasertag
|
||||
name = "laser tag beam"
|
||||
icon_state = "omnilaser"
|
||||
hitsound = 'sound/weapons/tap.ogg'
|
||||
@@ -196,7 +196,7 @@
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_DARKBLUE
|
||||
|
||||
/obj/item/projectile/beam/lasertag/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/beam/lasertag/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
@@ -205,34 +205,34 @@
|
||||
M.apply_damage(34, STAMINA)
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/beam/lasertag/omni
|
||||
/obj/projectile/beam/lasertag/omni
|
||||
|
||||
/obj/item/projectile/beam/lasertag/redtag
|
||||
/obj/projectile/beam/lasertag/redtag
|
||||
icon_state = "laser"
|
||||
suit_types = list(/obj/item/clothing/suit/bluetag)
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
|
||||
light_color = LIGHT_COLOR_DARKRED
|
||||
|
||||
/obj/item/projectile/beam/lasertag/bluetag
|
||||
/obj/projectile/beam/lasertag/bluetag
|
||||
icon_state = "bluelaser"
|
||||
suit_types = list(/obj/item/clothing/suit/redtag)
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/projectile/beam/immolator
|
||||
/obj/projectile/beam/immolator
|
||||
name = "immolation beam"
|
||||
immolate = 1
|
||||
|
||||
/obj/item/projectile/beam/immolator/strong
|
||||
/obj/projectile/beam/immolator/strong
|
||||
name = "heavy immolation beam"
|
||||
damage = 45
|
||||
icon_state = "heavylaser"
|
||||
|
||||
/obj/item/projectile/beam/immolator/weak
|
||||
/obj/projectile/beam/immolator/weak
|
||||
name = "light immolation beam"
|
||||
damage = 8
|
||||
icon_state = "scatterlaser"
|
||||
|
||||
/obj/item/projectile/beam/immolator/weak/hitscan
|
||||
/obj/projectile/beam/immolator/weak/hitscan
|
||||
color = LIGHT_COLOR_FIRE
|
||||
hitscan = TRUE
|
||||
muzzle_type = /obj/effect/projectile/muzzle/laser
|
||||
@@ -248,7 +248,7 @@
|
||||
impact_light_range = 2.5
|
||||
impact_light_color_override = LIGHT_COLOR_FIRE
|
||||
|
||||
/obj/item/projectile/beam/instakill
|
||||
/obj/projectile/beam/instakill
|
||||
name = "instagib laser"
|
||||
icon_state = "purple_laser"
|
||||
damage = 200
|
||||
@@ -256,24 +256,24 @@
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
|
||||
light_color = LIGHT_COLOR_PURPLE
|
||||
|
||||
/obj/item/projectile/beam/instakill/blue
|
||||
/obj/projectile/beam/instakill/blue
|
||||
icon_state = "blue_laser"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_DARKBLUE
|
||||
|
||||
/obj/item/projectile/beam/instakill/red
|
||||
/obj/projectile/beam/instakill/red
|
||||
icon_state = "red_laser"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
|
||||
light_color = LIGHT_COLOR_DARKRED
|
||||
|
||||
/obj/item/projectile/beam/instakill/on_hit(atom/target)
|
||||
/obj/projectile/beam/instakill/on_hit(atom/target)
|
||||
. = ..()
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
L.visible_message("<span class='danger'>[L] explodes!</span>")
|
||||
L.quick_explode_gib()
|
||||
|
||||
/obj/item/projectile/beam/laser/detective
|
||||
/obj/projectile/beam/laser/detective
|
||||
name = "energy revolver shot"
|
||||
icon_state = "omnilaser"
|
||||
light_color = LIGHT_COLOR_CYAN
|
||||
@@ -282,7 +282,7 @@
|
||||
stamina = 25
|
||||
eyeblur = 2 SECONDS
|
||||
|
||||
/obj/item/projectile/beam/laser/detective/overcharged
|
||||
/obj/projectile/beam/laser/detective/overcharged
|
||||
name = "overcharged shot"
|
||||
icon_state = "spark"
|
||||
light_color = LIGHT_COLOR_DARKRED
|
||||
@@ -292,7 +292,7 @@
|
||||
stamina = 15
|
||||
eyeblur = 4 SECONDS
|
||||
|
||||
/obj/item/projectile/beam/laser/detective/tracker_warrant_shot
|
||||
/obj/projectile/beam/laser/detective/tracker_warrant_shot
|
||||
name = "tracker shot"
|
||||
icon_state = "yellow_laser"
|
||||
light_color = LIGHT_COLOR_YELLOW
|
||||
@@ -300,7 +300,7 @@
|
||||
stamina = 0
|
||||
reflectability = REFLECTABILITY_PHYSICAL //No mr cult juggernaught, please don't set me to search!
|
||||
|
||||
/obj/item/projectile/beam/laser/detective/tracker_warrant_shot/on_hit(atom/target)
|
||||
/obj/projectile/beam/laser/detective/tracker_warrant_shot/on_hit(atom/target)
|
||||
. = ..()
|
||||
if(!ishuman(target))
|
||||
no_worky(target)
|
||||
@@ -308,7 +308,7 @@
|
||||
start_tracking(target)
|
||||
set_warrant(target)
|
||||
|
||||
/obj/item/projectile/beam/laser/detective/tracker_warrant_shot/proc/start_tracking(atom/target)
|
||||
/obj/projectile/beam/laser/detective/tracker_warrant_shot/proc/start_tracking(atom/target)
|
||||
var/obj/item/gun/energy/detective/D = firer_source_atom
|
||||
if(!D)
|
||||
no_worky(target)
|
||||
@@ -318,7 +318,7 @@
|
||||
return
|
||||
D.start_pointing(target.UID())
|
||||
|
||||
/obj/item/projectile/beam/laser/detective/tracker_warrant_shot/proc/set_warrant(atom/target)
|
||||
/obj/projectile/beam/laser/detective/tracker_warrant_shot/proc/set_warrant(atom/target)
|
||||
var/mob/living/carbon/human/target_to_mark = target
|
||||
var/perpname = target_to_mark.get_visible_name(TRUE)
|
||||
if(!perpname || perpname == "Unknown")
|
||||
@@ -330,7 +330,7 @@
|
||||
return
|
||||
set_criminal_status(firer, R, SEC_RECORD_STATUS_SEARCH, "Target tagged by Detective Revolver", "Detective Revolver")
|
||||
|
||||
/obj/item/projectile/beam/laser/detective/tracker_warrant_shot/proc/no_worky(atom/target, tracking_already, warrant_fail)
|
||||
/obj/projectile/beam/laser/detective/tracker_warrant_shot/proc/no_worky(atom/target, tracking_already, warrant_fail)
|
||||
if(tracking_already)
|
||||
to_chat(firer, "<span class='danger'>Weapon Alert: You are already tracking a target!</span>")
|
||||
return
|
||||
@@ -339,7 +339,7 @@
|
||||
return
|
||||
to_chat(firer, "<span class='danger'>Weapon Alert: unable to track [target]!</span>")
|
||||
|
||||
/obj/item/projectile/beam/silencer
|
||||
/obj/projectile/beam/silencer
|
||||
name = "energy beam" //Keep it vague? It's not a laser, but it's silenced, does a person know what it is?
|
||||
icon_state = "omnilaser"
|
||||
stamina = 30
|
||||
@@ -351,13 +351,13 @@
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
||||
light_color = LIGHT_COLOR_CYAN
|
||||
|
||||
/obj/item/projectile/beam/laser/sparker
|
||||
/obj/projectile/beam/laser/sparker
|
||||
name = "sparker beam"
|
||||
icon_state = "scatterlaser"
|
||||
damage = 12.5
|
||||
range = 12
|
||||
|
||||
/obj/item/projectile/beam/laser/sparker/on_range()
|
||||
/obj/projectile/beam/laser/sparker/on_range()
|
||||
new /obj/effect/particle_effect/sparks(get_turf(src))
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
/obj/item/projectile/bullet
|
||||
/obj/projectile/bullet
|
||||
name = "bullet"
|
||||
damage = 60
|
||||
hitsound_wall = "ricochet"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect
|
||||
|
||||
/// beanbag, heavy stamina damage
|
||||
/obj/item/projectile/bullet/weakbullet
|
||||
/obj/projectile/bullet/weakbullet
|
||||
name = "beanbag slug"
|
||||
damage = 5
|
||||
stamina = 40
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/weakbullet/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
@@ -18,9 +18,9 @@
|
||||
var/atom/throw_target = get_edge_target_turf(L, get_dir(src, get_step_away(L, starting)))
|
||||
L.throw_at(throw_target, 1, 2)
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet/booze
|
||||
/obj/projectile/bullet/weakbullet/booze
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet/booze/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/weakbullet/booze/on_hit(atom/target, blocked = 0)
|
||||
if(..(target, blocked))
|
||||
var/mob/living/M = target
|
||||
M.AdjustDizzy(40 SECONDS)
|
||||
@@ -37,57 +37,57 @@
|
||||
M.AdjustDrowsy(20 SECONDS)
|
||||
A.volume += 5 //Because we can
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet2
|
||||
/obj/projectile/bullet/weakbullet2
|
||||
name = "rubber bullet"
|
||||
damage = 5
|
||||
stamina = 35
|
||||
icon_state = "bullet-r"
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet3
|
||||
/obj/projectile/bullet/weakbullet3
|
||||
damage = 20
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet4
|
||||
/obj/projectile/bullet/weakbullet4
|
||||
name = "rubber bullet"
|
||||
damage = 5
|
||||
stamina = 30
|
||||
icon_state = "bullet-r"
|
||||
|
||||
/obj/item/projectile/bullet/toxinbullet
|
||||
/obj/projectile/bullet/toxinbullet
|
||||
damage = 15
|
||||
damage_type = TOX
|
||||
color = COLOR_GREEN
|
||||
|
||||
|
||||
/obj/item/projectile/bullet/incendiary
|
||||
/obj/projectile/bullet/incendiary
|
||||
immolate = 1
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/firebullet
|
||||
/obj/projectile/bullet/incendiary/firebullet
|
||||
damage = 10
|
||||
|
||||
/obj/item/projectile/bullet/armourpiercing
|
||||
/obj/projectile/bullet/armourpiercing
|
||||
damage = 17
|
||||
armor_penetration_flat = 10
|
||||
|
||||
/obj/item/projectile/bullet/armourpiercing/wt550
|
||||
/obj/projectile/bullet/armourpiercing/wt550
|
||||
damage = 15
|
||||
armor_penetration_percentage = 50
|
||||
armor_penetration_flat = 25
|
||||
|
||||
/obj/item/projectile/bullet/pellet
|
||||
/obj/projectile/bullet/pellet
|
||||
name = "pellet"
|
||||
damage = 12.5
|
||||
tile_dropoff = 0.75
|
||||
tile_dropoff_s = 1.25
|
||||
armor_penetration_flat = -20
|
||||
|
||||
/obj/item/projectile/bullet/pellet/rubber
|
||||
/obj/projectile/bullet/pellet/rubber
|
||||
name = "rubber pellet"
|
||||
damage = 3
|
||||
stamina = 12.5
|
||||
icon_state = "bullet-r"
|
||||
armor_penetration_flat = -10
|
||||
|
||||
/obj/item/projectile/bullet/pellet/rubber/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/pellet/rubber/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(!ishuman(target))
|
||||
return
|
||||
@@ -96,62 +96,62 @@
|
||||
if(initial(range) - range <= 5 && H.getStaminaLoss() >= 60)
|
||||
H.KnockDown(8 SECONDS)
|
||||
|
||||
/obj/item/projectile/bullet/pellet/rubber/stinger
|
||||
/obj/projectile/bullet/pellet/rubber/stinger
|
||||
name = "stingball"
|
||||
damage = 1
|
||||
|
||||
/obj/item/projectile/bullet/pellet/assassination
|
||||
/obj/projectile/bullet/pellet/assassination
|
||||
damage = 12
|
||||
tile_dropoff = 1 // slightly less damage and greater damage falloff compared to normal buckshot
|
||||
|
||||
/obj/item/projectile/bullet/pellet/assassination/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/pellet/assassination/on_hit(atom/target, blocked = 0)
|
||||
if(..(target, blocked))
|
||||
var/mob/living/M = target
|
||||
M.AdjustSilence(4 SECONDS) // HELP MIME KILLING ME IN MAINT
|
||||
|
||||
/obj/item/projectile/bullet/midbullet
|
||||
/obj/projectile/bullet/midbullet
|
||||
damage = 20
|
||||
stamina = 45 // Three rounds from the c20r knocks unarmoured people down, four for people with bulletproof
|
||||
|
||||
/obj/item/projectile/bullet/midbullet_r
|
||||
/obj/projectile/bullet/midbullet_r
|
||||
damage = 5
|
||||
stamina = 75 //Still two rounds to knock people down
|
||||
|
||||
/obj/item/projectile/bullet/midbullet2
|
||||
/obj/projectile/bullet/midbullet2
|
||||
damage = 25
|
||||
|
||||
/obj/item/projectile/bullet/midbullet3
|
||||
/obj/projectile/bullet/midbullet3
|
||||
damage = 30
|
||||
|
||||
/obj/item/projectile/bullet/midbullet3/hp
|
||||
/obj/projectile/bullet/midbullet3/hp
|
||||
damage = 40
|
||||
armor_penetration_flat = -40
|
||||
|
||||
/obj/item/projectile/bullet/midbullet3/ap
|
||||
/obj/projectile/bullet/midbullet3/ap
|
||||
damage = 27
|
||||
armor_penetration_flat = 40
|
||||
|
||||
/obj/item/projectile/bullet/midbullet3/fire
|
||||
/obj/projectile/bullet/midbullet3/fire
|
||||
immolate = 1
|
||||
|
||||
/obj/item/projectile/bullet/midbullet3/overgrown
|
||||
/obj/projectile/bullet/midbullet3/overgrown
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "peashooter_bullet"
|
||||
damage = 25
|
||||
|
||||
/obj/item/projectile/bullet/midbullet3/overgrown/prehit(atom/target)
|
||||
/obj/projectile/bullet/midbullet3/overgrown/prehit(atom/target)
|
||||
if(HAS_TRAIT(target, TRAIT_I_WANT_BRAINS))
|
||||
damage += 10
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/bullet/heavybullet
|
||||
/obj/projectile/bullet/heavybullet
|
||||
damage = 35
|
||||
|
||||
/obj/item/projectile/bullet/heavybullet2
|
||||
/obj/projectile/bullet/heavybullet2
|
||||
damage = 40
|
||||
|
||||
/// taser slugs for shotguns, nothing special
|
||||
/obj/item/projectile/bullet/stunshot
|
||||
/obj/projectile/bullet/stunshot
|
||||
name = "stunshot"
|
||||
damage = 5
|
||||
weaken = 10 SECONDS
|
||||
@@ -161,11 +161,11 @@
|
||||
icon_state = "spark"
|
||||
color = "#FFFF00"
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/shell
|
||||
/obj/projectile/bullet/incendiary/shell
|
||||
name = "incendiary slug"
|
||||
damage = 20
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/shell/Move()
|
||||
/obj/projectile/bullet/incendiary/shell/Move()
|
||||
..()
|
||||
var/turf/location = get_turf(src)
|
||||
if(location)
|
||||
@@ -174,11 +174,11 @@
|
||||
hotspot.recolor()
|
||||
location.hotspot_expose(700, 50)
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/shell/dragonsbreath
|
||||
/obj/projectile/bullet/incendiary/shell/dragonsbreath
|
||||
name = "dragonsbreath round"
|
||||
damage = 5
|
||||
|
||||
/obj/item/projectile/bullet/meteorshot
|
||||
/obj/projectile/bullet/meteorshot
|
||||
name = "meteor"
|
||||
icon = 'icons/obj/meteor.dmi'
|
||||
icon_state = "dust"
|
||||
@@ -186,7 +186,7 @@
|
||||
knockdown = 8 SECONDS
|
||||
hitsound = 'sound/effects/meteorimpact.ogg'
|
||||
|
||||
/obj/item/projectile/bullet/meteorshot/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/meteorshot/on_hit(atom/target, blocked = 0)
|
||||
..()
|
||||
if(ismovable(target))
|
||||
var/atom/movable/M = target
|
||||
@@ -194,15 +194,15 @@
|
||||
var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src)))
|
||||
M.throw_at(throw_target, 3, 2)
|
||||
|
||||
/obj/item/projectile/bullet/meteorshot/New()
|
||||
/obj/projectile/bullet/meteorshot/New()
|
||||
..()
|
||||
SpinAnimation()
|
||||
|
||||
/obj/item/projectile/bullet/mime
|
||||
/obj/projectile/bullet/mime
|
||||
damage = 40
|
||||
var/special_effects = TRUE
|
||||
|
||||
/obj/item/projectile/bullet/mime/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/mime/on_hit(atom/target, blocked = 0)
|
||||
..(target, blocked)
|
||||
if(special_effects)
|
||||
if(iscarbon(target))
|
||||
@@ -215,28 +215,28 @@
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/weapon/honker in chassis.equipment)
|
||||
honker.set_ready_state(0)
|
||||
|
||||
/obj/item/projectile/bullet/mime/nonlethal
|
||||
/obj/projectile/bullet/mime/nonlethal
|
||||
damage = 0 /// We deal no normal damage...
|
||||
stamina = 40 /// ...Rather a large amount of stamina damage. Used in the mime mecha
|
||||
|
||||
/obj/item/projectile/bullet/mime/fake
|
||||
/obj/projectile/bullet/mime/fake
|
||||
damage = 0
|
||||
nodamage = TRUE
|
||||
special_effects = FALSE
|
||||
log_override = TRUE
|
||||
|
||||
/obj/item/projectile/bullet/dart
|
||||
/obj/projectile/bullet/dart
|
||||
name = "dart"
|
||||
icon_state = "cbbolt"
|
||||
damage = 6
|
||||
var/penetrate_thick = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/dart/New()
|
||||
/obj/projectile/bullet/dart/New()
|
||||
..()
|
||||
create_reagents(50)
|
||||
reagents.set_reacting(FALSE)
|
||||
|
||||
/obj/item/projectile/bullet/dart/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
/obj/projectile/bullet/dart/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
if(blocked != INFINITY)
|
||||
@@ -255,39 +255,39 @@
|
||||
reagents.handle_reactions()
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/bullet/dart/metalfoam
|
||||
/obj/projectile/bullet/dart/metalfoam
|
||||
|
||||
/obj/item/projectile/bullet/dart/metalfoam/New()
|
||||
/obj/projectile/bullet/dart/metalfoam/New()
|
||||
..()
|
||||
reagents.add_reagent("aluminum", 15)
|
||||
reagents.add_reagent("fluorosurfactant", 5)
|
||||
reagents.add_reagent("sacid", 5)
|
||||
|
||||
//This one is for future syringe guns update
|
||||
/obj/item/projectile/bullet/dart/syringe
|
||||
/obj/projectile/bullet/dart/syringe
|
||||
name = "syringe"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "syringeproj"
|
||||
|
||||
/obj/item/projectile/bullet/dart/syringe/heavyduty
|
||||
/obj/projectile/bullet/dart/syringe/heavyduty
|
||||
damage = 20
|
||||
|
||||
/obj/item/projectile/bullet/dart/syringe/pierce_ignore
|
||||
/obj/projectile/bullet/dart/syringe/pierce_ignore
|
||||
penetrate_thick = TRUE
|
||||
|
||||
/obj/item/projectile/bullet/dart/syringe/tranquilizer
|
||||
/obj/projectile/bullet/dart/syringe/tranquilizer
|
||||
|
||||
/obj/item/projectile/bullet/dart/syringe/tranquilizer/New()
|
||||
/obj/projectile/bullet/dart/syringe/tranquilizer/New()
|
||||
..()
|
||||
reagents.add_reagent("haloperidol", 15)
|
||||
|
||||
/obj/item/projectile/bullet/dart/syringe/holy
|
||||
/obj/projectile/bullet/dart/syringe/holy
|
||||
|
||||
/obj/item/projectile/bullet/dart/syringe/holy/New()
|
||||
/obj/projectile/bullet/dart/syringe/holy/New()
|
||||
..()
|
||||
reagents.add_reagent("holywater", 10)
|
||||
|
||||
/obj/item/projectile/bullet/neurotoxin
|
||||
/obj/projectile/bullet/neurotoxin
|
||||
name = "neurotoxin spit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 5
|
||||
@@ -295,28 +295,28 @@
|
||||
stamina = 40
|
||||
knockdown = 10 SECONDS
|
||||
|
||||
/obj/item/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = 0)
|
||||
if(isalien(target))
|
||||
knockdown = 0
|
||||
nodamage = TRUE
|
||||
. = ..() // Execute the rest of the code.
|
||||
|
||||
/obj/item/projectile/bullet/anti_alien_toxin
|
||||
/obj/projectile/bullet/anti_alien_toxin
|
||||
name = "neurotoxin spit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 15 // FRENDLY FIRE FRENDLY FIRE
|
||||
damage_type = BURN
|
||||
|
||||
/obj/item/projectile/bullet/anti_alien_toxin/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/anti_alien_toxin/on_hit(atom/target, blocked = 0)
|
||||
if(isalien(target))
|
||||
stun = 10 SECONDS
|
||||
. = ..()
|
||||
|
||||
/obj/item/projectile/bullet/cap
|
||||
/obj/projectile/bullet/cap
|
||||
name = "cap"
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
|
||||
/obj/item/projectile/bullet/cap/fire()
|
||||
/obj/projectile/bullet/cap/fire()
|
||||
loc = null
|
||||
qdel(src)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/projectile/energy
|
||||
/obj/projectile/energy
|
||||
name = "energy"
|
||||
icon_state = "spark"
|
||||
damage = 0
|
||||
@@ -6,7 +6,7 @@
|
||||
flag = "energy"
|
||||
reflectability = REFLECTABILITY_ENERGY
|
||||
|
||||
/obj/item/projectile/energy/electrode
|
||||
/obj/projectile/energy/electrode
|
||||
name = "electrode"
|
||||
color = "#FFFF00"
|
||||
nodamage = 1
|
||||
@@ -17,7 +17,7 @@
|
||||
range = 7
|
||||
//Damage will be handled on the MOB side, to prevent window shattering.
|
||||
|
||||
/obj/item/projectile/energy/electrode/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/energy/electrode/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - burst into sparks!
|
||||
do_sparks(1, 1, src)
|
||||
@@ -30,11 +30,11 @@
|
||||
spawn(5)
|
||||
C.Jitter(jitter)
|
||||
|
||||
/obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
|
||||
/obj/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
|
||||
do_sparks(1, 1, src)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/energy/declone
|
||||
/obj/projectile/energy/declone
|
||||
name = "declone"
|
||||
icon_state = "declone"
|
||||
damage = 20
|
||||
@@ -42,7 +42,7 @@
|
||||
irradiate = 10
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
||||
|
||||
/obj/item/projectile/energy/bolt
|
||||
/obj/projectile/energy/bolt
|
||||
name = "bolt"
|
||||
icon_state = "cbbolt"
|
||||
damage = 15
|
||||
@@ -52,12 +52,12 @@
|
||||
knockdown = 2 SECONDS
|
||||
slur = 10 SECONDS
|
||||
|
||||
/obj/item/projectile/energy/bolt/large
|
||||
/obj/projectile/energy/bolt/large
|
||||
damage = 20
|
||||
|
||||
#define BSG_BASE_DAMAGE 90
|
||||
|
||||
/obj/item/projectile/energy/bsg
|
||||
/obj/projectile/energy/bsg
|
||||
name = "orb of pure bluespace energy"
|
||||
icon_state = "bluespace"
|
||||
impact_effect_type = /obj/effect/temp_visual/bsg_kaboom
|
||||
@@ -71,23 +71,23 @@
|
||||
|
||||
/obj/item/ammo_casing/energy/bsg/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
|
||||
..()
|
||||
var/obj/item/projectile/energy/bsg/P = BB
|
||||
addtimer(CALLBACK(P, TYPE_PROC_REF(/obj/item/projectile/energy/bsg, make_chain), P, user), 1)
|
||||
var/obj/projectile/energy/bsg/P = BB
|
||||
addtimer(CALLBACK(P, TYPE_PROC_REF(/obj/projectile/energy/bsg, make_chain), P, user), 1)
|
||||
|
||||
/obj/item/projectile/energy/bsg/proc/make_chain(obj/item/projectile/P, mob/user)
|
||||
/obj/projectile/energy/bsg/proc/make_chain(obj/projectile/P, mob/user)
|
||||
P.chain = P.Beam(user, icon_state = "sm_arc_supercharged", icon = 'icons/effects/beam.dmi', time = 10 SECONDS, maxdistance = 30)
|
||||
|
||||
/obj/item/projectile/energy/bsg/on_hit(atom/target)
|
||||
/obj/projectile/energy/bsg/on_hit(atom/target)
|
||||
. = ..()
|
||||
kaboom(target)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/energy/bsg/on_range()
|
||||
/obj/projectile/energy/bsg/on_range()
|
||||
kaboom()
|
||||
new /obj/effect/temp_visual/bsg_kaboom(loc)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/energy/bsg/proc/kaboom(atom/target)
|
||||
/obj/projectile/energy/bsg/proc/kaboom(atom/target)
|
||||
// If a lens is modifying the damage of the projectile, the AOE should be impacted as well
|
||||
var/damage_multiplier = damage / BSG_BASE_DAMAGE
|
||||
playsound(src, 'sound/weapons/bsg_explode.ogg', 75, TRUE)
|
||||
@@ -122,12 +122,12 @@
|
||||
|
||||
#undef BSG_BASE_DAMAGE
|
||||
|
||||
/obj/item/projectile/energy/weak_plasma
|
||||
/obj/projectile/energy/weak_plasma
|
||||
name = "plasma bolt"
|
||||
icon_state = "plasma_light"
|
||||
damage = 12.5
|
||||
|
||||
/obj/item/projectile/homing/charged_plasma
|
||||
/obj/projectile/homing/charged_plasma
|
||||
name = "charged plasma bolt"
|
||||
icon_state = "plasma_heavy"
|
||||
damage = 45
|
||||
@@ -137,7 +137,7 @@
|
||||
shield_buster = TRUE
|
||||
var/reached_target = FALSE
|
||||
|
||||
/obj/item/projectile/homing/charged_plasma/pixel_move(trajectory_multiplier)
|
||||
/obj/projectile/homing/charged_plasma/pixel_move(trajectory_multiplier)
|
||||
homing_active = FALSE
|
||||
if(isturf(original))
|
||||
return ..() //It gets weird if it is a turf. Turfs don't move anyway.
|
||||
@@ -155,13 +155,13 @@
|
||||
|
||||
#define ARC_REVOLVER_BASE_DAMAGE 10
|
||||
|
||||
/obj/item/projectile/energy/arc_revolver
|
||||
/obj/projectile/energy/arc_revolver
|
||||
name = "arc emitter"
|
||||
icon_state = "plasma_light"
|
||||
damage = ARC_REVOLVER_BASE_DAMAGE
|
||||
var/charge_number = null
|
||||
|
||||
/obj/item/projectile/energy/arc_revolver/on_hit(atom/target)
|
||||
/obj/projectile/energy/arc_revolver/on_hit(atom/target)
|
||||
. = ..()
|
||||
for(var/obj/effect/E in target)
|
||||
if(istype(E, /obj/effect/abstract/arc_revolver))
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/obj/item/projectile/forcebolt
|
||||
/obj/projectile/forcebolt
|
||||
name = "force bolt"
|
||||
icon_state = "ice_1"
|
||||
damage = 20
|
||||
flag = "energy"
|
||||
|
||||
/obj/item/projectile/forcebolt/strong
|
||||
/obj/projectile/forcebolt/strong
|
||||
|
||||
/obj/item/projectile/forcebolt/on_hit(atom/movable/target, blocked = 0)
|
||||
/obj/projectile/forcebolt/on_hit(atom/movable/target, blocked = 0)
|
||||
. = ..()
|
||||
if(istype(target) && blocked < 100)
|
||||
var/throwdir = get_dir(firer, target)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/obj/item/projectile/homing
|
||||
/obj/projectile/homing
|
||||
name = "smart bullet"
|
||||
var/homing_active = TRUE
|
||||
|
||||
/obj/item/projectile/homing/pixel_move(trajectory_multiplier)
|
||||
/obj/projectile/homing/pixel_move(trajectory_multiplier)
|
||||
. = ..()
|
||||
if(!homing_active)
|
||||
return
|
||||
@@ -21,7 +21,7 @@
|
||||
var/angle = ATAN2(dy, dx)
|
||||
set_angle(angle)
|
||||
|
||||
/obj/item/projectile/homing/magic
|
||||
/obj/projectile/homing/magic
|
||||
name = "bolt of nothing"
|
||||
icon_state = "energy"
|
||||
damage = 0
|
||||
@@ -32,7 +32,7 @@
|
||||
antimagic_flags = MAGIC_RESISTANCE
|
||||
antimagic_charge_cost = 1
|
||||
|
||||
/obj/item/projectile/homing/magic/toolbox
|
||||
/obj/projectile/homing/magic/toolbox
|
||||
name = "magic toolbox"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "toolbox_default"
|
||||
@@ -41,11 +41,11 @@
|
||||
nodamage = FALSE
|
||||
damage_type = BRUTE
|
||||
|
||||
/obj/item/projectile/homing/magic/toolbox/on_range()
|
||||
/obj/projectile/homing/magic/toolbox/on_range()
|
||||
. = ..()
|
||||
new /obj/item/storage/toolbox(get_turf(src))
|
||||
|
||||
/obj/item/projectile/homing/magic/toolbox/on_hit(atom/target, blocked, hit_zone)
|
||||
/obj/projectile/homing/magic/toolbox/on_hit(atom/target, blocked, hit_zone)
|
||||
. = ..()
|
||||
var/obj/item/storage/toolbox/T = new /obj/item/storage/toolbox(get_turf(src))
|
||||
if(ishuman(target))
|
||||
@@ -53,7 +53,7 @@
|
||||
var/obj/item/organ/external/E = pick(H.bodyparts)
|
||||
E.add_embedded_object(T)
|
||||
|
||||
/obj/item/projectile/homing/magic/homing_fireball
|
||||
/obj/projectile/homing/magic/homing_fireball
|
||||
name = "greater bolt of fireball"
|
||||
icon_state = "fireball"
|
||||
damage = 20
|
||||
@@ -67,7 +67,7 @@
|
||||
var/explosion_flash = 4
|
||||
var/explosion_fire = 3
|
||||
|
||||
/obj/item/projectile/homing/magic/homing_fireball/on_hit(mob/living/target)
|
||||
/obj/projectile/homing/magic/homing_fireball/on_hit(mob/living/target)
|
||||
. = ..()
|
||||
if(ismob(target))
|
||||
if(!.)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/projectile/magic
|
||||
/obj/projectile/magic
|
||||
name = "bolt of nothing"
|
||||
icon_state = "energy"
|
||||
damage = 0
|
||||
@@ -9,7 +9,7 @@
|
||||
antimagic_flags = MAGIC_RESISTANCE
|
||||
antimagic_charge_cost = 1
|
||||
|
||||
/obj/item/projectile/magic/death
|
||||
/obj/projectile/magic/death
|
||||
name = "bolt of death"
|
||||
icon_state = null
|
||||
hitscan = TRUE
|
||||
@@ -25,7 +25,7 @@
|
||||
impact_light_range = 2.5
|
||||
impact_light_color_override = LIGHT_COLOR_PURPLE
|
||||
|
||||
/obj/item/projectile/magic/death/on_hit(mob/living/carbon/target)
|
||||
/obj/projectile/magic/death/on_hit(mob/living/carbon/target)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return .
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
target.visible_message("<span class='danger'>[target] topples backwards as the death bolt impacts [target.p_them()]!</span>")
|
||||
|
||||
/obj/item/projectile/magic/fireball
|
||||
/obj/projectile/magic/fireball
|
||||
name = "bolt of fireball"
|
||||
icon_state = "fireball"
|
||||
damage = 10
|
||||
@@ -58,7 +58,7 @@
|
||||
var/exp_flash = 3
|
||||
var/exp_fire = 2
|
||||
|
||||
/obj/item/projectile/magic/fireball/Range()
|
||||
/obj/projectile/magic/fireball/Range()
|
||||
var/turf/T1 = get_step(src,turn(dir, -45))
|
||||
var/turf/T2 = get_step(src,turn(dir, 45))
|
||||
var/turf/T3 = get_step(src,dir)
|
||||
@@ -76,7 +76,7 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/projectile/magic/fireball/on_hit(target)
|
||||
/obj/projectile/magic/fireball/on_hit(target)
|
||||
. = ..()
|
||||
if(ismob(target))
|
||||
if(!.)
|
||||
@@ -87,18 +87,18 @@
|
||||
M.adjustFireLoss(10) // between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately
|
||||
|
||||
|
||||
/obj/item/projectile/magic/fireball/infernal
|
||||
/obj/projectile/magic/fireball/infernal
|
||||
name = "infernal fireball"
|
||||
exp_heavy = -1
|
||||
exp_light = -1
|
||||
exp_flash = 4
|
||||
exp_fire= 5
|
||||
|
||||
/obj/item/projectile/magic/resurrection
|
||||
/obj/projectile/magic/resurrection
|
||||
name = "bolt of resurrection"
|
||||
icon_state = "ion"
|
||||
|
||||
/obj/item/projectile/magic/resurrection/on_hit(mob/living/carbon/target)
|
||||
/obj/projectile/magic/resurrection/on_hit(mob/living/carbon/target)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return .
|
||||
@@ -120,13 +120,13 @@
|
||||
else
|
||||
to_chat(target, "<span class='notice'>You rise with a start, you're alive!!!</span>")
|
||||
|
||||
/obj/item/projectile/magic/teleport
|
||||
/obj/projectile/magic/teleport
|
||||
name = "bolt of teleportation"
|
||||
icon_state = "bluespace"
|
||||
var/inner_tele_radius = 0
|
||||
var/outer_tele_radius = 6
|
||||
|
||||
/obj/item/projectile/magic/teleport/on_hit(mob/target)
|
||||
/obj/projectile/magic/teleport/on_hit(mob/target)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return .
|
||||
@@ -142,13 +142,13 @@
|
||||
smoke.set_up(max(round(10 - teleammount), 1), FALSE, stuff) //Smoke drops off if a lot of stuff is moved for the sake of sanity
|
||||
smoke.start()
|
||||
|
||||
/obj/item/projectile/magic/door
|
||||
/obj/projectile/magic/door
|
||||
name = "bolt of door creation"
|
||||
var/list/door_types = list(/obj/structure/mineral_door/wood,/obj/structure/mineral_door/iron,/obj/structure/mineral_door/silver,\
|
||||
/obj/structure/mineral_door/gold,/obj/structure/mineral_door/uranium,/obj/structure/mineral_door/sandstone,/obj/structure/mineral_door/transparent/plasma,\
|
||||
/obj/structure/mineral_door/transparent/diamond)
|
||||
|
||||
/obj/item/projectile/magic/door/on_hit(atom/target)
|
||||
/obj/projectile/magic/door/on_hit(atom/target)
|
||||
. = ..()
|
||||
var/atom/T = target.loc
|
||||
if(isturf(target) && target.density)
|
||||
@@ -162,30 +162,30 @@
|
||||
else if(istype(target, /obj/structure/closet))
|
||||
OpenCloset(target)
|
||||
|
||||
/obj/item/projectile/magic/door/proc/CreateDoor(turf/T)
|
||||
/obj/projectile/magic/door/proc/CreateDoor(turf/T)
|
||||
var/door_type = pick(door_types)
|
||||
var/obj/structure/mineral_door/D = new door_type(T)
|
||||
T.ChangeTurf(/turf/simulated/floor/plasteel)
|
||||
D.operate()
|
||||
|
||||
/obj/item/projectile/magic/door/proc/OpenDoor(obj/machinery/door/D)
|
||||
/obj/projectile/magic/door/proc/OpenDoor(obj/machinery/door/D)
|
||||
if(istype(D,/obj/machinery/door/airlock))
|
||||
var/obj/machinery/door/airlock/A = D
|
||||
A.locked = FALSE
|
||||
D.open()
|
||||
|
||||
/obj/item/projectile/magic/door/proc/OpenCloset(obj/structure/closet/C)
|
||||
/obj/projectile/magic/door/proc/OpenCloset(obj/structure/closet/C)
|
||||
if(istype(C, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = C
|
||||
SC.locked = FALSE
|
||||
C.open()
|
||||
|
||||
/obj/item/projectile/magic/change
|
||||
/obj/projectile/magic/change
|
||||
name = "bolt of change"
|
||||
icon_state = "ice_1"
|
||||
damage_type = BURN
|
||||
|
||||
/obj/item/projectile/magic/change/on_hit(atom/change)
|
||||
/obj/projectile/magic/change/on_hit(atom/change)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return .
|
||||
@@ -342,12 +342,12 @@ GLOBAL_LIST_INIT(wabbajack_docile_animals, list(
|
||||
qdel(M)
|
||||
return new_mob
|
||||
|
||||
/obj/item/projectile/magic/animate
|
||||
/obj/projectile/magic/animate
|
||||
name = "bolt of animation"
|
||||
icon_state = "red_1"
|
||||
damage_type = BURN
|
||||
|
||||
/obj/item/projectile/magic/animate/Bump(atom/change)
|
||||
/obj/projectile/magic/animate/Bump(atom/change)
|
||||
if(isitem(change) || isstructure(change) && !is_type_in_list(change, GLOB.protected_objects))
|
||||
if(istype(change, /obj/structure/closet/statue))
|
||||
for(var/mob/living/carbon/human/H in change.contents)
|
||||
@@ -377,7 +377,7 @@ GLOBAL_LIST_INIT(wabbajack_docile_animals, list(
|
||||
C.ChangeOwner(firer)
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/magic/slipping
|
||||
/obj/projectile/magic/slipping
|
||||
name = "magical banana"
|
||||
icon = 'icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "banana"
|
||||
@@ -385,11 +385,11 @@ GLOBAL_LIST_INIT(wabbajack_docile_animals, list(
|
||||
var/slip_weaken = 10 SECONDS
|
||||
hitsound = 'sound/items/bikehorn.ogg'
|
||||
|
||||
/obj/item/projectile/magic/slipping/New()
|
||||
/obj/projectile/magic/slipping/New()
|
||||
..()
|
||||
SpinAnimation()
|
||||
|
||||
/obj/item/projectile/magic/slipping/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/magic/slipping/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return .
|
||||
@@ -408,7 +408,7 @@ GLOBAL_LIST_INIT(wabbajack_docile_animals, list(
|
||||
L.Weaken(slip_weaken)
|
||||
L.Stun(slip_stun)
|
||||
|
||||
/obj/item/projectile/magic/arcane_barrage
|
||||
/obj/projectile/magic/arcane_barrage
|
||||
name = "arcane bolt"
|
||||
icon_state = "arcane_barrage"
|
||||
damage = 20
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
/obj/item/projectile/bullet/reusable
|
||||
/obj/projectile/bullet/reusable
|
||||
name = "reusable bullet"
|
||||
desc = "How do you even reuse a bullet?"
|
||||
var/ammo_type = /obj/item/ammo_casing/caseless/
|
||||
var/dropped = 0
|
||||
impact_effect_type = null
|
||||
|
||||
/obj/item/projectile/bullet/reusable/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/reusable/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
handle_drop()
|
||||
|
||||
/obj/item/projectile/bullet/reusable/on_range()
|
||||
/obj/projectile/bullet/reusable/on_range()
|
||||
handle_drop()
|
||||
..()
|
||||
|
||||
/obj/item/projectile/bullet/reusable/proc/handle_drop()
|
||||
/obj/projectile/bullet/reusable/proc/handle_drop()
|
||||
if(!dropped)
|
||||
new ammo_type(loc)
|
||||
dropped = 1
|
||||
|
||||
/obj/item/projectile/bullet/reusable/magspear
|
||||
/obj/projectile/bullet/reusable/magspear
|
||||
name = "magnetic spear"
|
||||
desc = "WHITE WHALE, HOLY GRAIL!"
|
||||
damage = 30 //takes 3 spears to kill a mega carp, one to kill a normal carp
|
||||
icon_state = "magspear"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/magspear
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart
|
||||
/obj/projectile/bullet/reusable/foam_dart
|
||||
name = "foam dart"
|
||||
desc = "I hope you're wearing eye protection."
|
||||
damage = 0 // It's a damn toy.
|
||||
@@ -38,7 +38,7 @@
|
||||
var/obj/item/pen/pen = null
|
||||
log_override = TRUE//it won't log even when there's a pen inside, but since the damage will be so low, I don't think there's any point in making it any more complex
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/handle_drop()
|
||||
/obj/projectile/bullet/reusable/foam_dart/handle_drop()
|
||||
if(dropped)
|
||||
return
|
||||
dropped = 1
|
||||
@@ -51,11 +51,11 @@
|
||||
pen = null
|
||||
newdart.update_appearance(UPDATE_DESC|UPDATE_ICON_STATE)
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/Destroy()
|
||||
/obj/projectile/bullet/reusable/foam_dart/Destroy()
|
||||
QDEL_NULL(pen)
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/riot
|
||||
/obj/projectile/bullet/reusable/foam_dart/riot
|
||||
name = "riot foam dart"
|
||||
icon_state = "foamdart_riot"
|
||||
damage = 25
|
||||
@@ -64,13 +64,13 @@
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
|
||||
log_override = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/sniper
|
||||
/obj/projectile/bullet/reusable/foam_dart/sniper
|
||||
name = "foam sniper dart"
|
||||
icon_state = "foamdartsniper"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/sniper
|
||||
range = 30
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/sniper/riot
|
||||
/obj/projectile/bullet/reusable/foam_dart/sniper/riot
|
||||
name = "riot sniper foam dart"
|
||||
icon_state = "foamdartsniper_riot"
|
||||
damage = 100
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user