From 32e1640df3b9479c2d8e1a45e9d252577048be71 Mon Sep 17 00:00:00 2001 From: "mport2004@gmail.com" Date: Thu, 29 Dec 2011 07:14:02 +0000 Subject: [PATCH] Emitters emp_act now uses severity properly. The PA can no longer be remotely controlled by humans and cyborgs can only control it if they are nearby. The spawn PA can now be taken apart. FireAx/Extinguisher closets got their own files. Food closets are now with their defines. Freezer closet/crates override return_air() to cooldown the contents. The var isinfreezer has been eliminated. The old player panel has been readded as an alt for the new one, it may be found under the Player Panel verb. The new player panel may be accessed by the Player Panel-New verb. Crates.dm moved from the storage folder as it is not a storage object. Fixed Issue 227 about the PA shooting when it should not be. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2851 316c924e-a436-60f5-8080-3fe189b3f50e --- code/FEA/FEA_turf_tile.dm | 15 - code/defines/atom.dm | 6 +- code/defines/obj.dm | 2 +- code/defines/obj/closet.dm | 325 +------------- code/defines/obj/machinery.dm | 1 - code/game/objects/closets.dm | 21 +- code/game/objects/closets/extinguisher.dm | 87 ++++ code/game/objects/closets/fireax.dm | 194 +++++++++ code/game/objects/closets/kitchen.dm | 193 +++++---- code/game/objects/{storage => }/crates.dm | 40 +- code/modules/admin/admin.dm | 324 +------------- code/modules/admin/admin_verbs.dm | 17 +- code/modules/admin/player_panel.dm | 408 ++++++++++++++++++ code/modules/food/food.dm | 85 ---- code/modules/food/meat.dm | 47 ++ code/modules/power/singularity/emitter.dm | 4 +- .../particle_accelerator.dm | 8 +- .../particle_accelerator/particle_control.dm | 18 +- maps/tgstation.2.0.8.dmm | 30 +- tgstation.dme | 6 +- 20 files changed, 934 insertions(+), 897 deletions(-) create mode 100644 code/game/objects/closets/extinguisher.dm create mode 100644 code/game/objects/closets/fireax.dm rename code/game/objects/{storage => }/crates.dm (90%) create mode 100644 code/modules/admin/player_panel.dm create mode 100644 code/modules/food/meat.dm diff --git a/code/FEA/FEA_turf_tile.dm b/code/FEA/FEA_turf_tile.dm index eca82110869..f42b0719915 100644 --- a/code/FEA/FEA_turf_tile.dm +++ b/code/FEA/FEA_turf_tile.dm @@ -12,20 +12,10 @@ atom/movable/proc/experience_pressure_difference(pressure_difference, direction) turf assume_air(datum/gas_mixture/giver) //use this for machines to adjust air - //First, ensure there is no movable shuttle or what not on tile that is taking over -// var/obj/movable/floor/movable_on_me = locate(/obj/movable/floor) in src -// if(istype(movable_on_me)) -// return movable_on_me.assume_air(giver) - del(giver) return 0 return_air() - //First, ensure there is no movable shuttle or what not on tile that is taking over -// var/obj/movable/floor/movable_on_me = locate(/obj/movable/floor) in src -// if(istype(movable_on_me)) -// return movable_on_me.return_air() - //Create gas mixture to hold data for passing var/datum/gas_mixture/GM = new @@ -39,11 +29,6 @@ turf return GM remove_air(amount as num) - //First, ensure there is no movable shuttle or what not on tile that is taking over -// var/obj/movable/floor/movable_on_me = locate(/obj/movable/floor) in src -// if(istype(movable_on_me)) -// return movable_on_me.remove_air(amount) - var/datum/gas_mixture/GM = new var/sum = oxygen + carbon_dioxide + nitrogen + toxins diff --git a/code/defines/atom.dm b/code/defines/atom.dm index 6555dcca59a..7f1ae68a40c 100644 --- a/code/defines/atom.dm +++ b/code/defines/atom.dm @@ -25,7 +25,11 @@ return null proc/return_air() - return null + if(loc) + return loc.return_air() + else + return null + // Convenience proc to see if a container is open for chemistry handling diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 0c122622acb..1a713a92706 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -10,7 +10,7 @@ var/datum/marked_datum animate_movement = 2 var/throwforce = 1 - var/infreezer = 0 + proc/handle_internal_lifeform(mob/lifeform_inside_me, breath_request) //Return: (NONSTANDARD) // null if object handles breathing logic for lifeform diff --git a/code/defines/obj/closet.dm b/code/defines/obj/closet.dm index 6692e6bd7c3..2c1aad26b48 100644 --- a/code/defines/obj/closet.dm +++ b/code/defines/obj/closet.dm @@ -10,9 +10,8 @@ var/welded = 0 var/wall_mounted = 0 //never solid (You can always pass over it) flags = FPRINT - var/health = 100 //Might be a bit much, dono can always change later //Nerfed -Pete - var/lastbang // - var/isfreezer = 0 + var/health = 100 + var/lastbang /obj/structure/closet/acloset name = "Strange closet" @@ -74,199 +73,6 @@ density = 0 wall_mounted = 1 -/obj/structure/closet/fireaxecabinet - name = "Fire Axe Cabinet" - desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." - var/obj/item/weapon/fireaxe/fireaxe = new/obj/item/weapon/fireaxe - icon_state = "fireaxe1000" - icon_closed = "fireaxe1000" - icon_opened = "fireaxe1100" - anchored = 1 - density = 0 - var/localopened = 0 //Setting this to keep it from behaviouring like a normal closet and obstructing movement in the map. -Agouri - opened = 1 - var/hitstaken = 0 - var/locked = 1 - var/smashed = 0 - - attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri - //..() //That's very useful, Erro - - var/hasaxe = 0 //gonna come in handy later~ - if(fireaxe) - hasaxe = 1 - - if (isrobot(usr) || src.locked) - if(istype(O, /obj/item/device/multitool)) - user << "\red Resetting circuitry..." - playsound(user, 'lockreset.ogg', 50, 1) - sleep(50) // Sleeping time~ - src.locked = 0 - user << "\blue You disable the locking modules." - update_icon() - return - if(istype(O, /obj/item/weapon)) - var/obj/item/weapon/W = O - if(src.smashed) - return - else - playsound(user, 'Glasshit.ogg', 100, 1) //We don't want this playing every time - if(W.force < 15) - user << "\blue The cabinet's protective glass glances off the hit." - else - src.hitstaken++ - if(src.hitstaken == 4) - playsound(user, 'Glassbr3.ogg', 100, 1) //Break cabinet, receive goodies. Cabinet's fucked for life after that. - src.smashed = 1 - src.locked = 0 - src.localopened = 1 - update_icon() - return - if (istype(O, /obj/item/weapon/fireaxe) && src.localopened) - if(!fireaxe) - if(O.wielded) - user << "\red Unwield the axe first." - return - fireaxe = O - user.drop_item(O) - src.contents += O - user << "\blue You place the fire axe back in the [src.name]." - update_icon() - else - if(src.smashed) - return - else - localopened = !localopened - if(localopened) - icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - else - icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - else - if(src.smashed) - return - if(istype(O, /obj/item/device/multitool)) - if(localopened) - localopened = 0 - icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - return - else - user << "\red Resetting circuitry..." - sleep(50) - src.locked = 1 - user << "\blue You re-enable the locking modules." - playsound(user, 'lockenable.ogg', 50, 1) - return - else - localopened = !localopened - if(localopened) - icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - else - icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - - - - - attack_hand(mob/user as mob) - - var/hasaxe = 0 - if(fireaxe) - hasaxe = 1 - - if(src.locked) - user <<"\red The cabinet won't budge!" - return - if(localopened) - if(fireaxe) - user.put_in_hand(fireaxe) - fireaxe = null - user << "\blue You take the fire axe from the [name]." - src.add_fingerprint(user) - update_icon() - else - if(src.smashed) - return - else - localopened = !localopened - if(localopened) - src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - else - src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - - else - localopened = !localopened //I'm pretty sure we don't need an if(src.smashed) in here. In case I'm wrong and it fucks up teh cabinet, **MARKER**. -Agouri - if(localopened) - src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - else - src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) - spawn(10) update_icon() - - verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri - set name = "Open/Close" - set category = "Object" - - if (isrobot(usr) || src.locked || src.smashed) - if(src.locked) - usr << "\red The cabinet won't budge!" - else if(src.smashed) - usr << "\blue The protective glass is broken!" - return - - localopened = !localopened - update_icon() - - verb/remove_fire_axe() - set name = "Remove Fire Axe" - set category = "Object" - - if (isrobot(usr)) - return - - if (localopened) - if(fireaxe) - usr.put_in_hand(fireaxe) - fireaxe = null - usr << "\blue You take the Fire axe from the [name]." - else - usr << "\blue The [src.name] is empty." - else - usr << "\blue The [src.name] is closed." - update_icon() - - attack_paw(mob/user as mob) - attack_hand(user) - return - - attack_ai(mob/user as mob) - if(src.smashed) - user << "\red The security of the cabinet is compromised." - return - else - locked = !locked - if(locked) - user << "\red Cabinet locked." - else - user << "\blue Cabinet unlocked." - return - - update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers - var/hasaxe = 0 - if(fireaxe) - hasaxe = 1 - icon_state = text("fireaxe[][][][]",hasaxe,src.localopened,src.hitstaken,src.smashed) - - open() - return - - close() - return @@ -353,93 +159,6 @@ // Inserting the gimmick clothing stuff here for generic items, IE Tacticool stuff -/obj/structure/closet/extinguisher - name = "Extinguisher closet" - desc = "A small wall mounted cabinet designed to hold a fire extinguisher." - icon_state = "extinguisher10" - icon_opened = "extinguisher11" - icon_closed = "extinguisher10" - opened = 1 - anchored = 1 - density = 0 - var/obj/item/weapon/extinguisher/EXTINGUISHER = new/obj/item/weapon/extinguisher - var/localopened = 1 - - open() - return - - close() - return - - attackby(var/obj/item/O as obj, var/mob/user as mob) - if (isrobot(usr)) - return - if (istype(O, /obj/item/weapon/extinguisher)) - if(!EXTINGUISHER) - user.drop_item(O) - src.contents += O - EXTINGUISHER = O - user << "\blue You place the extinguisher in the [src.name]." - else - localopened = !localopened - else - localopened = !localopened - update_icon() - - attack_hand(mob/user as mob) - if(localopened) - if(EXTINGUISHER) - user.put_in_hand(EXTINGUISHER) - EXTINGUISHER = null - user << "\blue You take the extinguisher from the [name]." - else - localopened = !localopened - - else - localopened = !localopened - update_icon() - - verb/toggle_openness() //nice name, huh? HUH?! - set name = "Open/Close" - set category = "Object" - - if (isrobot(usr)) - return - - localopened = !localopened - update_icon() - - verb/remove_extinguisher() - set name = "Remove Extinguisher" - set category = "Object" - - if (isrobot(usr)) - return - - if (localopened) - if(EXTINGUISHER) - usr.put_in_hand(EXTINGUISHER) - EXTINGUISHER = null - usr << "\blue You take the extinguisher from the [name]." - else - usr << "\blue The [name] is empty." - else - usr << "\blue The [name] is closed." - update_icon() - - attack_paw(mob/user as mob) - attack_hand(user) - return - - attack_ai(mob/user as mob) - return - - update_icon() - var/hasextinguisher = 0 - if(EXTINGUISHER) - hasextinguisher = 1 - icon_state = text("extinguisher[][]",hasextinguisher,src.localopened) - /obj/structure/closet/gimmick name = "Administrative Supply Closet" @@ -581,8 +300,6 @@ icon_state = "grey" icon_closed = "grey" - - /obj/structure/closet/secure_closet desc = "An immobile card-locked storage closet." name = "Security Locker" @@ -622,44 +339,6 @@ /obj/structure/closet/secure_closet/personal/patient name = "Patient's closet" -/obj/structure/closet/secure_closet/kitchen - name = "Kitchen Cabinet" - req_access = list(access_kitchen) - -/obj/structure/closet/secure_closet/kitchen/mining - req_access = list() - -/obj/structure/closet/secure_closet/meat - name = "Meat Fridge" - icon_state = "fridge1" - icon_closed = "fridge" - icon_locked = "fridge1" - icon_opened = "fridgeopen" - icon_broken = "fridgebroken" - icon_off = "fridge1" - isfreezer = 1 - -/obj/structure/closet/secure_closet/fridge - name = "Refrigerator" - icon_state = "fridge1" - icon_closed = "fridge" - icon_locked = "fridge1" - icon_opened = "fridgeopen" - icon_broken = "fridgebroken" - icon_off = "fridge1" - isfreezer = 1 - -/obj/structure/closet/secure_closet/money_freezer - name = "Freezer" - icon_state = "fridge1" - icon_closed = "fridge" - icon_locked = "fridge1" - icon_opened = "fridgeopen" - icon_broken = "fridgebroken" - icon_off = "fridge1" - isfreezer = 1 - req_access = list(access_heads_vault) - /obj/structure/closet/secure_closet/wall name = "wall locker" req_access = list(access_security) diff --git a/code/defines/obj/machinery.dm b/code/defines/obj/machinery.dm index 049c0dc3170..f4162aaae89 100644 --- a/code/defines/obj/machinery.dm +++ b/code/defines/obj/machinery.dm @@ -27,7 +27,6 @@ var/g_amount = 0.0 var/operating = 0.0 var/opened = 0.0 - //var/temp = null anchored = 1.0 var/list/L = list() var/list/LL = list() diff --git a/code/game/objects/closets.dm b/code/game/objects/closets.dm index 50668bfc5f5..e1fd7c33405 100644 --- a/code/game/objects/closets.dm +++ b/code/game/objects/closets.dm @@ -17,13 +17,8 @@ return 1 /obj/structure/closet/proc/dump_contents() - if(src.isfreezer) - for(var/obj/item/I in src) - I.loc = src.loc - I.infreezer = 0 - else - for(var/obj/item/I in src) - I.loc = src.loc + for(var/obj/item/I in src) + I.loc = src.loc for(var/mob/M in src) M.loc = src.loc @@ -52,15 +47,9 @@ if(!src.can_close()) return 0 - if(src.isfreezer) - for(var/obj/item/I in src.loc) - if(!I.anchored) - I.loc = src - I.infreezer = 1 - else - for(var/obj/item/I in src.loc) - if(!I.anchored) - I.loc = src + for(var/obj/item/I in src.loc) + if(!I.anchored) + I.loc = src for(var/mob/M in src.loc) if(istype (M, /mob/dead/observer)) diff --git a/code/game/objects/closets/extinguisher.dm b/code/game/objects/closets/extinguisher.dm new file mode 100644 index 00000000000..dd54bc41157 --- /dev/null +++ b/code/game/objects/closets/extinguisher.dm @@ -0,0 +1,87 @@ + +/obj/structure/closet/extinguisher + name = "Extinguisher closet" + desc = "A small wall mounted cabinet designed to hold a fire extinguisher." + icon_state = "extinguisher10" + icon_opened = "extinguisher11" + icon_closed = "extinguisher10" + opened = 1 + anchored = 1 + density = 0 + var/obj/item/weapon/extinguisher/EXTINGUISHER = new/obj/item/weapon/extinguisher + var/localopened = 1 + + open() + return + + close() + return + + attackby(var/obj/item/O as obj, var/mob/user as mob) + if (isrobot(usr)) + return + if (istype(O, /obj/item/weapon/extinguisher)) + if(!EXTINGUISHER) + user.drop_item(O) + src.contents += O + EXTINGUISHER = O + user << "\blue You place the extinguisher in the [src.name]." + else + localopened = !localopened + else + localopened = !localopened + update_icon() + + attack_hand(mob/user as mob) + if(localopened) + if(EXTINGUISHER) + user.put_in_hand(EXTINGUISHER) + EXTINGUISHER = null + user << "\blue You take the extinguisher from the [name]." + else + localopened = !localopened + + else + localopened = !localopened + update_icon() + + verb/toggle_openness() //nice name, huh? HUH?! + set name = "Open/Close" + set category = "Object" + + if (isrobot(usr)) + return + + localopened = !localopened + update_icon() + + verb/remove_extinguisher() + set name = "Remove Extinguisher" + set category = "Object" + + if (isrobot(usr)) + return + + if (localopened) + if(EXTINGUISHER) + usr.put_in_hand(EXTINGUISHER) + EXTINGUISHER = null + usr << "\blue You take the extinguisher from the [name]." + else + usr << "\blue The [name] is empty." + else + usr << "\blue The [name] is closed." + update_icon() + + attack_paw(mob/user as mob) + attack_hand(user) + return + + attack_ai(mob/user as mob) + return + + update_icon() + var/hasextinguisher = 0 + if(EXTINGUISHER) + hasextinguisher = 1 + icon_state = text("extinguisher[][]",hasextinguisher,src.localopened) diff --git a/code/game/objects/closets/fireax.dm b/code/game/objects/closets/fireax.dm new file mode 100644 index 00000000000..b452eaf8e38 --- /dev/null +++ b/code/game/objects/closets/fireax.dm @@ -0,0 +1,194 @@ +//I still dont think this should be a closet but whatever +/obj/structure/closet/fireaxecabinet + name = "Fire Axe Cabinet" + desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." + var/obj/item/weapon/fireaxe/fireaxe = new/obj/item/weapon/fireaxe + icon_state = "fireaxe1000" + icon_closed = "fireaxe1000" + icon_opened = "fireaxe1100" + anchored = 1 + density = 0 + var/localopened = 0 //Setting this to keep it from behaviouring like a normal closet and obstructing movement in the map. -Agouri + opened = 1 + var/hitstaken = 0 + var/locked = 1 + var/smashed = 0 + + attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri + //..() //That's very useful, Erro + + var/hasaxe = 0 //gonna come in handy later~ + if(fireaxe) + hasaxe = 1 + + if (isrobot(usr) || src.locked) + if(istype(O, /obj/item/device/multitool)) + user << "\red Resetting circuitry..." + playsound(user, 'lockreset.ogg', 50, 1) + sleep(50) // Sleeping time~ + src.locked = 0 + user << "\blue You disable the locking modules." + update_icon() + return + if(istype(O, /obj/item/weapon)) + var/obj/item/weapon/W = O + if(src.smashed) + return + else + playsound(user, 'Glasshit.ogg', 100, 1) //We don't want this playing every time + if(W.force < 15) + user << "\blue The cabinet's protective glass glances off the hit." + else + src.hitstaken++ + if(src.hitstaken == 4) + playsound(user, 'Glassbr3.ogg', 100, 1) //Break cabinet, receive goodies. Cabinet's fucked for life after that. + src.smashed = 1 + src.locked = 0 + src.localopened = 1 + update_icon() + return + if (istype(O, /obj/item/weapon/fireaxe) && src.localopened) + if(!fireaxe) + if(O.wielded) + user << "\red Unwield the axe first." + return + fireaxe = O + user.drop_item(O) + src.contents += O + user << "\blue You place the fire axe back in the [src.name]." + update_icon() + else + if(src.smashed) + return + else + localopened = !localopened + if(localopened) + icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + else + icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + else + if(src.smashed) + return + if(istype(O, /obj/item/device/multitool)) + if(localopened) + localopened = 0 + icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + return + else + user << "\red Resetting circuitry..." + sleep(50) + src.locked = 1 + user << "\blue You re-enable the locking modules." + playsound(user, 'lockenable.ogg', 50, 1) + return + else + localopened = !localopened + if(localopened) + icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + else + icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + + + + + attack_hand(mob/user as mob) + + var/hasaxe = 0 + if(fireaxe) + hasaxe = 1 + + if(src.locked) + user <<"\red The cabinet won't budge!" + return + if(localopened) + if(fireaxe) + user.put_in_hand(fireaxe) + fireaxe = null + user << "\blue You take the fire axe from the [name]." + src.add_fingerprint(user) + update_icon() + else + if(src.smashed) + return + else + localopened = !localopened + if(localopened) + src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + else + src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + + else + localopened = !localopened //I'm pretty sure we don't need an if(src.smashed) in here. In case I'm wrong and it fucks up teh cabinet, **MARKER**. -Agouri + if(localopened) + src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + else + src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed) + spawn(10) update_icon() + + verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri + set name = "Open/Close" + set category = "Object" + + if (isrobot(usr) || src.locked || src.smashed) + if(src.locked) + usr << "\red The cabinet won't budge!" + else if(src.smashed) + usr << "\blue The protective glass is broken!" + return + + localopened = !localopened + update_icon() + + verb/remove_fire_axe() + set name = "Remove Fire Axe" + set category = "Object" + + if (isrobot(usr)) + return + + if (localopened) + if(fireaxe) + usr.put_in_hand(fireaxe) + fireaxe = null + usr << "\blue You take the Fire axe from the [name]." + else + usr << "\blue The [src.name] is empty." + else + usr << "\blue The [src.name] is closed." + update_icon() + + attack_paw(mob/user as mob) + attack_hand(user) + return + + attack_ai(mob/user as mob) + if(src.smashed) + user << "\red The security of the cabinet is compromised." + return + else + locked = !locked + if(locked) + user << "\red Cabinet locked." + else + user << "\blue Cabinet unlocked." + return + + update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers + var/hasaxe = 0 + if(fireaxe) + hasaxe = 1 + icon_state = text("fireaxe[][][][]",hasaxe,src.localopened,src.hitstaken,src.smashed) + + open() + return + + close() + return \ No newline at end of file diff --git a/code/game/objects/closets/kitchen.dm b/code/game/objects/closets/kitchen.dm index 7807495b019..882314f578b 100644 --- a/code/game/objects/closets/kitchen.dm +++ b/code/game/objects/closets/kitchen.dm @@ -1,85 +1,114 @@ -/obj/structure/closet/secure_closet/kitchen/New() - ..() - sleep(2) - /*new /obj/item/clothing/head/chefhat(src) - new /obj/item/clothing/head/chefhat(src) - new /obj/item/clothing/under/rank/chef(src) - new /obj/item/clothing/under/rank/chef(src)*/ - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/snacks/flour(src) - new /obj/item/weapon/reagent_containers/food/condiment/sugar(src) - /*new /obj/item/weapon/tray(src) - new /obj/item/weapon/tray(src) - new /obj/item/weapon/tray(src) - new /obj/item/weapon/tray(src) - new /obj/item/weapon/tray(src) - new /obj/item/weapon/tray(src) - new /obj/item/weapon/kitchenknife(src)*/ - /*new /obj/item/clothing/head/chefhat(src) - new /obj/item/clothing/head/chefhat(src) - new /obj/item/clothing/under/rank/chef(src) - new /obj/item/clothing/under/rank/chef(src) - new /obj/item/weapon/kitchen/utensil/fork(src) - new /obj/item/weapon/kitchen/utensil/knife(src) - new /obj/item/weapon/kitchen/utensil/spoon(src) - new /obj/item/weapon/kitchen/rollingpin(src)*/ +/obj/structure/closet/secure_closet/freezer + var + target_temp = T0C - 40 + cooling_power = 40 + + return_air() + var/datum/gas_mixture/gas = (..()) + if(!gas) return null + var/datum/gas_mixture/newgas = new/datum/gas_mixture() + newgas.oxygen = gas.oxygen + newgas.carbon_dioxide = gas.carbon_dioxide + newgas.nitrogen = gas.nitrogen + newgas.toxins = gas.toxins + newgas.volume = gas.volume + newgas.temperature = gas.temperature + if(newgas.temperature <= target_temp) return + + if((newgas.temperature - cooling_power) > target_temp) + newgas.temperature -= cooling_power + else + newgas.temperature = target_temp + return newgas + + + +/obj/structure/closet/secure_closet/freezer/kitchen + name = "Kitchen Cabinet" + req_access = list(access_kitchen) + + New() + ..() + sleep(2) + for(var/i = 0, i < 16, i++) + new /obj/item/weapon/reagent_containers/food/snacks/flour(src) + new /obj/item/weapon/reagent_containers/food/condiment/sugar(src) + return + + +/obj/structure/closet/secure_closet/freezer/kitchen/mining + req_access = list() + + + +/obj/structure/closet/secure_closet/freezer/meat + name = "Meat Fridge" + icon_state = "fridge1" + icon_closed = "fridge" + icon_locked = "fridge1" + icon_opened = "fridgeopen" + icon_broken = "fridgebroken" + icon_off = "fridge1" + + + New() + ..() + sleep(2) + for(var/i = 0, i < 4, i++) + new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src) + return + + + +/obj/structure/closet/secure_closet/freezer/fridge + name = "Refrigerator" + icon_state = "fridge1" + icon_closed = "fridge" + icon_locked = "fridge1" + icon_opened = "fridgeopen" + icon_broken = "fridgebroken" + icon_off = "fridge1" + + + New() + ..() + sleep(2) + for(var/i = 0, i < 5, i++) + new /obj/item/weapon/reagent_containers/food/drinks/milk(src) + for(var/i = 0, i < 5, i++) + new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) + for(var/i = 0, i < 2, i++) + new /obj/item/kitchen/egg_box(src) + return + + + +/obj/structure/closet/secure_closet/freezer/money + name = "Freezer" + icon_state = "fridge1" + icon_closed = "fridge" + icon_locked = "fridge1" + icon_opened = "fridgeopen" + icon_broken = "fridgebroken" + icon_off = "fridge1" + req_access = list(access_heads_vault) + + + New() + ..() + sleep(2) + for(var/i = 0, i < 3, i++) + new /obj/item/weapon/spacecash/c1000(src) + for(var/i = 0, i < 5, i++) + new /obj/item/weapon/spacecash/c500(src) + for(var/i = 0, i < 6, i++) + new /obj/item/weapon/spacecash/c200(src) + return + + + + + -/obj/structure/closet/secure_closet/meat/New() - ..() - sleep(2) - var/obj/f = new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src) - f.infreezer = 1 - f = new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src) - f.infreezer = 1 - f = new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src) - f.infreezer = 1 - f = new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src) - f.infreezer = 1 -/obj/structure/closet/secure_closet/fridge/New() - ..() - sleep(2) - new /obj/item/weapon/reagent_containers/food/drinks/milk(src) - new /obj/item/weapon/reagent_containers/food/drinks/milk(src) - new /obj/item/weapon/reagent_containers/food/drinks/milk(src) - new /obj/item/weapon/reagent_containers/food/drinks/milk(src) - new /obj/item/weapon/reagent_containers/food/drinks/milk(src) - new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) - new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) - new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) - new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) - new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) - new /obj/item/kitchen/egg_box(src) - new /obj/item/kitchen/egg_box(src) -/obj/structure/closet/secure_closet/money_freezer/New() - ..() - sleep(2) - new /obj/item/weapon/spacecash/c1000(src) - new /obj/item/weapon/spacecash/c1000(src) - new /obj/item/weapon/spacecash/c1000(src) - new /obj/item/weapon/spacecash/c500(src) - new /obj/item/weapon/spacecash/c500(src) - new /obj/item/weapon/spacecash/c500(src) - new /obj/item/weapon/spacecash/c500(src) - new /obj/item/weapon/spacecash/c500(src) - new /obj/item/weapon/spacecash/c200(src) - new /obj/item/weapon/spacecash/c200(src) - new /obj/item/weapon/spacecash/c200(src) - new /obj/item/weapon/spacecash/c200(src) - new /obj/item/weapon/spacecash/c200(src) - new /obj/item/weapon/spacecash/c200(src) \ No newline at end of file diff --git a/code/game/objects/storage/crates.dm b/code/game/objects/crates.dm similarity index 90% rename from code/game/objects/storage/crates.dm rename to code/game/objects/crates.dm index 0242c78cb2a..f7a29ed57c5 100644 --- a/code/game/objects/storage/crates.dm +++ b/code/game/objects/crates.dm @@ -64,30 +64,28 @@ density = 1 icon_opened = "freezeropen" icon_closed = "freezer" + var + target_temp = T0C - 40 + cooling_power = 40 -/obj/structure/closet/crate/freezer/open() - playsound(src.loc, 'click.ogg', 15, 1, -3) + return_air() + var/datum/gas_mixture/gas = (..()) + if(!gas) return null + var/datum/gas_mixture/newgas = new/datum/gas_mixture() + newgas.oxygen = gas.oxygen + newgas.carbon_dioxide = gas.carbon_dioxide + newgas.nitrogen = gas.nitrogen + newgas.toxins = gas.toxins + newgas.volume = gas.volume + newgas.temperature = gas.temperature + if(newgas.temperature <= target_temp) return - for(var/obj/item/I in src) - I.loc = get_turf(src) - I.infreezer = 0 + if((newgas.temperature - cooling_power) > target_temp) + newgas.temperature -= cooling_power + else + newgas.temperature = target_temp + return newgas - for(var/mob/M in src) - M.loc = get_turf(src) - - icon_state = icon_opened - src.opened = 1 - -/obj/structure/closet/crate/freezer/close() - playsound(src.loc, 'click.ogg', 15, 1, -3) - - for(var/obj/item/I in get_turf(src)) - if(I.density || I.anchored || I == src) continue - I.loc = src - I.infreezer = 1 - - icon_state = icon_closed - src.opened = 0 /obj/structure/closet/crate/bin desc = "A large bin." diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 536c01542a8..cf2a65e82ad 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -863,7 +863,7 @@ return var/mob/M = locate(href_list["traitor"]) if (!istype(M)) - player() + player_panel_new() return if(isalien(M)) alert("Is an [M.mind ? M.mind.special_role : "Alien"]!", "[M.key]") @@ -1823,328 +1823,6 @@ dat += text("[foo]") usr << browse(dat, "window=adminplayeropts;size=480x150") -/obj/admins/proc/player() - if (!usr.client.holder) - return - var/dat = "Player Panel" - - //javascript, the part that does most of the work~ - dat += {" - - - - - - - "} - - //body tag start + onload and onkeypress (onkeyup) javascript event calls - dat += "" - - //title + search bar - dat += {" - - - - - - - - -
- Player panel
- Hover over a line to see more information -

