mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
bounce
This commit is contained in:
@@ -357,8 +357,7 @@
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "stickybomb"
|
||||
flags = FPRINT
|
||||
siemens_coefficient = 1
|
||||
slot_flags = SLOT_BELT
|
||||
force = 1
|
||||
throwforce = 1
|
||||
w_class = 1.0
|
||||
var/obj/item/weapon/gun/stickybomb/fired_from = null
|
||||
@@ -367,6 +366,11 @@
|
||||
var/image/self_overlay = null
|
||||
var/signal = 0
|
||||
|
||||
/obj/item/stickybomb/New()
|
||||
..()
|
||||
pixel_x = rand(-5.0, 5)
|
||||
pixel_y = rand(-5.0, 5)
|
||||
|
||||
/obj/item/stickybomb/Destroy()
|
||||
if(fired_from)
|
||||
fired_from.fired -= src
|
||||
@@ -566,3 +570,68 @@
|
||||
icon_state = "nikita"
|
||||
caliber = "nikita"
|
||||
projectile_type = "/obj/item/projectile/nikita"
|
||||
|
||||
|
||||
/obj/item/weapon/gun/osipr
|
||||
name = "\improper Overwatch Standard Issue Pulse Rifle"
|
||||
desc = "Centuries ago those weapons striked fear in all of humanity when the Combine attacked the Earth. Nowadays these are just the best guns that the Syndicate can provide to its Elite Troops with its tight budget."
|
||||
icon = 'icons/obj/gun_experimental.dmi'
|
||||
icon_state = "osipr"
|
||||
item_state = "osipr"
|
||||
origin_tech = null
|
||||
inhand_states = list("left_hand" = 'icons/mob/in-hand/left/guns_experimental.dmi', "right_hand" = 'icons/mob/in-hand/right/guns_experimental.dmi')
|
||||
recoil = 1
|
||||
w_class = 3.0
|
||||
fire_sound = 'sound/weapons/osipr_fire.ogg'
|
||||
var/obj/item/osipr_magazine/magazine = null
|
||||
var/energy_balls = 2
|
||||
|
||||
/obj/item/weapon/gun/osipr/New()
|
||||
..()
|
||||
magazine = new(src)
|
||||
|
||||
/obj/item/weapon/gun/osipr/Destroy()
|
||||
if(magazine)
|
||||
qdel(magazine)
|
||||
..()
|
||||
|
||||
#define OSIPR_MAG_FULL 30
|
||||
|
||||
/obj/item/osipr_magazine
|
||||
name = "pulse magazine"
|
||||
desc = "Primary ammo for OSIPR."
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "osipr-magfull"
|
||||
flags = FPRINT
|
||||
force = 1
|
||||
throwforce = 1
|
||||
w_class = 3.0
|
||||
var/bullets = OSIPR_MAG_FULL
|
||||
|
||||
/obj/item/osipr_magazine/New()
|
||||
..()
|
||||
pixel_x = rand(-5.0, 5)
|
||||
pixel_y = rand(-5.0, 5)
|
||||
|
||||
/obj/item/osipr_magazine/update_icon()
|
||||
if(bullets == OSIPR_MAG_FULL)
|
||||
icon_state = "osipr-magfull"
|
||||
else
|
||||
icon_state = "osipr-mag"
|
||||
|
||||
#undef OSIPR_MAG_FULL
|
||||
|
||||
/obj/item/osipr_core
|
||||
name = "dark energy core"
|
||||
desc = "Secondary ammo for OSIPR."
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "osipr-core"
|
||||
flags = FPRINT
|
||||
force = 1
|
||||
throwforce = 1
|
||||
w_class = 3.0
|
||||
|
||||
/obj/item/osipr_core/New()
|
||||
..()
|
||||
pixel_x = rand(-5.0, 5)
|
||||
pixel_y = rand(-5.0, 5)
|
||||
|
||||
@@ -52,6 +52,7 @@ var/list/impact_master = list()
|
||||
var/eyeblur = 0
|
||||
var/drowsy = 0
|
||||
var/agony = 0
|
||||
var/jittery = 0
|
||||
|
||||
var/step_delay = 0 //how long it goes between moving. You should probably leave this as 0 for a lot of things
|
||||
|
||||
@@ -65,6 +66,12 @@ var/list/impact_master = list()
|
||||
var/error = 0
|
||||
var/target_angle = 0
|
||||
|
||||
var/override_starting_X = 0
|
||||
var/override_starting_Y = 0
|
||||
var/override_target_X = 0
|
||||
var/override_target_Y = 0
|
||||
var/last_bump = null
|
||||
|
||||
var/custom_impact = 0
|
||||
|
||||
//update_pixel stuff
|
||||
@@ -88,6 +95,8 @@ var/list/impact_master = list()
|
||||
var/mob/living/L = atarget
|
||||
if(L.flags & INVULNERABLE) return 0
|
||||
L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked) // add in AGONY!
|
||||
if(jittery)
|
||||
L.Jitter(jittery)
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/proc/check_fire(var/mob/living/target as mob, var/mob/living/user as mob) //Checks if you can hit them or not.
|
||||
@@ -249,6 +258,7 @@ var/list/impact_master = list()
|
||||
//del(src)
|
||||
returnToPool(src)
|
||||
OnDeath()
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -270,6 +280,11 @@ var/list/impact_master = list()
|
||||
dist_x = abs(target.x - starting.x)
|
||||
dist_y = abs(target.y - starting.y)
|
||||
|
||||
override_starting_X = starting.x
|
||||
override_starting_Y = starting.y
|
||||
override_target_X = target.x
|
||||
override_target_Y = target.y
|
||||
|
||||
if (target.x > starting.x)
|
||||
dx = EAST
|
||||
else
|
||||
@@ -309,6 +324,9 @@ var/list/impact_master = list()
|
||||
update_pixel()
|
||||
pixel_x = PixelX
|
||||
pixel_y = PixelY
|
||||
|
||||
bumped = 0
|
||||
|
||||
sleep(sleeptime)
|
||||
|
||||
|
||||
@@ -342,15 +360,23 @@ var/list/impact_master = list()
|
||||
|
||||
/obj/item/projectile/proc/update_pixel()
|
||||
if(src && starting && target)
|
||||
var/AX = (starting.x - src.x)*32
|
||||
var/AY = (starting.y - src.y)*32
|
||||
var/BX = (target.x - src.x)*32
|
||||
var/BY = (target.y - src.y)*32
|
||||
var/AX = (override_starting_X - src.x)*32
|
||||
var/AY = (override_starting_Y - src.y)*32
|
||||
var/BX = (override_target_X - src.x)*32
|
||||
var/BY = (override_target_Y - src.y)*32
|
||||
var/XX = (((BX-AX)*(-BX))+((BY-AY)*(-BY)))/(((BX-AX)*(BX-AX))+((BY-AY)*(BY-AY)))
|
||||
|
||||
PixelX = round(BX+((BX-AX)*XX))
|
||||
PixelY = round(BY+((BY-AY)*XX))
|
||||
|
||||
switch(last_bump)
|
||||
if(NORTH)
|
||||
PixelY -= 16
|
||||
if(SOUTH)
|
||||
PixelY += 16
|
||||
if(EAST)
|
||||
PixelX -= 16
|
||||
if(WEST)
|
||||
PixelX += 16
|
||||
return
|
||||
|
||||
/obj/item/projectile/proc/bullet_die()
|
||||
|
||||
@@ -915,3 +915,77 @@
|
||||
mob.orient_object = null
|
||||
mob.canmove = 1
|
||||
mob = null
|
||||
|
||||
/obj/item/projectile/bullet/osipr
|
||||
icon = 'icons/obj/projectiles_experimental.dmi'
|
||||
icon_state = "osipr"
|
||||
damage = 50
|
||||
|
||||
/obj/item/projectile/energy/osipr
|
||||
icon = 'icons/obj/projectiles_experimental.dmi'
|
||||
icon_state = "osipr"
|
||||
damage = 50
|
||||
stun = 10
|
||||
weaken = 10
|
||||
stutter = 10
|
||||
jittery = 10
|
||||
|
||||
/obj/item/projectile/proc/rebound(var/atom/A)
|
||||
var/turf/T = get_turf(src)
|
||||
var/turf/W = get_turf(A)
|
||||
var/orientation = SOUTH
|
||||
if(T == W)
|
||||
orientation = dir
|
||||
else
|
||||
orientation = get_dir(T,W)
|
||||
last_bump = orientation
|
||||
switch(orientation)
|
||||
if(NORTH)
|
||||
dy = SOUTH
|
||||
override_starting_Y = (W.y * 2) - override_starting_Y
|
||||
override_target_Y = (W.y * 2) - override_target_Y
|
||||
if(SOUTH)
|
||||
dy = NORTH
|
||||
override_starting_Y = (W.y * 2) - override_starting_Y
|
||||
override_target_Y = (W.y * 2) - override_target_Y
|
||||
if(EAST)
|
||||
dx = WEST
|
||||
override_starting_X = (W.x * 2) - override_starting_X
|
||||
override_target_X = (W.x * 2) - override_target_X
|
||||
if(WEST)
|
||||
dx = EAST
|
||||
override_starting_X = (W.x * 2) - override_starting_X
|
||||
override_target_X = (W.x * 2) - override_target_X
|
||||
var/newdiffX = override_target_X - override_starting_X
|
||||
var/newdiffY = override_target_Y - override_starting_Y
|
||||
|
||||
override_starting_X = W.x
|
||||
override_starting_Y = W.y
|
||||
override_target_X = W.x + newdiffX
|
||||
override_target_Y = W.y + newdiffY
|
||||
|
||||
var/disty
|
||||
var/distx
|
||||
var/newangle
|
||||
disty = (32 * override_target_Y)-(32 * override_starting_Y)
|
||||
distx = (32 * override_target_X)-(32 * override_starting_X)
|
||||
if(!disty)
|
||||
if(distx >= 0)
|
||||
newangle = 90
|
||||
else
|
||||
newangle = 270
|
||||
else
|
||||
newangle = arctan(distx/disty)
|
||||
if(disty < 0)
|
||||
newangle += 180
|
||||
else if(distx < 0)
|
||||
newangle += 360
|
||||
|
||||
target_angle = round(newangle)
|
||||
|
||||
if(linear_movement)
|
||||
if( !("[icon_state][target_angle]" in bullet_master) )
|
||||
var/icon/I = new(initial(icon),"[icon_state]_pixel")
|
||||
I.Turn(target_angle+45)
|
||||
bullet_master["[icon_state]_angle[target_angle]"] = I
|
||||
src.icon = bullet_master["[icon_state]_angle[target_angle]"]
|
||||
|
||||
Reference in New Issue
Block a user