mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-28 06:27:26 +01:00
Anomaly core modules for modsuits (#23154)
* firewall * shielded part 1 * WIP: Anomaly core modules for modsuits * icons, vortex * cryogrenade, nerfs teslawall * message admins moment * Update uplink_nuclear.dm * rnd designs * now uses the flayer icon state * Apply suggestions from code review Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> * early returns, barricade types, and comments, oh my * Apply suggestions from code review Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * updates desc, remove comment, removes /hardsuit/ --------- Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
This commit is contained in:
co-authored by
Ryan
Henri215
parent
db578cdc6f
commit
192b8224b8
@@ -117,6 +117,7 @@
|
||||
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
|
||||
|
||||
/obj/item/gun/proc/shoot_live_shot(mob/living/user, atom/target, pointblank = FALSE, message = TRUE)
|
||||
|
||||
if(recoil)
|
||||
shake_camera(user, recoil + 1, recoil)
|
||||
|
||||
@@ -224,7 +225,7 @@
|
||||
|
||||
if(semicd)
|
||||
return
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_GUN_FIRED, user, target)
|
||||
var/sprd = 0
|
||||
var/randomized_gun_spread = 0
|
||||
if(spread)
|
||||
|
||||
@@ -887,3 +887,72 @@
|
||||
|
||||
#undef PLASMA_CHARGE_USE_PER_SECOND
|
||||
#undef PLASMA_DISCHARGE_LIMIT
|
||||
|
||||
/obj/item/gun/energy/vortex_shotgun
|
||||
name = "reality vortex wrist mounted shotgun"
|
||||
desc = "This weapon uses the power of the vortex core to rip apart the fabric of reality in front of it."
|
||||
icon_state = "flayer" //Sorta wrist mounted? Sorta? Not really but we work with what we got.
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/vortex_blast)
|
||||
fire_sound = 'sound/weapons/bladeslice.ogg'
|
||||
cell_type = /obj/item/stock_parts/cell/infinite
|
||||
|
||||
/obj/item/ammo_casing/energy/vortex_blast
|
||||
projectile_type = /obj/item/projectile/energy/vortex_blast
|
||||
muzzle_flash_effect = /obj/effect/temp_visual/target_angled/muzzle_flash/vortex_blast
|
||||
variance = 70
|
||||
pellets = 8
|
||||
e_cost = 100
|
||||
delay = 1.2 SECONDS //and delay has to be stored here on energy guns
|
||||
select_name = "vortex blast"
|
||||
fire_sound = 'sound/weapons/wave.ogg'
|
||||
|
||||
/obj/item/projectile/energy/vortex_blast
|
||||
name = "vortex blast"
|
||||
hitscan = TRUE
|
||||
damage = 2
|
||||
range = 5
|
||||
icon_state = "magspear"
|
||||
hitsound = 'sound/weapons/sear.ogg' //Gets a bit spamy, suppressed is needed to suffer less
|
||||
hitsound_wall = null
|
||||
suppressed = TRUE
|
||||
|
||||
/obj/item/projectile/energy/vortex_blast/prehit(atom/target)
|
||||
. = ..()
|
||||
if(ishuman(target))
|
||||
return
|
||||
if(isliving(target))
|
||||
damage *= 4 //Up damage if not a human as we are not doing shenanigins
|
||||
return
|
||||
damage *= 6 //objects tend to fall apart as atoms are ripped up
|
||||
|
||||
/obj/item/projectile/energy/vortex_blast/on_hit(atom/target, blocked = 0)
|
||||
if(blocked >= 100)
|
||||
return ..()
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/L = target
|
||||
var/obj/item/organ/external/affecting = L.get_organ(ran_zone(def_zone))
|
||||
L.apply_damage(2, BRUTE, affecting, L.run_armor_check(affecting, ENERGY))
|
||||
L.apply_damage(2, TOX, affecting, L.run_armor_check(affecting, ENERGY))
|
||||
L.apply_damage(2, CLONE, affecting, L.run_armor_check(affecting, ENERGY))
|
||||
L.adjustBrainLoss(3)
|
||||
..()
|
||||
|
||||
/obj/effect/temp_visual/target_angled/muzzle_flash/vortex_blast
|
||||
invisibility = 100 // visual is from effect
|
||||
|
||||
/obj/effect/temp_visual/target_angled/muzzle_flash/vortex_blast/Initialize(mapload, atom/target, duration_override)
|
||||
. = ..()
|
||||
if(target)
|
||||
new /obj/effect/warp_effect/vortex_blast(loc, target)
|
||||
|
||||
/obj/effect/warp_effect/vortex_blast
|
||||
icon = 'icons/effects/64x64.dmi'
|
||||
icon_state = "vortex_shotgun"
|
||||
|
||||
/obj/effect/warp_effect/vortex_blast/Initialize(mapload, target)
|
||||
. = ..()
|
||||
var/matrix/M = matrix() * 0.5
|
||||
M.Turn(get_angle(src, target) - 45)
|
||||
transform = M
|
||||
animate(src, transform = M * 10, time = 0.3 SECONDS, alpha = 0)
|
||||
QDEL_IN(src, 0.3 SECONDS)
|
||||
|
||||
@@ -86,6 +86,7 @@
|
||||
/obj/item/projectile/bullet/saw/incen
|
||||
damage = 7
|
||||
armour_penetration_flat = 0
|
||||
immolate = 3
|
||||
|
||||
/obj/item/projectile/bullet/saw/incen/Move()
|
||||
..()
|
||||
@@ -94,13 +95,6 @@
|
||||
new /obj/effect/hotspot(location)
|
||||
location.hotspot_expose(700, 50, 1)
|
||||
|
||||
/obj/item/projectile/bullet/saw/incen/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
M.adjust_fire_stacks(3)
|
||||
M.IgniteMob()
|
||||
|
||||
//magazines//
|
||||
|
||||
/obj/item/ammo_box/magazine/mm556x45
|
||||
|
||||
@@ -198,6 +198,7 @@
|
||||
|
||||
/obj/item/projectile/beam/immolator
|
||||
name = "immolation beam"
|
||||
immolate = 1
|
||||
|
||||
/obj/item/projectile/beam/immolator/strong
|
||||
name = "heavy immolation beam"
|
||||
@@ -226,13 +227,6 @@
|
||||
impact_light_range = 2.5
|
||||
impact_light_color_override = LIGHT_COLOR_FIRE
|
||||
|
||||
/obj/item/projectile/beam/immolator/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(isliving(target))
|
||||
var/mob/living/M = target
|
||||
M.adjust_fire_stacks(1)
|
||||
M.IgniteMob()
|
||||
|
||||
/obj/item/projectile/beam/instakill
|
||||
name = "instagib laser"
|
||||
icon_state = "purple_laser"
|
||||
|
||||
@@ -59,13 +59,7 @@
|
||||
damage_type = TOX
|
||||
|
||||
/obj/item/projectile/bullet/incendiary
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/on_hit(atom/target, blocked = 0)
|
||||
. = ..()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
M.adjust_fire_stacks(4)
|
||||
M.IgniteMob()
|
||||
immolate = 1
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/firebullet
|
||||
damage = 10
|
||||
@@ -132,11 +126,8 @@
|
||||
damage = 27
|
||||
armour_penetration_flat = 40
|
||||
|
||||
/obj/item/projectile/bullet/midbullet3/fire/on_hit(atom/target, blocked = 0)
|
||||
if(..(target, blocked))
|
||||
var/mob/living/M = target
|
||||
M.adjust_fire_stacks(1)
|
||||
M.IgniteMob()
|
||||
/obj/item/projectile/bullet/midbullet3/fire
|
||||
immolate = 1
|
||||
|
||||
/obj/item/projectile/bullet/midbullet3/overgrown
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
|
||||
@@ -108,6 +108,9 @@
|
||||
M.KnockDown(4 SECONDS)
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>You see a flash of briliant blue light as [src] explodes, burning you!</span>")
|
||||
if(immolate)
|
||||
M.adjust_fire_stacks(immolate)
|
||||
M.IgniteMob()
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>You feel the heat of the explosion of [src], but the blast mostly misses you.</span>")
|
||||
add_attack_logs(src, M, "Hit lightly by [src]")
|
||||
@@ -144,7 +147,7 @@
|
||||
A.duration += 10 SECONDS
|
||||
qdel(src)
|
||||
return
|
||||
new /obj/effect/abstract/arc_revolver(target, charge_number)
|
||||
new /obj/effect/abstract/arc_revolver(target, charge_number, immolate)
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -156,12 +159,14 @@
|
||||
var/list/chains = list()
|
||||
var/successfulshocks = 0
|
||||
var/wait_for_three = 0
|
||||
var/our_immolate = 0
|
||||
|
||||
/obj/effect/abstract/arc_revolver/Initialize(mapload, charge_number)
|
||||
/obj/effect/abstract/arc_revolver/Initialize(mapload, charge_number, immolate)
|
||||
. = ..()
|
||||
charge_numbers += charge_number
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
GLOB.arc_emitters += src
|
||||
our_immolate = immolate / 5
|
||||
build_chains()
|
||||
|
||||
/obj/effect/abstract/arc_revolver/proc/build_chains()
|
||||
@@ -232,6 +237,9 @@
|
||||
)
|
||||
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
|
||||
if(our_immolate)
|
||||
L.adjust_fire_stacks(our_immolate)
|
||||
L.IgniteMob()
|
||||
. = 1
|
||||
|
||||
/obj/effect/abstract/arc_revolver/proc/removechains()
|
||||
|
||||
@@ -62,6 +62,8 @@
|
||||
var/jitter = 0
|
||||
/// Number of times an object can pass through an object. -1 is infinite
|
||||
var/forcedodge = 0
|
||||
/// Does the projectile increase fire stacks / immolate mobs on hit? Applies fire stacks equal to the number on hit.
|
||||
var/immolate = 0
|
||||
var/dismemberment = 0 //The higher the number, the greater the bonus to dismembering. 0 will not dismember at all.
|
||||
var/impact_effect_type //what type of impact effect to show when hitting something
|
||||
var/ricochets = 0
|
||||
@@ -198,6 +200,9 @@
|
||||
playsound(loc, hitsound, volume, 1, -1)
|
||||
L.visible_message("<span class='danger'>[L] is hit by \a [src][organ_hit_text]!</span>", \
|
||||
"<span class='userdanger'>[L] is hit by \a [src][organ_hit_text]!</span>") //X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
if(immolate)
|
||||
L.adjust_fire_stacks(immolate)
|
||||
L.IgniteMob()
|
||||
|
||||
var/additional_log_text
|
||||
if(blocked)
|
||||
|
||||
Reference in New Issue
Block a user