From 338c826d1c3172eecd86d8430608669543dce0cc Mon Sep 17 00:00:00 2001 From: "rastaf.zero@gmail.com" Date: Mon, 18 Jul 2011 03:48:37 +0000 Subject: [PATCH] - invented new machine for botanists: Biogenerator. Biogenerator converts unneeded biomass to useful substances like milk. Avaylable only trough admin powers at the moment. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - added roller bed (for medics). Place human, buckle him to this bed, the bed raises and can be pulled. - eggs and tomatoes can be smashed of wall, floor [s]or captain's face[/s] not yes. Code by Balagi, sprites by Farart. -some fixes for the crew monitoring computer. It can be disassembled now. -added crew monitoring circuit board. Requires programming 3, biotech 2, magnets 2. -Mech Bay Power Control Console и Solar Control can be disassembled now. -added crew Mech Bay Power Control Console circuit. Requirements are programming=2, powerstorage=3. -Solar Control circuit boardcan be researched. Requirements are programming=2, powerstorage=2. -R&D Console can be researched and created (requires programming 6). But R&D Console cannot be deconstructed for tech points. That's intended. Code by Jack Rost. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1880 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj/computer.dm | 48 ++++- code/defines/obj/decal.dm | 21 ++- code/defines/obj/hydro.dm | 9 +- code/game/machinery/biogenerator.dm | 177 ++++++++++++++++++ .../game/machinery/computer/buildandrepair.dm | 10 +- code/game/machinery/computer/crew.dm | 40 +++- code/game/mecha/mech_bay.dm | 30 +++ code/game/objects/stool.dm | 64 +++++++ code/game/research/designs.dm | 37 +++- code/modules/food/food.dm | 40 ++++ code/modules/power/solar.dm | 31 +++ icons/obj/biogenerator.dmi | Bin 0 -> 1515 bytes icons/obj/rollerbed.dmi | Bin 0 -> 1574 bytes icons/obj/tomatodecal.dmi | Bin 0 -> 7369 bytes tgstation.dme | 2 + 15 files changed, 495 insertions(+), 14 deletions(-) create mode 100644 code/game/machinery/biogenerator.dm create mode 100644 icons/obj/biogenerator.dmi create mode 100644 icons/obj/rollerbed.dmi create mode 100644 icons/obj/tomatodecal.dmi diff --git a/code/defines/obj/computer.dm b/code/defines/obj/computer.dm index ff78213008d..af0477f9f77 100644 --- a/code/defines/obj/computer.dm +++ b/code/defines/obj/computer.dm @@ -203,6 +203,44 @@ name = "Magix System IV" desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition" +/*/obj/machinery/computer/scan_consolenew //Coming Soon + name = "DNA Modifier Access Console" + desc = "Scand DNA." + icon = 'computer.dmi' + icon_state = "scanner" + density = 1 + var/uniblock = 1.0 + var/strucblock = 1.0 + var/subblock = 1.0 + var/status = null + var/radduration = 2.0 + var/radstrength = 1.0 + var/radacc = 1.0 + var/buffer1 = null + var/buffer2 = null + var/buffer3 = null + var/buffer1owner = null + var/buffer2owner = null + var/buffer3owner = null + var/buffer1label = null + var/buffer2label = null + var/buffer3label = null + var/buffer1type = null + var/buffer2type = null + var/buffer3type = null + var/buffer1iue = 0 + var/buffer2iue = 0 + var/buffer3iue = 0 + var/delete = 0 + var/injectorready = 1 + var/temphtml = null + var/obj/machinery/dna_scanner/connected = null + var/obj/item/weapon/disk/data/diskette = null + anchored = 1.0 + use_power = 1 + idle_power_usage = 10 + active_power_usage = 400 */ + /obj/machinery/computer/secure_data name = "Security Records" desc = "Beepsky. ARREST!!!" @@ -270,4 +308,12 @@ desc = "Use this to set your destination...hopefully..." icon_state = "teleport" locked = null - id = null \ No newline at end of file + id = null + +/obj/machinery/computer/crew + name = "Crew monitoring computer" + icon_state = "crew" + use_power = 1 + idle_power_usage = 250 + active_power_usage = 500 + var/list/tracked = list( ) \ No newline at end of file diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm index af901083906..cb64dd65a38 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -253,4 +253,23 @@ Del() for(var/datum/disease/D in viruses) D.cure(0) - ..() \ No newline at end of file + ..() + +/obj/decal/cleanable/tomato_smudge + name = "Tomato smooth" + desc = "It's red" + density = 0 + anchored = 1 + layer = 2 + icon = 'tomatodecal.dmi' + random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") + +/obj/decal/cleanable/egg_smudge + name = "Smashed egg" + desc = "" + density = 0 + anchored = 1 + layer = 2 + icon = 'tomatodecal.dmi' + random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3") + diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm index e5ca58a9734..b0755ee6e2d 100644 --- a/code/defines/obj/hydro.dm +++ b/code/defines/obj/hydro.dm @@ -1289,6 +1289,13 @@ ..() reagents.add_reagent("nutriment", 2) + throw_impact(atom/hit_atom) + ..() + new/obj/decal/cleanable/tomato_smudge(src.loc) + src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.") + del(src) + return + /obj/item/weapon/reagent_containers/food/snacks/grown/killertomato seed = "/obj/item/seeds/killertomatoseed" name = "Killer Tomato" @@ -1844,4 +1851,4 @@ yieldmod = 2 New() src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) \ No newline at end of file + src.pixel_y = rand(-5.0, 5) diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm new file mode 100644 index 00000000000..f5c8dbe808f --- /dev/null +++ b/code/game/machinery/biogenerator.dm @@ -0,0 +1,177 @@ +/obj/machinery/biogenerator + name = "Biogenerator" + desc = "" + icon = 'biogenerator.dmi' + icon_state = "biogen-stand" + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 40 + var/processing = 0 + var/obj/item/weapon/reagent_containers/glass/beaker = null + var/points = 0 + var/menustat = "menu" + + New() + ..() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + beaker = new /obj/item/weapon/reagent_containers/glass/large(src) + + on_reagent_change() //When the reagents change, change the icon as well. + update_icon() + + update_icon() + if(!src.beaker) + icon_state = "biogen-empty" + else if(!src.processing) + icon_state = "biogen-stand" + else + icon_state = "biogen-work" + return + +/obj/machinery/biogenerator/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O, /obj/item/weapon/reagent_containers/glass)) + if(beaker) + user << "\red Biogenerator already occuped." + else + user.before_take_item(O) + O.loc = src + beaker = O + updateUsrDialog() + else if(!istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) + user << "\red You cannot put this in [src.name]" + else if(processing) + user << "\red Biogenerator is processing." + else + var/i = 0 + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents) + i++ + if(i >= 10) + user << "\red Biogenerator is fulled! Activate it." + else + user.before_take_item(O) + O.loc = src + user << "\blue You put [O.name] in [src.name]" + update_icon() + return + +/obj/machinery/biogenerator/proc/interact(mob/user as mob) + if(stat & BROKEN) + return + user.machine = src + var/dat = "BiogeneratorBiogenerator:
" + if (processing) + dat += "Biogenerator is processing! Please wait..." + else + dat += "Biomass: [points] points.
" + switch(menustat) + if("menu") + if (beaker) + dat += "Activate Biogenerator!
" + dat += "Detach Container

