mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-27 14:07:51 +01:00
Completely reworks the tesla revolver (need to work on damage values) (#20295)
* part one: the rest of a fucking owl * kit * shocking changes Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Update code/modules/projectiles/projectile/energy.dm Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> * Update code/modules/projectiles/projectile/energy.dm Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> * Update energy_projectiles.dm --------- Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
This commit is contained in:
co-authored by
SteelSlayer
Henri215
Ryan
parent
66831d6a8a
commit
5197d1b62a
@@ -31,9 +31,9 @@
|
||||
origin_tech = "combat=4;magnets=4;powerstorage=4"
|
||||
|
||||
/obj/item/weaponcrafting/gunkit/tesla
|
||||
name = "\improper tesla revolver parts kit"
|
||||
desc = "A suitcase containing the necessary gun parts to construct a tesla revolver around a laser rifle. Handle with care."
|
||||
origin_tech = "combat=4;materials=4;powerstorage=4"
|
||||
name = "\improper arc revolver parts kit"
|
||||
desc = "A suitcase containing the necessary gun parts to construct a arc revolver around a laser rifle. Handle with care."
|
||||
origin_tech = "combat=5;materials=5;powerstorage=5"
|
||||
|
||||
/obj/item/weaponcrafting/gunkit/xray
|
||||
name = "\improper x-ray laser gun parts kit"
|
||||
|
||||
@@ -189,9 +189,9 @@
|
||||
blacklist += subtypesof(/obj/item/gun/energy/laser)
|
||||
|
||||
/datum/crafting_recipe/teslarevolver
|
||||
name = "Tesla Revolver"
|
||||
name = "Arc Revolver"
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
result = list(/obj/item/gun/energy/shock_revolver)
|
||||
result = list(/obj/item/gun/energy/arc_revolver)
|
||||
reqs = list(/obj/item/gun/energy/laser = 1,
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/weaponcrafting/gunkit/tesla = 1)
|
||||
|
||||
@@ -336,7 +336,7 @@ Difficulty: Hard
|
||||
var/turf/S = get_turf(src)
|
||||
if(!S || !T)
|
||||
return
|
||||
var/obj/item/projectile/energy/shock_revolver/ancient/O = new /obj/item/projectile/energy/shock_revolver/ancient(S)
|
||||
var/obj/item/projectile/energy/tesla_bolt/O = new /obj/item/projectile/energy/tesla_bolt(S)
|
||||
O.current = S
|
||||
O.yo = T.y - S.y
|
||||
O.xo = T.x - S.x
|
||||
@@ -692,10 +692,28 @@ Difficulty: Hard
|
||||
icon_state = "small1"
|
||||
duration = 20
|
||||
|
||||
/obj/item/projectile/energy/shock_revolver/ancient
|
||||
damage = 5
|
||||
|
||||
/obj/item/projectile/energy/shock_revolver/ancient/Bump(atom/A, yes) // Don't want the projectile hitting the legs
|
||||
/obj/item/projectile/energy/tesla_bolt //Leaving here for adminbus / so vetus still uses it.
|
||||
name = "shock bolt"
|
||||
icon_state = "purple_laser"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
|
||||
damage = 5 //A worse lasergun
|
||||
var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE
|
||||
var/zap_range = 3
|
||||
var/power = 10000
|
||||
|
||||
/obj/item/ammo_casing/energy/tesla_bolt/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
|
||||
..()
|
||||
var/obj/item/projectile/energy/tesla_bolt/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/tesla_bolt/on_hit(atom/target)
|
||||
. = ..()
|
||||
tesla_zap(src, zap_range, power, zap_flags)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/energy/tesla_bolt/Bump(atom/A, yes) // Don't want the projectile hitting the legs
|
||||
if(!istype(/mob/living/simple_animal/hostile/ancient_robot_leg, A))
|
||||
return ..()
|
||||
var/turf/target_turf = get_turf(A)
|
||||
|
||||
@@ -239,12 +239,31 @@
|
||||
/obj/item/ammo_casing/energy/plasma/adv
|
||||
projectile_type = /obj/item/projectile/plasma/adv
|
||||
|
||||
/obj/item/ammo_casing/energy/shock_revolver
|
||||
/obj/item/ammo_casing/energy/tesla_bolt
|
||||
fire_sound = 'sound/magic/lightningbolt.ogg'
|
||||
e_cost = 200
|
||||
select_name = "lightning beam"
|
||||
muzzle_flash_color = LIGHT_COLOR_FADEDPURPLE
|
||||
projectile_type = /obj/item/projectile/energy/shock_revolver
|
||||
projectile_type = /obj/item/projectile/energy/tesla_bolt
|
||||
|
||||
/obj/item/ammo_casing/energy/arc_revolver
|
||||
fire_sound = 'sound/magic/lightningbolt.ogg' //New sound
|
||||
e_cost = 125 //8 shots?
|
||||
select_name = "lightning beam" //I guess
|
||||
muzzle_flash_color = LIGHT_COLOR_FADEDPURPLE // Depends on sprite
|
||||
projectile_type = /obj/item/projectile/energy/arc_revolver
|
||||
///This number is randomly generated when the arc revolver is made. This ensures the beams only link to beams from the gun, one lower or higher than the number on the boosted object.
|
||||
var/random_link_number
|
||||
|
||||
/obj/item/ammo_casing/energy/arc_revolver/Initialize()
|
||||
. = ..()
|
||||
random_link_number = rand(1, 9999999)
|
||||
|
||||
/obj/item/ammo_casing/energy/arc_revolver/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
|
||||
..()
|
||||
var/obj/item/projectile/energy/arc_revolver/P = BB
|
||||
P.charge_number = random_link_number
|
||||
random_link_number++
|
||||
|
||||
/obj/item/ammo_casing/energy/weak_plasma
|
||||
projectile_type = /obj/item/projectile/energy/weak_plasma
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
ammo_x_offset = 3
|
||||
can_holster = TRUE // Pistol size
|
||||
|
||||
/obj/item/gun/energy/shock_revolver
|
||||
name = "tesla revolver"
|
||||
desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers."
|
||||
/obj/item/gun/energy/arc_revolver
|
||||
name = "arc revolver"
|
||||
desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers. These shots charge whatever they hit, causing arcs of electricity to form between them."
|
||||
icon_state = "stunrevolver"
|
||||
item_state = "gun"
|
||||
origin_tech = "combat=4;materials=4;powerstorage=4"
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/shock_revolver)
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/arc_revolver)
|
||||
can_flashlight = FALSE
|
||||
shaded_charge = FALSE
|
||||
can_holster = TRUE
|
||||
|
||||
@@ -57,26 +57,6 @@
|
||||
/obj/item/projectile/energy/bolt/large
|
||||
damage = 20
|
||||
|
||||
/obj/item/projectile/energy/shock_revolver
|
||||
name = "shock bolt"
|
||||
icon_state = "purple_laser"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
|
||||
damage = 10 //A worse lasergun
|
||||
var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE
|
||||
var/zap_range = 3
|
||||
var/power = 10000
|
||||
|
||||
/obj/item/ammo_casing/energy/shock_revolver/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
|
||||
..()
|
||||
var/obj/item/projectile/energy/shock_revolver/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)
|
||||
. = ..()
|
||||
tesla_zap(src, zap_range, power, zap_flags)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/projectile/energy/bsg
|
||||
name = "orb of pure bluespace energy"
|
||||
icon_state = "bluespace"
|
||||
@@ -147,3 +127,122 @@
|
||||
armour_penetration_flat = 10 // It can have a little armor pen, as a treat. Bigger than it looks, energy armor is often low.
|
||||
shield_buster = TRUE
|
||||
reflectability = REFLECTABILITY_PHYSICAL //I will let eswords block it like a normal projectile, but it's not getting reflected, and eshields will take the hit hard. Carp still can reflect though, screw you.
|
||||
|
||||
/obj/item/projectile/energy/arc_revolver
|
||||
name = "arc emitter"
|
||||
icon_state = "plasma_light"
|
||||
damage = 10
|
||||
damage_type = BURN
|
||||
var/charge_number = null
|
||||
|
||||
/obj/item/projectile/energy/arc_revolver/on_hit(atom/target)
|
||||
. = ..()
|
||||
for(var/obj/effect/E in target)
|
||||
if(istype(E, /obj/effect/abstract/arc_revolver))
|
||||
var/obj/effect/abstract/arc_revolver/A = E
|
||||
A.charge_numbers += charge_number
|
||||
A.duration += 10 SECONDS
|
||||
qdel(src)
|
||||
return
|
||||
new /obj/effect/abstract/arc_revolver(target, charge_number)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/effect/abstract/arc_revolver
|
||||
name = "arc emitter"
|
||||
desc = "Emits arcs. What more do you want?"
|
||||
var/duration = 10 SECONDS
|
||||
var/list/charge_numbers = list()
|
||||
var/list/chains = list()
|
||||
var/successfulshocks = 0
|
||||
var/wait_for_three = 0
|
||||
|
||||
/obj/effect/abstract/arc_revolver/Initialize(mapload, charge_number)
|
||||
. = ..()
|
||||
charge_numbers += charge_number
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
GLOB.arc_emitters += src
|
||||
build_chains()
|
||||
|
||||
/obj/effect/abstract/arc_revolver/proc/build_chains()
|
||||
for(var/obj/effect/abstract/arc_revolver/A in GLOB.arc_emitters)
|
||||
if(A == src)
|
||||
continue
|
||||
for(var/chain in chains)
|
||||
var/datum/beam/B = chain
|
||||
if(B.target == A.loc)
|
||||
continue
|
||||
for(var/num1 in A.charge_numbers)
|
||||
for(var/num2 in charge_numbers)
|
||||
if(num1 - num2 == -1) //Don't ABS it, we only want one chain made, not 2.
|
||||
var/dont = FALSE
|
||||
for(var/datum/beam/B as anything in chains)
|
||||
if(B.target == A.loc)
|
||||
dont = TRUE
|
||||
break
|
||||
if(!dont && (A.loc in view(7, loc)))
|
||||
chains += loc.Beam(A.loc, "lightning[rand(1, 12)]", 'icons/effects/effects.dmi', time = 10 SECONDS, maxdistance = 7, beam_type = /obj/effect/ebeam/chain)
|
||||
|
||||
|
||||
/obj/effect/abstract/arc_revolver/Destroy()
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
GLOB.arc_emitters -= src
|
||||
removechains()
|
||||
return ..()
|
||||
|
||||
/obj/effect/abstract/arc_revolver/process()// We want this to not be on crossed, or people fucking die when yeeted diagonally. We want this fast process to be faster, but not doing for loops every tick. Thus, every 3 fastproccesses
|
||||
duration -= 2 // 5 ticks per second, second is 10
|
||||
if(duration <= 0)
|
||||
qdel(src)
|
||||
wait_for_three++
|
||||
if(wait_for_three >= 3) //Every 0.6 seconds.
|
||||
wait_for_three = 0
|
||||
cleardeletedchains()
|
||||
build_chains()
|
||||
if(successfulshocks > 3)
|
||||
successfulshocks = 0
|
||||
if(shockallchains())
|
||||
successfulshocks++
|
||||
|
||||
/obj/effect/abstract/arc_revolver/proc/shockallchains()
|
||||
. = 0
|
||||
cleardeletedchains()
|
||||
if(length(chains))
|
||||
for(var/chain in chains)
|
||||
. += chainshock(chain)
|
||||
|
||||
/obj/effect/abstract/arc_revolver/proc/chainshock(datum/beam/B)
|
||||
. = 0
|
||||
var/list/turfs = list()
|
||||
for(var/obj/effect/ebeam/chainpart as anything in B.elements)
|
||||
if(chainpart && chainpart.x && chainpart.y && chainpart.z)
|
||||
var/turf/T1 = get_turf_pixel(chainpart)
|
||||
turfs |= T1
|
||||
if(T1 != get_turf(B.origin) && T1 != get_turf(B.target))
|
||||
for(var/turf/TU in circlerange(T1, 1))
|
||||
turfs |= TU
|
||||
for(var/turf/T as anything in turfs)
|
||||
for(var/mob/living/L in T)
|
||||
if(L.stat != DEAD)
|
||||
if(successfulshocks > 2)
|
||||
L.visible_message(
|
||||
"<span class='danger'>[L] was shocked by the lightning chain!</span>", \
|
||||
"<span class='userdanger'>You are shocked by the lightning chain!</span>", \
|
||||
"<span class='italics'>You hear a heavy electrical crack.</span>" \
|
||||
)
|
||||
var/damage = (2 - isliving(B.origin) + 2 - isliving(B.target)) //Damage is upped depending if the origin is a mob or not. Wall to wall hurts more than mob to wall, or mob to mob
|
||||
L.adjustFireLoss(damage) //time to die
|
||||
. = 1
|
||||
|
||||
/obj/effect/abstract/arc_revolver/proc/removechains()
|
||||
if(length(chains))
|
||||
for(var/chain in chains)
|
||||
qdel(chain)
|
||||
|
||||
|
||||
/obj/effect/abstract/arc_revolver/proc/cleardeletedchains()
|
||||
if(length(chains))
|
||||
for(var/chain in chains)
|
||||
var/datum/cd = chain
|
||||
if(!chain || QDELETED(cd))
|
||||
chains -= chain
|
||||
|
||||
@@ -179,10 +179,10 @@
|
||||
build_path = /obj/item/ammo_box/magazine/wt550m9/wttx
|
||||
|
||||
/datum/design/stunrevolver
|
||||
name = "Tesla Revolver Parts Kit"
|
||||
desc = "A kit for a high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers."
|
||||
name = "Arc Revolver Parts Kit"
|
||||
desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers. These shots charge whatever they hit, causing arcs of electricity to form between them."
|
||||
id = "stunrevolver"
|
||||
req_tech = list("combat" = 4, "materials" = 4, "powerstorage" = 5)
|
||||
req_tech = list("combat" = 7, "materials" = 6, "powerstorage" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 10000, MAT_SILVER = 10000)
|
||||
build_path = /obj/item/weaponcrafting/gunkit/tesla
|
||||
|
||||
Reference in New Issue
Block a user