diff --git a/code/modules/chemical/Chemistry-Holder.dm b/code/modules/chemical/Chemistry-Holder.dm index 1f927036c0..9dccadb939 100644 --- a/code/modules/chemical/Chemistry-Holder.dm +++ b/code/modules/chemical/Chemistry-Holder.dm @@ -336,6 +336,7 @@ datum D.cure(0) */ + handle_reactions() return 0 for(var/A in typesof(/datum/reagent) - /datum/reagent) @@ -352,8 +353,11 @@ datum //debug update_total() my_atom.on_reagent_change() + handle_reactions() return 0 + handle_reactions() + return 1 remove_reagent(var/reagent, var/amount, var/safety)//Added a safety check for the trans_id_to diff --git a/code/modules/chemical/Chemistry-Machinery.dm b/code/modules/chemical/Chemistry-Machinery.dm index c34ce58915..09d6ce8635 100644 --- a/code/modules/chemical/Chemistry-Machinery.dm +++ b/code/modules/chemical/Chemistry-Machinery.dm @@ -9,15 +9,17 @@ icon = 'chemical.dmi' icon_state = "dispenser" var/energy = 25 - var/max_energy = 25 + var/max_energy = 75 + var/amount = 30 + var/beaker = null var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine","sodium","aluminum","silicon","phosphorus","sulfur","chlorine","potassium","iron","copper","mercury","radium","water","ethanol","sugar","acid",) proc recharge() if(stat & BROKEN) return if(energy != max_energy) energy++ - use_power(50) - spawn(600) recharge() + use_power(2000) // This thing uses up alot of power (this is still low as shit for creating reagents from thin air) + spawn(200) recharge() New() recharge() @@ -40,41 +42,91 @@ del(src) return - Topic(href, href_list) + proc/updateWindow(mob/user as mob) + winset(user, "chemdispenser.energy", "text=\"Energy: [src.energy]\"") + winset(user, "chemdispenser.amount", "text=\"Amount: [src.amount]\"") + if (beaker) + winset(user, "chemdispenser.eject", "text=\"Eject beaker\"") + else + winset(user, "chemdispenser.eject", "text=\"\[Insert beaker\]\"") + proc/initWindow(mob/user as mob) + var/i = 0 + var list/nameparams = params2list(winget(user, "chemdispenser_reagents.template_name", "pos;size;type;image;image-mode")) + var list/buttonparams = params2list(winget(user, "chemdispenser_reagents.template_dispense", "pos;size;type;image;image-mode;text;is-flat")) + for(var/re in dispensable_reagents) + for(var/da in typesof(/datum/reagent) - /datum/reagent) + var/datum/reagent/temp = new da() + if(temp.id == re) + var list/newparams1 = nameparams.Copy() + var list/newparams2 = buttonparams.Copy() + var/posy = 8 + 40 * i + newparams1["pos"] = text("8,[posy]") + newparams2["pos"] = text("248,[posy]") + newparams1["parent"] = "chemdispenser_reagents" + newparams2["parent"] = "chemdispenser_reagents" + newparams1["text"] = temp.name + newparams2["command"] = text("skincmd \"chemdispenser;[temp.id]\"") + winset(user, "chemdispenser_reagent_name[i]", list2params(newparams1)) + winset(user, "chemdispenser_reagent_dispense[i]", list2params(newparams2)) + i++ + winset(user, "chemdispenser_reagents", "size=340x[8 + 40 * i]") + + SkinCmd(mob/user as mob, var/data as text) if(stat & BROKEN) return if(usr.stat || usr.restrained()) return if(!in_range(src, usr)) return usr.machine = src - if (href_list["dispense"]) - if(!energy) - var/dat = "Not enough energy.
OK" - usr << browse("Chemical DispenserChemical dispenser:
Energy = [energy]/[max_energy]

