From b5d6afac9a060fbddcd6d956d9dd454a6baeefa3 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 7 Feb 2020 03:20:45 -0700 Subject: [PATCH 1/6] Update gravity.dm --- code/modules/projectiles/ammunition/energy/gravity.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/projectiles/ammunition/energy/gravity.dm b/code/modules/projectiles/ammunition/energy/gravity.dm index eabb4f66d7..be7b618803 100644 --- a/code/modules/projectiles/ammunition/energy/gravity.dm +++ b/code/modules/projectiles/ammunition/energy/gravity.dm @@ -15,15 +15,15 @@ . = ..() /obj/item/ammo_casing/energy/gravity/repulse - projectile_type = /obj/item/projectile/gravityrepulse + projectile_type = /obj/item/projectile/gravity/repulse select_name = "repulse" /obj/item/ammo_casing/energy/gravity/attract - projectile_type = /obj/item/projectile/gravityattract + projectile_type = /obj/item/projectile/gravity/attract select_name = "attract" /obj/item/ammo_casing/energy/gravity/chaos - projectile_type = /obj/item/projectile/gravitychaos + projectile_type = /obj/item/projectile/gravity/chaos select_name = "chaos" From 673079f99568238e31e8b958d8a06b3bd3e613aa Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 7 Feb 2020 03:31:15 -0700 Subject: [PATCH 2/6] Update gravity.dm --- .../projectiles/projectile/special/gravity.dm | 141 ++++++++---------- 1 file changed, 62 insertions(+), 79 deletions(-) diff --git a/code/modules/projectiles/projectile/special/gravity.dm b/code/modules/projectiles/projectile/special/gravity.dm index 0ef9bc6653..6c298d0d51 100644 --- a/code/modules/projectiles/projectile/special/gravity.dm +++ b/code/modules/projectiles/projectile/special/gravity.dm @@ -1,90 +1,73 @@ -/obj/item/projectile/gravityrepulse +/obj/item/projectile/gravity + name = "gravity bolt" + icon = 'icons/effects/effects.dmi' + icon_state = "chronofield" + hitsound = 'sound/weapons/wave.ogg' + damage = 0 + damage_type = BRUTE + nodamage = TRUE + var/power = 4 + var/list/thrown = list() //normally we wouldn't need this but incase on_hit is called multiple times, yeah.. this is a good idea. + +/obj/item/projectile/gravity/Initialize(mapload) + . = ..() + var/obj/item/ammo_casing/energy/gravity/G = loc + if(istype(G)) + power = min(G.gun.power, 15) + +/obj/item/projectile/gravity/on_hit() + . = ..() + var/turf/T = get_turf(src) + var/list/tothrow + var/list/mobs = list() + var/list/objs = list() + var/list/cachedrange = range(T, power) + for(var/mob/M in cachedrange) + mobs += M + for(var/obj/O in cachedrange) + objs += O + tothrow = mobs + objs //mobs priority + var/safety = 50 + for(var/i in tothrow) + if(!safety) + break + var/atom/movable/AM = i + if(can_throw(AM, thrown) && do_the_throw(T, AM, thrown)) + safety-- + for(var/turf/F in range(T,power)) + new /obj/effect/temp_visual/gravpush(F) + +/obj/item/projectile/gravity/proc/can_throw(atom/movable/AM, list/thrown) + return (AM != src) && (AM != firer) && !AM.anchored && !thrown[AM] + +/obj/item/projectile/garvity/proc/do_the_throw(turf/origin, atom/movable/AM, list/thrown) + thrown[AM] = TRUE + var/target = get_target(origin, AM) + if(!target) + return FALSE + AM.throw_at(target, power + 1, 1) + return TRUE + +/obj/item/projectile/gravity/proc/get_target(turf/origin, atom/movable/AM) + return origin + +/obj/item/projectile/gravity/repulse name = "repulsion bolt" - icon = 'icons/effects/effects.dmi' - icon_state = "chronofield" - hitsound = 'sound/weapons/wave.ogg' - damage = 0 - damage_type = BRUTE - nodamage = 1 color = "#33CCFF" - var/turf/T - var/power = 4 - var/list/thrown_items = list() -/obj/item/projectile/gravityrepulse/Initialize() - . = ..() - var/obj/item/ammo_casing/energy/gravity/repulse/C = loc - if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items - power = min(C.gun.power, 15) +/obj/item/projectile/gravity/repulse/get_target(turf/origin, atom/movable/AM) + return get_turf_in_angle(Get_Angle(origin, AM), origin, power) -/obj/item/projectile/gravityrepulse/on_hit() - . = ..() - T = get_turf(src) - for(var/atom/movable/A in range(T, power)) - if(A == src || (firer && A == src.firer) || A.anchored || thrown_items[A]) - continue - var/throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(A, src))) - A.throw_at(throwtarget,power+1,1) - thrown_items[A] = A - for(var/turf/F in range(T,power)) - new /obj/effect/temp_visual/gravpush(F) - -/obj/item/projectile/gravityattract +/obj/item/projectile/gravity/attract name = "attraction bolt" - icon = 'icons/effects/effects.dmi' - icon_state = "chronofield" - hitsound = 'sound/weapons/wave.ogg' - damage = 0 - damage_type = BRUTE - nodamage = 1 color = "#FF6600" - var/turf/T - var/power = 4 - var/list/thrown_items = list() -/obj/item/projectile/gravityattract/Initialize() - . = ..() - var/obj/item/ammo_casing/energy/gravity/attract/C = loc - if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items - power = min(C.gun.power, 15) +/obj/item/projectile/gravity/attract/get_target(turf/origin, atom/movable/AM) + return origin -/obj/item/projectile/gravityattract/on_hit() - . = ..() - T = get_turf(src) - for(var/atom/movable/A in range(T, power)) - if(A == src || (firer && A == src.firer) || A.anchored || thrown_items[A]) - continue - A.throw_at(T, power+1, 1) - thrown_items[A] = A - for(var/turf/F in range(T,power)) - new /obj/effect/temp_visual/gravpush(F) - -/obj/item/projectile/gravitychaos +/obj/item/projectile/gravity/chaos name = "gravitational blast" - icon = 'icons/effects/effects.dmi' - icon_state = "chronofield" - hitsound = 'sound/weapons/wave.ogg' - damage = 0 - damage_type = BRUTE - nodamage = 1 color = "#101010" - var/turf/T - var/power = 4 - var/list/thrown_items = list() -/obj/item/projectile/gravitychaos/Initialize() - . = ..() - var/obj/item/ammo_casing/energy/gravity/chaos/C = loc - if(istype(C)) //Hard-coded maximum power so servers can't be crashed by trying to throw the entire Z level's items - power = min(C.gun.power, 15) - -/obj/item/projectile/gravitychaos/on_hit() - . = ..() - T = get_turf(src) - for(var/atom/movable/A in range(T, power)) - if(A == src|| (firer && A == src.firer) || A.anchored || thrown_items[A]) - continue - A.throw_at(get_edge_target_turf(A, pick(GLOB.cardinals)), power+1, 1) - thrown_items[A] = A - for(var/turf/Z in range(T,power)) - new /obj/effect/temp_visual/gravpush(Z) +/obj/item/projectile/gravity/chaos/get_target(turf/origin, atom/movable/AM) + return get_turf_in_angle(rand(0, 359), origin, power) From f8d5eae0c3b54b40bde153c4fa4eb07e7acd3d0a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 7 Feb 2020 16:24:12 -0700 Subject: [PATCH 3/6] Update gravity.dm --- code/modules/projectiles/projectile/special/gravity.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile/special/gravity.dm b/code/modules/projectiles/projectile/special/gravity.dm index 6c298d0d51..0efdc77806 100644 --- a/code/modules/projectiles/projectile/special/gravity.dm +++ b/code/modules/projectiles/projectile/special/gravity.dm @@ -40,7 +40,7 @@ /obj/item/projectile/gravity/proc/can_throw(atom/movable/AM, list/thrown) return (AM != src) && (AM != firer) && !AM.anchored && !thrown[AM] -/obj/item/projectile/garvity/proc/do_the_throw(turf/origin, atom/movable/AM, list/thrown) +/obj/item/projectile/gravity/proc/do_the_throw(turf/origin, atom/movable/AM, list/thrown) thrown[AM] = TRUE var/target = get_target(origin, AM) if(!target) From 0b28e17860fbc89cac3da4b7cbca20867f36ca9c Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 10 Feb 2020 04:13:59 -0700 Subject: [PATCH 4/6] Update gravity.dm --- code/modules/projectiles/projectile/special/gravity.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/projectiles/projectile/special/gravity.dm b/code/modules/projectiles/projectile/special/gravity.dm index 0efdc77806..418548bac9 100644 --- a/code/modules/projectiles/projectile/special/gravity.dm +++ b/code/modules/projectiles/projectile/special/gravity.dm @@ -32,15 +32,14 @@ if(!safety) break var/atom/movable/AM = i - if(can_throw(AM, thrown) && do_the_throw(T, AM, thrown)) + if(do_the_throw(T, AM, thrown)) safety-- for(var/turf/F in range(T,power)) new /obj/effect/temp_visual/gravpush(F) -/obj/item/projectile/gravity/proc/can_throw(atom/movable/AM, list/thrown) - return (AM != src) && (AM != firer) && !AM.anchored && !thrown[AM] - /obj/item/projectile/gravity/proc/do_the_throw(turf/origin, atom/movable/AM, list/thrown) + if((AM == src) || (AM == firer) || AM.anchored || thrown[AM]) + return thrown[AM] = TRUE var/target = get_target(origin, AM) if(!target) From d40608625847b4fe132a406c31ca3ad26bf6cddc Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 10 Feb 2020 04:26:26 -0700 Subject: [PATCH 5/6] Update gravity.dm --- .../projectiles/projectile/special/gravity.dm | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/code/modules/projectiles/projectile/special/gravity.dm b/code/modules/projectiles/projectile/special/gravity.dm index 418548bac9..359d255092 100644 --- a/code/modules/projectiles/projectile/special/gravity.dm +++ b/code/modules/projectiles/projectile/special/gravity.dm @@ -32,21 +32,17 @@ if(!safety) break var/atom/movable/AM = i - if(do_the_throw(T, AM, thrown)) - safety-- + if((AM == src) || (AM == firer) || (AM.move_resist > MOVE_FORCE_EXTREMELY_STRONG) || AM.anchored || thrown[AM]) + continue + thrown[AM] = TRUE + safety-- + var/target = get_target(T, AM) + if(!target) + return FALSE + AM.throw_at(target, power + 1, 1) for(var/turf/F in range(T,power)) new /obj/effect/temp_visual/gravpush(F) -/obj/item/projectile/gravity/proc/do_the_throw(turf/origin, atom/movable/AM, list/thrown) - if((AM == src) || (AM == firer) || AM.anchored || thrown[AM]) - return - thrown[AM] = TRUE - var/target = get_target(origin, AM) - if(!target) - return FALSE - AM.throw_at(target, power + 1, 1) - return TRUE - /obj/item/projectile/gravity/proc/get_target(turf/origin, atom/movable/AM) return origin From f1e0c621412ef7c62dfd8fbd565bd5ee02f1cfc7 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 12 Feb 2020 23:59:03 -0700 Subject: [PATCH 6/6] Update gravity.dm --- code/modules/projectiles/projectile/special/gravity.dm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/code/modules/projectiles/projectile/special/gravity.dm b/code/modules/projectiles/projectile/special/gravity.dm index 359d255092..ba21ecb28c 100644 --- a/code/modules/projectiles/projectile/special/gravity.dm +++ b/code/modules/projectiles/projectile/special/gravity.dm @@ -18,15 +18,12 @@ /obj/item/projectile/gravity/on_hit() . = ..() var/turf/T = get_turf(src) - var/list/tothrow - var/list/mobs = list() - var/list/objs = list() + var/list/tothrow = list() var/list/cachedrange = range(T, power) for(var/mob/M in cachedrange) - mobs += M + tothrow += M for(var/obj/O in cachedrange) - objs += O - tothrow = mobs + objs //mobs priority + tothrow += O var/safety = 50 for(var/i in tothrow) if(!safety)