/obj/item/projectile/ion name = "ion bolt" icon_state = "ion" damage = 0 damage_type = BURN nodamage = 1 flag = "energy" /obj/item/projectile/ion/on_hit(var/atom/target, var/blocked = 0) ..() empulse(target, 1, 1) return 1 /obj/item/projectile/ion/weak /obj/item/projectile/ion/weak/on_hit(atom/target, blocked = 0) ..() empulse(target, 0, 0) return 1 /obj/item/projectile/bullet/gyro name ="explosive bolt" icon_state= "bolter" damage = 50 flag = "bullet" sharp = 1 edge = 1 /obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0) ..() explosion(target, -1, 0, 2) return 1 /obj/item/projectile/bullet/a40mm name ="40mm grenade" desc = "USE A WEEL GUN" icon_state= "bolter" damage = 60 flag = "bullet" /obj/item/projectile/bullet/a40mm/on_hit(atom/target, blocked = 0) ..() explosion(target, -1, 0, 2, 1, 0, flame_range = 3) return 1 /obj/item/projectile/temp name = "temperature beam" icon_state = "temp_4" damage = 0 damage_type = BURN nodamage = 1 flag = "energy" var/temperature = 300 pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE /obj/item/projectile/temp/New(loc, shot_temp) ..(loc) if(!isnull(shot_temp)) temperature = shot_temp switch(temperature) if(501 to INFINITY) name = "searing beam" //if emagged icon_state = "temp_8" if(400 to 500) name = "burning beam" //temp at which mobs start taking HEAT_DAMAGE_LEVEL_2 icon_state = "temp_7" if(360 to 400) name = "hot beam" //temp at which mobs start taking HEAT_DAMAGE_LEVEL_1 icon_state = "temp_6" if(335 to 360) name = "warm beam" //temp at which players get notified of their high body temp icon_state = "temp_5" if(295 to 335) name = "ambient beam" icon_state = "temp_4" if(260 to 295) name = "cool beam" //temp at which players get notified of their low body temp icon_state = "temp_3" if(200 to 260) name = "cold beam" //temp at which mobs start taking COLD_DAMAGE_LEVEL_1 icon_state = "temp_2" if(120 to 260) name = "ice beam" //temp at which mobs start taking COLD_DAMAGE_LEVEL_2 icon_state = "temp_1" if(-INFINITY to 120) name = "freeze beam" //temp at which mobs start taking COLD_DAMAGE_LEVEL_3 icon_state = "temp_0" else name = "temperature beam"//failsafe icon_state = "temp_4" ..() /obj/item/projectile/temp/on_hit(var/atom/target, var/blocked = 0)//These two could likely check temp protection on the mob ..() if(isliving(target)) var/mob/living/M = target M.bodytemperature = temperature if(temperature > 500)//emagged M.adjust_fire_stacks(0.5) M.IgniteMob() playsound(M.loc, 'sound/effects/bamf.ogg', 50, 0) return 1 /obj/item/projectile/meteor name = "meteor" icon = 'icons/obj/meteor.dmi' icon_state = "small" damage = 0 damage_type = BRUTE nodamage = 1 flag = "bullet" /obj/item/projectile/meteor/Bump(atom/A, yes) if(yes) return if(A == firer) loc = A.loc return playsound(loc, 'sound/effects/meteorimpact.ogg', 40, 1) for(var/mob/M in urange(10, src)) if(!M.stat) shake_camera(M, 3, 1) qdel(src) /obj/item/projectile/energy/floramut name = "alpha somatoray" icon_state = "energy" damage = 0 damage_type = TOX nodamage = 1 flag = "energy" /obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0) ..() var/mob/living/M = target if(ishuman(target)) var/mob/living/carbon/human/H = M if(H.species.flags & IS_PLANT) if(prob(15)) M.apply_effect((rand(30,80)),IRRADIATE) M.Weaken(5) M.visible_message("[M] writhes in pain as \his vacuoles boil.", "You writhe in pain as your vacuoles boil!", "You hear the crunching of leaves.") if(prob(35)) if(prob(80)) randmutb(M) domutcheck(M,null) else randmutg(M) domutcheck(M,null) else M.adjustFireLoss(rand(5,15)) M.show_message("The radiation beam singes you!") else if(iscarbon(target)) M.show_message("The radiation beam dissipates harmlessly through your body.") else return 1 /obj/item/projectile/energy/florayield name = "beta somatoray" icon_state = "energy2" damage = 0 damage_type = TOX nodamage = 1 flag = "energy" /obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0) ..() var/mob/M = target if(ishuman(target)) //These rays make plantmen fat. var/mob/living/carbon/human/H = M if(H.species.flags & IS_PLANT) H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL) else if(iscarbon(target)) M.show_message("The radiation beam dissipates harmlessly through your body.") else return 1 /obj/item/projectile/beam/mindflayer name = "flayer ray" /obj/item/projectile/beam/mindflayer/on_hit(var/atom/target, var/blocked = 0) . = ..() if(ishuman(target)) var/mob/living/carbon/human/M = target M.adjustBrainLoss(20) M.AdjustHallucinate(20) /obj/item/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) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() new /obj/effect/decal/cleanable/ash(loc) visible_message("The [name] explodes!","You hear a snap!") playsound(src, 'sound/effects/snap.ogg', 50, 1) qdel(src) /obj/item/projectile/beam/wormhole name = "bluespace beam" icon_state = "spark" hitsound = "sparks" damage = 3 var/obj/item/weapon/gun/energy/wormhole_projector/gun color = "#33CCFF" /obj/item/projectile/beam/wormhole/orange name = "orange bluespace beam" color = "#FF6600" /obj/item/projectile/beam/wormhole/New(var/obj/item/ammo_casing/energy/wormhole/casing) if(casing) gun = casing.gun /obj/item/projectile/beam/wormhole/on_hit(atom/target) if(ismob(target)) if(is_teleport_allowed(target.z)) var/turf/portal_destination = pick(orange(6, src)) do_teleport(target, portal_destination) return ..() if(!gun) qdel(src) gun.create_portal(src) /obj/item/projectile/bullet/frag12 name ="explosive slug" damage = 25 weaken = 5 /obj/item/projectile/bullet/frag12/on_hit(atom/target, blocked = 0) ..() explosion(target, -1, 0, 1) return 1 /obj/item/projectile/plasma name = "plasma blast" icon_state = "plasmacutter" damage_type = BRUTE damage = 5 range = 3 dismemberment = 20 /obj/item/projectile/plasma/New() var/turf/proj_turf = get_turf(src) if(!istype(proj_turf, /turf)) return var/datum/gas_mixture/environment = proj_turf.return_air() if(environment) var/pressure = environment.return_pressure() if(pressure < 30) name = "full strength plasma blast" damage *= 3 ..() /obj/item/projectile/plasma/on_hit(atom/target) . = ..() if(istype(target, /turf/simulated/mineral)) var/turf/simulated/mineral/M = target M.gets_drilled(firer) Range() if(range > 0) return -1 /obj/item/projectile/plasma/adv range = 5 /obj/item/projectile/plasma/adv/mech damage = 10 range = 6 /obj/item/projectile/energy/teleport name = "teleportation burst" icon_state = "bluespace" damage = 0 nodamage = 1 var/teleport_target = null /obj/item/projectile/energy/teleport/New(loc, tele_target) ..(loc) if(tele_target) teleport_target = tele_target /obj/item/projectile/energy/teleport/on_hit(var/atom/target, var/blocked = 0) if(isliving(target)) if(teleport_target) do_teleport(target, teleport_target, 0)//teleport what's in the tile to the beacon else do_teleport(target, target, 15) //Otherwise it just warps you off somewhere. /obj/item/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 . = ..() if(istype(target, /mob/living)) 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 name = "ornament" icon_state = "ornament-1" hitsound = 'sound/effects/Glasshit.ogg' damage = 7 damage_type = BRUTE /obj/item/projectile/ornament/New() icon_state = pick("ornament-1", "ornament-2") ..() /obj/item/projectile/ornament/on_hit(atom/target) //knockback ..() if(istype(target, /turf)) return 0 var/obj/T = target var/throwdir = get_dir(firer,target) T.throw_at(get_edge_target_turf(target, throwdir),10,10) return 1 /obj/item/projectile/mimic name = "googly-eyed gun" hitsound = 'sound/weapons/genhit1.ogg' damage = 0 nodamage = 1 damage_type = BURN flag = "melee" var/obj/item/weapon/gun/stored_gun /obj/item/projectile/mimic/New(loc, mimic_type) ..(loc) if(mimic_type) stored_gun = new mimic_type(src) icon = stored_gun.icon icon_state = stored_gun.icon_state overlays = stored_gun.overlays SpinAnimation(20, -1) /obj/item/projectile/mimic/on_hit(atom/target) ..() var/turf/T = get_turf(src) var/obj/item/weapon/gun/G = stored_gun stored_gun = null G.forceMove(T) var/mob/living/simple_animal/hostile/mimic/copy/ranged/R = new /mob/living/simple_animal/hostile/mimic/copy/ranged(T, G, firer) if(ismob(target)) R.target = target