mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-30 07:27:57 +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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user