[dat]", "window=chem_dispenser") - return - var/id = href_list["dispense"] - var/obj/item/weapon/reagent_containers/glass/dispenser/G = new/obj/item/weapon/reagent_containers/glass/dispenser(src.loc) - switch(text2num(href_list["state"])) - if(LIQUID) - G.icon_state = "liquid" - if(GAS) - G.icon_state = "vapour" - if(SOLID) - G.icon_state = "solid" - G.pixel_x = rand(-7, 7) - G.pixel_y = rand(-7, 7) - G.name += " ([lowertext(href_list["name"])])" - G.reagents.add_reagent(id,30) - energy-- - src.updateUsrDialog() - return + if (data == "amountc") + var/num = text2num(input("Enter desired output amount", "Amount", "30")) + if (num) + amount = text2num(num) + else if (data == "eject") + if (src.beaker) + var/obj/item/weapon/reagent_containers/glass/B = src.beaker + B.loc = src.loc + src.beaker = null + else if (copytext(data, 1, 7) == "amount") + if (text2num(copytext(data, 7))) + amount = text2num(copytext(data, 7)) else - usr << browse(null, "window=chem_dispenser") - return + if (dispensable_reagents.Find(data) && beaker != null) + var/obj/item/weapon/reagent_containers/glass/B = src.beaker + var/datum/reagents/R = B.reagents + var/space = R.maximum_volume - R.total_volume + R.add_reagent(data, min(amount, energy * 10, space)) + energy = max(energy - min(amount, space) / 10, 0) + + amount = round(amount, 10) // Chem dispenser doesnt really have that much prescion + if (amount < 0) // Since the user can actually type the commands himself, some sanity checking + amount = 0 + if (amount > 100) + amount = 100 + + for(var/mob/player) + if (player.machine == src && player.client) + updateWindow(player) src.add_fingerprint(usr) return + attackby(var/obj/item/weapon/reagent_containers/glass/B as obj, var/mob/user as mob) + if(!istype(B, /obj/item/weapon/reagent_containers/glass)) + return + + if(src.beaker) + user << "A beaker is already loaded into the machine." + return + + src.beaker = B + user.drop_item() + B.loc = src + user << "You add the beaker to the machine!" + for(var/mob/player) + if (player.machine == src && player.client) + updateWindow(player) + attack_ai(mob/user as mob) return src.attack_hand(user) @@ -85,16 +137,11 @@ if(stat & BROKEN) return user.machine = src - var/dat = "" - for(var/re in dispensable_reagents) - for(var/da in typesof(/datum/reagent) - /datum/reagent) - var/datum/reagent/temp = new da() - if(temp.id == re) - dat += "[temp.name]
" - dat += "[temp.description]

" - user << browse("Chemical DispenserChemical dispenser:
Energy = [energy]/[max_energy]