-

- Search: -
- - "} - - //player table header - dat += {" - - "} - - var/list/mobs = sortmobs() - var/i = 1 - var/show_karma = 0 - var/DBConnection/dbcon - if(config.sql_enabled) // SQL is enabled in config.txt - dbcon = new() // Setting up connection - dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]") - if(dbcon.IsConnected()) - show_karma = 1 - else - usr << "\red Unable to connect to karma database. This error can occur if your host has failed to set up an SQL database or improperly configured its login credentials.
" - - for(var/mob/M in mobs) - if(M.ckey) - - var/color = "#e6e6e6" - if(i%2 == 0) - color = "#f2f2f2" - var/is_antagonist = is_special_character(M) - - var/karma = "DC" - - if(show_karma) - var/DBQuery/query = dbcon.NewQuery("SELECT karma FROM karmatotals WHERE byondkey='[M.key]'") - query.Execute() - - while(query.NextRow()) - karma = query.item[1] - - var/M_job = "" - - if(istype(M,/mob/new_player)) - M_job = "New player" - if(isliving(M)) - M_job = "Living" - if(isobserver(M)) - M_job = "Ghost" - if(isalien(M)) - M_job = "Alien" - if(islarva(M)) - M_job = "Alien larva" - if(ishuman(M)) - M_job = M.job - if(ismetroid(M)) - M_job = "Metroid" - if(ismonkey(M)) - M_job = "Moneky" - if(isAI(M)) - M_job = "AI" - if(ispAI(M)) - M_job = "pAI" - if(isrobot(M)) - M_job = "Cyborg" - if(isanimal(M)) - M_job = "Animal" - if(iscorgi(M)) - M_job = "Corgi" - - M_job = dd_replacetext(M_job, "'", "") - M_job = dd_replacetext(M_job, "\"", "") - M_job = dd_replacetext(M_job, "\\", "") - - var/M_name = M.name - M_name = dd_replacetext(M_name, "'", "") - M_name = dd_replacetext(M_name, "\"", "") - M_name = dd_replacetext(M_name, "\\", "") - var/M_rname = M.real_name - M_rname = dd_replacetext(M_rname, "'", "") - M_rname = dd_replacetext(M_rname, "\"", "") - M_rname = dd_replacetext(M_rname, "\\", "") - - var/M_key = M.key - M_key = dd_replacetext(M_key, "'", "") - M_key = dd_replacetext(M_key, "\"", "") - M_key = dd_replacetext(M_key, "\\", "") - - //output for each mob - dat += {" - - - - - - "} - - i++ - - - //player table ending - dat += {" -
- - - [M_name] - [M_rname] - [M_key] ([M_job]) - -
-
-
- - - - "} - - usr << browse(dat, "window=players;size=600x480") /obj/admins/proc/Jobbans() diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index a07403c232e..5da2ffcbdc6 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -248,6 +248,7 @@ verbs += /client/proc/admin_observe verbs += /client/proc/game_panel verbs += /client/proc/player_panel + verbs += /client/proc/player_panel_new verbs += /client/proc/unban_panel verbs += /client/proc/jobbans verbs += /client/proc/unjobban_panel @@ -393,6 +394,7 @@ verbs -= /client/proc/toggle_hear_deadcast verbs -= /client/proc/toggle_hear_radio verbs -= /client/proc/tension_report + verbs -= /client/proc/player_panel_new return @@ -447,8 +449,15 @@ /client/proc/player_panel() set name = "Player Panel" set category = "Admin" - if (holder) - holder.player() + if(holder) + holder.player_panel_old() + return + +/client/proc/player_panel_new() + set name = "Player Panel-New" + set category = "Admin" + if(holder) + holder.player_panel_new() return /client/proc/jobbans() @@ -461,14 +470,14 @@ /client/proc/unban_panel() set name = "Unban Panel" set category = "Admin" - if (holder) + if(holder) holder.unbanpanel() return /client/proc/game_panel() set name = "Game Panel" set category = "Admin" - if (holder) + if(holder) holder.Game() return diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm new file mode 100644 index 00000000000..98873bac5ee --- /dev/null +++ b/code/modules/admin/player_panel.dm @@ -0,0 +1,408 @@ +/obj/admins/proc/player_panel_new()//The new one + if (!usr.client.holder) + return + var/dat = "Player Panel" + + //javascript, the part that does most of the work~ + dat += {" + + + + + + + "} + + //body tag start + onload and onkeypress (onkeyup) javascript event calls + dat += "" + + //title + search bar + dat += {" + + + + + + + + +
+ Player panel
+ Hover over a line to see more information +

