diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm index a3d7793e855..bd6a161dc9c 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm +++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm @@ -19,3 +19,8 @@ wound_bonus = -50 // However we do not very much against armor pass_flags = PASSTABLE | PASSGRILLE // His ass does NOT pass through glass! weak_against_armour = TRUE + +/obj/projectile/beam/laser/plasma_glob/supercharged + name = "overcharged plasma globule" + icon_state = "plasma_glob_super" + weak_against_armour = FALSE diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm index a5712d06072..7b69c2e4bd3 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm +++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm @@ -38,14 +38,15 @@ /obj/item/ammo_box/magazine/recharge/plasma_battery name = "plasma power pack" - desc = "A rechargeable, detachable battery that serves as a power source for plasma projectors." + desc = "A detachable battery that serves as a power source for plasma projectors." icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi' base_icon_state = "plasma_battery" icon_state = "plasma_battery" multiple_sprites = AMMO_BOX_FULL_EMPTY - ammo_type = /obj/item/ammo_casing/energy/laser/plasma_glob + ammo_type = list(/obj/item/ammo_casing/energy/laser/plasma_glob) caliber = CALIBER_LASER max_ammo = 15 + var/overcharged = FALSE /obj/item/ammo_box/magazine/recharge/plasma_battery/update_icon_state() // FUCK YOU /OBJ/ITEM/AMMO_BOX/MAGAZINE/RECHARGE . = ..() diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm index ecceb11bd72..82a65edd3f3 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm +++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm @@ -73,20 +73,30 @@ bolt_type = BOLT_TYPE_OPEN fire_delay = 0.6 SECONDS spread = 2.5 + actions_types = list(/datum/action/item_action/activate_plasma_overclock) + var/current_projspeed_mod = 1.5 // default so the first shot always is at full, duh + var/overclocking = FALSE + var/self_destruct_timer projectile_damage_multiplier = 3 // 30 damage a shot projectile_wound_bonus = 10 // +55 of the base projectile, burn baby burn +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/Initialize(mapload) + . = ..() + + RegisterSignal(src, COMSIG_MOVABLE_POST_THROW, PROC_REF(shakeit)) + /obj/item/gun/ballistic/automatic/pistol/plasma_marksman/give_manufacturer_examine() AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT) -/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/examine(mob/user) +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/examine(mob/user, overclocking) . = ..() + if(overclocking) + . += span_notice("The weapon is glowing red and steaming!") . += span_notice("You can examine closer to learn a little more about this weapon.") /obj/item/gun/ballistic/automatic/pistol/plasma_marksman/examine_more(mob/user) . = ..() - . += "The 'Gwiazda' is a further refinement of the 'Słońce' design. with improved \ energy cycling, magnetic launchers built to higher precision, and an overall more \ ergonomic design. While it still fails to perform against armor, the weapon is \ @@ -97,6 +107,107 @@ return . +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) + . = ..() + if(overclocking && chambered) + chambered.projectile_type = /obj/projectile/beam/laser/plasma_glob/supercharged + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/proc/update_projspeed(mob/user) + var/shots_in_mag = src.get_ammo() + if(overclocking) + projectile_speed_multiplier = 1.6 + else if(shots_in_mag >= 13) + projectile_speed_multiplier = 1.5 + else if(shots_in_mag >= 10 && shots_in_mag <= 12) + projectile_speed_multiplier = 1.3 + else if(shots_in_mag >= 8 && shots_in_mag <= 9) + projectile_speed_multiplier = 1.2 + else if(shots_in_mag >= 5 && shots_in_mag <= 7) + projectile_speed_multiplier = 1.1 + else if(shots_in_mag >= 1 && shots_in_mag <= 4) + projectile_speed_multiplier = 1.0 + else + projectile_speed_multiplier = 0.8 + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/proc/activate_oveclock(mob/user, current_proj_speed) + +/datum/action/item_action/activate_plasma_overclock //Gotta be hud, its un-revertable. Imagine misclicking and blowing up your gun without knowing... + button_icon = 'icons/obj/weapons/guns/ammo.dmi' + button_icon_state = "9x19p" + name = "Overclock Plasma Charger" + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS + +//Checks if we can overclock the gun, if so, starts the process +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/ui_action_click(mob/user, actiontype) + if(!istype(actiontype, /datum/action/item_action/activate_plasma_overclock)) + return ..() + if(!overclocking) + overclocking = !overclocking + balloon_alert(user, "[overclocking ? "Plasma coils overheated, it's going to blow!" : "It's not shutting down!"]") + if(overclocking) + overclock(user) + playsound(src, 'sound/effects/magic/lightning_chargeup.ogg', 50) + update_item_action_buttons() + + //Base overclock proc, changes our projectile for releasing the flare + explosion +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/proc/overclock(mob/living/user, slot) + if(user) + START_PROCESSING(SSprocessing, src) + addtimer(CALLBACK(src, PROC_REF(audio_warning)), 7 SECONDS) + addtimer(CALLBACK(src, PROC_REF(kaboom)), 10 SECONDS) + shakeit() + add_shared_particles(/particles/smoke/steam) + +/obj/item/ammo_casing/energy/laser/plasma_glob/ready_proj(atom/target, mob/living/user, quiet, zone_override, atom/fired_from) + var/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/gun = fired_from + if(istype(gun) && gun.overclocking) + loaded_projectile.name = "overcharged plasma globule" + loaded_projectile.icon_state = "plasma_glob_super" + loaded_projectile.weak_against_armour = FALSE + gun.update_projspeed(user) + . = ..() + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/proc/shakeit() + SIGNAL_HANDLER + + if(!overclocking) + return + spasm_animation() + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/proc/kaboom(mob/living/user) + STOP_PROCESSING(SSprocessing, src) + var/turf/last_surprise = get_turf(src) + explosion(src, light_impact_range = 1, flame_range = 3, explosion_cause = src) + last_surprise.add_liquid(/datum/reagent/toxin/plasma, 3, no_react = FALSE, chem_temp = 300) + new /obj/effect/hotspot(last_surprise) + UnregisterSignal(src, COMSIG_MOVABLE_POST_THROW) + remove_shared_particles(/particles/bonfire) + qdel(src) + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/proc/audio_warning(mob/living/user) + playsound(src, 'modular_zubbers/sound/weapons/plasma_explosion.ogg', 100, FALSE, 20, , , , TRUE) + for(var/mob/living/carbon/M in orange(20, src)) + if(!HAS_TRAIT(M, TRAIT_DEAF)) + to_chat(M, span_warning("You hear a distant pulse of energy, as if a miniature reactor blasting out a shockwave from afar...")) + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/process(seconds_per_tick) + var/mob/living/carbon/wielder = ismob(loc) ? loc : null + var/obj/item/bodypart/affecting = wielder.get_bodypart("[(wielder.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + if(isnull(wielder)) + return + if(isnull(affecting)) + return + if(wielder.is_holding(src)) + wielder.apply_damage(2.5, BURN, affecting) + to_chat(wielder, span_warning("[src] burns your hand, it's too hot!")) + +/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/emp_act(severity) + . = ..() + if(!(. & EMP_PROTECT_CONTENTS)) + if(prob(15 * severity)) + overclock() + + // A revolver, but it can hold shotgun shells // Woe, buckshot be upon ye diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi b/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi index 6474afdbe43..94f50208b05 100644 Binary files a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi and b/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi differ diff --git a/modular_zubbers/code/modules/cargo/packs/goodies.dm b/modular_zubbers/code/modules/cargo/packs/goodies.dm index 4a8d04c29e0..04e7366fe73 100644 --- a/modular_zubbers/code/modules/cargo/packs/goodies.dm +++ b/modular_zubbers/code/modules/cargo/packs/goodies.dm @@ -49,6 +49,21 @@ /datum/supply_pack/goody/double_barrel cost = PAYCHECK_COMMAND * 10 //1400 is too much considering the combat shotgun is 1500 for 1 +/datum/supply_pack/goody/plasma_marksman + name = "Gwiazda Plasma Sharpshooters Single-pack" + desc = "Contains a Gwiazda Plasma Sharpshooter and one plasma battery free of additional charge." + contains = list(/obj/item/gun/ballistic/automatic/pistol/plasma_marksman = 1, + /obj/item/ammo_box/magazine/recharge/plasma_battery = 1) + access_view = ACCESS_WEAPONS + cost = PAYCHECK_COMMAND * 4 + +/datum/supply_pack/goody/plasma_marksman_ammo + name = "Plasma Battery Single-pack" + desc = "Contains a single plasma battery." + contains = list(/obj/item/ammo_box/magazine/recharge/plasma_battery = 1) + access_view = ACCESS_WEAPONS + cost = PAYCHECK_COMMAND * 1 + /datum/supply_pack/goody/mars_single special = FALSE diff --git a/modular_zubbers/code/modules/cargo/packs/security.dm b/modular_zubbers/code/modules/cargo/packs/security.dm index 96859856973..4c81aeb8fd4 100644 --- a/modular_zubbers/code/modules/cargo/packs/security.dm +++ b/modular_zubbers/code/modules/cargo/packs/security.dm @@ -53,12 +53,6 @@ /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked, ) -/datum/supply_pack/security/plasma_marksman - name = "Gwiazda Plasma Sharpshooter Single-Pack" - crate_name = "Gwiadza Plasma Sharpshooter Crate" - desc = "Contains a Gwiazda Plasma Sharpshooter and one plasma battery for it." - contains = list(/obj/item/gun/ballistic/automatic/pistol/plasma_marksman = 1, - /obj/item/ammo_box/magazine/recharge/plasma_battery = 1) cost = CARGO_CRATE_VALUE * 10 access = ACCESS_SECURITY diff --git a/modular_zubbers/sound/weapons/plasma_explosion.ogg b/modular_zubbers/sound/weapons/plasma_explosion.ogg new file mode 100644 index 00000000000..6ed35f0ee5f Binary files /dev/null and b/modular_zubbers/sound/weapons/plasma_explosion.ogg differ