mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 23:17:02 +01:00
Here we go again...
This commit is contained in:
@@ -5,50 +5,27 @@
|
||||
damage = 20
|
||||
damage_type = BURN
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
flag = "laser"
|
||||
eyeblur = 2
|
||||
|
||||
/obj/item/projectile/practice
|
||||
name = "laser"
|
||||
icon_state = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
/obj/item/projectile/beam/laser
|
||||
|
||||
/obj/item/projectile/beam/laser/heavylaser
|
||||
name = "heavy laser"
|
||||
icon_state = "heavylaser"
|
||||
damage = 40
|
||||
|
||||
/obj/item/projectile/beam/practice
|
||||
name = "practice laser"
|
||||
damage = 0
|
||||
hitsound = null
|
||||
damage_type = BURN
|
||||
flag = "laser"
|
||||
eyeblur = 2
|
||||
chatlog_attacks = 0
|
||||
nodamage = 1
|
||||
|
||||
/obj/item/projectile/beam/scatter
|
||||
name = "laser pellet"
|
||||
icon_state = "scatterlaser"
|
||||
damage = 5
|
||||
|
||||
|
||||
/obj/item/projectile/beam/heavylaser
|
||||
name = "heavy laser"
|
||||
icon_state = "heavylaser"
|
||||
damage = 40
|
||||
|
||||
/obj/item/projectile/beam/sniper
|
||||
name = "sniper beam"
|
||||
icon_state = "sniperlaser"
|
||||
damage = 60
|
||||
stun = 5
|
||||
weaken = 5
|
||||
stutter = 5
|
||||
|
||||
|
||||
/obj/item/projectile/beam/immolator
|
||||
name = "immolation beam"
|
||||
|
||||
/obj/item/projectile/beam/immolator/on_hit(var/atom/target, var/blocked = 0)
|
||||
. = ..()
|
||||
if(istype(target, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = target
|
||||
M.adjust_fire_stacks(1)
|
||||
M.IgniteMob()
|
||||
|
||||
/obj/item/projectile/beam/xray
|
||||
name = "xray beam"
|
||||
icon_state = "xray"
|
||||
@@ -82,41 +59,80 @@
|
||||
name = "emitter beam"
|
||||
icon_state = "emitter"
|
||||
damage = 30
|
||||
legacy = 1
|
||||
animate_movement = SLIDE_STEPS
|
||||
|
||||
/obj/item/projectile/beam/emitter/singularity_pull()
|
||||
return //don't want the emitters to miss
|
||||
|
||||
/obj/item/projectile/lasertag
|
||||
/obj/item/projectile/beam/lasertag
|
||||
name = "laser tag beam"
|
||||
icon_state = "omnilaser"
|
||||
hitsound = null
|
||||
damage = 0
|
||||
damage_type = STAMINA
|
||||
flag = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag)
|
||||
chatlog_attacks = 0
|
||||
|
||||
/obj/item/projectile/lasertag/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
/obj/item/projectile/beam/lasertag/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
if(istype(M.wear_suit))
|
||||
if(M.wear_suit.type in suit_types)
|
||||
M.adjustStaminaLoss(34)
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/lasertag/omni
|
||||
/obj/item/projectile/beam/lasertag/omni
|
||||
name = "laser tag beam"
|
||||
icon_state = "omnilaser"
|
||||
|
||||
/obj/item/projectile/lasertag/red
|
||||
/obj/item/projectile/beam/lasertag/red
|
||||
icon_state = "laser"
|
||||
suit_types = list(/obj/item/clothing/suit/bluetag)
|
||||
|
||||
/obj/item/projectile/lasertag/blue
|
||||
/obj/item/projectile/beam/lasertag/blue
|
||||
icon_state = "bluelaser"
|
||||
suit_types = list(/obj/item/clothing/suit/redtag)
|
||||
|
||||
/obj/item/projectile/beam/sniper
|
||||
name = "sniper beam"
|
||||
icon_state = "sniperlaser"
|
||||
damage = 60
|
||||
stun = 5
|
||||
weaken = 5
|
||||
stutter = 5
|
||||
|
||||
/obj/item/projectile/beam/immolator
|
||||
name = "immolation beam"
|
||||
|
||||
/obj/item/projectile/beam/immolator/on_hit(var/atom/target, var/blocked = 0)
|
||||
. = ..()
|
||||
if(istype(target, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = target
|
||||
M.adjust_fire_stacks(1)
|
||||
M.IgniteMob()
|
||||
|
||||
/obj/item/projectile/beam/instakill
|
||||
name = "instagib laser"
|
||||
icon_state = "purple_laser"
|
||||
damage = 200
|
||||
damage_type = BURN
|
||||
|
||||
/obj/item/projectile/beam/instakill/blue
|
||||
icon_state = "blue_laser"
|
||||
|
||||
/obj/item/projectile/beam/instakill/red
|
||||
icon_state = "red_laser"
|
||||
|
||||
/obj/item/projectile/beam/instakill/on_hit(atom/target)
|
||||
. = ..()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
M.visible_message("<span class='danger'>[M] explodes into a shower of gibs!</span>")
|
||||
M.gib()
|
||||
|
||||
/* //THIS CODE MAKES ME WANT TO STAB MY EYES OUT
|
||||
/obj/item/projectile/beam/lightning
|
||||
invisibility = 101
|
||||
name = "lightning"
|
||||
@@ -133,12 +149,12 @@
|
||||
kill_count = 6
|
||||
var/bullet_acted = 0
|
||||
|
||||
Bump(var/atom/A)
|
||||
/obj/item/projectile/beam/lightning/Bump(var/atom/A)
|
||||
if((A != firer) && !bullet_acted)
|
||||
A.bullet_act(src)
|
||||
bullet_acted = 1
|
||||
|
||||
proc/adjustAngle(angle)
|
||||
/obj/item/projectile/beam/lightning/proc/adjustAngle(angle)
|
||||
angle = round(angle) + 45
|
||||
if(angle > 180)
|
||||
angle -= 180
|
||||
@@ -146,14 +162,9 @@
|
||||
angle += 180
|
||||
if(!angle)
|
||||
angle = 1
|
||||
/*if(angle < 0)
|
||||
//angle = (round(abs(get_angle(A, user))) + 45) - 90
|
||||
angle = round(angle) + 45 + 180
|
||||
else
|
||||
angle = round(angle) + 45*/
|
||||
return angle
|
||||
|
||||
process()
|
||||
/obj/item/projectile/beam/lightning/process()
|
||||
var/first = 1 //So we don't make the overlay in the same tile as the firer
|
||||
var/broke = 0
|
||||
var/broken
|
||||
@@ -239,16 +250,11 @@
|
||||
f.break_tile()
|
||||
f.hotspot_expose(1000,CELL_VOLUME)
|
||||
if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
|
||||
// to_chat(world, "deleting")
|
||||
//qdel(src) //Delete if it passes the world edge
|
||||
broken = 1
|
||||
return
|
||||
if(kill_count < 1)
|
||||
// to_chat(world, "deleting")
|
||||
//qdel(src)
|
||||
broken = 1
|
||||
kill_count--
|
||||
// to_chat(world, "[x] [y]")
|
||||
if(!bumped && !isturf(original))
|
||||
if(loc == get_turf(original))
|
||||
if(!(original in permutated))
|
||||
@@ -263,7 +269,6 @@
|
||||
Bump(original)
|
||||
first = 0
|
||||
if(broken)
|
||||
// to_chat(world, "breaking")
|
||||
break
|
||||
else
|
||||
last = get_turf(src.loc)
|
||||
@@ -273,13 +278,9 @@
|
||||
icon_state = "[tang]"
|
||||
qdel(src)
|
||||
return
|
||||
/*cleanup(reference) //Waits .3 seconds then removes the overlay.
|
||||
// to_chat(world, "setting invisibility")
|
||||
sleep(50)
|
||||
src.invisibility = 101
|
||||
return*/
|
||||
on_hit(atom/target, blocked = 0)
|
||||
/obj/item/projectile/beam/lightning/on_hit(atom/target, blocked = 0)
|
||||
if(istype(target, /mob/living))
|
||||
var/mob/living/M = target
|
||||
M.playsound_local(src, "explosion", 50, 1)
|
||||
..()
|
||||
..()
|
||||
*/
|
||||
|
||||
@@ -3,21 +3,10 @@
|
||||
icon_state = "bullet"
|
||||
damage = 60
|
||||
damage_type = BRUTE
|
||||
nodamage = 0
|
||||
flag = "bullet"
|
||||
embed = 1
|
||||
sharp = 1
|
||||
|
||||
/obj/item/projectile/bullet/cap
|
||||
name = "cap"
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
embed = 0
|
||||
sharp = 0
|
||||
|
||||
/obj/item/projectile/bullet/cap/process()
|
||||
loc = null
|
||||
del(src)
|
||||
hitsound_wall = "ricochet"
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet //beanbag, heavy stamina damage
|
||||
damage = 5
|
||||
@@ -27,6 +16,26 @@
|
||||
embed = 0
|
||||
sharp = 0
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet/booze
|
||||
embed = 0
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet/booze/on_hit(atom/target, blocked = 0)
|
||||
if(..(target, blocked))
|
||||
var/mob/living/M = target
|
||||
M.dizziness += 20
|
||||
M.slurring += 20
|
||||
M.confused += 20
|
||||
M.eye_blurry += 20
|
||||
M.drowsyness += 20
|
||||
for(var/datum/reagent/ethanol/A in M.reagents.reagent_list)
|
||||
M.AdjustParalysis(2)
|
||||
M.dizziness += 10
|
||||
M.slurring += 10
|
||||
M.confused += 10
|
||||
M.eye_blurry += 10
|
||||
M.drowsyness += 10
|
||||
A.volume += 5 //Because we can
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet2 //detective revolver instastuns, but multiple shots are better for keeping punks down
|
||||
damage = 5
|
||||
weaken = 3
|
||||
@@ -44,6 +53,15 @@
|
||||
damage = 15
|
||||
damage_type = TOX
|
||||
|
||||
/obj/item/projectile/bullet/incendiary
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/on_hit(var/atom/target, var/blocked = 0)
|
||||
..()
|
||||
if(istype(target, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = target
|
||||
M.adjust_fire_stacks(1)
|
||||
M.IgniteMob()
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/firebullet
|
||||
damage = 10
|
||||
|
||||
@@ -55,15 +73,34 @@
|
||||
name = "pellet"
|
||||
damage = 15
|
||||
|
||||
/obj/item/projectile/bullet/blank
|
||||
name = "blankshot"
|
||||
nodamage = 1
|
||||
|
||||
/obj/item/projectile/bullet/pellet/weak
|
||||
damage = 6
|
||||
|
||||
/obj/item/projectile/bullet/pellet/weak/New()
|
||||
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
|
||||
damage = 3
|
||||
|
||||
/obj/item/projectile/bullet/pellet/random/New()
|
||||
damage = rand(10)
|
||||
/obj/item/projectile/bullet/pellet/overload/New()
|
||||
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
|
||||
@@ -89,39 +126,11 @@
|
||||
weaken = 5
|
||||
stutter = 5
|
||||
jitter = 20
|
||||
icon_state = "spark"
|
||||
range = 7
|
||||
embed = 0
|
||||
sharp = 0
|
||||
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet/booze
|
||||
embed = 0
|
||||
on_hit(var/atom/target, var/blocked = 0)
|
||||
if(..(target, blocked))
|
||||
var/mob/living/M = target
|
||||
M.dizziness += 20
|
||||
M.slurring += 20
|
||||
M.confused += 20
|
||||
M.eye_blurry += 20
|
||||
M.drowsyness += 20
|
||||
for(var/datum/reagent/ethanol/A in M.reagents.reagent_list)
|
||||
M.AdjustParalysis(2)
|
||||
M.dizziness += 10
|
||||
M.slurring += 10
|
||||
M.confused += 10
|
||||
M.eye_blurry += 10
|
||||
M.drowsyness += 10
|
||||
A.volume += 5 //Because we can
|
||||
|
||||
/obj/item/projectile/bullet/incendiary
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/on_hit(var/atom/target, var/blocked = 0)
|
||||
..()
|
||||
if(istype(target, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = target
|
||||
M.adjust_fire_stacks(1)
|
||||
M.IgniteMob()
|
||||
icon_state = "spark"
|
||||
color = "#FFFF00"
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/shell
|
||||
name = "incendiary slug"
|
||||
@@ -130,8 +139,9 @@
|
||||
/obj/item/projectile/bullet/incendiary/shell/Move()
|
||||
..()
|
||||
var/turf/location = get_turf(src)
|
||||
new /obj/effect/hotspot(location)
|
||||
location.hotspot_expose(700, 50, 1)
|
||||
if(location)
|
||||
new /obj/effect/hotspot(location)
|
||||
location.hotspot_expose(700, 50, 1)
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/shell/dragonsbreath
|
||||
name = "dragonsbreath round"
|
||||
@@ -157,7 +167,25 @@
|
||||
..()
|
||||
SpinAnimation()
|
||||
|
||||
/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/mime
|
||||
damage = 0
|
||||
@@ -168,7 +196,7 @@
|
||||
|
||||
/obj/item/projectile/bullet/mime/on_hit(var/atom/target, var/blocked = 0)
|
||||
..(target, blocked)
|
||||
if(istype(target, /mob/living/carbon))
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
M.silent = max(M.silent, 10)
|
||||
else if(istype(target, /obj/mecha/combat/honker))
|
||||
@@ -184,32 +212,38 @@
|
||||
damage = 6
|
||||
embed = 0
|
||||
sharp = 0
|
||||
var/piercing = 0
|
||||
|
||||
New()
|
||||
..()
|
||||
flags |= NOREACT
|
||||
create_reagents(50)
|
||||
/obj/item/projectile/bullet/dart/New()
|
||||
..()
|
||||
flags |= NOREACT
|
||||
create_reagents(50)
|
||||
|
||||
on_hit(var/atom/target, var/blocked = 0, var/hit_zone)
|
||||
if(istype(target, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = target
|
||||
/obj/item/projectile/bullet/dart/on_hit(var/atom/target, var/blocked = 0, var/hit_zone)
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
if(blocked != 100)
|
||||
if(M.can_inject(null,0,hit_zone)) // Pass the hit zone to see if it can inject by whether it hit the head or the body.
|
||||
..()
|
||||
reagents.reaction(M, INGEST)
|
||||
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>")
|
||||
flags &= ~NOREACT
|
||||
reagents.handle_reactions()
|
||||
return 1
|
||||
"<span class='userdanger'>You were protected against the [name]!</span>")
|
||||
..(target, blocked, hit_zone)
|
||||
flags &= ~NOREACT
|
||||
reagents.handle_reactions()
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/bullet/dart/metalfoam
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("aluminum", 15)
|
||||
reagents.add_reagent("fluorosurfactant", 5)
|
||||
reagents.add_reagent("sacid", 5)
|
||||
|
||||
/obj/item/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
|
||||
@@ -218,9 +252,9 @@
|
||||
icon_state = "syringeproj"
|
||||
|
||||
/obj/item/projectile/bullet/dart/syringe/tranquilizer
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("haloperidol", 15)
|
||||
/obj/item/projectile/bullet/dart/syringe/tranquilizer/New()
|
||||
..()
|
||||
reagents.add_reagent("haloperidol", 15)
|
||||
|
||||
/obj/item/projectile/bullet/neurotoxin
|
||||
name = "neurotoxin spit"
|
||||
@@ -231,5 +265,17 @@
|
||||
|
||||
/obj/item/projectile/bullet/neurotoxin/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isalien(target))
|
||||
return 0
|
||||
..() // Execute the rest of the code.
|
||||
weaken = 0
|
||||
nodamage = 1
|
||||
. = ..() // Execute the rest of the code.
|
||||
|
||||
/obj/item/projectile/bullet/cap
|
||||
name = "cap"
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
embed = 0
|
||||
sharp = 0
|
||||
|
||||
/obj/item/projectile/bullet/cap/fire()
|
||||
loc = null
|
||||
qdel(src)
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
damage_type = BURN
|
||||
flag = "energy"
|
||||
|
||||
|
||||
/obj/item/projectile/energy/electrode
|
||||
name = "electrode"
|
||||
icon_state = "spark"
|
||||
@@ -20,26 +19,23 @@
|
||||
//Damage will be handled on the MOB side, to prevent window shattering.
|
||||
|
||||
/obj/item/projectile/energy/electrode/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(!proj_hit)
|
||||
if(!ismob(target) || blocked >= 2) //Fully blocked by mob or collided with dense object - burst into sparks!
|
||||
var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread
|
||||
sparks.set_up(1, 1, src)
|
||||
sparks.start()
|
||||
proj_hit = 1
|
||||
else if(iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
if(HULK in C.mutations)
|
||||
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
else if(C.status_flags & CANWEAKEN)
|
||||
C.do_jitter_animation(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
|
||||
if(!proj_hit)
|
||||
var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread
|
||||
. = ..()
|
||||
if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - burst into sparks!
|
||||
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
|
||||
sparks.set_up(1, 1, src)
|
||||
sparks.start()
|
||||
proj_hit = 1
|
||||
else if(iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
if(HULK in C.mutations)
|
||||
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
else if(C.status_flags & CANWEAKEN)
|
||||
spawn(5)
|
||||
C.do_jitter_animation(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
|
||||
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
|
||||
sparks.set_up(1, 1, src)
|
||||
sparks.start()
|
||||
..()
|
||||
|
||||
/obj/item/projectile/energy/declone
|
||||
@@ -49,7 +45,6 @@
|
||||
damage_type = CLONE
|
||||
irradiate = 10
|
||||
|
||||
|
||||
/obj/item/projectile/energy/dart
|
||||
name = "dart"
|
||||
icon_state = "toxin"
|
||||
@@ -63,7 +58,6 @@
|
||||
icon_state = "toxin"
|
||||
damage = 10
|
||||
damage_type = TOX
|
||||
nodamage = 0
|
||||
weaken = 5
|
||||
stutter = 5
|
||||
|
||||
@@ -77,12 +71,28 @@
|
||||
stutter = 5
|
||||
|
||||
/obj/item/projectile/energy/bolt/large
|
||||
name = "largebolt"
|
||||
damage = 20
|
||||
|
||||
/obj/item/projectile/energy/plasma
|
||||
/obj/item/projectile/energy/shock_revolver
|
||||
name = "shock bolt"
|
||||
icon_state = "purple_laser"
|
||||
var/chain
|
||||
|
||||
/obj/item/ammo_casing/energy/shock_revolver/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
|
||||
..()
|
||||
var/obj/item/projectile/hook/P = BB
|
||||
spawn(1)
|
||||
P.chain = P.Beam(user,icon_state="purple_lightning",icon = 'icons/effects/effects.dmi',time=1000, maxdistance = 30)
|
||||
|
||||
/obj/item/projectile/energy/shock_revolver/on_hit(atom/target)
|
||||
. = ..()
|
||||
if(isliving(target))
|
||||
tesla_zap(src, 3, 10000)
|
||||
qdel(chain)
|
||||
|
||||
/obj/item/projectile/energy/toxplasma
|
||||
name = "plasma bolt"
|
||||
icon_state = "energy"
|
||||
damage = 20
|
||||
damage_type = TOX
|
||||
irradiate = 20
|
||||
irradiate = 20
|
||||
|
||||
@@ -10,21 +10,8 @@
|
||||
name = "force bolt"
|
||||
|
||||
/obj/item/projectile/forcebolt/on_hit(var/atom/target, var/blocked = 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/forcebolt/strong/on_hit(var/atom/target, var/blocked = 0)
|
||||
|
||||
// NONE OF THIS WORKS. DO NOT USE.
|
||||
var/throwdir = null
|
||||
|
||||
for(var/mob/M in hearers(2, src))
|
||||
if(M.loc != src.loc)
|
||||
throwdir = get_dir(src,target)
|
||||
M.throw_at(get_edge_target_turf(M, throwdir),15,1)
|
||||
return ..()
|
||||
*/
|
||||
. = ..()
|
||||
if(blocked < 100)
|
||||
var/obj/T = target
|
||||
var/throwdir = get_dir(firer,target)
|
||||
T.throw_at(get_edge_target_turf(target, throwdir),10,10)
|
||||
|
||||
@@ -4,15 +4,14 @@
|
||||
damage = 0
|
||||
damage_type = OXY
|
||||
nodamage = 1
|
||||
armour_penetration = 100
|
||||
flag = "magic"
|
||||
|
||||
/obj/item/projectile/magic/death
|
||||
name = "bolt of death"
|
||||
icon_state = "pulse1_bl"
|
||||
damage = 9001
|
||||
damage_type = OXY
|
||||
nodamage = 0
|
||||
flag = "magic"
|
||||
damage_type = BURN //OXY does not kill IPCs
|
||||
damage = 50000
|
||||
|
||||
/obj/item/projectile/magic/fireball
|
||||
name = "bolt of fireball"
|
||||
@@ -20,9 +19,22 @@
|
||||
damage = 10
|
||||
damage_type = BRUTE
|
||||
nodamage = 0
|
||||
flag = "magic"
|
||||
|
||||
/obj/item/projectile/magic/fireball/Range()
|
||||
var/turf/T1 = get_step(src,turn(dir, -45))
|
||||
var/turf/T2 = get_step(src,turn(dir, 45))
|
||||
var/mob/living/L = locate(/mob/living) in T1 //if there's a mob alive in our front right diagonal, we hit it.
|
||||
if(L && L.stat != DEAD)
|
||||
Bump(L) //Magic Bullet #teachthecontroversy
|
||||
return
|
||||
L = locate(/mob/living) in T2
|
||||
if(L && L.stat != DEAD)
|
||||
Bump(L)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/projectile/magic/fireball/on_hit(var/target)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(target)
|
||||
explosion(T, -1, 0, 2, 3, 0, flame_range = 2)
|
||||
if(ismob(target)) //multiple flavors of pain
|
||||
@@ -32,35 +44,13 @@
|
||||
/obj/item/projectile/magic/resurrection
|
||||
name = "bolt of resurrection"
|
||||
icon_state = "ion"
|
||||
damage = 0
|
||||
damage_type = OXY
|
||||
nodamage = 1
|
||||
flag = "magic"
|
||||
|
||||
/obj/item/projectile/magic/resurrection/on_hit(var/mob/living/carbon/target)
|
||||
|
||||
if(istype(target,/mob))
|
||||
var/old_stat = target.stat
|
||||
if(isanimal(target) && target.stat == DEAD)
|
||||
var/mob/living/simple_animal/O = target
|
||||
var/mob/living/simple_animal/A = new O.type(O.loc)
|
||||
A.real_name = O.real_name
|
||||
A.name = O.name
|
||||
if(iscorgi(O))
|
||||
var/mob/living/simple_animal/pet/corgi/C = O
|
||||
if(C.inventory_head)
|
||||
C.inventory_head.loc = C.loc
|
||||
if(C.inventory_back)
|
||||
C.inventory_back.loc = C.loc
|
||||
if(O.mind)
|
||||
O.mind.transfer_to(A)
|
||||
else
|
||||
A.key = O.key
|
||||
qdel(O)
|
||||
target = A
|
||||
else
|
||||
target.revive()
|
||||
target.suiciding = 0
|
||||
. = ..()
|
||||
if(ismob(target))
|
||||
var/old_stat = stat
|
||||
target.suiciding = 0
|
||||
target.revive()
|
||||
if(!target.ckey)
|
||||
for(var/mob/dead/observer/ghost in player_list)
|
||||
if(target.real_name == ghost.real_name)
|
||||
@@ -74,14 +64,11 @@
|
||||
/obj/item/projectile/magic/teleport
|
||||
name = "bolt of teleportation"
|
||||
icon_state = "bluespace"
|
||||
damage = 0
|
||||
damage_type = OXY
|
||||
nodamage = 1
|
||||
flag = "magic"
|
||||
var/inner_tele_radius = 0
|
||||
var/outer_tele_radius = 6
|
||||
|
||||
/obj/item/projectile/magic/teleport/on_hit(var/mob/target)
|
||||
. = ..()
|
||||
var/teleammount = 0
|
||||
var/teleloc = target
|
||||
if(!isturf(target))
|
||||
@@ -97,37 +84,40 @@
|
||||
/obj/item/projectile/magic/door
|
||||
name = "bolt of door creation"
|
||||
icon_state = "energy"
|
||||
damage = 0
|
||||
damage_type = OXY
|
||||
nodamage = 1
|
||||
flag = "magic"
|
||||
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(var/atom/target)
|
||||
. = ..()
|
||||
var/atom/T = target.loc
|
||||
if(isturf(target))
|
||||
if(target.density)
|
||||
new /obj/structure/mineral_door/wood(target)
|
||||
target:ChangeTurf(/turf/simulated/floor/plating)
|
||||
else if (isturf(T))
|
||||
if(T.density)
|
||||
new /obj/structure/mineral_door/wood(T)
|
||||
T:ChangeTurf(/turf/simulated/floor/plating)
|
||||
if(isturf(target) && target.density)
|
||||
CreateDoor(target)
|
||||
else if (isturf(T) && T.density)
|
||||
CreateDoor(T
|
||||
else if(istype(target, /obj/machinery/door))
|
||||
OpenDoor(target))
|
||||
|
||||
/obj/item/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/open/floor/plating)
|
||||
D.Open()
|
||||
|
||||
/obj/item/projectile/magic/change
|
||||
name = "bolt of change"
|
||||
icon_state = "ice_1"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
flag = "magic"
|
||||
|
||||
/obj/item/projectile/magic/change/on_hit(var/atom/change)
|
||||
. = ..()
|
||||
wabbajack(change)
|
||||
|
||||
proc/wabbajack(mob/living/M)
|
||||
if(istype(M))
|
||||
if(istype(M, /mob/living) && M.stat != DEAD)
|
||||
if(M.notransform) return
|
||||
if(M.notransform)
|
||||
return
|
||||
M.notransform = 1
|
||||
M.canmove = 0
|
||||
M.icon = null
|
||||
@@ -136,7 +126,9 @@ proc/wabbajack(mob/living/M)
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/Robot = M
|
||||
if(Robot.mmi) qdel(Robot.mmi)
|
||||
if(Robot.mmi)
|
||||
qdel(Robot.mmi)
|
||||
Robot.notify_ai(1)
|
||||
else
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -146,7 +138,8 @@ proc/wabbajack(mob/living/M)
|
||||
for(var/i in H.internal_organs)
|
||||
qdel(i)
|
||||
for(var/obj/item/W in M)
|
||||
M.unEquip(W)
|
||||
M.unEquip(W, 1)
|
||||
qdel(W)
|
||||
|
||||
var/mob/living/new_mob
|
||||
|
||||
@@ -166,8 +159,6 @@ proc/wabbajack(mob/living/M)
|
||||
Robot.mmi.transfer_identity(M) //Does not transfer key/client.
|
||||
if("slime")
|
||||
new_mob = new /mob/living/carbon/slime(M.loc)
|
||||
/* if(prob(50))
|
||||
new_mob.is_adult = 1*/
|
||||
new_mob.universal_speak = 1
|
||||
if("xeno")
|
||||
if(prob(50))
|
||||
@@ -175,14 +166,6 @@ proc/wabbajack(mob/living/M)
|
||||
else
|
||||
new_mob = new /mob/living/carbon/alien/humanoid/sentinel(M.loc)
|
||||
new_mob.universal_speak = 1
|
||||
|
||||
/*var/alien_caste = pick("Hunter","Sentinel","Drone","Larva")
|
||||
switch(alien_caste)
|
||||
if("Hunter") new_mob = new /mob/living/carbon/alien/humanoid/hunter(M.loc)
|
||||
if("Sentinel") new_mob = new /mob/living/carbon/alien/humanoid/sentinel(M.loc)
|
||||
if("Drone") new_mob = new /mob/living/carbon/alien/humanoid/drone(M.loc)
|
||||
else new_mob = new /mob/living/carbon/alien/larva(M.loc)
|
||||
new_mob.universal_speak = 1*/
|
||||
if("animal")
|
||||
if(prob(50))
|
||||
var/beast = pick("carp","bear","mushroom","statue", "bat", "goat", "tomato")
|
||||
@@ -225,7 +208,6 @@ proc/wabbajack(mob/living/M)
|
||||
randomize = picked_species
|
||||
var/datum/preferences/A = new() //Randomize appearance for the human
|
||||
A.copy_to(new_mob)
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
@@ -246,13 +228,10 @@ proc/wabbajack(mob/living/M)
|
||||
/obj/item/projectile/magic/animate
|
||||
name = "bolt of animation"
|
||||
icon_state = "red_1"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
flag = "magic"
|
||||
|
||||
/obj/item/projectile/magic/animate/Bump(var/atom/change)
|
||||
. = ..()
|
||||
..()
|
||||
if(istype(change, /obj/item) || istype(change, /obj/structure) && !is_type_in_list(change, protected_objects))
|
||||
if(istype(change, /obj/structure/closet/statue))
|
||||
for(var/mob/living/carbon/human/H in change.contents)
|
||||
@@ -273,4 +252,4 @@ proc/wabbajack(mob/living/M)
|
||||
else if(istype(change, /mob/living/simple_animal/hostile/mimic/copy))
|
||||
// Change our allegiance!
|
||||
var/mob/living/simple_animal/hostile/mimic/copy/C = change
|
||||
C.ChangeOwner(firer)
|
||||
C.ChangeOwner(firer)
|
||||
|
||||
@@ -1,42 +1,63 @@
|
||||
/obj/item/projectile/bullet/reusable
|
||||
name = "reusable bullet"
|
||||
desc = "How do you even reuse a bullet?"
|
||||
var/obj/item/ammo_casing/caseless/ammo_type = /obj/item/ammo_casing/caseless/
|
||||
var/hit = 0
|
||||
ammo_type = /obj/item/ammo_casing/caseless/
|
||||
var/dropped = 0
|
||||
|
||||
/obj/item/projectile/bullet/reusable/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(!proj_hit)
|
||||
proj_hit = 1
|
||||
if (src.contents.len)
|
||||
var/obj/content
|
||||
for(content in src.contents)
|
||||
content.loc = src.loc
|
||||
else
|
||||
new ammo_type(src.loc)
|
||||
..()
|
||||
/obj/item/projectile/bullet/reusable/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
handle_drop()
|
||||
|
||||
/obj/item/projectile/bullet/reusable/on_range()
|
||||
if(!proj_hit)
|
||||
if (src.contents.len)
|
||||
var/obj/content
|
||||
for(content in src.contents)
|
||||
content.loc = src.loc
|
||||
else
|
||||
new ammo_type(src.loc)
|
||||
handle_drop()
|
||||
..()
|
||||
|
||||
/obj/item/projectile/bullet/reusable/proc/handle_drop()
|
||||
if(!dropped)
|
||||
new ammo_type(src.loc)
|
||||
dropped = 1
|
||||
|
||||
/obj/item/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
|
||||
name = "foam dart"
|
||||
desc = "I hope you're wearing eye protection."
|
||||
damage = 0 // It's a damn toy.
|
||||
damage_type = OXY
|
||||
nodamage = 1
|
||||
edge = 0
|
||||
embed = 0
|
||||
icon = 'icons/obj/toyguns.dmi'
|
||||
icon_state = "foamdart"
|
||||
ammo_type = /obj/item/ammo_casing/caseless/foam_dart
|
||||
range = 10
|
||||
range = 10
|
||||
var/obj/item/weapon/pen/pen = null
|
||||
edge = 0
|
||||
embed = 0
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/handle_drop()
|
||||
if(dropped)
|
||||
return
|
||||
dropped = 1
|
||||
var/obj/item/ammo_casing/caseless/foam_dart/newdart = new ammo_type(src.loc)
|
||||
var/obj/item/ammo_casing/caseless/foam_dart/old_dart = ammo_casing
|
||||
newdart.modified = old_dart.modified
|
||||
if(pen)
|
||||
var/obj/item/projectile/bullet/reusable/foam_dart/newdart_FD = newdart.BB
|
||||
newdart_FD.pen = pen
|
||||
pen.loc = newdart_FD
|
||||
pen = null
|
||||
newdart.BB.damage = damage
|
||||
newdart.BB.nodamage = nodamage
|
||||
newdart.BB.damage_type = damage_type
|
||||
newdart.update_icon()
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/Destroy()
|
||||
pen = null
|
||||
return ..()
|
||||
|
||||
/obj/item/projectile/bullet/reusable/foam_dart/riot
|
||||
name = "riot foam dart"
|
||||
|
||||
@@ -6,15 +6,15 @@
|
||||
nodamage = 1
|
||||
flag = "energy"
|
||||
|
||||
|
||||
on_hit(var/atom/target, var/blocked = 0)
|
||||
empulse(target, 1, 1)
|
||||
return 1
|
||||
|
||||
/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
|
||||
|
||||
@@ -26,9 +26,10 @@
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
on_hit(var/atom/target, var/blocked = 0)
|
||||
explosion(target, -1, 0, 2)
|
||||
return 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"
|
||||
@@ -43,18 +44,17 @@
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/temp
|
||||
name = "freeze beam"
|
||||
name = "temperature beam"
|
||||
icon_state = "temp_4"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
flag = "energy"
|
||||
var/temperature = 300
|
||||
var/obj/item/weapon/gun/energy/temperature/T = null
|
||||
var/temperature = null
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
|
||||
OnFired()
|
||||
T = shot_from
|
||||
temperature = T.temperature
|
||||
/obj/item/projectile/temp/New()
|
||||
spawn(1)
|
||||
switch(temperature)
|
||||
if(501 to INFINITY)
|
||||
name = "searing beam" //if emagged
|
||||
@@ -86,17 +86,19 @@
|
||||
else
|
||||
name = "temperature beam"//failsafe
|
||||
icon_state = "temp_4"
|
||||
..()
|
||||
|
||||
|
||||
on_hit(var/atom/target, var/blocked = 0)//These two could likely check temp protection on the mob
|
||||
if(istype(target, /mob/living))
|
||||
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/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"
|
||||
@@ -107,26 +109,17 @@
|
||||
nodamage = 1
|
||||
flag = "bullet"
|
||||
|
||||
Bump(atom/A as mob|obj|turf|area)
|
||||
if(A == firer)
|
||||
loc = A.loc
|
||||
return
|
||||
|
||||
sleep(-1) //Might not be important enough for a sleep(-1) but the sleep/spawn itself is necessary thanks to explosions and metoerhits
|
||||
|
||||
if(src)//Do not add to this if() statement, otherwise the meteor won't delete them
|
||||
if(A)
|
||||
|
||||
A.ex_act(2)
|
||||
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||
|
||||
for(var/mob/M in range(10, src))
|
||||
if(!M.stat && !istype(M, /mob/living/silicon/ai))\
|
||||
shake_camera(M, 3, 1)
|
||||
qdel(src)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
/obj/item/projectile/meteor/Bump(atom/A, yes)
|
||||
if(yes)
|
||||
return
|
||||
if(A == firer)
|
||||
loc = A.loc
|
||||
return
|
||||
playsound(src.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"
|
||||
@@ -136,36 +129,31 @@
|
||||
nodamage = 1
|
||||
flag = "energy"
|
||||
|
||||
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("\red [M] writhes in pain as \his vacuoles boil.", 3, "\red You hear the crunching of leaves.", 2)
|
||||
if(prob(35))
|
||||
// for (var/mob/V in viewers(src)) //Public messages commented out to prevent possible metaish genetics experimentation and stuff. - Cheridan
|
||||
// V.show_message("\red [M] is mutated by the radiation beam.", 3, "\red You hear the snapping of twigs.", 2)
|
||||
if(prob(80))
|
||||
randmutb(M)
|
||||
domutcheck(M,null)
|
||||
else
|
||||
randmutg(M)
|
||||
domutcheck(M,null)
|
||||
/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
|
||||
M.adjustFireLoss(rand(5,15))
|
||||
M.show_message("\red The radiation beam singes you!")
|
||||
// for (var/mob/V in viewers(src))
|
||||
// V.show_message("\red [M] is singed by the radiation beam.", 3, "\red You hear the crackle of burning leaves.", 2)
|
||||
else if(istype(target, /mob/living/carbon/))
|
||||
// for (var/mob/V in viewers(src))
|
||||
// V.show_message("The radiation beam dissipates harmlessly through [M]", 3)
|
||||
M.show_message("\blue The radiation beam dissipates harmlessly through your body.")
|
||||
else
|
||||
return 1
|
||||
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"
|
||||
@@ -175,40 +163,42 @@
|
||||
nodamage = 1
|
||||
flag = "energy"
|
||||
|
||||
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("\blue The radiation beam dissipates harmlessly through your body.")
|
||||
else
|
||||
return 1
|
||||
/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"
|
||||
|
||||
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/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"
|
||||
|
||||
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(src.loc)
|
||||
src.visible_message("\red The [src.name] explodes!","\red You hear a snap!")
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
qdel(src)
|
||||
/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(src.loc)
|
||||
src.visible_message("<span class='warning'>The [src.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"
|
||||
@@ -239,11 +229,9 @@ obj/item/projectile/kinetic/New()
|
||||
damage *= 4
|
||||
..()
|
||||
|
||||
/obj/item/projectile/kinetic/Range()
|
||||
range--
|
||||
if(range <= 0)
|
||||
new /obj/item/effect/kinetic_blast(src.loc)
|
||||
qdel(src)
|
||||
/obj/item/projectile/kinetic/on_range()
|
||||
new /obj/effect/kinetic_blast(src.loc)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/kinetic/on_hit(atom/target)
|
||||
. = ..()
|
||||
@@ -268,6 +256,40 @@ obj/item/projectile/kinetic/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
|
||||
@@ -278,25 +300,6 @@ obj/item/projectile/kinetic/New()
|
||||
explosion(target, -1, 0, 1)
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/energy/teleport
|
||||
name = "teleportation burst"
|
||||
icon_state = "bluespace"
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
var/obj/item/weapon/gun/energy/telegun/T = null
|
||||
var/teleport_target = null
|
||||
|
||||
OnFired()
|
||||
T = shot_from
|
||||
teleport_target = T.teleport_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/plasma
|
||||
name = "plasma blast"
|
||||
icon_state = "plasmacutter"
|
||||
@@ -321,8 +324,9 @@ obj/item/projectile/kinetic/New()
|
||||
if(istype(target, /turf/simulated/mineral))
|
||||
var/turf/simulated/mineral/M = target
|
||||
M.gets_drilled(firer)
|
||||
range = max(range - 1, 1)
|
||||
return -1
|
||||
Range()
|
||||
if(range > 0)
|
||||
return -1
|
||||
|
||||
/obj/item/projectile/plasma/adv
|
||||
range = 5
|
||||
@@ -331,29 +335,24 @@ obj/item/projectile/kinetic/New()
|
||||
damage = 10
|
||||
range = 6
|
||||
|
||||
/obj/item/projectile/beam/wormhole
|
||||
name = "bluespace beam"
|
||||
icon_state = "spark"
|
||||
hitsound = "sparks"
|
||||
damage = 3
|
||||
var/obj/item/weapon/gun/energy/wormhole_projector/gun = null
|
||||
color = "#33CCFF"
|
||||
/obj/item/projectile/energy/teleport
|
||||
name = "teleportation burst"
|
||||
icon_state = "bluespace"
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
var/obj/item/weapon/gun/energy/telegun/T = null
|
||||
var/teleport_target = null
|
||||
|
||||
/obj/item/projectile/beam/wormhole/orange
|
||||
name = "orange bluespace beam"
|
||||
color = "#FF6600"
|
||||
OnFired()
|
||||
T = shot_from
|
||||
teleport_target = T.teleport_target
|
||||
|
||||
/obj/item/projectile/beam/wormhole/OnFired()
|
||||
gun = shot_from
|
||||
|
||||
/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/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"
|
||||
@@ -363,6 +362,7 @@ obj/item/projectile/kinetic/New()
|
||||
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!
|
||||
@@ -380,9 +380,10 @@ obj/item/projectile/kinetic/New()
|
||||
..()
|
||||
|
||||
/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
|
||||
return 1
|
||||
|
||||
Reference in New Issue
Block a user