[dat]", "window=chem_dispenser") - onclose(user, "chem_dispenser") + initWindow(user) + updateWindow(user) + winshow(user, "chemdispenser", 1) + user.skincmds["chemdispenser"] = src return ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 4d533642e5..0cdb22bb21 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -601,6 +601,7 @@ var/list/can_be_placed_into = list( /obj/machinery/chem_master/, + /obj/machinery/chem_dispenser/, /obj/machinery/reagentgrinder, /obj/structure/table, /obj/structure/secure_closet, @@ -3163,4 +3164,4 @@ icon_state = "jar" name = "empty jar" desc = "A jar. You're not sure what it's supposed to hold." - return \ No newline at end of file + return diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 2ffc1da29d..22d810a801 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -28,7 +28,7 @@ return 0 var/area/A = src.loc.loc // make sure it's in an area - if(!A || !isarea(A)) + if(!A || !isarea(A) || !A.master) return 0 // if not, then not powered return A.master.powered(chan) // return power status of the area @@ -37,7 +37,7 @@ /obj/machinery/proc/use_power(var/amount, var/chan=EQUIP) // defaults to Equipment channel var/area/A = src.loc.loc // make sure it's in an area - if(!A || !isarea(A)) + if(!A || !isarea(A) || !A.master) return A.master.use_power(amount, chan) diff --git a/html/changelog.html b/html/changelog.html index a89b100a9f..f538c4f74a 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -61,6 +61,11 @@ should be listed in the changelog upon commit tho. Thanks. -->
  • Toggling admin midis will now DISABLE THE CURRENT MIDI OH MY GOSH!
  • +
  • Tobba updated: + +
  • 16 November 2011 @@ -76,7 +81,7 @@ should be listed in the changelog upon commit tho. Thanks. --> diff --git a/icons/dispensebutton_bg.png b/icons/dispensebutton_bg.png new file mode 100644 index 0000000000..195c02114e Binary files /dev/null and b/icons/dispensebutton_bg.png differ diff --git a/icons/reagentname_bg.png b/icons/reagentname_bg.png new file mode 100644 index 0000000000..879179edd8 Binary files /dev/null and b/icons/reagentname_bg.png differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 434d8b171a..5569c299b1 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -291,6 +291,360 @@ menu "menu" saved-params = "is-checked" +window "chemdispenser" + elem "chemdispenser" + type = MAIN + pos = 281,0 + size = 340x480 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-minimized;is-maximized" + on-size = "" + title = "Chem Dispenser" + titlebar = true + statusbar = false + can-close = true + can-minimize = true + can-resize = true + is-pane = false + is-minimized = false + is-maximized = false + can-scroll = none + icon = "" + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + on-close = "" + elem "energy" + type = LABEL + pos = 8,24 + size = 56x16 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + text = "Energy: 25" + image = "" + image-mode = center + keep-aspect = false + align = center + text-wrap = false + elem "eject" + type = BUTTON + pos = 264,4 + size = 72x20 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "[Insert beaker]" + image = "" + command = "skincmd \"chemdispenser;eject\"" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "amountc" + type = BUTTON + pos = 208,4 + size = 48x20 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "[Other]" + image = "" + command = "skincmd \"chemdispenser;amountc\"" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "amount3" + type = BUTTON + pos = 176,4 + size = 24x20 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "[30]" + image = "" + command = "skincmd \"chemdispenser;amount30\"" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "amount2" + type = BUTTON + pos = 144,4 + size = 24x20 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "[20]" + image = "" + command = "skincmd \"chemdispenser;amount20\"" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "amount1" + type = BUTTON + pos = 112,4 + size = 24x20 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "[10]" + image = "" + command = "skincmd \"chemdispenser;amount10\"" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "amount" + type = LABEL + pos = 4,4 + size = 100x20 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 12 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + text = "Amount: 30" + image = "" + image-mode = center + keep-aspect = false + align = center + text-wrap = false + elem "child1" + type = CHILD + pos = 0,40 + size = 340x440 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + on-size = "" + left = "chemdispenser_reagents" + right = "" + is-vert = false + splitter = 50 + show-splitter = true + lock = none + +window "chemdispenser_reagents" + elem "chemdispenser_reagents" + type = MAIN + pos = 281,0 + size = 340x448 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-minimized;is-maximized" + on-size = "" + title = "" + titlebar = false + statusbar = false + can-close = false + can-minimize = false + can-resize = false + is-pane = true + is-minimized = false + is-maximized = false + can-scroll = vertical + icon = "" + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + on-close = "" + elem "template_dispense" + type = BUTTON + pos = 256,8 + size = 64x32 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "Dispense" + image = 'icons\\dispensebutton_bg.png' + command = "" + is-flat = true + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "template_name" + type = LABEL + pos = 18,8 + size = 230x32 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 15 + font-style = "" + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + text = "Chloral Hydrate" + image = 'icons\\reagentname_bg.png' + image-mode = stretch + keep-aspect = false + align = center + text-wrap = false + window "mainwindow" elem "mainwindow" type = MAIN @@ -920,7 +1274,7 @@ window "vendingslot" is-maximized = false can-scroll = none icon = "" - image = 'icons\\vending_icons\\vendingslot_bg.png' + image = 'icons\\vendingslot_bg.png' image-mode = stretch keep-aspect = false transparent-color = none @@ -1012,7 +1366,7 @@ window "vendingslot" window "vendingwindow" elem "vendingwindow" type = MAIN - pos = 758,177 + pos = 281,0 size = 300x470 anchor1 = none anchor2 = none