mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-27 05:57:24 +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:
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/projectile/ion
|
||||
/obj/projectile/ion
|
||||
name = "ion bolt"
|
||||
icon_state = "ion"
|
||||
damage = 0
|
||||
@@ -10,38 +10,38 @@
|
||||
var/strong_emp = 1
|
||||
var/weak_emp = 1
|
||||
|
||||
/obj/item/projectile/ion/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/ion/on_hit(atom/target, blocked = 0)
|
||||
..()
|
||||
empulse(target, strong_emp, weak_emp, TRUE, cause = "[type] fired by [key_name(firer)]")
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/ion/weak
|
||||
/obj/projectile/ion/weak
|
||||
strong_emp = -1
|
||||
weak_emp = 0
|
||||
|
||||
/obj/item/projectile/bullet/gyro
|
||||
/obj/projectile/bullet/gyro
|
||||
name ="explosive bolt"
|
||||
icon_state= "bolter"
|
||||
damage = 50
|
||||
alwayslog = TRUE
|
||||
|
||||
/obj/item/projectile/bullet/gyro/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/gyro/on_hit(atom/target, blocked = 0)
|
||||
..()
|
||||
explosion(target, -1, 0, 2, cause = "[type] fired by [key_name(firer)]")
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/bullet/a40mm
|
||||
/obj/projectile/bullet/a40mm
|
||||
name ="40mm grenade"
|
||||
desc = "USE A WEEL GUN."
|
||||
icon_state= "bolter"
|
||||
alwayslog = TRUE
|
||||
|
||||
/obj/item/projectile/bullet/a40mm/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/a40mm/on_hit(atom/target, blocked = 0)
|
||||
..()
|
||||
explosion(target, -1, 0, 2, 1, 0, flame_range = 3, cause = "[type] fired by [key_name(firer)]")
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/temp
|
||||
/obj/projectile/temp
|
||||
name = "temperature beam"
|
||||
icon_state = "temp_4"
|
||||
damage = 0
|
||||
@@ -51,7 +51,7 @@
|
||||
var/temperature = 300
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
|
||||
/obj/item/projectile/temp/New(loc, shot_temp)
|
||||
/obj/projectile/temp/New(loc, shot_temp)
|
||||
..()
|
||||
if(!isnull(shot_temp))
|
||||
temperature = shot_temp
|
||||
@@ -88,7 +88,7 @@
|
||||
icon_state = "temp_4"
|
||||
|
||||
|
||||
/obj/item/projectile/temp/on_hit(atom/target, blocked = 0)//These two could likely check temp protection on the mob
|
||||
/obj/projectile/temp/on_hit(atom/target, blocked = 0)//These two could likely check temp protection on the mob
|
||||
..()
|
||||
if(isliving(target))
|
||||
var/mob/living/M = target
|
||||
@@ -99,14 +99,14 @@
|
||||
playsound(M.loc, 'sound/effects/bamf.ogg', 50, 0)
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/meteor
|
||||
/obj/projectile/meteor
|
||||
name = "meteor"
|
||||
icon = 'icons/obj/meteor.dmi'
|
||||
icon_state = "small"
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
|
||||
/obj/item/projectile/meteor/Bump(atom/A)
|
||||
/obj/projectile/meteor/Bump(atom/A)
|
||||
if(A == firer)
|
||||
loc = A.loc
|
||||
return
|
||||
@@ -116,14 +116,14 @@
|
||||
shake_camera(M, 3, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/missile
|
||||
/obj/projectile/missile
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "missile"
|
||||
damage = 50
|
||||
///If the missile will have a heavy, or light explosion.
|
||||
var/heavy = TRUE
|
||||
|
||||
/obj/item/projectile/missile/on_hit(atom/target, blocked, hit_zone)
|
||||
/obj/projectile/missile/on_hit(atom/target, blocked, hit_zone)
|
||||
..()
|
||||
if(heavy)
|
||||
explosion(target, 1, 2, 3, cause = "[type] fired by [key_name(firer)]")
|
||||
@@ -131,47 +131,47 @@
|
||||
explosion(target, -1, 0, 2, cause = "[type] fired by [key_name(firer)]")
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/missile/light
|
||||
/obj/projectile/missile/light
|
||||
damage = 15
|
||||
heavy = FALSE
|
||||
|
||||
/obj/item/projectile/energy/floramut
|
||||
/obj/projectile/energy/floramut
|
||||
name = "alpha somatoray"
|
||||
icon_state = "energy"
|
||||
damage_type = TOX
|
||||
nodamage = TRUE
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
||||
|
||||
/obj/item/projectile/energy/florayield
|
||||
/obj/projectile/energy/florayield
|
||||
name = "beta somatoray"
|
||||
icon_state = "energy2"
|
||||
damage_type = TOX
|
||||
nodamage = TRUE
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
||||
|
||||
/obj/item/projectile/energy/mindflayer
|
||||
/obj/projectile/energy/mindflayer
|
||||
name = "flayer ray"
|
||||
|
||||
/obj/item/projectile/energy/mindflayer/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/energy/mindflayer/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
M.adjustBrainLoss(20)
|
||||
M.AdjustHallucinate(20 SECONDS)
|
||||
|
||||
/obj/item/projectile/clown
|
||||
/obj/projectile/clown
|
||||
name = "snap-pop"
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "snappop"
|
||||
|
||||
/obj/item/projectile/clown/Bump(atom/A as mob|obj|turf|area)
|
||||
/obj/projectile/clown/Bump(atom/A as mob|obj|turf|area)
|
||||
do_sparks(3, 1, src)
|
||||
new /obj/effect/decal/cleanable/ash(loc)
|
||||
visible_message("<span class='warning'>[src] explodes!</span>","<span class='warning'>You hear a snap!</span>")
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/beam/wormhole
|
||||
/obj/projectile/beam/wormhole
|
||||
name = "wormhole beam"
|
||||
icon_state = "spark"
|
||||
hitsound = "sparks"
|
||||
@@ -180,16 +180,16 @@
|
||||
color = "#33CCFF"
|
||||
nodamage = TRUE
|
||||
|
||||
/obj/item/projectile/beam/wormhole/orange
|
||||
/obj/projectile/beam/wormhole/orange
|
||||
name = "orange wormhole beam"
|
||||
color = "#FF6600"
|
||||
|
||||
/obj/item/projectile/beam/wormhole/New(obj/item/ammo_casing/energy/wormhole/casing)
|
||||
/obj/projectile/beam/wormhole/New(obj/item/ammo_casing/energy/wormhole/casing)
|
||||
..()
|
||||
if(istype(casing))
|
||||
gun = casing.gun
|
||||
|
||||
/obj/item/projectile/beam/wormhole/on_hit(atom/target)
|
||||
/obj/projectile/beam/wormhole/on_hit(atom/target)
|
||||
if(ismob(target))
|
||||
if(is_teleport_allowed(target.z))
|
||||
var/turf/portal_destination = pick(orange(6, src))
|
||||
@@ -199,30 +199,30 @@
|
||||
qdel(src)
|
||||
gun.create_portal(src)
|
||||
|
||||
/obj/item/projectile/bullet/frag12
|
||||
/obj/projectile/bullet/frag12
|
||||
name ="explosive slug"
|
||||
damage = 15
|
||||
alwayslog = TRUE
|
||||
|
||||
/obj/item/projectile/bullet/frag12/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/bullet/frag12/on_hit(atom/target, blocked = 0)
|
||||
..()
|
||||
explosion(target, -1, 0, 1, cause = "frag 12 fired by [key_name(firer)]")
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/bullet/confetti
|
||||
/obj/projectile/bullet/confetti
|
||||
name = "confetti shot"
|
||||
damage = 0
|
||||
range = 3
|
||||
|
||||
/obj/item/projectile/bullet/confetti/on_range()
|
||||
/obj/projectile/bullet/confetti/on_range()
|
||||
confettisize(src, 7, 3)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/bullet/confetti/on_hit(atom/target, blocked, hit_zone)
|
||||
/obj/projectile/bullet/confetti/on_hit(atom/target, blocked, hit_zone)
|
||||
confettisize(src, 7, 3)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/plasma
|
||||
/obj/projectile/plasma
|
||||
name = "plasma blast"
|
||||
icon_state = "plasmacutter"
|
||||
damage = 5
|
||||
@@ -243,14 +243,14 @@
|
||||
impact_light_range = 2.5
|
||||
impact_light_color_override = LIGHT_COLOR_CYAN
|
||||
|
||||
/obj/item/projectile/plasma/prehit(atom/target)
|
||||
/obj/projectile/plasma/prehit(atom/target)
|
||||
. = ..()
|
||||
if(!lavaland_equipment_pressure_check(get_turf(target)))
|
||||
name = "weakened [name]"
|
||||
dismemberment = 0
|
||||
sharp = FALSE
|
||||
|
||||
/obj/item/projectile/plasma/on_hit(atom/target)
|
||||
/obj/projectile/plasma/on_hit(atom/target)
|
||||
. = ..()
|
||||
if(ismineralturf(target))
|
||||
if(is_ancient_rock(target))
|
||||
@@ -263,27 +263,27 @@
|
||||
else
|
||||
forcedodge = 0
|
||||
|
||||
/obj/item/projectile/plasma/adv
|
||||
/obj/projectile/plasma/adv
|
||||
damage = 7
|
||||
range = 5
|
||||
|
||||
/obj/item/projectile/plasma/adv/mech
|
||||
/obj/projectile/plasma/adv/mech
|
||||
damage = 10
|
||||
range = 9
|
||||
|
||||
/obj/item/projectile/energy/teleport
|
||||
/obj/projectile/energy/teleport
|
||||
name = "teleportation burst"
|
||||
icon_state = "bluespace"
|
||||
nodamage = 1
|
||||
alwayslog = TRUE
|
||||
var/obj/item/beacon/teleport_target
|
||||
|
||||
/obj/item/projectile/energy/teleport/New(loc, tele_target)
|
||||
/obj/projectile/energy/teleport/New(loc, tele_target)
|
||||
..(loc)
|
||||
if(tele_target)
|
||||
teleport_target = tele_target
|
||||
|
||||
/obj/item/projectile/energy/teleport/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/energy/teleport/on_hit(atom/target, blocked = 0)
|
||||
var/turf/target_turf = get_turf(teleport_target)
|
||||
if(isliving(target))
|
||||
if(istype(target_turf) && (target_turf.z == target.z || teleport_target.emagged))
|
||||
@@ -293,13 +293,13 @@
|
||||
add_attack_logs(firer, target, "Shot with a [type] [teleport_target ? "(Destination: [teleport_target])" : ""]")
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/energy/demonic_grappler
|
||||
/obj/projectile/energy/demonic_grappler
|
||||
name = "demonic grappler"
|
||||
icon_state = "bluespace"
|
||||
nodamage = 1
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
|
||||
/obj/item/projectile/energy/demonic_grappler/on_hit(atom/target, blocked = 0)
|
||||
/obj/projectile/energy/demonic_grappler/on_hit(atom/target, blocked = 0)
|
||||
if(isliving(target))
|
||||
var/turf/source_turf = get_turf(firer)
|
||||
do_teleport(target, source_turf)
|
||||
@@ -308,31 +308,31 @@
|
||||
do_teleport(firer, miss_turf)
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/snowball
|
||||
/obj/projectile/snowball
|
||||
name = "snowball"
|
||||
icon_state = "snowball"
|
||||
hitsound = 'sound/items/dodgeball.ogg'
|
||||
damage = 4
|
||||
damage_type = BURN
|
||||
|
||||
/obj/item/projectile/snowball/on_hit(atom/target) //chilling
|
||||
/obj/projectile/snowball/on_hit(atom/target) //chilling
|
||||
. = ..()
|
||||
if(isliving(target))
|
||||
var/mob/living/M = target
|
||||
M.bodytemperature = max(0, M.bodytemperature - 50) //each hit will drop your body temp, so don't get surrounded!
|
||||
M.ExtinguishMob() //bright side, they counter being on fire!
|
||||
|
||||
/obj/item/projectile/ornament
|
||||
/obj/projectile/ornament
|
||||
name = "ornament"
|
||||
icon_state = "ornament-1"
|
||||
hitsound = 'sound/effects/glasshit.ogg'
|
||||
damage = 7
|
||||
|
||||
/obj/item/projectile/ornament/New()
|
||||
/obj/projectile/ornament/New()
|
||||
icon_state = pick("ornament-1", "ornament-2")
|
||||
..()
|
||||
|
||||
/obj/item/projectile/ornament/on_hit(atom/target) //knockback
|
||||
/obj/projectile/ornament/on_hit(atom/target) //knockback
|
||||
..()
|
||||
if(isturf(target))
|
||||
return 0
|
||||
@@ -341,7 +341,7 @@
|
||||
T.throw_at(get_edge_target_turf(target, throwdir),10,10)
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/mimic
|
||||
/obj/projectile/mimic
|
||||
name = "googly-eyed gun"
|
||||
hitsound = 'sound/weapons/genhit1.ogg'
|
||||
damage = 0
|
||||
@@ -350,7 +350,7 @@
|
||||
flag = "melee"
|
||||
var/obj/item/gun/stored_gun
|
||||
|
||||
/obj/item/projectile/mimic/New(loc, mimic_type)
|
||||
/obj/projectile/mimic/New(loc, mimic_type)
|
||||
..(loc)
|
||||
if(mimic_type)
|
||||
stored_gun = new mimic_type(src)
|
||||
@@ -359,7 +359,7 @@
|
||||
overlays = stored_gun.overlays
|
||||
SpinAnimation(20, -1)
|
||||
|
||||
/obj/item/projectile/mimic/on_hit(atom/target)
|
||||
/obj/projectile/mimic/on_hit(atom/target)
|
||||
..()
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/item/gun/G = stored_gun
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/projectile/neurotox
|
||||
/obj/projectile/neurotox
|
||||
name = "neurotoxin"
|
||||
damage = 30
|
||||
icon_state = "toxin"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/// How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers.
|
||||
#define MUZZLE_EFFECT_PIXEL_INCREMENT 17
|
||||
|
||||
/obj/item/projectile
|
||||
/obj/projectile
|
||||
name = "projectile"
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "bullet"
|
||||
@@ -11,7 +11,15 @@
|
||||
anchored = TRUE //There's a reason this is here, Mport. God fucking damn it -Agouri. Find&Fix by Pete. The reason this is here is to stop the curving of emitter shots.
|
||||
flags = ABSTRACT
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
hitsound = 'sound/weapons/pierce.ogg'
|
||||
blocks_emissive = EMISSIVE_BLOCK_GENERIC
|
||||
pass_flags = PASSTABLE
|
||||
animate_movement = NO_STEPS
|
||||
/// Flat armor reduction, occurs after percentage armor penetration.
|
||||
var/armor_penetration_flat
|
||||
/// Percentage armor reduction, happens before flat armor reduction.
|
||||
var/armor_penetration_percentage
|
||||
/// Hit sound to play when we hit something
|
||||
var/hitsound = 'sound/weapons/pierce.ogg'
|
||||
var/hitsound_wall = ""
|
||||
var/def_zone = "" //Aiming at
|
||||
var/mob/firer = null//Who shot it
|
||||
@@ -31,7 +39,6 @@
|
||||
var/Angle = null
|
||||
var/original_angle = null //Angle at firing
|
||||
var/spread = 0 //amount (in degrees) of projectile spread
|
||||
animate_movement = NO_STEPS
|
||||
|
||||
var/ignore_source_check = FALSE
|
||||
|
||||
@@ -41,7 +48,7 @@
|
||||
var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here
|
||||
var/nodamage = FALSE //Determines if the projectile will skip any damage inflictions
|
||||
var/flag = BULLET //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb //Cael - bio and rad are also valid
|
||||
var/projectile_type = "/obj/item/projectile"
|
||||
var/projectile_type = "/obj/projectile"
|
||||
var/range = 50 //This will de-increment every step. When 0, it will delete the projectile.
|
||||
/// Determines the reflectability level of a projectile, either REFLECTABILITY_NEVER, REFLECTABILITY_PHYSICAL, REFLECTABILITY_ENERGY in order of ease to reflect.
|
||||
var/reflectability = REFLECTABILITY_PHYSICAL
|
||||
@@ -138,17 +145,17 @@
|
||||
/// determines the drain cost on the antimagic item
|
||||
var/antimagic_charge_cost
|
||||
|
||||
/obj/item/projectile/New()
|
||||
/obj/projectile/New()
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/Initialize(mapload)
|
||||
/obj/projectile/Initialize(mapload)
|
||||
. = ..()
|
||||
var/static/list/loc_connections = list(
|
||||
COMSIG_ATOM_ENTERED = PROC_REF(on_atom_entered)
|
||||
)
|
||||
AddElement(/datum/element/connect_loc, loc_connections)
|
||||
|
||||
/obj/item/projectile/proc/Range()
|
||||
/obj/projectile/proc/Range()
|
||||
range--
|
||||
if(damage && tile_dropoff)
|
||||
damage = max(0, damage - tile_dropoff) // decrement projectile damage based on dropoff value for each tile it moves
|
||||
@@ -159,10 +166,10 @@
|
||||
if(!damage && !stamina && (tile_dropoff || tile_dropoff_s))
|
||||
on_range()
|
||||
|
||||
/obj/item/projectile/proc/on_range() //if we want there to be effects when they reach the end of their range
|
||||
/obj/projectile/proc/on_range() //if we want there to be effects when they reach the end of their range
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/proc/prehit(atom/target)
|
||||
/obj/projectile/proc/prehit(atom/target)
|
||||
if(isliving(target))
|
||||
var/mob/living/victim = target
|
||||
if(victim.can_block_magic(antimagic_flags, antimagic_charge_cost))
|
||||
@@ -172,7 +179,7 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/proc/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
/obj/projectile/proc/on_hit(atom/target, blocked = 0, hit_zone)
|
||||
var/turf/target_loca = get_turf(target)
|
||||
var/hitx
|
||||
var/hity
|
||||
@@ -263,7 +270,7 @@
|
||||
|
||||
return were_affects_applied
|
||||
|
||||
/obj/item/projectile/proc/get_splatter_blockage(turf/step_over, atom/target, splatter_dir, target_loca) //Check whether the place we want to splatter blood is blocked (i.e. by windows).
|
||||
/obj/projectile/proc/get_splatter_blockage(turf/step_over, atom/target, splatter_dir, target_loca) //Check whether the place we want to splatter blood is blocked (i.e. by windows).
|
||||
var/turf/step_cardinal = !(splatter_dir in list(NORTH, SOUTH, EAST, WEST)) ? get_step(target_loca, get_cardinal_dir(target_loca, step_over)) : null
|
||||
|
||||
if(step_over.density && !step_over.CanPass(target, step_over, 1)) //Preliminary simple check.
|
||||
@@ -272,18 +279,18 @@
|
||||
if(border_obstacle.flags&ON_BORDER && get_dir(step_cardinal ? step_cardinal : target_loca, step_over) == turn(border_obstacle.dir, 180))
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/proc/vol_by_damage()
|
||||
/obj/projectile/proc/vol_by_damage()
|
||||
if(damage)
|
||||
return clamp((damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then clamp the value between 30 and 100
|
||||
else
|
||||
return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume
|
||||
|
||||
/obj/item/projectile/proc/store_hitscan_collision(datum/point_precise/point_cache)
|
||||
/obj/projectile/proc/store_hitscan_collision(datum/point_precise/point_cache)
|
||||
beam_segments[beam_index] = point_cache
|
||||
beam_index = point_cache
|
||||
beam_segments[beam_index] = null
|
||||
|
||||
/obj/item/projectile/Bump(atom/A)
|
||||
/obj/projectile/Bump(atom/A)
|
||||
if(check_ricochet(A) && check_ricochet_flag(A) && ricochets < ricochets_max && is_reflectable(REFLECTABILITY_PHYSICAL))
|
||||
if(hitscan && ricochets_max > 10)
|
||||
ricochets_max = 10 //I do not want a chucklefuck editing this higher, sorry.
|
||||
@@ -341,10 +348,10 @@
|
||||
picked_mob.bullet_act(src, def_zone)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/Process_Spacemove(movement_dir = 0, continuous_move = FALSE)
|
||||
/obj/projectile/Process_Spacemove(movement_dir = 0, continuous_move = FALSE)
|
||||
return 1 //Bullets don't drift in space
|
||||
|
||||
/obj/item/projectile/process()
|
||||
/obj/projectile/process()
|
||||
if(!loc || !trajectory)
|
||||
return PROCESS_KILL
|
||||
if(paused || !isturf(loc))
|
||||
@@ -364,7 +371,7 @@
|
||||
for(var/i in 1 to required_moves)
|
||||
pixel_move(1)
|
||||
|
||||
/obj/item/projectile/proc/pixel_move(trajectory_multiplier, hitscanning = FALSE)
|
||||
/obj/projectile/proc/pixel_move(trajectory_multiplier, hitscanning = FALSE)
|
||||
if(!loc || !trajectory)
|
||||
return
|
||||
last_projectile_move = world.time
|
||||
@@ -408,7 +415,7 @@
|
||||
animate(src, pixel_x = trajectory.return_px(), pixel_y = trajectory.return_py(), time = 1, flags = ANIMATION_END_NOW)
|
||||
Range()
|
||||
|
||||
/obj/item/projectile/proc/fire(setAngle)
|
||||
/obj/projectile/proc/fire(setAngle)
|
||||
if(setAngle)
|
||||
Angle = setAngle
|
||||
if(!current || loc == current)
|
||||
@@ -431,7 +438,7 @@
|
||||
START_PROCESSING(SSprojectiles, src)
|
||||
pixel_move(1, FALSE)
|
||||
|
||||
/obj/item/projectile/proc/reflect_back(atom/source, list/position_modifiers = list(0, 0, 0, 0, 0, -1, 1, -2, 2))
|
||||
/obj/projectile/proc/reflect_back(atom/source, list/position_modifiers = list(0, 0, 0, 0, 0, -1, 1, -2, 2))
|
||||
if(!starting)
|
||||
return
|
||||
var/new_x = starting.x + pick(position_modifiers)
|
||||
@@ -452,14 +459,14 @@
|
||||
set_angle(get_angle(curloc, original))
|
||||
|
||||
/// A mob moving on a tile with a projectile is hit by it.
|
||||
/obj/item/projectile/proc/on_atom_entered(datum/source, atom/movable/entered)
|
||||
/obj/projectile/proc/on_atom_entered(datum/source, atom/movable/entered)
|
||||
if(!isliving(entered))
|
||||
return
|
||||
var/mob/living_entered = entered
|
||||
if(((living_entered.density || !living_entered.projectile_hit_check(src))) && !checkpass(PASSMOB) && !(living_entered in permutated) && (living_entered.loc == loc))
|
||||
Bump(entered, 1)
|
||||
|
||||
/obj/item/projectile/Destroy()
|
||||
/obj/projectile/Destroy()
|
||||
if(hitscan)
|
||||
finalize_hitscan_and_generate_tracers()
|
||||
STOP_PROCESSING(SSprojectiles, src)
|
||||
@@ -468,12 +475,12 @@
|
||||
firer = null
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/proc/dumbfire(dir)
|
||||
/obj/projectile/proc/dumbfire(dir)
|
||||
current = get_ranged_target_turf(src, dir, world.maxx) //world.maxx is the range. Not sure how to handle this better.
|
||||
fire()
|
||||
|
||||
|
||||
/obj/item/projectile/proc/on_ricochet(atom/A)
|
||||
/obj/projectile/proc/on_ricochet(atom/A)
|
||||
if(!ricochet_auto_aim_angle || !ricochet_auto_aim_range)
|
||||
return
|
||||
|
||||
@@ -490,12 +497,12 @@
|
||||
if(unlucky_sob)
|
||||
set_angle(get_angle(src, unlucky_sob.loc))
|
||||
|
||||
/obj/item/projectile/proc/check_ricochet()
|
||||
/obj/projectile/proc/check_ricochet()
|
||||
if(prob(ricochet_chance))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/projectile/proc/check_ricochet_flag(atom/A)
|
||||
/obj/projectile/proc/check_ricochet_flag(atom/A)
|
||||
if((flag in list(ENERGY, LASER)) && (A.flags_ricochet & RICOCHET_SHINY))
|
||||
return TRUE
|
||||
|
||||
@@ -504,7 +511,7 @@
|
||||
|
||||
return FALSE
|
||||
|
||||
/obj/item/projectile/set_angle(new_angle)
|
||||
/obj/projectile/set_angle(new_angle)
|
||||
..()
|
||||
|
||||
Angle = new_angle
|
||||
@@ -517,7 +524,7 @@
|
||||
store_hitscan_collision(point_cache)
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/proc/set_angle_centered(new_angle)
|
||||
/obj/projectile/proc/set_angle_centered(new_angle)
|
||||
set_angle(new_angle)
|
||||
var/list/coordinates = trajectory.return_coordinates()
|
||||
trajectory.set_location(coordinates[1], coordinates[2], coordinates[3]) // Sets the trajectory to the center of the tile it bounced at
|
||||
@@ -528,10 +535,10 @@
|
||||
store_hitscan_collision(point_cache)
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/experience_pressure_difference()
|
||||
/obj/projectile/experience_pressure_difference()
|
||||
return // Immune to gas flow.
|
||||
|
||||
/obj/item/projectile/forceMove(atom/target)
|
||||
/obj/projectile/forceMove(atom/target)
|
||||
. = ..()
|
||||
if(QDELETED(src)) // we coulda bumped something
|
||||
return
|
||||
@@ -542,20 +549,20 @@
|
||||
if(hitscan)
|
||||
record_hitscan_start(RETURN_PRECISE_POINT(src))
|
||||
|
||||
/obj/item/projectile/proc/is_reflectable(desired_reflectability_level)
|
||||
/obj/projectile/proc/is_reflectable(desired_reflectability_level)
|
||||
if(reflectability == REFLECTABILITY_NEVER) //You'd trust coders not to try and override never reflectable things, but heaven help us I do not
|
||||
return FALSE
|
||||
if(reflectability < desired_reflectability_level)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/proc/record_hitscan_start(datum/point_precise/point_cache)
|
||||
/obj/projectile/proc/record_hitscan_start(datum/point_precise/point_cache)
|
||||
if(point_cache)
|
||||
beam_segments = list()
|
||||
beam_index = point_cache
|
||||
beam_segments[beam_index] = null //record start.
|
||||
|
||||
/obj/item/projectile/proc/process_hitscan()
|
||||
/obj/projectile/proc/process_hitscan()
|
||||
//Safety here is to make hitscan stop if something goes wrong. Why is it equal to range * 10, when range is the maximum amount of tiles it can go? No clue.
|
||||
var/safety = range * 10
|
||||
record_hitscan_start(RETURN_POINT_VECTOR_INCREMENT(src, Angle, MUZZLE_EFFECT_PIXEL_INCREMENT, 1))
|
||||
@@ -571,13 +578,13 @@
|
||||
return //Kill!
|
||||
pixel_move(1, TRUE)
|
||||
|
||||
/obj/item/projectile/proc/finalize_hitscan_and_generate_tracers(impacting = TRUE)
|
||||
/obj/projectile/proc/finalize_hitscan_and_generate_tracers(impacting = TRUE)
|
||||
if(trajectory && beam_index)
|
||||
var/datum/point_precise/point_cache = trajectory.copy_to()
|
||||
beam_segments[beam_index] = point_cache
|
||||
generate_hitscan_tracers(null, hitscan_duration, impacting)
|
||||
|
||||
/obj/item/projectile/proc/generate_hitscan_tracers(cleanup = TRUE, duration = 3, impacting = TRUE)
|
||||
/obj/projectile/proc/generate_hitscan_tracers(cleanup = TRUE, duration = 3, impacting = TRUE)
|
||||
if(!length(beam_segments))
|
||||
return
|
||||
if(tracer_type)
|
||||
@@ -607,7 +614,7 @@
|
||||
if(cleanup)
|
||||
cleanup_beam_segments()
|
||||
|
||||
/obj/item/projectile/proc/cleanup_beam_segments()
|
||||
/obj/projectile/proc/cleanup_beam_segments()
|
||||
QDEL_LIST_ASSOC(beam_segments)
|
||||
|
||||
/**
|
||||
@@ -618,7 +625,7 @@
|
||||
* This is NOT used for pacifist checks, that's handled by [/obj/item/ammo_casing/var/harmful]
|
||||
* This is used in places such as AI responses to determine if they're being threatened or not (among other places)
|
||||
*/
|
||||
/obj/item/projectile/proc/is_hostile_projectile()
|
||||
/obj/projectile/proc/is_hostile_projectile()
|
||||
if(damage > 0 || stamina > 0)
|
||||
return TRUE
|
||||
|
||||
@@ -633,7 +640,7 @@
|
||||
playsound(src, sound, vol = 100, vary = TRUE)
|
||||
|
||||
var/turf/startloc = get_turf(src)
|
||||
var/obj/item/projectile/bullet = new projectile_type(startloc)
|
||||
var/obj/projectile/bullet = new projectile_type(startloc)
|
||||
bullet.starting = startloc
|
||||
bullet.firer = firer || src
|
||||
bullet.firer_source_atom = src
|
||||
|
||||
Reference in New Issue
Block a user