+

+ Search: +
+ + "} + + //player table header + dat += {" + + "} + + var/list/mobs = sortmobs() + var/i = 1 + var/show_karma = 0 + var/DBConnection/dbcon + if(config.sql_enabled) // SQL is enabled in config.txt + dbcon = new() // Setting up connection + dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]") + if(dbcon.IsConnected()) + show_karma = 1 + else + usr << "\red Unable to connect to karma database. This error can occur if your host has failed to set up an SQL database or improperly configured its login credentials.
" + + for(var/mob/M in mobs) + if(M.ckey) + + var/color = "#e6e6e6" + if(i%2 == 0) + color = "#f2f2f2" + var/is_antagonist = is_special_character(M) + + var/karma = "DC" + + if(show_karma) + var/DBQuery/query = dbcon.NewQuery("SELECT karma FROM karmatotals WHERE byondkey='[M.key]'") + query.Execute() + + while(query.NextRow()) + karma = query.item[1] + + var/M_job = "" + + if(istype(M,/mob/new_player)) + M_job = "New player" + if(isliving(M)) + M_job = "Living" + if(isobserver(M)) + M_job = "Ghost" + if(isalien(M)) + M_job = "Alien" + if(islarva(M)) + M_job = "Alien larva" + if(ishuman(M)) + M_job = M.job + if(ismetroid(M)) + M_job = "Metroid" + if(ismonkey(M)) + M_job = "Moneky" + if(isAI(M)) + M_job = "AI" + if(ispAI(M)) + M_job = "pAI" + if(isrobot(M)) + M_job = "Cyborg" + if(isanimal(M)) + M_job = "Animal" + if(iscorgi(M)) + M_job = "Corgi" + + M_job = dd_replacetext(M_job, "'", "") + M_job = dd_replacetext(M_job, "\"", "") + M_job = dd_replacetext(M_job, "\\", "") + + var/M_name = M.name + M_name = dd_replacetext(M_name, "'", "") + M_name = dd_replacetext(M_name, "\"", "") + M_name = dd_replacetext(M_name, "\\", "") + var/M_rname = M.real_name + M_rname = dd_replacetext(M_rname, "'", "") + M_rname = dd_replacetext(M_rname, "\"", "") + M_rname = dd_replacetext(M_rname, "\\", "") + + var/M_key = M.key + M_key = dd_replacetext(M_key, "'", "") + M_key = dd_replacetext(M_key, "\"", "") + M_key = dd_replacetext(M_key, "\\", "") + + //output for each mob + dat += {" + + + + + + "} + + i++ + + + //player table ending + dat += {" +
+ + + [M_name] - [M_rname] - [M_key] ([M_job]) + +
+
+
+ + + + "} + + usr << browse(dat, "window=players;size=600x480") + +//The old one +/obj/admins/proc/player_panel_old() + if (!usr.client.holder) + return + var/dat = "Player Menu" + dat += "" + //add to this if wanting to add back in IP checking + //add if you want to know their ip to the lists below + var/list/mobs = sortmobs() + var/show_karma = 0 + var/DBConnection/dbcon + + if(config.sql_enabled) // SQL is enabled in config.txt + dbcon = new() // Setting up connection + dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]") + if(dbcon.IsConnected()) + show_karma = 1 + else + usr << "\red Unable to connect to karma database. This error can occur if your host has failed to set up an SQL database or improperly configured its login credentials.
" + + for(var/mob/M in mobs) + if(!M.ckey) continue + + dat += "" + if(isAI(M)) + dat += "" + else if(isrobot(M)) + dat += "" + else if(ishuman(M)) + dat += "" + else if(istype(M, /mob/living/silicon/pai)) + dat += "" + else if(istype(M, /mob/new_player)) + dat += "" + else if(isobserver(M)) + dat += "" + else if(ismonkey(M)) + dat += "" + else if(isalien(M)) + dat += "" + else + dat += "" + + + if(M.mind && M.mind.assigned_role) // Adds a column to Player Panel that shows their current job. + var/mob/living/carbon/human/H = M + if (H.wear_id) + var/obj/item/weapon/card/id/id = H.wear_id + if(M.mind.assigned_role == id.assignment) // Polymorph + dat += "" + else + dat += "" + else + dat += "" + + + dat += {" + + + "} + switch(is_special_character(M)) + if(0) + dat += {""} + if(1) + dat += {""} + if(2) + dat += {""} + + var/currentkarma = 0 + if(show_karma) + var/DBQuery/query = dbcon.NewQuery("SELECT karma FROM karmatotals WHERE byondkey='[M.key]'") + query.Execute() + while(query.NextRow()) + currentkarma = query.item[1] + + if(currentkarma) + dat += "" + else + dat += "" + + dat += "
NameReal NameAssigned JobKeyOptionsPMTraitor?Karma
IP:(IP: [M.lastKnownIP])
[M.name]AICyborg[M.real_name]pAINew PlayerGhostMonkeyAlienUnknown[M.mind.assigned_role][M.mind.assigned_role] ([id.assignment])" + else + dat += "[M.mind.assigned_role] (No ID)No Assigned Role[(M.client ? "[M.client]" : "No client")]XPMTraitor?Traitor?Traitor?[currentkarma]
0
" + + usr << browse(dat, "window=players;size=640x480") diff --git a/code/modules/food/food.dm b/code/modules/food/food.dm index 4954981b8dd..137622e8fcb 100644 --- a/code/modules/food/food.dm +++ b/code/modules/food/food.dm @@ -197,63 +197,6 @@ ..() reagents.add_reagent("nutriment", 1) -/obj/item/weapon/reagent_containers/food/snacks/meat - name = "meat" - desc = "A slab of meat" - icon_state = "meat" - health = 180 - New() - ..() - reagents.add_reagent("nutriment", 3) - src.bitesize = 3 - processing_objects.Add(src) - - Del() - processing_objects.Remove(src) - ..() - - process() - if (src.infreezer) - health = 180 - return - var/turf/location = get_turf(src.loc) - var/datum/gas_mixture/environment = location.return_air() - switch(environment.temperature) - if(0 to T0C) - health = 180 - return - if(T0C to (T0C + 100)) - health = max(0, health - 1) - if(health <= 0) - desc = "A slab of meat. It looks rotten." - icon_state = "rottenmeat" - var/toxin_amount = reagents.get_reagent_amount("nutriment") * 3 - reagents.add_reagent("toxin",toxin_amount) - processing_objects.Remove(src) - -/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh - name = "synthetic meat" - desc = "A synthetic slab of flesh." - - process() - if (src.infreezer) - health = 180 - return - var/turf/location = get_turf(src.loc) - var/datum/gas_mixture/environment = location.return_air() - switch(environment.temperature) - if(0 to T0C) - health = 180 - return - if(T0C to (T0C + 100)) - health = max(0, health - 1) - if(health <= 0) - desc = "A slab of synthetic meat. It looks rotten." - icon_state = "rottenmeat" - var/toxin_amount = reagents.get_reagent_amount("nutriment") * 3 - reagents.add_reagent("toxin",toxin_amount) - processing_objects.Remove(src) - /obj/item/weapon/reagent_containers/food/snacks/appendix //yes, this is the same as meat. I might do something different in future name = "appendix" desc = "An appendix which looks perfectly healthy." @@ -272,34 +215,6 @@ reagents.add_reagent("nutriment", 1) src.bitesize = 1 -/obj/item/weapon/reagent_containers/food/snacks/meat/human - name = "-meat" - var/subjectname = "" - var/subjectjob = null - - process() - if (src.infreezer) - health = 180 - return - var/turf/location = get_turf(src.loc) - var/datum/gas_mixture/environment = location.return_air() - switch(environment.temperature) - if(0 to T0C) - health = 180 - return - if(T0C to (T0C + 100)) - health = max(0, health - 1) - if(health <= 0) - desc = "A slab of meat. It looks rotten." - icon_state = "rottenmeat" - var/toxin_amount = reagents.get_reagent_amount("nutriment") * 3 - reagents.add_reagent("toxin",toxin_amount) - processing_objects.Remove(src) - - -/obj/item/weapon/reagent_containers/food/snacks/meat/monkey - //same as plain meat - /obj/item/weapon/reagent_containers/food/snacks/tofu name = "Tofu" icon_state = "tofu" diff --git a/code/modules/food/meat.dm b/code/modules/food/meat.dm new file mode 100644 index 00000000000..d02f40704ee --- /dev/null +++ b/code/modules/food/meat.dm @@ -0,0 +1,47 @@ +/obj/item/weapon/reagent_containers/food/snacks/meat + name = "meat" + desc = "A slab of meat" + icon_state = "meat" + health = 180 + New() + ..() + reagents.add_reagent("nutriment", 3) + src.bitesize = 3 + processing_objects.Add(src) + + Del() + processing_objects.Remove(src) + ..() + + + process() + if(!loc) return + var/datum/gas_mixture/environment = loc.return_air() + if(!environment) return + switch(environment.temperature) + if(0 to T0C) + health = 180 + return + if(T0C to (T0C + 100)) + health = max(0, health - 1) + if(health <= 0) + desc = "A slab of synthetic meat. It looks rotten." + icon_state = "rottenmeat" + var/toxin_amount = reagents.get_reagent_amount("nutriment") * 3 + reagents.add_reagent("toxin",toxin_amount) + processing_objects.Remove(src) + + +/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh + name = "synthetic meat" + desc = "A synthetic slab of flesh." + + +/obj/item/weapon/reagent_containers/food/snacks/meat/human + name = "-meat" + var/subjectname = "" + var/subjectjob = null + + +/obj/item/weapon/reagent_containers/food/snacks/meat/monkey + //same as plain meat \ No newline at end of file diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 3ec515dcb3f..11635f176a1 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -62,9 +62,9 @@ return 1 - emp_act()//Emitters are hardened but still might have issues + emp_act(var/severity)//Emitters are hardened but still might have issues use_power(50) - if(prob(1)&&prob(1)) + if((severity == 1)&&prob(1)&&prob(1)) if(src.active) src.active = 0 src.use_power = 1 diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index ce1917197d5..ea6294511be 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -67,7 +67,7 @@ PE|PE|PE examine() - set src in usr + set src in oview(1) switch(src.construction_state) if(0) src.desc = text("Part of a Particle Accelerator, looks like its not attached to the flooring") @@ -161,9 +161,9 @@ PE|PE|PE if(temp_state == src.construction_state)//Nothing changed return 0 else - if(src.construction_state >= 3)//Was taken apart, update state - update_state() src.construction_state = temp_state + if(src.construction_state < 3)//Was taken apart, update state + update_state() update_icon() return 1 return 0 @@ -266,7 +266,7 @@ PE|PE|PE if(temp_state == src.construction_state)//Nothing changed return 0 else - if(src.construction_state >= 3)//Was taken apart, update state + if(src.construction_state < 3)//Was taken apart, update state update_state() if(use_power) use_power = 0 diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 467739fe76e..5ef5869a9de 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -34,12 +34,21 @@ connected_parts = list() return if(!part_scan()) - assembled = 0 + use_power = 1 + active = 0 + connected_parts = list() + return Topic(href, href_list) ..() + //Ignore input if we are broken, !silicon guy cant touch us, or nonai controlling from super far away + if(stat & (BROKEN|NOPOWER) || (get_dist(src, usr) > 1 && !istype(usr, /mob/living/silicon)) || (get_dist(src, usr) > 8 && !istype(usr, /mob/living/silicon/ai))) + usr.machine = null + usr << browse(null, "window=pacontrol") + return + if( href_list["close"] ) usr << browse(null, "window=pacontrol") usr.machine = null @@ -57,6 +66,7 @@ if(src.strength < 0) src.strength = 0 src.updateDialog() + return power_change() @@ -68,6 +78,7 @@ use_power = 1 return + process() if(src.active) for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts) @@ -139,8 +150,8 @@ interact(mob/user) - if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) - if (!istype(user, /mob/living/silicon)) + if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER))) + if(!istype(user, /mob/living/silicon)) user.machine = null user << browse(null, "window=pacontrol") return @@ -166,3 +177,4 @@ user << browse(dat, "window=pacontrol;size=420x500") onclose(user, "pacontrol") + return diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm index a4c3c92f09a..7c5d3a279d9 100644 --- a/maps/tgstation.2.0.8.dmm +++ b/maps/tgstation.2.0.8.dmm @@ -2858,7 +2858,7 @@ "bcX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/heads) "bcY" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/central) "bcZ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) -"bda" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/secure_closet/kitchen,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bda" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/secure_closet/freezer/kitchen,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bdb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bdc" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bdd" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) @@ -3133,7 +3133,7 @@ "bim" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/hallway/primary/central) "bin" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/hallway/primary/central) "bio" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen) -"bip" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/closet/secure_closet/fridge,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bip" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "biq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bir" = (/obj/structure/table,/obj/machinery/processor,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bis" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) @@ -3897,7 +3897,7 @@ "bwW" = (/obj/machinery/door/airlock/maintenance{name = "Quartermaster's Office"; req_access_txt = "41"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/quartermaster/qm) "bwX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/quartermaster/qm) "bwY" = (/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/quartermaster/miningdock) -"bwZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/secure_closet/money_freezer,/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/nuke_storage) +"bwZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/secure_closet/freezer/money,/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/nuke_storage) "bxa" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor{tag = "icon-vault (SOUTHEAST)"; icon_state = "vault"; dir = 6},/area/security/nuke_storage) "bxb" = (/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/security/nuke_storage) "bxc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/alarm{frequency = 1437; pixel_y = 23},/turf/simulated/floor{tag = "icon-vault (SOUTHWEST)"; icon_state = "vault"; dir = 10},/area/security/nuke_storage) @@ -5570,8 +5570,8 @@ "cdf" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/turf/simulated/floor/plating,/area/engine/engineering) "cdg" = (/obj/machinery/dispenser,/turf/simulated/floor/plating,/area/engine/engineering) "cdh" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"; tag = "icon-warnplate (WEST)"},/area/engine/engineering) -"cdi" = (/obj/structure/particle_accelerator/particle_emitter/left{anchored = 1; construction_state = 4; dir = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cdj" = (/obj/machinery/particle_accelerator/control_box{anchored = 1; construction_state = 4; dir = 8},/obj/effect/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating/airless{dir = 5; icon_state = "warnplate"},/area/engine/engineering) +"cdi" = (/obj/structure/particle_accelerator/particle_emitter/left{anchored = 1; construction_state = 3; dir = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cdj" = (/obj/machinery/particle_accelerator/control_box{anchored = 1; construction_state = 3; dir = 8},/obj/effect/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating/airless{dir = 5; icon_state = "warnplate"},/area/engine/engineering) "cdk" = (/turf/simulated/floor/plating/airless{dir = 10; icon_state = "warnplate"},/area/engine/engineering) "cdl" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/turf/simulated/floor/plating,/area/engine/engineering) "cdm" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-4"},/turf/simulated/floor/plating{tag = "icon-warnplate (EAST)"; icon_state = "warnplate"; dir = 4},/area/engine/engineering) @@ -5579,12 +5579,12 @@ "cdo" = (/obj/effect/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cdp" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cdq" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cdr" = (/obj/structure/particle_accelerator/particle_emitter/center{anchored = 1; construction_state = 4; dir = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cds" = (/obj/structure/particle_accelerator/power_box{anchored = 1; construction_state = 4; dir = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cdt" = (/obj/structure/particle_accelerator/fuel_chamber{anchored = 1; construction_state = 4; dir = 8},/turf/simulated/floor/plating/airless{dir = 8; icon_state = "warnplatecorner"},/area/engine/engineering) -"cdu" = (/obj/structure/particle_accelerator/end_cap{anchored = 1; construction_state = 4; dir = 8},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/engine/engineering) +"cdr" = (/obj/structure/particle_accelerator/particle_emitter/center{anchored = 1; construction_state = 3; dir = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cds" = (/obj/structure/particle_accelerator/power_box{anchored = 1; construction_state = 3; dir = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cdt" = (/obj/structure/particle_accelerator/fuel_chamber{anchored = 1; construction_state = 3; dir = 8},/turf/simulated/floor/plating/airless{dir = 8; icon_state = "warnplatecorner"},/area/engine/engineering) +"cdu" = (/obj/structure/particle_accelerator/end_cap{anchored = 1; construction_state = 3; dir = 8},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/engine/engineering) "cdv" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cdw" = (/obj/structure/particle_accelerator/particle_emitter/right{anchored = 1; construction_state = 4; dir = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cdw" = (/obj/structure/particle_accelerator/particle_emitter/right{anchored = 1; construction_state = 3; dir = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cdx" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area) "cdy" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/solar/starboard) "cdz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor/plating/airless,/area/solar/starboard) @@ -5915,7 +5915,7 @@ "cjM" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) "cjN" = (/obj/item/weapon/reagent_containers/food/condiment/saltshaker,/obj/structure/table,/turf/unsimulated/floor{tag = "icon-redyellowfull"; icon_state = "redyellowfull"},/area/centcom/living) "cjO" = (/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living) -"cjP" = (/obj/structure/closet/secure_closet/meat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/living) +"cjP" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/living) "cjQ" = (/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/living) "cjR" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/supply/dock) "cjS" = (/obj/structure/closet/crate/medical,/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor3"},/area/syndicate_station/start) @@ -6170,7 +6170,7 @@ "coH" = (/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control) "coI" = (/obj/structure/stool/chair,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control) "coJ" = (/turf/unsimulated/wall,/area/centcom/evac) -"coK" = (/obj/structure/closet/secure_closet/meat,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac) +"coK" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac) "coL" = (/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac) "coM" = (/obj/structure/table,/obj/machinery/processor{pixel_x = 0; pixel_y = 10},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac) "coN" = (/obj/structure/stool/chair,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) @@ -6199,7 +6199,7 @@ "cpk" = (/obj/machinery/door/airlock/external,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "NTrasen"; name = "Outer Airlock"; opacity = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "cpl" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom) "cpm" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control) -"cpn" = (/obj/structure/table,/obj/item/assembly/shock_kit{icon = 'assemblies.dmi'},/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control) +"cpn" = (/obj/structure/table,/obj/item/assembly/shock_kit{icon = 'icons/obj/assemblies.dmi'},/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control) "cpo" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space,/area/shuttle/specops/centcom) "cpp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/unsimulated/floor,/area/shuttle/specops/centcom) "cpq" = (/obj/effect/landmark{name = "Commando-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) @@ -6428,8 +6428,8 @@ "ctF" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "ctG" = (/turf/unsimulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "ctH" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) -"ctI" = (/obj/structure/closet/secure_closet/meat,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) -"ctJ" = (/obj/structure/closet/secure_closet/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"ctI" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) +"ctJ" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "ctK" = (/obj/structure/stool/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "ctL" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet,/turf/unsimulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "ctM" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) diff --git a/tgstation.dme b/tgstation.dme index 27a5c29e9a9..0baead61518 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -547,6 +547,7 @@ #include "code\game\objects\bombspawner.dm" #include "code\game\objects\cleaner.dm" #include "code\game\objects\closets.dm" +#include "code\game\objects\crates.dm" #include "code\game\objects\displaycase.dm" #include "code\game\objects\door_assembly.dm" #include "code\game\objects\effect_system.dm" @@ -582,6 +583,8 @@ #include "code\game\objects\alien\weeds.dm" #include "code\game\objects\closets\bombsuit.dm" #include "code\game\objects\closets\emergency.dm" +#include "code\game\objects\closets\extinguisher.dm" +#include "code\game\objects\closets\fireax.dm" #include "code\game\objects\closets\firecloset.dm" #include "code\game\objects\closets\gimmick.dm" #include "code\game\objects\closets\gmcloset.dm" @@ -683,7 +686,6 @@ #include "code\game\objects\storage\belt.dm" #include "code\game\objects\storage\bible.dm" #include "code\game\objects\storage\briefcase.dm" -#include "code\game\objects\storage\crates.dm" #include "code\game\objects\storage\firstaid.dm" #include "code\game\objects\storage\kit.dm" #include "code\game\objects\storage\lockbox.dm" @@ -710,6 +712,7 @@ #include "code\modules\admin\create_turf.dm" #include "code\modules\admin\NewBan.dm" #include "code\modules\admin\newbanjob.dm" +#include "code\modules\admin\player_panel.dm" #include "code\modules\admin\verbs\adminhelp.dm" #include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminsay.dm" @@ -771,6 +774,7 @@ #include "code\modules\critters\critters.dm" #include "code\modules\critters\hivebots\hivebot.dm" #include "code\modules\food\food.dm" +#include "code\modules\food\meat.dm" #include "code\modules\food\recipes_microwave.dm" #include "code\modules\mining\datum_processing_recipe.dm" #include "code\modules\mining\machine_input_output_plates.dm"