Files
vgstation13/code/modules/projectiles/projectile/rocket.dm
2015-08-24 14:58:47 +02:00

167 lines
4.2 KiB
Plaintext

/obj/item/projectile/rocket
name = "rocket"
icon_state = "rpground"
damage = 50
stun = 5
weaken = 5
damage_type = BRUTE
nodamage = 0
flag = "bullet"
var/embed = 1
var/picked_up_speed = 5
/obj/item/projectile/rocket/process_step()
if(src.loc)
if(picked_up_speed > 1)
picked_up_speed--
if(dist_x > dist_y)
bresenham_step(dist_x,dist_y,dx,dy)
else
bresenham_step(dist_y,dist_x,dy,dx)
if(linear_movement)
update_pixel()
pixel_x = PixelX
pixel_y = PixelY
sleep(picked_up_speed)
/obj/item/projectile/rocket/Bump(var/atom/rocket)
explosion(rocket, -1, 1, 4, 8)
qdel(src)
/obj/item/projectile/nikita
name = "\improper Nikita missile"
desc = "One does not simply dodge a nikita missile."
icon = 'icons/obj/projectiles_experimental.dmi'
icon_state = "nikita"
damage = 50
stun = 5
weaken = 5
damage_type = BRUTE
nodamage = 0
flag = "bullet"
animate_movement = 2
linear_movement = 0
kill_count = 100
layer = 13
var/mob/living/carbon/mob = null
var/obj/item/weapon/gun/projectile/rocketlauncher/nikita/nikita = null
var/steps_since_last_turn = 0
var/last_dir = null
var/emagged = 0//the value is set by the Nikita when it fires it
/obj/item/projectile/nikita/OnFired()
nikita = shot_from
emagged = nikita.emagged
if(nikita && istype(nikita.loc,/mob/living/carbon))
var/mob/living/carbon/C = nikita.loc
if(C.get_active_hand() == nikita)
mob = C
mob.client.perspective = EYE_PERSPECTIVE
mob.client.eye = src
mob.orient_object = src
mob.canmove = 0
dir = get_dir_cardinal(starting,original)
last_dir = dir
if(mob && emagged)
for(var/obj/item/W in mob.get_all_slots())
mob.drop_from_inventory(W)//were you're going you won't need those!
/obj/item/projectile/nikita/emp_act(severity)
new/obj/item/ammo_casing/rocket_rpg/nikita(get_turf(src))
if(nikita)
nikita.fired = null
qdel(src)
/obj/item/projectile/nikita/bullet_act(var/obj/item/projectile/Proj)
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)||istype(Proj,/obj/item/projectile/ricochet))
if(!istype(Proj ,/obj/item/projectile/beam/lastertag) && !istype(Proj ,/obj/item/projectile/beam/practice) )
detonate()
/obj/item/projectile/nikita/Destroy()
reset_view()
if(nikita)
nikita.fired = null
..()
/obj/item/projectile/nikita/Bump(var/atom/A)
if(bumped)
return
if(emagged && (A == mob))
return
bumped = 1
detonate(get_turf(A))
/obj/item/projectile/nikita/Bumped(var/atom/A)
if(emagged && (A == mob))
return
detonate()
/obj/item/projectile/nikita/process_step()
if(!emagged && !check_user())//if the original user dropped the Nikita and the missile is still in the air, we check if someone picked it up.
if(nikita && istype(nikita.loc,/mob/living/carbon))
var/mob/living/carbon/C = nikita.loc
if(C.get_active_hand() == nikita)
mob = C
mob.client.perspective = EYE_PERSPECTIVE
mob.client.eye = src
mob.orient_object = src
mob.canmove = 0
if(src.loc)
var/atom/step = get_step(src, dir)
if(!step)
qdel(src)
src.Move(step)
if(mob)
if(emagged)
mob.loc = loc
mob.dir = dir
else
mob.dir = get_dir(mob,src)
if(!emagged)
kill_count--
if(!kill_count)
detonate()
if(kill_count == (initial(kill_count)/5))
mob.playsound_local(mob, 'sound/machines/twobeep.ogg', 30, 1)
mob << "<span class='warning'>WARNING: 20% fuel left on missile before self-detonation.<span>"
if(dir != last_dir)
last_dir = dir
steps_since_last_turn = 0
var/sleeptime = max(1,(steps_since_last_turn * -1) + 5)//5, 4, 3, 2, 1, 1, 1, 1, 1,...
steps_since_last_turn++
sleep(sleeptime)
/obj/item/projectile/nikita/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
return (!density || !height || air_group)
/obj/item/projectile/nikita/proc/check_user()
if(!mob || !mob.client)
return 0
if(mob.stat || (mob.get_active_hand() != src))
reset_view()
return 0
return 1
/obj/item/projectile/nikita/proc/detonate(var/explosion = loc)
explosion(explosion, -1, 1, 4, 8)
if(src)
qdel(src)
/obj/item/projectile/nikita/proc/reset_view()
if(mob && mob.client)
mob.client.eye = mob.client.mob
mob.client.perspective = MOB_PERSPECTIVE
mob.orient_object = null
mob.canmove = 1
mob = null