mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-28 01:51:46 +00:00
Blood drips icons are now in blood.dmi instead of drip.dmi (which only had the 5 drip sprites). Moved projectiles, guns, casings and ammo boxes to be in the right files. Please don't put your gun with its projectile, ammo casing and ammo box all the same file. I split growing.dmi into 5 smaller files so we don't get close to the 512 icon limit again. Each seed has a var to indicate which icon file to use when planted. Fixes code for heavy pulse laser projectile to be less awful.
323 lines
7.5 KiB
Plaintext
323 lines
7.5 KiB
Plaintext
/obj/item/projectile/bullet
|
|
name = "bullet"
|
|
icon_state = "bullet"
|
|
damage = 60
|
|
damage_type = BRUTE
|
|
nodamage = 0
|
|
flag = "bullet"
|
|
hitsound_wall = "ricochet"
|
|
|
|
/obj/item/projectile/bullet/weakbullet //beanbag, heavy stamina damage
|
|
damage = 5
|
|
stamina = 80
|
|
|
|
/obj/item/projectile/bullet/weakbullet2 //detective revolver instastuns, but multiple shots are better for keeping punks down
|
|
damage = 15
|
|
weaken = 3
|
|
stamina = 50
|
|
|
|
/obj/item/projectile/bullet/weakbullet3
|
|
damage = 20
|
|
|
|
/obj/item/projectile/bullet/toxinbullet
|
|
damage = 15
|
|
damage_type = TOX
|
|
|
|
/obj/item/projectile/bullet/incendiary/firebullet
|
|
damage = 10
|
|
|
|
/obj/item/projectile/bullet/armourpiercing
|
|
damage = 17
|
|
armour_penetration = 10
|
|
|
|
/obj/item/projectile/bullet/pellet
|
|
name = "pellet"
|
|
damage = 15
|
|
|
|
/obj/item/projectile/bullet/pellet/weak/New()
|
|
damage = 6
|
|
range = rand(8)
|
|
|
|
/obj/item/projectile/bullet/pellet/weak/on_range()
|
|
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
|
|
sparks.set_up(1, 1, src)
|
|
sparks.start()
|
|
..()
|
|
|
|
/obj/item/projectile/bullet/pellet/overload/New()
|
|
damage = 3
|
|
range = rand(10)
|
|
|
|
/obj/item/projectile/bullet/pellet/overload/on_hit(atom/target, blocked = 0)
|
|
..()
|
|
explosion(target, 0, 0, 2)
|
|
|
|
/obj/item/projectile/bullet/pellet/overload/on_range()
|
|
explosion(src, 0, 0, 2)
|
|
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
|
|
sparks.set_up(3, 3, src)
|
|
sparks.start()
|
|
..()
|
|
|
|
/obj/item/projectile/bullet/midbullet
|
|
damage = 20
|
|
stamina = 65 //two round bursts from the c20r knocks people down
|
|
|
|
|
|
/obj/item/projectile/bullet/midbullet2
|
|
damage = 25
|
|
|
|
/obj/item/projectile/bullet/midbullet3
|
|
damage = 30
|
|
|
|
/obj/item/projectile/bullet/heavybullet
|
|
damage = 35
|
|
|
|
/obj/item/projectile/bullet/rpellet
|
|
damage = 3
|
|
stamina = 25
|
|
|
|
/obj/item/projectile/bullet/stunshot //taser slugs for shotguns, nothing special
|
|
name = "stunshot"
|
|
damage = 5
|
|
stun = 5
|
|
weaken = 5
|
|
stutter = 5
|
|
jitter = 20
|
|
range = 7
|
|
icon_state = "spark"
|
|
color = "#FFFF00"
|
|
|
|
/obj/item/projectile/bullet/incendiary/on_hit(atom/target, blocked = 0)
|
|
. = ..()
|
|
if(iscarbon(target))
|
|
var/mob/living/carbon/M = target
|
|
M.adjust_fire_stacks(4)
|
|
M.IgniteMob()
|
|
|
|
|
|
/obj/item/projectile/bullet/incendiary/shell
|
|
name = "incendiary slug"
|
|
damage = 20
|
|
|
|
/obj/item/projectile/bullet/incendiary/shell/Move()
|
|
..()
|
|
var/turf/location = get_turf(src)
|
|
if(location)
|
|
PoolOrNew(/obj/effect/hotspot, location)
|
|
location.hotspot_expose(700, 50, 1)
|
|
|
|
/obj/item/projectile/bullet/incendiary/shell/dragonsbreath
|
|
name = "dragonsbreath round"
|
|
damage = 5
|
|
|
|
|
|
/obj/item/projectile/bullet/meteorshot
|
|
name = "meteor"
|
|
icon = 'icons/obj/meteor.dmi'
|
|
icon_state = "dust"
|
|
damage = 30
|
|
weaken = 8
|
|
stun = 8
|
|
hitsound = 'sound/effects/meteorimpact.ogg'
|
|
|
|
/obj/item/projectile/bullet/meteorshot/weak
|
|
damage = 10
|
|
weaken = 4
|
|
stun = 4
|
|
|
|
/obj/item/projectile/bullet/honker
|
|
damage = 0
|
|
weaken = 5
|
|
stun = 5
|
|
forcedodge = 1
|
|
nodamage = 1
|
|
hitsound = 'sound/items/bikehorn.ogg'
|
|
icon = 'icons/obj/hydroponics/harvest.dmi'
|
|
icon_state = "banana"
|
|
range = 200
|
|
|
|
/obj/item/projectile/bullet/honker/New()
|
|
..()
|
|
SpinAnimation()
|
|
|
|
/obj/item/projectile/bullet/meteorshot/on_hit(atom/target, blocked = 0)
|
|
. = ..()
|
|
if(istype(target, /atom/movable))
|
|
var/atom/movable/M = target
|
|
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()
|
|
..()
|
|
SpinAnimation()
|
|
|
|
|
|
/obj/item/projectile/bullet/mime
|
|
damage = 20
|
|
|
|
/obj/item/projectile/bullet/mime/on_hit(atom/target, blocked = 0)
|
|
. = ..()
|
|
if(iscarbon(target))
|
|
var/mob/living/carbon/M = target
|
|
M.silent = max(M.silent, 10)
|
|
|
|
|
|
/obj/item/projectile/bullet/dart
|
|
name = "dart"
|
|
icon_state = "cbbolt"
|
|
damage = 6
|
|
var/piercing = 0
|
|
|
|
/obj/item/projectile/bullet/dart/New()
|
|
..()
|
|
create_reagents(50)
|
|
reagents.set_reacting(FALSE)
|
|
|
|
/obj/item/projectile/bullet/dart/on_hit(atom/target, blocked = 0, hit_zone)
|
|
if(iscarbon(target))
|
|
var/mob/living/carbon/M = target
|
|
if(blocked != 100) // not completely blocked
|
|
if(M.can_inject(null,0,hit_zone,piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body.
|
|
..()
|
|
reagents.reaction(M, INJECT)
|
|
reagents.trans_to(M, reagents.total_volume)
|
|
return 1
|
|
else
|
|
blocked = 100
|
|
target.visible_message("<span class='danger'>The [name] was deflected!</span>", \
|
|
"<span class='userdanger'>You were protected against the [name]!</span>")
|
|
|
|
..(target, blocked, hit_zone)
|
|
reagents.set_reacting(TRUE)
|
|
reagents.handle_reactions()
|
|
return 1
|
|
|
|
/obj/item/projectile/bullet/dart/metalfoam/New()
|
|
..()
|
|
reagents.add_reagent("aluminium", 15)
|
|
reagents.add_reagent("foaming_agent", 5)
|
|
reagents.add_reagent("facid", 5)
|
|
|
|
//This one is for future syringe guns update
|
|
/obj/item/projectile/bullet/dart/syringe
|
|
name = "syringe"
|
|
icon = 'icons/obj/chemical.dmi'
|
|
icon_state = "syringeproj"
|
|
|
|
//Piercing Syringe
|
|
/obj/item/projectile/bullet/dart/syringe/piercing
|
|
piercing = 1
|
|
|
|
/obj/item/projectile/bullet/neurotoxin
|
|
name = "neurotoxin spit"
|
|
icon_state = "neurotoxin"
|
|
damage = 5
|
|
damage_type = TOX
|
|
weaken = 5
|
|
|
|
/obj/item/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = 0)
|
|
if(isalien(target))
|
|
weaken = 0
|
|
nodamage = 1
|
|
. = ..() // Execute the rest of the code.
|
|
|
|
|
|
|
|
//// SNIPER BULLETS
|
|
|
|
/obj/item/projectile/bullet/sniper
|
|
damage = 70
|
|
stun = 5
|
|
weaken = 5
|
|
armour_penetration = 50
|
|
var/breakthings = TRUE
|
|
|
|
/obj/item/projectile/bullet/sniper/on_hit(atom/target, blocked = 0, hit_zone)
|
|
if((blocked != 100) && (!ismob(target) && breakthings))
|
|
target.ex_act(rand(1,2))
|
|
return ..()
|
|
|
|
|
|
/obj/item/projectile/bullet/sniper/soporific
|
|
armour_penetration = 0
|
|
nodamage = 1
|
|
stun = 0
|
|
weaken = 0
|
|
breakthings = FALSE
|
|
|
|
/obj/item/projectile/bullet/sniper/soporific/on_hit(atom/target, blocked = 0, hit_zone)
|
|
if((blocked != 100) && istype(target, /mob/living))
|
|
var/mob/living/L = target
|
|
L.Sleeping(20)
|
|
return ..()
|
|
|
|
|
|
/obj/item/projectile/bullet/sniper/haemorrhage
|
|
armour_penetration = 15
|
|
damage = 15
|
|
stun = 0
|
|
weaken = 0
|
|
breakthings = FALSE
|
|
|
|
/obj/item/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(100)
|
|
return ..()
|
|
|
|
|
|
/obj/item/projectile/bullet/sniper/penetrator
|
|
icon_state = "gauss"
|
|
name = "penetrator round"
|
|
damage = 60
|
|
forcedodge = 1
|
|
stun = 0
|
|
weaken = 0
|
|
breakthings = FALSE
|
|
|
|
|
|
|
|
//// SAW BULLETS
|
|
|
|
|
|
/obj/item/projectile/bullet/saw
|
|
damage = 45
|
|
armour_penetration = 5
|
|
|
|
/obj/item/projectile/bullet/saw/bleeding
|
|
damage = 20
|
|
armour_penetration = 0
|
|
|
|
/obj/item/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
|
|
damage = 60
|
|
armour_penetration = -10
|
|
|
|
/obj/item/projectile/bullet/saw/ap
|
|
damage = 40
|
|
armour_penetration = 75
|
|
|
|
/obj/item/projectile/bullet/saw/incen
|
|
damage = 7
|
|
armour_penetration = 0
|
|
|
|
obj/item/projectile/bullet/saw/incen/Move()
|
|
..()
|
|
var/turf/location = get_turf(src)
|
|
if(location)
|
|
PoolOrNew(/obj/effect/hotspot, location)
|
|
location.hotspot_expose(700, 50, 1)
|
|
|
|
/obj/item/projectile/bullet/saw/incen/on_hit(atom/target, blocked = 0)
|
|
. = ..()
|
|
if(iscarbon(target))
|
|
var/mob/living/carbon/M = target
|
|
M.adjust_fire_stacks(3)
|
|
M.IgniteMob()
|