From cee3066a415b04ba969503e5bbb730e8d544ba76 Mon Sep 17 00:00:00 2001 From: Andromeda-K22 Date: Sun, 4 Feb 2018 19:04:28 -0500 Subject: [PATCH] RUST additions and updates, Modular guns, and Lead. (#4667) * expanding rupture procs adds hydromagnetic traps for power production. * Minor tweaks. * Adds modular guns using research components. * Updates materials to have a radiation_resistance variable, used in calculating radiation. Adds Lead as a material. * Un-zeros stock material radiation resistance. * Adds, and enables four 'end-events' for the RUST in place of the old Rupture() proc. * Map muckery? * absolute pathing i guess? * getting angry, travis. * TRAVIS STAHP * I... Comments? Lists? Who the hell knows. --- code/datums/repositories/radiation.dm | 2 +- code/modules/materials/material_sheets.dm | 7 + code/modules/materials/materials.dm | 31 ++- code/modules/power/fusion/core/_core.dm | 2 +- code/modules/power/fusion/core/core_field.dm | 193 +++++++++++++++--- code/modules/power/fusion/fusion_reactions.dm | 3 +- code/modules/power/fusion/fusion_reagents.dm | 12 +- code/modules/power/fusion/magpower.dm | 54 +++++ code/modules/projectiles/guns/modular_guns.dm | 174 ++++++++++++++++ icons/obj/gun.dmi | Bin 80403 -> 84173 bytes icons/obj/machines/power/fusion.dmi | Bin 41882 -> 43629 bytes polaris.dme | 2 + 12 files changed, 440 insertions(+), 40 deletions(-) create mode 100644 code/modules/power/fusion/magpower.dm create mode 100644 code/modules/projectiles/guns/modular_guns.dm diff --git a/code/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm index 4755b982ec..5d06eccc77 100644 --- a/code/datums/repositories/radiation.dm +++ b/code/datums/repositories/radiation.dm @@ -116,7 +116,7 @@ var/global/repository/radiation/radiation_repository = new() else if(O.density) //So open doors don't get counted var/material/M = O.get_material() if(!M) continue - cached_rad_resistance += M.weight + cached_rad_resistance += M.radiation_resistance // Looks like storing the contents length is meant to be a basic check if the cache is stale due to items enter/exiting. Better than nothing so I'm leaving it as is. ~Leshana radiation_repository.resistance_cache[src] = (length(contents) + 1) diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index 0f76f6172e..d212851071 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -94,6 +94,13 @@ apply_colour = 1 no_variants = FALSE +/obj/item/stack/material/lead + name = "lead" + icon_state = "sheet-adamantine" + default_type = "lead" + apply_colour = 1 + no_variants = TRUE + /obj/item/stack/material/sandstone name = "sandstone brick" icon_state = "sheet-sandstone" diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index af5e1b7475..2fa2b1dbbe 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -99,6 +99,7 @@ var/list/name_to_material var/conductivity = null // How conductive the material is. Iron acts as the baseline, at 10. var/list/composite_material // If set, object matter var will be a list containing these values. var/luminescence + var/radiation_resistance = 20 // Radiation resistance, used in calculating how much radiation a material absorbs. Equivlent to weight, but does not affect weaponry. // Placeholder vars for the time being, todo properly integrate windows/light tiles/rods. var/created_window @@ -236,6 +237,7 @@ var/list/name_to_material weight = 22 stack_origin_tech = list(TECH_MATERIAL = 5) door_icon_base = "stone" + radiation_resistance = 80 //dense, so it's okay-ish as rad shielding. /material/diamond name = "diamond" @@ -261,6 +263,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 4) sheet_singular_name = "ingot" sheet_plural_name = "ingots" + radiation_resistance = 120 //gold is dense. /material/gold/bronze //placeholder for ashtrays name = "bronze" @@ -276,7 +279,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 3) sheet_singular_name = "ingot" sheet_plural_name = "ingots" - + radiation_resistance = 22 //R-UST port /material/supermatter name = "supermatter" @@ -337,6 +340,7 @@ var/list/name_to_material door_icon_base = "stone" sheet_singular_name = "brick" sheet_plural_name = "bricks" + radiation_resistance = 22 /material/stone/marble name = "marble" @@ -345,6 +349,7 @@ var/list/name_to_material hardness = 100 integrity = 201 //hack to stop kitchen benches being flippable, todo: refactor into weight system stack_type = /obj/item/stack/material/marble + radiation_resistance = 26 /material/steel name = DEFAULT_WALL_MATERIAL @@ -391,6 +396,7 @@ var/list/name_to_material conductivity = 13 // For the purposes of balance. stack_origin_tech = list(TECH_MATERIAL = 2) composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo + radiation_resistance = 60 //Plasteel is presumably dense and is the dominant material used in the engine. Still not great. // Very rare alloy that is reflective, should be used sparingly. /material/durasteel @@ -408,6 +414,7 @@ var/list/name_to_material reflectivity = 0.7 // Not a perfect mirror, but close. stack_origin_tech = list(TECH_MATERIAL = 8) composite_material = list("plasteel" = SHEET_MATERIAL_AMOUNT, "diamond" = SHEET_MATERIAL_AMOUNT) //shrug + radiation_resistance = 120 //it reflects XRAY LASERS. /material/plasteel/titanium name = "titanium" @@ -436,6 +443,7 @@ var/list/name_to_material window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2) created_window = /obj/structure/window/basic rod_product = /obj/item/stack/material/glass/reinforced + radiation_resistance = 15 /material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack) @@ -527,6 +535,7 @@ var/list/name_to_material created_window = /obj/structure/window/reinforced wire_product = null rod_product = null + radiation_resistance = 30 /material/glass/phoron name = "borosilicate glass" @@ -554,6 +563,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 2) composite_material = list() //todo rod_product = null + radiation_resistance = 30 /material/plastic name = "plastic" @@ -568,6 +578,7 @@ var/list/name_to_material conductivity = 2 // For the sake of material armor diversity, we're gonna pretend this plastic is a good insulator. melting_point = T0C+371 //assuming heat resistant plastic stack_origin_tech = list(TECH_MATERIAL = 3) + radiation_resistance = 12 /material/plastic/holographic name = "holoplastic" @@ -618,6 +629,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 2) sheet_singular_name = "ingot" sheet_plural_name = "ingots" + radiation_resistance = 27 /material/iron name = "iron" @@ -627,6 +639,17 @@ var/list/name_to_material conductivity = 10 sheet_singular_name = "ingot" sheet_plural_name = "ingots" + radiation_resistance = 22 + +/material/lead + name = "lead" + stack_type = /obj/item/stack/material/lead + icon_colour = "#273956" + weight = 35 + conductivity = 10 + sheet_singular_name = "ingot" + sheet_plural_name = "ingots" + radiation_resistance = 350 //actual radiation shielding, yay... // Adminspawn only, do not let anyone get this. /material/alienalloy @@ -640,6 +663,7 @@ var/list/name_to_material hardness = 500 weight = 500 protectiveness = 80 // 80% + radiation_resistance = 500 // Likewise. /material/alienalloy/elevatorium @@ -697,6 +721,7 @@ var/list/name_to_material destruction_desc = "splinters" sheet_singular_name = "plank" sheet_plural_name = "planks" + radiation_resistance = 18 /material/wood/log name = MAT_LOG @@ -739,7 +764,7 @@ var/list/name_to_material stack_origin_tech = list(TECH_MATERIAL = 1) door_icon_base = "wood" destruction_desc = "crumples" - + radiation_resistance = 1 /material/snow name = MAT_SNOW stack_type = /obj/item/stack/material/snow @@ -756,7 +781,7 @@ var/list/name_to_material destruction_desc = "crumples" sheet_singular_name = "pile" sheet_plural_name = "pile" //Just a bigger pile - + radiation_resistance = 1 /material/cloth //todo name = "cloth" stack_origin_tech = list(TECH_MATERIAL = 2) diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm index 760c46ea93..7f81b70ffd 100644 --- a/code/modules/power/fusion/core/_core.dm +++ b/code/modules/power/fusion/core/_core.dm @@ -77,7 +77,7 @@ var/list/fusion_cores = list() if(owned_field) icon_state = "core0" if(force_rupture || owned_field.plasma_temperature > 1000) - owned_field.Rupture() + owned_field.MRC() else owned_field.RadiateAll() qdel(owned_field) diff --git a/code/modules/power/fusion/core/core_field.dm b/code/modules/power/fusion/core/core_field.dm index 37351c53af..ef1c3716fa 100644 --- a/code/modules/power/fusion/core/core_field.dm +++ b/code/modules/power/fusion/core/core_field.dm @@ -1,6 +1,7 @@ #define FUSION_ENERGY_PER_K 20 #define FUSION_MAX_ENVIRO_HEAT 5000 //raise this if you want the reactor to dump more energy into the atmosphere -#define PLASMA_TEMP_RADIATION_DIVISIOR 15 //radiation divisior. plasma temp / divisor = radiation. +#define PLASMA_TEMP_RADIATION_DIVISIOR 20 //radiation divisior. plasma temp / divisor = radiation. + /obj/effect/fusion_em_field name = "electromagnetic field" @@ -19,6 +20,8 @@ var/tick_instability = 0 var/percent_unstable = 0 var/stable = 1 + var/id_tag + var/critical = 0 var/obj/machinery/power/fusion_core/owned_core var/list/dormant_reactant_quantities = list() @@ -31,7 +34,8 @@ /obj/structure/cable, /obj/machinery/atmospherics, /obj/machinery/air_sensor, - /mob/observer/dead + /mob/observer/dead, + /obj/machinery/power/hydromagnetic_trap ) var/light_min_range = 2 @@ -52,7 +56,7 @@ owned_core = new_owned_core if(!owned_core) qdel(src) - + id_tag = owned_core.id_tag //create the gimmicky things to handle field collisions var/obj/effect/fusion_particle_catcher/catcher @@ -194,37 +198,46 @@ if(percent_unstable >= 1) owned_core.Shutdown(force_rupture=1) else - if(percent_unstable > 0.5 && prob(percent_unstable*100)) + if(percent_unstable > 0.1 && prob(percent_unstable*100)) if(plasma_temperature < 2000) visible_message("\The [src] ripples uneasily, like a disturbed pond.") else var/flare var/fuel_loss var/rupture - if(percent_unstable < 0.2) + if(percent_unstable > 0.2) visible_message("\The [src] ripples uneasily, like a disturbed pond.") - fuel_loss = prob(5) - flare = prob(50) - else if(percent_unstable < 0.9) + flare = prob(25) + else if(percent_unstable > 0.5) visible_message("\The [src] undulates violently, shedding plumes of plasma!") flare = prob(50) fuel_loss = prob(20) rupture = prob(5) - else + else if(percent_unstable > 0.8) visible_message("\The [src] is wracked by a series of horrendous distortions, buckling and twisting like a living thing!") flare = 1 fuel_loss = prob(50) rupture = prob(25) if(rupture) - owned_core.Shutdown(force_rupture=1) + if(prob(80)) + MagneticQuench() + return + else if(prob(15)) + MRC() + return + else if(prob(5)) + QuantumFluxCascade() + return + else if(prob(5)) + BluespaceQuenchEvent() + return else var/lost_plasma = (plasma_temperature*percent_unstable) radiation += lost_plasma if(flare) - radiation += plasma_temperature/2 - plasma_temperature -= lost_plasma - + spawn(1) + emflare() if(fuel_loss) for(var/particle in dormant_reactant_quantities) var/lost_fuel = dormant_reactant_quantities[particle]*percent_unstable @@ -234,17 +247,19 @@ dormant_reactant_quantities.Remove(particle) Radiate() return - -/obj/effect/fusion_em_field/proc/Rupture() - visible_message("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!") - set_light(15, 15, "#CCCCFF") - empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300)) - sleep(5) - global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor") - RadiateAll() - explosion(get_turf(owned_core),-1,-1,8,10) // Blow out all the windows. - return - +/*/obj/effect/fusion_em_field/proc/CheckCriticality() + if (plasma_temperature > 70000) + critical += 0.2 + else if (instability > 0.45) + critical += 0.6 + if(critical >= 25 && prob(percent_unstable*100)) + if (critical >= 90) + visible_message("\The [src] rumbles and quivers violently, threatening to break free!") + else if(critical >= 50) + visible_message("\The [src] rumbles and quivers energetically, the walls distorting slightly.") + else if(critical >= 25) + visible_message("\The [src] rumbles and quivers slightly, vibrating the deck.") +*/ /obj/effect/fusion_em_field/proc/ChangeFieldStrength(var/new_strength) var/calc_size = 1 if(new_strength <= 50) @@ -490,19 +505,19 @@ //All procs below this point are called in _core.dm, starting at line 41. //Stability monitoring. Gives radio annoucements if field stability is below 80% /obj/effect/fusion_em_field/proc/stability_monitor() - var/warnpoint = 0.10 + var/warnpoint = 0.10 //start warning at 10% instability var/warnmessage = "Warning! Field unstable! Instability at [percent_unstable * 100]%, plasma temperature at [plasma_temperature + 295]k." var/stablemessage = "Containment field returning to stable conditions." - if(percent_unstable >= warnpoint) + if(percent_unstable >= warnpoint) //we're unstable, start warning engineering global_announcer.autosay(warnmessage, "Field Stability Monitor", "Engineering") - stable = 0 - sleep(20 SECONDS) - return - if(percent_unstable < warnpoint && stable == 0) + stable = 0 //we know we're not stable, so let's not state the safe message. + sleep(20) + return + if(percent_unstable < warnpoint && stable == 0) //The field is stable again. Let's set our safe variable and state the safe message. global_announcer.autosay(stablemessage, "Field Stability Monitor", "Engineering") stable = 1 - return + return //Reaction radiation is fairly buggy and there's at least three procs dealing with radiation here, this is to ensure constant radiation output. /obj/effect/fusion_em_field/proc/radiation_scale() @@ -513,7 +528,8 @@ if(owned_core && owned_core.loc) var/datum/gas_mixture/environment = owned_core.loc.return_air() if(environment && environment.temperature < (T0C+FUSION_MAX_ENVIRO_HEAT)) - environment.add_thermal_energy(plasma_temperature*20000) + environment.add_thermal_energy(plasma_temperature*5000) + check_instability() //Temperature changes depending on color. /obj/effect/fusion_em_field/proc/temp_color() @@ -538,8 +554,121 @@ light_max_range = 5 light_max_power = 5 return +//moved the flare to a proc for various reasons. Called on line 225. +/obj/effect/fusion_em_field/proc/emflare() + radiation += plasma_temperature/2 + light_color = "#ff0000" + light_max_power = 30 + light_min_power = 30 + light_min_range = 30 + light_max_range = 30 + visible_message("\The [src] flares to eye-searing brightness!") + sleep(60) + temp_color() + //plasma_temperature -= lost_plasma + return +//Rupture() is no longer the end all be all. Fear the magnetic resonance cascade and quantum flux cascade +/obj/effect/fusion_em_field/proc/Rupture() + visible_message("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!") + set_light(15, 15, "#CCCCFF") + empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300)) + global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor") + RadiateAll() + var/list/things_in_range = range(10, owned_core) + var/list/turfs_in_range = list() + var/turf/T + for (T in things_in_range) + turfs_in_range.Add(T) + + explosion(pick(things_in_range), -1, 5, 5, 5) + empulse(pick(things_in_range), ceil(plasma_temperature/1000), ceil(plasma_temperature/300)) + spawn(25) + explosion(pick(things_in_range), -1, 5, 5, 5) + spawn(25) + explosion(pick(things_in_range), -1, 5, 5, 5) + spawn(25) + explosion(pick(things_in_range), -1, 5, 5, 5) + spawn(10) + explosion(pick(things_in_range), -1, 5, 5, 5) + spawn(10) + explosion(pick(things_in_range), -1, 5, 5, 5) + spawn(10) + explosion(pick(things_in_range), -1, 5, 5, 5) + return + +/obj/effect/fusion_em_field/proc/MRC() //spews electromagnetic pulses in an area around the core. + visible_message("\The [src] glows an extremely bright pink and flares out of existance!") + global_announcer.autosay("Warning! Magnetic Resonance Cascade detected! Brace for electronic system distruption.", "Field Stability Monitor") + set_light(15, 15, "#ff00d8") + var/list/things_in_range = range(15, owned_core) + var/list/turfs_in_range = list() + var/turf/T + for (T in things_in_range) + turfs_in_range.Add(T) + for(var/loopcount = 1 to 10) + spawn(200) + empulse(pick(things_in_range), 10, 15) + Destroy() + return + +/obj/effect/fusion_em_field/proc/QuantumFluxCascade() //spews hot phoron and oxygen in a radius around the RUST. Will probably set fire to things + global_announcer.autosay("Warning! Quantum fluxuation detected! Flammable gas release expected.", "Field Stability Monitor") + var/list/things_in_range = range(15, owned_core) + var/list/turfs_in_range = list() + var/turf/T + for (T in things_in_range) + turfs_in_range.Add(T) + for(var/loopcount = 1 to 10) + var/turf/TT = get_turf(pick(turfs_in_range)) + if(istype(TT)) + var/datum/gas_mixture/plasma = new + plasma.adjust_gas("oxygen", (size*100), 0) + plasma.adjust_gas("phoron", (size*100), 0) + plasma.temperature = (plasma_temperature/2) + plasma.update_values() + TT.assume_air(plasma) + TT.hotspot_expose(plasma_temperature) + plasma = null + Destroy() + return + +/obj/effect/fusion_em_field/proc/MagneticQuench() //standard hard shutdown. dumps hot oxygen/phoron into the core's area and releases an EMP in the area around the core. + global_announcer.autosay("Warning! Magnetic Quench event detected, engaging hard shutdown.", "Field Stability Monitor") + empulse(owned_core, 10, 15) + var/turf/TT = get_turf(owned_core) + if(istype(TT)) + var/datum/gas_mixture/plasma = new + plasma.adjust_gas("oxygen", (size*100), 0) + plasma.adjust_gas("phoron", (size*100), 0) + plasma.temperature = (plasma_temperature/2) + plasma.update_values() + TT.assume_air(plasma) + TT.hotspot_expose(plasma_temperature) + plasma = null + Destroy() + owned_core.Shutdown() + return + +/obj/effect/fusion_em_field/proc/BluespaceQuenchEvent() //!!FUN!! causes a number of explosions in an area around the core. Will likely destory or heavily damage the reactor. + visible_message("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!") + set_light(15, 15, "#CCCCFF") + empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300)) + global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor") + RadiateAll() + var/list/things_in_range = range(10, owned_core) + var/list/turfs_in_range = list() + var/turf/T + for (T in things_in_range) + turfs_in_range.Add(T) + for(var/loopcount = 1 to 10) + explosion(pick(things_in_range), -1, 5, 5, 5) + empulse(pick(things_in_range), ceil(plasma_temperature/1000), ceil(plasma_temperature/300)) + Destroy() + owned_core.Shutdown() + return + #undef FUSION_HEAT_CAP #undef FUSION_MAX_ENVIRO_HEAT #undef PLASMA_TEMP_RADIATION_DIVISIOR \ No newline at end of file diff --git a/code/modules/power/fusion/fusion_reactions.dm b/code/modules/power/fusion/fusion_reactions.dm index 38f73812f9..623f70bd6b 100644 --- a/code/modules/power/fusion/fusion_reactions.dm +++ b/code/modules/power/fusion/fusion_reactions.dm @@ -117,7 +117,7 @@ proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy) var/turf/origin = get_turf(holder) holder.Rupture() qdel(holder) - var/radiation_level = rand(100, 200) + var/radiation_level = 200 // Copied from the SM for proof of concept. //Not any more --Cirra //Use the whole z proc --Leshana radiation_repository.z_radiate(locate(1, 1, holder.z), radiation_level, 1) @@ -141,7 +141,6 @@ proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy) return 1 - // High end reactions. /decl/fusion_reaction/boron_hydrogen p_react = "boron" diff --git a/code/modules/power/fusion/fusion_reagents.dm b/code/modules/power/fusion/fusion_reagents.dm index 875bf63fee..80b1cbb336 100644 --- a/code/modules/power/fusion/fusion_reagents.dm +++ b/code/modules/power/fusion/fusion_reagents.dm @@ -5,4 +5,14 @@ description = "A colorless, odorless, tasteless and generally inert gas used in fusion reactors. Non-radioactive." id = "helium-3" reagent_state = GAS - color = "#808080" \ No newline at end of file + color = "#808080" + +/obj/structure/reagent_dispensers/he3 + name = "fueltank" + desc = "A fueltank." + icon = 'icons/obj/objects.dmi' + icon_state = "weldtank" + amount_per_transfer_from_this = 10 + New() + ..() + reagents.add_reagent("helium-3",1000) \ No newline at end of file diff --git a/code/modules/power/fusion/magpower.dm b/code/modules/power/fusion/magpower.dm new file mode 100644 index 0000000000..c6882c6eb3 --- /dev/null +++ b/code/modules/power/fusion/magpower.dm @@ -0,0 +1,54 @@ +#define ENERGY_PER_K 20 +#define MINIMUM_PLASMA_TEMPERATURE 10000 + +/obj/machinery/power/hydromagnetic_trap + name = "\improper hydromagnetic trap" + desc = "A device for extracting power from high-energy plasma in toroidal fields." + icon = 'icons/obj/machines/power/fusion.dmi' + icon_state = "mag_trap0" + anchored = 1 + var/list/things_in_range = list()//what is in a radius of us? + var/list/fields_in_range = list()//What EM fields are in that radius? + var/list/active_field = list()//Our active field. + var/active = 0 //are we even on? + var/id_tag //needed for !!rasins!! + +/obj/machinery/power/hydromagnetic_trap/process() + if(!powernet && anchored == 1) + return + spawn(1) + Active() + Search() + +/obj/machinery/power/hydromagnetic_trap/proc/Search()//let's not have +100 instances of the same field in active_field. + things_in_range = range(7, src) + var/obj/effect/fusion_em_field/FFF + for (FFF in things_in_range) + fields_in_range.Add(FFF) + for (FFF in fields_in_range) + if (active_field.len > 0) + return + else if (active_field.len == 0) + Link() + return + +/obj/machinery/power/hydromagnetic_trap/proc/Link() //discover our EM field + var/obj/effect/fusion_em_field/FFF + for(FFF in fields_in_range) + if (FFF.id_tag != id_tag) + return + active_field += FFF + active = 1 + return + +/obj/machinery/power/hydromagnetic_trap/proc/Active()//POWERRRRR + var/obj/effect/fusion_em_field/FF + if (active == 0) + return + for (FF in active_field) + if (FF.plasma_temperature >= MINIMUM_PLASMA_TEMPERATURE) + icon_state = "mag_trap1" + add_avail(ENERGY_PER_K * FF.plasma_temperature) + if (FF.plasma_temperature <= MINIMUM_PLASMA_TEMPERATURE) + icon_state = "mag_trap0" + return diff --git a/code/modules/projectiles/guns/modular_guns.dm b/code/modules/projectiles/guns/modular_guns.dm new file mode 100644 index 0000000000..8f81e971c4 --- /dev/null +++ b/code/modules/projectiles/guns/modular_guns.dm @@ -0,0 +1,174 @@ +//This will likely drive me insane, but fuck it. Let's give it a shot. -k22 +//This was heavily assisted by MoondancerPony +/obj/item/weapon/gun/energy/modular + name = "modular weapon" + desc = "You shouldn't be seeing this. Contact your local time-police station." + icon_state = "mod_pistol" + cell_type = /obj/item/weapon/cell/device/weapon + charge_cost = 120 + + var/max_components = 3 //How many components we can hold. + var/capacitor_rating = 0 //How good are the capacitors inside us? + var/laser_rating = 0 //How good are the lasers inside of us? + var/manipulator_rating = 0 //How good are the manipulators inside us? + var/assembled = 1 //Are we closed up? + var/max_burst_size = 5 //Don't let our maximum burst size get too high. + var/list/guncomponents = list() //Generate our list of components. + var/accepted_components = list( + /obj/item/weapon/stock_parts/capacitor/, + /obj/item/weapon/stock_parts/capacitor/adv, + /obj/item/weapon/stock_parts/capacitor/super, + /obj/item/weapon/stock_parts/micro_laser/, + /obj/item/weapon/stock_parts/micro_laser/high, + /obj/item/weapon/stock_parts/micro_laser/ultra, + /obj/item/weapon/stock_parts/manipulator/, + /obj/item/weapon/stock_parts/manipulator/nano, + /obj/item/weapon/stock_parts/manipulator/pico, + ) + //Excessively long because it won't accept subtypes for some reason! + + +/obj/item/weapon/gun/energy/modular/New() //Initialize our components. + ..() + guncomponents = list() + guncomponents += new /obj/item/weapon/stock_parts/capacitor + guncomponents += new /obj/item/weapon/stock_parts/micro_laser + guncomponents += new /obj/item/weapon/stock_parts/manipulator + CheckParts() + FireModeModify() + +/obj/item/weapon/gun/energy/modular/proc/CheckParts() //What parts do we have inside us, and how good are they? + capacitor_rating = 0 + laser_rating = 0 + manipulator_rating = 0 + for(var/obj/item/weapon/stock_parts/capacitor/CA in guncomponents) + capacitor_rating += CA.rating + for(var/obj/item/weapon/stock_parts/micro_laser/ML in guncomponents) + laser_rating += ML.rating + for(var/obj/item/weapon/stock_parts/manipulator/MA in guncomponents) + manipulator_rating += MA.rating + FireModeModify() + +/obj/item/weapon/gun/energy/modular/attackby(obj/item/O, mob/user) + if(istype(O, /obj/item/weapon/screwdriver)) + to_chat(user, "You [assembled ? "disassemble" : "assemble"] the gun.") + assembled = !assembled + playsound(src, O.usesound, 50, 1) + return + if(istype(O, /obj/item/weapon/crowbar)) + if(assembled == 1) + to_chat(user, "Disassemble the [src] first!") + return + for(var/obj/item/I in guncomponents) + to_chat(user, "You remove the gun's components.") + playsound(src, O.usesound, 50, 1) + I.forceMove(get_turf(src)) + guncomponents.Remove(I) + CheckParts() + return + //Someone's attacking us, and it's not anything we have a special case for (i.e. a tool) + ..() + if(assembled) // can't put anything in + return + if(!(O.type in accepted_components))//check if we can accept it + to_chat(user, "You can't add this to [src]!") + return + if(guncomponents.len >= max_components) //We have too many componenets and can't fit more. + to_chat(user, "You can't add any more components!") + return + if(istype(O, /obj/item/weapon/stock_parts/capacitor) && capacitor_rating == 5) + to_chat(user, "You can't add any more capacitors!") + return + user.drop_item() + guncomponents += O + O.forceMove(src) + to_chat(user, "You add a component to the [src]") + CheckParts() + + +/obj/item/weapon/gun/energy/modular/proc/FireModeModify() //Check our laser, manipulator, and capacitor ratings, adjust stun and lethal firemodes depending on laser / manipulator rating and burst size depending on capacitors. + //check our lethal and stun ratings depending on laser and manipulator rating. + var/burstmode = capacitor_rating + var/beammode + var/beammode_lethal + var/chargecost + var/chargecost_lethal + + if(laser_rating >= 15) + beammode_lethal = /obj/item/projectile/beam/sniper + beammode = /obj/item/projectile/beam/stun + chargecost = 300 + chargecost_lethal = 600 + else if(laser_rating >= 10) + beammode_lethal = /obj/item/projectile/beam/xray + beammode = /obj/item/projectile/beam/stun + chargecost = 300 + chargecost_lethal = 200 + else if(laser_rating == 8 && manipulator_rating == 5) //very specific set of combinations. No, you can't make a pulse rifle. Sorry research. + beammode_lethal = /obj/item/projectile/beam/heavylaser + beammode = /obj/item/projectile/beam/stun + chargecost = 300 + chargecost_lethal = 600 + else if(laser_rating >= 5) + beammode_lethal = /obj/item/projectile/beam/midlaser + beammode = /obj/item/projectile/beam/stun/med + chargecost = 180 + chargecost_lethal = 240 + else if(laser_rating < 5) + beammode_lethal = /obj/item/projectile/beam/weaklaser + beammode = /obj/item/projectile/beam/stun/weak + chargecost = 100 + chargecost_lethal = 200 + + firemodes = list( + new /datum/firemode(src, list(mode_name="stun", projectile_type=beammode, fire_sound='sound/weapons/Taser.ogg', charge_cost = chargecost)), + new /datum/firemode(src, list(mode_name="lethal", projectile_type=beammode_lethal, fire_sound='sound/weapons/Laser.ogg', charge_cost = chargecost_lethal)), + new /datum/firemode(src, list(mode_name="[burstmode] shot stun", projectile_type=beammode, fire_sound='sound/weapons/Taser.ogg', charge_cost = chargecost, burst = burstmode)), + new /datum/firemode(src, list(mode_name="[burstmode] shot lethal", projectile_type=beammode_lethal, fire_sound='sound/weapons/Laser.ogg', charge_cost = chargecost_lethal, burst = burstmode)), + ) + +/obj/item/weapon/gun/energy/modular/load_ammo(var/obj/item/C, mob/user) + if(istype(C, cell_type)) + if(self_recharge || battery_lock) + user << "[src] does not have a battery port." + return + var/obj/item/weapon/cell/P = C + if(power_supply) + user << "[src] already has a power cell." + else + user.visible_message("[user] is reloading [src].", "You start to insert [P] into [src].") + if(do_after(user, 10)) + user.remove_from_mob(P) + power_supply = P + P.loc = src + user.visible_message("[user] inserts [P] into [src].", "You insert [P] into [src].") + playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1) + update_icon() + update_held_icon() + return + +/obj/item/weapon/gun/energy/modular/pistol + name = "modular pistol" + icon_state = "mod_pistol" + max_components = 6 + desc = "A bulky modular pistol frame. This only only accepts six parts." + origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3) + burst_delay = 2 + +/obj/item/weapon/gun/energy/modular/carbine + name = "modular carbine" + icon_state = "mod_carbine" + max_components = 8 + desc = "A modular version of the standard laser carbine. This one can hold 8 components." + origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 3, TECH_MATERIAL = 3) + burst_delay = 2 + +/obj/item/weapon/gun/energy/modular/cannon + name = "modular cannon" + icon_state = "mod_cannon" + max_components = 14 + desc = "Say hello, to my little friend!" + one_handed_penalty = 4 //dual wielding = no. + cell_type = /obj/item/weapon/cell //We're bigger. We can use much larger power cells. + origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_MATERIAL = 5, TECH_BLUESPACE = 4) //its a damn cannon capable of holding a huge amount of parts. + burst_delay = 4 //preventing extreme silliness. \ No newline at end of file diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index d7a107da9409dea8225d7fac0c65ca8490279dd0..a9c1789bf4eede81136696a9307a0fecb85a87e9 100644 GIT binary patch delta 25619 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∿sNnS)ex-&dKYoZ35EX732 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 diff --git a/icons/obj/machines/power/fusion.dmi b/icons/obj/machines/power/fusion.dmi index be236a145e92ccaeff823cf155eb368bcdad8873..4d20f04fcdae319fcf48993d06e7f4f208402a02 100644 GIT binary patch delta 3695 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 GJ^dfV45VHF delta 1943 zcmYk6eLU0a8^^yRp@hy+RG!j29F;k>oKDtuN{-gyD5*J3n#4Q~rD$wlhv@uD7E38i z+4NxIi0)~-2dFy^?H9kpX<6`_f)sm9j?}OC>TNX z^@}?Yd@ks0SWH}4Gywn-@{4b@5nebOyZ5$W{Qf=9Y&sweKKi%g`svkKv37$la;XQ=>%$`U)X{0WZP5)?n z9g5qP7neA;X(Yo#uQBk~mdfKnAa2)IS*cqXZZ}2$%0nQ-PAe()WPBi#TYC298~L?c z>*wR}MlRu`^sXb14q91XiCECTLLj?e+D2`u8t8Huo(yg0ofsSWUr(ucboBJF zg-;S~U~_ZOkVW=CKCPRZwmM#RKK>-(eHSSjw`UDWaA_@lqH~m`Mzw9d{03ApTpxct zwP*g>y7Gi(reMvr-m$r$O)l(-M}xtQZ9_JzR~4iEi0mGhz$)!q|KvO(&mGOOc79?8 ztJl;#6w|zV1N;HN8bBY|=bKPj0a4|FZ14^1?e2_W%Dt|26{ByA32+PI(^Tz_0tf#Z zzI)7u+G56v+LP&-^;7AkYv6C{bOQ`w9_**+-z?4hTl#$s9j6JQ4^kB?mB*mUQw%7% z;OhcJcH&AY_r=Etz2yOd3B|&F&$YD0eHoQ>nZRVcCXcnZk3{{;Y07KjlZ^`BeqXcnRWF@?Y6@<5YM3+d z7ZebWSuffMcFufxd$nDfN|$lh&+GW~Dvf-mZfvf@l2l9@XQG@lL}OT7z9wL|i2gME zG9ex;W6g2Kg=`cx_QNbliaIzR`#$d`s%>C^Ha9otR83Lt#R)n$Q2M6cz3OaYbx@89 zui7krUUFIb5mqK+KVrE?yu=c}v6s^8UduNhTfqsBSYkqL72bx(v1Q|vRf;GHT=Gf` zYiQ;s7e4`0R9N%GR|Rmp(4NWj=l57FS{AevDn1_v_o76Tt?T~Af*PPiDi>X6r9`&~ z$cc@U;z9P)_-9M!yEpBcc{<6I-PW_$^`=HeN2*ga`E~4#zFdeX=^io_yCh#*69q&DxPehSSboSw~H zjkpjdGj%wc>{^gH`;tPO<|%rq7y7e9RD1`em@07*QK6FH=R=%Zn2lBz9)A=__J6YJ zzXi+MNI9{?3LB0HM{~DdEKKCn!MFHIkErKmwxq~w)dQonxc=79_8&y%8s&O{YLrK3 zTq`;#C+>abe&ognI})lc$|P73Bnalk7YPY%GDJ{@C;c8H=L~|kGu(_`NP}uvfoIzN zCNI*mDi+WZn4Z?~McNF4S0#wr1$9Fz#V|ZseRDvA;t0LkU?9;Ifq>Tq@ccB#+|u%9 zAEsGD1-S#Quv6VtT=ydkYrP%kroXsn1yl=i@H|?UH&SURo0Qky>G<@1*b+r9t*)*< zbCK_oZIUtY&gimR9k@iEaB0g$#SZ^EzgVw%x7~{i3R`p`lH_BSUX094;v%0-hHz55 z$ipOXez3*9FezSXN-~tO{=#DOYC9@M*=Id!`@AoE{^*{io+i=t@uAY?E{xJiczd>E zx?YlJt=AptLKXd6gU>7yK??^k_zsat!AI0Fbif-vpo5mTxQNW5Sp{;UOZ852Uh8 zda`9US=NOtlTMThF%P; z$C%uHiDIGTI5XR~#0!OlkB_?6x^{kXnSLF)B}0QtF#^n4&W!VR(#@Nj4V2K98zK*0PSpq;$M1P8=0X5m#K zmA94RL&huq*!gS&KuGb~I~Y=IwF_LpQIQ7xsPKYtmb%Uvrs(V!`0Pwqrpm( zK)~T)w{a8B`LOYdoSJCS#-A+7cfV@=_H$Zd!}yZ{YduHh2$Ogkh!Om}TI>IU#jqE} z+$4MOu{O~DyOG)VHoD<(SEGb?dw_;W|4Z6{hm$-n#>5|RDAy=kxpo@;;(0_`a! Q0Qvyh{m%ns`*A7%0aRo8`Tzg` diff --git a/polaris.dme b/polaris.dme index 5cc6b381fb..da4169efe1 100644 --- a/polaris.dme +++ b/polaris.dme @@ -2016,6 +2016,7 @@ #include "code\modules\power\fusion\fusion_particle_catcher.dm" #include "code\modules\power\fusion\fusion_reactions.dm" #include "code\modules\power\fusion\fusion_reagents.dm" +#include "code\modules\power\fusion\magpower.dm" #include "code\modules\power\fusion\core\_core.dm" #include "code\modules\power\fusion\core\core_control.dm" #include "code\modules\power\fusion\core\core_field.dm" @@ -2058,6 +2059,7 @@ #include "code\modules\projectiles\ammunition\rounds.dm" #include "code\modules\projectiles\guns\energy.dm" #include "code\modules\projectiles\guns\launcher.dm" +#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\laser.dm"