From 9840c44b4e8859753c68503aeb37122bdfd37aa0 Mon Sep 17 00:00:00 2001 From: "petethegoat@gmail.com" Date: Sat, 19 Nov 2011 21:18:11 +0000 Subject: [PATCH] New chem dispenser interface, by Tobba. Some sanity checking in power.dm, by Tobba. Updated changelog, by PETE YEAAAH. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2532 316c924e-a436-60f5-8080-3fe189b3f50e --- code/modules/chemical/Chemistry-Holder.dm | 4 + code/modules/chemical/Chemistry-Machinery.dm | 119 ++++-- code/modules/chemical/Chemistry-Tools.dm | 3 +- code/modules/power/power.dm | 4 +- html/changelog.html | 7 +- icons/dispensebutton_bg.png | Bin 0 -> 2936 bytes icons/reagentname_bg.png | Bin 0 -> 2980 bytes interface/skin.dmf | 358 ++++++++++++++++++- 8 files changed, 453 insertions(+), 42 deletions(-) create mode 100644 icons/dispensebutton_bg.png create mode 100644 icons/reagentname_bg.png diff --git a/code/modules/chemical/Chemistry-Holder.dm b/code/modules/chemical/Chemistry-Holder.dm index 1f927036c0f..9dccadb9393 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 c34ce589154..09d6ce86357 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 4d533642e51..0cdb22bb219 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 2ffc1da29d6..22d810a801d 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 a89b100a9fa..f538c4f74a4 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. -->
    • Petethegoat updated:
        -
      • Security, Engineer, Medical, and Janitor borgs no longer get a choice of module. This is for purposes of quick recognition, and is the first part of a series of upcoming cyborg updates.
      • +
      • Security, Engineer, Medical, and Janitor borgs no longer get a choice of skin. This is for purposes of quick recognition, and is the first part of a series of upcoming cyborg updates.
    diff --git a/icons/dispensebutton_bg.png b/icons/dispensebutton_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..195c02114eac2ca3ab7d500dcb7b4482e11f6e7c GIT binary patch literal 2936 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