mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-20 15:21:29 +00:00
420 lines
11 KiB
Plaintext
420 lines
11 KiB
Plaintext
/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) && (M.nutrition < 500))
|
|
if(prob(15))
|
|
M.apply_effect((rand(30,80)),IRRADIATE)
|
|
M.Weaken(5)
|
|
for(var/mob/V in viewers(src))
|
|
V.show_message("<span class='warning'>[M] writhes in pain as \his vacuoles boil.</span>", 3, "<span class='warning'>You hear the crunching of leaves.</span>", 2)
|
|
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("<span class='warning'>The radiation beam singes you!</span>")
|
|
else if(istype(target, /mob/living/carbon/))
|
|
M.show_message("<span class='notice'>The radiation beam dissipates harmlessly through your body.</span>")
|
|
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) && (M.nutrition < 500))
|
|
M.nutrition += 30
|
|
else if(istype(target, /mob/living/carbon/))
|
|
M.show_message("<span class='notice'>The radiation beam dissipates harmlessly through your body.</span>")
|
|
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.hallucination += 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("<span class='warning'>The [name] explodes!</span>","<span class='warning'>You hear a snap!</span>")
|
|
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
|
qdel(src)
|
|
|
|
/obj/item/projectile/kinetic
|
|
name = "kinetic force"
|
|
icon_state = null
|
|
damage = 10
|
|
damage_type = BRUTE
|
|
flag = "bomb"
|
|
range = 3
|
|
var/splash = 0
|
|
|
|
/obj/item/projectile/kinetic/super
|
|
damage = 11
|
|
range = 4
|
|
|
|
/obj/item/projectile/kinetic/hyper
|
|
damage = 12
|
|
range = 5
|
|
splash = 1
|
|
|
|
obj/item/projectile/kinetic/New()
|
|
var/turf/proj_turf = get_turf(src)
|
|
if(!istype(proj_turf, /turf))
|
|
return
|
|
var/datum/gas_mixture/environment = proj_turf.return_air()
|
|
var/pressure = environment.return_pressure()
|
|
if(pressure < 50)
|
|
name = "full strength kinetic force"
|
|
damage *= 4
|
|
..()
|
|
|
|
/obj/item/projectile/kinetic/on_range()
|
|
new /obj/effect/kinetic_blast(loc)
|
|
..()
|
|
|
|
/obj/item/projectile/kinetic/on_hit(atom/target)
|
|
. = ..()
|
|
var/turf/target_turf= get_turf(target)
|
|
if(istype(target_turf, /turf/simulated/mineral))
|
|
var/turf/simulated/mineral/M = target_turf
|
|
M.gets_drilled(firer)
|
|
new /obj/effect/kinetic_blast(target_turf)
|
|
if(splash)
|
|
for(var/turf/T in range(splash, target_turf))
|
|
if(istype(T, /turf/simulated/mineral))
|
|
var/turf/simulated/mineral/M = T
|
|
M.gets_drilled(firer)
|
|
|
|
/obj/effect/kinetic_blast
|
|
name = "kinetic explosion"
|
|
icon = 'icons/obj/projectiles.dmi'
|
|
icon_state = "kinetic_blast"
|
|
layer = 4.1
|
|
|
|
/obj/effect/kinetic_blast/New()
|
|
spawn(4)
|
|
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))
|
|
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/beam/wormhole/on_hit(atom/target)
|
|
if(ismob(target))
|
|
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
|
|
|
|
/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 = 3
|
|
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 = 5
|
|
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
|