| AUTHOR | TITLE | CATEGORY | |
| [author] | [title] | [category] | \[Order\] |
At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.
You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!
Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.
Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.
That's all to it, be safe, be green!
" - -/proc/rate_control(var/S, var/V, var/C, var/Min=1, var/Max=5, var/Limit=null) //How not to name vars - var/href = "-[href]=-[Min]'>- [(C?C : 0)] [href]=[Min]'>+[href]=[Max]'>+" - if(Limit) return "[href]=-[Limit]'>-"+rate+"[href]=[Limit]'>+" - return rate \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 67b56042c19..6addb24a524 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -117,29 +117,29 @@ /obj/item/ammo_box/magazine/m45 name = "handgun magazine (.45)" - icon_state = "45" + icon_state = "45-8" ammo_type = /obj/item/ammo_casing/c45 caliber = ".45" max_ammo = 8 /obj/item/ammo_box/magazine/m45/update_icon() ..() - icon_state = "[initial(icon_state)]-[ammo_count() ? "8" : "0"]" + icon_state = "45-[ammo_count() ? "8" : "0"]" /obj/item/ammo_box/magazine/smgm9mm name = "SMG magazine (9mm)" - icon_state = "smg9mm" + icon_state = "smg9mm-20" ammo_type = /obj/item/ammo_casing/c9mm caliber = "9mm" max_ammo = 20 /obj/item/ammo_box/magazine/smgm9mm/update_icon() ..() - icon_state = "[initial(icon_state)]-[round(ammo_count(),5)]" + icon_state = "smg9mm-[round(ammo_count(),5)]" /obj/item/ammo_box/magazine/smgm45 name = "SMG magazine (.45)" - icon_state = "c20r45" + icon_state = "c20r45-20" origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/c45 caliber = ".45" @@ -147,7 +147,7 @@ /obj/item/ammo_box/magazine/smgm45/update_icon() ..() - icon_state = "[initial(icon_state)]-[round(ammo_count(),2)]" + icon_state = "c20r45-[round(ammo_count(),2)]" obj/item/ammo_box/magazine/tommygunm45 name = "drum magazine (.45)" @@ -184,7 +184,7 @@ obj/item/ammo_box/magazine/tommygunm45 /obj/item/ammo_box/magazine/m762 name = "box magazine (7.62mm)" - icon_state = "a762" + icon_state = "a762-50" origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/a762 caliber = "a762" @@ -192,13 +192,14 @@ obj/item/ammo_box/magazine/tommygunm45 /obj/item/ammo_box/magazine/m762/update_icon() ..() - icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]" + icon_state = "a762-[round(ammo_count(),10)]" + /obj/item/ammo_box/magazine/m12g - name = "shotgun magazine (12g taser slugs)" - icon_state = "m12gs" + name = "shotgun magazine (12g buckshot)" + icon_state = "m12gb" + ammo_type = /obj/item/ammo_casing/shotgun/buckshot origin_tech = "combat=3;syndicate=1" - ammo_type = /obj/item/ammo_casing/shotgun/stunslug caliber = "shotgun" max_ammo = 8 @@ -206,14 +207,12 @@ obj/item/ammo_box/magazine/tommygunm45 ..() icon_state = "[initial(icon_state)]-[Ceiling(ammo_count(0)/8)*8]" - -/obj/item/ammo_box/magazine/m12g/buckshot - name = "shotgun magazine (12g buckshot)" - icon_state = "m12gb" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - +/obj/item/ammo_box/magazine/m12g/stun + name = "shotgun magazine (12g taser slugs)" + icon_state = "m12gs" + ammo_type = /obj/item/ammo_casing/shotgun/stunslug /obj/item/ammo_box/magazine/m12g/dragon name = "shotgun magazine (12g dragon's breath)" icon_state = "m12gf" - ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath + ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index a20702e8002..83a7f26c922 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -4,16 +4,26 @@ icon_state = "ionrifle" item_state = null //so the human update icon uses the icon_state instead. origin_tech = "combat=2;magnets=4" + can_flashlight = 1 w_class = 5 flags = CONDUCT slot_flags = SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/ion) - pin = null /obj/item/weapon/gun/energy/ionrifle/emp_act(severity) return +/obj/item/weapon/gun/energy/ionrifle/carbine + name = "ion carbine" + desc = "The MK.II Prototype Ion Projector is a lightweight carbine version of the larger ion rifle, built to be ergonomic and efficient." + icon_state = "ioncarbine" + item_state = "ioncarbine" + origin_tech = "combat=4;magnets=4;materials=4" + w_class = 3 + slot_flags = SLOT_BELT + pin = null + /obj/item/weapon/gun/energy/decloner name = "biological demolecularisor" desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." diff --git a/code/modules/reagents/Chemistry-Goon-Toxins.dm b/code/modules/reagents/Chemistry-Goon-Toxins.dm index 8c0a3b7d61c..d7066b8abd1 100644 --- a/code/modules/reagents/Chemistry-Goon-Toxins.dm +++ b/code/modules/reagents/Chemistry-Goon-Toxins.dm @@ -117,7 +117,7 @@ datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob) result = "neurotoxin2" required_reagents = list("space_drugs" = 1) result_amount = 1 - required_temp = 200 + required_temp = 370 datum/reagent/cyanide name = "Cyanide" diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 7671250cf46..30955e51207 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -323,6 +323,7 @@ datum/reagents/proc/handle_reactions() var/list/seen = viewers(4, get_turf(my_atom)) if(!istype(my_atom, /mob)) // No bubbling mobs + playsound(get_turf(my_atom), 'sound/effects/bubbles.ogg', 80, 1) for(var/mob/M in seen) M << "\icon[my_atom] [C.mix_message]" @@ -335,8 +336,6 @@ datum/reagents/proc/handle_reactions() ME2.name = "used slime extract" ME2.desc = "This extract has been used up." - playsound(get_turf(my_atom), 'sound/effects/bubbles.ogg', 80, 1) - C.on_reaction(src, created_volume) reaction_occured = 1 break diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 4f048370812..01c2b9cf303 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -18,6 +18,7 @@ var/recharged = 0 var/recharge_delay = 5 //Time it game ticks between recharges var/image/icon_beaker = null //cached overlay + var/uiname = "Chem Dispenser 5000" var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine", "sodium","aluminium","silicon","phosphorus","sulfur","chlorine","potassium","iron", "copper","mercury","radium","water","ethanol","sugar","sacid","fuel","silver","iodine","bromine","stable_plasma") @@ -108,7 +109,7 @@ if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "chem_dispenser.tmpl", "Chem Dispenser 5000", 490, 710) + ui = new(user, src, ui_key, "chem_dispenser.tmpl", "[uiname]", 490, 710) // when the ui is first opened this is the data it will use ui.set_initial_data(data) // open the new ui window @@ -1445,3 +1446,47 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) ui = new(user, src, ui_key, "chem_heater.tmpl", "ChemHeater", 350, 270) ui.set_initial_data(data) ui.open() + +/////////////////////////////////////////////////////////////////////////// + +/obj/machinery/chem_dispenser/drinks + name = "soda dispenser" + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "soda_dispenser" + energy = 100 + max_energy = 100 + amount = 30 + recharge_delay = 5 + uiname = "Soda Dispenser" + dispensable_reagents = list("water","ice","coffee","cream","tea","icetea","cola","spacemountainwind","dr_gibb","space_up","tonic","sodawater","lemon_lime","sugar","orangejuice","limejuice","tomatojuice") + +/obj/machinery/chem_dispenser/drinks/attackby(var/obj/item/O as obj, var/mob/user as mob) + + if(default_unfasten_wrench(user, O)) + return + + if (istype(O,/obj/item/weapon/reagent_containers/glass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker)) + + if (beaker) + return 1 + else + src.beaker = O + user.drop_item() + O.loc = src + update_icon() + src.updateUsrDialog() + return 0 + + + +/obj/machinery/chem_dispenser/drinks/beer + name = "booze dispenser" + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "booze_dispenser" + uiname = "Booze Dispenser" + dispensable_reagents = list("lemon_lime","sugar","orangejuice","limejuice","sodawater","tonic","beer","kahlua","whiskey","wine","vodka","gin","rum","tequila","vermouth","cognac","ale") + diff --git a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm index 992aefe83bc..cc00c95189d 100644 --- a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm @@ -187,17 +187,17 @@ datum/reagent/consumable/frostoil/on_mob_life(var/mob/living/M as mob) if(!data) data = 1 switch(data) if(1 to 15) - M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT + M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT if(holder.has_reagent("capsaicin")) holder.remove_reagent("capsaicin", 5) if(istype(M, /mob/living/carbon/slime)) M.bodytemperature -= rand(5,20) if(15 to 25) - M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT + M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT if(istype(M, /mob/living/carbon/slime)) M.bodytemperature -= rand(10,20) if(25 to INFINITY) - M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT + M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT if(prob(1)) M.emote("shiver") if(istype(M, /mob/living/carbon/slime)) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index e81ee2c5813..cdd38bda439 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -411,27 +411,18 @@ silicate mob_react = 1 /datum/chemical_reaction/foam/on_reaction(var/datum/reagents/holder, var/created_volume) - - var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "The solution violently bubbles!" - - location = get_turf(holder.my_atom) for(var/mob/M in viewers(5, location)) M << "The solution spews out foam!" - //world << "Holder volume is [holder.total_volume]" - //for(var/datum/reagent/R in holder.reagent_list) - // world << "[R.name] = [R.volume]" - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 0) + s.set_up(created_volume, location, holder) s.start() holder.clear_reagents() return + /datum/chemical_reaction/metalfoam name = "Metal Foam" id = "metalfoam" @@ -441,18 +432,18 @@ silicate mob_react = 1 /datum/chemical_reaction/metalfoam/on_reaction(var/datum/reagents/holder, var/created_volume) - - var/location = get_turf(holder.my_atom) for(var/mob/M in viewers(5, location)) - M << "The solution spews out a metalic foam!" + M << "The solution spews out a metallic foam!" - var/datum/effect/effect/system/foam_spread/s = new() + var/datum/effect/effect/system/foam_spread/metal/s = new() s.set_up(created_volume, location, holder, 1) s.start() + holder.clear_reagents() return + /datum/chemical_reaction/ironfoam name = "Iron Foam" id = "ironlfoam" @@ -462,21 +453,18 @@ silicate mob_react = 1 /datum/chemical_reaction/ironfoam/on_reaction(var/datum/reagents/holder, var/created_volume) - - var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "The solution spews out a metalic foam!" + M << "The solution spews out a metallic foam!" - var/datum/effect/effect/system/foam_spread/s = new() + var/datum/effect/effect/system/foam_spread/metal/s = new() s.set_up(created_volume, location, holder, 2) s.start() + holder.clear_reagents() return - /datum/chemical_reaction/foaming_agent name = "Foaming Agent" id = "foaming_agent" @@ -527,289 +515,6 @@ datum/chemical_reaction/pestkiller required_reagents = list("toxin" = 1, "ethanol" = 4) result_amount = 5 -/////////////////////////////////////OLD SLIME CORE REACTIONS /////////////////////////////// -/* -/datum/chemical_reaction/slimepepper - name = "Slime Condensedcapaicin" - id = "m_condensedcapaicin" - result = "condensedcapsaicin" - required_reagents = list("sugar" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 1 -/datum/chemical_reaction/slimefrost - name = "Slime Frost Oil" - id = "m_frostoil" - result = "frostoil" - required_reagents = list("water" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 1 -/datum/chemical_reaction/slimeglycerol - name = "Slime Glycerol" - id = "m_glycerol" - result = "glycerol" - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 1 - -/datum/chemical_reaction/slime_explosion - name = "Slime Explosion" - id = "m_explosion" - result = null - required_reagents = list("blood" = 1) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 2 -/datum/chemical_reaction/slime_explosion/on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/10, 1), location, 0, 0) - e.start() - - holder.clear_reagents() - return -/datum/chemical_reaction/slimejam - name = "Slime Jam" - id = "m_jam" - result = "slimejelly" - required_reagents = list("water" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 2 -/datum/chemical_reaction/slimesynthi - name = "Slime Synthetic Flesh" - id = "m_flesh" - result = null - required_reagents = list("sugar" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 2 -/datum/chemical_reaction/slimesynthi/on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location) - return - -/datum/chemical_reaction/slimeenzyme - name = "Slime Enzyme" - id = "m_enzyme" - result = "enzyme" - required_reagents = list("blood" = 1, "water" = 1) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 3 -/datum/chemical_reaction/slimeplasma - name = "Slime Plasma" - id = "m_plasma" - result = "plasma" - required_reagents = list("sugar" = 1, "blood" = 2) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 3 -/datum/chemical_reaction/slimevirus - name = "Slime Virus" - id = "m_virus" - result = null - required_reagents = list("sugar" = 1, "sacid" = 1) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 3 -/datum/chemical_reaction/slimevirus/on_reaction(var/datum/reagents/holder, var/created_volume) - holder.clear_reagents() - - var/virus = pick(/datum/disease/advance/flu, /datum/disease/advance/cold, \ - /datum/disease/pierrot_throat, /datum/disease/fake_gbs, \ - /datum/disease/brainrot, /datum/disease/magnitis) - - - var/datum/disease/F = new virus(0) - var/list/data = list("viruses"= list(F)) - holder.add_reagent("blood", 20, data) - - holder.add_reagent("cyanide", rand(1,10)) - - return - -/datum/chemical_reaction/slimeteleport - name = "Slime Teleport" - id = "m_tele" - result = null - required_reagents = list("facid" = 2, "mutagen" = 2) - required_catalysts = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 4 -/datum/chemical_reaction/slimeteleport/on_reaction(var/datum/reagents/holder, var/created_volume) - - // Calculate new position (searches through beacons in world) - var/obj/item/device/radio/beacon/chosen - var/list/possible = list() - for(var/obj/item/device/radio/beacon/W in world) - possible += W - - if(possible.len > 0) - chosen = pick(possible) - - if(chosen) - // Calculate previous position for transition - - var/turf/FROM = get_turf(holder.my_atom) // the turf of origin we're travelling FROM - var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO - - playsound(TO, 'sound/effects/phasein.ogg', 100, 1) - - var/list/flashers = list() - for(var/mob/living/carbon/human/M in viewers(TO, null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) // flash dose faggots - flashers += M - - var/y_distance = TO.y - FROM.y - var/x_distance = TO.x - FROM.x - for (var/atom/movable/A in range(2, FROM )) // iterate thru list of mobs in the area - if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid - if( A.anchored && !istype(A, /mob/dead/observer) ) continue // don't teleport anchored things (computers, tables, windows, grilles, etc) because this causes problems! - // do teleport ghosts however because hell why not - - var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place - if(!A.Move(newloc)) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving - A.loc = locate(A.x + x_distance, A.y + y_distance, TO.z) - - spawn() - if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect - var/mob/M = A - if(M.client) - var/obj/blueeffect = new /obj(src) - blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" - blueeffect.icon = 'icons/effects/effects.dmi' - blueeffect.icon_state = "shieldsparkles" - blueeffect.layer = 17 - blueeffect.mouse_opacity = 0 - M.client.screen += blueeffect - sleep(20) - M.client.screen -= blueeffect - qdel(blueeffect) -/datum/chemical_reaction/slimecrit - name = "Slime Crit" - id = "m_tele" - result = null - required_reagents = list("sacid" = 1, "blood" = 1) - required_catalysts = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 4 -/datum/chemical_reaction/slimecrit/on_reaction(var/datum/reagents/holder, var/created_volume) - - var/blocked = list(/mob/living/simple_animal/hostile, - /mob/living/simple_animal/hostile/pirate, - /mob/living/simple_animal/hostile/pirate/ranged, - /mob/living/simple_animal/hostile/russian, - /mob/living/simple_animal/hostile/russian/ranged, - /mob/living/simple_animal/hostile/syndicate, - /mob/living/simple_animal/hostile/syndicate/melee, - /mob/living/simple_animal/hostile/syndicate/melee/space, - /mob/living/simple_animal/hostile/syndicate/ranged, - /mob/living/simple_animal/hostile/syndicate/ranged/space, - /mob/living/simple_animal/hostile/alien/queen/large, - /mob/living/simple_animal/clown - )//exclusion list for things you don't want the reaction to create. - var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - for(var/i = 1, i <= created_volume, i++) - var/chosen = pick(critters) - var/mob/living/simple_animal/hostile/C = new chosen - C.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(C, pick(NORTH,SOUTH,EAST,WEST)) -/datum/chemical_reaction/slimebork - name = "Slime Bork" - id = "m_tele" - result = null - required_reagents = list("sugar" = 1, "water" = 1) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 4 -/datum/chemical_reaction/slimebork/on_reaction(var/datum/reagents/holder, var/created_volume) - - var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks - // BORK BORK BORK - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - for(var/i = 1, i <= created_volume + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) - - - -/datum/chemical_reaction/slimechloral - name = "Slime Chloral" - id = "m_bunch" - result = "chloralhydrate" - required_reagents = list("blood" = 1, "water" = 2) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 5 -/datum/chemical_reaction/slimeretro - name = "Slime Retro" - id = "m_xeno" - result = null - required_reagents = list("sugar" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 5 -/datum/chemical_reaction/slimeretro/on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/disease/F = new /datum/disease/dna_retrovirus(0) - var/list/data = list("viruses"= list(F)) - holder.add_reagent("blood", 20, data) -/datum/chemical_reaction/slimefoam - name = "Slime Foam" - id = "m_foam" - result = null - required_reagents = list("sacid" = 1) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 5 - -/datum/chemical_reaction/slimefoam/on_reaction(var/datum/reagents/holder, var/created_volume) - - - var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "\red The solution violently bubbles!" - - location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out foam!" - - //world << "Holder volume is [holder.total_volume]" - //for(var/datum/reagent/R in holder.reagent_list) - // world << "[R.name] = [R.volume]" - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 0) - s.start() - holder.clear_reagents() - return -*/ /////////////////////////////////////////////NEW SLIME CORE REACTIONS///////////////////////////////////////////// //Grey diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index e676ca17a92..7e2e63aba62 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -23,7 +23,7 @@ Borg Hypospray var/recharge_time = 5 //Time it takes for shots to recharge (in seconds) var/list/datum/reagents/reagent_list = list() - var/list/reagent_ids = list("omnizine", "epinephrine", "spaceacillin") + var/list/reagent_ids = list("salbutamol", "salglu_solution", "charcoal", "epinephrine", "spaceacillin") //var/list/reagent_ids = list("salbutamol", "salglu_solution", "salglu_solution", "charcoal", "ephedrine", "spaceacillin") var/list/modes = list() //Basically the inverse of reagent_ids. Instead of having numbers as "keys" and strings as values it has strings as keys and numbers as values. //Used as list for input() in shakers. diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 50aaac4afb1..7a2f2dab5d7 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -307,6 +307,16 @@ datum/design/proc/CalcReliability(var/list/temp_techs) build_path = /obj/item/clothing/glasses/meson category = list("Equipement") +/datum/design/nvgmesons + name = "Night Vision Optical Meson Scanners" + desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display." + id = "nvgmesons" + req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4) + build_type = PROTOLATHE + materials = list("$metal" = 300, "$glass" = 400, "$plasma" = 250, "$uranium" = 1000) + build_path = /obj/item/clothing/glasses/meson/night + category = list("Equipement") + /datum/design/night_vision_goggles name = "Night Vision Goggles" desc = "Goggles that let you see through darkness unhindered." diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index aeac82800b8..5798d7eb90a 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -145,14 +145,14 @@ build_path = /obj/item/weapon/gun/energy/xray category = list("Weapons") -/datum/design/ionrifle - name = "Ion Rifle" +/datum/design/ioncarbine + name = "Ion Carbine" desc = "How to dismantle a cyborg : The gun." - id = "ionrifle" + id = "ioncarbine" req_tech = list("combat" = 5, "materials" = 4, "magnets" = 4) build_type = PROTOLATHE materials = list("$silver" = 4000, "$metal" = 6000, "$uranium" = 1000) - build_path = /obj/item/weapon/gun/energy/ionrifle + build_path = /obj/item/weapon/gun/energy/ionrifle/carbine category = list("Weapons") /datum/design/wormhole_projector diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 84c2ebf1336..02d51f6ff3e 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -40,12 +40,6 @@ temp_list[O] = text2num(temp_list[O]) return temp_list -/obj/machinery/r_n_d/experimentor/proc/ConvertReqList2String(var/list/source_list) - var/returnString = "" - for(var/O in source_list) - returnString += "[O];" - return returnString - /* //uncomment to enable forced reactions. /obj/machinery/r_n_d/experimentor/verb/forceReaction() set name = "Force Experimentor Reaction" @@ -528,7 +522,7 @@ var/list/reqs = ConvertReqString2List(exp_on.origin_tech) for(var/T in reqs) reqs[T] = reqs[T] + 1 - exp_on.origin_tech = ConvertReqList2String(reqs) + exp_on.origin_tech = list2params(reqs) investigate_log("Experimentor has set the origin tech of [exp_on] to [exp_on.origin_tech]", "experimentor") if(globalMalf > 51 && globalMalf < 75) visible_message("[src] encounters a run-time error!") @@ -644,8 +638,8 @@ user << "[src] does not react." return else if(src.loc == user) - call(src,realProc)(user) cooldown = TRUE + call(src,realProc)(user) spawn(cooldownMax) cooldown = FALSE else @@ -698,10 +692,10 @@ R.realProc = realProc R.revealed = TRUE dupes |= R - R.throw_at(pick(oview(7,src)),10,1) + R.throw_at(pick(oview(7,get_turf(src))),10,1) counter = 0 spawn(rand(10,100)) - for(counter = 1; counter < dupes.len; counter++) + for(counter = 1; counter <= dupes.len; counter++) var/obj/item/weapon/relic/R = dupes[counter] qdel(R) diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index d634f16f058..54583c227ca 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -144,6 +144,8 @@ make_maint_all_access() feedback_inc("alert_keycard_auth_maint",1) + + /var/emergency_access = 0 /proc/make_maint_all_access() for(var/area/maintenance/A in world) @@ -159,4 +161,5 @@ D.emergency = 0 D.update_icon(0) minor_announce("Access restrictions in maintenance areas have been restored.", "Attention! Station-wide emergency rescinded:") - emergency_access = 0 \ No newline at end of file + emergency_access = 0 + diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 07140e8596d..f4509701ac0 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -31,6 +31,8 @@ else user << "You need to expose [target]'s [parse_zone(target_zone)] to perform surgery on it!" return 1 //returns 1 so we don't stab the guy in the dick or wherever. + if(isrobot(user) && user.a_intent != "harm") //to save asimov borgs a LOT of heartache + return 1 return 0 @@ -50,7 +52,7 @@ prob_chance = implements[implement_type] prob_chance *= get_location_modifier(target) - if(prob(prob_chance)) + if(prob(prob_chance) || isrobot(user)) if(success(user, target, target_zone, tool, surgery)) advance = 1 else diff --git a/html/changelog.html b/html/changelog.html index 704288a892e..26125b15580 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,123 @@ --> +