From 1bd9e86b84715b69cf4d97b000a9e839b52c31ca Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Sat, 11 Aug 2012 02:16:04 +1000 Subject: [PATCH] added chemistry cooker (bunsen burner) and the capacity for recipes that require heating Signed-off-by: Cael_Aislinn --- code/modules/chemical/Chemistry-Holder.dm | 4 +- code/modules/chemical/Chemistry-Recipes.dm | 3 + code/modules/chemical/Chemistry-Tools.dm | 99 ++++++ .../xenoarchaeology/artifact_archaeo.dm | 306 ------------------ icons/obj/chemical.dmi | Bin 29906 -> 30570 bytes icons/obj/device.dmi | Bin 37796 -> 37808 bytes 6 files changed, 105 insertions(+), 307 deletions(-) delete mode 100644 code/modules/research/xenoarchaeology/artifact_archaeo.dm diff --git a/code/modules/chemical/Chemistry-Holder.dm b/code/modules/chemical/Chemistry-Holder.dm index ba4a7b48fb..d27530d2cf 100644 --- a/code/modules/chemical/Chemistry-Holder.dm +++ b/code/modules/chemical/Chemistry-Holder.dm @@ -176,7 +176,7 @@ datum R.on_update (A) update_total() - handle_reactions() + handle_reactions(var/heated = 0) if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree. var/reaction_occured = 0 @@ -184,6 +184,8 @@ datum reaction_occured = 0 for(var/A in typesof(/datum/chemical_reaction) - /datum/chemical_reaction) var/datum/chemical_reaction/C = new A() + if(C.requires_heating && !heated) + continue var/total_required_reagents = C.required_reagents.len var/total_matching_reagents = 0 var/total_required_catalysts = C.required_catalysts.len diff --git a/code/modules/chemical/Chemistry-Recipes.dm b/code/modules/chemical/Chemistry-Recipes.dm index 578f14acde..a4500c3a52 100644 --- a/code/modules/chemical/Chemistry-Recipes.dm +++ b/code/modules/chemical/Chemistry-Recipes.dm @@ -14,11 +14,14 @@ datum var/result_amount = 0 var/secondary = 0 // set to nonzero if secondary reaction + var/requires_heating = 0 //to avoid lag and other complications, every recipe is restricted to the same heating time (or none) + proc on_reaction(var/datum/reagents/holder, var/created_volume) return //I recommend you set the result amount to the total volume of all components. + //but obviously that's not mandatory. science! explosion_potassium name = "Explosion" diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index fa638a266f..a1e13fed96 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -1473,6 +1473,105 @@ else usr << "\blue It is currently empty." +//////////////////////////////////////////////////////////////////////////////// +/// Bunsen Burner +//////////////////////////////////////////////////////////////////////////////// + +//make a subclass of this for cooking at some point, allow it to accept multiple containers etc +//todo: use mini plasma tanks for fuel + +/obj/item/device/cooker + name = "bunsen burner" + desc = "a small, gas-powered cooker." + icon = 'chemical.dmi' + icon_state = "bunsen1" //spawns with an empty beaker already on it + var/obj/item/weapon/reagent_containers/held_container + var/heating_stage = 0 + var/active = 0 + var/icon_empty = "bunsen0" + var/icon_full = "bunsen1" + var/icon_heating = "bunsen2" + +/obj/item/device/cooker/verb/toggle() + if(held_container) + if(!active) + usr << "\blue You switch the [src] on." + active = 1 + icon_state = icon_heating + spawn(50) + heat() + else + usr << "\blue You switch the [src] off." + active = 0 + icon_state = icon_full + else + usr << "\red You can not toggle the [src] when it holds no containers!" + +/obj/item/device/cooker/proc/heat() + if(!held_container) + heating_stage = 0 + active = 0 + icon_state = icon_empty + return + + if(active) + icon_state = icon_heating + spawn(50) + heat() + else + heating_stage = 0 + icon_state = icon_full + return + + if(heating_stage++ > 5) + visible_message("bubbles!") + held_container.reagents.handle_reactions(1) + else + visible_message("hisses and steams!") + +/obj/item/device/cooker/New() + held_container = new /obj/item/weapon/reagent_containers/glass/large/(src) + +/obj/item/device/cooker/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/weapon/reagent_containers/)) + if(held_container) + //todo: empty O into held_container + user << "\red There is already a [held_container] on the [src]!" + else + user.drop_item() + user << "\blue You place the [O] on the [src]." + held_container = O + O.loc = src + icon_state = icon_full + return 1 + else if(!held_container) + user << "\red There is nothing to put [O] in to!" + return 1 + else if (istype(O,/obj/item)) + if(w_class > 2) + user << "\red That won't fit in the [held_container]!" + else + //add random things to the container. when the burner is activated, they will melt + O.loc = held_container + return 1 + else + user << "\red That won't fit in the [held_container]!" + return 1 + + return ..() + +/obj/item/device/cooker/attack_hand(var/mob/user as mob) + if(held_container) + held_container.attack_hand(user) + if(held_container.loc != src) + held_container = null + icon_state = icon_empty + user << "\blue You remove the [held_container] from the [src]." + return 1 + else + ..() + + //////////////////////////////////////////////////////////////////////////////// /// Food. diff --git a/code/modules/research/xenoarchaeology/artifact_archaeo.dm b/code/modules/research/xenoarchaeology/artifact_archaeo.dm deleted file mode 100644 index c9108db501..0000000000 --- a/code/modules/research/xenoarchaeology/artifact_archaeo.dm +++ /dev/null @@ -1,306 +0,0 @@ -//Ported from lunacode, seems to be functional. Thanks to Alfie275 for the original code + idea -//talking crystals may quickly turnout to be very annoying - -//strange rocks have been mostly redone -/obj/item/weapon/ore/strangerock/New() - ..() - //var/datum/reagents/r = new/datum/reagents(50) - //src.reagents = r - if(rand(3)) - method = 0 - else - method = 1 - inside = pick(150;"", 50;"/obj/item/weapon/crystal", 25;"/obj/item/weapon/talkingcrystal", "/obj/item/weapon/fossil/base") - -/obj/item/weapon/ore/strangerock/bullet_act(var/obj/item/projectile/P) - -/obj/item/weapon/ore/strangerock/ex_act(var/severity) - src.visible_message("The [src] crumbles away, leaving some dust and gravel behind.") - -/obj/item/weapon/ore/strangerock/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/weldingtool/)) - var/obj/item/weapon/weldingtool/w = W - if(w.isOn() && (w.get_fuel() > 3)) - if(!src.method) - if(inside) - var/obj/A = new src.inside(get_turf(src)) - for(var/mob/M in viewers(world.view, user)) - M.show_message("\blue The rock burns away revealing a [A.name].",1) - else - for(var/mob/M in viewers(world.view, user)) - M.show_message("\blue The rock burns away into nothing.",1) - del src - else - for(var/mob/M in viewers(world.view, user)) - M.show_message("\blue A few sparks fly off the rock, but otherwise nothing else happens.",1) - w.remove_fuel(4) - -/obj/item/weapon/ore/strangerock/acid_act(var/datum/reagent/R) - if(src.method) - if(inside) - var/obj/A = new src.inside(get_turf(src)) - for(var/mob/M in viewers(world.view, get_turf(src))) - M.show_message("\blue The rock fizzes away revealing a [A.name].",1) - else - for(var/mob/M in viewers(world.view, get_turf(src))) - M.show_message("\blue The rock fizzes away into nothing.",1) - del src - else - for(var/mob/M in viewers(world.view, get_turf(src))) - M.show_message("\blue The acid splashes harmlessly off the rock, nothing else interesting happens.",1) - return 1 - - -/obj/item/weapon/crystal - name = "Crystal" - icon = 'mining.dmi' - icon_state = "crystal" - -/obj/item/weapon/crystal/bullet_act(var/obj/item/projectile/P) - if(istype(P,/obj/item/projectile/beam/emitter)) - switch(rand(0,3)) - if(0) - var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc ) - A.dir = 1 - A.yo = 20 - A.xo = 0 - if(0) - var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc ) - A.dir = 2 - A.yo = -20 - A.xo = 0 - if(0) - var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc ) - A.dir = 4 - A.yo = 0 - A.xo = 20 - if(0) - var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc ) - A.dir = 8 - A.yo = 0 - A.xo = -20 - else - ..() - -/obj/item/weapon/talkingcrystal - name = "Crystal" - icon = 'mining.dmi' - icon_state = "crystal2" - var/list/list/words = list() - var/lastsaid - -/obj/item/weapon/talkingcrystal/New() - spawn(100) - process() - -/obj/item/weapon/talkingcrystal/bullet_act(var/obj/item/projectile/P) - if(istype(P,/obj/item/projectile/beam)) - switch(rand(0,3)) - if(0) - var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc ) - A.dir = pick(alldirs) - A.yo = 20 - A.xo = 0 - if(0) - var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc ) - A.dir = pick(alldirs) - A.yo = -20 - A.xo = 0 - if(0) - var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc ) - A.dir = pick(alldirs) - A.yo = 0 - A.xo = 20 - if(0) - var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc ) - A.dir = pick(alldirs) - A.yo = 0 - A.xo = -20 - var/word = pick("pain","hurt","masochism","sadist","rage","repressed","ouch","evil","void","kill","destroy") - SaySomething(word) - else - ..() - -/obj/item/weapon/talkingcrystal/proc/catchMessage(var/msg, var/mob/source) - var/list/seperate = list() - if(findtext(msg,"((")) - return - else if(findtext(msg,"))")) - return - else if(findtext(msg," ")==0) - return - else - /*var/l = lentext(msg) - if(findtext(msg," ",l,l+1)==0) - msg+=" "*/ - seperate = stringsplit(msg, " ") - - var/addressing_crystal = 0 - if("crystal" in seperate || "gem" in seperate) - addressing_crystal = 1 - - for(var/Xa = 1,Xa 20 + rand(10,20)) - words.Remove(words[1]) - if(!words["[lowertext(seperate[Xa])]"]) - words["[lowertext(seperate[Xa])]"] = list() - var/list/w = words["[lowertext(seperate[Xa])]"] - if(w) - w.Add("[lowertext(seperate[next])]") - //world << "Adding [lowertext(seperate[next])] to [lowertext(seperate[Xa])]" - - for(var/mob/O in viewers(src)) - O.show_message("\blue The crystal hums for bit then stops...", 1) - if(!rand(0, 5 - addressing_crystal * 3)) - spawn(2) SaySomething(pick(seperate)) - -/obj/item/weapon/talkingcrystal/proc/debug() - //set src in view() - for(var/v in words) - world << "[uppertext(v)]" - var/list/d = words["[v]"] - for(var/X in d) - world << "[X]" - -/obj/item/weapon/talkingcrystal/proc/SaySomething(var/word = null) - var/msg - var/limit = rand(max(5,words.len/2))+3 - var/text - if(!word) - text = "[pick(words)]" - else - text = pick(stringsplit(word, " ")) - if(lentext(text)==1) - text=uppertext(text) - else - var/cap = copytext(text,1,2) - cap = uppertext(cap) - cap += copytext(text,2,lentext(text)+1) - text=cap - var/q = 0 - msg+=text - if(msg=="What" | msg == "Who" | msg == "How" | msg == "Why" | msg == "Are") - q=1 - - text=lowertext(text) - for(var/ya,ya <= limit,ya++) - - if(words.Find("[text]")) - var/list/w = words["[text]"] - text=pick(w) - else - text = "[pick(words)]" - msg+=" [text]" - if(q) - msg+="?" - else - if(rand(0,10)) - msg+="." - else - msg+="!" - - var/list/listening = viewers(src) - for(var/mob/M in world) - if (!M.client) - continue //skip monkeys and leavers - if (istype(M, /mob/new_player)) - continue - if(M.stat == 2 && M.client.ghost_ears) - listening|=M - - for(var/mob/M in listening) - M << "The crystal reverberates, \blue\"[msg]\"" - lastsaid = world.timeofday + rand(300,800) - -/obj/item/weapon/talkingcrystal/process() - if(prob(25) && world.timeofday >= lastsaid && words.len >= 1) - SaySomething() - spawn(100) - process() - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/obj/item/weapon/fossil - name = "Fossil" - icon = 'fossil.dmi' - icon_state = "bone" - desc = "It's a fossil." - -/obj/item/weapon/fossil/base/New() - spawn(0) - var/list/l = list("/obj/item/weapon/fossil/bone"=8,"/obj/item/weapon/fossil/skull"=2, - "/obj/item/weapon/fossil/skull/horned"=2,"/obj/item/weapon/fossil/shell"=1) - var/t = pickweight(l) - new t(src.loc) - del src - -/obj/item/weapon/fossil/bone - name = "Fossilised bone" - icon_state = "bone" - desc = "It's a fossilised bone from an unknown creature." - -/obj/item/weapon/fossil/shell - name = "Fossilised shell" - icon_state = "shell" - desc = "It's a fossilised shell from some sort of space mollusc." - -/obj/item/weapon/fossil/skull/horned - icon_state = "hskull" - desc = "It's a fossilised skull, it has horns." - -/obj/item/weapon/fossil/skull - name = "Fossilised skull" - icon_state = "skull" - desc = "It's a fossilised skull." - -/obj/item/weapon/fossil/skull/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/fossil/bone)) - var/obj/o = new /obj/skeleton(get_turf(src)) - var/a = new /obj/item/weapon/fossil/bone - var/b = new src.type - o.contents.Add(a) - o.contents.Add(b) - del W - del src - -/obj/skeleton - name = "Incomplete skeleton" - icon = 'fossil.dmi' - icon_state = "uskel" - desc = "Incomplete skeleton." - var/bnum = 1 - var/breq - var/bstate = 0 - -/obj/skeleton/New() - src.breq = rand(6)+3 - src.desc = "Incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones." - -/obj/skeleton/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/fossil/bone)) - if(!bstate) - bnum++ - src.contents.Add(new/obj/item/weapon/fossil/bone) - del W - if(bnum==breq) - usr = user - icon_state = "skel" - var/creaturename = input("Input a name for your discovery:","Name your discovery","Spaceosaurus") - src.bstate = 1 - src.density = 1 - src.name = "[creaturename] skeleton" - if(src.contents.Find(/obj/item/weapon/fossil/skull/horned)) - src.desc = "A creature made of [src.contents.len-1] assorted bones and a horned skull, the plaque reads [creaturename]." - else - src.desc = "A creature made of [src.contents.len-1] assorted bones and a skull, the plaque reads [creaturename]." - else - src.desc = "Incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones." - user << "Looks like it could use [src.breq-src.bnum] more bones." - else - ..() - else - ..() diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index d52b9b7be1e3f6811c02ca89d838df15b0797cb3..c3c0752682f7afc0a0eeee6018d7873dbb01b0c5 100644 GIT binary patch delta 11629 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 lgVO&U2O>@(?TQ%3CZ#o3lc%Ij0(w4IEtb) zRlwA9`}cL6YOG2Luh!t>zSSDMTtx$47R%zPSG6?b{yyuq1~1FKvm95D3bj}y;+EHO zo1rJmVp$9_q#DV8afuTyAkpszuwuuk@j7z-&6!^5ZSBBeLcC{W+#O|W2Ro0}Q@p1P zu_7CnKj8x6t3iZgQlMJ~q|KQ0G)<`{ht{hqp{QTTcpiD~po<&ixq~h#F^e8a8FX>m zXxbDE1nL~hR!c{8UfIvM2N!4{!sjcKHjq-5>N+l?EZG`=0=u#o$EsM3SO$gKn>&b= zCXaXUgmPE~7THar-D^FK<~u7&gor5hq9mlLF+JR2bz!b%SiJ8n422(rky*SBG8I5XFY>G|)=oGXs2X1PtW^rvjv>0+1ws?0QsKbVOxyV{&P5bZKvH004NLomNe6;xG_BlV1_Fmt85W z_^kHAWz}lcL;DxdB%UM|wkNU&Q2zZMC~T6(*g+fs>AiXL?RifBy#0OuOkY3VlM`Ae z$)vk<^J|gJ&Qfrl?$Y%tnbjz(nlFDG17o^NpMW*Fr(`Cib?GjDT_&^Ag2v158_G3U zuqBO*b`p5+vAs@a0u{9BF5P6CY?I6^o~03eOCV1BNzy|?wEWFNji9&=3e~N!6htX1 zfT`p5?{S>0jEo7dRN%tCl?q(F3I@K+mf5;fwK(JMG3%uQSLa7-IIK`hRALc{TaM$l zeNUFzGV5hXRyBuzB`!FRM7JBjh&`jiapdNkGo8|#(t^c^c(2H?JJOUE_707sa8GGs zNhU0R!Fj}2y$FXSPq*|)+aYN^O{pY{#>pb0s9(r%9(it|4IAXSg*GZNiw;R@v|-z* zn-~mu>g>x_Lua&3nnT!w8`Klw%gChlq@7=)`%RTAQNswXwYIoR-l!_w~IW4%eOSu^bOWE(kGSWnD zpRhe)Yxnx7STd0(?cG%sjXaSoFk&r`L0f=jD@7Hqh62NA%{*pUZrE^FXlcZq zm;I&Jch}E<_%(Jj74!P9vTeZ1-D_Z!ngcW1h&$;Dj667`Is6B0{GdH3js~uR$Qp`6 zRKs0?bI)LPpcNWqSwvj)HJ!Ve^hHzC8SVTG>;vDM>MwRlVaIl2`0dGe_&M&Hlx?`YqDFdXP@((i|5fI&qh;je` LAOK0TDg%a)NJ)e)