diff --git a/code/game/objects/effects/temporary_visuials/miscellaneous.dm b/code/game/objects/effects/temporary_visuials/miscellaneous.dm index eba5ff59ad..b68c9c96c6 100644 --- a/code/game/objects/effects/temporary_visuials/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuials/miscellaneous.dm @@ -22,4 +22,25 @@ /obj/effect/temp_visual/small_smoke icon_state = "smoke" - duration = 50 \ No newline at end of file + duration = 50 + +// VOREStation Add - Used by Kinetic Accelerator +/obj/effect/temp_visual/kinetic_blast + name = "kinetic explosion" + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "kinetic_blast" + layer = ABOVE_MOB_LAYER + duration = 4 + +/obj/effect/temp_visual/explosion + name = "explosion" + icon = 'icons/effects/96x96_vr.dmi' + icon_state = "explosion" + pixel_x = -32 + pixel_y = -32 + duration = 8 + +/obj/effect/temp_visual/explosion/fast + icon_state = "explosionfast" + duration = 4 +// VOREStation Add End diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm new file mode 100644 index 0000000000..8d0a0bd6d7 --- /dev/null +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm @@ -0,0 +1,351 @@ +/obj/item/weapon/gun/energy/kinetic_accelerator + name = "proto-kinetic accelerator" + desc = "A self recharging, ranged mining tool that does increased damage in low temperature. Capable of holding up to six slots worth of mod kits." + icon = 'icons/obj/gun_vr.dmi' + icon_state = "kineticgun" + item_state = "kineticgun" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi') + projectile_type = /obj/item/projectile/kinetic + origin_tech = list(TECH_COMBAT = 3, TECH_POWER = 3, TECH_ENGINEERING = 3) + can_flashlight = TRUE + flight_x_offset = 15 + flight_y_offset = 9 + charge_cost = 120 // 20 shots on weapon power cell + fire_delay = 16 + self_recharge = TRUE + recharge_time = 10 // every 20*2 seconds will get 20% power restored + + var/max_mod_capacity = 100 + var/list/modkits = list() + var/empty_state = "kineticgun_empty" + +/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user) + if(..(user, 1)) + if(max_mod_capacity) + to_chat(user, "[get_remaining_mod_capacity()]% mod capacity remaining.") + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + to_chat(user, "There is a [M.name] mod installed, using [M.cost]% capacity.") + +/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user) + if(istype(A, /obj/item/weapon/crowbar)) + if(modkits.len) + to_chat(user, "You pry the modifications out.") + playsound(loc, A.usesound, 100, 1) + for(var/obj/item/borg/upgrade/modkit/M in modkits) + M.uninstall(src) + else + to_chat(user, "There are no modifications currently installed.") + else if(istype(A, /obj/item/borg/upgrade/modkit)) + var/obj/item/borg/upgrade/modkit/MK = A + MK.install(src, user) + else + ..() + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity() + var/current_capacity_used = 0 + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + current_capacity_used += M.cost + return max_mod_capacity - current_capacity_used + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_modkits() + . = list() + for(var/A in modkits) + . += A + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/item/projectile/kinetic/K) + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + M.modify_projectile(K) + +/obj/item/weapon/gun/energy/kinetic_accelerator/consume_next_projectile() + var/obj/item/projectile/kinetic/BB = ..() + if(!istype(BB)) + return + modify_projectile(BB) + + var/turf/proj_turf = get_turf(src) + if(!isturf(proj_turf)) + return + var/datum/gas_mixture/environment = proj_turf.return_air() + if(environment.temperature > 250) + BB.name = "weakened [BB.name]" + BB.damage *= BB.pressure_decrease + return BB + +/obj/item/weapon/gun/energy/kinetic_accelerator/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0) + . = ..() + spawn(fire_delay) + if(power_supply && power_supply.check_charge(charge_cost)) + playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) + +/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon() + cut_overlays() + if(!power_supply || !power_supply.check_charge(charge_cost)) + add_overlay(empty_state) + if(can_flashlight) + var/iconF = "flight" + if(gun_light) + iconF = "flight_on" + add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) + +//Projectiles +/obj/item/projectile/kinetic + name = "kinetic force" + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = null + damage = 32 + damage_type = BRUTE + check_armour = "bomb" + kill_count = 3 // Our "range" var is named "kill_count". Yes it is. + + var/pressure_decrease = 0.25 + var/turf_aoe = FALSE + var/mob_aoe = FALSE + var/list/hit_overlays = list() + +// /obj/item/projectile/kinetic/pod +// kill_count = 4 +// +// /obj/item/projectile/kinetic/pod/regular +// damage = 50 +// pressure_decrease = 0.5 +// +// /obj/item/projectile/kinetic/pod/enhanced +// turf_aoe = TRUE +// mob_aoe = TRUE + +/obj/item/projectile/kinetic/on_impact(var/atom/A) + strike_thing(A) + . = ..() + +/obj/item/projectile/kinetic/on_hit(var/atom/target) + strike_thing(target) + . = ..() + +/obj/item/projectile/kinetic/proc/strike_thing(atom/target) + var/turf/target_turf = get_turf(target) + if(!target_turf) + target_turf = get_turf(src) + if(istype(target_turf, /turf/simulated/mineral)) + var/turf/simulated/mineral/M = target_turf + M.GetDrilled() + var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/kinetic_blast(target_turf) + K.color = color + for(var/type in hit_overlays) + new type(target_turf) + if(turf_aoe) + for(var/T in RANGE_TURFS(1, target_turf) - target_turf) + if(istype(T, /turf/simulated/mineral)) + var/turf/simulated/mineral/M = T + M.GetDrilled() + if(mob_aoe) + for(var/mob/living/L in range(1, target_turf) - firer - target) + var/armor = L.run_armor_check(def_zone, check_armour) + L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor) + to_chat(L, "You're struck by a [name]!") + +//Modkits +/obj/item/borg/upgrade/modkit + name = "modification kit" + desc = "An upgrade for kinetic accelerators." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "modkit" + origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 4) + require_module = 1 + // var/module_type = /obj/item/robot_module/miner + usesound = 'sound/items/Screwdriver.ogg' + var/denied_type = null + var/maximum_of_type = 1 + var/cost = 30 + var/modifier = 1 //For use in any mod kit that has numerical modifiers + +/obj/item/borg/upgrade/modkit/examine(mob/user) + if(..(user, 1)) + to_chat(user, "Occupies [cost]% of mod capacity.") + +/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user) + if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user)) + install(A, user) + else + ..() + +/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R) + if(..()) + return + + for(var/obj/item/weapon/gun/energy/kinetic_accelerator/H in R.module.modules) + return install(H, usr) + +/obj/item/borg/upgrade/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = TRUE + if(denied_type) + var/number_of_denied = 0 + for(var/A in KA.get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + if(istype(M, denied_type)) + number_of_denied++ + if(number_of_denied >= maximum_of_type) + . = FALSE + break + if(KA.get_remaining_mod_capacity() >= cost) + if(.) + to_chat(user, "You install the modkit.") + playsound(loc, usesound, 100, 1) + user.unEquip(src) + forceMove(KA) + KA.modkits += src + else + to_chat(user, "The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits.") + else + to_chat(user, "You don't have room([KA.get_remaining_mod_capacity()]% remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.") + . = FALSE + +/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + forceMove(get_turf(KA)) + KA.modkits -= src + +/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K) + return + +//Range +/obj/item/borg/upgrade/modkit/range + name = "range increase" + desc = "Increases the range of a kinetic accelerator when installed." + modifier = 1 + cost = 24 //so you can fit four plus a tracer cosmetic + +/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/item/projectile/kinetic/K) + K.kill_count += modifier + + +//Damage +/obj/item/borg/upgrade/modkit/damage + name = "damage increase" + desc = "Increases the damage of kinetic accelerator when installed." + modifier = 10 + +/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K) + K.damage += modifier + + +// //Cooldown +// /obj/item/borg/upgrade/modkit/cooldown +// name = "cooldown decrease" +// desc = "Decreases the cooldown of a kinetic accelerator." +// modifier = 2.5 + +// /obj/item/borg/upgrade/modkit/cooldown/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) +// . = ..() +// if(.) +// KA.overheat_time -= modifier + +// /obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) +// KA.overheat_time += modifier +// ..() + +//Cooldown +/obj/item/borg/upgrade/modkit/efficiency + name = "energy efficiency" + desc = "Decreases the energy use of a kinetic accelerator." + modifier = 20 + +/obj/item/borg/upgrade/modkit/efficiency/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = ..() + if(.) + KA.charge_cost -= modifier + +/obj/item/borg/upgrade/modkit/efficiency/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.charge_cost += modifier + ..() + +//AoE blasts +/obj/item/borg/upgrade/modkit/aoe + modifier = 0 + +/obj/item/borg/upgrade/modkit/aoe/modify_projectile(obj/item/projectile/kinetic/K) + K.name = "kinetic explosion" + if(!K.turf_aoe && !K.mob_aoe) + K.hit_overlays += /obj/effect/temp_visual/explosion/fast + K.mob_aoe += modifier + +/obj/item/borg/upgrade/modkit/aoe/turfs + name = "mining explosion" + desc = "Causes the kinetic accelerator to destroy rock in an AoE." + denied_type = /obj/item/borg/upgrade/modkit/aoe/turfs + +/obj/item/borg/upgrade/modkit/aoe/turfs/modify_projectile(obj/item/projectile/kinetic/K) + ..() + K.turf_aoe = TRUE + +/obj/item/borg/upgrade/modkit/aoe/turfs/andmobs + name = "offensive mining explosion" + desc = "Causes the kinetic accelerator to destroy rock and damage mobs in an AoE." + maximum_of_type = 3 + modifier = 0.25 + +/obj/item/borg/upgrade/modkit/aoe/mobs + name = "offensive explosion" + desc = "Causes the kinetic accelerator to damage mobs in an AoE." + modifier = 0.2 + + +//Indoors +/obj/item/borg/upgrade/modkit/indoors + name = "decrease pressure penalty" + desc = "Increases the damage a kinetic accelerator does in a high pressure environment." + modifier = 2 + denied_type = /obj/item/borg/upgrade/modkit/indoors + maximum_of_type = 2 + cost = 40 + +/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K) + K.pressure_decrease *= modifier + +//Cosmetic + +/obj/item/borg/upgrade/modkit/chassis_mod + name = "super chassis" + desc = "Makes your KA yellow. All the fun of having a more powerful KA without actually having a more powerful KA." + cost = 0 + denied_type = /obj/item/borg/upgrade/modkit/chassis_mod + var/chassis_icon = "kineticgun_u" + var/chassis_name = "super-kinetic accelerator" + +/obj/item/borg/upgrade/modkit/chassis_mod/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = ..() + if(.) + KA.icon_state = chassis_icon + KA.name = chassis_name + +/obj/item/borg/upgrade/modkit/chassis_mod/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.icon_state = initial(KA.icon_state) + KA.name = initial(KA.name) + ..() + +/obj/item/borg/upgrade/modkit/chassis_mod/orange + name = "hyper chassis" + desc = "Makes your KA orange. All the fun of having explosive blasts without actually having explosive blasts." + chassis_icon = "kineticgun_h" + chassis_name = "hyper-kinetic accelerator" + +/obj/item/borg/upgrade/modkit/tracer + name = "white tracer bolts" + desc = "Causes kinetic accelerator bolts to have a white tracer trail and explosion." + cost = 0 + denied_type = /obj/item/borg/upgrade/modkit/tracer + var/bolt_color = "#FFFFFF" + +/obj/item/borg/upgrade/modkit/tracer/modify_projectile(obj/item/projectile/kinetic/K) + K.icon_state = "ka_tracer" + K.color = bolt_color + +/obj/item/borg/upgrade/modkit/tracer/adjustable + name = "adjustable tracer bolts" + desc = "Causes kinetic accelerator bolts to have a adjustably-colored tracer trail and explosion. Use in-hand to change color." + +/obj/item/borg/upgrade/modkit/tracer/adjustable/attack_self(mob/user) + bolt_color = input(user,"Choose Color") as color diff --git a/icons/effects/96x96_vr.dmi b/icons/effects/96x96_vr.dmi new file mode 100644 index 0000000000..6214e7643f Binary files /dev/null and b/icons/effects/96x96_vr.dmi differ diff --git a/icons/mob/items/lefthand_guns_vr.dmi b/icons/mob/items/lefthand_guns_vr.dmi index 46c0497d38..8f6b3b50ce 100644 Binary files a/icons/mob/items/lefthand_guns_vr.dmi and b/icons/mob/items/lefthand_guns_vr.dmi differ diff --git a/icons/mob/items/righthand_guns_vr.dmi b/icons/mob/items/righthand_guns_vr.dmi index 6d8b68356e..6048f79855 100644 Binary files a/icons/mob/items/righthand_guns_vr.dmi and b/icons/mob/items/righthand_guns_vr.dmi differ diff --git a/icons/obj/gun_vr.dmi b/icons/obj/gun_vr.dmi index d502267439..88ff7bde89 100644 Binary files a/icons/obj/gun_vr.dmi and b/icons/obj/gun_vr.dmi differ diff --git a/icons/obj/objects_vr.dmi b/icons/obj/objects_vr.dmi index 47bb9eae24..5abf64ced4 100644 Binary files a/icons/obj/objects_vr.dmi and b/icons/obj/objects_vr.dmi differ diff --git a/icons/obj/projectiles_vr.dmi b/icons/obj/projectiles_vr.dmi index 0fa44fbec3..0ceba03d4f 100644 Binary files a/icons/obj/projectiles_vr.dmi and b/icons/obj/projectiles_vr.dmi differ diff --git a/sound/weapons/Kenetic_accel.ogg b/sound/weapons/Kenetic_accel.ogg new file mode 100644 index 0000000000..ab525baf9a Binary files /dev/null and b/sound/weapons/Kenetic_accel.ogg differ diff --git a/sound/weapons/kenetic_reload.ogg b/sound/weapons/kenetic_reload.ogg new file mode 100644 index 0000000000..7f2c779fa6 Binary files /dev/null and b/sound/weapons/kenetic_reload.ogg differ diff --git a/vorestation.dme b/vorestation.dme index 8412af551d..07d743c1cc 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2414,6 +2414,7 @@ #include "code\modules\projectiles\guns\modular_guns.dm" #include "code\modules\projectiles\guns\projectile.dm" #include "code\modules\projectiles\guns\vox.dm" +#include "code\modules\projectiles\guns\energy\kinetic_accelerator_vr.dm" #include "code\modules\projectiles\guns\energy\laser.dm" #include "code\modules\projectiles\guns\energy\netgun_vr.dm" #include "code\modules\projectiles\guns\energy\nuclear.dm"