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:
Qwertytoforty
2024-01-21 19:17:18 +00:00
committed by GitHub
co-authored by Ryan Henri215
parent db578cdc6f
commit 192b8224b8
33 changed files with 699 additions and 243 deletions
+2 -1
View File
@@ -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
+1 -7
View File
@@ -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"
+3 -12
View File
@@ -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)