/obj/item/projectile/bullet name = "bullet" icon_state = "bullet" damage = 60 damage_type = BRUTE nodamage = 0 flag = "bullet" hitsound_wall = "ricochet" impact_effect_type = /obj/effect/temp_visual/impact_effect /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 knockdown = 30 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 = 15 armour_penetration = 40 /obj/item/projectile/bullet/pellet name = "pellet" damage = 12.5 /obj/item/projectile/bullet/pellet/Range() ..() damage += -0.75 if(damage < 0) qdel(src) /obj/item/projectile/bullet/pellet/weak damage = 6 /obj/item/projectile/bullet/pellet/weak/New() range = rand(1, 8) ..() /obj/item/projectile/bullet/pellet/weak/on_range() do_sparks(1, TRUE, src) ..() /obj/item/projectile/bullet/pellet/overload damage = 3 /obj/item/projectile/bullet/pellet/overload/New() range = rand(1, 10) ..() /obj/item/projectile/bullet/pellet/overload/on_hit(atom/target, blocked = FALSE) ..() explosion(target, 0, 0, 2) /obj/item/projectile/bullet/pellet/overload/on_range() explosion(src, 0, 0, 2) do_sparks(3, TRUE, src) ..() /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/midbullet3/hp damage = 40 armour_penetration = -50 /obj/item/projectile/bullet/midbullet3/ap damage = 27 armour_penetration = 40 /obj/item/projectile/bullet/midbullet3/fire/on_hit(atom/target, blocked = FALSE) if(..(target, blocked)) var/mob/living/M = target M.adjust_fire_stacks(1) M.IgniteMob() /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 knockdown = 100 stutter = 5 jitter = 20 range = 7 icon_state = "spark" color = "#FFFF00" /obj/item/projectile/bullet/incendiary/on_hit(atom/target, blocked = FALSE) . = ..() 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) new /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 knockdown = 160 hitsound = 'sound/effects/meteorimpact.ogg' /obj/item/projectile/bullet/meteorshot/weak damage = 10 knockdown = 80 /obj/item/projectile/bullet/honker damage = 0 knockdown = 60 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 = FALSE) . = ..() if(ismovableatom(target)) var/atom/movable/M = target var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src))) M.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 = FALSE) . = ..() 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 = FALSE /obj/item/projectile/bullet/dart/New() ..() create_reagents(50) reagents.set_reacting(FALSE) /obj/item/projectile/bullet/dart/on_hit(atom/target, blocked = FALSE) if(iscarbon(target)) var/mob/living/carbon/M = target if(blocked != 100) // not completely blocked if(M.can_inject(null, FALSE, def_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 TRUE else blocked = 100 target.visible_message("\The [src] was deflected!", \ "You were protected against \the [src]!") ..(target, blocked) 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_state = "syringeproj" /obj/item/projectile/bullet/neurotoxin name = "neurotoxin spit" icon_state = "neurotoxin" damage = 5 damage_type = TOX knockdown = 100 /obj/item/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = FALSE) if(isalien(target)) knockdown = 0 nodamage = 1 . = ..() // Execute the rest of the code. /obj/item/projectile/bullet/dnainjector name = "\improper DNA injector" icon_state = "syringeproj" var/obj/item/weapon/dnainjector/injector damage = 5 hitsound_wall = "shatter" /obj/item/projectile/bullet/dnainjector/on_hit(atom/target, blocked = FALSE) if(iscarbon(target)) var/mob/living/carbon/M = target if(blocked != 100) if(M.can_inject(null, FALSE, def_zone, FALSE)) if(injector.inject(M, firer)) QDEL_NULL(injector) return TRUE else blocked = 100 target.visible_message("\The [src] was deflected!", \ "You were protected against \the [src]!") return ..() /obj/item/projectile/bullet/dnainjector/Destroy() QDEL_NULL(injector) return ..() //// SNIPER BULLETS /obj/item/projectile/bullet/sniper speed = 0 //360 alwaysscope. damage = 70 knockdown = 100 dismemberment = 50 armour_penetration = 50 var/breakthings = TRUE /obj/item/projectile/bullet/sniper/on_hit(atom/target, blocked = FALSE) if((blocked != 100) && (!ismob(target) && breakthings)) target.ex_act(rand(1,2)) return ..() /obj/item/projectile/bullet/sniper/gang damage = 55 knockdown = 20 dismemberment = 15 armour_penetration = 25 /obj/item/projectile/bullet/sniper/gang/sleeper nodamage = 1 knockdown = 0 dismemberment = 0 breakthings = FALSE /obj/item/projectile/bullet/sniper/gang/sleeper/on_hit(atom/target, blocked = FALSE) if((blocked != 100) && isliving(target)) var/mob/living/L = target L.blur_eyes(8) if(L.staminaloss >= 40) L.Sleeping(400) else L.adjustStaminaLoss(55) return 1 /obj/item/projectile/bullet/sniper/soporific armour_penetration = 0 nodamage = 1 dismemberment = 0 knockdown = 0 breakthings = FALSE /obj/item/projectile/bullet/sniper/soporific/on_hit(atom/target, blocked = FALSE) if((blocked != 100) && isliving(target)) var/mob/living/L = target L.Sleeping(400) return ..() /obj/item/projectile/bullet/sniper/haemorrhage armour_penetration = 15 damage = 15 dismemberment = 0 knockdown = 0 breakthings = FALSE /obj/item/projectile/bullet/sniper/haemorrhage/on_hit(atom/target, blocked = FALSE) 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 dismemberment = 0 //It goes through you cleanly. knockdown = 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 = FALSE) . = ..() 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) new /obj/effect/hotspot(location) location.hotspot_expose(700, 50, 1) /obj/item/projectile/bullet/saw/incen/on_hit(atom/target, blocked = FALSE) . = ..() if(iscarbon(target)) var/mob/living/carbon/M = target M.adjust_fire_stacks(3) M.IgniteMob()