" + dat += "Food
" + dat += "10 milk (20)
" + dat += "Slab of meat (50)
" + dat += "Nutrient
" + dat += "E-Z-Nutrient (10)
" + dat += "Left 4 Zed (20)
" + dat += "Robust Harvest (25)
" + //dat += "Other
" + //dat += "Monkey (500)
" + else + dat += "
No beaker inside. Please insert a beaker.
" + if("nopoints") + dat += "You do not have biomass to create products.
Please, put growns into reactor and activate it.
" + dat += "Return to menu" + if("complete") + dat += "Operation complete.
" + dat += "Return to menu" + if("void") + dat += "Error: No growns inside.
Please, put growns into reactor.
" + dat += "Return to menu" + user << browse(dat, "window=biogenerator") + onclose(user, "biogenerator") + return + +/obj/machinery/biogenerator/attack_hand(mob/user as mob) + interact(user) + +/obj/machinery/biogenerator/proc/activate() + if (usr.stat != 0) + return + if (src.stat != 0) //NOPOWER etc + return + if(src.processing) + usr << "\red The biogenerator is in the process of working." + return + var/S = 0 + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/I in contents) + //I.reagents.trans_to(src) + S += 5 + if(I.potency == -1) + points += 10 + else points += I.potency + del(I) + if(S) + processing = 1 + update_icon() + updateUsrDialog() + playsound(src.loc, 'blender.ogg', 50, 1) + use_power(S*30) + sleep(S+15) + //points += src.reagents.get_reagent_amount("nutriment") + //src.reagents.del_reagent("nutriment") + processing = 0 + update_icon() + else + menustat = "void" + return + +/obj/machinery/biogenerator/proc/create_product(var/item,var/cost) + if(cost > points) + menustat = "nopoints" + return 0 + processing = 1 + update_icon() + updateUsrDialog() + points -= cost + sleep(30) + switch(item) + if("milk") + beaker.reagents.add_reagent("milk",10) + if("meat") + new/obj/item/weapon/reagent_containers/food/snacks/meat(src.loc) + if("ez") + new/obj/item/nutrient/ez(src.loc) + if("l4z") + new/obj/item/nutrient/l4z(src.loc) + if("rh") + new/obj/item/nutrient/rh(src.loc) + if("monkey") + new/mob/living/carbon/monkey(src.loc) + processing = 0 + menustat = "complete" + update_icon() + return 1 + +/obj/machinery/biogenerator/Topic(href, href_list) + if(stat & BROKEN) return + if(usr.stat || usr.restrained()) return + if(!in_range(src, usr)) return + + usr.machine = src + + switch(href_list["action"]) + if("activate") + activate() + if("detach") + beaker.loc = src.loc + beaker = null + update_icon() + if("create") + create_product(href_list["item"],text2num(href_list["cost"])) + if("menu") + menustat = "menu" + updateUsrDialog() \ No newline at end of file diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index f174124c2d0..2a777d31bec 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -108,6 +108,7 @@ /obj/item/weapon/circuitboard/solar_control name = "Circuit board (Solar Control)" //name fixed 250810 build_path = "/obj/machinery/power/solar_control" + origin_tech = "programming=2;powerstorage=2" /obj/item/weapon/circuitboard/powermonitor name = "Circuit board (Power Monitor)" //name fixed 250810 build_path = "/obj/machinery/power/monitor" @@ -132,7 +133,14 @@ /obj/item/weapon/circuitboard/rdservercontrol name = "Circuit Board (R&D Server Control)" build_path = "/obj/machinery/computer/rdservercontrol" - +/obj/item/weapon/circuitboard/crew + name = "Circuit board (Crew monitoring computer)" + build_path = "/obj/machinery/computer/crew" + origin_tech = "programming=3;biotech=2;magnets=2" +/obj/item/weapon/circuitboard/mech_bay_power_console + name = "Circuit board (Mech Bay Power Control Console)" + build_path = "/obj/machinery/computer/mech_bay_power_console" + origin_tech = "programming=2;powerstorage=3" /obj/computerframe/attackby(obj/item/P as obj, mob/user as mob) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 09efa8a8abb..c4ba1bd5de2 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -1,13 +1,35 @@ +/obj/machinery/computer/crew/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver)) + playsound(src.loc, 'Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + if (src.stat & BROKEN) + user << "\blue The broken glass falls out." + var/obj/computerframe/A = new /obj/computerframe( src.loc ) + new /obj/item/weapon/shard( src.loc ) + var/obj/item/weapon/circuitboard/crew/M = new /obj/item/weapon/circuitboard/crew( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 3 + A.icon_state = "3" + A.anchored = 1 + del(src) + else + user << "\blue You disconnect the monitor." + var/obj/computerframe/A = new /obj/computerframe( src.loc ) + var/obj/item/weapon/circuitboard/crew/M = new /obj/item/weapon/circuitboard/crew( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 4 + A.icon_state = "4" + A.anchored = 1 + del(src) + else + src.attack_hand(user) + return + /obj/machinery/computer/crew - name = "crew monitoring computer" - icon_state = "crew" - use_power = 1 - idle_power_usage = 250 - active_power_usage = 500 - - var - list/tracked - New() tracked = list() ..() diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 7fb0c5e0462..6947f8f34aa 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -171,6 +171,36 @@ if(recharge_port) recharge_port.stop_charge() + attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver)) + playsound(src.loc, 'Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + if (src.stat & BROKEN) + user << "\blue The broken glass falls out." + var/obj/computerframe/A = new /obj/computerframe( src.loc ) + new /obj/item/weapon/shard( src.loc ) + var/obj/item/weapon/circuitboard/mech_bay_power_console/M = new /obj/item/weapon/circuitboard/mech_bay_power_console( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 3 + A.icon_state = "3" + A.anchored = 1 + del(src) + else + user << "\blue You disconnect the monitor." + var/obj/computerframe/A = new /obj/computerframe( src.loc ) + var/obj/item/weapon/circuitboard/mech_bay_power_console/M = new /obj/item/weapon/circuitboard/mech_bay_power_console( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 4 + A.icon_state = "4" + A.anchored = 1 + del(src) + else + src.attack_hand(user) + return attack_hand(mob/user as mob) if(..()) return diff --git a/code/game/objects/stool.dm b/code/game/objects/stool.dm index 6f896307f17..34c7d452c22 100644 --- a/code/game/objects/stool.dm +++ b/code/game/objects/stool.dm @@ -258,3 +258,67 @@ if (manual_unbuckle_all(user)) src.add_fingerprint(user) return + +//roller bed + +/obj/stool/bed/roller + name = "roller bed" + icon = 'rollerbed.dmi' + icon_state = "down" + anchored = 0 + + Move() + ..() + for(var/mob/M in src:buckled_mobs) + if (M.buckled == src) + M.loc = src.loc + + buckle_mob(mob/M as mob, mob/user as mob) + if (!ticker) + user << "You can't buckle anyone in before the game starts." + return 0 + if ((!( istype(M, /mob) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat || M.buckled)) + return 0 + if (M == usr) + M.visible_message(\ + "\blue [M.name] buckles in!",\ + "You buckle yourself to [src].",\ + "You hear metal clanking") + else + M.visible_message(\ + "\blue [M.name] is buckled in to [src] by [user.name]!",\ + "You buckled in to [src] by [user.name].",\ + "You hear metal clanking") + M.anchored = 1 + M.buckled = src + M.loc = src.loc + M.pixel_y = 6 + M.update_clothing() + src:buckled_mobs += M + src.add_fingerprint(user) + density = 1 + icon_state = "up" + return 1 + + manual_unbuckle_all(mob/user as mob) + var/N = 0; + for(var/mob/M in src:buckled_mobs) + if (M.buckled == src) + if (M != user) + M.visible_message(\ + "\blue [M.name] was unbuckled by [user.name]!",\ + "You unbuckled from [src] by [user.name].",\ + "You hear metal clanking") + else + M.visible_message(\ + "\blue [M.name] was unbuckled himself!",\ + "You unbuckle yourself from [src].",\ + "You hear metal clanking") + M.pixel_y = 0 + M.anchored = 0 + M.buckled = null + N++ + if(N) + density = 0 + icon_state = "down" + return N diff --git a/code/game/research/designs.dm b/code/game/research/designs.dm index 1584faff732..9dd11ed81c7 100644 --- a/code/game/research/designs.dm +++ b/code/game/research/designs.dm @@ -147,6 +147,15 @@ datum materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/weapon/circuitboard/card" + crewconsole + name = "Circuit Design (Crew monitoring computer)" + desc = "Allows for the construction of circuit boards used to build an Crew monitoring computer." + id = "crewconsole" + req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/crew" + teleconsole name = "Circuit Design (Teleporter Console)" desc = "Allows for the construction of circuit boards used to build a teleporter control console." @@ -228,6 +237,15 @@ datum materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/weapon/circuitboard/powermonitor" + solarcontrol + name = "Circuit Design (Solar Control)" + desc = "Allows for the construction of circuit boards used to build a solar control console" + id = "solarcontrol" + req_tech = list("programming" = 2, "powerstorage" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/solar_control" + prisonmanage name = "Circuit Design (Prisoner Management Console)" desc = "Allows for the construction of circuit boards used to build a prisoner management console." @@ -246,6 +264,24 @@ datum materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/weapon/circuitboard/mecha_control" + mechapower + name = "Circuit Design (Mech Bay Power Control Console)" + desc = "Allows for the construction of circuit boards used to build an mech bay power control console." + id = "mechapower" + req_tech = list("programming" = 2, "powerstorage" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mech_bay_power_console" + + rdconsole + name = "Circuit Design (R&D Console)" + desc = "Allows for the construction of circuit boards used to build an new R&D console." + id = "rdconsole" + req_tech = list("programming" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/rdconsole" + /////////////////////////////////// //////////AI Module Disks////////// /////////////////////////////////// @@ -561,7 +597,6 @@ datum req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3) build_path = "/obj/item/mecha_parts/mecha_equipment/repair_droid" - //////////////////////////////////////// //////////Disk Construction Disks/////// //////////////////////////////////////// diff --git a/code/modules/food/food.dm b/code/modules/food/food.dm index 5c9980221ea..f5f294cda31 100644 --- a/code/modules/food/food.dm +++ b/code/modules/food/food.dm @@ -30,6 +30,7 @@ name = "candy" desc = "Nougat love it or hate it." icon_state = "candy" + trash = "candy" New() ..() reagents.add_reagent("nutriment", 1) @@ -50,6 +51,7 @@ name = "chips" desc = "Commander Riker's What-The-Crisps" icon_state = "chips" + trash = "chips" New() ..() reagents.add_reagent("nutriment", 3) @@ -88,6 +90,12 @@ ..() reagents.add_reagent("nutriment", 1) + throw_impact(atom/hit_atom) + ..() + new/obj/decal/cleanable/egg_smudge(src.loc) + src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.") + del(src) + /obj/item/weapon/reagent_containers/food/snacks/flour name = "flour" desc = "Some flour" @@ -381,6 +389,7 @@ name = "Berry Clafoutis" desc = "No black birds, this is a good sign." icon_state = "berryclafoutis" + trash = "plate" New() ..() reagents.add_reagent("nutriment", 4) @@ -391,6 +400,7 @@ name = "waffles" desc = "Mmm, waffles" icon_state = "waffles" + trash = "waffles" New() ..() reagents.add_reagent("nutriment", 8) @@ -400,6 +410,7 @@ name = "Eggplant Parmigiana" desc = "The only good recipe for eggplant." icon_state = "eggplantparm" + trash = "plate" New() ..() reagents.add_reagent("nutriment", 6) @@ -446,6 +457,7 @@ // var/job = null icon_state = "meatpie" desc = "The best meatpies on station." + trash = "plate" New() ..() reagents.add_reagent("nutriment", 10) @@ -455,6 +467,7 @@ name = "Meat-pie" icon_state = "meatpie" desc = "A delicious meatpie." + trash = "plate" New() ..() reagents.add_reagent("nutriment", 10) @@ -464,6 +477,7 @@ name = "Tofu-pie" icon_state = "meatpie" desc = "A delicious tofu pie." + trash = "plate" New() ..() reagents.add_reagent("nutriment", 10) @@ -499,6 +513,7 @@ name = "Xeno-pie" icon_state = "xenomeatpie" desc = "A delicious meatpie. Probably heretical." + trash = "plate" New() ..() reagents.add_reagent("nutriment", 2) @@ -509,6 +524,7 @@ name = "Wing Fang Chu" desc = "A savory dish of alien wing wang in soy." icon_state = "wingfangchu" + trash = "snack_bowl" New() ..() reagents.add_reagent("nutriment", 1) @@ -578,6 +594,7 @@ name = "Cuban Carp" desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!" icon_state = "cubancarp" + trash = "plate" New() ..() reagents.add_reagent("nutriment", 6) @@ -589,6 +606,7 @@ name = "Popcorm" //not a typo desc = "Now let's find some cinema." icon_state = "popcorn" + trash = "popcorn" var/unpopped = 0 New() ..() @@ -599,12 +617,14 @@ if(prob(unpopped)) usr << "\red You bite down on an un-popped kernel!" unpopped = max(0, unpopped-1) + ..() /obj/item/weapon/reagent_containers/food/snacks/sosjerky name = "Scaredy's Private Reserve Beef Jerky" icon_state = "sosjerky" desc = "Beef jerky made from the finest space cows." + trash = "sosjerky" New() ..() reagents.add_reagent("nutriment", 4) @@ -614,6 +634,7 @@ name = "4no Raisins" icon_state = "4no_raisins" desc = "Best raisins in the universe. Not sure why." + trash = "raisins" New() ..() reagents.add_reagent("nutriment", 6) @@ -631,6 +652,7 @@ name = "Cheesie Honkers" icon_state = "cheesie_honkers" desc = "Bite sized cheesie snacks that will honk all over your mouth" + trash = "cheesie" New() ..() reagents.add_reagent("nutriment", 4) @@ -640,6 +662,7 @@ name = "Syndi-Cakes" icon_state = "syndi_cakes" desc = "An extremely moist snack cake that tastes just as good after being nuked." + trash = "syndi_cakes" New() ..() reagents.add_reagent("nutriment", 4) @@ -650,6 +673,7 @@ name = "Loaded Baked Potato" desc = "Totally baked." icon_state = "loadedbakedpotato" + trash = "loadedbakedpotato" New() ..() reagents.add_reagent("nutriment", 6) @@ -688,6 +712,7 @@ name = "Cheesy Fries" desc = "Fries. Covered in cheese. Duh." icon_state = "cheesyfries" + trash = "plate" New() ..() reagents.add_reagent("nutriment", 6) @@ -726,6 +751,7 @@ name = "Meat steak" desc = "A piece of hot spicy meat." icon_state = "meatstake" + trash = "plate" New() ..() reagents.add_reagent("nutriment", 4) @@ -737,6 +763,7 @@ name = "Spacy Liberty Duff" desc = "Jello gelatin, if Alfred Hubbard were a confectionist" //TODO icon_state = "spacylibertyduff" + trash = "snack_bowl" New() ..() reagents.add_reagent("nutriment", 6) @@ -747,6 +774,7 @@ name = "Amanita Jelly" desc = "Looks curiously toxic" icon_state = "amanitajelly" + trash = "snack_bowl" New() ..() reagents.add_reagent("nutriment", 6) @@ -769,6 +797,7 @@ name = "Meatball soup" desc = "" //TODO icon_state = "meatballsoup" + trash = "snack_bowl" New() ..() reagents.add_reagent("nutriment", 10) @@ -811,6 +840,7 @@ name = "Vegetable soup" desc = "" //TODO icon_state = "vegetablesoup" + trash = "snack_bowl" New() ..() reagents.add_reagent("nutriment", 10) @@ -821,6 +851,7 @@ name = "Nettle soup" desc = "" //TODO icon_state = "nettlesoup" + trash = "snack_bowl" New() ..() reagents.add_reagent("nutriment", 10) @@ -842,6 +873,7 @@ name = "Hot Chili" desc = "" //TODO icon_state = "hotchili" + trash = "snack_bowl" New() ..() reagents.add_reagent("nutriment", 6) @@ -854,6 +886,7 @@ name = "Cold Chili" desc = "" //TODO icon_state = "coldchili" + trash = "snack_bowl" New() ..() reagents.add_reagent("nutriment", 6) @@ -1231,6 +1264,7 @@ name = "meatbread slice" desc = "A slice of delicious meatbread." icon_state = "meatbreadslice" + trash = "plate" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread @@ -1249,6 +1283,7 @@ name = "xenomeatbread slice" desc = "A slice of delicious meatbread. Extra Heretical." icon_state = "xenobreadslice" + trash = "plate" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread @@ -1267,6 +1302,7 @@ name = "Banana-nut bread slice" desc = "A slice of delicious banana bread." icon_state = "bananabreadslice" + trash = "plate" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread @@ -1284,6 +1320,7 @@ name = "Tofubread slice" desc = "A slice of delicious tofubread." icon_state = "tofubreadslice" + trash = "plate" bitesize = 2 @@ -1303,6 +1340,7 @@ name = "Carrot Cake slice" desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie." icon_state = "carrotcake_slice" + trash = "plate" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake @@ -1320,6 +1358,7 @@ name = "Cheese Cake slice" desc = "Slice of pure cheestisfaction" icon_state = "cheesecake_slice" + trash = "plate" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake @@ -1336,6 +1375,7 @@ name = "Vanilla Cake slice" desc = "Just a slice of cake, it is enough for everyone." icon_state = "plaincake_slice" + trash = "plate" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index cc4336ffec0..0a121e65281 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -158,6 +158,37 @@ interact(user) +/obj/machinery/power/solar_control/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver)) + playsound(src.loc, 'Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + if (src.stat & BROKEN) + user << "\blue The broken glass falls out." + var/obj/computerframe/A = new /obj/computerframe( src.loc ) + new /obj/item/weapon/shard( src.loc ) + var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 3 + A.icon_state = "3" + A.anchored = 1 + del(src) + else + user << "\blue You disconnect the monitor." + var/obj/computerframe/A = new /obj/computerframe( src.loc ) + var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 4 + A.icon_state = "4" + A.anchored = 1 + del(src) + else + src.attack_hand(user) + return + /obj/machinery/power/solar_control/process() lastgen = gen gen = 0 diff --git a/icons/obj/biogenerator.dmi b/icons/obj/biogenerator.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c65a9571b09735779bca888bec180c969d8d34c6 GIT binary patch literal 1515 zcmZ9Mdo+}37{EWFDTcv{7R@+L<(6BrSS%JmHdDqArx70bR#T`|!~U7^TEue=~v90D92xRrN;ujJV8X{_F9cD9pWeDuc6 zQneFdkT;pBW9jkAS=R#{mX0**cE$2-xvp(yrPH^9j?!0|O4$dY8kcZw{^&Oo5TpW= zygVqZvW1dVa+R%CHm&pw2YcR^MH@J}kaLXd>j%I4hJ=m5~CS`d?Z^9(A20AiwT{KDsNMpPL0dyF{%0TjeR2 zsQi!G^Z_lQLmkU?OTEG3;^({I{C$H19AZ25kVT^_8NZ*rr~lV?e*EMK zzF)>nbou9OGY6lAdTCKf3Sl9^8L8 zoA&wswhj01`onY6h;J?$sB=tOs`6YY?@u=+$Ho(=xV)@mVa-?Oqumu(`E!XSUXO0e zwH+}#&g|wdf(#s*Z7bn@C>sT-M10884VRLlh2~Otx6Eh~rD!{X{g@YvHx)k_7$X&P zH#|sEzP0@NC{V=@R>V8N_nfjpO0pf2^isH}cGZ5p?O2j5)+6CCSbIUiEH(6^Eul<>;Ap z4>S1A6y|oyW0?sBchL=hIalBTqqZ1}VPj}g-vi20UhNZch6Oz6D}qBu2>=hG%Nv|q zv5=UfbL8}NAx=dp5I&}!M%QYewuKn3O?+GYw$&o@*`>79Cr;=zBg~elj`#6)opx?9 z(wB!J;Svw(TsDTLQ9p5aPNEEz&cZ0=kY??6ckEUIVr=`Mp55C$rqSIZ8|@ttDhwe~ zS~h!C&My65i$ueCZyNjjf3?FUwyHBNYws z1B3bbk6mK8Ro*9YVWrpg0O@*1XCb~Cw^E8(5pgTbF?fwOx( zOluWf+>mr^W_++Ln_vxcr7c|UIY6YZAiI#!6si?_NhO7WAdB+220a$VZzOUhCBAkT ziF9eBvp1>6d&|Z^&`9$$1(RS%7AeZS-RhIDf!~j71XbeY^|scHwFU%N%ozefivO8S zW6OJlpiik-hTBCSl;XSa&Z*6~GYn)0QV2scSIn9=Ixfo~t`6~bb literal 0 HcmV?d00001 diff --git a/icons/obj/rollerbed.dmi b/icons/obj/rollerbed.dmi new file mode 100644 index 0000000000000000000000000000000000000000..67a843283fad06c56a3e04003a4732a03a36cff1 GIT binary patch literal 1574 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 vITt+xCetZ4EnD`Z