diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 97ac62fd86f2..c33839d57637 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -61,4 +61,5 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list( /mob/living/simple_animal/hostile/megafauna/bubblegum = 6, /mob/living/simple_animal/hostile/megafauna/colossus = 2, /mob/living/simple_animal/hostile/megafauna/dragon = 4, + /mob/living/simple_animal/hostile/megafauna/stalwart = 3, )) diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm index 875eaf5e60a1..dab5380413b0 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm @@ -24,7 +24,7 @@ /obj/effect/projectile/impact/plasma_cutter name = "plasma impact" - icon_state = "impact_plasmacutter" + icon_state = "impact_purple" /obj/effect/projectile/impact/stun name = "stun impact" diff --git a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm index ad6b23f50416..ee2a32ab159d 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm @@ -18,7 +18,7 @@ icon_state = "muzzle_u_laser" /obj/effect/projectile/muzzle/plasma_cutter - icon_state = "muzzle_plasmacutter" + icon_state = "muzzle_purple" /obj/effect/projectile/muzzle/stun icon_state = "muzzle_stun" diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index 23ecf438c4f9..5dc526f1436e 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -45,7 +45,7 @@ /obj/effect/projectile/tracer/plasma_cutter name = "plasma blast" - icon_state = "plasmacutter" + icon_state = "beam_purple" /obj/effect/projectile/tracer/stun name = "stun beam" diff --git a/code/game/objects/items/gems.dm b/code/game/objects/items/gems.dm index 2373cb7a9930..bdf61193f8e6 100644 --- a/code/game/objects/items/gems.dm +++ b/code/game/objects/items/gems.dm @@ -168,4 +168,42 @@ . = ..() AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE) +/obj/item/ai_cpu/stalwart //very jank code-theft because it's not directly a gem + name = "\improper Bluespace Data Crystal" + desc = "A large bluespace crystal, etched internally with nano-circuits, it seemingly draws power from nowhere. Once acting as the brain of the Stalwart, perhaps this could be used in an AI server?" + icon = 'icons/obj/gems.dmi' + icon_state = "cpu" + materials = list(/datum/material/bluespace=24000) + speed = 20 + base_power_usage = 0.5 * AI_CPU_BASE_POWER_USAGE/5 + minimum_max_power = 0.5 + maximum_max_power = 10.0 + minimum_growth = 2.0 + maximum_growth = 8.0 + light_range = 2 + light_power = 6 + light_color = "#0004ff" + ///Have we been analysed with a mining scanner? + var/analysed = FALSE + ///How many points we grant to whoever discovers us + var/point_value = 2000 + +/obj/item/ai_cpu/stalwart/attackby(obj/item/item, mob/living/user, params) //Stolen directly from geysers, removed the internal gps + if(!istype(item, /obj/item/mining_scanner) && !istype(item, /obj/item/t_scanner/adv_mining_scanner)) + return ..() + + if(analysed) + to_chat(user, span_warning("This gem has already been analysed!")) + return + else + to_chat(user, span_notice("You analyse the precious gemstone!")) + analysed = TRUE + + if(isliving(user)) + var/mob/living/living = user + var/obj/item/card/id/card = living.get_idcard() + if(card) + to_chat(user, span_notice("[point_value] mining points have been paid out!")) + card.mining_points += point_value + playsound(src, 'sound/machines/ping.ogg', 15, TRUE) diff --git a/code/modules/cargo/bounties/gems.dm b/code/modules/cargo/bounties/gems.dm index ddd6bef40e37..fe9a1327db52 100644 --- a/code/modules/cargo/bounties/gems.dm +++ b/code/modules/cargo/bounties/gems.dm @@ -54,3 +54,9 @@ description = "Central Command's Research Director is particularly interested in the anomalous effects of this gem. Ship one over and he'll pay us directly." reward = 40000 wanted_types = list(/obj/item/gem/dark) + +/datum/bounty/item/gems/stalwart + name = "Bluespace Data Crystal" + description = "Central Command's Research Director is extatic over the possible uses and internal structure of this gem. Ship one over and he'll pay us directly." + reward = 16500 + wanted_types = list(/obj/item/ai_cpu/stalwart) diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index 763ad0edec7f..d73285207697 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -37,9 +37,11 @@ /obj/item/prisoncube, /obj/item/staff/storm, /obj/item/clothing/under/drip, //Drip is very valuable to many investors in high fashion - /obj/item/clothing/shoes/drip) + /obj/item/clothing/shoes/drip, + /obj/item/gun/energy/plasmacutter/adv/robocutter, + /obj/item/twohanded/bonespear/stalwartpike) -//Megafauna loot, except for ash drakes and legion +//Megafauna loot, except for stalwart, ash drakes, and legion /datum/export/lavaland/megafauna cost = 40000 @@ -113,3 +115,8 @@ cost = 20000 unit_name = "Dark Salt Lick" export_types = list(/obj/item/gem/dark) + +/datum/export/lavaland/gems/stalwart + cost = 9800 + unit_name = "Bluespace Data Crystal" + export_types = list(/obj/item/ai_cpu/stalwart) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index f1242628f763..63747724d523 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -1656,20 +1656,109 @@ GLOBAL_LIST_EMPTY(bloodmen_list) z_level_check = FALSE //Stalwart -/obj/structure/closet/crate/sphere/stalwart - name = "silvery capsule" - desc = "It feels cold to the touch..." - -/obj/structure/closet/crate/sphere/stalwart/PopulateContents() - new /obj/item/gun/energy/plasmacutter/adv/robocutter /obj/item/gun/energy/plasmacutter/adv/robocutter - name = "energized powercutter" - desc = "Ripped out of an ancient machine, this self-recharging cutter is unmatched." + name = "ancient focusing crystal" + desc = "A humming crystaline weapon, firing scattered blasts of focused energy." fire_delay = 4 icon = 'icons/obj/guns/energy.dmi' icon_state = "robocutter" + ammo_type = list(/obj/item/ammo_casing/energy/plasma/stalwart) + materials = list(/datum/material/bluespace = 8000, /datum/material/diamond = 2000, /datum/material/dilithium = 2000) + usesound = list('sound/weapons/taserhit.ogg') + toolspeed = 0.33 //funky bluespace welding effect idk selfcharge = 1 + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + +/obj/item/twohanded/bonespear/stalwartpike + icon = 'icons/obj/weapons/spears.dmi' + icon_state = "stalwart_spear0" + lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' + name = "ancient control rod" + //don't want your rare megafauna loot shattering easily + max_integrity = 2000 + desc = "A mysterious crystaline rod of exceptional length, humming with ancient power. Too unweildy for use in one hand." + wielded_stats = list(SWING_SPEED = 0.8, ENCUMBRANCE = 0.2, ENCUMBRANCE_TIME = 2, REACH = 3, DAMAGE_LOW = 0, DAMAGE_HIGH = 0) + w_class = WEIGHT_CLASS_SMALL + var/w_class_on = WEIGHT_CLASS_HUGE + slot_flags = ITEM_SLOT_BELT + force = 0 + throwforce = 0 + throw_speed = 4 + materials = list(/datum/material/bluespace = 8000, /datum/material/diamond = 2000, /datum/material/dilithium = 2000) + sharpness = SHARP_NONE + block_chance = 0 + var/ranged_cooldown = 0 //shamelessly stolen from hostile mobs + var/ranged_cooldown_time = 40 + var/projectiles_per_fire = 1 + var/fauna_damage_bonus = 22 + var/fauna_damage_type = BRUTE + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + +/obj/item/twohanded/bonespear/stalwartpike/update_icon() + . = ..() + if(wielded) + icon_state = "stalwart_spear1" + else + icon_state = "stalwart_spear0" + SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) + +/obj/item/twohanded/bonespear/stalwartpike/wield(mob/living/carbon/M) + . = ..() + if(wielded) + playsound(src, 'sound/magic/summonitems_generic.ogg', 50, 1) + sharpness = SHARP_POINTY + w_class = w_class_on + block_chance = 10 + force = 8 + +/obj/item/twohanded/bonespear/stalwartpike/unwield(mob/living/carbon/M) + if(wielded) + playsound(src, 'sound/magic/teleport_diss.ogg', 50, 1) + sharpness = initial(sharpness) + w_class = initial(w_class) + force = initial(force) + block_chance = initial(block_chance) + . = ..() + +/obj/item/twohanded/bonespear/stalwartpike/afterattack(atom/target, mob/user, proximity) + . = ..() + if(!proximity || !wielded) + return + if(isliving(target)) + var/mob/living/L = target + if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) + L.apply_damage(fauna_damage_bonus,fauna_damage_type) + playsound(L, 'sound/magic/blind.ogg', 100, 1) + +/obj/structure/closet/crate/sphere/stalwart + name = "silvery capsule" + desc = "It feels cold to the touch..." + +/obj/structure/closet/crate/sphere/stalwart/PopulateContents() + var/loot = rand(1,4) + switch(loot) + if(1) + new /obj/item/gun/energy/plasmacutter/adv/robocutter(src) + new /obj/item/gem/purple(src) + if(2) + new /obj/item/twohanded/bonespear/stalwartpike(src) + new /obj/item/ai_cpu/stalwart(src) + if(3) + new /obj/item/stack/ore/bluespace_crystal/artificial(src) + new /obj/item/stack/ore/dilithium_crystal(src) + new /obj/item/stack/ore/dilithium_crystal(src) + new /obj/item/stack/ore/dilithium_crystal(src) + new /obj/item/stack/ore/dilithium_crystal(src) + new /obj/item/gem/purple(src) + if(4) + new /obj/item/stack/ore/bluespace_crystal/artificial(src) + new /obj/item/stack/ore/bluespace_crystal/artificial(src) + new /obj/item/stack/ore/bluespace_crystal/artificial(src) + new /obj/item/stack/ore/bluespace_crystal/artificial(src) + new /obj/item/ai_cpu/stalwart(src) + //Just some minor stuff /obj/structure/closet/crate/necropolis/puzzle name = "puzzling chest" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm index 6f96b1e07652..46aae94562e1 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm @@ -1,19 +1,20 @@ /mob/living/simple_animal/hostile/megafauna/stalwart name = "stalwart" - desc = "A graceful, floating automaton. It emits a soft hum." - health = 3000 + desc = "A graceful, floating construct. It emits a soft hum." + health = 3000 //thicc boi maxHealth = 3000 attacktext = "zaps" - attack_sound = 'sound/effects/empulse.ogg' + attack_sound = 'sound/weapons/resonator_blast.ogg' icon_state = "stalwart" icon_living = "stalwart" icon_dead = "" friendly = "scans" icon = 'icons/mob/lavaland/64x64megafauna.dmi' speak_emote = list("screeches") + mob_biotypes = list(MOB_INORGANIC, MOB_ROBOTIC, MOB_EPIC) armour_penetration = 40 - melee_damage_lower = 40 - melee_damage_upper = 40 + melee_damage_lower = 35 + melee_damage_upper = 35 speed = 5 move_to_delay = 5 ranged = TRUE @@ -22,31 +23,33 @@ internal_type = /obj/item/gps/internal/stalwart loot = list(/obj/structure/closet/crate/sphere/stalwart) deathmessage = "erupts into blue flame, and screeches before violently shattering." - deathsound = 'sound/voice/borg_deathsound.ogg' + deathsound = 'sound/magic/castsummon.ogg' internal_type = /obj/item/gps/internal/stalwart + music_component = /datum/component/music_player/battle + music_path = /datum/music/sourced/battle/stalwart var/charging = FALSE var/revving_charge = FALSE /mob/living/simple_animal/hostile/megafauna/stalwart/OpenFire() - ranged_cooldown = world.time + 50 + ranged_cooldown = world.time + 30 anger_modifier = clamp(((maxHealth - health)/50),0,20) if(prob(20+anger_modifier)) //Major attack stalnade() else if(prob(20)) charge() else - if(prob(70)) + if(prob(50)) backup() else energy_pike() /mob/living/simple_animal/hostile/megafauna/stalwart/proc/telegraph() for(var/mob/M in range(10,src)) - flash_color(M.client, "#6CA4E3", 1) shake_camera(M, 4, 3) - playsound(src, 'sound/voice/borg_deathsound.ogg', 200, 1) + playsound(src, 'sound/machines/sm/accent/delam/14.ogg', 400, 1) /mob/living/simple_animal/hostile/megafauna/stalwart/proc/shoot_projectile(turf/marker, set_angle) + playsound(src, 'sound/weapons/ionrifle.ogg', 400, 1) if(!isnum(set_angle) && (!marker || marker == loc)) return var/turf/startloc = get_turf(src) @@ -71,16 +74,20 @@ /mob/living/simple_animal/hostile/megafauna/stalwart/proc/stalnade(turf/marker) for(var/d in dir) var/turf/E = get_step(src, d) + telegraph() bombsaway(E) /mob/living/simple_animal/hostile/megafauna/stalwart/proc/backup() - visible_message(span_danger("[src] constructs a flock of mini mechanoid!")) - for(var/turf/open/H in range(src, 2)) + visible_message(span_danger("[src] warps in mini mechanoids!")) + playsound(src, 'sound/magic/repulse.ogg', 300, 1, 2) + for(var/turf/open/H in range(src, 3)) if(prob(25)) new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/staldrone(H.loc) + if(prob(10)) + new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/staldrone/ranged(H.loc) /mob/living/simple_animal/hostile/megafauna/stalwart/proc/energy_pike() - ranged_cooldown = world.time + 40 + ranged_cooldown = world.time + 20 dir_shots(GLOB.diagonals) dir_shots(GLOB.cardinals) SLEEP_CHECK_DEATH(10) @@ -88,7 +95,7 @@ /mob/living/simple_animal/hostile/megafauna/stalwart/proc/dir_shots(list/dirs) if(!islist(dirs)) dirs = GLOB.alldirs.Copy() - playsound(src, 'sound/effects/pop_expl.ogg', 200, 1, 2) + playsound(src, 'sound/magic/disable_tech.ogg', 300, 1, 2) for(var/d in dirs) var/turf/E = get_step(src, d) shoot_projectile(E) @@ -122,16 +129,52 @@ if(charging) DestroySurroundings() // code stolen from chester stolen from bubblegum i am the ultimate shitcoder ..() - + +/mob/living/simple_animal/hostile/megafauna/stalwart/death() + . = ..() + if(health > 0) + return + var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) + if(D) + D.adjust_money(maxHealth * MEGAFAUNA_CASH_SCALE) + //Projectiles and such /mob/living/simple_animal/hostile/asteroid/hivelordbrood/staldrone name = "mini mechanoid" - desc = "It's staring at you intently. Do not taunt." + desc = "A tiny creature made of...some kind of gemstone? It seems angry." + icon = 'icons/mob/drone.dmi' + speed = 5 + movement_type = GROUND + maxHealth = 20 + health = 20 icon_state = "drone_gem" + icon_living = "drone_gem" + icon_aggro = "drone_gem" + attacktext = "rends" + melee_damage_lower = 6 + melee_damage_upper = 10 + mob_biotypes = list(MOB_INORGANIC, MOB_ROBOTIC) + attack_vis_effect = ATTACK_EFFECT_SLASH + attack_sound = 'sound/weapons/pierce_slow.ogg' + speak_emote = list("buzzes") faction = list("mining") weather_immunities = list("lava","ash") +/mob/living/simple_animal/hostile/asteroid/hivelordbrood/staldrone/Initialize() + . = ..() + addtimer(CALLBACK(src, .proc/death), 300) + +/mob/living/simple_animal/hostile/asteroid/hivelordbrood/staldrone/ranged + ranged = 1 + ranged_message = "blasts" + icon_state = "drone_scout" + icon_living = "drone_scout" + icon_aggro = "drone_scout" + ranged_cooldown_time = 30 + projectiletype = /obj/item/projectile/stalpike/weak + projectilesound = 'sound/weapons/ionrifle.ogg' + /obj/item/gps/internal/stalwart icon_state = null gpstag = "Ancient Signal" @@ -140,22 +183,34 @@ /obj/item/projectile/stalpike name = "energy pike" - icon_state = "arcane_barrage" + icon_state = "arcane_barrage_greyscale" damage = 20 armour_penetration = 100 - speed = 5 + speed = 4 eyeblur = 0 - damage_type = BURN - pass_flags = PASSTABLE - color = "#6CA4E3" + damage_type = BRUTE + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + color = "#4851ce" + +/obj/item/projectile/stalpike/weak + name = "lesser energy pike" + icon_state = "arcane_barrage_greyscale" + damage = 5 + armour_penetration = 100 + speed = 6 + eyeblur = 0 + damage_type = BRUTE + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + color = "#9a9fdb" /obj/item/projectile/stalnade name = "volatile orb" icon_state = "wipe" damage = 300 armour_penetration = 100 - speed = 1 + speed = 6 eyeblur = 0 + damage_type = BRUTE pass_flags = PASSTABLE /obj/item/projectile/stalnade/Move() @@ -166,12 +221,11 @@ /obj/effect/temp_visual/hierophant/wall/stalwart name = "azure barrier" - icon = 'icons/effects/fire.dmi' - icon_state = "3" + icon = 'icons/effects/effects.dmi' + icon_state = "shield2" duration = 100 smooth = SMOOTH_FALSE - color = "#6CA4E3" /mob/living/simple_animal/hostile/megafauna/stalwart/devour(mob/living/L) - visible_message(span_danger("[src] melts [L]!")) + visible_message(span_danger("[src] atomizes [L]!")) L.dust() diff --git a/code/modules/music/music.dm b/code/modules/music/music.dm index 66a024898ad5..667f8b68d26e 100644 --- a/code/modules/music/music.dm +++ b/code/modules/music/music.dm @@ -277,4 +277,7 @@ priority = 210 /datum/music/sourced/battle/legion sound_file = 'sound/lavaland/music/pants.ogg' - priority = 130 \ No newline at end of file + priority = 130 +/datum/music/sourced/battle/stalwart + sound_file = 'yogstation/sound/lavaland/music/stalwart.ogg' + priority = 100 diff --git a/code/modules/projectiles/ammunition/energy/plasma.dm b/code/modules/projectiles/ammunition/energy/plasma.dm index 78914161d045..a72020f7d9bf 100644 --- a/code/modules/projectiles/ammunition/energy/plasma.dm +++ b/code/modules/projectiles/ammunition/energy/plasma.dm @@ -16,6 +16,15 @@ delay = 10 e_cost = 10 +//cool alien plasma beams +/obj/item/ammo_casing/energy/plasma/stalwart + projectile_type = /obj/item/projectile/plasma/scatter/adv/stalwart + fire_sound = 'sound/weapons/pulse.ogg' + delay = 5 + e_cost = 50 + pellets = 4 + variance = 22 + /obj/item/ammo_casing/energy/plasma/adv/mega projectile_type = /obj/item/projectile/plasma/adv/mega diff --git a/code/modules/projectiles/projectile/special/plasma.dm b/code/modules/projectiles/projectile/special/plasma.dm index b4018dea9094..b03e476fac1a 100644 --- a/code/modules/projectiles/projectile/special/plasma.dm +++ b/code/modules/projectiles/projectile/special/plasma.dm @@ -14,7 +14,6 @@ /obj/item/projectile/plasma/weak name = "weak plasma blast" icon_state = "plasmacutter_weak" - damage_type = BRUTE damage = 3 dismemberment = 5 impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser @@ -55,6 +54,30 @@ // Same as the scatter but with automatic defusing /obj/item/projectile/plasma/scatter/adv +// Megafauna loot, possibly best cutter? +/obj/item/projectile/plasma/scatter/adv/stalwart + name = "plasma beam" + icon_state = "plasmacutter_stalwart" + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + tracer_type = /obj/effect/projectile/tracer/laser/blue + muzzle_type = /obj/effect/projectile/muzzle/laser/blue + impact_type = /obj/effect/projectile/impact/laser/blue + damage_type = STAMINA + damage = 5 + range = 4 + mine_range = 6 + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + var/fauna_damage_bonus = 10 + var/fauna_damage_type = BRUTE + +/obj/item/projectile/plasma/scatter/adv/stalwart/on_hit(atom/target) + . = ..() + if(isliving(target)) + var/mob/living/L = target + if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) + L.apply_damage(fauna_damage_bonus,fauna_damage_type) + playsound(L, 'sound/weapons/resonator_blast.ogg', 100, 1) + //mega plasma shotgun auto defuses /obj/item/projectile/plasma/scatter/adv/mega range = 7 diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 344ae47cbd95..3c68408cf314 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/inhands/weapons/polearms_lefthand.dmi b/icons/mob/inhands/weapons/polearms_lefthand.dmi index 8253e529254f..4c9728449c08 100644 Binary files a/icons/mob/inhands/weapons/polearms_lefthand.dmi and b/icons/mob/inhands/weapons/polearms_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/polearms_righthand.dmi b/icons/mob/inhands/weapons/polearms_righthand.dmi index b28ba372e5d0..a1954b846c40 100644 Binary files a/icons/mob/inhands/weapons/polearms_righthand.dmi and b/icons/mob/inhands/weapons/polearms_righthand.dmi differ diff --git a/icons/obj/gems.dmi b/icons/obj/gems.dmi index 7f6c70a5e38c..b518020af3e0 100644 Binary files a/icons/obj/gems.dmi and b/icons/obj/gems.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index b794849af5df..c7772d214540 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index def69327db78..1cb2aa7f2e7b 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/projectiles_impact.dmi b/icons/obj/projectiles_impact.dmi index bac35e68e147..c3dd5fea9989 100644 Binary files a/icons/obj/projectiles_impact.dmi and b/icons/obj/projectiles_impact.dmi differ diff --git a/icons/obj/projectiles_muzzle.dmi b/icons/obj/projectiles_muzzle.dmi index 2f1d6d90c6bf..952fbd82378a 100644 Binary files a/icons/obj/projectiles_muzzle.dmi and b/icons/obj/projectiles_muzzle.dmi differ diff --git a/icons/obj/projectiles_tracer.dmi b/icons/obj/projectiles_tracer.dmi index 56442452e724..11ee7d287938 100644 Binary files a/icons/obj/projectiles_tracer.dmi and b/icons/obj/projectiles_tracer.dmi differ diff --git a/icons/obj/weapons/spears.dmi b/icons/obj/weapons/spears.dmi index 24fe42c47e62..673ba87347dc 100644 Binary files a/icons/obj/weapons/spears.dmi and b/icons/obj/weapons/spears.dmi differ diff --git a/yogstation/sound/lavaland/music/stalwart.ogg b/yogstation/sound/lavaland/music/stalwart.ogg new file mode 100644 index 000000000000..56a516f04ec7 Binary files /dev/null and b/yogstation/sound/lavaland/music/stalwart.ogg differ