Kills obj/item/projectile in favour of obj/projectile (#46692)

* Kills obj/item/projectile in favour of obj/projectile

* Resolves conflicts properly

* fixes that one map

* it lives
This commit is contained in:
nemvar
2019-10-06 13:37:24 -04:00
committed by moo
parent 85d16cf11a
commit a148cae769
204 changed files with 1014 additions and 1013 deletions
+29 -29
View File
@@ -1,4 +1,4 @@
/obj/item/projectile/beam
/obj/projectile/beam
name = "laser"
icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
@@ -15,12 +15,12 @@
ricochet_chance = 80
reflectable = REFLECT_NORMAL
/obj/item/projectile/beam/laser
/obj/projectile/beam/laser
tracer_type = /obj/effect/projectile/tracer/laser
muzzle_type = /obj/effect/projectile/muzzle/laser
impact_type = /obj/effect/projectile/impact/laser
/obj/item/projectile/beam/laser/heavylaser
/obj/projectile/beam/laser/heavylaser
name = "heavy laser"
icon_state = "heavylaser"
damage = 40
@@ -28,7 +28,7 @@
muzzle_type = /obj/effect/projectile/muzzle/heavy_laser
impact_type = /obj/effect/projectile/impact/heavy_laser
/obj/item/projectile/beam/laser/on_hit(atom/target, blocked = FALSE)
/obj/projectile/beam/laser/on_hit(atom/target, blocked = FALSE)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/M = target
@@ -36,23 +36,23 @@
else if(isturf(target))
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser/wall
/obj/item/projectile/beam/weak
/obj/projectile/beam/weak
damage = 15
/obj/item/projectile/beam/weak/penetrator
/obj/projectile/beam/weak/penetrator
armour_penetration = 50
/obj/item/projectile/beam/practice
/obj/projectile/beam/practice
name = "practice laser"
damage = 0
nodamage = TRUE
/obj/item/projectile/beam/scatter
/obj/projectile/beam/scatter
name = "laser pellet"
icon_state = "scatterlaser"
damage = 5
/obj/item/projectile/beam/xray
/obj/projectile/beam/xray
name = "\improper X-ray beam"
icon_state = "xray"
flag = "rad"
@@ -67,7 +67,7 @@
muzzle_type = /obj/effect/projectile/muzzle/xray
impact_type = /obj/effect/projectile/impact/xray
/obj/item/projectile/beam/disabler
/obj/projectile/beam/disabler
name = "disabler beam"
icon_state = "omnilaser"
damage = 30
@@ -81,7 +81,7 @@
muzzle_type = /obj/effect/projectile/muzzle/disabler
impact_type = /obj/effect/projectile/impact/disabler
/obj/item/projectile/beam/pulse
/obj/projectile/beam/pulse
name = "pulse"
icon_state = "u_laser"
damage = 50
@@ -91,36 +91,36 @@
muzzle_type = /obj/effect/projectile/muzzle/pulse
impact_type = /obj/effect/projectile/impact/pulse
/obj/item/projectile/beam/pulse/on_hit(atom/target, blocked = FALSE)
/obj/projectile/beam/pulse/on_hit(atom/target, blocked = FALSE)
. = ..()
if (!QDELETED(target) && (isturf(target) || istype(target, /obj/structure/)))
target.ex_act(EXPLODE_HEAVY)
/obj/item/projectile/beam/pulse/shotgun
/obj/projectile/beam/pulse/shotgun
damage = 40
/obj/item/projectile/beam/pulse/heavy
/obj/projectile/beam/pulse/heavy
name = "heavy pulse laser"
icon_state = "pulse1_bl"
var/life = 20
/obj/item/projectile/beam/pulse/heavy/on_hit(atom/target, blocked = FALSE)
/obj/projectile/beam/pulse/heavy/on_hit(atom/target, blocked = FALSE)
life -= 10
if(life > 0)
. = BULLET_ACT_FORCE_PIERCE
..()
/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/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 = null
@@ -131,7 +131,7 @@
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
light_color = LIGHT_COLOR_BLUE
/obj/item/projectile/beam/lasertag/on_hit(atom/target, blocked = FALSE)
/obj/projectile/beam/lasertag/on_hit(atom/target, blocked = FALSE)
. = ..()
if(ishuman(target))
var/mob/living/carbon/human/M = target
@@ -139,7 +139,7 @@
if(M.wear_suit.type in suit_types)
M.adjustStaminaLoss(34)
/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
@@ -148,20 +148,20 @@
muzzle_type = /obj/effect/projectile/muzzle/laser
impact_type = /obj/effect/projectile/impact/laser
/obj/item/projectile/beam/lasertag/redtag/hitscan
/obj/projectile/beam/lasertag/redtag/hitscan
hitscan = TRUE
/obj/item/projectile/beam/lasertag/bluetag
/obj/projectile/beam/lasertag/bluetag
icon_state = "bluelaser"
suit_types = list(/obj/item/clothing/suit/redtag)
tracer_type = /obj/effect/projectile/tracer/laser/blue
muzzle_type = /obj/effect/projectile/muzzle/laser/blue
impact_type = /obj/effect/projectile/impact/laser/blue
/obj/item/projectile/beam/lasertag/bluetag/hitscan
/obj/projectile/beam/lasertag/bluetag/hitscan
hitscan = TRUE
/obj/item/projectile/beam/instakill
/obj/projectile/beam/instakill
name = "instagib laser"
icon_state = "purple_laser"
damage = 200
@@ -169,17 +169,17 @@
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_BLUE
/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_RED
/obj/item/projectile/beam/instakill/on_hit(atom/target)
/obj/projectile/beam/instakill/on_hit(atom/target)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/M = target
@@ -187,7 +187,7 @@
M.gib()
//a shrink ray that shrinks stuff, which grows back after a short while.
/obj/item/projectile/beam/shrink
/obj/projectile/beam/shrink
name = "shrink ray"
icon_state = "blue_laser"
hitsound = 'sound/weapons/shrink_hit.ogg'
@@ -198,7 +198,7 @@
light_color = LIGHT_COLOR_BLUE
var/shrink_time = 90
/obj/item/projectile/beam/shrink/on_hit(atom/target, blocked = FALSE)
/obj/projectile/beam/shrink/on_hit(atom/target, blocked = FALSE)
. = ..()
if(isopenturf(target) || istype(target, /turf/closed/indestructible))//shrunk floors wouldnt do anything except look weird, i-walls shouldnt be bypassable
return
@@ -1,4 +1,4 @@
/obj/item/projectile/bullet
/obj/projectile/bullet
name = "bullet"
icon_state = "bullet"
damage = 60
@@ -1,15 +1,15 @@
/obj/item/projectile/bullet/incendiary
/obj/projectile/bullet/incendiary
damage = 20
var/fire_stacks = 4
/obj/item/projectile/bullet/incendiary/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/incendiary/on_hit(atom/target, blocked = FALSE)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/M = target
M.adjust_fire_stacks(fire_stacks)
M.IgniteMob()
/obj/item/projectile/bullet/incendiary/Move()
/obj/projectile/bullet/incendiary/Move()
. = ..()
var/turf/location = get_turf(src)
if(location)
@@ -1,14 +1,14 @@
/obj/item/projectile/bullet/dart
/obj/projectile/bullet/dart
name = "dart"
icon_state = "cbbolt"
damage = 6
var/piercing = FALSE
/obj/item/projectile/bullet/dart/Initialize()
/obj/projectile/bullet/dart/Initialize()
. = ..()
create_reagents(50, NO_REACT)
/obj/item/projectile/bullet/dart/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/dart/on_hit(atom/target, blocked = FALSE)
if(iscarbon(target))
var/mob/living/carbon/M = target
if(blocked != 100) // not completely blocked
@@ -27,12 +27,12 @@
reagents.handle_reactions()
return BULLET_ACT_HIT
/obj/item/projectile/bullet/dart/metalfoam/Initialize()
/obj/projectile/bullet/dart/metalfoam/Initialize()
. = ..()
reagents.add_reagent(/datum/reagent/aluminium, 15)
reagents.add_reagent(/datum/reagent/foaming_agent, 5)
reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 5)
/obj/item/projectile/bullet/dart/syringe
/obj/projectile/bullet/dart/syringe
name = "syringe"
icon_state = "syringeproj"
@@ -1,11 +1,11 @@
/obj/item/projectile/bullet/dnainjector
/obj/projectile/bullet/dnainjector
name = "\improper DNA injector"
icon_state = "syringeproj"
var/obj/item/dnainjector/injector
damage = 5
hitsound_wall = "shatter"
/obj/item/projectile/bullet/dnainjector/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/dnainjector/on_hit(atom/target, blocked = FALSE)
if(iscarbon(target))
var/mob/living/carbon/M = target
if(blocked != 100)
@@ -19,6 +19,6 @@
"<span class='userdanger'>You were protected against \the [src]!</span>")
return ..()
/obj/item/projectile/bullet/dnainjector/Destroy()
/obj/projectile/bullet/dnainjector/Destroy()
QDEL_NULL(injector)
return ..()
@@ -1,12 +1,12 @@
// 40mm (Grenade Launcher
/obj/item/projectile/bullet/a40mm
/obj/projectile/bullet/a40mm
name ="40mm grenade"
desc = "USE A WEEL GUN"
icon_state= "bolter"
damage = 60
/obj/item/projectile/bullet/a40mm/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/a40mm/on_hit(atom/target, blocked = FALSE)
..()
explosion(target, -1, 0, 2, 1, 0, flame_range = 3)
return BULLET_ACT_HIT
@@ -1,44 +1,44 @@
// C3D (Borgs)
/obj/item/projectile/bullet/c3d
/obj/projectile/bullet/c3d
damage = 20
// Mech LMG
/obj/item/projectile/bullet/lmg
/obj/projectile/bullet/lmg
damage = 20
// Mech FNX-99
/obj/item/projectile/bullet/incendiary/fnx99
/obj/projectile/bullet/incendiary/fnx99
damage = 20
// Turrets
/obj/item/projectile/bullet/manned_turret
/obj/projectile/bullet/manned_turret
damage = 20
/obj/item/projectile/bullet/syndicate_turret
/obj/projectile/bullet/syndicate_turret
damage = 20
// 7.12x82mm (SAW)
/obj/item/projectile/bullet/mm712x82
/obj/projectile/bullet/mm712x82
name = "7.12x82mm bullet"
damage = 45
armour_penetration = 5
/obj/item/projectile/bullet/mm712x82_ap
/obj/projectile/bullet/mm712x82_ap
name = "7.12x82mm armor-piercing bullet"
damage = 40
armour_penetration = 75
/obj/item/projectile/bullet/mm712x82_hp
/obj/projectile/bullet/mm712x82_hp
name = "7.12x82mm hollow-point bullet"
damage = 60
armour_penetration = -60
/obj/item/projectile/bullet/incendiary/mm712x82
/obj/projectile/bullet/incendiary/mm712x82
name = "7.12x82mm incendiary bullet"
damage = 20
fire_stacks = 3
@@ -1,36 +1,36 @@
// 9mm (Stechkin APS)
/obj/item/projectile/bullet/c9mm
/obj/projectile/bullet/c9mm
name = "9mm bullet"
damage = 20
/obj/item/projectile/bullet/c9mm_ap
/obj/projectile/bullet/c9mm_ap
name = "9mm armor-piercing bullet"
damage = 15
armour_penetration = 40
/obj/item/projectile/bullet/incendiary/c9mm
/obj/projectile/bullet/incendiary/c9mm
name = "9mm incendiary bullet"
damage = 10
fire_stacks = 1
// 10mm (Stechkin)
/obj/item/projectile/bullet/c10mm
/obj/projectile/bullet/c10mm
name = "10mm bullet"
damage = 30
/obj/item/projectile/bullet/c10mm_ap
/obj/projectile/bullet/c10mm_ap
name = "10mm armor-piercing bullet"
damage = 27
armour_penetration = 40
/obj/item/projectile/bullet/c10mm_hp
/obj/projectile/bullet/c10mm_hp
name = "10mm hollow-point bullet"
damage = 40
armour_penetration = -50
/obj/item/projectile/bullet/incendiary/c10mm
/obj/projectile/bullet/incendiary/c10mm
name = "10mm incendiary bullet"
damage = 15
fire_stacks = 2
@@ -1,26 +1,26 @@
// 7.62x38mmR (Nagant Revolver)
/obj/item/projectile/bullet/n762
/obj/projectile/bullet/n762
name = "7.62x38mmR bullet"
damage = 60
// .50AE (Desert Eagle)
/obj/item/projectile/bullet/a50AE
/obj/projectile/bullet/a50AE
name = ".50AE bullet"
damage = 60
// .38 (Detective's Gun)
/obj/item/projectile/bullet/c38
/obj/projectile/bullet/c38
name = ".38 bullet"
damage = 25
/obj/item/projectile/bullet/c38/trac
/obj/projectile/bullet/c38/trac
name = ".38 TRAC bullet"
damage = 10
/obj/item/projectile/bullet/c38/trac/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/c38/trac/on_hit(atom/target, blocked = FALSE)
. = ..()
var/mob/living/carbon/M = target
var/obj/item/implant/tracking/c38/imp
@@ -31,23 +31,23 @@
imp = new /obj/item/implant/tracking/c38(M)
imp.implant(M)
/obj/item/projectile/bullet/c38/hotshot //similar to incendiary bullets, but do not leave a flaming trail
/obj/projectile/bullet/c38/hotshot //similar to incendiary bullets, but do not leave a flaming trail
name = ".38 Hot Shot bullet"
damage = 20
/obj/item/projectile/bullet/c38/hotshot/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/c38/hotshot/on_hit(atom/target, blocked = FALSE)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/M = target
M.adjust_fire_stacks(6)
M.IgniteMob()
/obj/item/projectile/bullet/c38/iceblox //see /obj/item/projectile/temp for the original code
/obj/projectile/bullet/c38/iceblox //see /obj/projectile/temp for the original code
name = ".38 Iceblox bullet"
damage = 20
var/temperature = 100
/obj/item/projectile/bullet/c38/iceblox/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/c38/iceblox/on_hit(atom/target, blocked = FALSE)
. = ..()
if(isliving(target))
var/mob/living/M = target
@@ -55,6 +55,6 @@
// .357 (Syndie Revolver)
/obj/item/projectile/bullet/a357
/obj/projectile/bullet/a357
name = ".357 bullet"
damage = 60
@@ -1,16 +1,16 @@
// 5.56mm (M-90gl Carbine)
/obj/item/projectile/bullet/a556
/obj/projectile/bullet/a556
name = "5.56mm bullet"
damage = 35
// 7.62 (Nagant Rifle)
/obj/item/projectile/bullet/a762
/obj/projectile/bullet/a762
name = "7.62 bullet"
damage = 60
/obj/item/projectile/bullet/a762_enchanted
/obj/projectile/bullet/a762_enchanted
name = "enchanted 7.62 bullet"
damage = 20
stamina = 80
@@ -1,21 +1,21 @@
/obj/item/projectile/bullet/shotgun_slug
/obj/projectile/bullet/shotgun_slug
name = "12g shotgun slug"
damage = 60
/obj/item/projectile/bullet/shotgun_beanbag
/obj/projectile/bullet/shotgun_beanbag
name = "beanbag slug"
damage = 5
stamina = 55
/obj/item/projectile/bullet/incendiary/shotgun
/obj/projectile/bullet/incendiary/shotgun
name = "incendiary slug"
damage = 20
/obj/item/projectile/bullet/incendiary/shotgun/dragonsbreath
/obj/projectile/bullet/incendiary/shotgun/dragonsbreath
name = "dragonsbreath pellet"
damage = 5
/obj/item/projectile/bullet/shotgun_stunslug
/obj/projectile/bullet/shotgun_stunslug
name = "stunslug"
damage = 5
paralyze = 100
@@ -25,7 +25,7 @@
icon_state = "spark"
color = "#FFFF00"
/obj/item/projectile/bullet/shotgun_meteorslug
/obj/projectile/bullet/shotgun_meteorslug
name = "meteorslug"
icon = 'icons/obj/meteor.dmi'
icon_state = "dust"
@@ -34,46 +34,46 @@
knockdown = 80
hitsound = 'sound/effects/meteorimpact.ogg'
/obj/item/projectile/bullet/shotgun_meteorslug/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/shotgun_meteorslug/on_hit(atom/target, blocked = FALSE)
. = ..()
if(ismovableatom(target))
var/atom/movable/M = target
var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src)))
M.safe_throw_at(throw_target, 3, 2)
/obj/item/projectile/bullet/shotgun_meteorslug/Initialize()
/obj/projectile/bullet/shotgun_meteorslug/Initialize()
. = ..()
SpinAnimation()
/obj/item/projectile/bullet/shotgun_frag12
/obj/projectile/bullet/shotgun_frag12
name ="frag12 slug"
damage = 25
paralyze = 50
/obj/item/projectile/bullet/shotgun_frag12/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/shotgun_frag12/on_hit(atom/target, blocked = FALSE)
..()
explosion(target, -1, 0, 1)
return BULLET_ACT_HIT
/obj/item/projectile/bullet/pellet
/obj/projectile/bullet/pellet
var/tile_dropoff = 0.75
var/tile_dropoff_s = 0.5
/obj/item/projectile/bullet/pellet/shotgun_buckshot
/obj/projectile/bullet/pellet/shotgun_buckshot
name = "buckshot pellet"
damage = 12.5
/obj/item/projectile/bullet/pellet/shotgun_rubbershot
/obj/projectile/bullet/pellet/shotgun_rubbershot
name = "rubbershot pellet"
damage = 3
stamina = 11
/obj/item/projectile/bullet/pellet/shotgun_incapacitate
/obj/projectile/bullet/pellet/shotgun_incapacitate
name = "incapacitating pellet"
damage = 1
stamina = 6
/obj/item/projectile/bullet/pellet/Range()
/obj/projectile/bullet/pellet/Range()
..()
if(damage > 0)
damage -= tile_dropoff
@@ -82,19 +82,19 @@
if(damage < 0 && stamina < 0)
qdel(src)
/obj/item/projectile/bullet/pellet/shotgun_improvised
/obj/projectile/bullet/pellet/shotgun_improvised
tile_dropoff = 0.55 //Come on it does 6 damage don't be like that.
damage = 6
/obj/item/projectile/bullet/pellet/shotgun_improvised/Initialize()
/obj/projectile/bullet/pellet/shotgun_improvised/Initialize()
. = ..()
range = rand(1, 8)
/obj/item/projectile/bullet/pellet/shotgun_improvised/on_range()
/obj/projectile/bullet/pellet/shotgun_improvised/on_range()
do_sparks(1, TRUE, src)
..()
// Mech Scattershot
/obj/item/projectile/bullet/scattershot
/obj/projectile/bullet/scattershot
damage = 24
@@ -1,21 +1,21 @@
// .45 (M1911 & C20r)
/obj/item/projectile/bullet/c45
/obj/projectile/bullet/c45
name = ".45 bullet"
damage = 30
// 4.6x30mm (Autorifles)
/obj/item/projectile/bullet/c46x30mm
/obj/projectile/bullet/c46x30mm
name = "4.6x30mm bullet"
damage = 20
/obj/item/projectile/bullet/c46x30mm_ap
/obj/projectile/bullet/c46x30mm_ap
name = "4.6x30mm armor-piercing bullet"
damage = 15
armour_penetration = 40
/obj/item/projectile/bullet/incendiary/c46x30mm
/obj/projectile/bullet/incendiary/c46x30mm
name = "4.6x30mm incendiary bullet"
damage = 10
fire_stacks = 1
@@ -1,6 +1,6 @@
// .50 (Sniper)
/obj/item/projectile/bullet/p50
/obj/projectile/bullet/p50
name =".50 bullet"
speed = 0.4
damage = 70
@@ -9,13 +9,13 @@
armour_penetration = 50
var/breakthings = TRUE
/obj/item/projectile/bullet/p50/on_hit(atom/target, blocked = 0)
/obj/projectile/bullet/p50/on_hit(atom/target, blocked = 0)
if(isobj(target) && (blocked != 100) && breakthings)
var/obj/O = target
O.take_damage(80, BRUTE, "bullet", FALSE)
return ..()
/obj/item/projectile/bullet/p50/soporific
/obj/projectile/bullet/p50/soporific
name =".50 soporific bullet"
armour_penetration = 0
damage = 0
@@ -23,13 +23,13 @@
paralyze = 0
breakthings = FALSE
/obj/item/projectile/bullet/p50/soporific/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/p50/soporific/on_hit(atom/target, blocked = FALSE)
if((blocked != 100) && isliving(target))
var/mob/living/L = target
L.Sleeping(400)
return ..()
/obj/item/projectile/bullet/p50/penetrator
/obj/projectile/bullet/p50/penetrator
name =".50 penetrator bullet"
icon_state = "gauss"
name = "penetrator round"
@@ -39,7 +39,7 @@
paralyze = 0
breakthings = FALSE
/obj/item/projectile/bullet/p50/penetrator/shuttle //Nukeop Shuttle Variety
/obj/projectile/bullet/p50/penetrator/shuttle //Nukeop Shuttle Variety
icon_state = "gaussstrong"
damage = 25
speed = 0.3
@@ -1,6 +1,6 @@
// Honker
/obj/item/projectile/bullet/honker
/obj/projectile/bullet/honker
name = "banana"
damage = 0
movement_type = FLYING | UNSTOPPABLE
@@ -10,11 +10,11 @@
icon_state = "banana"
range = 200
/obj/item/projectile/bullet/honker/Initialize()
/obj/projectile/bullet/honker/Initialize()
. = ..()
SpinAnimation()
/obj/item/projectile/bullet/honker/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/honker/on_hit(atom/target, blocked = FALSE)
. = ..()
var/mob/M = target
if(istype(M))
@@ -22,10 +22,10 @@
// Mime
/obj/item/projectile/bullet/mime
/obj/projectile/bullet/mime
damage = 40
/obj/item/projectile/bullet/mime/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/mime/on_hit(atom/target, blocked = FALSE)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/M = target
@@ -1,4 +1,4 @@
/obj/item/projectile/energy
/obj/projectile/energy
name = "energy"
icon_state = "spark"
damage = 0
@@ -1,4 +1,4 @@
/obj/item/projectile/energy/bolt //ebow bolts
/obj/projectile/energy/bolt //ebow bolts
name = "bolt"
icon_state = "cbbolt"
damage = 15
@@ -9,9 +9,9 @@
knockdown = 10
slur = 5
/obj/item/projectile/energy/bolt/halloween
/obj/projectile/energy/bolt/halloween
name = "candy corn"
icon_state = "candy_corn"
/obj/item/projectile/energy/bolt/large
/obj/projectile/energy/bolt/large
damage = 20
@@ -1,16 +1,16 @@
/obj/item/projectile/energy/declone
/obj/projectile/energy/declone
name = "radiation beam"
icon_state = "declone"
damage = 20
damage_type = CLONE
irradiate = 100
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
/obj/item/projectile/energy/declone/weak
/obj/projectile/energy/declone/weak
damage = 9
irradiate = 30
/obj/item/projectile/energy/dart //ninja throwing dart
/obj/projectile/energy/dart //ninja throwing dart
name = "dart"
icon_state = "toxin"
damage = 5
@@ -1,4 +1,4 @@
/obj/item/projectile/energy/net
/obj/projectile/energy/net
name = "energy netting"
icon_state = "e_netting"
damage = 10
@@ -6,18 +6,18 @@
hitsound = 'sound/weapons/taserhit.ogg'
range = 10
/obj/item/projectile/energy/net/Initialize()
/obj/projectile/energy/net/Initialize()
. = ..()
SpinAnimation()
/obj/item/projectile/energy/net/on_hit(atom/target, blocked = FALSE)
/obj/projectile/energy/net/on_hit(atom/target, blocked = FALSE)
if(isliving(target))
var/turf/Tloc = get_turf(target)
if(!locate(/obj/effect/nettingportal) in Tloc)
new /obj/effect/nettingportal(Tloc)
..()
/obj/item/projectile/energy/net/on_range()
/obj/projectile/energy/net/on_range()
do_sparks(1, TRUE, src)
..()
@@ -55,14 +55,14 @@
/obj/effect/nettingportal/singularity_pull()
return
/obj/item/projectile/energy/trap
/obj/projectile/energy/trap
name = "energy snare"
icon_state = "e_snare"
nodamage = TRUE
hitsound = 'sound/weapons/taserhit.ogg'
range = 4
/obj/item/projectile/energy/trap/on_hit(atom/target, blocked = FALSE)
/obj/projectile/energy/trap/on_hit(atom/target, blocked = FALSE)
if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap
new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc))
else if(iscarbon(target))
@@ -70,11 +70,11 @@
B.Crossed(target)
..()
/obj/item/projectile/energy/trap/on_range()
/obj/projectile/energy/trap/on_range()
new /obj/item/restraints/legcuffs/beartrap/energy(loc)
..()
/obj/item/projectile/energy/trap/cyborg
/obj/projectile/energy/trap/cyborg
name = "Energy Bola"
icon_state = "e_snare"
nodamage = TRUE
@@ -82,7 +82,7 @@
hitsound = 'sound/weapons/taserhit.ogg'
range = 10
/obj/item/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = FALSE)
/obj/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = FALSE)
if(!ismob(target) || blocked >= 100)
do_sparks(1, TRUE, src)
qdel(src)
@@ -92,6 +92,6 @@
QDEL_IN(src, 10)
..()
/obj/item/projectile/energy/trap/cyborg/on_range()
/obj/projectile/energy/trap/cyborg/on_range()
do_sparks(1, TRUE, src)
qdel(src)
@@ -1,5 +1,5 @@
//Nuclear particle projectile - a deadly side effect of fusion
/obj/item/projectile/energy/nuclear_particle
/obj/projectile/energy/nuclear_particle
name = "nuclear particle"
icon_state = "nuclear_particle"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
@@ -17,7 +17,7 @@
"purple" = "#FF00FF"
)
/obj/item/projectile/energy/nuclear_particle/Initialize()
/obj/projectile/energy/nuclear_particle/Initialize()
. = ..()
//Random color time!
var/our_color = pick(particle_colors)
@@ -25,5 +25,5 @@
set_light(4, 3, particle_colors[our_color]) //Range of 4, brightness of 3 - Same range as a flashlight
/atom/proc/fire_nuclear_particle(angle = rand(0,360)) //used by fusion to fire random nuclear particles. Fires one particle in a random direction.
var/obj/item/projectile/energy/nuclear_particle/P = new /obj/item/projectile/energy/nuclear_particle(src)
var/obj/projectile/energy/nuclear_particle/P = new /obj/projectile/energy/nuclear_particle(src)
P.fire(angle)
@@ -1,4 +1,4 @@
/obj/item/projectile/energy/electrode
/obj/projectile/energy/electrode
name = "electrode"
icon_state = "spark"
color = "#FFFF00"
@@ -12,7 +12,7 @@
muzzle_type = /obj/effect/projectile/muzzle/stun
impact_type = /obj/effect/projectile/impact/stun
/obj/item/projectile/energy/electrode/on_hit(atom/target, blocked = FALSE)
/obj/projectile/energy/electrode/on_hit(atom/target, blocked = FALSE)
. = ..()
if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - burst into sparks!
do_sparks(1, TRUE, src)
@@ -25,6 +25,6 @@
else if((C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE))
addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, jitter), 5)
/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, TRUE, src)
..()
@@ -1,4 +1,4 @@
/obj/item/projectile/energy/tesla
/obj/projectile/energy/tesla
name = "tesla bolt"
icon_state = "tesla_projectile"
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
@@ -7,23 +7,23 @@
var/zap_range = 3
var/power = 10000
/obj/item/projectile/energy/tesla/fire(setAngle)
/obj/projectile/energy/tesla/fire(setAngle)
if(firer)
chain = firer.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY)
..()
/obj/item/projectile/energy/tesla/on_hit(atom/target)
/obj/projectile/energy/tesla/on_hit(atom/target)
. = ..()
tesla_zap(target, zap_range, power, tesla_flags)
qdel(src)
/obj/item/projectile/energy/tesla/Destroy()
/obj/projectile/energy/tesla/Destroy()
QDEL_NULL(chain)
return ..()
/obj/item/projectile/energy/tesla/revolver
/obj/projectile/energy/tesla/revolver
name = "energy orb"
/obj/item/projectile/energy/tesla/cannon
/obj/projectile/energy/tesla/cannon
name = "tesla orb"
power = 20000
+52 -52
View File
@@ -1,4 +1,4 @@
/obj/item/projectile/magic
/obj/projectile/magic
name = "bolt of nothing"
icon_state = "energy"
damage = 0
@@ -7,11 +7,11 @@
armour_penetration = 100
flag = "magic"
/obj/item/projectile/magic/death
/obj/projectile/magic/death
name = "bolt of death"
icon_state = "pulse1_bl"
/obj/item/projectile/magic/death/on_hit(target)
/obj/projectile/magic/death/on_hit(target)
. = ..()
if(ismob(target))
var/mob/M = target
@@ -20,14 +20,14 @@
return BULLET_ACT_BLOCK
M.death(0)
/obj/item/projectile/magic/resurrection
/obj/projectile/magic/resurrection
name = "bolt of resurrection"
icon_state = "ion"
damage = 0
damage_type = OXY
nodamage = TRUE
/obj/item/projectile/magic/resurrection/on_hit(mob/living/carbon/target)
/obj/projectile/magic/resurrection/on_hit(mob/living/carbon/target)
. = ..()
if(isliving(target))
if(target.hellbound)
@@ -45,7 +45,7 @@
else if(target.stat != DEAD)
to_chat(target, "<span class='notice'>You feel great!</span>")
/obj/item/projectile/magic/teleport
/obj/projectile/magic/teleport
name = "bolt of teleportation"
icon_state = "bluespace"
damage = 0
@@ -54,7 +54,7 @@
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(ismob(target))
var/mob/M = target
@@ -73,14 +73,14 @@
smoke.set_up(max(round(4 - teleammount),0), stuff.loc) //Smoke drops off if a lot of stuff is moved for the sake of sanity
smoke.start()
/obj/item/projectile/magic/safety
/obj/projectile/magic/safety
name = "bolt of safety"
icon_state = "bluespace"
damage = 0
damage_type = OXY
nodamage = TRUE
/obj/item/projectile/magic/safety/on_hit(atom/target)
/obj/projectile/magic/safety/on_hit(atom/target)
. = ..()
if(ismob(target))
var/mob/M = target
@@ -99,7 +99,7 @@
smoke.set_up(0, t)
smoke.start()
/obj/item/projectile/magic/door
/obj/projectile/magic/door
name = "bolt of door creation"
icon_state = "energy"
damage = 0
@@ -107,7 +107,7 @@
nodamage = TRUE
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)
. = ..()
if(istype(target, /obj/machinery/door))
OpenDoor(target)
@@ -116,26 +116,26 @@
if(isclosedturf(T) && !isindestructiblewall(T))
CreateDoor(T)
/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/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
D.Open()
/obj/item/projectile/magic/door/proc/OpenDoor(var/obj/machinery/door/D)
/obj/projectile/magic/door/proc/OpenDoor(var/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/change
/obj/projectile/magic/change
name = "bolt of change"
icon_state = "ice_1"
damage = 0
damage_type = BURN
nodamage = TRUE
/obj/item/projectile/magic/change/on_hit(atom/change)
/obj/projectile/magic/change/on_hit(atom/change)
. = ..()
if(ismob(change))
var/mob/M = change
@@ -287,14 +287,14 @@
qdel(M)
return new_mob
/obj/item/projectile/magic/animate
/obj/projectile/magic/animate
name = "bolt of animation"
icon_state = "red_1"
damage = 0
damage_type = BURN
nodamage = TRUE
/obj/item/projectile/magic/animate/on_hit(atom/target, blocked = FALSE)
/obj/projectile/magic/animate/on_hit(atom/target, blocked = FALSE)
target.animate_atom_living(firer)
..()
@@ -332,7 +332,7 @@
if(owner)
C.ChangeOwner(owner)
/obj/item/projectile/magic/spellblade
/obj/projectile/magic/spellblade
name = "blade energy"
icon_state = "lavastaff"
damage = 15
@@ -341,7 +341,7 @@
dismemberment = 50
nodamage = FALSE
/obj/item/projectile/magic/spellblade/on_hit(target)
/obj/projectile/magic/spellblade/on_hit(target)
if(ismob(target))
var/mob/M = target
if(M.anti_magic_check())
@@ -350,7 +350,7 @@
return BULLET_ACT_BLOCK
. = ..()
/obj/item/projectile/magic/arcane_barrage
/obj/projectile/magic/arcane_barrage
name = "arcane bolt"
icon_state = "arcane_barrage"
damage = 20
@@ -360,7 +360,7 @@
flag = "magic"
hitsound = 'sound/weapons/barragespellhit.ogg'
/obj/item/projectile/magic/arcane_barrage/on_hit(target)
/obj/projectile/magic/arcane_barrage/on_hit(target)
if(ismob(target))
var/mob/M = target
if(M.anti_magic_check())
@@ -370,7 +370,7 @@
. = ..()
/obj/item/projectile/magic/locker
/obj/projectile/magic/locker
name = "locker bolt"
icon_state = "locker"
nodamage = TRUE
@@ -380,11 +380,11 @@
var/locker_suck = TRUE
var/obj/structure/closet/locker_temp_instance = /obj/structure/closet/decay
/obj/item/projectile/magic/locker/Initialize()
/obj/projectile/magic/locker/Initialize()
. = ..()
locker_temp_instance = new(src)
/obj/item/projectile/magic/locker/prehit(atom/A)
/obj/projectile/magic/locker/prehit(atom/A)
if(isliving(A) && locker_suck)
var/mob/living/M = A
if(M.anti_magic_check())
@@ -397,7 +397,7 @@
return FALSE
return ..()
/obj/item/projectile/magic/locker/on_hit(target)
/obj/projectile/magic/locker/on_hit(target)
if(created)
return ..()
if(LAZYLEN(contents))
@@ -408,7 +408,7 @@
created = TRUE
return ..()
/obj/item/projectile/magic/locker/Destroy()
/obj/projectile/magic/locker/Destroy()
locker_suck = FALSE
for(var/atom/movable/AM in contents)
AM.forceMove(get_turf(src))
@@ -455,11 +455,11 @@
addtimer(CALLBACK(src, .proc/decay), 15 SECONDS)
icon_welded = "welded"
/obj/item/projectile/magic/flying
/obj/projectile/magic/flying
name = "bolt of flying"
icon_state = "flight"
/obj/item/projectile/magic/flying/on_hit(target)
/obj/projectile/magic/flying/on_hit(target)
. = ..()
if(isliving(target))
var/mob/living/L = target
@@ -469,11 +469,11 @@
var/atom/throw_target = get_edge_target_turf(L, angle2dir(Angle))
L.throw_at(throw_target, 200, 4)
/obj/item/projectile/magic/bounty
/obj/projectile/magic/bounty
name = "bolt of bounty"
icon_state = "bounty"
/obj/item/projectile/magic/bounty/on_hit(target)
/obj/projectile/magic/bounty/on_hit(target)
. = ..()
if(isliving(target))
var/mob/living/L = target
@@ -482,11 +482,11 @@
return BULLET_ACT_BLOCK
L.apply_status_effect(STATUS_EFFECT_BOUNTY, firer)
/obj/item/projectile/magic/antimagic
/obj/projectile/magic/antimagic
name = "bolt of antimagic"
icon_state = "antimagic"
/obj/item/projectile/magic/antimagic/on_hit(target)
/obj/projectile/magic/antimagic/on_hit(target)
. = ..()
if(isliving(target))
var/mob/living/L = target
@@ -495,11 +495,11 @@
return BULLET_ACT_BLOCK
L.apply_status_effect(STATUS_EFFECT_ANTIMAGIC)
/obj/item/projectile/magic/fetch
/obj/projectile/magic/fetch
name = "bolt of fetching"
icon_state = "fetch"
/obj/item/projectile/magic/fetch/on_hit(target)
/obj/projectile/magic/fetch/on_hit(target)
. = ..()
if(isliving(target))
var/mob/living/L = target
@@ -509,11 +509,11 @@
var/atom/throw_target = get_edge_target_turf(L, get_dir(L, firer))
L.throw_at(throw_target, 200, 4)
/obj/item/projectile/magic/sapping
/obj/projectile/magic/sapping
name = "bolt of sapping"
icon_state = "sapping"
/obj/item/projectile/magic/sapping/on_hit(target)
/obj/projectile/magic/sapping/on_hit(target)
. = ..()
if(ismob(target))
var/mob/M = target
@@ -522,11 +522,11 @@
return BULLET_ACT_BLOCK
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, src, /datum/mood_event/sapped)
/obj/item/projectile/magic/necropotence
/obj/projectile/magic/necropotence
name = "bolt of necropotence"
icon_state = "necropotence"
/obj/item/projectile/magic/necropotence/on_hit(target)
/obj/projectile/magic/necropotence/on_hit(target)
. = ..()
if(isliving(target))
var/mob/living/L = target
@@ -544,11 +544,11 @@
spell.recharging = FALSE
spell.update_icon()
/obj/item/projectile/magic/wipe
/obj/projectile/magic/wipe
name = "bolt of possession"
icon_state = "wipe"
/obj/item/projectile/magic/wipe/on_hit(target)
/obj/projectile/magic/wipe/on_hit(target)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/M = target
@@ -563,7 +563,7 @@
possession_test(M)
return BULLET_ACT_HIT
/obj/item/projectile/magic/wipe/proc/possession_test(var/mob/living/carbon/M)
/obj/projectile/magic/wipe/proc/possession_test(var/mob/living/carbon/M)
var/datum/brain_trauma/special/imaginary_friend/trapped_owner/trauma = M.gain_trauma(/datum/brain_trauma/special/imaginary_friend/trapped_owner)
var/poll_message = "Do you want to play as [M.real_name]?"
if(M.mind && M.mind.assigned_role)
@@ -591,13 +591,13 @@
to_chat(M, "<span class='notice'>Your mind has managed to go unnoticed in the spirit world.</span>")
qdel(trauma)
/obj/item/projectile/magic/aoe
/obj/projectile/magic/aoe
name = "Area Bolt"
desc = "What the fuck does this do?!"
damage = 0
var/proxdet = TRUE
/obj/item/projectile/magic/aoe/Range()
/obj/projectile/magic/aoe/Range()
if(proxdet)
for(var/mob/living/L in range(1, get_turf(src)))
if(L.stat != DEAD && L != firer && !L.anti_magic_check())
@@ -605,7 +605,7 @@
..()
/obj/item/projectile/magic/aoe/lightning
/obj/projectile/magic/aoe/lightning
name = "lightning bolt"
icon_state = "tesla_projectile" //Better sprites are REALLY needed and appreciated!~
damage = 15
@@ -620,12 +620,12 @@
var/chain
var/mob/living/caster
/obj/item/projectile/magic/aoe/lightning/fire(setAngle)
/obj/projectile/magic/aoe/lightning/fire(setAngle)
if(caster)
chain = caster.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY)
..()
/obj/item/projectile/magic/aoe/lightning/on_hit(target)
/obj/projectile/magic/aoe/lightning/on_hit(target)
. = ..()
if(ismob(target))
var/mob/M = target
@@ -636,11 +636,11 @@
tesla_zap(src, tesla_range, tesla_power, tesla_flags)
qdel(src)
/obj/item/projectile/magic/aoe/lightning/Destroy()
/obj/projectile/magic/aoe/lightning/Destroy()
qdel(chain)
. = ..()
/obj/item/projectile/magic/aoe/fireball
/obj/projectile/magic/aoe/fireball
name = "bolt of fireball"
icon_state = "fireball"
damage = 10
@@ -653,7 +653,7 @@
var/exp_flash = 3
var/exp_fire = 2
/obj/item/projectile/magic/aoe/fireball/on_hit(target)
/obj/projectile/magic/aoe/fireball/on_hit(target)
. = ..()
if(ismob(target))
var/mob/living/M = target
@@ -664,14 +664,14 @@
var/turf/T = get_turf(target)
explosion(T, -1, exp_heavy, exp_light, exp_flash, 0, flame_range = exp_fire)
/obj/item/projectile/magic/aoe/fireball/infernal
/obj/projectile/magic/aoe/fireball/infernal
name = "infernal fireball"
exp_heavy = -1
exp_light = -1
exp_flash = 4
exp_fire= 5
/obj/item/projectile/magic/aoe/fireball/infernal/on_hit(target)
/obj/projectile/magic/aoe/fireball/infernal/on_hit(target)
. = ..()
if(ismob(target))
var/mob/living/M = target
@@ -683,7 +683,7 @@
//still magic related, but a different path
/obj/item/projectile/temp/chill
/obj/projectile/temp/chill
name = "bolt of chills"
icon_state = "ice_2"
damage = 0
@@ -1,4 +1,4 @@
/obj/item/projectile/spellcard
/obj/projectile/spellcard
name = "enchanted card"
desc = "A piece of paper enchanted to give it extreme durability and stiffness, along with a very hot burn to anyone unfortunate enough to get hit by a charged one."
icon_state = "spellcard"
@@ -1,19 +1,19 @@
/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 = FALSE
impact_effect_type = null
/obj/item/projectile/bullet/reusable/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/reusable/on_hit(atom/target, blocked = FALSE)
. = ..()
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)
var/turf/T = get_turf(src)
new ammo_type(T)
@@ -1,4 +1,4 @@
/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.
@@ -11,14 +11,14 @@
var/modified = FALSE
var/obj/item/pen/pen = null
/obj/item/projectile/bullet/reusable/foam_dart/handle_drop()
/obj/projectile/bullet/reusable/foam_dart/handle_drop()
if(dropped)
return
var/turf/T = get_turf(src)
dropped = 1
var/obj/item/ammo_casing/caseless/foam_dart/newcasing = new ammo_type(T)
newcasing.modified = modified
var/obj/item/projectile/bullet/reusable/foam_dart/newdart = newcasing.BB
var/obj/projectile/bullet/reusable/foam_dart/newdart = newcasing.BB
newdart.modified = modified
newdart.damage = damage
newdart.nodamage = nodamage
@@ -30,11 +30,11 @@
newdart.update_icon()
/obj/item/projectile/bullet/reusable/foam_dart/Destroy()
/obj/projectile/bullet/reusable/foam_dart/Destroy()
pen = null
return ..()
/obj/item/projectile/bullet/reusable/foam_dart/riot
/obj/projectile/bullet/reusable/foam_dart/riot
name = "riot foam dart"
icon_state = "foamdart_riot_proj"
ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
@@ -2,7 +2,7 @@
name = "curse arm"
layer = LARGE_MOB_LAYER
/obj/item/projectile/curse_hand
/obj/projectile/curse_hand
name = "curse hand"
icon_state = "cursehand0"
hitsound = 'sound/effects/curse4.ogg'
@@ -15,25 +15,25 @@
var/datum/beam/arm
var/handedness = 0
/obj/item/projectile/curse_hand/Initialize(mapload)
/obj/projectile/curse_hand/Initialize(mapload)
. = ..()
ENABLE_BITFIELD(movement_type, UNSTOPPABLE)
handedness = prob(50)
icon_state = "cursehand[handedness]"
/obj/item/projectile/curse_hand/fire(setAngle)
/obj/projectile/curse_hand/fire(setAngle)
if(starting)
arm = starting.Beam(src, icon_state = "curse[handedness]", time = INFINITY, maxdistance = INFINITY, beam_type=/obj/effect/ebeam/curse_arm)
..()
/obj/item/projectile/curse_hand/prehit(atom/target)
/obj/projectile/curse_hand/prehit(atom/target)
if(target == original)
DISABLE_BITFIELD(movement_type, UNSTOPPABLE)
else if(!isturf(target))
return FALSE
return ..()
/obj/item/projectile/curse_hand/Destroy()
/obj/projectile/curse_hand/Destroy()
if(arm)
arm.End()
arm = null
@@ -1,4 +1,4 @@
/obj/item/projectile/energy/floramut
/obj/projectile/energy/floramut
name = "alpha somatoray"
icon_state = "energy"
damage = 0
@@ -6,7 +6,7 @@
nodamage = TRUE
flag = "energy"
/obj/item/projectile/energy/florayield
/obj/projectile/energy/florayield
name = "beta somatoray"
icon_state = "energy2"
damage = 0
@@ -1,4 +1,4 @@
/obj/item/projectile/gravityrepulse
/obj/projectile/gravityrepulse
name = "repulsion bolt"
icon = 'icons/effects/effects.dmi'
icon_state = "chronofield"
@@ -11,13 +11,13 @@
var/power = 4
var/list/thrown_items = list()
/obj/item/projectile/gravityrepulse/Initialize()
/obj/projectile/gravityrepulse/Initialize()
. = ..()
var/obj/item/ammo_casing/energy/gravity/repulse/C = loc
if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items
power = min(C.gun.power, 15)
/obj/item/projectile/gravityrepulse/on_hit()
/obj/projectile/gravityrepulse/on_hit()
. = ..()
T = get_turf(src)
for(var/atom/movable/A in range(T, power))
@@ -33,7 +33,7 @@
for(var/turf/F in range(T,power))
new /obj/effect/temp_visual/gravpush(F)
/obj/item/projectile/gravityattract
/obj/projectile/gravityattract
name = "attraction bolt"
icon = 'icons/effects/effects.dmi'
icon_state = "chronofield"
@@ -46,13 +46,13 @@
var/power = 4
var/list/thrown_items = list()
/obj/item/projectile/gravityattract/Initialize()
/obj/projectile/gravityattract/Initialize()
. = ..()
var/obj/item/ammo_casing/energy/gravity/attract/C = loc
if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items
power = min(C.gun.power, 15)
/obj/item/projectile/gravityattract/on_hit()
/obj/projectile/gravityattract/on_hit()
. = ..()
T = get_turf(src)
for(var/atom/movable/A in range(T, power))
@@ -67,7 +67,7 @@
for(var/turf/F in range(T,power))
new /obj/effect/temp_visual/gravpush(F)
/obj/item/projectile/gravitychaos
/obj/projectile/gravitychaos
name = "gravitational blast"
icon = 'icons/effects/effects.dmi'
icon_state = "chronofield"
@@ -80,13 +80,13 @@
var/power = 4
var/list/thrown_items = list()
/obj/item/projectile/gravitychaos/Initialize()
/obj/projectile/gravitychaos/Initialize()
. = ..()
var/obj/item/ammo_casing/energy/gravity/chaos/C = loc
if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items
power = min(C.gun.power, 15)
/obj/item/projectile/gravitychaos/on_hit()
/obj/projectile/gravitychaos/on_hit()
. = ..()
T = get_turf(src)
for(var/atom/movable/A in range(T, power))
@@ -1,4 +1,4 @@
/obj/item/projectile/hallucination
/obj/projectile/hallucination
name = "bullet"
icon = null
icon_state = null
@@ -8,7 +8,7 @@
ricochet_chance = 0
damage = 0
nodamage = TRUE
projectile_type = /obj/item/projectile/hallucination
projectile_type = /obj/projectile/hallucination
log_override = TRUE
var/hal_icon_state
var/image/fake_icon
@@ -21,19 +21,19 @@
var/hit_duration
var/hit_duration_wall
/obj/item/projectile/hallucination/fire()
/obj/projectile/hallucination/fire()
..()
fake_icon = image('icons/obj/projectiles.dmi', src, hal_icon_state, ABOVE_MOB_LAYER)
if(hal_target.client)
hal_target.client.images += fake_icon
/obj/item/projectile/hallucination/Destroy()
/obj/projectile/hallucination/Destroy()
if(hal_target.client)
hal_target.client.images -= fake_icon
QDEL_NULL(fake_icon)
return ..()
/obj/item/projectile/hallucination/Bump(atom/A)
/obj/projectile/hallucination/Bump(atom/A)
if(!ismob(A))
if(hal_hitsound_wall)
hal_target.playsound_local(loc, hal_hitsound_wall, 40, 1)
@@ -46,7 +46,7 @@
qdel(src)
return TRUE
/obj/item/projectile/hallucination/proc/target_on_hit(mob/M)
/obj/projectile/hallucination/proc/target_on_hit(mob/M)
if(M == hal_target)
to_chat(hal_target, "<span class='userdanger'>[M] is hit by \a [src] in the chest!</span>")
hal_apply_effect()
@@ -60,7 +60,7 @@
else if(hal_impact_effect)
spawn_hit(M, FALSE)
/obj/item/projectile/hallucination/proc/spawn_blood(mob/M, set_dir)
/obj/projectile/hallucination/proc/spawn_blood(mob/M, set_dir)
set waitfor = 0
if(!hal_target.client)
return
@@ -102,11 +102,11 @@
animate(blood, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = 5)
addtimer(CALLBACK(src, .proc/cleanup_blood), 5)
/obj/item/projectile/hallucination/proc/cleanup_blood(image/blood)
/obj/projectile/hallucination/proc/cleanup_blood(image/blood)
hal_target.client.images -= blood
qdel(blood)
/obj/item/projectile/hallucination/proc/spawn_hit(atom/A, is_wall)
/obj/projectile/hallucination/proc/spawn_hit(atom/A, is_wall)
set waitfor = 0
if(!hal_target.client)
return
@@ -120,10 +120,10 @@
qdel(hit_effect)
/obj/item/projectile/hallucination/proc/hal_apply_effect()
/obj/projectile/hallucination/proc/hal_apply_effect()
return
/obj/item/projectile/hallucination/bullet
/obj/projectile/hallucination/bullet
name = "bullet"
hal_icon_state = "bullet"
hal_fire_sound = "gunshot"
@@ -134,10 +134,10 @@
hit_duration = 5
hit_duration_wall = 5
/obj/item/projectile/hallucination/bullet/hal_apply_effect()
/obj/projectile/hallucination/bullet/hal_apply_effect()
hal_target.adjustStaminaLoss(60)
/obj/item/projectile/hallucination/laser
/obj/projectile/hallucination/laser
name = "laser"
damage_type = BURN
hal_icon_state = "laser"
@@ -150,11 +150,11 @@
hit_duration_wall = 10
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
/obj/item/projectile/hallucination/laser/hal_apply_effect()
/obj/projectile/hallucination/laser/hal_apply_effect()
hal_target.adjustStaminaLoss(20)
hal_target.blur_eyes(2)
/obj/item/projectile/hallucination/taser
/obj/projectile/hallucination/taser
name = "electrode"
damage_type = BURN
hal_icon_state = "spark"
@@ -165,7 +165,7 @@
hal_impact_effect = null
hal_impact_effect_wall = null
/obj/item/projectile/hallucination/taser/hal_apply_effect()
/obj/projectile/hallucination/taser/hal_apply_effect()
hal_target.Paralyze(100)
hal_target.stuttering += 20
if(hal_target.dna && hal_target.dna.check_mutation(HULK))
@@ -173,7 +173,7 @@
else if((hal_target.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(hal_target, TRAIT_STUNIMMUNE))
addtimer(CALLBACK(hal_target, /mob/living/carbon.proc/do_jitter_animation, 20), 5)
/obj/item/projectile/hallucination/disabler
/obj/projectile/hallucination/disabler
name = "disabler beam"
damage_type = STAMINA
hal_icon_state = "omnilaser"
@@ -185,10 +185,10 @@
hit_duration = 4
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
/obj/item/projectile/hallucination/disabler/hal_apply_effect()
/obj/projectile/hallucination/disabler/hal_apply_effect()
hal_target.adjustStaminaLoss(25)
/obj/item/projectile/hallucination/ebow
/obj/projectile/hallucination/ebow
name = "bolt"
damage_type = TOX
hal_icon_state = "cbbolt"
@@ -198,12 +198,12 @@
hal_impact_effect = null
hal_impact_effect_wall = null
/obj/item/projectile/hallucination/ebow/hal_apply_effect()
/obj/projectile/hallucination/ebow/hal_apply_effect()
hal_target.Paralyze(100)
hal_target.stuttering += 5
hal_target.adjustStaminaLoss(8)
/obj/item/projectile/hallucination/change
/obj/projectile/hallucination/change
name = "bolt of change"
damage_type = BURN
hal_icon_state = "ice_1"
@@ -213,10 +213,10 @@
hal_impact_effect = null
hal_impact_effect_wall = null
/obj/item/projectile/hallucination/change/hal_apply_effect()
/obj/projectile/hallucination/change/hal_apply_effect()
new /datum/hallucination/self_delusion(hal_target, TRUE, wabbajack = FALSE)
/obj/item/projectile/hallucination/death
/obj/projectile/hallucination/death
name = "bolt of death"
damage_type = BURN
hal_icon_state = "pulse1_bl"
@@ -226,5 +226,5 @@
hal_impact_effect = null
hal_impact_effect_wall = null
/obj/item/projectile/hallucination/death/hal_apply_effect()
/obj/projectile/hallucination/death/hal_apply_effect()
new /datum/hallucination/death(hal_target, TRUE)
@@ -1,4 +1,4 @@
/obj/item/projectile/ion
/obj/projectile/ion
name = "ion bolt"
icon_state = "ion"
damage = 0
@@ -8,10 +8,10 @@
impact_effect_type = /obj/effect/temp_visual/impact_effect/ion
var/emp_radius = 1
/obj/item/projectile/ion/on_hit(atom/target, blocked = FALSE)
/obj/projectile/ion/on_hit(atom/target, blocked = FALSE)
..()
empulse(target, emp_radius, emp_radius)
return BULLET_ACT_HIT
/obj/item/projectile/ion/weak
/obj/projectile/ion/weak
emp_radius = 0
@@ -1,4 +1,4 @@
/obj/item/projectile/meteor
/obj/projectile/meteor
name = "meteor"
icon = 'icons/obj/meteor.dmi'
icon_state = "small1"
@@ -7,7 +7,7 @@
nodamage = TRUE
flag = "bullet"
/obj/item/projectile/meteor/Bump(atom/A)
/obj/projectile/meteor/Bump(atom/A)
if(A == firer)
forceMove(A.loc)
return
@@ -1,7 +1,7 @@
/obj/item/projectile/beam/mindflayer
/obj/projectile/beam/mindflayer
name = "flayer ray"
/obj/item/projectile/beam/mindflayer/on_hit(atom/target, blocked = FALSE)
/obj/projectile/beam/mindflayer/on_hit(atom/target, blocked = FALSE)
. = ..()
if(ishuman(target))
var/mob/living/carbon/human/M = target
@@ -1,11 +1,11 @@
/obj/item/projectile/bullet/neurotoxin
/obj/projectile/bullet/neurotoxin
name = "neurotoxin spit"
icon_state = "neurotoxin"
damage = 5
damage_type = TOX
paralyze = 100
/obj/item/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = FALSE)
if(isalien(target))
paralyze = 0
nodamage = TRUE
@@ -1,4 +1,4 @@
/obj/item/projectile/plasma
/obj/projectile/plasma
name = "plasma blast"
icon_state = "plasmacutter"
damage_type = BRUTE
@@ -11,7 +11,7 @@
muzzle_type = /obj/effect/projectile/muzzle/plasma_cutter
impact_type = /obj/effect/projectile/impact/plasma_cutter
/obj/item/projectile/plasma/on_hit(atom/target)
/obj/projectile/plasma/on_hit(atom/target)
. = ..()
if(ismineralturf(target))
var/turf/closed/mineral/M = target
@@ -22,17 +22,17 @@
if(range > 0)
return BULLET_ACT_FORCE_PIERCE
/obj/item/projectile/plasma/adv
/obj/projectile/plasma/adv
damage = 7
range = 5
mine_range = 5
/obj/item/projectile/plasma/adv/mech
/obj/projectile/plasma/adv/mech
damage = 10
range = 9
mine_range = 3
/obj/item/projectile/plasma/turret
/obj/projectile/plasma/turret
//Between normal and advanced for damage, made a beam so not the turret does not destroy glass
name = "plasma beam"
damage = 24
@@ -1,14 +1,14 @@
/obj/item/projectile/bullet/gyro
/obj/projectile/bullet/gyro
name ="explosive bolt"
icon_state= "bolter"
damage = 50
/obj/item/projectile/bullet/gyro/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/gyro/on_hit(atom/target, blocked = FALSE)
..()
explosion(target, -1, 0, 2)
return BULLET_ACT_HIT
/obj/item/projectile/bullet/a84mm
/obj/projectile/bullet/a84mm
name ="\improper HEDP rocket"
desc = "USE A WEEL GUN"
icon_state= "84mm-hedp"
@@ -17,7 +17,7 @@
armour_penetration = 100
dismemberment = 100
/obj/item/projectile/bullet/a84mm/on_hit(atom/target, blocked = FALSE)
/obj/projectile/bullet/a84mm/on_hit(atom/target, blocked = FALSE)
..()
explosion(target, -1, 1, 3, 1, 0, flame_range = 4)
@@ -29,14 +29,14 @@
S.take_overall_damage(anti_armour_damage*0.75, anti_armour_damage*0.25)
return BULLET_ACT_HIT
/obj/item/projectile/bullet/a84mm_he
/obj/projectile/bullet/a84mm_he
name ="\improper HE missile"
desc = "Boom."
icon_state = "missile"
damage = 30
ricochets_max = 0 //it's a MISSILE
/obj/item/projectile/bullet/a84mm_he/on_hit(atom/target, blocked=0)
/obj/projectile/bullet/a84mm_he/on_hit(atom/target, blocked=0)
..()
if(!isliving(target)) //if the target isn't alive, so is a wall or something
explosion(target, 0, 1, 2, 4)
@@ -44,7 +44,7 @@
explosion(target, 0, 0, 2, 4)
return BULLET_ACT_HIT
/obj/item/projectile/bullet/a84mm_br
/obj/projectile/bullet/a84mm_br
name ="\improper HE missile"
desc = "Boom."
icon_state = "missile"
@@ -65,7 +65,7 @@
w_class = WEIGHT_CLASS_TINY
/obj/item/projectile/bullet/a84mm_br/on_hit(atom/target, blocked=0)
/obj/projectile/bullet/a84mm_br/on_hit(atom/target, blocked=0)
..()
for(var/i in sturdy)
if(istype(target, i))
@@ -1,4 +1,4 @@
/obj/item/projectile/temp
/obj/projectile/temp
name = "freeze beam"
icon_state = "ice_2"
damage = 0
@@ -7,21 +7,21 @@
flag = "energy"
var/temperature = 100
/obj/item/projectile/temp/on_hit(atom/target, blocked = 0)
/obj/projectile/temp/on_hit(atom/target, blocked = 0)
. = ..()
if(isliving(target))
var/mob/living/L = target
L.adjust_bodytemperature(((100-blocked)/100)*(temperature - L.bodytemperature)) // the new body temperature is adjusted by 100-blocked % of the delta between body temperature and the bullet's effect temperature
/obj/item/projectile/temp/hot
/obj/projectile/temp/hot
name = "heat beam"
temperature = 400
/obj/item/projectile/temp/cryo
/obj/projectile/temp/cryo
name = "cryo beam"
range = 3
/obj/item/projectile/temp/cryo/on_range()
/obj/projectile/temp/cryo/on_range()
var/turf/T = get_turf(src)
if(isopenturf(T))
var/turf/open/O = T
@@ -1,4 +1,4 @@
/obj/item/projectile/beam/wormhole
/obj/projectile/beam/wormhole
name = "bluespace beam"
icon_state = "spark"
hitsound = "sparks"
@@ -12,18 +12,18 @@
muzzle_type = /obj/effect/projectile/muzzle/wormhole
hitscan = TRUE
/obj/item/projectile/beam/wormhole/orange
/obj/projectile/beam/wormhole/orange
name = "orange bluespace beam"
color = "#FF6600"
/obj/item/projectile/beam/wormhole/Initialize(mapload, obj/item/ammo_casing/energy/wormhole/casing)
/obj/projectile/beam/wormhole/Initialize(mapload, obj/item/ammo_casing/energy/wormhole/casing)
. = ..()
if(casing)
gun = casing.gun
/obj/item/projectile/beam/wormhole/on_hit(atom/target)
/obj/projectile/beam/wormhole/on_hit(atom/target)
if(!gun)
qdel(src)
return
return
gun.create_portal(src, get_turf(src))