Name | Vitals | Position |
| [ID.name] | " + if(I) + var/style = null + var/ijob = jobs[I.assignment] + if(ijob % 10 == 0) + style += "font-weight: bold; " //head roles always end in 0 + if(ijob >= 10 && ijob < 20) + style += "color: #E74C3C; " //security + if(ijob >= 20 && ijob < 30) + style += "color: #3498DB; " //medical + if(ijob >= 30 && ijob < 40) + style += "color: #9B59B6; " //science + if(ijob >= 40 && ijob < 50) + style += "color: #F1C40F; " //engineering + if(ijob >= 50 && ijob < 60) + style += "color: #F39C12; " //cargo + log += "[ijob]]||
| [I.registered_name] ([I.assignment]) | " //ijob does not get displayed, nor does it take up space, it's just used for the positioning of an entry else - log += "||
| Unknown | " + log += "80||
| Unknown | " var/damage_report if(U.sensor_mode > 1) @@ -62,13 +106,13 @@ proc/crewmonitor(mob/user,var/atom/source) var/dam2 = round(H.getToxLoss(),1) var/dam3 = round(H.getFireLoss(),1) var/dam4 = round(H.getBruteLoss(),1) - damage_report = "([dam1]/[dam2]/[dam3]/[dam4])" + damage_report = "([dam1]/[dam2]/[dam3]/[dam4])" switch(U.sensor_mode) if(1) - log += "[life_status] | Not Available | [life_status] | Not Available | " if(2) - log += "[life_status] [damage_report] | Not Available | " + log += "[life_status] [damage_report] | Not Available | " if(3) var/area/player_area = get_area(H) log += "[life_status] [damage_report] | [format_text(player_area.name)] ([pos.x], [pos.y]) | " diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index ab3182f0219..bface7aae31 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -268,6 +268,7 @@ src.temp = text("Are you sure you wish to delete all records?[rc.rec_dpt] | [rc.message] | [rc.stamp] | [rc.id_auth] | [rc.priority] | "} dat += "
| X | Channel | Nick | Message |
|---|---|---|---|
| [msg.channel] | [msg.sender] | [msg.message] |


According to the [src.name], you are now in outer space. Hold your breath.
\ + " + if(AREA_SPECIAL) + text += "This place is not noted on the [src.name].
" + return text + + +/obj/item/areaeditor/Topic(href, href_list) + if(..()) return - if (!href_list["action"]) - return - switch(href_list["action"]) - if ("create_area") - if (get_area_type()!=AREA_SPACE) - interact() - return + if(href_list["create_area"]) + if(get_area_type()==AREA_SPACE) create_area() - if ("edit_area") - if (get_area_type()!=AREA_STATION) - interact() - return - edit_area() + updateUsrDialog() -/obj/item/blueprints/interact() + +//One-use area creation permits. +/obj/item/areaeditor/permit + name = "construction permit" + icon_state = "permit" + desc = "This is a one-use permit that allows the user to offically declare a built room as new addition to the station." + fluffnotice = "Nanotrasen Engineering requires all on-station construction projects to be approved by a head of staff, as detailed in Nanotrasen Company Regulation 512-C (Mid-Shift Modifications to Company Property). \ + By submitting this form, you accept any fines, fees, or personal injury/death that may occur during construction." + + +/obj/item/areaeditor/permit/attack_self(mob/user as mob) + . = ..() var/area/A = get_area() - var/text = {"According to the blueprints, you are now in outer space. Hold your breath.
- -"} - if (AREA_STATION) - text += {" -According to the blueprints, you are now in \"[A.name]\".
-You may -move an amendment to the drawing.
-"} - if (AREA_SPECIAL) - text += {" -This place is not noted on the blueprint.
-"} - else - return - text += "" - usr << browse(text, "window=blueprints") + if(get_area_type() == AREA_STATION) + . += "According to the [src], you are now in \"[A.name]\".
" + var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500) + popup.set_content(.) + popup.open() onclose(usr, "blueprints") -/obj/item/blueprints/proc/get_area() +/obj/item/areaeditor/permit/create_area() + ..() + qdel(src) + + +//Station blueprints!!! +/obj/item/areaeditor/blueprints + name = "station blueprints" + desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it." + icon = 'icons/obj/items.dmi' + icon_state = "blueprints" + fluffnotice = "Property of Nanotrasen. For heads of staff only. Store in high-secure storage." + + +/obj/item/areaeditor/blueprints/attack_self(mob/user as mob) + . = ..() + var/area/A = get_area() + if(get_area_type() == AREA_STATION) + . += "According to the [src], you are now in \"[A.name]\".
" + . += "You may move an amendment to the drawing.
" + var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500) + popup.set_content(.) + popup.open() + onclose(user, "blueprints") + + +/obj/item/areaeditor/blueprints/Topic(href, href_list) + ..() + if(href_list["edit_area"]) + if(get_area_type()!=AREA_STATION) + return + edit_area() + updateUsrDialog() + + +/obj/item/areaeditor/proc/get_area() var/turf/T = get_turf(usr) var/area/A = T.loc A = A.master return A -/obj/item/blueprints/proc/get_area_type(var/area/A = get_area()) + +/obj/item/areaeditor/proc/get_area_type(var/area/A = get_area()) if (istype(A,/area/space)) return AREA_SPACE var/list/SPECIALS = list( @@ -92,15 +119,14 @@ move an amendment to the drawing. /area/syndicate_station, /area/wizard_station, /area/prison - // /area/derelict //commented out, all hail derelict-rebuilders! ) for (var/type in SPECIALS) if ( istype(A,type) ) return AREA_SPECIAL return AREA_STATION -/obj/item/blueprints/proc/create_area() - //world << "DEBUG: create_area" + +/obj/item/areaeditor/proc/create_area() var/res = detect_room(get_turf(usr)) if(!istype(res,/list)) switch(res) @@ -133,22 +159,16 @@ move an amendment to the drawing. move_turfs_to_area(turfs, A) A.SetDynamicLighting() - spawn(5) - //ma = A.master ? "[A.master]" : "(null)" - //world << "DEBUG: create_area(5):
Eject [cartridge]"
- if (mode)
+ if (mode && !noreturn)
dat += " |
Return"
dat += " |
Refresh"
@@ -283,7 +291,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
dat += "
Notekeeper
Messenger
Nanotrasen Relay Chat
Nanotrasen Relay Chat
Power Monitor
Floorbot Access
Medical Records
[scanmode == 1 ? "Disable" : "Enable"] Medical Scanner
Medibot Access
Custodial Locator
Cleanbot Access
Signaler System
Nanotrasen Relay Chat
Detected Channels
"
- dat += "
SS13 Nanotrasen Relay Chat Network
Scan for active bots
refresh)
Return to bot list
Securitron Interlink
Scan for active bots
refresh)
Return to bot list"
+ bot_control(SC)
if (47) //quartermaster order records
menu = "
Supply Record Interlink
M.U.L.E. bot Interlink V0.8
Cleanbot Interlink
Floorbot Interlink
Medibot InterlinkYou start skimming through the manual...
+ diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index a1071d7e1d7..66f46b0c758 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -83,18 +83,14 @@ /obj/item/weapon/melee/telebaton/attack_self(mob/user as mob) on = !on if(on) - user.visible_message("With a flick of their wrist, [user] extends their telescopic baton.",\ - "You extend the baton.",\ - "You hear an ominous click.") + user << "You extend the baton." icon_state = "telebaton_1" item_state = "nullrod" w_class = 4 //doesnt fit in backpack when its on for balance force = 10 //seclite damage attack_verb = list("smacked", "struck", "cracked", "beaten") else - user.visible_message("[user] collapses their telescopic baton.",\ - "You collapse the baton.",\ - "You hear a click.") + user << "You collapse the baton." icon_state = "telebaton_0" item_state = "telebaton_0" //no sprite in other words slot_flags = SLOT_BELT @@ -117,6 +113,11 @@ else user.take_organ_damage(2*force) return + if(isrobot(target)) + ..() + return + if(!isliving(target)) + return if (user.a_intent == "harm") if(!..()) return if(!isrobot(target)) return @@ -124,6 +125,7 @@ if(cooldown <= 0) playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1) target.Weaken(3) + add_logs(user, target, "stunned", object="telescopic baton") src.add_fingerprint(user) target.visible_message("[target] has been knocked down with \the [src] by [user]!") if(!iscarbon(user)) diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 44c9b9dc921..d0e2a2ba6dd 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -11,10 +11,11 @@ attack_verb = list("mopped", "bashed", "bludgeoned", "whacked") var/mopping = 0 var/mopcount = 0 - + var/mopcap = 5 + var/mopspeed = 40 /obj/item/weapon/mop/New() - create_reagents(5) + create_reagents(mopcap) obj/item/weapon/mop/proc/clean(turf/simulated/A) @@ -40,9 +41,9 @@ obj/item/weapon/mop/proc/clean(turf/simulated/A) A = null if(istype(turf)) - user.visible_message("[user] begins to clean \the [turf].") + user.visible_message("[user] begins to clean \the [turf] with [src].") - if(do_after(user, 40)) + if(do_after(user, mopspeed)) clean(turf) user << "You have finished mopping!" @@ -63,4 +64,12 @@ obj/item/weapon/mop/proc/clean(turf/simulated/A) /obj/item/weapon/mop/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J) return - +/obj/item/weapon/mop/advanced + desc = "The most advanced tool in a custodian's arsenal. Just think of all the viscera you will clean up with this!" + name = "advanced mop" + mopcap = 10 + icon_state = "advmop" + force = 6 + throwforce = 8 + throw_range = 4 + mopspeed = 20 \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 776dca795a5..0f09d860cca 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -62,6 +62,11 @@ crit_fail = 1 icon_state = "brokenpack" +/obj/item/weapon/storage/backpack/holding/singularity_act(current_size) + var/dist = max((current_size - 2),1) + explosion(src.loc,(dist),(dist*2),(dist*4)) + return + /obj/item/weapon/storage/backpack/santabag name = "Santa's Gift Bag" diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 6100e836582..7d9c1ec5575 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -34,7 +34,8 @@ w_class = 4 max_w_class = 2 - storage_slots = 21 + max_combined_w_class = 30 + storage_slots = 30 can_hold = list() // any cant_hold = list(/obj/item/weapon/disk/nuclear) @@ -96,13 +97,15 @@ desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant." icon_state = "portaseeder" - verb/dissolve_contents() - set name = "Activate Seed Extraction" - set category = "Object" - set desc = "Activate to convert your plants into plantable seeds." - for(var/obj/item/O in contents) - seedify(O, 1) - close_all() +/obj/item/weapon/storage/bag/plants/portaseeder/verb/dissolve_contents() + set name = "Activate Seed Extraction" + set category = "Object" + set desc = "Activate to convert your plants into plantable seeds." + if(usr.stat || !usr.canmove || usr.restrained()) + return + for(var/obj/item/O in contents) + seedify(O, 1) + close_all() // ----------------------------- diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index bb45281340e..6e7efa8bf50 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -94,7 +94,8 @@ /obj/item/weapon/storage/pill_bottle, /obj/item/stack/medical, /obj/item/device/flashlight/pen, - /obj/item/weapon/extinguisher/mini + /obj/item/weapon/extinguisher/mini, + /obj/item/weapon/reagent_containers/hypospray ) @@ -111,7 +112,7 @@ /obj/item/weapon/grenade/flashbang, /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/restraints/handcuffs, - /obj/item/device/flash, + /obj/item/device/flash/handheld, /obj/item/clothing/glasses, /obj/item/ammo_casing/shotgun, /obj/item/ammo_box, @@ -196,5 +197,6 @@ /obj/item/device/lightreplacer, /obj/item/device/flashlight, /obj/item/weapon/reagent_containers/spray, - /obj/item/weapon/soap + /obj/item/weapon/soap, + /obj/item/weapon/holosign_creator ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 225c52d6804..0fafce0d3a8 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -50,6 +50,11 @@ user.update_inv_r_hand() qdel(src) +/obj/item/weapon/storage/box/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/stack/packageWrap)) + return 0 + ..() + /obj/item/weapon/storage/box/survival @@ -119,6 +124,34 @@ new /obj/item/weapon/reagent_containers/syringe( src ) new /obj/item/weapon/reagent_containers/syringe( src ) +/obj/item/weapon/storage/box/medipens + name = "box of medipens" + desc = "A box full of inaprovaline MediPens." + icon_state = "syringe" + +/obj/item/weapon/storage/box/medipens/New() + ..() + new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen( src ) + +/obj/item/weapon/storage/box/medipens/utility + name = "medipens kit" + desc = "A box with several utility medipens for the economical miner." + icon_state = "syringe" + +/obj/item/weapon/storage/box/syringes/New() + ..() + new /obj/item/weapon/reagent_containers/hypospray/medipen/leporazine( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen/leporazine( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack( src ) + new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack( src ) + /obj/item/weapon/storage/box/beakers name = "box of beakers" icon_state = "beaker" @@ -146,20 +179,6 @@ new /obj/item/weapon/dnainjector/m2h(src) new /obj/item/weapon/dnainjector/m2h(src) -/*/obj/item/weapon/storage/box/blanks //Blanks removed, go home - name = "box of blank shells" - desc = "It has a picture of a gun and several warning symbols on the front." - -/obj/item/weapon/storage/box/blanks/New() - ..() - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src)*/ - /obj/item/weapon/storage/box/flashbangs name = "box of flashbangs (WARNING)" desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use." @@ -182,12 +201,12 @@ /obj/item/weapon/storage/box/flashes/New() ..() - new /obj/item/device/flash(src) - new /obj/item/device/flash(src) - new /obj/item/device/flash(src) - new /obj/item/device/flash(src) - new /obj/item/device/flash(src) - new /obj/item/device/flash(src) + new /obj/item/device/flash/handheld(src) + new /obj/item/device/flash/handheld(src) + new /obj/item/device/flash/handheld(src) + new /obj/item/device/flash/handheld(src) + new /obj/item/device/flash/handheld(src) + new /obj/item/device/flash/handheld(src) /obj/item/weapon/storage/box/teargas name = "box of tear gas grenades (WARNING)" @@ -343,6 +362,19 @@ for(var/i = 1; i <= 5; i++) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src) + +/obj/item/weapon/storage/box/permits + name = "box of construction permits" + desc = "A box for containing construction permits, used to officially declare built rooms as additions to the station." + icon_state = "id" + +/obj/item/weapon/storage/box/permits/New() //There's only a few, so blueprints are still useful beyond setting every room's name to PRIMARY FART STORAGE + ..() + new /obj/item/areaeditor/permit(src) + new /obj/item/areaeditor/permit(src) + new /obj/item/areaeditor/permit(src) + + /obj/item/weapon/storage/box/ids name = "box of spare IDs" desc = "Has so many empty IDs." diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 1e0414ff121..2535cb46f52 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -139,8 +139,8 @@ //CIG PACK// //////////// /obj/item/weapon/storage/fancy/cigarettes - name = "cigarette packet" - desc = "The most popular brand of Space Cigarettes, sponsors of the Space Olympics." + name = "\improper Space Cigarettes packet" + desc = "The most popular brand of cigarettes, sponsors of the Space Olympics." icon = 'icons/obj/cigarettes.dmi' icon_state = "cigpacket" item_state = "cigpacket" @@ -190,6 +190,66 @@ icon_state = "Dpacket" item_state = "Dpacket" +/obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift + name = "\improper Uplift Smooth packet" + desc = "Your favorite brand, now menthol flavored." + icon_state = "upliftpacket" + item_state = "upliftpacket" + +/obj/item/weapon/storage/fancy/cigarettes/cigpack_robust + name = "\improper Robust packet" + desc = "Smoked by the robust." + icon_state = "robustpacket" + item_state = "robustpacket" + +/obj/item/weapon/storage/fancy/cigarettes/cigpack_robustgold + name = "\improper Robust Gold packet" + desc = "Smoked by the truly robust." + icon_state = "robustgpacket" + item_state = "robustgpacket" + +/obj/item/weapon/storage/fancy/cigarettes/cigpack_robustgold/New() + ..() + for(var/i = 1 to storage_slots) + reagents.add_reagent("gold",0.2) + +/obj/item/weapon/storage/fancy/cigarettes/cigpack_carp + name = "\improper Carp Classic packet" + desc = "Since 2313." + icon_state = "carppacket" + item_state = "carppacket" + +/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate + name = "cigarette packet" + desc = "An obscure brand of cigarettes." + icon_state = "syndiepacket" + item_state = "syndiepacket" + +/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate/New() + ..() + for(var/i = 1 to storage_slots) + reagents.add_reagent("doctorsdelight",15) + + +/obj/item/weapon/storage/fancy/cigarettes/cigpack_midori + name = "\improper Midori Tabako packet" + desc = "You can't understand the runes, but the packet smells funny." + icon_state = "midoripacket" + item_state = "midoripacket" + +/obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims + name ="\improper Shady Jim's Super Slims" + desc = "Is your weight slowing you down? Having trouble running away from gravitational singularities? Can't stop stuffing your mouth? Smoke Shady Jim's Super Slims and watch all that fat burn away. Guaranteed results!" + icon_state = "shadyjimpacket" + item_state = "shadyjimpacket" + +/obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims/New() + ..() + for(var/i = 1 to storage_slots) + reagents.add_reagent("lipozine",4) + reagents.add_reagent("ammonia",2) + reagents.add_reagent("plantbgone",1) + reagents.add_reagent("toxin",1.5) /obj/item/weapon/storage/fancy/rollingpapers name = "rolling paper pack" diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 2126b27b6ff..ec4770e255d 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -108,7 +108,7 @@ new /obj/item/weapon/reagent_containers/pill/bicaridine( src ) new /obj/item/weapon/reagent_containers/pill/dermaline( src ) new /obj/item/weapon/reagent_containers/syringe/lethal/choral( src ) - new /obj/item/clothing/glasses/hud/health( src ) + new /obj/item/clothing/glasses/hud/health/night( src ) return @@ -130,7 +130,7 @@ if (ishuman(usr) || ismonkey(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~ var/mob/M = usr - if (!( istype(over_object, /obj/screen) )) + if (!istype(over_object, /obj/screen) || !Adjacent(M)) return ..() if ((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/)) switch(over_object.name) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 3cc811137c4..bdf805d2b02 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -362,6 +362,9 @@ set name = "Switch Gathering Method" set category = "Object" + if(usr.stat || !usr.canmove || usr.restrained()) + return + collection_mode = (collection_mode+1)%3 switch (collection_mode) if(2) @@ -376,7 +379,7 @@ set name = "Empty Contents" set category = "Object" - if((!ishuman(usr) && (loc != usr)) || usr.stat || usr.restrained()) + if((!ishuman(usr) && (loc != usr)) || usr.stat || usr.restrained() ||!usr.canmove) return do_quick_empty() diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 0285eae77a8..f261c0aeb09 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -20,6 +20,8 @@ /obj/item/weapon/tank/jetpack/verb/toggle_rockets() set name = "Toggle Jetpack Stabilization" set category = "Object" + if(usr.stat || !usr.canmove || usr.restrained()) + return src.stabilization_on = !( src.stabilization_on ) usr << "You toggle the stabilization [stabilization_on? "on":"off"]." return @@ -28,6 +30,8 @@ /obj/item/weapon/tank/jetpack/verb/toggle() set name = "Toggle Jetpack" set category = "Object" + if(usr.stat || !usr.canmove || usr.restrained()) + return on = !on if(on) icon_state = "[icon_state]-on" diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index b82ff3b8939..8f02afd70fb 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -29,6 +29,8 @@ /obj/item/weapon/watertank/verb/toggle_mister() set name = "Toggle Mister" set category = "Object" + if(usr.stat || !usr.canmove || usr.restrained()) + return on = !on var/mob/living/carbon/human/user = usr diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 1592fcc692b..fc4b26368f2 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -117,7 +117,7 @@ /obj/item/weapon/wirecutters/attack(mob/living/carbon/C, mob/user) if(istype(C) && C.handcuffed && istype(C.handcuffed, /obj/item/weapon/restraints/handcuffs/cable)) user.visible_message("[user] cuts [C]'s restraints with [src]!") - qdel(C) + qdel(C.handcuffed) C.handcuffed = null C.update_inv_handcuffed(0) return diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index f45a8b5766f..c30b4ac122b 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,15 +1,10 @@ /obj languages = HUMAN //var/datum/module/mod //not used - var/m_amt = 0 // metal - var/g_amt = 0 // glass - var/origin_tech = null //Used by R&D to determine what research bonuses it grants. - var/reliability = 100 //Used by SOME devices to determine how reliable they are. var/crit_fail = 0 var/unacidable = 0 //universal "unacidabliness" var, here so you can use it in any obj. animate_movement = 2 var/throwforce = 0 - var/list/attack_verb = list() //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! var/damtype = "brute" @@ -134,3 +129,18 @@ var/obj/Loc=loc Loc.on_log() +/obj/singularity_act() + ex_act(1.0) + if(src && isnull(gc_destroyed)) + qdel(src) + return 2 + +/obj/singularity_pull(S, current_size) + if(anchored) + if(current_size >= STAGE_FIVE) + anchored = 0 + step_towards(src,S) + else step_towards(src,S) + +/obj/proc/Deconstruct() + qdel(src) \ No newline at end of file diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 54d65faa2b2..b76161c0d8a 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -1,11 +1,11 @@ -obj/structure +/obj/structure icon = 'icons/obj/structures.dmi' -obj/structure/blob_act() +/obj/structure/blob_act() if(prob(50)) qdel(src) -obj/structure/ex_act(severity) +/obj/structure/ex_act(severity) switch(severity) if(1.0) qdel(src) @@ -17,7 +17,7 @@ obj/structure/ex_act(severity) if(3.0) return -obj/structure/Destroy() +/obj/structure/Destroy() if(opacity) UpdateAffectingLights() ..() \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index db1480e7ebd..c07ca884aea 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -14,6 +14,8 @@ var/wall_mounted = 0 //never solid (You can always pass over it) var/health = 100 var/lastbang + var/max_mob_size = 1 //Biggest mob_size accepted by the container + var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet. var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate //then open it in a populated area to crash clients. @@ -25,8 +27,8 @@ /obj/structure/closet/alter_health() return get_turf(src) -/obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0 || wall_mounted)) return 1 +/obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0) + if(height==0 || wall_mounted) return 1 return (!density) /obj/structure/closet/proc/can_open() @@ -82,8 +84,14 @@ if(istype(AM, /mob/living)) var/mob/living/L = AM - if(L.buckled) + if(L.buckled || L.mob_size > max_mob_size) //buckled mobs and mobs too big for the container don't get inside closets. return 0 + if(L.mob_size > 0) + var/mobs_stored = 0 + for(var/mob/living/M in contents) + mobs_stored++ + if(mobs_stored >= mob_storage_capacity) + return 0 if(L.client) L.client.perspective = EYE_PERSPECTIVE L.client.eye = src @@ -197,7 +205,7 @@ if(user.drop_item()) W.Move(loc) - else if(istype(W, /obj/item/weapon/packageWrap)) + else if(istype(W, /obj/item/stack/packageWrap)) return else if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W @@ -312,8 +320,8 @@ return //Door's open, not locked or welded, no point in resisting. //okay, so the closet is either welded or locked... resist!!! - user.changeNext_move(100) - user.last_special = world.time + 100 + user.changeNext_move(CLICK_CD_BREAKOUT) + user.last_special = world.time + CLICK_CD_BREAKOUT user << "You lean on the back of [src] and start pushing the door open. (this will take about [breakout_time] minutes.)" for(var/mob/O in viewers(src)) O << "[src] begins to shake violently!" diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 4452056525f..6af8f879705 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -77,7 +77,7 @@ new /obj/item/weapon/caution(src) new /obj/item/weapon/caution(src) new /obj/item/weapon/caution(src) - new /obj/item/weapon/caution(src) + new /obj/item/weapon/holosign_creator(src) new /obj/item/device/lightreplacer(src) new /obj/item/weapon/storage/bag/trash(src) new /obj/item/clothing/shoes/galoshes(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 649111df7cf..13e18c8e65b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -16,7 +16,8 @@ new /obj/item/weapon/storage/backpack/industrial(src) else new /obj/item/weapon/storage/backpack/satchel_eng(src) - new /obj/item/blueprints(src) + new /obj/item/areaeditor/blueprints(src) + new /obj/item/weapon/storage/box/permits(src) new /obj/item/clothing/under/rank/chief_engineer(src) new /obj/item/clothing/head/hardhat/white(src) new /obj/item/clothing/head/welding(src) @@ -29,7 +30,7 @@ new /obj/item/weapon/airlock_painter(src) new /obj/item/clothing/mask/gas(src) new /obj/item/device/multitool(src) - new /obj/item/device/flash(src) + new /obj/item/device/flash/handheld(src) return /obj/structure/closet/secure_closet/engineering_electrical diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index fa3032ad889..90b2fa14b9a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -68,28 +68,14 @@ new /obj/item/weapon/storage/backpack/medic(src) else new /obj/item/weapon/storage/backpack/satchel_med(src) - new /obj/item/clothing/under/rank/nursesuit (src) - new /obj/item/clothing/head/nursehat (src) - switch(pick("blue", "green", "purple")) - if ("blue") - new /obj/item/clothing/under/rank/medical/blue(src) - if ("green") - new /obj/item/clothing/under/rank/medical/green(src) - if ("purple") - new /obj/item/clothing/under/rank/medical/purple(src) - switch(pick("blue", "green", "purple")) - if ("blue") - new /obj/item/clothing/under/rank/medical/blue(src) - if ("green") - new /obj/item/clothing/under/rank/medical/green(src) - if ("purple") - new /obj/item/clothing/under/rank/medical/purple(src) new /obj/item/clothing/under/rank/medical(src) new /obj/item/clothing/suit/labcoat(src) new /obj/item/clothing/shoes/sneakers/white(src) -// new /obj/item/weapon/cartridge/medical(src) new /obj/item/device/radio/headset/headset_med(src) + new /obj/item/clothing/gloves/latex(src) + new /obj/item/weapon/defibrillator/loaded(src) new /obj/item/weapon/storage/belt/medical(src) + new /obj/item/clothing/glasses/hud/health(src) return @@ -113,14 +99,15 @@ new /obj/item/weapon/storage/backpack/satchel_med(src) new /obj/item/clothing/suit/bio_suit/cmo(src) new /obj/item/clothing/head/bio_hood/cmo(src) - new /obj/item/clothing/under/rank/chief_medical_officer(src) new /obj/item/clothing/suit/labcoat/cmo(src) - new /obj/item/weapon/cartridge/cmo(src) - new /obj/item/clothing/gloves/latex(src) + new /obj/item/clothing/under/rank/chief_medical_officer(src) new /obj/item/clothing/shoes/sneakers/brown (src) + new /obj/item/weapon/cartridge/cmo(src) new /obj/item/device/radio/headset/heads/cmo(src) + new /obj/item/clothing/gloves/latex(src) + new /obj/item/weapon/defibrillator/loaded(src) new /obj/item/weapon/storage/belt/medical(src) - new /obj/item/device/flash(src) + new /obj/item/device/flash/handheld(src) new /obj/item/weapon/reagent_containers/hypospray/CMO(src) return @@ -135,9 +122,9 @@ ..() sleep(2) new /obj/item/device/assembly/signaler(src) - new /obj/item/device/radio/electropack(src) - new /obj/item/device/radio/electropack(src) - new /obj/item/device/radio/electropack(src) + new /obj/item/device/electropack(src) + new /obj/item/device/electropack(src) + new /obj/item/device/electropack(src) return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 9b0cef34c99..c477ef67812 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -37,8 +37,10 @@ sleep(2) new /obj/item/clothing/suit/bio_suit/scientist(src) new /obj/item/clothing/head/bio_hood/scientist(src) - new /obj/item/clothing/under/rank/research_director(src) new /obj/item/clothing/suit/labcoat(src) + new /obj/item/clothing/under/rank/research_director(src) + new /obj/item/clothing/under/rank/research_director/alt(src) + new /obj/item/clothing/under/rank/research_director/turtleneck(src) new /obj/item/weapon/cartridge/rd(src) new /obj/item/clothing/shoes/sneakers/white(src) new /obj/item/clothing/gloves/latex(src) @@ -46,7 +48,6 @@ new /obj/item/weapon/tank/air(src) new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/suit/armor/reactive(src) - new /obj/item/device/flash(src) + new /obj/item/device/flash/handheld(src) new /obj/item/device/laser_pointer(src) - new /obj/item/clothing/under/rank/research_director/alt(src) return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 1b522da3be6..4903468b036 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -49,7 +49,7 @@ new /obj/item/weapon/storage/box/ids(src) new /obj/item/clothing/suit/armor/vest(src) new /obj/item/weapon/gun/energy/gun(src) - new /obj/item/device/flash(src) + new /obj/item/device/flash/handheld(src) new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/weapon/mining_voucher(src) return @@ -70,8 +70,10 @@ ..() sleep(2) new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/clothing/suit/armor/hos/jensen(src) - new /obj/item/clothing/head/HoS/dermal(src) + new /obj/item/clothing/under/hosformalfem(src) + new /obj/item/clothing/under/hosformalmale(src) + new /obj/item/clothing/suit/armor/hos/trenchcoat(src) + new /obj/item/clothing/head/HoS/drill(src) new /obj/item/weapon/cartridge/hos(src) new /obj/item/device/radio/headset/heads/hos/alt(src) new /obj/item/clothing/glasses/hud/security/eyepatch(src) @@ -79,7 +81,7 @@ new /obj/item/weapon/shield/riot/tele(src) new /obj/item/clothing/mask/gas/sechailer/hos(src) new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/device/flash(src) + new /obj/item/device/flash/handheld(src) new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/weapon/gun/energy/gun(src) new /obj/item/weapon/storage/belt/security(src) @@ -134,7 +136,7 @@ new /obj/item/clothing/head/helmet(src) new /obj/item/device/radio/headset/headset_sec/alt(src) new /obj/item/clothing/mask/gas/sechailer(src) - new /obj/item/device/flash(src) + new /obj/item/device/flash/handheld(src) new /obj/item/weapon/reagent_containers/spray/pepper(src) new /obj/item/weapon/grenade/flashbang(src) new /obj/item/weapon/gun/energy/taser(src) @@ -247,7 +249,7 @@ var/id = null /obj/structure/closet/secure_closet/brig/New() - new /obj/item/clothing/under/color/orange( src ) + new /obj/item/clothing/under/rank/prisoner( src ) new /obj/item/clothing/shoes/sneakers/orange( src ) return diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index b0aa0ed0f45..ddc0b48b116 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -38,17 +38,6 @@ new /obj/item/clothing/head/beret/sec(src) return -/obj/structure/closet/wardrobe/hos - name = "\proper head of security's wardrobe" - icon_state = "red" - icon_closed = "red" - -/obj/structure/closet/wardrobe/hos/New() - new /obj/item/clothing/under/hosformalfem(src) - new /obj/item/clothing/under/hosformalmale(src) - new /obj/item/clothing/under/rank/head_of_security/jensen(src) - return - /obj/structure/closet/wardrobe/pink name = "pink wardrobe" icon_state = "pink" @@ -72,6 +61,8 @@ new /obj/item/clothing/under/color/black(src) new /obj/item/clothing/under/color/black(src) new /obj/item/clothing/under/color/black(src) + if(prob(25)) + new /obj/item/clothing/suit/jacket/leather(src) new /obj/item/clothing/shoes/sneakers/black(src) new /obj/item/clothing/shoes/sneakers/black(src) new /obj/item/clothing/shoes/sneakers/black(src) @@ -126,9 +117,9 @@ icon_closed = "orange" /obj/structure/closet/wardrobe/orange/New() - new /obj/item/clothing/under/color/orange(src) - new /obj/item/clothing/under/color/orange(src) - new /obj/item/clothing/under/color/orange(src) + new /obj/item/clothing/under/rank/prisoner(src) + new /obj/item/clothing/under/rank/prisoner(src) + new /obj/item/clothing/under/rank/prisoner(src) new /obj/item/clothing/shoes/sneakers/orange(src) new /obj/item/clothing/shoes/sneakers/orange(src) new /obj/item/clothing/shoes/sneakers/orange(src) @@ -198,6 +189,22 @@ new /obj/item/clothing/shoes/sneakers/white(src) return +/obj/structure/closet/wardrobe/white/medical + name = "medical doctor's wardrobe" + +/obj/structure/closet/wardrobe/white/medical/New() + new /obj/item/clothing/under/rank/nursesuit (src) + new /obj/item/clothing/head/nursehat (src) + new /obj/item/clothing/suit/labcoat/emt(src) + new /obj/item/clothing/suit/labcoat/emt(src) + new /obj/item/clothing/suit/labcoat/emt(src) + new /obj/item/clothing/under/rank/medical/blue(src) + new /obj/item/clothing/under/rank/medical/green(src) + new /obj/item/clothing/under/rank/medical/purple(src) + new /obj/item/clothing/shoes/sneakers/black(src) + new /obj/item/clothing/shoes/sneakers/black(src) + new /obj/item/clothing/shoes/sneakers/black(src) + return /obj/structure/closet/wardrobe/pjs name = "pajama wardrobe" @@ -246,8 +253,8 @@ new /obj/item/clothing/suit/labcoat(src) new /obj/item/clothing/shoes/sneakers/black(src) new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/gloves/black(src) - new /obj/item/clothing/gloves/black(src) + new /obj/item/clothing/gloves/fingerless(src) + new /obj/item/clothing/gloves/fingerless(src) new /obj/item/clothing/head/soft/black(src) new /obj/item/clothing/head/soft/black(src) return @@ -328,6 +335,10 @@ icon_closed = "mixed" /obj/structure/closet/wardrobe/mixed/New() + if(prob(25)) + new /obj/item/clothing/suit/jacket(src) + if(prob(25)) + new /obj/item/clothing/suit/jacket(src) new /obj/item/clothing/under/color/white(src) new /obj/item/clothing/under/color/blue(src) new /obj/item/clothing/under/color/yellow(src) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index bdf97295bab..53488cc89cb 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -273,7 +273,7 @@ if(opened) close() else - if(rigged && locate(/obj/item/device/radio/electropack) in src) + if(rigged && locate(/obj/item/device/electropack) in src) if(isliving(user)) var/mob/living/L = user if(L.electrocute_act(17, src)) @@ -333,7 +333,7 @@ return if(W) W.loc = src.loc - else if(istype(W, /obj/item/weapon/packageWrap)) + else if(istype(W, /obj/item/stack/packageWrap)) return else if(istype(W, /obj/item/stack/cable_coil)) if(rigged) @@ -346,7 +346,7 @@ else user << "You need 5 lengths of cable to rig [src]." return - else if(istype(W, /obj/item/device/radio/electropack)) + else if(istype(W, /obj/item/device/electropack)) if(rigged) user << "You attach [W] to [src]." user.drop_item() diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 63817318c05..0c4558d1bac 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -85,16 +85,14 @@ user.changeNext_move(CLICK_CD_MELEE) if (src.destroyed && src.occupied) new /obj/item/weapon/gun/energy/laser/captain( src.loc ) - user << "\b You deactivate the hover field built into the case." + user << "You deactivate the hover field built into the case." src.occupied = 0 src.add_fingerprint(user) update_icon() return else - usr << text("You kick the display case.") - for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) - O << text("[] kicks the display case.", usr) + user.visible_message("[user] kicks the display case.", \ + "You kick the display case.") src.health -= 2 healthcheck() return diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 6e309cd5c3a..08010e7d521 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -267,7 +267,7 @@ obj/structure/door_assembly/New() anchored = 1 density = 1 state = 1 - mineral = "clown" + mineral = "bananium" /obj/structure/door_assembly/door_assembly_sandstone name = "sandstone airlock assembly" diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 3029dae5487..622314f4456 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -12,11 +12,20 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user - var/new_undies = input(user, "Select your underwear", "Changing") as null|anything in underwear_all - if(!Adjacent(user))//no tele-grooming + var/choice = input(user, "Underwear or Undershirt?", "Changing") as null|anything in list("Underwear","Undershirt") + + if(!Adjacent(user)) return - if(new_undies) - H.underwear = new_undies + switch(choice) + if("Underwear") + var/new_undies = input(user, "Select your underwear", "Changing") as null|anything in underwear_list + if(new_undies) + H.underwear = new_undies + + if("Undershirt") + var/new_undershirt = input(user, "Select your undershirt", "Changing") as null|anything in undershirt_list + if(new_undershirt) + H.undershirt = new_undershirt add_fingerprint(H) H.update_body() \ No newline at end of file diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index bb0dc4486f6..0d0b1201ce9 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -7,6 +7,7 @@ anchored = 1 icon = 'icons/turf/walls.dmi' var/mineral = "metal" + var/walltype = "metal" var/opening = 0 density = 1 opacity = 1 @@ -31,20 +32,20 @@ /obj/structure/falsewall/relativewall() if(!density) - icon_state = "[mineral]fwall_open" + icon_state = "[walltype]fwall_open" return var/junction = 0 //will be used to determine from which side the wall is connected to other walls for(var/turf/simulated/wall/W in orange(src,1)) if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve + if(walltype == W.walltype)//Only 'like' walls connect -Sieve junction |= get_dir(src,W) for(var/obj/structure/falsewall/W in orange(src,1)) if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral) + if(walltype == W.walltype) junction |= get_dir(src,W) - icon_state = "[mineral][junction]" + icon_state = "[walltype][junction]" return /obj/structure/falsewall/attack_hand(mob/user) @@ -72,24 +73,24 @@ /obj/structure/falsewall/proc/do_the_flick() if(density) - flick("[mineral]fwall_opening", src) + flick("[walltype]fwall_opening", src) else - flick("[mineral]fwall_closing", src) + flick("[walltype]fwall_closing", src) /obj/structure/falsewall/update_icon(relativewall = 1)//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open if(density) - icon_state = "[mineral]0" + icon_state = "[walltype]0" if(relativewall) relativewall() else - icon_state = "[mineral]fwall_open" + icon_state = "[walltype]fwall_open" /obj/structure/falsewall/proc/ChangeToWall(delete = 1) var/turf/T = get_turf(src) - if(!mineral || mineral == "metal") + if(!walltype || walltype == "metal") T.ChangeTurf(/turf/simulated/wall) else - T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[mineral]")) + T.ChangeTurf(text2path("/turf/simulated/wall/mineral/[walltype]")) if(delete) qdel(src) return T @@ -176,11 +177,11 @@ for(var/turf/simulated/wall/W in orange(src,1)) if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral)//Only 'like' walls connect -Sieve + if(src.walltype == W.walltype)//Only 'like' walls connect -Sieve junction |= get_dir(src,W) for(var/obj/structure/falsewall/W in orange(src,1)) if(abs(src.x-W.x)-abs(src.y-W.y)) //doesn't count diagonal walls - if(src.mineral == W.mineral) + if(src.walltype == W.walltype) junction |= get_dir(src,W) icon_state = "rwall[junction]" return @@ -194,6 +195,7 @@ desc = "A wall with uranium plating. This is probably a bad idea." icon_state = "" mineral = "uranium" + walltype = "uranium" var/active = null var/last_event = 0 @@ -226,24 +228,28 @@ desc = "A wall with gold plating. Swag!" icon_state = "" mineral = "gold" + walltype = "gold" /obj/structure/falsewall/silver name = "silver wall" desc = "A wall with silver plating. Shiny." icon_state = "" mineral = "silver" + walltype = "silver" /obj/structure/falsewall/diamond name = "diamond wall" desc = "A wall with diamond plating. You monster." icon_state = "" mineral = "diamond" + walltype = "diamond" /obj/structure/falsewall/plasma name = "plasma wall" desc = "A wall with plasma plating. This is definately a bad idea." icon_state = "" mineral = "plasma" + walltype = "plasma" /obj/structure/falsewall/plasma/attackby(obj/item/weapon/W, mob/user) if(is_hot(W) > 300) @@ -268,17 +274,20 @@ name = "bananium wall" desc = "A wall with bananium plating. Honk!" icon_state = "" - mineral = "clown" + mineral = "bananium" + walltype = "clown" /obj/structure/falsewall/sandstone name = "sandstone wall" desc = "A wall with sandstone plating." icon_state = "" mineral = "sandstone" + walltype = "sandstone" //------------wtf?------------end /obj/structure/falsewall/wood name = "wooden wall" desc = "A wall with wooden plating." icon_state = "" - mineral = "wood" \ No newline at end of file + mineral = "wood" + walltype = "wood" \ No newline at end of file diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index f291ef114f2..e7cd91aaa60 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -198,7 +198,7 @@ ..() /obj/structure/flora/kirbyplants - name = "Potted plant" + name = "potted plant" icon = 'icons/obj/flora/plants.dmi' icon_state = "plant-01" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 514572d4e9b..cf2a205f65a 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -1,9 +1,11 @@ /obj/structure/girder + name = "girder" icon_state = "girder" anchored = 1 density = 1 layer = 2 var/state = 0 + var/girderpasschance = 20 // percentage chance that a projectile passes through the girder. /obj/structure/girder/attackby(obj/item/W as obj, mob/user as mob) add_fingerprint(user) @@ -17,6 +19,9 @@ new /obj/item/stack/sheet/metal(get_turf(src)) qdel(src) else if(!anchored) + if (!istype(src.loc, /turf/simulated/floor)) + usr << "A floor must be present to secure the girder!" + return playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) user << "Now securing the girder..." if(do_after(user, 40)) @@ -68,6 +73,9 @@ qdel(src) else if(istype(W, /obj/item/stack/sheet)) + if (!istype(src.loc, /turf/simulated/floor)) + usr << "The girder is too unstable to build anything!" + return var/obj/item/stack/sheet/S = W switch(S.type) @@ -174,6 +182,17 @@ ..() +/obj/structure/girder/CanPass(atom/movable/mover, turf/target, height=0) + if(height==0) + return 1 + if(istype(mover) && mover.checkpass(PASSGRILLE)) + return prob(girderpasschance) + else + if(istype(mover, /obj/item/projectile)) + return prob(girderpasschance) + else + return 0 + /obj/structure/girder/blob_act() if(prob(40)) qdel(src) @@ -200,12 +219,16 @@ return /obj/structure/girder/displaced + name = "displaced girder" icon_state = "displaced" anchored = 0 + girderpasschance = 25 /obj/structure/girder/reinforced + name = "reinforced girder" icon_state = "reinforced" state = 2 + girderpasschance = 0 /obj/structure/cultgirder icon= 'icons/obj/cult.dmi' diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 340933e8184..69b2aaa5489 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -80,8 +80,8 @@ return -/obj/structure/grille/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group || (height==0)) return 1 +/obj/structure/grille/CanPass(atom/movable/mover, turf/target, height=0) + if(height==0) return 1 if(istype(mover) && mover.checkpass(PASSGRILLE)) return 1 else @@ -227,3 +227,16 @@ health -= 1 healthcheck() ..() + +/obj/structure/grille/hitby(AM as mob|obj) + ..() + visible_message("[src] was hit by [AM].") + var/tforce = 0 + if(ismob(AM)) + tforce = 5 + else if(isobj(AM)) + var/obj/item/I = AM + tforce = I.throwforce - 5 + playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) + health = max(0, health - tforce) + healthcheck() \ No newline at end of file diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 0e6416867dd..22e008029e7 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -77,6 +77,12 @@ user << "[src] can't hold any more signs." else if(mybag) mybag.attackby(I, user) + else if(istype(I, /obj/item/weapon/crowbar)) + user.visible_message("[user] begins to empty the contents of [src].") + if(do_after(user, 30)) + usr << "You empty the contents of [src]'s bucket onto the floor." + reagents.reaction(src.loc) + src.reagents.clear_reagents() /obj/structure/janitorialcart/attack_hand(mob/user) user.set_machine(src) @@ -156,7 +162,7 @@ name = "janicart" icon = 'icons/obj/vehicles.dmi' icon_state = "pussywagon" - anchored = 1 + anchored = 0 density = 1 flags = OPENCONTAINER //copypaste sorry @@ -206,6 +212,8 @@ if(user.stat || user.stunned || user.weakened || user.paralysis) unbuckle() if(istype(user.l_hand, /obj/item/key) || istype(user.r_hand, /obj/item/key)) + if(!Process_Spacemove(direction)) + return step(src, direction) update_mob() handle_rotation() @@ -213,13 +221,6 @@ user << "You'll need the keys in one of your hands to drive this [callme]." -/obj/structure/stool/bed/chair/janicart/Move() - ..() - if(buckled_mob) - if(buckled_mob.buckled == src) - buckled_mob.loc = loc - - /obj/structure/stool/bed/chair/janicart/buckle_mob(mob/M, mob/user) if(M != user || !ismob(M) || get_dist(src, user) > 1 || user.restrained() || user.lying || user.stat || M.buckled || istype(user, /mob/living/silicon)) return diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index 69a6626d69a..b95ec7128c4 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -75,10 +75,8 @@ if (src.destroyed) return else - usr << text("You kick the lab cage.") - for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) - O << text("[] kicks the lab cage.", usr) + user.visible_message("[user] kicks the lab cage.", \ + "You kick the lab cage.") src.health -= 2 healthcheck() return diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index e163f334470..0ce35f52907 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -55,8 +55,7 @@ /obj/structure/mineral_door/attack_hand(mob/user) return TryToSwitchState(user) -/obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group) return 0 +/obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target, height=0) if(istype(mover, /obj/effect/beam)) return !opacity return !density diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index ba98fa3d0de..f5a22006542 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -25,7 +25,7 @@ CheckHardness() /obj/structure/statue/attack_hand(mob/user) - visible_message("[user] rubs some dust off from the [name]'s surface.") + visible_message("[user] rubs some dust off from the [name]'s surface.") /obj/structure/statue/CanAtmosPass() return !density @@ -236,7 +236,7 @@ /obj/structure/statue/bananium hardness = 3 - mineralType = "clown" + mineralType = "bananium" desc = "A bananium statue with a small engraving:'HOOOOOOONK'." /obj/structure/statue/bananium/clown diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index 2437b38378b..29126839d37 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -12,8 +12,6 @@ "[user.name] pulls [buckled_mob.name] free from the sticky nest!",\ "[user.name] pulls you free from the gelatinous resin.",\ "You hear squelching...") - buckled_mob.pixel_y = 0 - buckled_mob.pixel_x = 0 unbuckle() /obj/structure/stool/bed/nest/unbuckle_myself(mob/user as mob) @@ -23,8 +21,6 @@ "You hear squelching...") spawn(600) if(user && buckled_mob && user.buckled == src) - buckled_mob.pixel_y = 0 - buckled_mob.pixel_x = 0 unbuckle() /obj/structure/stool/bed/nest/buckle_mob(mob/M as mob, mob/user as mob) @@ -49,14 +45,18 @@ M.loc = src.loc M.dir = src.dir M.update_canmove() - M.pixel_y = 1 - M.pixel_x = 2 + M.pixel_y += 1 + M.pixel_x += 2 + M.anchored = anchored src.buckled_mob = M src.add_fingerprint(user) src.overlays += image('icons/mob/alien.dmi', "nestoverlay", layer=6) return /obj/structure/stool/bed/nest/unbuckle() + if(buckled_mob) + buckled_mob.pixel_y -= 1 + buckled_mob.pixel_x -= 2 overlays.Cut() ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 3b3e131ca64..4d23b413b99 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -22,6 +22,28 @@ unbuckle() ..() +/obj/structure/stool/bed/Move(atom/newloc, direct) //Some bed children move + . = ..() + if(buckled_mob) + buckled_mob.buckled = null + if(!buckled_mob.Move(loc, direct)) + loc = buckled_mob.loc //we gotta go back + last_move = buckled_mob.last_move + inertia_dir = last_move + buckled_mob.inertia_dir = last_move + . = 0 + buckled_mob.buckled = src + +/obj/structure/stool/bed/Process_Spacemove(var/movement_dir = 0) + if(buckled_mob) + return buckled_mob.Process_Spacemove(movement_dir) + return ..() + +/obj/structure/stool/bed/CanPass(atom/movable/mover, turf/target, height=1.5) + if(mover == buckled_mob) + return 1 + return ..() + /obj/structure/stool/bed/attack_paw(mob/user as mob) return src.attack_hand(user) @@ -49,9 +71,10 @@ buckled_mob.anchored = initial(buckled_mob.anchored) buckled_mob.update_canmove() - var/M = buckled_mob + var/mob/M = buckled_mob buckled_mob = null + M.newtonian_move(inertia_dir) afterbuckle(M) return @@ -106,6 +129,7 @@ "You are buckled in to [src] by [user.name].",\ "You hear metal clanking") M.buckled = src + M.anchored = anchored M.loc = src.loc M.dir = src.dir M.update_canmove() @@ -135,8 +159,28 @@ icon_state = "down" M.pixel_y -= buckled_pixel_y_offset -/obj/structure/stool/bed/roller/Move() + +/obj/item/roller + name = "roller bed" + desc = "A collapsed roller bed that can be carried around." + icon = 'icons/obj/rollerbed.dmi' + icon_state = "folded" + w_class = 4.0 // Can't be put in backpacks. + + +/obj/item/roller/attack_self(mob/user) + var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc) + R.add_fingerprint(user) + qdel(src) + +/obj/structure/stool/bed/roller/MouseDrop(over_object, src_location, over_location) ..() - if(buckled_mob) - if(buckled_mob.buckled == src) - buckled_mob.loc = src.loc + if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src))) + if(!ishuman(usr)) + return + if(buckled_mob) + return 0 + visible_message("[usr] collapses \the [src.name].") + new/obj/item/roller(get_turf(src)) + qdel(src) + return \ No newline at end of file diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 9053517eb9a..ad4f2705f56 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -4,20 +4,19 @@ icon_state = "chair" /obj/structure/stool/bed/chair/New() - if(anchored) - src.verbs -= /atom/movable/verb/pull ..() spawn(3) //sorry. i don't think there's a better way to do this. handle_layer() return +/obj/structure/stool/bed/chair/Move(atom/newloc, direct) + ..() + handle_rotation() + /obj/structure/stool/bed/chair/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() if(istype(W, /obj/item/assembly/shock_kit)) var/obj/item/assembly/shock_kit/SK = W - if(!SK.status) - user << "[SK] is not ready to be attached!" - return user.drop_item() var/obj/structure/stool/bed/chair/e_chair/E = new /obj/structure/stool/bed/chair/e_chair(src.loc) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) @@ -33,10 +32,10 @@ rotate() return -/obj/structure/stool/bed/chair/proc/handle_rotation(direction) //making this into a seperate proc so office chairs can call it on Move() +/obj/structure/stool/bed/chair/proc/handle_rotation(direction) if(buckled_mob) buckled_mob.buckled = null //Temporary, so Move() succeeds. - if(!buckled_mob.Move(direction)) + if(!direction || !buckled_mob.Move(get_step(src, direction), direction)) buckled_mob.buckled = src dir = buckled_mob.dir return 0 @@ -65,7 +64,7 @@ else if(!usr || !isturf(usr.loc)) return - if(usr.stat || usr.restrained()) + if(usr.stat || usr.restrained() || !usr.canmove) return spin() @@ -130,11 +129,6 @@ /obj/structure/stool/bed/chair/office anchored = 0 -/obj/structure/stool/bed/chair/office/Move(direction) - if(handle_rotation(direction)) - ..() - handle_layer() - /obj/structure/stool/bed/chair/office/light icon_state = "officechair_white" diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 824a2b99e54..82b9f69e9bd 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -11,125 +11,6 @@ * Tables */ -/datum/table_recipe - var/name = "" - var/reqs[] = list() - var/result_path - var/tools[] = list() - var/time = 0 - var/parts[] = list() - var/chem_catalists[] = list() - -/datum/table_recipe/IED - name = "IED" - result_path = /obj/item/weapon/grenade/iedcasing - reqs = list(/obj/item/weapon/restraints/handcuffs/cable = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/device/assembly/igniter = 1, - /obj/item/weapon/reagent_containers/food/drinks/soda_cans = 1, - /datum/reagent/fuel = 10) - time = 80 - -/datum/table_recipe/stunprod - name = "Stunprod" - result_path = /obj/item/weapon/melee/baton/cattleprod - reqs = list(/obj/item/weapon/restraints/handcuffs/cable = 1, - /obj/item/stack/rods = 1, - /obj/item/weapon/wirecutters = 1, - /obj/item/weapon/stock_parts/cell = 1) - time = 80 - parts = list(/obj/item/weapon/stock_parts/cell = 1) - -/datum/table_recipe/ed209 - name = "ED209" - result_path = /obj/machinery/bot/ed209 - reqs = list(/obj/item/robot_parts/robot_suit = 1, - /obj/item/clothing/head/helmet = 1, - /obj/item/clothing/suit/armor/vest = 1, - /obj/item/robot_parts/l_leg = 1, - /obj/item/robot_parts/r_leg = 1, - /obj/item/stack/sheet/metal = 5, - /obj/item/stack/cable_coil = 5, - /obj/item/weapon/gun/energy/taser = 1, - /obj/item/weapon/stock_parts/cell = 1, - /obj/item/device/assembly/prox_sensor = 1, - /obj/item/robot_parts/r_arm = 1) - tools = list(/obj/item/weapon/weldingtool, /obj/item/weapon/screwdriver) - time = 120 - -/datum/table_recipe/secbot - name = "Secbot" - result_path = /obj/machinery/bot/secbot - reqs = list(/obj/item/device/assembly/signaler = 1, - /obj/item/clothing/head/helmet = 1, - /obj/item/weapon/melee/baton = 1, - /obj/item/device/assembly/prox_sensor = 1, - /obj/item/robot_parts/r_arm = 1) - tools = list(/obj/item/weapon/weldingtool) - time = 120 - -/datum/table_recipe/cleanbot - name = "Cleanbot" - result_path = /obj/machinery/bot/cleanbot - reqs = list(/obj/item/weapon/reagent_containers/glass/bucket = 1, - /obj/item/device/assembly/prox_sensor = 1, - /obj/item/robot_parts/r_arm = 1) - time = 80 - -/datum/table_recipe/floorbot - name = "Floorbot" - result_path = /obj/machinery/bot/floorbot - reqs = list(/obj/item/weapon/storage/toolbox/mechanical = 1, - /obj/item/stack/tile/plasteel = 1, - /obj/item/device/assembly/prox_sensor = 1, - /obj/item/robot_parts/r_arm = 1) - time = 80 - -/datum/table_recipe/medbot - name = "Medbot" - result_path = /obj/machinery/bot/medbot - reqs = list(/obj/item/device/healthanalyzer = 1, - /obj/item/weapon/storage/firstaid = 1, - /obj/item/device/assembly/prox_sensor = 1, - /obj/item/robot_parts/r_arm = 1) - time = 80 - -/datum/table_recipe/flamethrower - name = "Flamethrower" - result_path = /obj/item/weapon/flamethrower - reqs = list(/obj/item/weapon/weldingtool = 1, - /obj/item/device/assembly/igniter = 1, - /obj/item/stack/rods = 2) - tools = list(/obj/item/weapon/screwdriver) - time = 20 - -/datum/table_recipe/meteorshot - name = "Meteorshot Shell" - result_path = /obj/item/ammo_casing/shotgun/meteorshot - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/weapon/rcd_ammo = 1, - /obj/item/weapon/stock_parts/manipulator = 2) - tools = list(/obj/item/weapon/screwdriver) - time = 5 - -/datum/table_recipe/pulseslug - name = "Pulse Slug Shell" - result_path = /obj/item/ammo_casing/shotgun/pulseslug - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/weapon/stock_parts/capacitor/adv = 2, - /obj/item/weapon/stock_parts/micro_laser/ultra = 1) - tools = list(/obj/item/weapon/screwdriver) - time = 5 - -/datum/table_recipe/dragonsbreath - name = "Dragonsbreath Shell" - result_path = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath - reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /datum/reagent/phosphorus = 5,) - tools = list(/obj/item/weapon/screwdriver) - time = 5 - - /obj/structure/table name = "table" desc = "A square piece of metal standing on four metal legs. It can not move." @@ -140,7 +21,6 @@ layer = 2.8 throwpass = 1 //You can throw objects over this, despite it's density.") var/parts = /obj/item/weapon/table_parts - var/list/table_contents = list() var/busy = 0 /obj/structure/table/New() @@ -161,168 +41,6 @@ T.update_icon() ..() -/obj/structure/table/MouseDrop(atom/over) - if(usr.stat || usr.lying || !Adjacent(usr) || (over != usr)) - return - interact(usr) - -/obj/structure/table/proc/check_contents(datum/table_recipe/R) - check_table() - main_loop: - for(var/A in R.reqs) - for(var/B in table_contents) - if(ispath(B, A)) - if(table_contents[B] >= R.reqs[A]) - continue main_loop - return 0 - for(var/A in R.chem_catalists) - if(table_contents[A] < R.chem_catalists[A]) - return 0 - return 1 - -/obj/structure/table/proc/check_table() - table_contents = list() - for(var/obj/item/I in loc) - if(istype(I, /obj/item/stack)) - var/obj/item/stack/S = I - table_contents[I.type] += S.amount - else - if(istype(I, /obj/item/weapon/reagent_containers)) - for(var/datum/reagent/R in I.reagents.reagent_list) - table_contents[R.type] += R.volume - - table_contents[I.type] += 1 - -/obj/structure/table/proc/check_tools(mob/user, datum/table_recipe/R) - if(!R.tools.len) - return 1 - var/list/possible_tools = list() - for(var/obj/item/I in user.contents) - if(istype(I, /obj/item/weapon/storage)) - for(var/obj/item/SI in I.contents) - possible_tools += SI.type - else - possible_tools += I.type - possible_tools += table_contents - var/i = R.tools.len - var/I - for(var/A in R.tools) - I = possible_tools.Find(A) - if(I) - possible_tools.Cut(I, I+1) - i-- - else - break - return !i - -/obj/structure/table/proc/construct_item(mob/user, datum/table_recipe/R) - check_table() - if(check_contents(R) && check_tools(user, R)) - if(do_after(user, R.time)) - if(!check_contents(R) || !check_tools(user, R)) - return 0 - var/list/parts = del_reqs(R) - var/atom/movable/I = new R.result_path - for(var/A in parts) - if(istype(A, /obj/item)) - var/atom/movable/B = A - B.loc = I - else - if(!I.reagents) - I.reagents = new /datum/reagents() - I.reagents.reagent_list.Add(A) - I.CheckParts() - I.loc = loc - return 1 - return 0 - -/obj/structure/table/proc/del_reqs(datum/table_recipe/R) - var/list/Deletion = list() - var/amt - for(var/A in R.reqs) - amt = R.reqs[A] - if(ispath(A, /obj/item/stack)) - var/obj/item/stack/S - stack_loop: - for(var/B in table_contents) - if(ispath(B, A)) - while(amt > 0) - S = locate(B) in loc - if(S.amount >= amt) - S.use(amt) - break stack_loop - else - amt -= S.amount - qdel(S) - else if(ispath(A, /obj/item)) - var/obj/item/I - item_loop: - for(var/B in table_contents) - if(ispath(B, A)) - while(amt > 0) - I = locate(B) in loc - Deletion.Add(I) - I.loc = null //remove it from the table loc so that we don't locate the same item every time (will be relocated inside the crafted item in construct_item()) - amt-- - break item_loop - else - var/datum/reagent/RG = new A - reagent_loop: - for(var/B in table_contents) - if(ispath(B, /obj/item/weapon/reagent_containers)) - var/obj/item/RC = locate(B) in loc - if(RC.reagents.has_reagent(RG.id, amt)) - RC.reagents.remove_reagent(RG.id, amt) - RG.volume = amt - Deletion.Add(RG) - break reagent_loop - else if(RC.reagents.has_reagent(RG.id)) - Deletion.Add(RG) - RG.volume += RC.reagents.get_reagent_amount(RG.id) - amt -= RC.reagents.get_reagent_amount(RG.id) - RC.reagents.del_reagent(RG.id) - - for(var/A in R.parts) - for(var/B in Deletion) - if(!istype(B, A)) - Deletion.Remove(B) - qdel(B) - - return Deletion - -/obj/structure/table/interact(mob/user) - check_table() - if(!table_contents.len) - return - var/dat = "
| "
@@ -174,6 +177,7 @@ datum/preferences
dat += "Blood Type: [blood_type] " dat += "Skin Tone: [skin_tone] " dat += "Underwear: [underwear] " + dat += "Undershirt: [undershirt] " dat += "Backpack: [backbaglist[backbag]] " @@ -268,7 +272,7 @@ datum/preferences dat += "" //user << browse(dat, "window=preferences;size=560x560") - var/datum/browser/popup = new(user, "preferences", " Character Setup ", 580, 600)
+ var/datum/browser/popup = new(user, "preferences", "Character Setup ", 580, 620)
popup.set_content(dat)
popup.open(0)
@@ -531,7 +535,10 @@ datum/preferences
ResetJobs()
SetChoices(user)
if("random")
- userandomjob = !userandomjob
+ if(jobban_isbanned(user, "Assistant"))
+ userandomjob = 1
+ else
+ userandomjob = !userandomjob
SetChoices(user)
if("setJobLevel")
UpdateJobPreference(user, href_list["text"], text2num(href_list["level"]))
@@ -556,6 +563,8 @@ datum/preferences
facial_hair_style = random_facial_hair_style(gender)
if("underwear")
underwear = random_underwear(gender)
+ if("undershirt")
+ undershirt = random_undershirt(gender)
if("eyes")
eye_color = random_eye_color()
if("s_tone")
@@ -651,6 +660,15 @@ datum/preferences
if(new_underwear)
underwear = new_underwear
+ if("undershirt")
+ var/new_undershirt
+ if(gender == MALE)
+ new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_m
+ else
+ new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_f
+ if(new_undershirt)
+ undershirt = new_undershirt
+
if("eyes")
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference") as color|null
if(new_eyes)
@@ -705,6 +723,7 @@ datum/preferences
else
gender = MALE
underwear = random_underwear(gender)
+ undershirt = random_undershirt(gender)
facial_hair_style = random_facial_hair_style(gender)
hair_style = random_hair_style(gender)
@@ -727,6 +746,9 @@ datum/preferences
if("name")
be_random_name = !be_random_name
+ if("all")
+ be_random_body = !be_random_body
+
if("hear_midis")
toggles ^= SOUND_MIDI
@@ -774,6 +796,9 @@ datum/preferences
if(be_random_name)
real_name = random_name(gender)
+ if(be_random_body)
+ random_character(gender)
+
if(config.humans_need_surnames)
var/firstspace = findtext(real_name, " ")
var/name_length = length(real_name)
@@ -806,6 +831,7 @@ datum/preferences
character.hair_style = hair_style
character.facial_hair_style = facial_hair_style
character.underwear = underwear
+ character.undershirt = undershirt
if(backbag > 3 || backbag < 1)
backbag = 1 //Same as above
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 22e287c024f..74562dc81e5 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -169,6 +169,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["OOC_Notes"] >> metadata
S["real_name"] >> real_name
S["name_is_always_random"] >> be_random_name
+ S["body_is_always_random"] >> be_random_body
S["gender"] >> gender
S["age"] >> age
S["hair_color"] >> hair_color
@@ -178,6 +179,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["hair_style_name"] >> hair_style
S["facial_style_name"] >> facial_hair_style
S["underwear"] >> underwear
+ S["undershirt"] >> undershirt
S["backbag"] >> backbag
S["mutant_color"] >> mutant_color
@@ -204,15 +206,19 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
mutant_color = "#FFF"
if(!real_name) real_name = random_name(gender)
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
+ be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
gender = sanitize_gender(gender)
if(gender == MALE)
hair_style = sanitize_inlist(hair_style, hair_styles_male_list)
facial_hair_style = sanitize_inlist(facial_hair_style, facial_hair_styles_male_list)
underwear = sanitize_inlist(underwear, underwear_m)
+ undershirt = sanitize_inlist(undershirt, undershirt_m)
else
hair_style = sanitize_inlist(hair_style, hair_styles_female_list)
facial_hair_style = sanitize_inlist(facial_hair_style, facial_hair_styles_female_list)
underwear = sanitize_inlist(underwear, underwear_f)
+ undershirt = sanitize_inlist(undershirt, undershirt_f)
+
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
hair_color = sanitize_hexcolor(hair_color, 3, 0)
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
@@ -246,6 +252,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["OOC_Notes"] << metadata
S["real_name"] << real_name
S["name_is_always_random"] << be_random_name
+ S["body_is_always_random"] << be_random_body
S["gender"] << gender
S["age"] << age
S["hair_color"] << hair_color
@@ -255,6 +262,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["hair_style_name"] << hair_style
S["facial_style_name"] << facial_hair_style
S["underwear"] << underwear
+ S["undershirt"] << undershirt
S["backbag"] << backbag
S["species"] << pref_species.name
S["mutant_color"] << mutant_color
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 125810b6eb5..3de1b0b4916 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -3,8 +3,8 @@
var/flash_protect = 0 //Malk: What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS
var/tint = 0 //Malk: Sets the item's level of visual impairment tint, normally set to the same as flash_protect
var/up = 0 // but seperated to allow items to protect but not impair vision, like space helmets
- var/visor_flags = null
- var/visor_flags_inv = null
+ var/visor_flags = 0 // flags that are added/removed when an item is adjusted up/down
+ var/visor_flags_inv = 0 // same as visor_flags, but for flags_inv
//Ears: currently only used for headsets and earmuffs
/obj/item/clothing/ears
@@ -86,12 +86,38 @@ BLIND // can't see anything
var/alloweat = 0
strip_delay = 40
put_on_delay = 40
-
+ var/mask_adjusted = 0
+ var/ignore_maskadjust = 1
//Override this to modify speech like luchador masks.
/obj/item/clothing/mask/proc/speechModification(message)
return message
+//Proc that moves gas/breath masks out of the way, disabling them and allowing pill/food consumption
+/obj/item/clothing/mask/proc/adjustmask()
+ if(!ignore_maskadjust)
+ if(!usr.canmove || usr.stat || usr.restrained())
+ return
+ if(src.mask_adjusted == 1)
+ src.icon_state = initial(icon_state)
+ gas_transfer_coefficient = initial(gas_transfer_coefficient)
+ permeability_coefficient = initial(permeability_coefficient)
+ flags |= visor_flags
+ flags_inv |= visor_flags_inv
+ usr << "You push \the [src] back into place."
+ src.mask_adjusted = 0
+ else
+ src.icon_state += "_up"
+ usr << "You push \the [src] out of the way."
+ gas_transfer_coefficient = null
+ permeability_coefficient = null
+ flags &= ~visor_flags
+ flags_inv &= ~visor_flags_inv
+ src.mask_adjusted = 1
+ usr.update_inv_wear_mask()
+
+
+
//Shoes
/obj/item/clothing/shoes
name = "shoes"
@@ -228,20 +254,22 @@ BLIND // can't see anything
if(hastie)
user << "\A [hastie] is attached to it."
-atom/proc/generate_uniform(index,t_color)
- var/icon/female_uniform_icon = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[t_color]_s")
+atom/proc/generate_female_clothing(index,t_color,icon)
+ var/icon/female_clothing_icon = icon("icon"=icon, "icon_state"="[t_color]_s")
var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="female_s")
- female_uniform_icon.Blend(female_s, ICON_MULTIPLY)
- female_uniform_icon = fcopy_rsc(female_uniform_icon)
- female_uniform_icons[index] = female_uniform_icon
+ female_clothing_icon.Blend(female_s, ICON_MULTIPLY)
+ female_clothing_icon = fcopy_rsc(female_clothing_icon)
+ female_clothing_icons[index] = female_clothing_icon
/obj/item/clothing/under/verb/toggle()
set name = "Toggle Suit Sensors"
set category = "Object"
set src in usr
var/mob/M = usr
- if (istype(M, /mob/dead/)) return
- if (usr.stat) return
+ if (istype(M, /mob/dead/))
+ return
+ if (!can_use(usr))
+ return
if(src.has_sensor >= 2)
usr << "The controls are locked."
return 0
@@ -266,7 +294,7 @@ atom/proc/generate_uniform(index,t_color)
set name = "Adjust Jumpsuit Style"
set category = "Object"
set src in usr
- if(usr.stat)
+ if(!can_use(usr))
return
if(!can_adjust)
usr << "You cannot wear this suit any differently."
@@ -287,8 +315,10 @@ atom/proc/generate_uniform(index,t_color)
set name = "Remove Accessory"
set category = "Object"
set src in usr
- if(!istype(usr, /mob/living)) return
- if(usr.stat) return
+ if(!istype(usr, /mob/living))
+ return
+ if(!can_use(usr))
+ return
if(hastie)
hastie.transform *= 2
@@ -310,7 +340,7 @@ atom/proc/generate_uniform(index,t_color)
..()
/obj/item/clothing/proc/weldingvisortoggle() //Malk: proc to toggle welding visors on helmets, masks, goggles, etc.
- if(usr.canmove && !usr.stat && !usr.restrained())
+ if(can_use(usr))
if(up)
up = !up
flags |= (visor_flags)
@@ -333,4 +363,10 @@ atom/proc/generate_uniform(index,t_color)
if(istype(src, /obj/item/clothing/glasses))
usr.update_inv_glasses(0)
if(istype(src, /obj/item/clothing/mask))
- usr.update_inv_wear_mask(0)
\ No newline at end of file
+ usr.update_inv_wear_mask(0)
+
+/obj/item/clothing/proc/can_use(mob/user)
+ if(user && ismob(user))
+ if(!user.stat && user.canmove && !user.restrained())
+ return 1
+ return 0
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 5911f0178d8..054c7d2acab 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -147,10 +147,4 @@
name = "Optical Thermal Eyepatch"
desc = "An eyepatch with built-in thermal optics"
icon_state = "eyepatch"
- item_state = "eyepatch"
-
-/obj/item/clothing/glasses/thermal/jensen
- name = "Optical Thermal Implants"
- desc = "A set of implantable lenses designed to augment your vision"
- icon_state = "thermalimplants"
- item_state = "syringe_kit"
\ No newline at end of file
+ item_state = "eyepatch"
\ No newline at end of file
diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
index 505c336b6aa..25e6b20f94a 100644
--- a/code/modules/clothing/glasses/hud.dm
+++ b/code/modules/clothing/glasses/hud.dm
@@ -68,13 +68,5 @@
emagged = 1
desc = desc + " The display flickers slightly."
-/obj/item/clothing/glasses/hud/security/jensenshades
- name = "Augmented shades"
- desc = "Polarized bioneural eyewear, designed to augment your vision."
- icon_state = "jensenshades"
- item_state = "jensenshades"
- vision_flags = SEE_MOBS
- invis_view = 2
-
/obj/item/clothing/glasses/hud/security/process_hud(var/mob/M)
process_data_hud(M,DATA_HUD_SECURITY,DATA_HUD_ADVANCED)
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 360e6e52e63..88db2bd9160 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -21,6 +21,26 @@
armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
strip_delay = 80
+ action_button_name = "Toggle Helmet Visor"
+ visor_flags = HEADCOVERSEYES | HEADCOVERSMOUTH
+ visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE
+
+/obj/item/clothing/head/helmet/riot/attack_self()
+ if(usr.canmove && !usr.stat && !usr.restrained())
+ if(up)
+ up = !up
+ flags |= (visor_flags)
+ flags_inv |= (visor_flags_inv)
+ icon_state = initial(icon_state)
+ usr << "You pull the [src] down."
+ usr.update_inv_head(0)
+ else
+ up = !up
+ flags &= ~(visor_flags)
+ flags_inv &= ~(visor_flags_inv)
+ icon_state = "[initial(icon_state)]up"
+ usr << "You push the [src] up."
+ usr.update_inv_head(0)
/obj/item/clothing/head/helmet/swat
name = "\improper SWAT helmet"
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 64a9336b2ca..bfa388ae031 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -63,23 +63,21 @@
//Security
/obj/item/clothing/head/HoS
- name = "head of security hat"
- desc = "The robust hat of the Head of Security. For showing the officers who's in charge."
+ name = "head of security cap"
+ desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge."
icon_state = "hoscap"
armor = list(melee = 80, bullet = 60, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0)
flags = 0
flags_inv = HIDEEARS
strip_delay = 80
-/obj/item/clothing/head/HoS/dermal
- name = "Dermal Armor Patch"
- desc = "An armored implant that automatically integrates just below the scalp for robust protection without sacrificing style."
- icon_state = "dermal"
- item_state = "dermal"
- flags_inv = 0
+/obj/item/clothing/head/HoS/drill
+ name = "head of security drill hat"
+ desc = "A robust drill hat for the Head of Security. For keeping the officers in line."
+ icon_state = "hosdrill"
/obj/item/clothing/head/warden
- name = "warden's hat"
+ name = "warden's police hat"
desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts."
icon_state = "policehelm"
armor = list(melee = 60, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 84f1d7ca791..132d31c2cc0 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -56,14 +56,6 @@
flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
-/obj/item/clothing/head/cueball
- name = "cueball helmet"
- desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?"
- icon_state = "cueball"
- flags = HEADCOVERSEYES|BLOCKHAIR
- item_state="cueball"
- flags_inv = 0
-
/obj/item/clothing/head/that
name = "sturdy top-hat"
desc = "It's an amish looking armored top hat."
diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm
index 13980d915db..78f76f8d971 100644
--- a/code/modules/clothing/masks/boxing.dm
+++ b/code/modules/clothing/masks/boxing.dm
@@ -5,7 +5,13 @@
item_state = "balaclava"
flags = BLOCKHAIR
flags_inv = HIDEFACE
+ visor_flags_inv = HIDEFACE
w_class = 2
+ action_button_name = "Adjust Balaclava"
+ ignore_maskadjust = 0
+
+/obj/item/clothing/mask/balaclava/attack_self()
+ adjustmask()
/obj/item/clothing/mask/luchador
name = "Luchador Mask"
diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm
index c500287c103..739dc16581a 100644
--- a/code/modules/clothing/masks/breath.dm
+++ b/code/modules/clothing/masks/breath.dm
@@ -5,9 +5,15 @@
item_state = "m_mask"
body_parts_covered = 0
flags = MASKCOVERSMOUTH | MASKINTERNALS
+ visor_flags = MASKCOVERSMOUTH | MASKINTERNALS
w_class = 2
gas_transfer_coefficient = 0.10
permeability_coefficient = 0.50
+ action_button_name = "Adjust Breath Mask"
+ ignore_maskadjust = 0
+
+/obj/item/clothing/mask/breath/attack_self()
+ adjustmask()
/obj/item/clothing/mask/breath/medical
desc = "A close-fitting sterile mask that can be connected to an air supply."
@@ -15,4 +21,4 @@
icon_state = "medical"
item_state = "m_mask"
permeability_coefficient = 0.01
- put_on_delay = 10
+ put_on_delay = 10
\ No newline at end of file
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index de6247041be..295298df882 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -36,6 +36,7 @@
weldingvisortoggle()
+
// ********************************************************************
// **** Security gas mask ****
@@ -86,8 +87,10 @@
set category = "Object"
set name = "HALT"
set src in usr
- if(!istype(usr, /mob/living)) return
- if(usr.stat) return
+ if(!istype(usr, /mob/living))
+ return
+ if(!can_use(usr))
+ return
var/phrase = 0 //selects which phrase to use
var/phrase_text = null
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index d3e65f97a5f..59acfbd631d 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -23,9 +23,17 @@
item_state = "sterile"
w_class = 1
flags = MASKCOVERSMOUTH
+ flags_inv = HIDEFACE
+ visor_flags = MASKCOVERSMOUTH
+ visor_flags_inv = HIDEFACE
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0)
+ action_button_name = "Adjust Sterile Mask"
+ ignore_maskadjust = 0
+
+/obj/item/clothing/mask/surgical/attack_self()
+ adjustmask()
/obj/item/clothing/mask/fakemoustache
name = "fake moustache"
diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm
new file mode 100644
index 00000000000..6c1999ac6e1
--- /dev/null
+++ b/code/modules/clothing/shoes/bananashoes.dm
@@ -0,0 +1,61 @@
+//banana flavored chaos and horror ahead
+
+/obj/item/clothing/shoes/clown_shoes/banana_shoes
+ name = "mk-honk prototype shoes"
+ desc = "Lost prototype of advanced clown tech. Powered by bananium, these shoes leave a trail of chaos in their wake."
+ icon_state = "clown_prototype_off"
+ var/on = 0
+ var/bananium = 0
+ action_button_name = "Toggle Shoes"
+
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/step_action()
+ if(on)
+ if(footstep > 1)//honks when activated
+ playsound(src, "sound/items/bikehorn.ogg", 75, 1)
+ footstep = 0
+ else
+ footstep++
+
+ new/obj/item/weapon/grown/bananapeel/specialpeel(get_step(src,turn(usr.dir, 180)), 5) //honk
+ bananium -= 100
+ if(bananium < 100)
+ on = !on
+ update_icon()
+ usr << "You ran out of bananium!"
+ else
+ ..()
+
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/attack_self(mob/user)
+ if(bananium > 0)
+ var/sheet_amount = round(bananium / 2000)
+ if(sheet_amount > 0)
+ var/obj/item/stack/sheet/mineral/bananium/M = new/obj/item/stack/sheet/mineral/bananium(get_turf(loc))
+ M.amount = sheet_amount
+ bananium -= sheet_amount * 2000
+ user << "You retrieve [sheet_amount] sheets of bananium."
+
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/attackby(obj/item/O, mob/user)
+ if(istype(O,/obj/item/stack/sheet/mineral/bananium))
+ var/obj/item/stack/sheet/mineral/bananium/M = O
+ bananium += 2000 * M.amount
+ user << "You insert [M.amount] bananium sheets into the prototype shoes."
+ M.use(M.amount)
+
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/examine(mob/user)
+ ..()
+ user << "The shoes are [on ? "enabled" : "disabled"]. There is [bananium] bananium left."
+
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click()
+ if(bananium > 0)
+ on = !on
+ update_icon()
+ usr << "You [on ? "activate" : "deactivate"] the prototype shoes."
+ else
+ usr << "You need bananium to turn the prototype shoes on."
+
+/obj/item/clothing/shoes/clown_shoes/banana_shoes/update_icon()
+ if(on)
+ icon_state = "clown_prototype_on"
+ else
+ icon_state = "clown_prototype_off"
+ usr.update_inv_shoes()
\ No newline at end of file
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index efe04465a36..d7d2414ff68 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -14,6 +14,8 @@
set name = "Toggle Magboots"
set category = "Object"
set src in usr
+ if(!can_use(usr))
+ return
attack_self(usr)
@@ -49,4 +51,4 @@
desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders."
name = "blood-red magboots"
icon_state = "syndiemag0"
- magboot_state = "syndiemag"
+ magboot_state = "syndiemag"
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 8c16e3d746d..bdf0b2ed3ba 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -1,3 +1,5 @@
+/obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking
+
/obj/item/clothing/shoes/syndigaloshes
desc = "A pair of brown shoes. They seem to have extra grip."
name = "brown shoes"
@@ -50,6 +52,7 @@
icon_state = "wizard"
strip_delay = 50
put_on_delay = 50
+ unacidable = 1
/obj/item/clothing/shoes/sandal/marisa
desc = "A pair of magic black shoes."
@@ -75,6 +78,13 @@
item_color = "clown"
var/footstep = 1 //used for squeeks whilst walking
+/obj/item/clothing/shoes/clown_shoes/step_action()
+ if(footstep > 1)
+ playsound(src, "clownstep", 50, 1)
+ footstep = 0
+ else
+ footstep++
+
/obj/item/clothing/shoes/jackboots
name = "jackboots"
desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index fcb6f1ca7ca..f3fc2721928 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -90,16 +90,17 @@
//Mining hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/mining
name = "mining hardsuit helmet"
- desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating."
+ desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating for wildlife encounters."
icon_state = "hardsuit0-mining"
item_state = "mining_helm"
item_color = "mining"
+ flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
/obj/item/clothing/suit/space/hardsuit/mining
icon_state = "hardsuit-mining"
name = "mining hardsuit"
- desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating."
+ desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating for wildlife encounters."
item_state = "mining_hardsuit"
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe)
@@ -137,6 +138,7 @@
armor = list(melee = 40, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 100, rad = 50)
heat_protection = HEAD //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
+ unacidable = 1
/obj/item/clothing/suit/space/hardsuit/wizard
icon_state = "hardsuit-wiz"
@@ -150,6 +152,7 @@
allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank/emergency_oxygen)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
+ unacidable = 1
//Medical hardsuit
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 3e33b19cd4a..32d90013168 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -17,8 +17,8 @@
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/hos
- name = "armored coat"
- desc = "A greatcoat enchanced with a special alloy for some protection and style."
+ name = "armored greatcoat"
+ desc = "A greatcoat enchanced with a special alloy for some protection and style for those with a commanding presence."
icon_state = "hos"
item_state = "hos"
body_parts_covered = CHEST|GROIN|ARMS|LEGS
@@ -29,6 +29,15 @@
strip_delay = 80
put_on_delay = 40
+/obj/item/clothing/suit/armor/hos/trenchcoat
+ name = "armored trenchoat"
+ desc = "A trenchcoat enchanced with a special lightweight kevlar. The epitome of tactical plainclothes."
+ icon_state = "jensencoat"
+ item_state = "jensencoat"
+ flags_inv = 0
+ strip_delay = 80
+ put_on_delay = 40
+
/obj/item/clothing/suit/armor/vest/warden
name = "warden's jacket"
desc = "An armored jacket with silver rank pips and livery."
@@ -111,6 +120,7 @@
slowdown = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
action_button_name = "Toggle Armor"
+ unacidable = 1
/obj/item/clothing/suit/armor/reactive/IsShield()
if(active)
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index fbacb60a169..3fe024e44e8 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -20,7 +20,7 @@
item_state = "bio_suit"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
- allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/flash, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/flash/handheld, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/emergency_oxygen)
//Chaplain
/obj/item/clothing/suit/chaplain_hoodie
diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
index a5fbc8e3d6d..076dc6cc927 100644
--- a/code/modules/clothing/suits/labcoat.dm
+++ b/code/modules/clothing/suits/labcoat.dm
@@ -1,97 +1,61 @@
/obj/item/clothing/suit/labcoat
name = "labcoat"
desc = "A suit that protects against minor chemical spills."
- icon_state = "labcoat_open"
+ icon_state = "labcoat"
item_state = "labcoat"
blood_overlay_type = "coat"
body_parts_covered = CHEST|ARMS
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
+ var/open = 0
- verb/toggle()
- set name = "Toggle Labcoat Buttons"
- set category = "Object"
- set src in usr
+/obj/item/clothing/suit/labcoat/verb/toggle()
+ set name = "Toggle Labcoat Buttons"
+ set category = "Object"
+ set src in usr
- if(!usr.canmove || usr.stat || usr.restrained())
- return 0
+ if(!can_use(usr))
+ return 0
- switch(icon_state) //n-nooooo
- if("labcoat_open")
- src.icon_state = "labcoat"
- usr << "You button up the labcoat."
- if("labcoat")
- src.icon_state = "labcoat_open"
- usr << "You unbutton the labcoat."
- if("labcoat_cmo_open")
- src.icon_state = "labcoat_cmo"
- usr << "You button up the labcoat."
- if("labcoat_cmo")
- src.icon_state = "labcoat_cmo_open"
- usr << "You unbutton the labcoat."
- if("labcoat_gen_open")
- src.icon_state = "labcoat_gen"
- usr << "You button up the labcoat."
- if("labcoat_gen")
- src.icon_state = "labcoat_gen_open"
- usr << "You unbutton the labcoat."
- if("labcoat_chem_open")
- src.icon_state = "labcoat_chem"
- usr << "You button up the labcoat."
- if("labcoat_chem")
- src.icon_state = "labcoat_chem_open"
- usr << "You unbutton the labcoat."
- if("labcoat_vir_open")
- src.icon_state = "labcoat_vir"
- usr << "You button up the labcoat."
- if("labcoat_vir")
- src.icon_state = "labcoat_vir_open"
- usr << "You unbutton the labcoat."
- if("labcoat_tox_open")
- src.icon_state = "labcoat_tox"
- usr << "You button up the labcoat."
- if("labcoat_tox")
- src.icon_state = "labcoat_tox_open"
- usr << "You unbutton the labcoat."
- if("labgreen_open")
- src.icon_state = "labgreen"
- usr << "You button up the labcoat."
- if("labgreen")
- src.icon_state = "labgreen_open"
- usr << "You unbutton the labcoat."
- else
- usr << "You attempt to button-up the velcro on your [src], before promptly realising how retarded you are."
- return
- usr.update_inv_wear_suit() //so our overlays update
+ open = !open
+ icon_state = "[initial(icon_state)][open ? "_open":""]"
+ usr << "You [open ? "unbutton":"button up"] the labcoat"
+ usr.update_inv_wear_suit()
/obj/item/clothing/suit/labcoat/cmo
name = "chief medical officer's labcoat"
desc = "Bluer than the standard model."
- icon_state = "labcoat_cmo_open"
+ icon_state = "labcoat_cmo"
+ item_state = "labcoat_cmo"
+
+/obj/item/clothing/suit/labcoat/emt
+ name = "EMT's jacket"
+ desc = "A dark blue jacket with reflective strips for emergency medical technicians."
+ icon_state = "labcoat_emt"
item_state = "labcoat_cmo"
/obj/item/clothing/suit/labcoat/mad
name = "\improper The Mad's labcoat"
desc = "It makes you look capable of konking someone on the noggin and shooting them into space."
- icon_state = "labgreen_open"
+ icon_state = "labgreen"
item_state = "labgreen"
/obj/item/clothing/suit/labcoat/genetics
name = "geneticist labcoat"
desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder."
- icon_state = "labcoat_gen_open"
+ icon_state = "labcoat_gen"
/obj/item/clothing/suit/labcoat/chemist
name = "chemist labcoat"
desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder."
- icon_state = "labcoat_chem_open"
+ icon_state = "labcoat_chem"
/obj/item/clothing/suit/labcoat/virologist
name = "virologist labcoat"
desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder."
- icon_state = "labcoat_vir_open"
+ icon_state = "labcoat_vir"
/obj/item/clothing/suit/labcoat/science
name = "scientist labcoat"
desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder."
- icon_state = "labcoat_tox_open"
+ icon_state = "labcoat_tox"
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 76f209e90ce..b0ec44c0d58 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -210,13 +210,25 @@
icon_state = "nerdshirt"
item_state = "nerdshirt"
+/obj/item/clothing/suit/jacket
+ name = "bomber jacket"
+ desc = "Aviators not included."
+ icon_state = "bomberjacket"
+ item_state = "johnny"
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
+
+/obj/item/clothing/suit/jacket/leather
+ name = "leather jacket"
+ desc = "Pompadour not included."
+ icon_state = "leatherjacket"
+
//Blue suit jacket toggle
/obj/item/clothing/suit/suit/verb/toggle()
set name = "Toggle Jacket Buttons"
set category = "Object"
set src in usr
- if(!usr.canmove || usr.stat || usr.restrained())
+ if(!can_use(usr))
return 0
if(src.icon_state == "suitjacket_blue_open") //no god no
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index 0dea814a1cc..df88c830561 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -7,12 +7,18 @@
armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20)
strip_delay = 50
put_on_delay = 50
+ unacidable = 1
/obj/item/clothing/head/wizard/red
name = "red wizard hat"
desc = "Strange-looking, red, hat-wear that most certainly belongs to a real magic user."
icon_state = "redwizard"
+/obj/item/clothing/head/wizard/yellow
+ name = "yellow wizard hat"
+ desc = "Strange-looking, yellow, hat-wear that most certainly belongs to a powerful magic user."
+ icon_state = "yellowwizard"
+
/obj/item/clothing/head/wizard/fake
name = "wizard hat"
desc = "It has WIZZARD written across it in sequins. Comes with a cool beard."
@@ -46,6 +52,7 @@
flags_inv = HIDEJUMPSUIT
strip_delay = 50
put_on_delay = 50
+ unacidable = 1
/obj/item/clothing/suit/wizrobe/red
@@ -54,6 +61,11 @@
icon_state = "redwizard"
item_state = "redwizrobe"
+/obj/item/clothing/suit/wizrobe/yellow
+ name = "yellow wizard robe"
+ desc = "A magnificant, yellow, gem-lined robe that seems to radiate power."
+ icon_state = "yellowwizard"
+ item_state = "yellowwizrobe"
/obj/item/clothing/suit/wizrobe/marisa
name = "witch robe"
@@ -82,6 +94,7 @@
gas_transfer_coefficient = 1
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ unacidable = 0
/obj/item/clothing/head/wizard/marisa/fake
name = "witch hat"
@@ -90,6 +103,7 @@
gas_transfer_coefficient = 1
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ unacidable = 0
/obj/item/clothing/suit/wizrobe/marisa/fake
name = "witch robe"
@@ -99,3 +113,4 @@
gas_transfer_coefficient = 1
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ unacidable = 0
\ No newline at end of file
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index 41cd26d250e..2e331e46790 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -1,17 +1,27 @@
+/obj/item/clothing/under/color
+ desc = "A standard issue colored jumpsuit. Variety is the spice of life!"
+
+/obj/item/clothing/under/color/random/New()
+ ..()
+ var/list/excluded = list(/obj/item/clothing/under/color/random, /obj/item/clothing/under/color)
+ var/obj/item/clothing/under/color/C = pick(typesof(/obj/item/clothing/under/color) - excluded)
+ name = initial(C.name)
+ icon_state = initial(C.icon_state)
+ item_state = initial(C.item_state)
+ item_color = initial(C.item_color)
+ suit_color = initial(C.item_color)
+
/obj/item/clothing/under/color/black
name = "black jumpsuit"
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
-/obj/item/clothing/under/color/blackf
- name = "feminine black jumpsuit"
- desc = "It's very smart and in a ladies-size!"
- icon_state = "black"
- item_state = "bl_suit"
- item_color = "blackf"
- fitted = 0
- can_adjust = 0
+/obj/item/clothing/under/color/grey
+ name = "grey jumpsuit"
+ icon_state = "grey"
+ item_state = "gy_suit"
+ item_color = "grey"
/obj/item/clothing/under/color/blue
name = "blue jumpsuit"
@@ -25,20 +35,12 @@
item_state = "g_suit"
item_color = "green"
-/obj/item/clothing/under/color/grey
- name = "grey jumpsuit"
- icon_state = "grey"
- item_state = "gy_suit"
- item_color = "grey"
-
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
- desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
+ desc = "Don't wear this near paranoid security officers."
icon_state = "orange"
item_state = "o_suit"
item_color = "orange"
- has_sensor = 2
- sensor_mode = 3
/obj/item/clothing/under/color/pink
name = "pink jumpsuit"
@@ -64,81 +66,78 @@
item_state = "y_suit"
item_color = "yellow"
-/obj/item/clothing/under/color/psyche
- name = "psychedelic jumpsuit"
- desc = "Groovy!"
- icon_state = "psyche"
- item_color = "psyche"
-
/obj/item/clothing/under/color/lightblue
name = "lightblue jumpsuit"
- desc = "lightblue"
icon_state = "lightblue"
+ item_state = "b_suit"
item_color = "lightblue"
/obj/item/clothing/under/color/aqua
name = "aqua jumpsuit"
- desc = "aqua"
icon_state = "aqua"
+ item_state = "b_suit"
item_color = "aqua"
/obj/item/clothing/under/color/purple
name = "purple jumpsuit"
- desc = "purple"
icon_state = "purple"
item_state = "p_suit"
item_color = "purple"
/obj/item/clothing/under/color/lightpurple
name = "lightpurple jumpsuit"
- desc = "lightpurple"
icon_state = "lightpurple"
+ item_state = "p_suit"
item_color = "lightpurple"
/obj/item/clothing/under/color/lightgreen
name = "lightgreen jumpsuit"
- desc = "lightgreen"
icon_state = "lightgreen"
+ item_state = "g_suit"
item_color = "lightgreen"
/obj/item/clothing/under/color/lightblue
name = "lightblue jumpsuit"
- desc = "lightblue"
icon_state = "lightblue"
+ item_state = "b_suit"
item_color = "lightblue"
/obj/item/clothing/under/color/lightbrown
name = "lightbrown jumpsuit"
- desc = "lightbrown"
icon_state = "lightbrown"
item_color = "lightbrown"
/obj/item/clothing/under/color/brown
name = "brown jumpsuit"
- desc = "brown"
icon_state = "brown"
item_color = "brown"
/obj/item/clothing/under/color/yellowgreen
name = "yellowgreen jumpsuit"
- desc = "yellowgreen"
icon_state = "yellowgreen"
+ item_state = "y_suit"
item_color = "yellowgreen"
/obj/item/clothing/under/color/darkblue
name = "darkblue jumpsuit"
- desc = "darkblue"
icon_state = "darkblue"
+ item_state = "b_suit"
item_color = "darkblue"
/obj/item/clothing/under/color/lightred
name = "lightred jumpsuit"
- desc = "lightred"
icon_state = "lightred"
+ item_state = "r_suit"
item_color = "lightred"
/obj/item/clothing/under/color/darkred
name = "darkred jumpsuit"
- desc = "darkred"
icon_state = "darkred"
- item_color = "darkred"
\ No newline at end of file
+ item_state = "r_suit"
+ item_color = "darkred"
+
+/obj/item/clothing/under/color/maroon
+ name = "maroon jumpsuit"
+ icon_state = "maroon"
+ item_state = "r_suit"
+ item_color = "maroon"
\ No newline at end of file
diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm
index d56b94e60bb..351a97b5ee1 100644
--- a/code/modules/clothing/under/jobs/medsci.dm
+++ b/code/modules/clothing/under/jobs/medsci.dm
@@ -3,20 +3,29 @@
*/
/obj/item/clothing/under/rank/research_director
desc = "It's a suit worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants."
- name = "research director's suit"
+ name = "research director's vest suit"
icon_state = "director"
item_state = "g_suit"
item_color = "director"
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 10, rad = 0)
can_adjust = 0
/obj/item/clothing/under/rank/research_director/alt
desc = "Maybe you'll engineer your own half-man, half-pig creature some day. Its fabric provides minor protection from biological contaminants."
- name = "research director's suit"
+ name = "research director's tan suit"
icon_state = "rdwhimsy"
item_state = "rdwhimsy"
item_color = "rdwhimsy"
- armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0)
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0)
+ can_adjust = 1
+
+/obj/item/clothing/under/rank/research_director/turtleneck
+ desc = "A dark purple turtleneck and tan khakis, for a director with a superior sense of style."
+ name = "research director's turtleneck"
+ icon_state = "rdturtle"
+ item_state = "p_suit"
+ item_color = "rdturtle"
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0)
can_adjust = 1
/obj/item/clothing/under/rank/scientist
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index f7ada882d0a..658c78b3698 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -2,7 +2,6 @@
* Contains:
* Security
* Detective
- * Head of Security + Jensen cosplay gear
* Navy uniforms
*/
@@ -59,26 +58,6 @@
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
strip_delay = 60
-/*
- * Jensen cosplay gear
- */
-/obj/item/clothing/under/rank/head_of_security/jensen
- desc = "You never asked for anything that stylish."
- name = "head of security's jumpsuit"
- icon_state = "jensen"
- item_state = "jensen"
- item_color = "jensen"
- can_adjust = 0
-
-/obj/item/clothing/suit/armor/hos/jensen
- name = "armored trenchoat"
- desc = "A trenchoat augmented with a special alloy for some protection and style"
- icon_state = "jensencoat"
- item_state = "jensencoat"
- flags_inv = 0
- strip_delay = 80
- put_on_delay = 40
-
/*
* Navy uniforms
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index cd904b67418..c46f5def722 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -14,14 +14,6 @@
item_state = "w_suit"
can_adjust = 0
-/obj/item/clothing/under/scratch
- name = "white suit"
- desc = "A white suit, suitable for an excellent host"
- icon_state = "scratch"
- item_state = "scratch"
- item_color = "scratch"
- can_adjust = 0
-
/obj/item/clothing/under/sl_suit
desc = "It's a very amish looking suit."
name = "amish suit"
@@ -46,6 +38,15 @@
item_color = "waiter"
can_adjust = 0
+/obj/item/clothing/under/rank/prisoner
+ name = "prison jumpsuit"
+ desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
+ icon_state = "prisoner"
+ item_state = "o_suit"
+ item_color = "prisoner"
+ has_sensor = 2
+ sensor_mode = 3
+
/obj/item/clothing/under/rank/mailman
name = "mailman's jumpsuit"
desc = "'Special delivery!'"
@@ -53,6 +54,13 @@
item_state = "b_suit"
item_color = "mailman"
+/obj/item/clothing/under/rank/psyche
+ name = "psychedelic jumpsuit"
+ desc = "Groovy!"
+ icon_state = "psyche"
+ item_state = "p_suit"
+ item_color = "psyche"
+
/obj/item/clothing/under/sexyclown
name = "sexy-clown suit"
desc = "It makes you look HONKable!"
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index 8ba79e8d250..0ad173c2391 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -15,5 +15,4 @@
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool"
item_state = "bl_suit"
- item_color = "tactifool"
- can_adjust = 0
\ No newline at end of file
+ item_color = "tactifool"
\ No newline at end of file
diff --git a/code/modules/crafting/guncrafting.dm b/code/modules/crafting/guncrafting.dm
new file mode 100644
index 00000000000..ba354b64915
--- /dev/null
+++ b/code/modules/crafting/guncrafting.dm
@@ -0,0 +1,83 @@
+// This file is for projectile weapon crafting. All parts and construction paths will be contained here.
+// The weapons themselves are children of other weapons and should be contained in their respective files.
+
+// PARTS //
+
+/obj/item/weaponcrafting/reciever
+ name = "modular reciever"
+ desc = "A prototype modular reciever and trigger assembly for a firearm."
+ icon = 'icons/obj/improvised.dmi'
+ icon_state = "reciever"
+
+/obj/item/weaponcrafting/stock
+ name = "rifle stock"
+ desc = "A classic rifle stock that doubles as a grip, roughly carved out of wood."
+ icon = 'icons/obj/improvised.dmi'
+ icon_state = "riflestock"
+
+
+// CRAFTING //
+
+/obj/item/weaponcrafting/reciever/attackby(obj/item/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/pipe))
+ user << "You attach the shotgun barrel to the reciever. The pins seem loose."
+ var/obj/item/weaponcrafting/ishotgunconstruction/I = new /obj/item/weaponcrafting/ishotgunconstruction
+ user.unEquip(src)
+ user.put_in_hands(I)
+ del(W)
+ del(src)
+ return
+
+// SHOTGUN //
+
+/obj/item/weaponcrafting/ishotgunconstruction
+ name = "slightly conspicuous metal construction"
+ desc = "A long pipe attached to a firearm reciever. The pins seem loose."
+ icon = 'icons/obj/improvised.dmi'
+ icon_state = "ishotgunstep1"
+
+/obj/item/weaponcrafting/ishotgunconstruction/attackby(var/obj/item/I, mob/user as mob)
+ ..()
+ if(istype(I, /obj/item/weapon/screwdriver))
+ var/obj/item/weaponcrafting/ishotgunconstruction2/C = new /obj/item/weaponcrafting/ishotgunconstruction2
+ user.unEquip(src)
+ user.put_in_hands(C)
+ user << "You screw the pins into place, securing the pipe to the reciever."
+ qdel(src)
+
+/obj/item/weaponcrafting/ishotgunconstruction2
+ name = "very conspicuous metal construction"
+ desc = "A long pipe attached to a trigger assembly."
+ icon = 'icons/obj/improvised.dmi'
+ icon_state = "ishotgunstep1"
+
+/obj/item/weaponcrafting/ishotgunconstruction2/attackby(obj/item/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/weaponcrafting/stock))
+ user << "You attach the stock to the reciever-barrel assembly."
+ var/obj/item/weaponcrafting/ishotgunconstruction3/I = new /obj/item/weaponcrafting/ishotgunconstruction3
+ user.unEquip(src)
+ user.put_in_hands(I)
+ del(W)
+ del(src)
+ return
+
+/obj/item/weaponcrafting/ishotgunconstruction3
+ name = "extremely conspicuous metal construction"
+ desc = "A reciever-barrel shotgun assembly with a loose wooden stock. There's no way you can fire it without the stock coming loose."
+ icon = 'icons/obj/improvised.dmi'
+ icon_state = "ishotgunstep2"
+
+/obj/item/weaponcrafting/ishotgunconstruction3/attackby(var/obj/item/I, mob/user as mob)
+ ..()
+ if(istype(I, /obj/item/stack/packageWrap))
+ var/obj/item/stack/packageWrap/C = I
+ if (C.use(5))
+ var/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/W = new /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised
+ user.unEquip(src)
+ user.put_in_hands(W)
+ user << "You tie the wrapping paper around the stock and the barrel to secure it."
+ qdel(src)
+ else
+ user << "You need at least five feet of wrapping paper to secure the stock."
+ return
+
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
new file mode 100644
index 00000000000..6a53af52426
--- /dev/null
+++ b/code/modules/crafting/recipes.dm
@@ -0,0 +1,128 @@
+/datum/table_recipe
+ var/name = "" //in-game display name
+ var/reqs[] = list() //type paths of items consumed associated with how many are needed
+ var/result //type path of item resulting from this craft
+ var/tools[] = list() //type paths of items needed but not consumed
+ var/time = 0 //time in deciseconds
+ var/parts[] = list() //type paths of items that will be placed in the result
+ var/chem_catalists[] = list() //like tools but for reagents
+
+
+/datum/table_recipe/IED
+ name = "IED"
+ result = /obj/item/weapon/grenade/iedcasing
+ reqs = list(/datum/reagent/fuel = 50,
+ /obj/item/stack/cable_coil = 1,
+ /obj/item/device/assembly/igniter = 1,
+ /obj/item/weapon/reagent_containers/food/drinks/soda_cans = 1)
+ parts = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans = 1)
+ time = 80
+
+/datum/table_recipe/stunprod
+ name = "Stunprod"
+ result = /obj/item/weapon/melee/baton/cattleprod
+ reqs = list(/obj/item/weapon/restraints/handcuffs/cable = 1,
+ /obj/item/stack/rods = 1,
+ /obj/item/weapon/wirecutters = 1,
+ /obj/item/weapon/stock_parts/cell = 1)
+ time = 80
+ parts = list(/obj/item/weapon/stock_parts/cell = 1)
+
+/datum/table_recipe/ed209
+ name = "ED209"
+ result = /obj/machinery/bot/ed209
+ reqs = list(/obj/item/robot_parts/robot_suit = 1,
+ /obj/item/clothing/head/helmet = 1,
+ /obj/item/clothing/suit/armor/vest = 1,
+ /obj/item/robot_parts/l_leg = 1,
+ /obj/item/robot_parts/r_leg = 1,
+ /obj/item/stack/sheet/metal = 5,
+ /obj/item/stack/cable_coil = 5,
+ /obj/item/weapon/gun/energy/taser = 1,
+ /obj/item/weapon/stock_parts/cell = 1,
+ /obj/item/device/assembly/prox_sensor = 1,
+ /obj/item/robot_parts/r_arm = 1)
+ tools = list(/obj/item/weapon/weldingtool, /obj/item/weapon/screwdriver)
+ time = 120
+
+/datum/table_recipe/secbot
+ name = "Secbot"
+ result = /obj/machinery/bot/secbot
+ reqs = list(/obj/item/device/assembly/signaler = 1,
+ /obj/item/clothing/head/helmet = 1,
+ /obj/item/weapon/melee/baton = 1,
+ /obj/item/device/assembly/prox_sensor = 1,
+ /obj/item/robot_parts/r_arm = 1)
+ tools = list(/obj/item/weapon/weldingtool)
+ time = 120
+
+/datum/table_recipe/cleanbot
+ name = "Cleanbot"
+ result = /obj/machinery/bot/cleanbot
+ reqs = list(/obj/item/weapon/reagent_containers/glass/bucket = 1,
+ /obj/item/device/assembly/prox_sensor = 1,
+ /obj/item/robot_parts/r_arm = 1)
+ time = 80
+
+/datum/table_recipe/floorbot
+ name = "Floorbot"
+ result = /obj/machinery/bot/floorbot
+ reqs = list(/obj/item/weapon/storage/toolbox/mechanical = 1,
+ /obj/item/stack/tile/plasteel = 1,
+ /obj/item/device/assembly/prox_sensor = 1,
+ /obj/item/robot_parts/r_arm = 1)
+ time = 80
+
+/datum/table_recipe/medbot
+ name = "Medbot"
+ result = /obj/machinery/bot/medbot
+ reqs = list(/obj/item/device/healthanalyzer = 1,
+ /obj/item/weapon/storage/firstaid = 1,
+ /obj/item/device/assembly/prox_sensor = 1,
+ /obj/item/robot_parts/r_arm = 1)
+ time = 80
+
+/datum/table_recipe/flamethrower
+ name = "Flamethrower"
+ result = /obj/item/weapon/flamethrower
+ reqs = list(/obj/item/weapon/weldingtool = 1,
+ /obj/item/device/assembly/igniter = 1,
+ /obj/item/stack/rods = 2)
+ tools = list(/obj/item/weapon/screwdriver)
+ time = 20
+
+/datum/table_recipe/meteorshot
+ name = "Meteorshot Shell"
+ result = /obj/item/ammo_casing/shotgun/meteorshot
+ reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
+ /obj/item/weapon/rcd_ammo = 1,
+ /obj/item/weapon/stock_parts/manipulator = 2)
+ tools = list(/obj/item/weapon/screwdriver)
+ time = 5
+
+/datum/table_recipe/pulseslug
+ name = "Pulse Slug Shell"
+ result = /obj/item/ammo_casing/shotgun/pulseslug
+ reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
+ /obj/item/weapon/stock_parts/capacitor/adv = 2,
+ /obj/item/weapon/stock_parts/micro_laser/ultra = 1)
+ tools = list(/obj/item/weapon/screwdriver)
+ time = 5
+
+/datum/table_recipe/dragonsbreath
+ name = "Dragonsbreath Shell"
+ result = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath
+ reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
+ /datum/reagent/phosphorus = 5,)
+ tools = list(/obj/item/weapon/screwdriver)
+ time = 5
+
+/datum/table_recipe/ishotgun
+ name = "Improvised Shotgun"
+ result = /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised
+ reqs = list(/obj/item/weaponcrafting/reciever = 1,
+ /obj/item/pipe = 1,
+ /obj/item/weaponcrafting/stock = 1,
+ /obj/item/stack/packageWrap = 5,)
+ tools = list(/obj/item/weapon/screwdriver)
+ time = 200
\ No newline at end of file
diff --git a/code/modules/crafting/table.dm b/code/modules/crafting/table.dm
new file mode 100644
index 00000000000..390765aa60c
--- /dev/null
+++ b/code/modules/crafting/table.dm
@@ -0,0 +1,166 @@
+/obj/structure/table
+ var/list/table_contents = list()
+
+/obj/structure/table/MouseDrop(atom/over)
+ if(over != usr)
+ return
+ interact(usr)
+
+/obj/structure/table/proc/check_contents(datum/table_recipe/R)
+ check_table()
+ main_loop:
+ for(var/A in R.reqs)
+ for(var/B in table_contents)
+ if(ispath(B, A))
+ if(table_contents[B] >= R.reqs[A])
+ continue main_loop
+ return 0
+ for(var/A in R.chem_catalists)
+ if(table_contents[A] < R.chem_catalists[A])
+ return 0
+ return 1
+
+/obj/structure/table/proc/check_table()
+ table_contents = list()
+ for(var/obj/item/I in loc)
+ if(istype(I, /obj/item/stack))
+ var/obj/item/stack/S = I
+ table_contents[I.type] += S.amount
+ else
+ if(istype(I, /obj/item/weapon/reagent_containers))
+ for(var/datum/reagent/R in I.reagents.reagent_list)
+ table_contents[R.type] += R.volume
+
+ table_contents[I.type] += 1
+
+/obj/structure/table/proc/check_tools(mob/user, datum/table_recipe/R)
+ if(!R.tools.len)
+ return 1
+ var/list/possible_tools = list()
+ for(var/obj/item/I in user.contents)
+ if(istype(I, /obj/item/weapon/storage))
+ for(var/obj/item/SI in I.contents)
+ possible_tools += SI.type
+ else
+ possible_tools += I.type
+ possible_tools += table_contents
+ var/i = R.tools.len
+ var/I
+ for(var/A in R.tools)
+ I = possible_tools.Find(A)
+ if(I)
+ possible_tools.Cut(I, I+1)
+ i--
+ else
+ break
+ return !i
+
+/obj/structure/table/proc/construct_item(mob/user, datum/table_recipe/R)
+ check_table()
+ if(check_contents(R) && check_tools(user, R))
+ if(do_after(user, R.time))
+ if(!check_contents(R) || !check_tools(user, R))
+ return 0
+ var/list/parts = del_reqs(R)
+ var/atom/movable/I = new R.result (loc)
+ for(var/A in parts)
+ if(istype(A, /obj/item))
+ var/atom/movable/B = A
+ B.loc = I
+ else
+ if(!I.reagents)
+ I.reagents = new /datum/reagents()
+ I.reagents.reagent_list.Add(A)
+ I.CheckParts()
+ return 1
+ return 0
+
+/obj/structure/table/proc/del_reqs(datum/table_recipe/R)
+ var/list/Deletion = list()
+ var/amt
+ for(var/A in R.reqs)
+ amt = R.reqs[A]
+ if(ispath(A, /obj/item/stack))
+ var/obj/item/stack/S
+ stack_loop:
+ for(var/B in table_contents)
+ if(ispath(B, A))
+ while(amt > 0)
+ S = locate(B) in loc
+ if(S.amount >= amt)
+ S.use(amt)
+ break stack_loop
+ else
+ amt -= S.amount
+ qdel(S)
+ else if(ispath(A, /obj/item))
+ var/obj/item/I
+ item_loop:
+ for(var/B in table_contents)
+ if(ispath(B, A))
+ while(amt > 0)
+ I = locate(B) in loc
+ Deletion.Add(I)
+ I.loc = null //remove it from the table loc so that we don't locate the same item every time (will be relocated inside the crafted item in construct_item())
+ amt--
+ break item_loop
+ else
+ var/datum/reagent/RG = new A
+ reagent_loop:
+ for(var/B in table_contents)
+ if(ispath(B, /obj/item/weapon/reagent_containers))
+ var/obj/item/RC = locate(B) in loc
+ if(RC.reagents.has_reagent(RG.id, amt))
+ RC.reagents.remove_reagent(RG.id, amt)
+ RG.volume = amt
+ Deletion.Add(RG)
+ break reagent_loop
+ else if(RC.reagents.has_reagent(RG.id))
+ Deletion.Add(RG)
+ RG.volume += RC.reagents.get_reagent_amount(RG.id)
+ amt -= RC.reagents.get_reagent_amount(RG.id)
+ RC.reagents.del_reagent(RG.id)
+
+ for(var/A in R.parts)
+ for(var/B in Deletion)
+ if(!istype(B, A))
+ Deletion.Remove(B)
+ qdel(B)
+
+ return Deletion
+
+/obj/structure/table/interact(mob/user)
+ if(user.stat || user.lying || !Adjacent(user))
+ return
+ check_table()
+ if(!table_contents.len)
+ return
+ user.face_atom(src)
+ var/dat = "Construction menu" + dat += ""
+ if(busy)
+ dat += "Construction in progress... "
+ else
+ for(var/datum/table_recipe/R in table_recipes)
+ if(check_contents(R))
+ dat += "[R.name]" + dat += "" + + var/datum/browser/popup = new(user, "table", "Table", 300, 300) + popup.set_content(dat) + popup.open() + return + +/obj/structure/table/Topic(href, href_list) + if(usr.stat || !Adjacent(usr) || usr.lying) + return + if(href_list["make"]) + var/datum/table_recipe/TR = locate(href_list["make"]) + busy = 1 + interact(usr) + if(construct_item(usr, TR)) + usr << "[TR.name] constructed." + else + usr << "Construction failed." + busy = 0 + interact(usr) \ No newline at end of file diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index 7781afff461..779a9800be2 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -43,7 +43,7 @@ if(ismob(target) && target.reagents && reagents.total_volume) user.visible_message("\The [target] has been smothered with \the [src] by \the [user]!", "You smother \the [target] with \the [src]!", "You hear some struggling and muffled cries of surprise") src.reagents.reaction(target, TOUCH) - spawn(5) src.reagents.clear_reagents() + src.reagents.clear_reagents() return else ..() diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm index 9062ed7e4a3..6ffb171e387 100644 --- a/code/modules/events/anomaly.dm +++ b/code/modules/events/anomaly.dm @@ -1,5 +1,5 @@ /datum/round_event_control/anomaly - name = "Energetic Flux" + name = "Anomaly: Energetic Flux" typepath = /datum/round_event/anomaly max_occurrences = 0 //This one probably shouldn't occur! It'd work, but it wouldn't be very fun. weight = 15 @@ -23,7 +23,7 @@ setup(safety_loop) /datum/round_event/anomaly/announce() - priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert") + priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert") /datum/round_event/anomaly/start() var/turf/T = pick(get_area_turfs(impact_area)) diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm index 256a4322c81..5171ca6a4b6 100644 --- a/code/modules/events/anomaly_bluespace.dm +++ b/code/modules/events/anomaly_bluespace.dm @@ -1,5 +1,5 @@ /datum/round_event_control/anomaly/anomaly_bluespace - name = "Bluespace Anomaly" + name = "Anomaly: Bluespace" typepath = /datum/round_event/anomaly/anomaly_bluespace max_occurrences = 1 weight = 5 @@ -7,7 +7,7 @@ /datum/round_event/anomaly/anomaly_bluespace startWhen = 3 announceWhen = 10 - endWhen = 55 + endWhen = 95 /datum/round_event/anomaly/anomaly_bluespace/announce() @@ -21,7 +21,7 @@ /datum/round_event/anomaly/anomaly_bluespace/end() - if(newAnomaly)//If it hasn't been neutralized, it's time to warp half the station away jeez + if(newAnomaly.loc)//If it hasn't been neutralized, it's time to warp half the station away jeez var/turf/T = pick(get_area_turfs(impact_area)) if(T) // Calculate new position (searches through beacons in world) @@ -52,9 +52,7 @@ var/x_distance = TO.x - FROM.x for (var/atom/movable/A in range(12, FROM )) // iterate thru list of mobs in the area if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid - if(A.anchored && istype(A, /obj/machinery)) continue - if(istype(A, /obj/structure/disposalpipe )) continue - if(istype(A, /obj/structure/cable )) continue + if(A.anchored) continue var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place if(!A.Move(newloc)) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving diff --git a/code/modules/events/anomaly_flux.dm b/code/modules/events/anomaly_flux.dm index dc7e9d4b219..fd4a10270b4 100644 --- a/code/modules/events/anomaly_flux.dm +++ b/code/modules/events/anomaly_flux.dm @@ -1,13 +1,13 @@ /datum/round_event_control/anomaly/anomaly_flux - name = "Energetic Flux" + name = "Anomaly: Hyper-Energetic Flux" typepath = /datum/round_event/anomaly/anomaly_flux - max_occurrences = 2 - weight = 15 + max_occurrences = 5 + weight = 20 /datum/round_event/anomaly/anomaly_flux startWhen = 3 announceWhen = 20 - endWhen = 60 + endWhen = 80 /datum/round_event/anomaly/anomaly_flux/announce() @@ -21,6 +21,6 @@ /datum/round_event/anomaly/anomaly_flux/end() - if(newAnomaly)//If it hasn't been neutralized, it's time to blow up. + if(newAnomaly.loc)//If it hasn't been neutralized, it's time to blow up. explosion(newAnomaly, -1, 3, 5, 5) qdel(newAnomaly) \ No newline at end of file diff --git a/code/modules/events/anomaly_grav.dm b/code/modules/events/anomaly_grav.dm index 69d38c62231..4b44e18ba2a 100644 --- a/code/modules/events/anomaly_grav.dm +++ b/code/modules/events/anomaly_grav.dm @@ -1,13 +1,13 @@ /datum/round_event_control/anomaly/anomaly_grav - name = "Gravitational Anomaly" + name = "Anomaly: Gravitational" typepath = /datum/round_event/anomaly/anomaly_grav - max_occurrences = 2 - weight = 15 + max_occurrences = 5 + weight = 20 /datum/round_event/anomaly/anomaly_grav startWhen = 3 announceWhen = 20 - endWhen = 50 + endWhen = 120 /datum/round_event/anomaly/anomaly_grav/announce() diff --git a/code/modules/events/anomaly_pyro.dm b/code/modules/events/anomaly_pyro.dm index 49600a58136..237e59a1d48 100644 --- a/code/modules/events/anomaly_pyro.dm +++ b/code/modules/events/anomaly_pyro.dm @@ -1,17 +1,17 @@ /datum/round_event_control/anomaly/anomaly_pyro - name = "Pyroclastic Anomaly" + name = "Anomaly: Pyroclastic" typepath = /datum/round_event/anomaly/anomaly_pyro - max_occurrences = 2 - weight = 15 + max_occurrences = 5 + weight = 20 /datum/round_event/anomaly/anomaly_pyro startWhen = 10 announceWhen = 3 - endWhen = 70 + endWhen = 85 /datum/round_event/anomaly/anomaly_pyro/announce() - priority_announce("Atmospheric anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") + priority_announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") /datum/round_event/anomaly/anomaly_pyro/start() var/turf/T = pick(get_area_turfs(impact_area)) @@ -23,4 +23,14 @@ kill() return if(IsMultiple(activeFor, 5)) - newAnomaly.anomalyEffect() \ No newline at end of file + newAnomaly.anomalyEffect() + + +/datum/round_event/anomaly/anomaly_pyro/end() + if(newAnomaly.loc) + explosion(get_turf(newAnomaly), -1,0,3, flame_range = 4) + + var/mob/living/carbon/slime/S = new/mob/living/carbon/slime(get_turf(newAnomaly)) + S.colour = pick("red", "orange") + + qdel(newAnomaly) \ No newline at end of file diff --git a/code/modules/events/anomaly_vortex.dm b/code/modules/events/anomaly_vortex.dm index 993bec48862..aed3d4a1320 100644 --- a/code/modules/events/anomaly_vortex.dm +++ b/code/modules/events/anomaly_vortex.dm @@ -1,13 +1,13 @@ /datum/round_event_control/anomaly/anomaly_vortex - name = "Vortex Anomaly" + name = "Anomaly: Vortex" typepath = /datum/round_event/anomaly/anomaly_vortex - max_occurrences = 5 - weight = 2 + max_occurrences = 2 + weight = 5 /datum/round_event/anomaly/anomaly_vortex startWhen = 10 announceWhen = 3 - endWhen = 80 + endWhen = 95 /datum/round_event/anomaly/anomaly_vortex/announce() diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index 72cea9209af..0b65480c830 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -22,4 +22,6 @@ if(prob(95)) new /mob/living/simple_animal/hostile/carp(C.loc) else - new /mob/living/simple_animal/hostile/carp/megacarp(C.loc) \ No newline at end of file + new /mob/living/simple_animal/hostile/carp/megacarp(C.loc) + + diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm index 49deb57c137..a1280433c61 100644 --- a/code/modules/events/false_alarm.dm +++ b/code/modules/events/false_alarm.dm @@ -9,7 +9,7 @@ endWhen = 1 /datum/round_event/falsealarm/announce() - var/list/events_list + var/list/events_list = list() for(var/datum/round_event_control/E in events.control) if(!E.holidayID) //No holiday cheer allowed during non-holidays. Not even fake holiday cheer. events_list += E //No holiday cheer allowed during non-holidays. Not even fake holiday cheer. diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index ad6a82e04df..5e8996a8c1d 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -7,11 +7,78 @@ earliest_start = 0 /datum/round_event/spooky/start() + ..() for(var/mob/living/carbon/human/H in mob_list) + var/obj/item/weapon/storage/backpack/b = locate() in H.contents + new /obj/item/weapon/storage/spooky(b) if(H.dna) - hardset_dna(H, null, null, null, null, /datum/species/skeleton) + if(prob(50)) + hardset_dna(H, null, null, null, null, /datum/species/skeleton) + else + hardset_dna(H, null, null, null, null, /datum/species/zombie) + for(var/mob/living/simple_animal/corgi/Ian/Ian in mob_list) Ian.place_on_head(new /obj/item/weapon/bedsheet(Ian)) /datum/round_event/spooky/announce() priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE") + +//Eyeball migration +/datum/round_event_control/carp_migration/eyeballs + name = "Eyeball Migration" + typepath = /datum/round_event/carp_migration/eyeballs + holidayID = "Halloween" + weight = 25 + earliest_start = 0 + +/datum/round_event/carp_migration/eyeballs/start() + for(var/obj/effect/landmark/C in landmarks_list) + if(C.name == "carpspawn") + new /mob/living/simple_animal/hostile/carp/eyeball(C.loc) + +//Pumpking meteors waves +/datum/round_event_control/meteor_wave/spooky + name = "Pumpkin Wave" + typepath = /datum/round_event/meteor_wave/spooky + holidayID = "Halloween" + weight = 20 + max_occurrences = 2 + +/datum/round_event/meteor_wave/spooky + endWhen = 40 + +/datum/round_event/meteor_wave/spooky/tick() + if(IsMultiple(activeFor, 4)) + spawn_meteors(3, meteorsSPOOKY) //meteor list types defined in gamemode/meteor/meteors.dm + +//spooky foods (you can't actually make these when it's not halloween) +/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookyskull + name = "skull cookie" + desc = "Spooky! It's got delicious calcium flavouring!" + icon = 'icons/obj/halloween_items.dmi' + icon_state = "skeletoncookie" + +/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookycoffin + name = "coffin cookie" + desc = "Spooky! It's got delicious coffee flavouring!" + icon = 'icons/obj/halloween_items.dmi' + icon_state = "coffincookie" + + +//spooky items + +/obj/item/weapon/storage/spooky + name = "trick-o-treat bag" + desc = "A Pumpkin shaped bag that holds all sorts of goodies!" + icon = 'icons/obj/halloween_items.dmi' + icon_state = "treatbag" + +/obj/item/weapon/storage/spooky/New() + ..() + for(var/distrobuteinbag=0 to 5) + var/type = pick(/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookyskull, + /obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookycoffin, + /obj/item/weapon/reagent_containers/food/snacks/candy_corn, + /obj/item/weapon/reagent_containers/food/snacks/candy, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar) + new type(src) diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm index aa1497767fa..4efc4c100ce 100644 --- a/code/modules/events/ninja.dm +++ b/code/modules/events/ninja.dm @@ -365,10 +365,7 @@ ________________________________________________________________________________ var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src) equip_to_slot_or_del(R, slot_ears) - if(gender==FEMALE) - equip_to_slot_or_del(new /obj/item/clothing/under/color/blackf(src), slot_w_uniform) - else - equip_to_slot_or_del(new /obj/item/clothing/under/color/black(src), slot_w_uniform) + equip_to_slot_or_del(new /obj/item/clothing/under/color/black(src), slot_w_uniform) equip_to_slot_or_del(new /obj/item/clothing/shoes/space_ninja(src), slot_shoes) equip_to_slot_or_del(new /obj/item/clothing/suit/space/space_ninja(src), slot_wear_suit) equip_to_slot_or_del(new /obj/item/clothing/gloves/space_ninja(src), slot_gloves) @@ -384,6 +381,7 @@ ________________________________________________________________________________ var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(src) E.imp_in = src E.implanted = 1 + E.implanted(src) return 1 //=======//HELPER PROCS//=======// @@ -625,7 +623,7 @@ spideros = text2num(return_to)//Maximum length here is 6. Use (return_to, X) to var/mob/living/carbon/human/U = loc if(candrain&&!draining) var/turf/T = U.loc - if(isturf(T) && T.is_plating()) + if(isturf(T) && istype(T, /turf/simulated/floor/plating) attached = locate() in T if(!attached) U << "\red Warning: no exposed cable available." @@ -2209,9 +2207,8 @@ ________________________________________________________________________________ anim(U.loc,U,'icons/mob/mob.dmi',,"cloak",,U.dir) s_active=!s_active U.alpha = 0 - U << "You are now invisible to normal detection." - for(var/mob/O in oviewers(U)) - O.show_message("[U.name] vanishes into thin air!",1) + U.visible_message("[U.name] vanishes into thin air!", \ + "You are now invisible to normal detection.") return /obj/item/clothing/suit/space/space_ninja/proc/cancel_stealth() @@ -2221,9 +2218,8 @@ ________________________________________________________________________________ anim(U.loc,U,'icons/mob/mob.dmi',,"uncloak",,U.dir) s_active=!s_active U.alpha = 255 - U << "You are now visible." - for(var/mob/O in oviewers(U)) - O.show_message("[U.name] appears from thin air!",1) + U.visible_message("[U.name] appears from thin air!", \ + "You are now visible.") return 1 return 0 @@ -2612,147 +2608,143 @@ It is possible to destroy the net by the occupant or someone else. var/mob/living/affecting = null//Who it is currently affecting, if anyone. var/mob/living/master = null//Who shot web. Will let this person know if the net was successful or failed. - proc - healthcheck() - if(health <=0) - density = 0 - if(affecting) - var/mob/living/carbon/M = affecting - M.anchored = 0 - for(var/mob/O in viewers(src, 3)) - O.show_message(text("[] was recovered from the energy net!", M.name), 1, text("You hear a grunt."), 2) - if(!isnull(master))//As long as they still exist. - master << "ERROR: \black unable to initiate transport protocol. Procedure terminated." - qdel(src) - return - - process(var/mob/living/carbon/M as mob) - var/check = 30//30 seconds before teleportation. Could be extended I guess. - var/mob_name = affecting.name//Since they will report as null if terminated before teleport. - //The person can still try and attack the net when inside. - while(!isnull(M)&&!isnull(src)&&check>0)//While M and net exist, and 30 seconds have not passed. - check-- - sleep(10) - - if(isnull(M)||M.loc!=loc)//If mob is gone or not at the location. - if(!isnull(master))//As long as they still exist. - master << "ERROR: \black unable to locate \the [mob_name]. Procedure terminated." - qdel(src)//Get rid of the net. - return - - if(!isnull(src))//As long as both net and person exist. - //No need to check for countdown here since while() broke, it's implicit that it finished. - - density = 0//Make the net pass-through. - invisibility = 101//Make the net invisible so all the animations can play out. - health = INFINITY//Make the net invincible so that an explosion/something else won't kill it while, spawn() is running. - for(var/obj/item/W in M) - if(istype(M,/mob/living/carbon/human)) - if(W==M:w_uniform) continue//So all they're left with are shoes and uniform. - if(W==M:shoes) continue - M.unEquip(W) - - spawn(0) - playsound(M.loc, 'sound/effects/sparks4.ogg', 50, 1) - anim(M.loc,M,'icons/mob/mob.dmi',,"phaseout",,M.dir) - - M.loc = pick(holdingfacility)//Throw mob in to the holding facility. - M << "You appear in a strange place!" - - spawn(0) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, M.loc) - spark_system.start() - playsound(M.loc, 'sound/effects/phasein.ogg', 25, 1) - playsound(M.loc, 'sound/effects/sparks2.ogg', 50, 1) - anim(M.loc,M,'icons/mob/mob.dmi',,"phasein",,M.dir) - qdel(src)//Wait for everything to finish, delete the net. Else it will stop everything once net is deleted, including the spawn(0). - +/obj/effect/energy_net/proc/healthcheck() + if(health <=0) + density = 0 + if(affecting) + var/mob/living/carbon/M = affecting + M.anchored = 0 for(var/mob/O in viewers(src, 3)) - O.show_message(text("[] vanished!", M), 1, text("You hear sparks flying!"), 2) - + O.show_message("[M.name] was recovered from the energy net!", 1, "You hear a grunt.", 2) if(!isnull(master))//As long as they still exist. - master << "SUCCESS: \black transport procedure of \the [affecting] complete." + master << "ERROR: \black unable to initiate transport protocol. Procedure terminated." + qdel(src) + return - M.anchored = 0//Important. +/obj/effect/energy_net/process(var/mob/living/carbon/M as mob) + var/check = 30//30 seconds before teleportation. Could be extended I guess. + var/mob_name = affecting.name//Since they will report as null if terminated before teleport. + //The person can still try and attack the net when inside. + while(!isnull(M)&&!isnull(src)&&check>0)//While M and net exist, and 30 seconds have not passed. + check-- + sleep(10) - else//And they are free. - M << "You are free of the net!" + if(isnull(M)||M.loc!=loc)//If mob is gone or not at the location. + if(!isnull(master))//As long as they still exist. + master << "ERROR: \black unable to locate \the [mob_name]. Procedure terminated." + qdel(src)//Get rid of the net. return - bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - healthcheck() - ..() + if(!isnull(src))//As long as both net and person exist. + //No need to check for countdown here since while() broke, it's implicit that it finished. - ex_act(severity) - switch(severity) - if(1.0) - health-=50 - if(2.0) - health-=50 - if(3.0) - health-=prob(50)?50:25 - healthcheck() - return + density = 0//Make the net pass-through. + invisibility = 101//Make the net invisible so all the animations can play out. + health = INFINITY//Make the net invincible so that an explosion/something else won't kill it while, spawn() is running. + for(var/obj/item/W in M) + if(istype(M,/mob/living/carbon/human)) + if(W==M:w_uniform) continue//So all they're left with are shoes and uniform. + if(W==M:shoes) continue + M.unEquip(W) - blob_act() - health-=50 - healthcheck() - return + spawn(0) + playsound(M.loc, 'sound/effects/sparks4.ogg', 50, 1) + anim(M.loc,M,'icons/mob/mob.dmi',,"phaseout",,M.dir) - hitby(AM as mob|obj) - ..() - for(var/mob/O in viewers(src, null)) - O.show_message(text("[src] was hit by [AM]."), 1) - var/tforce = 0 - if(ismob(AM)) - tforce = 10 - else - tforce = AM:throwforce - playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) - health = max(0, health - tforce) - healthcheck() - ..() - return + M.loc = pick(holdingfacility)//Throw mob in to the holding facility. + M << "You appear in a strange place!" - attack_hand() - if (HULK in usr.mutations) - usr << text("You easily destroy the energy net.") - for(var/mob/O in oviewers(src)) - O.show_message(text("[] rips the energy net apart!", usr), 1) + spawn(0) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, M.loc) + spark_system.start() + playsound(M.loc, 'sound/effects/phasein.ogg', 25, 1) + playsound(M.loc, 'sound/effects/sparks2.ogg', 50, 1) + anim(M.loc,M,'icons/mob/mob.dmi',,"phasein",,M.dir) + qdel(src)//Wait for everything to finish, delete the net. Else it will stop everything once net is deleted, including the spawn(0). + + for(var/mob/O in viewers(src, 3)) + O.show_message("[M] vanished!", 1, "You hear sparks flying!", 2) + + if(!isnull(master))//As long as they still exist. + master << "SUCCESS: \black transport procedure of \the [affecting] complete." + + M.anchored = 0//Important. + + else//And they are free. + M << "You are free of the net!" + return + +/obj/effect/energy_net/bullet_act(var/obj/item/projectile/Proj) + health -= Proj.damage + healthcheck() + ..() + +/obj/effect/energy_net/ex_act(severity) + switch(severity) + if(1.0) health-=50 - healthcheck() - return + if(2.0) + health-=50 + if(3.0) + health-=prob(50)?50:25 + healthcheck() + return - attack_paw() - return attack_hand() +/obj/effect/energy_net/blob_act() + health-=50 + healthcheck() + return - attack_alien() - if (islarva(usr)) - return - usr << text("\green You claw at the net.") - for(var/mob/O in oviewers(src)) - O.show_message(text("[] claws at the energy net!", usr), 1) - playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) - health -= rand(10, 20) - if(health <= 0) - usr << text("\green You slice the energy net to pieces.") - for(var/mob/O in oviewers(src)) - O.show_message(text("[] slices the energy net apart!", usr), 1) - healthcheck() - return +/obj/effect/energy_net/hitby(AM as mob|obj) + ..() + visible_message("[src] was hit by [AM].") + var/tforce = 0 + if(ismob(AM)) + tforce = 10 + else + tforce = AM:throwforce + playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) + health = max(0, health - tforce) + healthcheck() + ..() + return - attackby(obj/item/weapon/W as obj, mob/user as mob) - var/aforce = W.force - health = max(0, health - aforce) - healthcheck() - ..() +/obj/effect/energy_net/attack_hand(mob/user) + if (HULK in user.mutations) + user.visible_message("[user] rips the energy net apart!", \ + "You easily destroy the energy net.") + health-=50 + healthcheck() + return + +/obj/effect/energy_net/attack_paw(mob/user) + return attack_hand() + +/obj/effect/energy_net/attack_alien(mob/user as mob) + if (islarva(user)) return + playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) + health -= rand(10, 20) + if(health > 0) + user.visible_message("[user] claws at the energy net!", \ + "\green You claw at the net.") + else + user.visible_message("[user] slices the energy net apart!", \ + "\green You slice the energy net to pieces.") + healthcheck() + return + +/obj/effect/energy_net/attackby(obj/item/weapon/W as obj, mob/user as mob) + var/aforce = W.force + health = max(0, health - aforce) + healthcheck() + ..() + return proc/create_ninja_mind(key) var/datum/mind/Mind = new /datum/mind(key) Mind.assigned_role = "MODE" Mind.special_role = "Space Ninja" ticker.mode.traitors |= Mind //Adds them to current traitor list. Which is really the extra antagonist list. - return Mind \ No newline at end of file + return Mind diff --git a/code/modules/events/wizard/fakeexplosion.dm b/code/modules/events/wizard/fakeexplosion.dm index 1424d63c18e..955fd7fd390 100644 --- a/code/modules/events/wizard/fakeexplosion.dm +++ b/code/modules/events/wizard/fakeexplosion.dm @@ -1,5 +1,5 @@ /datum/round_event_control/wizard/fake_explosion //Oh no the station is gone! - name = "Fake Explosion" + name = "Fake Nuclear Explosion" weight = 0 //Badmin exclusive now because once it's expected its not funny typepath = /datum/round_event/wizard/fake_explosion/ max_occurrences = 1 diff --git a/code/modules/events/wizard/greentext.dm b/code/modules/events/wizard/greentext.dm index 3d8b0f4ddca..e28a1a7026f 100644 --- a/code/modules/events/wizard/greentext.dm +++ b/code/modules/events/wizard/greentext.dm @@ -7,7 +7,7 @@ /datum/round_event/wizard/greentext/start() - var/list/holder_canadates = player_list + var/list/holder_canadates = player_list.Copy() for(var/mob/M in holder_canadates) if(!ishuman(M)) holder_canadates -= M diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 6f6700f9624..312635711ff 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -247,9 +247,8 @@ proc/check_panel(mob/M) /obj/effect/fake_attacker/attackby(var/obj/item/weapon/P as obj, mob/user as mob) step_away(src,my_target,2) - for(var/mob/M in oviewers(world.view,my_target)) - M << "[my_target] flails around wildly." - my_target.show_message("[src] has been attacked by [my_target] ", 1) //Lazy. + my_target.visible_message("[my_target] flails around wildly.", \ + "[src] has been attacked by [my_target] ") src.health -= P.force @@ -261,7 +260,7 @@ proc/check_panel(mob/M) step_away(src,my_target,2) if(prob(30)) for(var/mob/O in oviewers(world.view , my_target)) - O << "[my_target] stumbles around." + O << "[my_target] stumbles around." /obj/effect/fake_attacker/New() ..() @@ -349,7 +348,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite /obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\ /obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\ /obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\ - /obj/item/clothing/shoes/magboots, /obj/item/blueprints, /obj/item/weapon/disk/nuclear,\ + /obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\ /obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank) /proc/fake_attack(var/mob/living/target) diff --git a/code/modules/food&drinks/food/condiment.dm b/code/modules/food&drinks/food/condiment.dm index 21ec47ce544..7ef596d303a 100644 --- a/code/modules/food&drinks/food/condiment.dm +++ b/code/modules/food&drinks/food/condiment.dm @@ -6,7 +6,7 @@ //Food items that aren't eaten normally and leave an empty container behind. /obj/item/weapon/reagent_containers/food/condiment - name = "Condiment Container" + name = "condiment container" desc = "Just your average condiment container." icon = 'icons/obj/food.dmi' icon_state = "emptycondiment" @@ -14,7 +14,16 @@ possible_transfer_amounts = list(1,5,10) volume = 50 //Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change() to change names, descs and sprites. - var/list/possible_states = list("ketchup" = list("ketchup", "Ketchup", "You feel more American already."), "capsaicin" = list("hotsauce", "Hotsauce", "You can almost TASTE the stomach ulcers now!"), "enzyme" = list("enzyme", "Universal Enzyme", "Used in cooking various dishes"), "soysauce" = list("soysauce", "Soy Sauce", "A salty soy-based flavoring"), "frostoil" = list("coldsauce", "Coldsauce", "Leaves the tongue numb in it's passage"), "sodiumchloride" = list("saltshaker", "Salt Shaker", "Salt. From space oceans, presumably"), "blackpepper" = list("pepermillsmall", "Pepper Mill", "Often used to flavor food or make people sneeze"), "cornoil" = list("oliveoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), "sugar" = list("emptycondiment", "Sugar", "Tasty spacey sugar!")) + var/list/possible_states = list( + "ketchup" = list("ketchup", "ketchup bottle", "You feel more American already."), + "capsaicin" = list("hotsauce", "hotsauce bottle", "You can almost TASTE the stomach ulcers now!"), + "enzyme" = list("enzyme", "universal enzyme bottle", "Used in cooking various dishes"), + "soysauce" = list("soysauce", "soy sauce bottle", "A salty soy-based flavoring"), + "frostoil" = list("coldsauce", "coldsauce bottle", "Leaves the tongue numb in it's passage"), + "sodiumchloride" = list("saltshaker", "salt shaker", "Salt. From space oceans, presumably"), + "blackpepper" = list("pepermillsmall", "pepper mill", "Often used to flavor food or make people sneeze"), + "cornoil" = list("oliveoil", "corn oil bottle", "A delicious oil used in cooking. Made from corn"), + "sugar" = list("emptycondiment", "sugar bottle", "Tasty spacey sugar!")) /obj/item/weapon/reagent_containers/food/condiment/attackby(obj/item/weapon/W as obj, mob/user as mob) return @@ -41,10 +50,10 @@ playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) return 1 - else if( istype(M, /mob/living/carbon/human) ) - visible_message("[user] attempts to feed [M] [src].") + else + user.visible_message("[user] attempts to feed [M] from [src].") if(!do_mob(user, M)) return - visible_message("[user] feeds [M] [src].") + user.visible_message("[user] feeds [M] from [src].") add_logs(user, M, "fed", object="[reagentlist(src)]") @@ -98,7 +107,7 @@ desc = temp_list[3] else - name = "misc Condiment Bottle" + name = "condiment bottle" main_reagent = reagents.get_master_reagent_name() if (reagents.reagent_list.len==1) desc = "Looks like it is [lowertext(main_reagent)], but you are not sure." @@ -107,12 +116,12 @@ icon_state = "mixedcondiments" else icon_state = "emptycondiment" - name = "condiment Bottle" + name = "condiment bottle" desc = "An empty condiment bottle." return /obj/item/weapon/reagent_containers/food/condiment/enzyme - name = "Universal Enzyme" + name = "universal enzyme" desc = "Used in cooking various dishes." icon_state = "enzyme" @@ -127,7 +136,7 @@ reagents.add_reagent("sugar", 50) /obj/item/weapon/reagent_containers/food/condiment/saltshaker //Seperate from above since it's a small shaker rather then - name = "Salt Shaker" // a large one. + name = "salt shaker" // a large one. desc = "Salt. From space oceans, presumably." icon_state = "saltshakersmall" possible_transfer_amounts = list(1,20) //for clown turning the lid off @@ -139,7 +148,7 @@ reagents.add_reagent("sodiumchloride", 20) /obj/item/weapon/reagent_containers/food/condiment/peppermill - name = "Pepper Mill" + name = "pepper mill" desc = "Often used to flavor food or make people sneeze." icon_state = "peppermillsmall" possible_transfer_amounts = list(1,20) //for clown turning the lid off diff --git a/code/modules/food&drinks/food/snacks.dm b/code/modules/food&drinks/food/snacks.dm index 07eb64cbe03..3cdea87cb8e 100644 --- a/code/modules/food&drinks/food/snacks.dm +++ b/code/modules/food&drinks/food/snacks.dm @@ -182,12 +182,12 @@ if(isanimal(M)) if(iscorgi(M)) if(bitecount == 0 || prob(50)) - M.emote("nibbles away at the [src]") + M.emote("me", 1, "nibbles away at the [src]") bitecount++ if(bitecount >= 5) var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where the [src] was") if(sattisfaction_text) - M.emote("[sattisfaction_text]") + M.emote("me", 1, "[sattisfaction_text]") qdel(src) @@ -218,1020 +218,7 @@ // reagents.add_reagent("nutriment", 2) // this line of code for all the contents. // bitesize = 3 //This is the amount each bite consumes. - -////////////////////////////////////////////SALAD//////////////////////////////////////////// - -/obj/item/weapon/reagent_containers/food/snacks/aesirsalad - name = "\improper Aesir salad" - desc = "Probably too incredible for mortal men to fully enjoy." - icon_state = "aesirsalad" - trash = /obj/item/trash/snack_bowl - -/obj/item/weapon/reagent_containers/food/snacks/aesirsalad/New() - ..() - eatverb = pick("crunch","devour","nibble","gnaw","gobble","chomp") - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("tricordrazine", 8) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/herbsalad - name = "herb salad" - desc = "A tasty salad with apples on top." - icon_state = "herbsalad" - trash = /obj/item/trash/snack_bowl - -/obj/item/weapon/reagent_containers/food/snacks/herbsalad/New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/validsalad - name = "valid salad" - desc = "It's just an herb salad with meatballs and fried potato slices. Nothing suspicious about it." - icon_state = "validsalad" - trash = /obj/item/trash/snack_bowl - -/obj/item/weapon/reagent_containers/food/snacks/validsalad/New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("doctorsdelight", 5) - bitesize = 3 - -////////////////////////////////////////////DONUTS//////////////////////////////////////////// - - -/obj/item/weapon/reagent_containers/food/snacks/donut - name = "donut" - icon_state = "donut1" - -/obj/item/weapon/reagent_containers/food/snacks/donut/normal - desc = "Goes great with Robust Coffee." - -/obj/item/weapon/reagent_containers/food/snacks/donut/normal/New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - src.bitesize = 3 - if(prob(30)) - src.icon_state = "donut2" - src.name = "frosted donut" - reagents.add_reagent("sprinkles", 2) - -/obj/item/weapon/reagent_containers/food/snacks/donut/chaos - name = "chaos donut" - desc = "Like life, it never quite tastes the same." - -/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sprinkles", 1) - bitesize = 10 - switch(rand(1,10)) - if(1) - reagents.add_reagent("nutriment", 3) - if(2) - reagents.add_reagent("capsaicin", 3) - if(3) - reagents.add_reagent("frostoil", 3) - if(4) - reagents.add_reagent("sprinkles", 3) - if(5) - reagents.add_reagent("plasma", 3) - if(6) - reagents.add_reagent("coco", 3) - if(7) - reagents.add_reagent("slimejelly", 3) - if(8) - reagents.add_reagent("banana", 3) - if(9) - reagents.add_reagent("berryjuice", 3) - if(10) - reagents.add_reagent("tricordrazine", 3) - if(prob(30)) - icon_state = "donut2" - name = "frosted chaos donut" - reagents.add_reagent("sprinkles", 2) - - -/obj/item/weapon/reagent_containers/food/snacks/donut/jelly - name = "jelly donut" - desc = "You jelly?" - icon_state = "jdonut1" - bitesize = 5 - -/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("berryjuice", 5) - if(prob(30)) - icon_state = "jdonut2" - name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) - -/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly - name = "jelly donut" - desc = "You jelly?" - icon_state = "jdonut1" - bitesize = 5 - -/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("slimejelly", 5) - bitesize = 5 - if(prob(30)) - icon_state = "jdonut2" - name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) - -/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly - name = "jelly donut" - desc = "You jelly?" - icon_state = "jdonut1" - bitesize = 5 - -/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("cherryjelly", 5) - if(prob(30)) - icon_state = "jdonut2" - name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) - -////////////////////////////////////////////WAFFLES//////////////////////////////////////////// - -/obj/item/weapon/reagent_containers/food/snacks/waffles - name = "waffles" - desc = "Mmm, waffles." - icon_state = "waffles" - trash = /obj/item/trash/waffles - -/obj/item/weapon/reagent_containers/food/snacks/waffles/New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/soylentgreen - name = "\improper Soylent Green" - desc = "Not made of people. Honest." //Totally people. - icon_state = "soylent_green" - trash = /obj/item/trash/waffles - -/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/soylenviridians - name = "\improper Soylent Virdians" - desc = "Not made of people. Honest." //Actually honest for once. - icon_state = "soylent_yellow" - trash = /obj/item/trash/waffles - -/obj/item/weapon/reagent_containers/food/snacks/soylenviridians/New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles - name = "roffle waffles" - desc = "Waffles from Roffle. Co." - icon_state = "rofflewaffles" - trash = /obj/item/trash/waffles - -/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles/New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("mushroomhallucinogen", 8) - bitesize = 4 - -////////////////////////////////////////////FISH//////////////////////////////////////////// - -/obj/item/weapon/reagent_containers/food/snacks/cubancarp - name = "\improper Cuban carp" - desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!" - icon_state = "cubancarp" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/cubancarp/New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("carpotoxin", 3) - reagents.add_reagent("capsaicin", 3) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/carpmeat - name = "carp fillet" - desc = "A fillet of spess carp meat." - icon_state = "fishfillet" - -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/New() - ..() - eatverb = pick("bite","chew","choke down","gnaw","swallow","chomp") - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("carpotoxin", 3) - bitesize = 6 - -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/imitation - name = "imitation carp fillet" - desc = "Almost just like the real thing, kinda." - -/obj/item/weapon/reagent_containers/food/snacks/fishfingers - name = "fish fingers" - desc = "A finger of fish." - icon_state = "fishfingers" - -/obj/item/weapon/reagent_containers/food/snacks/fishfingers/New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("carpotoxin", 3) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/fishandchips - name = "fish and chips" - desc = "I do say so myself chap." - icon_state = "fishandchips" - -/obj/item/weapon/reagent_containers/food/snacks/fishandchips/New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("carpotoxin", 3) - bitesize = 3 - -////////////////////////////////////////////EGGS//////////////////////////////////////////// - -/obj/item/weapon/reagent_containers/food/snacks/chocolateegg - name = "chocolate egg" - desc = "Such, sweet, fattening food." - icon_state = "chocolateegg" - -/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sugar", 2) - reagents.add_reagent("coco", 2) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/egg - name = "egg" - desc = "An egg!" - icon_state = "egg" - -/obj/item/weapon/reagent_containers/food/snacks/egg/New() - ..() - reagents.add_reagent("nutriment", 1) - -/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/egg_smudge(src.loc) - reagents.reaction(hit_atom, TOUCH) - del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes. - -/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype( W, /obj/item/toy/crayon )) - var/obj/item/toy/crayon/C = W - var/clr = C.colourName - - if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow"))) - usr << "[src] refuses to take on this colour!" - return - - usr << "You colour [src] [clr]." - icon_state = "egg-[clr]" - item_color = clr - else - ..() - -/obj/item/weapon/reagent_containers/food/snacks/egg/blue - icon_state = "egg-blue" - item_color = "blue" - -/obj/item/weapon/reagent_containers/food/snacks/egg/green - icon_state = "egg-green" - item_color = "green" - -/obj/item/weapon/reagent_containers/food/snacks/egg/mime - icon_state = "egg-mime" - item_color = "mime" - -/obj/item/weapon/reagent_containers/food/snacks/egg/orange - icon_state = "egg-orange" - item_color = "orange" - -/obj/item/weapon/reagent_containers/food/snacks/egg/purple - icon_state = "egg-purple" - item_color = "purple" - -/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow - icon_state = "egg-rainbow" - item_color = "rainbow" - -/obj/item/weapon/reagent_containers/food/snacks/egg/red - icon_state = "egg-red" - item_color = "red" - -/obj/item/weapon/reagent_containers/food/snacks/egg/yellow - icon_state = "egg-yellow" - item_color = "yellow" - -/obj/item/weapon/reagent_containers/food/snacks/friedegg - name = "fried egg" - desc = "A fried egg, with a touch of salt and pepper." - icon_state = "friedegg" - -/obj/item/weapon/reagent_containers/food/snacks/friedegg/New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("blackpepper", 1) - bitesize = 1 - -/obj/item/weapon/reagent_containers/food/snacks/boiledegg - name = "boiled egg" - desc = "A hard boiled egg." - icon_state = "egg" - -/obj/item/weapon/reagent_containers/food/snacks/boiledegg/New() - ..() - reagents.add_reagent("nutriment", 2) - -/obj/item/weapon/reagent_containers/food/snacks/omelette //FUCK THIS - name = "omelette du fromage" - desc = "That's all you can say!" - icon_state = "omelette" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/omelette/New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 1 - -/obj/item/weapon/reagent_containers/food/snacks/omelette/attackby(obj/item/weapon/W, mob/user) - if(istype(W,/obj/item/weapon/kitchen/utensil/fork)) - if(W.icon_state == "forkloaded") - user << "You already have omelette on your fork." - return - W.icon_state = "forkloaded" - user.visible_message( \ - "[user] takes a piece of omelette with their fork!", \ - "You take a piece of omelette with your fork!" \ - ) - reagents.remove_reagent("nutriment", 1) - if(reagents.total_volume <= 0) - qdel(src) - -/obj/item/weapon/reagent_containers/food/snacks/benedict - name = "eggs benedict" - desc = "There is only one egg on this, how rude." - icon_state = "benedict" - -/obj/item/weapon/reagent_containers/food/snacks/benedict/New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 3 - -////////////////////////////////////////////MUFFINS//////////////////////////////////////////// - -/obj/item/weapon/reagent_containers/food/snacks/muffin - name = "muffin" - desc = "A delicious and spongy little cake." - icon_state = "muffin" - -/obj/item/weapon/reagent_containers/food/snacks/muffin/New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/muffin/berry - name = "berry muffin" - icon_state = "berrymuffin" - desc = "A delicious and spongy little cake, with berries." - -/obj/item/weapon/reagent_containers/food/snacks/muffin/booberry - name = "booberry muffin" - icon_state = "berrymuffin" - alpha = 125 - desc = "My stomach is a graveyard! No living being can quench my bloodthirst!" - -////////////////////////////////////////////OTHER//////////////////////////////////////////// - -/obj/item/weapon/reagent_containers/food/snacks/candy - name = "candy" - desc = "Nougat love it or hate it." - icon_state = "candy" - trash = /obj/item/trash/candy - -/obj/item/weapon/reagent_containers/food/snacks/candy/New() - ..() - reagents.add_reagent("nutriment", 1) - reagents.add_reagent("sugar", 3) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/candy_corn - name = "candy corn" - desc = "It's a handful of candy corn. Can be stored in a detective's hat." - icon_state = "candy_corn" - -/obj/item/weapon/reagent_containers/food/snacks/candy_corn/New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sugar", 2) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/chips - name = "chips" - desc = "Commander Riker's What-The-Crisps" - icon_state = "chips" - trash = /obj/item/trash/chips - -/obj/item/weapon/reagent_containers/food/snacks/chips/New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 1 - -/obj/item/weapon/reagent_containers/food/snacks/cookie - name = "cookie" - desc = "COOKIE!!!" - icon_state = "COOKIE!!!" - -/obj/item/weapon/reagent_containers/food/snacks/cookie/New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 1 - -/obj/item/weapon/reagent_containers/food/snacks/chocolatebar - name = "chocolate bar" - desc = "Such, sweet, fattening food." - icon_state = "chocolatebarunwrapped" - wrapped = 0 - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("sugar", 2) - reagents.add_reagent("coco", 2) - -/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/attack_self(mob/user) - if(wrapped) - Unwrap(user) - else - ..() - -/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/proc/Unwrap(mob/user) - icon_state = "chocolatebarunwrapped" - desc = "It won't make you all sticky." - user << "You remove the foil." - wrapped = 0 - - -/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/wrapped - desc = "It's wrapped in some foil." - icon_state = "chocolatebar" - wrapped = 1 - -/obj/item/weapon/reagent_containers/food/snacks/tofu - name = "tofu" - desc = "We all love tofu." - icon_state = "tofu" - -/obj/item/weapon/reagent_containers/food/snacks/tofu/New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice - name = "huge mushroom slice" - desc = "A slice from a huge mushroom." - icon_state = "hugemushroomslice" - -/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/New() - ..() - reagents.add_reagent("nutriment", 3) - src.bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/tomatomeat - name = "tomato slice" - desc = "A slice from a huge tomato." - icon_state = "tomatomeat" - -/obj/item/weapon/reagent_containers/food/snacks/tomatomeat/New() - ..() - reagents.add_reagent("nutriment", 3) - src.bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/bearmeat - name = "bear meat" - desc = "A very manly slab of meat." - icon_state = "bearmeat" - -/obj/item/weapon/reagent_containers/food/snacks/bearmeat/New() - ..() - reagents.add_reagent("nutriment", 12) - reagents.add_reagent("hyperzine", 5) - src.bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/xenomeat - name = "meat" - desc = "A slab of meat" - icon_state = "xenomeat" - -/obj/item/weapon/reagent_containers/food/snacks/xenomeat/New() - ..() - reagents.add_reagent("nutriment", 3) - src.bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/spidermeat - name = "spider meat" - desc = "A slab of spider meat." - icon_state = "spidermeat" - -/obj/item/weapon/reagent_containers/food/snacks/spidermeat/New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("toxin", 3) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/spiderleg - name = "spider leg" - desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?" - icon_state = "spiderleg" - -/obj/item/weapon/reagent_containers/food/snacks/spiderleg/New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("toxin", 2) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/cornedbeef - name = "corned beef and cabbage" - desc = "Now you can feel like a real tourist vacationing in Ireland." - icon_state = "cornedbeef" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/cornedbeef/New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/faggot - name = "faggot" - desc = "A great meal all round. Not a cord of wood." - icon_state = "faggot" - -/obj/item/weapon/reagent_containers/food/snacks/faggot/New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/sausage - name = "sausage" - desc = "A piece of mixed, long meat." - icon_state = "sausage" - -/obj/item/weapon/reagent_containers/food/snacks/sausage/New() - ..() - eatverb = pick("bite","chew","nibble","deep throat","gobble","chomp") - reagents.add_reagent("nutriment", 6) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/donkpocket - name = "\improper Donk-pocket" - desc = "The food of choice for the seasoned traitor." - icon_state = "donkpocket" - var/warm = 0 - -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/New() - ..() - reagents.add_reagent("nutriment", 4) - - - -/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime() //Not working, derp? - if(warm) - spawn(4200) //ew - warm = 0 - reagents.del_reagent("tricordrazine") - name = initial(name) - return - -/obj/item/weapon/reagent_containers/food/snacks/wingfangchu - name = "wing fang chu" - desc = "A savory dish of alien wing wang in soy." - icon_state = "wingfangchu" - trash = /obj/item/trash/snack_bowl - -/obj/item/weapon/reagent_containers/food/snacks/wingfangchu/New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/human/kebab - name = "-kebab" - icon_state = "kebab" - desc = "A human meat, on a stick." - trash = /obj/item/stack/rods - -/obj/item/weapon/reagent_containers/food/snacks/human/kebab/New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/monkeykebab - name = "meat-kebab" - icon_state = "kebab" - desc = "Delicious meat, on a stick." - trash = /obj/item/stack/rods - -/obj/item/weapon/reagent_containers/food/snacks/monkeykebab/New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/tofukebab - name = "tofu-kebab" - icon_state = "kebab" - desc = "Vegan meat, on a stick." - trash = /obj/item/stack/rods - -/obj/item/weapon/reagent_containers/food/snacks/tofukebab/New() - ..() - reagents.add_reagent("nutriment", 8) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/popcorn - name = "popcorn" - desc = "Now let's find some cinema." - icon_state = "popcorn" - trash = /obj/item/trash/popcorn - var/unpopped = 0 - -/obj/item/weapon/reagent_containers/food/snacks/popcorn/New() - ..() - eatverb = pick("bite","crunch","nibble","gnaw","gobble","chomp") - unpopped = rand(1,10) - reagents.add_reagent("nutriment", 2) - bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0 - -/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume() - if(prob(unpopped)) //lol ...what's the point? << AINT SO POINTLESS NO MORE - usr << "You bite down on an un-popped kernel, and it hurts your teeth!" - unpopped = max(0, unpopped-1) - reagents.add_reagent("sacid",0.1) //only a little tingle. - ..() - - -/obj/item/weapon/reagent_containers/food/snacks/sosjerky - name = "\improper Scaredy's Private Reserve Beef Jerky" - icon_state = "sosjerky" - desc = "Beef jerky made from the finest space cows." - trash = /obj/item/trash/sosjerky - -/obj/item/weapon/reagent_containers/food/snacks/sosjerky/New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/no_raisin - name = "4no raisins" - icon_state = "4no_raisins" - desc = "Best raisins in the universe. Not sure why." - trash = /obj/item/trash/raisins - -/obj/item/weapon/reagent_containers/food/snacks/no_raisin/New() - ..() - reagents.add_reagent("nutriment", 6) - -/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie - name = "space twinkie" - icon_state = "space_twinkie" - desc = "Guaranteed to survive longer than you will." - -/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie/New() - ..() - reagents.add_reagent("sugar", 4) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers - name = "cheesie honkers" - desc = "Bite sized cheesie snacks that will honk all over your mouth." - icon_state = "cheesie_honkers" - trash = /obj/item/trash/cheesie - -/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers/New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/syndicake - name = "syndi-cakes" - icon_state = "syndi_cakes" - desc = "An extremely moist snack cake that tastes just as good after being nuked." - trash = /obj/item/trash/syndi_cakes - -/obj/item/weapon/reagent_containers/food/snacks/syndicake/New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("doctorsdelight", 5) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato - name = "loaded baked potato" - desc = "Totally baked." - icon_state = "loadedbakedpotato" - -/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato/New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/fries - name = "space fries" - desc = "AKA: French Fries, Freedom Fries, etc." - icon_state = "fries" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/fries/New() - ..() - reagents.add_reagent("nutriment", 4) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/soydope - name = "soy dope" - desc = "Dope from a soy." - icon_state = "soydope" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/soydope/New() - ..() - reagents.add_reagent("nutriment", 2) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/cheesyfries - name = "cheesy fries" - desc = "Fries. Covered in cheese. Duh." - icon_state = "cheesyfries" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/cheesyfries/New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/fortunecookie - name = "fortune cookie" - desc = "A true prophecy in each cookie!" - icon_state = "fortune_cookie" - -/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/badrecipe - name = "burned mess" - desc = "Someone should be demoted from chef for this." - icon_state = "badrecipe" - -/obj/item/weapon/reagent_containers/food/snacks/badrecipe/New() - ..() - eatverb = pick("choke down","nibble","gnaw","chomp") - reagents.add_reagent("toxin", 1) - reagents.add_reagent("carbon", 3) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/meatsteak - name = "meat steak" - desc = "A piece of hot spicy meat." - icon_state = "meatsteak" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/meatsteak/New() - ..() - reagents.add_reagent("nutriment", 4) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("blackpepper", 1) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff - name = "spacy liberty duff" - desc = "Jello gelatin, from Alfred Hubbard's cookbook." - icon_state = "spacylibertyduff" - trash = /obj/item/trash/snack_bowl - -/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff/New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("mushroomhallucinogen", 6) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/amanitajelly - name = "amanita jelly" - desc = "Looks curiously toxic." - icon_state = "amanitajelly" - trash = /obj/item/trash/snack_bowl - -/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("amatoxin", 6) - reagents.add_reagent("mushroomhallucinogen", 3) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/poppypretzel - name = "poppy pretzel" - desc = "It's all twisted up!" - icon_state = "poppypretzel" - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/poppypretzel/New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 2 - -/* No more of this -/obj/item/weapon/reagent_containers/food/snacks/telebacon - name = "tele bacon" - desc = "It tastes a little odd but it is still delicious." - icon_state = "bacon" - var/obj/item/device/radio/beacon/bacon/baconbeacon - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/telebacon/New() - ..() - reagents.add_reagent("nutriment", 4) - baconbeacon = new /obj/item/device/radio/beacon/bacon(src) -/obj/item/weapon/reagent_containers/food/snacks/telebacon/On_Consume() - if(!reagents.total_volume) - baconbeacon.loc = usr - baconbeacon.digest_delay() -*/ - -/obj/item/weapon/reagent_containers/food/snacks/monkeycube - name = "monkey cube" - desc = "Just add water!" - icon_state = "monkeycube" - bitesize = 12 - wrapped = 0 - -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New() - ..() - reagents.add_reagent("nutriment",10) - -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user,proximity) - if(!proximity) return - if(istype(O,/obj/structure/sink) && !wrapped) - user << "You place [src] under a stream of water..." - user.drop_item() - loc = get_turf(O) - return Expand() - ..() - -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user) - if(wrapped) - Unwrap(user) - -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand() - visible_message("[src] expands!") - new /mob/living/carbon/monkey(get_turf(src)) - qdel(src) - -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user) - icon_state = "monkeycube" - desc = "Just add water!" - user << "You unwrap the cube." - wrapped = 0 - - -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped - desc = "Still wrapped in some paper." - icon_state = "monkeycubewrap" - wrapped = 1 - -/obj/item/weapon/reagent_containers/food/snacks/enchiladas - name = "enchiladas" - desc = "Viva La Mexico!" - icon_state = "enchiladas" - -/obj/item/weapon/reagent_containers/food/snacks/enchiladas/New() - ..() - reagents.add_reagent("nutriment",8) - reagents.add_reagent("capsaicin", 6) - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/stew - name = "stew" - desc = "A nice and warm stew. Healthy and strong." - icon_state = "stew" - trash = /obj/item/trash/snack_bowl - -/obj/item/weapon/reagent_containers/food/snacks/stew/New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 10) - reagents.add_reagent("tomatojuice", 5) - reagents.add_reagent("imidazoline", 5) - reagents.add_reagent("water", 5) - bitesize = 10 - -/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat - name = "stewed soy meat" - desc = "Even non-vegetarians will LOVE this!" - icon_state = "stewedsoymeat" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat/New() - ..() - eatverb = pick("slurp","sip","suck","inhale","drink") - reagents.add_reagent("nutriment", 8) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/carrotfries - name = "carrot fries" - desc = "Tasty fries from fresh Carrots." - icon_state = "carrotfries" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/carrotfries/New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("imidazoline", 3) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/candiedapple - name = "candied apple" - desc = "An apple coated in sugary sweetness." - icon_state = "candiedapple" - -/obj/item/weapon/reagent_containers/food/snacks/candiedapple/New() - ..() - reagents.add_reagent("nutriment", 3) - bitesize = 3 - -/* -/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore - name = "Boiled slime Core" - desc = "A boiled red thing." - icon_state = "boiledslimecore" - -/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore/New() - ..() - reagents.add_reagent("slimejelly", 5) - bitesize = 3 -*/ -/obj/item/weapon/reagent_containers/food/snacks/mint - name = "mint" - desc = "it is only wafer thin." - icon_state = "mint" - -/obj/item/weapon/reagent_containers/food/snacks/mint/New() - ..() - reagents.add_reagent("minttoxin", 1) - bitesize = 1 - -/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit - name = "plump helmet biscuit" - desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour." - icon_state = "phelmbiscuit" - -/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/New() - ..() - if(prob(10)) - name = "exceptional plump helmet biscuit" - desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("tricordrazine", 5) - bitesize = 2 - else - reagents.add_reagent("nutriment", 5) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/chawanmushi - name = "chawanmushi" - desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat." - icon_state = "chawanmushi" - trash = /obj/item/trash/snack_bowl - -/obj/item/weapon/reagent_containers/food/snacks/chawanmushi/New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 1 - -/obj/item/weapon/reagent_containers/food/snacks/appletart - name = "golden apple streusel tart" - desc = "A tasty dessert that won't make it through a metal detector." - icon_state = "gappletart" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/appletart/New() - ..() - reagents.add_reagent("nutriment", 8) - reagents.add_reagent("gold", 5) - bitesize = 3 +//All foods (except slicable, since they have unique procs) are distributed among various categories. Use common sense. /////////////////////////////////////////////////Sliceable//////////////////////////////////////// // All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels @@ -1278,115 +265,4 @@ name = "watermelon slice" desc = "A slice of watery goodness." icon_state = "watermelonslice" - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/cracker - name = "cracker" - desc = "It's a salted cracker." - icon_state = "cracker" - -/obj/item/weapon/reagent_containers/food/snacks/cracker/New() - ..() - reagents.add_reagent("nutriment", 1) - - -////////////////////////////////FOOD ADDITIONS//////////////////////////////////////////// - -/obj/item/weapon/reagent_containers/food/snacks/wrap - name = "egg wrap" - desc = "The precursor to Pigs in a Blanket." - icon_state = "wrap" - -/obj/item/weapon/reagent_containers/food/snacks/wrap/New() - ..() - reagents.add_reagent("nutriment", 5) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/beans - name = "tin of beans" - desc = "Musical fruit in a slightly less musical container." - icon_state = "beans" - -/obj/item/weapon/reagent_containers/food/snacks/beans/New() - ..() - reagents.add_reagent("nutriment", 10) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/hotdog - name = "hotdog" - desc = "Fresh footlong ready to go down on." - icon_state = "hotdog" - -/obj/item/weapon/reagent_containers/food/snacks/hotdog/New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("ketchup", 3) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/meatbun - name = "meat bun" - desc = "Has the potential to not be Dog." - icon_state = "meatbun" - -/obj/item/weapon/reagent_containers/food/snacks/meatbun/New() - ..() - reagents.add_reagent("nutriment", 6) - bitesize = 6 - -/obj/item/weapon/reagent_containers/food/snacks/sugarcookie - name = "sugar cookie" - desc = "Just like your little sister used to make." - icon_state = "sugarcookie" - -/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("sugar", 5) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg - name = "boiled spider leg" - desc = "A giant spider's leg that's still twitching after being cooked. Gross!" - icon_state = "spiderlegcooked" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg/New() - ..() - reagents.add_reagent("nutriment", 3) - reagents.add_reagent("toxin", 2) - bitesize = 3 - -/obj/item/weapon/reagent_containers/food/snacks/spidereggs - name = "spider eggs" - desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health." - icon_state = "spidereggs" - -/obj/item/weapon/reagent_containers/food/snacks/spidereggs/New() - ..() - reagents.add_reagent("nutriment", 2) - reagents.add_reagent("toxin", 3) - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/spidereggsham - name = "green eggs and ham" - desc = "Would you eat them on a train? Would you eat them on a plane? Would you eat them on a state of the art corporate deathtrap floating through space?" - icon_state = "spidereggsham" - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/spidereggsham/New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("sodiumchloride", 1) - reagents.add_reagent("toxin", 3) - bitesize = 4 - -/obj/item/weapon/reagent_containers/food/snacks/sashimi - name = "carp sashimi" - desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself." - icon_state = "sashimi" - -/obj/item/weapon/reagent_containers/food/snacks/sashimi/New() - ..() - reagents.add_reagent("nutriment", 6) - reagents.add_reagent("toxin", 5) - bitesize = 3 + bitesize = 2 \ No newline at end of file diff --git a/code/modules/food&drinks/food/snacks/meat.dm b/code/modules/food&drinks/food/snacks/meat.dm index 91b2c27b243..9397cd6b40f 100644 --- a/code/modules/food&drinks/food/snacks/meat.dm +++ b/code/modules/food&drinks/food/snacks/meat.dm @@ -61,6 +61,11 @@ icon_state = "skeletonmeat" desc = "There's a point where this needs to stop and clearly we have passed it" +/obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/zombie + name = "-meat (rotten)" + icon_state = "lizardmeat" //Close enough. + desc = "Halfway to becoming fertilizer for your garden." + /obj/item/weapon/reagent_containers/food/snacks/meat/monkey //same as plain meat diff --git a/code/modules/food&drinks/food/snacks_egg.dm b/code/modules/food&drinks/food/snacks_egg.dm new file mode 100644 index 00000000000..fccf13f8e11 --- /dev/null +++ b/code/modules/food&drinks/food/snacks_egg.dm @@ -0,0 +1,132 @@ + +////////////////////////////////////////////EGGS//////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/chocolateegg + name = "chocolate egg" + desc = "Such, sweet, fattening food." + icon_state = "chocolateegg" + +/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("sugar", 2) + reagents.add_reagent("coco", 2) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/egg + name = "egg" + desc = "An egg!" + icon_state = "egg" + +/obj/item/weapon/reagent_containers/food/snacks/egg/New() + ..() + reagents.add_reagent("nutriment", 1) + +/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) + ..() + new/obj/effect/decal/cleanable/egg_smudge(src.loc) + reagents.reaction(hit_atom, TOUCH) + del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes. + +/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype( W, /obj/item/toy/crayon )) + var/obj/item/toy/crayon/C = W + var/clr = C.colourName + + if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow"))) + usr << "[src] refuses to take on this colour!" + return + + usr << "You colour [src] [clr]." + icon_state = "egg-[clr]" + item_color = clr + else + ..() + +/obj/item/weapon/reagent_containers/food/snacks/egg/blue + icon_state = "egg-blue" + item_color = "blue" + +/obj/item/weapon/reagent_containers/food/snacks/egg/green + icon_state = "egg-green" + item_color = "green" + +/obj/item/weapon/reagent_containers/food/snacks/egg/mime + icon_state = "egg-mime" + item_color = "mime" + +/obj/item/weapon/reagent_containers/food/snacks/egg/orange + icon_state = "egg-orange" + item_color = "orange" + +/obj/item/weapon/reagent_containers/food/snacks/egg/purple + icon_state = "egg-purple" + item_color = "purple" + +/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow + icon_state = "egg-rainbow" + item_color = "rainbow" + +/obj/item/weapon/reagent_containers/food/snacks/egg/red + icon_state = "egg-red" + item_color = "red" + +/obj/item/weapon/reagent_containers/food/snacks/egg/yellow + icon_state = "egg-yellow" + item_color = "yellow" + +/obj/item/weapon/reagent_containers/food/snacks/friedegg + name = "fried egg" + desc = "A fried egg, with a touch of salt and pepper." + icon_state = "friedegg" + +/obj/item/weapon/reagent_containers/food/snacks/friedegg/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("sodiumchloride", 1) + reagents.add_reagent("blackpepper", 1) + bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/boiledegg + name = "boiled egg" + desc = "A hard boiled egg." + icon_state = "egg" + +/obj/item/weapon/reagent_containers/food/snacks/boiledegg/New() + ..() + reagents.add_reagent("nutriment", 2) + +/obj/item/weapon/reagent_containers/food/snacks/omelette //FUCK THIS + name = "omelette du fromage" + desc = "That's all you can say!" + icon_state = "omelette" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/omelette/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/omelette/attackby(obj/item/weapon/W, mob/user) + if(istype(W,/obj/item/weapon/kitchen/utensil/fork)) + if(W.icon_state == "forkloaded") + user << "You already have omelette on your fork." + return + W.icon_state = "forkloaded" + user.visible_message( \ + "[user] takes a piece of omelette with their fork!", \ + "You take a piece of omelette with your fork!" \ + ) + reagents.remove_reagent("nutriment", 1) + if(reagents.total_volume <= 0) + qdel(src) + +/obj/item/weapon/reagent_containers/food/snacks/benedict + name = "eggs benedict" + desc = "There is only one egg on this, how rude." + icon_state = "benedict" + +/obj/item/weapon/reagent_containers/food/snacks/benedict/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 3 diff --git a/code/modules/food&drinks/food/snacks_meat.dm b/code/modules/food&drinks/food/snacks_meat.dm new file mode 100644 index 00000000000..2402a138050 --- /dev/null +++ b/code/modules/food&drinks/food/snacks_meat.dm @@ -0,0 +1,346 @@ +//Not only meat, actually, but also snacks that are almost meat, such as fish meat or tofu + + +////////////////////////////////////////////FISH//////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/cubancarp + name = "\improper Cuban carp" + desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!" + icon_state = "cubancarp" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/cubancarp/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("carpotoxin", 3) + reagents.add_reagent("capsaicin", 3) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/carpmeat + name = "carp fillet" + desc = "A fillet of spess carp meat." + icon_state = "fishfillet" + +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/New() + ..() + eatverb = pick("bite","chew","choke down","gnaw","swallow","chomp") + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("carpotoxin", 3) + bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/imitation + name = "imitation carp fillet" + desc = "Almost just like the real thing, kinda." + +/obj/item/weapon/reagent_containers/food/snacks/fishfingers + name = "fish fingers" + desc = "A finger of fish." + icon_state = "fishfingers" + +/obj/item/weapon/reagent_containers/food/snacks/fishfingers/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("carpotoxin", 3) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/fishandchips + name = "fish and chips" + desc = "I do say so myself chap." + icon_state = "fishandchips" + +/obj/item/weapon/reagent_containers/food/snacks/fishandchips/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("carpotoxin", 3) + bitesize = 3 + +////////////////////////////////////////////MEATS AND ALIKE//////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/tofu + name = "tofu" + desc = "We all love tofu." + icon_state = "tofu" + +/obj/item/weapon/reagent_containers/food/snacks/tofu/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 3 + + +/obj/item/weapon/reagent_containers/food/snacks/tomatomeat + name = "tomato slice" + desc = "A slice from a huge tomato." + icon_state = "tomatomeat" + +/obj/item/weapon/reagent_containers/food/snacks/tomatomeat/New() + ..() + reagents.add_reagent("nutriment", 3) + src.bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/bearmeat + name = "bear meat" + desc = "A very manly slab of meat." + icon_state = "bearmeat" + +/obj/item/weapon/reagent_containers/food/snacks/bearmeat/New() + ..() + reagents.add_reagent("nutriment", 12) + reagents.add_reagent("hyperzine", 5) + src.bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/xenomeat + name = "meat" + desc = "A slab of meat" + icon_state = "xenomeat" + +/obj/item/weapon/reagent_containers/food/snacks/xenomeat/New() + ..() + reagents.add_reagent("nutriment", 3) + src.bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/spidermeat + name = "spider meat" + desc = "A slab of spider meat." + icon_state = "spidermeat" + +/obj/item/weapon/reagent_containers/food/snacks/spidermeat/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("toxin", 3) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/spiderleg + name = "spider leg" + desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?" + icon_state = "spiderleg" + +/obj/item/weapon/reagent_containers/food/snacks/spiderleg/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("toxin", 2) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/cornedbeef + name = "corned beef and cabbage" + desc = "Now you can feel like a real tourist vacationing in Ireland." + icon_state = "cornedbeef" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/cornedbeef/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/faggot + name = "faggot" + desc = "A great meal all round. Not a cord of wood." + icon_state = "faggot" + +/obj/item/weapon/reagent_containers/food/snacks/faggot/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sausage + name = "sausage" + desc = "A piece of mixed, long meat." + icon_state = "sausage" + +/obj/item/weapon/reagent_containers/food/snacks/sausage/New() + ..() + eatverb = pick("bite","chew","nibble","deep throat","gobble","chomp") + reagents.add_reagent("nutriment", 6) + bitesize = 2 + + +/obj/item/weapon/reagent_containers/food/snacks/wingfangchu + name = "wing fang chu" + desc = "A savory dish of alien wing wang in soy." + icon_state = "wingfangchu" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/wingfangchu/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/human/kebab + name = "-kebab" + icon_state = "kebab" + desc = "A human meat, on a stick." + trash = /obj/item/stack/rods + +/obj/item/weapon/reagent_containers/food/snacks/human/kebab/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/monkeykebab + name = "meat-kebab" + icon_state = "kebab" + desc = "Delicious meat, on a stick." + trash = /obj/item/stack/rods + +/obj/item/weapon/reagent_containers/food/snacks/monkeykebab/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/tofukebab + name = "tofu-kebab" + icon_state = "kebab" + desc = "Vegan meat, on a stick." + trash = /obj/item/stack/rods + +/obj/item/weapon/reagent_containers/food/snacks/tofukebab/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/meatsteak + name = "meat steak" + desc = "A piece of hot spicy meat." + icon_state = "meatsteak" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/meatsteak/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("sodiumchloride", 1) + reagents.add_reagent("blackpepper", 1) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/monkeycube + name = "monkey cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + wrapped = 0 + +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New() + ..() + reagents.add_reagent("nutriment",10) + +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user,proximity) + if(!proximity) return + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [src] under a stream of water..." + user.drop_item() + loc = get_turf(O) + return Expand() + ..() + +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user) + if(wrapped) + Unwrap(user) + +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand() + visible_message("[src] expands!") + new /mob/living/carbon/monkey(get_turf(src)) + qdel(src) + +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + + +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 + +/obj/item/weapon/reagent_containers/food/snacks/enchiladas + name = "enchiladas" + desc = "Viva La Mexico!" + icon_state = "enchiladas" + +/obj/item/weapon/reagent_containers/food/snacks/enchiladas/New() + ..() + reagents.add_reagent("nutriment",8) + reagents.add_reagent("capsaicin", 6) + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/stew + name = "stew" + desc = "A nice and warm stew. Healthy and strong." + icon_state = "stew" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/stew/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 10) + reagents.add_reagent("tomatojuice", 5) + reagents.add_reagent("imidazoline", 5) + reagents.add_reagent("water", 5) + bitesize = 10 + +/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat + name = "stewed soy meat" + desc = "Even non-vegetarians will LOVE this!" + icon_state = "stewedsoymeat" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat/New() + ..() + eatverb = pick("slurp","sip","suck","inhale","drink") + reagents.add_reagent("nutriment", 8) + bitesize = 2 + + +/* No more of this +/obj/item/weapon/reagent_containers/food/snacks/telebacon + name = "tele bacon" + desc = "It tastes a little odd but it is still delicious." + icon_state = "bacon" + var/obj/item/device/radio/beacon/bacon/baconbeacon + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/telebacon/New() + ..() + reagents.add_reagent("nutriment", 4) + baconbeacon = new /obj/item/device/radio/beacon/bacon(src) +/obj/item/weapon/reagent_containers/food/snacks/telebacon/On_Consume() + if(!reagents.total_volume) + baconbeacon.loc = usr + baconbeacon.digest_delay() +*/ + + +/obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg + name = "boiled spider leg" + desc = "A giant spider's leg that's still twitching after being cooked. Gross!" + icon_state = "spiderlegcooked" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("toxin", 2) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/spidereggsham + name = "green eggs and ham" + desc = "Would you eat them on a train? Would you eat them on a plane? Would you eat them on a state of the art corporate deathtrap floating through space?" + icon_state = "spidereggsham" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/spidereggsham/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("sodiumchloride", 1) + reagents.add_reagent("toxin", 3) + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/sashimi + name = "carp sashimi" + desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself." + icon_state = "sashimi" + +/obj/item/weapon/reagent_containers/food/snacks/sashimi/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("toxin", 5) + bitesize = 3 diff --git a/code/modules/food&drinks/food/snacks_other.dm b/code/modules/food&drinks/food/snacks_other.dm new file mode 100644 index 00000000000..4a4380cfeea --- /dev/null +++ b/code/modules/food&drinks/food/snacks_other.dm @@ -0,0 +1,232 @@ + +////////////////////////////////////////////OTHER//////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/candy_corn + name = "candy corn" + desc = "It's a handful of candy corn. Can be stored in a detective's hat." + icon_state = "candy_corn" + +/obj/item/weapon/reagent_containers/food/snacks/candy_corn/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("sugar", 2) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/chocolatebar + name = "chocolate bar" + desc = "Such, sweet, fattening food." + icon_state = "chocolatebarunwrapped" + wrapped = 0 + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sugar", 2) + reagents.add_reagent("coco", 2) + +/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/attack_self(mob/user) + if(wrapped) + Unwrap(user) + else + ..() + +/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/proc/Unwrap(mob/user) + icon_state = "chocolatebarunwrapped" + desc = "It won't make you all sticky." + user << "You remove the foil." + wrapped = 0 + + +/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/wrapped + desc = "It's wrapped in some foil." + icon_state = "chocolatebar" + wrapped = 1 + +/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice + name = "huge mushroom slice" + desc = "A slice from a huge mushroom." + icon_state = "hugemushroomslice" + +/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/New() + ..() + reagents.add_reagent("nutriment", 3) + src.bitesize = 3 + + +/obj/item/weapon/reagent_containers/food/snacks/popcorn + name = "popcorn" + desc = "Now let's find some cinema." + icon_state = "popcorn" + trash = /obj/item/trash/popcorn + var/unpopped = 0 + +/obj/item/weapon/reagent_containers/food/snacks/popcorn/New() + ..() + eatverb = pick("bite","crunch","nibble","gnaw","gobble","chomp") + unpopped = rand(1,10) + reagents.add_reagent("nutriment", 2) + bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0 + +/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume() + if(prob(unpopped)) //lol ...what's the point? << AINT SO POINTLESS NO MORE + usr << "You bite down on an un-popped kernel, and it hurts your teeth!" + unpopped = max(0, unpopped-1) + reagents.add_reagent("sacid",0.1) //only a little tingle. + ..() + +/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato + name = "loaded baked potato" + desc = "Totally baked." + icon_state = "loadedbakedpotato" + +/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/fries + name = "space fries" + desc = "AKA: French Fries, Freedom Fries, etc." + icon_state = "fries" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/fries/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/soydope + name = "soy dope" + desc = "Dope from a soy." + icon_state = "soydope" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/soydope/New() + ..() + reagents.add_reagent("nutriment", 2) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/cheesyfries + name = "cheesy fries" + desc = "Fries. Covered in cheese. Duh." + icon_state = "cheesyfries" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/cheesyfries/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/badrecipe + name = "burned mess" + desc = "Someone should be demoted from chef for this." + icon_state = "badrecipe" + +/obj/item/weapon/reagent_containers/food/snacks/badrecipe/New() + ..() + eatverb = pick("choke down","nibble","gnaw","chomp") + reagents.add_reagent("toxin", 1) + reagents.add_reagent("carbon", 3) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff + name = "spacy liberty duff" + desc = "Jello gelatin, from Alfred Hubbard's cookbook." + icon_state = "spacylibertyduff" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("mushroomhallucinogen", 6) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/amanitajelly + name = "amanita jelly" + desc = "Looks curiously toxic." + icon_state = "amanitajelly" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("amatoxin", 6) + reagents.add_reagent("mushroomhallucinogen", 3) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/carrotfries + name = "carrot fries" + desc = "Tasty fries from fresh Carrots." + icon_state = "carrotfries" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/carrotfries/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("imidazoline", 3) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/candiedapple + name = "candied apple" + desc = "An apple coated in sugary sweetness." + icon_state = "candiedapple" + +/obj/item/weapon/reagent_containers/food/snacks/candiedapple/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 3 + +/* +/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore + name = "Boiled slime Core" + desc = "A boiled red thing." + icon_state = "boiledslimecore" + +/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore/New() + ..() + reagents.add_reagent("slimejelly", 5) + bitesize = 3 +*/ +/obj/item/weapon/reagent_containers/food/snacks/mint + name = "mint" + desc = "it is only wafer thin." + icon_state = "mint" + +/obj/item/weapon/reagent_containers/food/snacks/mint/New() + ..() + reagents.add_reagent("minttoxin", 1) + bitesize = 1 + +////////////////////////////////FOOD ADDITIONS//////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/wrap + name = "egg wrap" + desc = "The precursor to Pigs in a Blanket." + icon_state = "wrap" + +/obj/item/weapon/reagent_containers/food/snacks/wrap/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/beans + name = "tin of beans" + desc = "Musical fruit in a slightly less musical container." + icon_state = "beans" + +/obj/item/weapon/reagent_containers/food/snacks/beans/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/spidereggs + name = "spider eggs" + desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health." + icon_state = "spidereggs" + +/obj/item/weapon/reagent_containers/food/snacks/spidereggs/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("toxin", 3) + bitesize = 2 diff --git a/code/modules/food&drinks/food/snacks_pastry.dm b/code/modules/food&drinks/food/snacks_pastry.dm new file mode 100644 index 00000000000..1c55584b00b --- /dev/null +++ b/code/modules/food&drinks/food/snacks_pastry.dm @@ -0,0 +1,309 @@ +//Pastry is a food that is made from dough which is made from wheat or rye flour. +//This file contains pastries that don't fit any existing categories. + +////////////////////////////////////////////DONUTS//////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/donut + name = "donut" + icon_state = "donut1" + +/obj/item/weapon/reagent_containers/food/snacks/donut/normal + desc = "Goes great with Robust Coffee." + +/obj/item/weapon/reagent_containers/food/snacks/donut/normal/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + src.bitesize = 3 + if(prob(30)) + src.icon_state = "donut2" + src.name = "frosted donut" + reagents.add_reagent("sprinkles", 2) + +/obj/item/weapon/reagent_containers/food/snacks/donut/chaos + name = "chaos donut" + desc = "Like life, it never quite tastes the same." + +/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("sprinkles", 1) + bitesize = 10 + switch(rand(1,10)) + if(1) + reagents.add_reagent("nutriment", 3) + if(2) + reagents.add_reagent("capsaicin", 3) + if(3) + reagents.add_reagent("frostoil", 3) + if(4) + reagents.add_reagent("sprinkles", 3) + if(5) + reagents.add_reagent("plasma", 3) + if(6) + reagents.add_reagent("coco", 3) + if(7) + reagents.add_reagent("slimejelly", 3) + if(8) + reagents.add_reagent("banana", 3) + if(9) + reagents.add_reagent("berryjuice", 3) + if(10) + reagents.add_reagent("tricordrazine", 3) + if(prob(30)) + icon_state = "donut2" + name = "frosted chaos donut" + reagents.add_reagent("sprinkles", 2) + + +/obj/item/weapon/reagent_containers/food/snacks/donut/jelly + name = "jelly donut" + desc = "You jelly?" + icon_state = "jdonut1" + bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("berryjuice", 5) + if(prob(30)) + icon_state = "jdonut2" + name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) + +/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly + name = "jelly donut" + desc = "You jelly?" + icon_state = "jdonut1" + bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("slimejelly", 5) + bitesize = 5 + if(prob(30)) + icon_state = "jdonut2" + name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) + +/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly + name = "jelly donut" + desc = "You jelly?" + icon_state = "jdonut1" + bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("cherryjelly", 5) + if(prob(30)) + icon_state = "jdonut2" + name = "Frosted Jelly Donut" + reagents.add_reagent("sprinkles", 2) + + +////////////////////////////////////////////MUFFINS//////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/muffin + name = "muffin" + desc = "A delicious and spongy little cake." + icon_state = "muffin" + +/obj/item/weapon/reagent_containers/food/snacks/muffin/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/muffin/berry + name = "berry muffin" + icon_state = "berrymuffin" + desc = "A delicious and spongy little cake, with berries." + +/obj/item/weapon/reagent_containers/food/snacks/muffin/booberry + name = "booberry muffin" + icon_state = "berrymuffin" + alpha = 125 + desc = "My stomach is a graveyard! No living being can quench my bloodthirst!" + +/obj/item/weapon/reagent_containers/food/snacks/chawanmushi + name = "chawanmushi" + desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat." + icon_state = "chawanmushi" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/chawanmushi/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 1 +////////////////////////////////////////////WAFFLES//////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/waffles + name = "waffles" + desc = "Mmm, waffles." + icon_state = "waffles" + trash = /obj/item/trash/waffles + +/obj/item/weapon/reagent_containers/food/snacks/waffles/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/soylentgreen + name = "\improper Soylent Green" + desc = "Not made of people. Honest." //Totally people. + icon_state = "soylent_green" + trash = /obj/item/trash/waffles + +/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/soylenviridians + name = "\improper Soylent Virdians" + desc = "Not made of people. Honest." //Actually honest for once. + icon_state = "soylent_yellow" + trash = /obj/item/trash/waffles + +/obj/item/weapon/reagent_containers/food/snacks/soylenviridians/New() + ..() + reagents.add_reagent("nutriment", 10) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles + name = "roffle waffles" + desc = "Waffles from Roffle. Co." + icon_state = "rofflewaffles" + trash = /obj/item/trash/waffles + +/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("mushroomhallucinogen", 8) + bitesize = 4 + +////////////////////////////////////////////OTHER//////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/cookie + name = "cookie" + desc = "COOKIE!!!" + icon_state = "COOKIE!!!" + +/obj/item/weapon/reagent_containers/food/snacks/cookie/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket + name = "\improper Donk-pocket" + desc = "The food of choice for the seasoned traitor." + icon_state = "donkpocket" + var/warm = 0 + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/New() + ..() + reagents.add_reagent("nutriment", 4) + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime() //Not working, derp? + if(warm) + spawn(4200) //ew + warm = 0 + reagents.del_reagent("tricordrazine") + name = initial(name) + return + +/obj/item/weapon/reagent_containers/food/snacks/fortunecookie + name = "fortune cookie" + desc = "A true prophecy in each cookie!" + icon_state = "fortune_cookie" + +/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/poppypretzel + name = "poppy pretzel" + desc = "It's all twisted up!" + icon_state = "poppypretzel" + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/poppypretzel/New() + ..() + reagents.add_reagent("nutriment", 5) + bitesize = 2 + + +/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit + name = "plump helmet biscuit" + desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour." + icon_state = "phelmbiscuit" + +/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/New() + ..() + if(prob(10)) + name = "exceptional plump helmet biscuit" + desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("tricordrazine", 5) + bitesize = 2 + else + reagents.add_reagent("nutriment", 5) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/appletart + name = "golden apple streusel tart" + desc = "A tasty dessert that won't make it through a metal detector." + icon_state = "gappletart" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/appletart/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("gold", 5) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/cracker + name = "cracker" + desc = "It's a salted cracker." + icon_state = "cracker" + +/obj/item/weapon/reagent_containers/food/snacks/cracker/New() + ..() + reagents.add_reagent("nutriment", 1) + +/obj/item/weapon/reagent_containers/food/snacks/hotdog + name = "hotdog" + desc = "Fresh footlong ready to go down on." + icon_state = "hotdog" + +/obj/item/weapon/reagent_containers/food/snacks/hotdog/New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("ketchup", 3) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/meatbun + name = "meat bun" + desc = "Has the potential to not be Dog." + icon_state = "meatbun" + +/obj/item/weapon/reagent_containers/food/snacks/meatbun/New() + ..() + reagents.add_reagent("nutriment", 6) + bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/sugarcookie + name = "sugar cookie" + desc = "Just like your little sister used to make." + icon_state = "sugarcookie" + +/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("sugar", 5) + bitesize = 2 \ No newline at end of file diff --git a/code/modules/food&drinks/food/snacks_pies.dm b/code/modules/food&drinks/food/snacks_pie.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_pies.dm rename to code/modules/food&drinks/food/snacks_pie.dm diff --git a/code/modules/food&drinks/food/snacks_salad.dm b/code/modules/food&drinks/food/snacks_salad.dm new file mode 100644 index 00000000000..8b8cb86b799 --- /dev/null +++ b/code/modules/food&drinks/food/snacks_salad.dm @@ -0,0 +1,38 @@ +//this category is very little but I think that it has great potential to grow +////////////////////////////////////////////SALAD//////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/aesirsalad + name = "\improper Aesir salad" + desc = "Probably too incredible for mortal men to fully enjoy." + icon_state = "aesirsalad" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/aesirsalad/New() + ..() + eatverb = pick("crunch","devour","nibble","gnaw","gobble","chomp") + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("tricordrazine", 8) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/herbsalad + name = "herb salad" + desc = "A tasty salad with apples on top." + icon_state = "herbsalad" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/herbsalad/New() + ..() + reagents.add_reagent("nutriment", 8) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/validsalad + name = "valid salad" + desc = "It's just an herb salad with meatballs and fried potato slices. Nothing suspicious about it." + icon_state = "validsalad" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/validsalad/New() + ..() + reagents.add_reagent("nutriment", 8) + reagents.add_reagent("doctorsdelight", 5) + bitesize = 3 \ No newline at end of file diff --git a/code/modules/food&drinks/food/snacks_vend.dm b/code/modules/food&drinks/food/snacks_vend.dm new file mode 100644 index 00000000000..465c33d925e --- /dev/null +++ b/code/modules/food&drinks/food/snacks_vend.dm @@ -0,0 +1,81 @@ +////////////////////////////////////////////SNACKS FROM VENDING MACHINES//////////////////////////////////////////// +//in other words: junk food +//don't even bother looking for recipes for these + +/obj/item/weapon/reagent_containers/food/snacks/candy + name = "candy" + desc = "Nougat love it or hate it." + icon_state = "candy" + trash = /obj/item/trash/candy + +/obj/item/weapon/reagent_containers/food/snacks/candy/New() + ..() + reagents.add_reagent("nutriment", 1) + reagents.add_reagent("sugar", 3) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sosjerky + name = "\improper Scaredy's Private Reserve Beef Jerky" + icon_state = "sosjerky" + desc = "Beef jerky made from the finest space cows." + trash = /obj/item/trash/sosjerky + +/obj/item/weapon/reagent_containers/food/snacks/sosjerky/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/chips + name = "chips" + desc = "Commander Riker's What-The-Crisps" + icon_state = "chips" + trash = /obj/item/trash/chips + +/obj/item/weapon/reagent_containers/food/snacks/chips/New() + ..() + reagents.add_reagent("nutriment", 3) + bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/no_raisin + name = "4no raisins" + icon_state = "4no_raisins" + desc = "Best raisins in the universe. Not sure why." + trash = /obj/item/trash/raisins + +/obj/item/weapon/reagent_containers/food/snacks/no_raisin/New() + ..() + reagents.add_reagent("nutriment", 6) + +/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie + name = "space twinkie" + icon_state = "space_twinkie" + desc = "Guaranteed to survive longer than you will." + +/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie/New() + ..() + reagents.add_reagent("sugar", 4) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers + name = "cheesie honkers" + desc = "Bite sized cheesie snacks that will honk all over your mouth." + icon_state = "cheesie_honkers" + trash = /obj/item/trash/cheesie + +/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers/New() + ..() + reagents.add_reagent("nutriment", 4) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/syndicake + name = "syndi-cakes" + icon_state = "syndi_cakes" + desc = "An extremely moist snack cake that tastes just as good after being nuked." + trash = /obj/item/trash/syndi_cakes + +/obj/item/weapon/reagent_containers/food/snacks/syndicake/New() + ..() + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("doctorsdelight", 5) + bitesize = 3 + diff --git a/code/modules/food&drinks/kitchen machinery/gibber.dm b/code/modules/food&drinks/kitchen machinery/gibber.dm index c43c4bec814..654b4c9c7d9 100644 --- a/code/modules/food&drinks/kitchen machinery/gibber.dm +++ b/code/modules/food&drinks/kitchen machinery/gibber.dm @@ -110,7 +110,7 @@ set name = "empty gibber" set src in oview(1) - if (usr.stat != 0) + if(usr.stat || !usr.canmove || usr.restrained()) return src.go_out() add_fingerprint(usr) diff --git a/code/modules/food&drinks/kitchen machinery/icecream_vat.dm b/code/modules/food&drinks/kitchen machinery/icecream_vat.dm index e575d930dfd..0fb80d32a8b 100644 --- a/code/modules/food&drinks/kitchen machinery/icecream_vat.dm +++ b/code/modules/food&drinks/kitchen machinery/icecream_vat.dm @@ -1,50 +1,9 @@ #define ICECREAM_VANILLA 1 -#define FLAVOUR_CHOCOLATE 2 -#define FLAVOUR_STRAWBERRY 3 -#define FLAVOUR_BLUE 4 +#define ICECREAM_CHOCOLATE 2 +#define ICECREAM_STRAWBERRY 3 +#define ICECREAM_BLUE 4 #define CONE_WAFFLE 5 #define CONE_CHOC 6 -#define INGR_MILK 7 -#define INGR_FLOUR 8 -#define INGR_SUGAR 9 -#define INGR_ICE 10 -#define MUCK 11 - -var/list/ingredients_source = list( -"berryjuice" = FLAVOUR_STRAWBERRY,\ -"coco" = FLAVOUR_CHOCOLATE,\ -"singulo" = FLAVOUR_BLUE,\ -"milk" = INGR_MILK,\ -"soymilk" = INGR_MILK,\ -"ice" = INGR_ICE,\ -"flour" = INGR_FLOUR,\ -"sugar" = INGR_SUGAR,\ -) - -/proc/get_icecream_flavour_string(var/flavour_type) - switch(flavour_type) - if(FLAVOUR_CHOCOLATE) - return "chocolate" - if(FLAVOUR_STRAWBERRY) - return "strawberry" - if(FLAVOUR_BLUE) - return "blue" - if(CONE_WAFFLE) - return "waffle" - if(CONE_CHOC) - return "chocolate" - if(INGR_MILK) - return "milk" - if(INGR_FLOUR) - return "flour" - if(INGR_SUGAR) - return "sugar" - if(INGR_ICE) - return "ice" - if(MUCK) - return "muck" - else - return "vanilla" /obj/machinery/icecream_vat name = "icecream vat" @@ -53,15 +12,54 @@ var/list/ingredients_source = list( icon_state = "icecream_vat" density = 1 anchored = 0 - var/list/ingredients = list() + use_power = 0 + var/list/product_types = list() var/dispense_flavour = ICECREAM_VANILLA - var/obj/item/weapon/reagent_containers/glass/held_container + var/flavour_name = "vanilla" + flags = OPENCONTAINER | NOREACT + reagents = new() + +/obj/machinery/icecream_vat/proc/get_ingredient_list(var/type) + switch(type) + if(ICECREAM_CHOCOLATE) + return list("milk", "ice", "coco") + if(ICECREAM_STRAWBERRY) + return list("milk", "ice", "berryjuice") + if(ICECREAM_BLUE) + return list("milk", "ice", "singulo") + if(CONE_WAFFLE) + return list("flour", "sugar") + if(CONE_CHOC) + return list("flour", "sugar", "coco") + else + return list("milk", "ice") + + +/obj/machinery/icecream_vat/proc/get_flavour_name(var/flavour_type) + switch(flavour_type) + if(ICECREAM_CHOCOLATE) + return "chocolate" + if(ICECREAM_STRAWBERRY) + return "strawberry" + if(ICECREAM_BLUE) + return "blue" + if(CONE_WAFFLE) + return "waffle" + if(CONE_CHOC) + return "chocolate" + else + return "vanilla" + /obj/machinery/icecream_vat/New() ..() - - while(ingredients.len < 11) - ingredients.Add(5) + while(product_types.len < 6) + product_types.Add(5) + reagents.my_atom = src + reagents.add_reagent("milk", 5) + reagents.add_reagent("flour", 5) + reagents.add_reagent("sugar", 5) + reagents.add_reagent("ice", 5) /obj/machinery/icecream_vat/attack_hand(mob/user as mob) user.set_machine(src) @@ -69,140 +67,97 @@ var/list/ingredients_source = list( /obj/machinery/icecream_vat/interact(mob/user as mob) var/dat - dat += "Dispense vanilla icecream There is [ingredients[ICECREAM_VANILLA]] scoops of vanilla icecream left (made from milk and ice). " - dat += "Dispense strawberry icecream There is [ingredients[FLAVOUR_STRAWBERRY]] dollops of strawberry flavouring left (obtained from berry juice. " - dat += "Dispense chocolate icecream There is [ingredients[FLAVOUR_CHOCOLATE]] dollops of chocolate flavouring left (obtained from cocoa powder). " - dat += "Dispense blue icecream There is [ingredients[FLAVOUR_BLUE]] dollops of blue flavouring left (obtained from bluespace tomato singulo). " + dat += "ICECREAM "
+ dat += "Dispensing: [flavour_name] icecream "
+ dat += "" + dat += "Vanilla icecream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice) " + dat += "Strawberry icecream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice) " + dat += "Chocolate icecream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder) " + dat += "Blue icecream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo) CONES "
+ dat += "Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar) "
dat += "" + dat += "Chocolate cones: Dispense Make x5 [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder) " - dat += "Dispense waffle cones There are [ingredients[CONE_WAFFLE]] waffle cones left. " - dat += "Dispense chocolate cones There are [ingredients[CONE_CHOC]] chocolate cones left. " - dat += " " - dat += "Make waffle cones There is [ingredients[INGR_FLOUR]]/[ingredients[INGR_SUGAR]] of flour and sugar left. " - dat += "Make chocolate cones There is [ingredients[FLAVOUR_CHOCOLATE]]/[ingredients[CONE_WAFFLE]] of chocolate flavouring and waffle cones left. " - dat += "Make vanilla icecream There is [ingredients[INGR_MILK]]/[ingredients[INGR_ICE]] of milk and ice left. " - dat += " " - if(held_container) - dat += "Eject [held_container] " - else - dat += "No beaker inserted. " + dat += "VAT CONTENT " + for(var/datum/reagent/R in reagents.reagent_list) + dat += "[R.name]: [R.volume]" + dat += "Purge " dat += "Refresh Close" - var/datum/browser/popup = new(user, "icecreamvat","Icecream Vat", 700, 400, src) + var/datum/browser/popup = new(user, "icecreamvat","Icecream Vat", 700, 500, src) popup.set_content(dat) popup.open() /obj/machinery/icecream_vat/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/reagent_containers)) - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/icecream)) - var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = O - if(!I.ice_creamed) - if(ingredients[ICECREAM_VANILLA] > 0) - var/flavour_name = get_icecream_flavour_string(dispense_flavour) - if(ingredients[dispense_flavour] > 0) - src.visible_message("\icon[src] [user] scoops delicious [flavour_name] flavoured icecream into [I].") - ingredients[dispense_flavour] -= 1 - ingredients[ICECREAM_VANILLA] -= 1 + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/icecream)) + var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = O + if(!I.ice_creamed) + if(product_types[dispense_flavour] > 0) + src.visible_message("\icon[src] [user] scoops delicious [flavour_name] icecream into [I].") + product_types[dispense_flavour] -= 1 - I.add_ice_cream(dispense_flavour) - if(held_container) - held_container.reagents.trans_to(I, 10) - if(I.reagents.total_volume < 10) - I.reagents.add_reagent("sugar", 10 - I.reagents.total_volume) - else - user << "There is not enough [flavour_name] flavouring left! Insert more of the required ingredients." - else - user << "There is not enough icecream left! Insert more milk and ice." + I.add_ice_cream(flavour_name) + // if(beaker) + // beaker.reagents.trans_to(I, 10) + if(I.reagents.total_volume < 10) + I.reagents.add_reagent("sugar", 10 - I.reagents.total_volume) else - user << "[O] already has icecream in it." - else if(istype(O, /obj/item/weapon/reagent_containers/glass)) - if(held_container) - user << "You must remove [held_container] from [src] first." - else - user << "You insert [O] into [src]." - user.drop_item() - O.loc = src - held_container = O + user << "There is not enough icecream left!" else - var/obj/item/weapon/reagent_containers/R = O - if(R.reagents) - src.visible_message("[user] has emptied all of [R] into [src].") - for (var/datum/reagent/current_reagent in R.reagents.reagent_list) - if(ingredients_source[current_reagent.id]) - add(ingredients_source[current_reagent.id], current_reagent.volume / 2) - else - add(MUCK, current_reagent.volume / 5) - R.reagents.clear_reagents() + user << "[O] already has icecream in it." return 1 + else if(O.is_open_container()) + return else ..() -/obj/machinery/icecream_vat/proc/add(var/add_type, var/amount) - if(add_type <= ingredients.len) - ingredients[add_type] += amount - updateDialog() - -/obj/machinery/icecream_vat/proc/make(var/mob/user, var/make_type) - switch(make_type) - if(CONE_WAFFLE) - if(ingredients[INGR_FLOUR] > 0 && ingredients[INGR_SUGAR] > 0) - var/amount = max( min(ingredients[INGR_FLOUR], ingredients[INGR_SUGAR]), 5) - ingredients[INGR_FLOUR] -= amount - ingredients[INGR_SUGAR] -= amount - ingredients[CONE_WAFFLE] += amount - src.visible_message("[user] cooks up some waffle cones.") - else - user << "You require sugar and flour to make waffle cones." - if(CONE_CHOC) - if(ingredients[FLAVOUR_CHOCOLATE] > 0 && ingredients[CONE_WAFFLE] > 0) - var/amount = min(ingredients[CONE_WAFFLE], ingredients[FLAVOUR_CHOCOLATE]) - ingredients[CONE_WAFFLE] -= amount - ingredients[FLAVOUR_CHOCOLATE] -= amount - ingredients[CONE_CHOC] += amount - src.visible_message("[user] cooks up some chocolate cones.") - else - user << "You require waffle cones and chocolate flavouring to make chocolate cones." - if(ICECREAM_VANILLA) - if(ingredients[INGR_ICE] > 0 && ingredients[INGR_MILK] > 0) - var/amount = min(ingredients[INGR_ICE], ingredients[INGR_MILK]) - ingredients[INGR_ICE] -= amount - ingredients[INGR_MILK] -= amount - ingredients[ICECREAM_VANILLA] += amount - src.visible_message("[user] whips up some vanilla icecream.") - else - user << "You require milk and ice to make vanilla icecream." - updateDialog() +/obj/machinery/icecream_vat/proc/make(var/mob/user, var/make_type, var/amount) + for(var/R in get_ingredient_list(make_type)) + if(reagents.has_reagent(R, amount)) + continue + amount = 0 + break + if(amount) + for(var/R in get_ingredient_list(make_type)) + reagents.remove_reagent(R, amount) + product_types[make_type] += amount + var/flavour = get_flavour_name(make_type) + if(make_type > 4) + src.visible_message("[user] cooks up some [flavour] cones.") + else + src.visible_message("[user] whips up some [flavour] icecream.") + else + user << "You don't have the ingredients to make this." /obj/machinery/icecream_vat/Topic(href, href_list) if(..()) return - if(href_list["dispense"]) - dispense_flavour = text2num(href_list["dispense"]) - src.visible_message("[usr] sets [src] to dispense [get_icecream_flavour_string(dispense_flavour)] flavoured icecream.") + if(href_list["select"]) + dispense_flavour = text2num(href_list["select"]) + flavour_name = get_flavour_name(dispense_flavour) + src.visible_message("[usr] sets [src] to dispense [flavour_name] flavoured icecream.") if(href_list["cone"]) var/dispense_cone = text2num(href_list["cone"]) - if(ingredients[dispense_cone] <= ingredients.len) - var/cone_name = get_icecream_flavour_string(dispense_cone) - if(ingredients[dispense_cone] >= 1) - ingredients[dispense_cone] -= 1 - var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = new(src.loc) - I.cone_type = cone_name - I.icon_state = "icecream_cone_[cone_name]" - I.desc = "Delicious [cone_name] cone, but no ice cream." - src.visible_message("[usr] dispenses a crunchy [cone_name] cone from [src].") - else - usr << "There are no [cone_name] cones left!" - updateDialog() + var/cone_name = get_flavour_name(dispense_cone) + if(product_types[dispense_cone] >= 1) + product_types[dispense_cone] -= 1 + var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = new(src.loc) + I.cone_type = cone_name + I.icon_state = "icecream_cone_[cone_name]" + I.desc = "Delicious [cone_name] cone, but no ice cream." + src.visible_message("[usr] dispenses a crunchy [cone_name] cone from [src].") + else + usr << "There are no [cone_name] cones left!" if(href_list["make"]) - make( usr, text2num(href_list["make"]) ) - updateDialog() + var/amount = (text2num(href_list["amount"])) + var/C = text2num(href_list["make"]) + make(usr, C, amount) - if(href_list["eject"]) - if(held_container) - held_container.loc = src.loc - held_container = null - updateDialog() + if(href_list["disposeI"]) + reagents.del_reagent(href_list["disposeI"]) + + updateDialog() if(href_list["refresh"]) updateDialog() @@ -226,8 +181,7 @@ var/list/ingredients_source = list( create_reagents(20) reagents.add_reagent("nutriment", 5) -/obj/item/weapon/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour) - var/flavour_name = get_icecream_flavour_string(flavour) +/obj/item/weapon/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour_name) name = "[flavour_name] icecream" src.overlays += "icecream_[flavour_name]" desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream." @@ -239,8 +193,3 @@ var/list/ingredients_source = list( #undef FLAVOUR_BLUE #undef CONE_WAFFLE #undef CONE_CHOC -#undef INGR_MILK -#undef INGR_FLOUR -#undef INGR_SUGAR -#undef INGR_ICE -#undef MUCK diff --git a/code/modules/food&drinks/kitchen machinery/juicer.dm b/code/modules/food&drinks/kitchen machinery/juicer.dm index 80ba39354a3..94696028027 100644 --- a/code/modules/food&drinks/kitchen machinery/juicer.dm +++ b/code/modules/food&drinks/kitchen machinery/juicer.dm @@ -126,7 +126,7 @@ set category = "Object" set name = "Detach Beaker from the juicer" set src in oview(1) - if (usr.stat != 0) + if(usr.stat || !usr.canmove || usr.restrained()) return if (!beaker) return diff --git a/code/modules/food&drinks/kitchen machinery/microwave.dm b/code/modules/food&drinks/kitchen machinery/microwave.dm index 247b6721383..b44170fd2da 100644 --- a/code/modules/food&drinks/kitchen machinery/microwave.dm +++ b/code/modules/food&drinks/kitchen machinery/microwave.dm @@ -122,11 +122,12 @@ return 1 else if(istype(O, /obj/item/weapon/soap/)) // If they're trying to clean it then let them + var/obj/item/weapon/soap/P = O user.visible_message( \ "[user] starts to clean the microwave.", \ "You start to clean the microwave." \ ) - if (do_after(user,20)) + if (do_after(user, P.cleanspeed)) user.visible_message( \ "[user] has cleaned the microwave.", \ "You have cleaned the microwave." \ diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food&drinks/kitchen machinery/processor.dm index 7ec3d44356e..8ef77de2a02 100644 --- a/code/modules/food&drinks/kitchen machinery/processor.dm +++ b/code/modules/food&drinks/kitchen machinery/processor.dm @@ -157,7 +157,7 @@ set name = "Eject Contents" set src in oview(1) - if (usr.stat != 0) + if(usr.stat || !usr.canmove || usr.restrained()) return src.empty() add_fingerprint(usr) diff --git a/code/modules/food&drinks/recipes/microwave/recipes.dm b/code/modules/food&drinks/recipes/microwave/recipes.dm index 17c76c10d25..4bf797f5bf7 100644 --- a/code/modules/food&drinks/recipes/microwave/recipes.dm +++ b/code/modules/food&drinks/recipes/microwave/recipes.dm @@ -1,334 +1,6 @@ // see code/datums/recipe.dm -////////////////////////////////////////////////EGG RECIPE's//////////////////////////////////////////////// - -/datum/recipe/egg/fried - reagents = list("sodiumchloride" = 1, "blackpepper" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg - ) - result = /obj/item/weapon/reagent_containers/food/snacks/friedegg - -/datum/recipe/egg/boiled - reagents = list("water" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg - ) - result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg - -/datum/recipe/egg/omelette - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/omelette - -/datum/recipe/egg/chocolate - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/chocolateegg - -/datum/recipe/egg/benedict - items = list( - /obj/item/weapon/reagent_containers/food/snacks/friedegg, - /obj/item/weapon/reagent_containers/food/snacks/meatsteak, - /obj/item/weapon/reagent_containers/food/snacks/breadslice, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/benedict - -////////////////////////////////////////////////DONUTS//////////////////////////////////////////////// - -/datum/recipe/donut - reagents = list("flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal - -/datum/recipe/donut/jelly - reagents = list("berryjuice" = 5, "flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly - -/datum/recipe/donut/jelly/slime - reagents = list("slimejelly" = 5, "flour" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly - -/datum/recipe/donut/jelly/cherry - reagents = list("cherryjelly" = 5, "flour" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly - -/datum/recipe/chaosdonut - reagents = list("frostoil" = 5, "capsaicin" = 5, "flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos - - -////////////////////////////////////////////////WAFFLES//////////////////////////////////////////////// - -/datum/recipe/waffles - reagents = list("flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/waffles - - -/datum/recipe/waffles/soylenviridians - reagents = list("flour" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans - ) - result = /obj/item/weapon/reagent_containers/food/snacks/soylenviridians - -/datum/recipe/waffles/soylentgreen - reagents = list("flour" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat/human, - /obj/item/weapon/reagent_containers/food/snacks/meat/human, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen - - -/datum/recipe/waffles/roffle - reagents = list("mushroomhallucinogen" = 5, "flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles - - -////////////////////////////////////////////////DONKPOCCKETS//////////////////////////////////////////////// - -/datum/recipe/donkpocket - reagents = list("flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/faggot, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL - proc/warm_up(var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked) - being_cooked.warm = 1 - being_cooked.reagents.add_reagent("tricordrazine", 5) - being_cooked.bitesize = 6 - being_cooked.name = "Warm " + being_cooked.name - being_cooked.cooltime() - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = ..(container) - warm_up(being_cooked) - return being_cooked - -/datum/recipe/donkpocket/warm - reagents = list() //This is necessary since this is a child object of the above recipe and we don't want donk pockets to need flour - items = list( - /obj/item/weapon/reagent_containers/food/snacks/donkpocket - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = locate() in container - if(being_cooked && !being_cooked.warm) - warm_up(being_cooked) - return being_cooked - - -////////////////////////////////////////////////MUFFINS//////////////////////////////////////////////// - -/datum/recipe/muffin - reagents = list("milk" = 5, "flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/muffin - -/datum/recipe/muffin/berry - reagents = list("milk" = 5, "flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/grown/berries - ) - result = /obj/item/weapon/reagent_containers/food/snacks/muffin/berry - -/datum/recipe/muffin/booberry - reagents = list("milk" = 5, "flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/grown/berries, - /obj/item/weapon/ectoplasm - ) - result = /obj/item/weapon/reagent_containers/food/snacks/muffin/booberry - -/datum/recipe/muffin/chawanmushi - reagents = list("water" = 5, "soysauce" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/chawanmushi - - - -////////////////////////////////////////////////KEBABS NO REMOVE//////////////////////////////////////////////// - -/datum/recipe/kebab/human - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/meat/human, - /obj/item/weapon/reagent_containers/food/snacks/meat/human, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/human/kebab - -/datum/recipe/kebab/monkey - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/meat/monkey, - /obj/item/weapon/reagent_containers/food/snacks/meat/monkey, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeykebab - -/datum/recipe/kebab/tofu - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/tofukebab - -////////////////////////////////////////////////FISH//////////////////////////////////////////////// - -/datum/recipe/carpmeat - reagents = list("carpotoxin" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/tofu - ) - result = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/imitation - -/datum/recipe/cubancarp - reagents = list("flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/chili, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp - -/datum/recipe/fishandchips - items = list( - /obj/item/weapon/reagent_containers/food/snacks/fries, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/fishandchips - -/datum/recipe/fishfingers - reagents = list("flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers - -/datum/recipe/sashimi - reagents = list("soysauce" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/spidereggs, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sashimi - -////////////////////////////////////////////////PIZZA!!!//////////////////////////////////////////////// - -/datum/recipe/pizza/margherita - reagents = list("flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita - -/datum/recipe/pizza/meat - reagents = list("flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza - -/datum/recipe/pizza/mushroom - reagents = list("flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza - -/datum/recipe/pizza/vegetable - reagents = list("flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant, - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/corn, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza - - - -////////////////////////////////////////////////SALADS//////////////////////////////////////////////// - -/datum/recipe/salad/herb - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/weapon/reagent_containers/food/snacks/grown/apple, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/herbsalad - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/herbsalad/being_cooked = ..(container) - being_cooked.reagents.del_reagent("toxin") - return being_cooked - -/datum/recipe/salad/aesir - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/aesirsalad - -/datum/recipe/salad/valid - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/weapon/reagent_containers/food/snacks/grown/potato, - /obj/item/weapon/reagent_containers/food/snacks/faggot, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/validsalad - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..(container) - being_cooked.reagents.del_reagent("toxin") - return being_cooked - ////////////////////////////////////////////////FOOD ADDITTIONS//////////////////////////////////////////////// /datum/recipe/wrap @@ -347,62 +19,8 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/beans -/datum/recipe/hotdog - reagents = list("ketchup" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/breadslice, - /obj/item/weapon/reagent_containers/food/snacks/sausage, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/hotdog - -/datum/recipe/meatbun - reagents = list("soysauce" = 5, "flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/faggot, - /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/meatbun - -/datum/recipe/sugarcookie - reagents = list("flour" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie - -/datum/recipe/boiledspiderleg - reagents = list("water" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/spiderleg, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg - -/datum/recipe/spidereggsham - reagents = list("sodiumchloride" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/spidereggs, - /obj/item/weapon/reagent_containers/food/snacks/spidermeat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/spidereggsham - ////////////////////////////////////////////////MISC RECIPE's//////////////////////////////////////////////// -/datum/recipe/cornedbeef - reagents = list("sodiumchloride" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage, - /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cornedbeef - -/datum/recipe/wingfangchu - reagents = list("soysauce" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/xenomeat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/wingfangchu - /datum/recipe/loadedbakedpotato items = list( /obj/item/weapon/reagent_containers/food/snacks/grown/potato, @@ -423,28 +41,6 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/popcorn -/datum/recipe/fortunecookie - reagents = list("flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/paper, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie -/datum/recipe/fortunecookie/make_food(var/obj/container as obj) - var/obj/item/weapon/paper/paper = locate() in container - paper.loc = null //prevent deletion - var/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/being_cooked = ..(container) - paper.loc = being_cooked - being_cooked.trash = paper //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn - return being_cooked - -/datum/recipe/meatsteak - reagents = list("sodiumchloride" = 1, "blackpepper" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak - /datum/recipe/spacylibertyduff reagents = list("water" = 5, "vodka" = 5) items = list( @@ -467,73 +63,9 @@ being_cooked.reagents.del_reagent("amatoxin") return being_cooked -/datum/recipe/enchiladas - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/grown/chili, - /obj/item/weapon/reagent_containers/food/snacks/grown/chili, - /obj/item/weapon/reagent_containers/food/snacks/grown/corn, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas - -/datum/recipe/stew - reagents = list("water" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/grown/potato, - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant, - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/stew - -/datum/recipe/stewedsoymeat - items = list( - /obj/item/weapon/reagent_containers/food/snacks/soydope, - /obj/item/weapon/reagent_containers/food/snacks/soydope, - /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, - /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat - -/datum/recipe/poppypretzel - reagents = list("flour" = 5) - items = list( - /obj/item/seeds/poppyseed, - /obj/item/weapon/reagent_containers/food/snacks/egg, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel - /datum/recipe/candiedapple reagents = list("water" = 5, "sugar" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/grown/apple ) result = /obj/item/weapon/reagent_containers/food/snacks/candiedapple - -/datum/recipe/sausage - items = list( - /obj/item/weapon/reagent_containers/food/snacks/faggot, - /obj/item/weapon/reagent_containers/food/snacks/meat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sausage - -/datum/recipe/plumphelmetbiscuit - reagents = list("flour" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit - -/datum/recipe/appletart - reagents = list("sugar" = 5, "milk" = 5, "flour" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/appletart - -/datum/recipe/cracker - reagents = list("flour" = 5, "sodiumchloride" = 1) - result = /obj/item/weapon/reagent_containers/food/snacks/cracker diff --git a/code/modules/food&drinks/recipes/microwave/recipes_burgers.dm b/code/modules/food&drinks/recipes/microwave/recipes_burger.dm similarity index 100% rename from code/modules/food&drinks/recipes/microwave/recipes_burgers.dm rename to code/modules/food&drinks/recipes/microwave/recipes_burger.dm diff --git a/code/modules/food&drinks/recipes/microwave/recipes_cakes.dm b/code/modules/food&drinks/recipes/microwave/recipes_cake.dm similarity index 100% rename from code/modules/food&drinks/recipes/microwave/recipes_cakes.dm rename to code/modules/food&drinks/recipes/microwave/recipes_cake.dm diff --git a/code/modules/food&drinks/recipes/microwave/recipes_egg.dm b/code/modules/food&drinks/recipes/microwave/recipes_egg.dm new file mode 100644 index 00000000000..7797053ffbf --- /dev/null +++ b/code/modules/food&drinks/recipes/microwave/recipes_egg.dm @@ -0,0 +1,40 @@ + +////////////////////////////////////////////////EGG RECIPE's//////////////////////////////////////////////// + +/datum/recipe/egg/fried + reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg + ) + result = /obj/item/weapon/reagent_containers/food/snacks/friedegg + +/datum/recipe/egg/boiled + reagents = list("water" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg + ) + result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg + +/datum/recipe/egg/omelette + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/omelette + +/datum/recipe/egg/chocolate + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chocolateegg + +/datum/recipe/egg/benedict + items = list( + /obj/item/weapon/reagent_containers/food/snacks/friedegg, + /obj/item/weapon/reagent_containers/food/snacks/meatsteak, + /obj/item/weapon/reagent_containers/food/snacks/breadslice, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/benedict diff --git a/code/modules/food&drinks/recipes/microwave/recipes_meat.dm b/code/modules/food&drinks/recipes/microwave/recipes_meat.dm new file mode 100644 index 00000000000..81506429ae0 --- /dev/null +++ b/code/modules/food&drinks/recipes/microwave/recipes_meat.dm @@ -0,0 +1,145 @@ + +////////////////////////////////////////////////KEBABS NO REMOVE//////////////////////////////////////////////// + +/datum/recipe/kebab/human + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/meat/human, + /obj/item/weapon/reagent_containers/food/snacks/meat/human, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/human/kebab + +/datum/recipe/kebab/monkey + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/meat/monkey, + /obj/item/weapon/reagent_containers/food/snacks/meat/monkey, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeykebab + +/datum/recipe/kebab/tofu + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/tofukebab + +////////////////////////////////////////////////FISH//////////////////////////////////////////////// + +/datum/recipe/carpmeat + reagents = list("carpotoxin" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/tofu + ) + result = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/imitation + +/datum/recipe/cubancarp + reagents = list("flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/grown/chili, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp + +/datum/recipe/fishandchips + items = list( + /obj/item/weapon/reagent_containers/food/snacks/fries, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/fishandchips + +/datum/recipe/fishfingers + reagents = list("flour" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers + +/datum/recipe/sashimi + reagents = list("soysauce" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spidereggs, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sashimi + +////////////////////////////////////////////////MR SPIDER//////////////////////////////////////////////// + +/datum/recipe/boiledspiderleg + reagents = list("water" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spiderleg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg + +/datum/recipe/spidereggsham + reagents = list("sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spidereggs, + /obj/item/weapon/reagent_containers/food/snacks/spidermeat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/spidereggsham + +////////////////////////////////////////////////MISC RECIPE's//////////////////////////////////////////////// + +/datum/recipe/cornedbeef + reagents = list("sodiumchloride" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage, + /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cornedbeef + +/datum/recipe/wingfangchu + reagents = list("soysauce" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/xenomeat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/wingfangchu + +/datum/recipe/meatsteak + reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak + +/datum/recipe/enchiladas + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/grown/chili, + /obj/item/weapon/reagent_containers/food/snacks/grown/chili, + /obj/item/weapon/reagent_containers/food/snacks/grown/corn, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas + +/datum/recipe/stew + reagents = list("water" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/grown/potato, + /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, + /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant, + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/stew + +/datum/recipe/stewedsoymeat + items = list( + /obj/item/weapon/reagent_containers/food/snacks/soydope, + /obj/item/weapon/reagent_containers/food/snacks/soydope, + /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, + /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat + +/datum/recipe/sausage + items = list( + /obj/item/weapon/reagent_containers/food/snacks/faggot, + /obj/item/weapon/reagent_containers/food/snacks/meat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sausage diff --git a/code/modules/food&drinks/recipes/microwave/recipes_pastry.dm b/code/modules/food&drinks/recipes/microwave/recipes_pastry.dm new file mode 100644 index 00000000000..f4a37c243bb --- /dev/null +++ b/code/modules/food&drinks/recipes/microwave/recipes_pastry.dm @@ -0,0 +1,200 @@ + +////////////////////////////////////////////////DONUTS//////////////////////////////////////////////// + +/datum/recipe/donut + reagents = list("flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal + +/datum/recipe/donut/jelly + reagents = list("berryjuice" = 5, "flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly + +/datum/recipe/donut/jelly/slime + reagents = list("slimejelly" = 5, "flour" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly + +/datum/recipe/donut/jelly/cherry + reagents = list("cherryjelly" = 5, "flour" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly + +/datum/recipe/chaosdonut + reagents = list("frostoil" = 5, "capsaicin" = 5, "flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos + + +////////////////////////////////////////////////WAFFLES//////////////////////////////////////////////// + +/datum/recipe/waffles + reagents = list("flour" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/egg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/waffles + + +/datum/recipe/waffles/soylenviridians + reagents = list("flour" = 15) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans + ) + result = /obj/item/weapon/reagent_containers/food/snacks/soylenviridians + +/datum/recipe/waffles/soylentgreen + reagents = list("flour" = 15) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/human, + /obj/item/weapon/reagent_containers/food/snacks/meat/human, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen + + +/datum/recipe/waffles/roffle + reagents = list("mushroomhallucinogen" = 5, "flour" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/egg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles + +////////////////////////////////////////////////DONKPOCCKETS//////////////////////////////////////////////// + +/datum/recipe/donkpocket + reagents = list("flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/faggot, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL + proc/warm_up(var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked) + being_cooked.warm = 1 + being_cooked.reagents.add_reagent("tricordrazine", 5) + being_cooked.bitesize = 6 + being_cooked.name = "Warm " + being_cooked.name + being_cooked.cooltime() + make_food(var/obj/container as obj) + var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = ..(container) + warm_up(being_cooked) + return being_cooked + +/datum/recipe/donkpocket/warm + reagents = list() //This is necessary since this is a child object of the above recipe and we don't want donk pockets to need flour + items = list( + /obj/item/weapon/reagent_containers/food/snacks/donkpocket + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL + make_food(var/obj/container as obj) + var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = locate() in container + if(being_cooked && !being_cooked.warm) + warm_up(being_cooked) + return being_cooked + +////////////////////////////////////////////////MUFFINS//////////////////////////////////////////////// + +/datum/recipe/muffin + reagents = list("milk" = 5, "flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/muffin + +/datum/recipe/muffin/berry + reagents = list("milk" = 5, "flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/grown/berries + ) + result = /obj/item/weapon/reagent_containers/food/snacks/muffin/berry + +/datum/recipe/muffin/booberry + reagents = list("milk" = 5, "flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/grown/berries, + /obj/item/weapon/ectoplasm + ) + result = /obj/item/weapon/reagent_containers/food/snacks/muffin/booberry + +/datum/recipe/muffin/chawanmushi + reagents = list("water" = 5, "soysauce" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chawanmushi + +////////////////////////////////////////////OTHER//////////////////////////////////////////// + +/datum/recipe/hotdog + reagents = list("ketchup" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/breadslice, + /obj/item/weapon/reagent_containers/food/snacks/sausage, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/hotdog + +/datum/recipe/meatbun + reagents = list("soysauce" = 5, "flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/faggot, + /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/meatbun + +/datum/recipe/sugarcookie + reagents = list("flour" = 5, "sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie + +/datum/recipe/fortunecookie + reagents = list("flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/paper, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie +/datum/recipe/fortunecookie/make_food(var/obj/container as obj) + var/obj/item/weapon/paper/paper = locate() in container + paper.loc = null //prevent deletion + var/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/being_cooked = ..(container) + paper.loc = being_cooked + being_cooked.trash = paper //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn + return being_cooked + +/datum/recipe/poppypretzel + reagents = list("flour" = 5) + items = list( + /obj/item/seeds/poppyseed, + /obj/item/weapon/reagent_containers/food/snacks/egg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel + +/datum/recipe/plumphelmetbiscuit + reagents = list("flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit + +/datum/recipe/appletart + reagents = list("sugar" = 5, "milk" = 5, "flour" = 15) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/appletart + +/datum/recipe/cracker + reagents = list("flour" = 5, "sodiumchloride" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/cracker diff --git a/code/modules/food&drinks/recipes/microwave/recipes_pies.dm b/code/modules/food&drinks/recipes/microwave/recipes_pie.dm similarity index 100% rename from code/modules/food&drinks/recipes/microwave/recipes_pies.dm rename to code/modules/food&drinks/recipes/microwave/recipes_pie.dm diff --git a/code/modules/food&drinks/recipes/microwave/recipes_pizza.dm b/code/modules/food&drinks/recipes/microwave/recipes_pizza.dm new file mode 100644 index 00000000000..6aee67ae111 --- /dev/null +++ b/code/modules/food&drinks/recipes/microwave/recipes_pizza.dm @@ -0,0 +1,47 @@ + +////////////////////////////////////////////////PIZZA!!!//////////////////////////////////////////////// + +/datum/recipe/pizza/margherita + reagents = list("flour" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita + +/datum/recipe/pizza/meat + reagents = list("flour" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza + +/datum/recipe/pizza/mushroom + reagents = list("flour" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza + +/datum/recipe/pizza/vegetable + reagents = list("flour" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant, + /obj/item/weapon/reagent_containers/food/snacks/grown/carrot, + /obj/item/weapon/reagent_containers/food/snacks/grown/corn, + /obj/item/weapon/reagent_containers/food/snacks/grown/tomato, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza + + diff --git a/code/modules/food&drinks/recipes/microwave/recipes_salad.dm b/code/modules/food&drinks/recipes/microwave/recipes_salad.dm new file mode 100644 index 00000000000..2ad41f702e8 --- /dev/null +++ b/code/modules/food&drinks/recipes/microwave/recipes_salad.dm @@ -0,0 +1,37 @@ +////////////////////////////////////////////////SALADS//////////////////////////////////////////////// + +/datum/recipe/salad/herb + items = list( + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, + /obj/item/weapon/reagent_containers/food/snacks/grown/apple, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/herbsalad + make_food(var/obj/container as obj) + var/obj/item/weapon/reagent_containers/food/snacks/herbsalad/being_cooked = ..(container) + being_cooked.reagents.del_reagent("toxin") + return being_cooked + +/datum/recipe/salad/aesir + items = list( + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus, + /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/aesirsalad + +/datum/recipe/salad/valid + items = list( + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, + /obj/item/weapon/reagent_containers/food/snacks/grown/potato, + /obj/item/weapon/reagent_containers/food/snacks/faggot, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/validsalad + make_food(var/obj/container as obj) + var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..(container) + being_cooked.reagents.del_reagent("toxin") + return being_cooked \ No newline at end of file diff --git a/code/modules/holiday/halloween.dm b/code/modules/holiday/halloween.dm new file mode 100644 index 00000000000..61dc44b8878 --- /dev/null +++ b/code/modules/holiday/halloween.dm @@ -0,0 +1,306 @@ +//spooky halloween stuff. only tick on halloween!!! + + +//uses super seekrit double proc definition stuffs. remember to call ..()! +/*/mob/dead/observer/say(var/message) //this doesn't actually work vOv + ..() + for(var/mob/M in hearers(src, 1)) + if(!M.stat) + if(M.job == "Chaplain") + if (prob (49)) + M.show_message("You hear muffled speech... but nothing is there...", 2) + if(prob(20)) + playsound(src.loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1) + else + M.show_message("You hear muffled speech... you can almost make out some words...", 2) +// M.show_message("[stutter(message)]", 2) + if(prob(30)) + playsound(src.loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1) + else + if(prob(50)) + return + else if(prob (95)) + M.show_message("You hear muffled speech... but nothing is there...", 2) + if(prob(20)) + playsound(src.loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1) + else + M.show_message("You hear muffled speech... you can almost make out some words...", 2) +// M.show_message("[stutter(message)]", 2) + playsound(src.loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1)*/ + + +/////////////////////////////////////// +///////////HALLOWEEN CONTENT/////////// +/////////////////////////////////////// + + +//spooky recipes + +/datum/recipe/sugarcookie/spookyskull + reagents = list("flour" = 5, "sugar" = 5, "milk" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookyskull + +/datum/recipe/sugarcookie/spookycoffin + reagents = list("flour" = 5, "sugar" = 5, "coffee" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookycoffin + +////////////////////////////// +//Spookoween trapped closets// +////////////////////////////// + +#define SPOOKY_SKELETON 1 +#define ANGRY_FAITHLESS 2 +#define SCARY_BATS 3 +#define INSANE_CLOWN 4 +#define HOWLING_GHOST 5 + +//Spookoween variables +/obj/structure/closet + var/trapped = 0 + var/mob/trapped_mob + +/obj/structure/closet/initialize() + ..() + if(prob(30)) + set_spooky_trap() + +/obj/structure/closet/dump_contents() + ..() + trigger_spooky_trap() + +/obj/structure/closet/proc/set_spooky_trap() + if(prob(0.1)) + trapped = INSANE_CLOWN + return + if(prob(1)) + trapped = ANGRY_FAITHLESS + return + if(prob(15)) + trapped = SCARY_BATS + return + if(prob(20)) + trapped = HOWLING_GHOST + return + else + var/mob/living/carbon/human/H = new (loc) + H.makeSkeleton() + H.health = 1e5 + insert(H) + trapped_mob = H + trapped = SPOOKY_SKELETON + return + +/obj/structure/closet/proc/trigger_spooky_trap() + if(!trapped) + return + + if(trapped == SPOOKY_SKELETON) + src.visible_message("BOO!"); + playsound(src.loc, pick('sound/effects/xylophone1.ogg','sound/effects/xylophone2.ogg','sound/effects/xylophone3.ogg','sound/spookoween/girlscream.ogg'), 300, 1) + trapped = 0 + spawn(60) + if(trapped_mob && trapped_mob.loc && trapped_mob.loc != loc) + var/datum/effect/effect/system/harmless_smoke_spread/smoke = new + smoke.set_up(1,0, trapped_mob.loc, 0) + smoke.start() + trapped_mob.loc = loc + if(gc_destroyed) + qdel(trapped_mob) + return + src.close() + trapped = SPOOKY_SKELETON + return + + if(trapped == ANGRY_FAITHLESS) + src.visible_message("The closet bursts open!"); + src.visible_message("THIS BEING RADIATES PURE EVIL! YOU BETTER RUN !!!"); + playsound(src.loc, 'sound/hallucinations/wail.ogg', 300, 1) + var/mob/living/simple_animal/hostile/faithless/F = new (loc) + F.health =1e5 + F.stance = HOSTILE_STANCE_ATTACK + F.GiveTarget(usr) + trapped = 0 + qdel(src) + spawn(120) + if(F && F.loc) + var/datum/effect/effect/system/harmless_smoke_spread/smoke = new + smoke.set_up(1,0, F.loc, 0) + smoke.start() + qdel(F) + return + + if(trapped == SCARY_BATS) + src.visible_message("Protect your hairs !!!"); + playsound(src.loc, 'sound/spookoween/bats.ogg', 300, 1) + var/number = rand(1,4) + for(var/i=0,i < number,i++) + new /mob/living/simple_animal/hostile/retaliate/bat (loc) + trapped = 0 + return + + if(trapped == INSANE_CLOWN) + src.visible_message("..."); + playsound(src.loc, 'sound/spookoween/scary_clown_appear.ogg', 300, 1) + var/mob/living/simple_animal/hostile/retaliate/clown/insane/IC = new (loc) + IC.GiveTarget(usr) + trapped = 0 + return + + if(trapped == HOWLING_GHOST) + src.visible_message("Woo Woo"); + playsound(src.loc, 'sound/spookoween/ghosty_wind.ogg', 300, 1) + new /mob/living/simple_animal/shade/howling_ghost (loc) + trapped = 0 + return + +//don't spawn in crates +/obj/structure/closet/crate/trigger_spooky_trap() + return 0 + +/obj/structure/closet/crate/set_spooky_trap() + return 0 + + +//////////////////// +//Spookoween Ghost// +//////////////////// + +/mob/living/simple_animal/shade/howling_ghost + name ="Ghost" + real_name = "Ghost" + icon = 'icons/mob/mob.dmi' + maxHealth = 1e6 + health = 1e6 + speak_emote = list("howls") + emote_hear = list("wails","screeches") + density = 0 + anchored = 1 + incorporeal_move = 1 + layer = 4 + var/timer = 0 + +/mob/living/simple_animal/shade/howling_ghost/New() + ..() + icon_state = pick("ghost","ghostian","ghostian2","ghostking","ghost1","ghost2") + icon_living = icon_state + status_flags |= GODMODE + timer = rand(1,15) + +/mob/living/simple_animal/shade/howling_ghost/Life() + ..() + timer-- + if(timer == 0) + roam() + spooky_ghosty() + timer = rand(1,15) + +/mob/living/simple_animal/shade/howling_ghost/proc/EtherealMove(direction) + loc = get_step(src, direction) + dir = direction + +/mob/living/simple_animal/shade/howling_ghost/proc/roam() + if(prob(80)) + var/direction = pick(NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST) + EtherealMove(direction) + +/mob/living/simple_animal/shade/howling_ghost/proc/spooky_ghosty() + if(prob(20)) //haunt + playsound(src.loc, pick('sound/spookoween/ghosty_wind.ogg','sound/spookoween/ghost_whisper.ogg','sound/spookoween/chain_rattling.ogg'), 300, 1) + if(prob(10)) //flickers + var/obj/machinery/light/L = locate(/obj/machinery/light) in view(5, src) + if(L) + L.flicker() + if(prob(5)) //poltergeist + var/obj/item/I = locate(/obj/item) in view(3, src) + if(I) + var/direction = pick(NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST) + step(I,direction) + return + +/mob/living/simple_animal/shade/howling_ghost/adjustBruteLoss() + return + +/mob/living/simple_animal/shade/howling_ghost/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + return 1 + + +/////////////////////////// +//Spookoween Insane Clown// +/////////////////////////// + +/mob/living/simple_animal/hostile/retaliate/clown/insane + name = "Insane Clown" + desc = "May the HonkMother have mercy..." + icon_state = "scary_clown" + icon_living = "scary_clown" + icon_dead = "scary_clown" + icon_gib = "scary_clown" + speak = list("...", ". . .") + maxHealth = 1e6 + health = 1e6 + emote_see = list("silently stares") + heat_damage_per_tick = 0 + cold_damage_per_tick = 0 + unsuitable_atmos_damage = 0 + + var/timer + +/mob/living/simple_animal/hostile/retaliate/clown/insane/New() + ..() + timer = rand(5,15) + status_flags = (status_flags | GODMODE) + return + +/mob/living/simple_animal/hostile/retaliate/clown/insane/Retaliate() + return + +/mob/living/simple_animal/hostile/retaliate/clown/insane/ex_act() + return + +/mob/living/simple_animal/hostile/retaliate/clown/insane/Life() + timer-- + if(target) + stalk() + return + +/mob/living/simple_animal/hostile/retaliate/clown/insane/proc/stalk() + var/mob/living/M = target + if(M.stat == DEAD) + playsound(M.loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1) + qdel(src) + if(timer == 0) + timer = rand(5,15) + playsound(M.loc, pick('sound/spookoween/scary_horn.ogg','sound/spookoween/scary_horn2.ogg', 'sound/spookoween/scary_horn3.ogg'), 300, 1) + spawn(12) + loc = M.loc + return + +/mob/living/simple_animal/hostile/retaliate/clown/insane/MoveToTarget() + return + +/mob/living/simple_animal/hostile/retaliate/clown/insane/AttackTarget() + return + +/mob/living/simple_animal/hostile/retaliate/clown/insane/adjustBruteLoss() + if(prob(5)) + playsound(src.loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1) + return + +/mob/living/simple_animal/hostile/retaliate/clown/insane/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O,/obj/item/weapon/nullrod)) + if(prob(5)) + visible_message("[src] finally found the peace it deserves. HONK for the HonkMother !"); + playsound(src.loc, 'sound/spookoween/insane_low_laugh.ogg', 300, 1) + qdel(src) + return + else + visible_message("It seems to be resisting the effect!!!"); + return + ..() + diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 3b76c06082c..511c5807572 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -127,6 +127,9 @@ if("void") dat += " Error: No growns inside. "
menustat = "menu"
+ if("nobeakerspace")
+ dat += "Please, put growns into reactor. Not enough space left in container. Unable to create product. "
+ menustat = "menu"
if(beaker)
dat += "Biomass: [points] units. " dat += "ActivateDetach Container" @@ -151,6 +154,7 @@ dat += "Botanical gloves: Make ([250/efficiency]) " dat += "Utility belt: Make ([300/efficiency]) " dat += "Leather Satchel: Make ([400/efficiency]) " + dat += "Leather Jacket: Make ([500/efficiency]) " dat += "" else dat += " No container inside, please insert container. "
@@ -202,13 +206,20 @@
updateUsrDialog()
return 0
+/obj/machinery/biogenerator/proc/check_container_volume(var/reagent_amount)
+ if(beaker.reagents.total_volume + reagent_amount > beaker.reagents.maximum_volume)
+ menustat = "nobeakerspace"
+ return 1
+
/obj/machinery/biogenerator/proc/create_product(var/create)
switch(create)
if("milk")
- if (check_cost(20/efficiency)) return 0
+ if(check_container_volume(10)) return 0
+ else if (check_cost(20/efficiency)) return 0
else beaker.reagents.add_reagent("milk",10)
if("cream")
- if (check_cost(30/efficiency)) return 0
+ if(check_container_volume(10)) return 0
+ else if (check_cost(30/efficiency)) return 0
else beaker.reagents.add_reagent("cream",10)
if("meat")
if (check_cost(250/efficiency)) return 0
@@ -243,6 +254,9 @@
if("satchel")
if (check_cost(400/efficiency)) return 0
else new/obj/item/weapon/storage/backpack/satchel(src.loc)
+ if("jacket")
+ if (check_cost(500/efficiency)) return 0
+ else new/obj/item/clothing/suit/jacket/leather(src.loc)
//if("monkey")
// if (check_cost(500)) return 0
// else new/mob/living/carbon/monkey(src.loc)
@@ -274,12 +288,11 @@
else if(href_list["create"])
var/amount = (text2num(href_list["amount"]))
var/i = amount
- var/cost = (text2num(href_list["cost"]))
var/C = href_list["create"]
if(i <= 0)
return
while(i >= 1)
- create_product(C, cost, i)
+ create_product(C)
i--
updateUsrDialog()
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index ab5112831d6..1b37c72e8ba 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -736,14 +736,41 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice()
/obj/item/weapon/reagent_containers/food/snacks/grown/grass/attack_self(mob/user as mob)
user << "You prepare the astroturf."
- var/location = get_turf(user)
var/grassAmt = 1 + round(potency / 50) // The grass we're holding
- for(var/obj/item/weapon/reagent_containers/food/snacks/grown/grass/grassToConvert in location) // The grass on the floor
- grassAmt += 1
- qdel(grassToConvert)
- var/obj/item/stack/tile/newAstroturf = new /obj/item/stack/tile/grass(location)
- newAstroturf.amount = grassAmt
+ for(var/obj/item/weapon/reagent_containers/food/snacks/grown/grass/G in user.loc) // The grass on the floor
+ grassAmt += 1 + round(G.potency / 50)
+ qdel(G)
+ while(grassAmt > 0)
+ var/obj/item/stack/tile/GT = new /obj/item/stack/tile/grass(user.loc)
+ if(grassAmt >= GT.max_amount)
+ GT.amount = GT.max_amount
+ else
+ GT.amount = grassAmt
+ grassAmt -= GT.max_amount
qdel(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/carpet
+ seed = /obj/item/seeds/carpetseed
+ name = "carpet"
+ desc = "The textile industry's dark secret."
+ icon_state = "carpetclump"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/carpet/attack_self(mob/user as mob)
+ user << "You roll out the red carpet."
+ var/carpetAmt = 1 + round(potency / 50) // The carpet we're holding
+ for(var/obj/item/weapon/reagent_containers/food/snacks/grown/carpet/C in user.loc) // The carpet on the floor
+ carpetAmt += 1 + round(C.potency / 50)
+ qdel(C)
+ while(carpetAmt > 0)
+ var/obj/item/stack/tile/CT = new /obj/item/stack/tile/carpet(user.loc)
+ if(carpetAmt >= CT.max_amount)
+ CT.amount = CT.max_amount
+ else
+ CT.amount = carpetAmt
+ carpetAmt -= CT.max_amount
+ qdel(src)
+ return
/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod
seed = /obj/item/seeds/kudzuseed
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index 3a69a546cb7..def1291608f 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -264,7 +264,14 @@
var/stun = Clamp(potency / 10, 1, 10)
var/weaken = Clamp(potency / 20, 0.5, 5)
M.slip(stun, weaken, src)
+ return 1
+/obj/item/weapon/grown/bananapeel/specialpeel //used by /obj/item/clothing/shoes/clown_shoes/banana_shoes
+ name = "synthesized banana peel"
+ desc = "A synthetic banana peel."
+
+/obj/item/weapon/grown/bananapeel/specialpeel/Crossed(AM)
+ if(..()) qdel(src)
/obj/item/weapon/grown/corncob
name = "corn cob"
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 44347c4a399..1f34b8fd6d9 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -1013,6 +1013,23 @@
potency = 10
plant_type = 0
growthstages = 2
+ mutatelist = list(/obj/item/seeds/carpetseed)
+
+/obj/item/seeds/carpetseed
+ name = "pack of carpet seeds"
+ desc = "These seeds grow into stylish carpet samples."
+ icon_state = "seed-carpet"
+ species = "carpet"
+ plantname = "Carpet"
+ product = /obj/item/weapon/reagent_containers/food/snacks/grown/carpet
+ lifespan = 40
+ endurance = 40
+ maturation = 2
+ production = 5
+ yield = 5
+ potency = 10
+ plant_type = 0
+ growthstages = 2
/obj/item/seeds/cocoapodseed
name = "pack of cocoa pod seeds"
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index b2d5a0e2183..619279c9034 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -265,6 +265,7 @@
var/obj/item/weapon/storage/book/B = new
B.name = src.name
B.title = src.title
+ B.icon_state = src.icon_state
if(user.l_hand == src || user.r_hand == src)
qdel(src)
user.put_in_hands(B)
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 7cad50f8d9d..0919fe955ac 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -461,14 +461,20 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
icon_state = "binder"
anchored = 1
density = 1
+ var/busy = 0
/obj/machinery/bookbinder/attackby(var/obj/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/paper))
+ if(busy)
+ user << "The book binder is busy. Please wait for completion of previous operation."
+ return
user.drop_item()
O.loc = src
user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].")
src.visible_message("[src] begins to hum as it warms up its printing drums.")
+ busy = 1
sleep(rand(200,400))
+ busy = 0
src.visible_message("[src] whirs as it prints and binds a new book.")
var/obj/item/weapon/book/b = new(src.loc)
b.dat = O:info
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index b862a786611..9ee25e2f3db 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -102,7 +102,6 @@
var/obj/item/stack/sheet/s
var/dat
- dat += text("Ore Redemption Machine") dat += text("This machine only accepts ore. Gibtonite and Slag are not accepted. ") dat += text("Current unclaimed points: [points] ") @@ -115,6 +114,8 @@ for(var/O in stack_list) s = stack_list[O] if(s.amount > 0) + if(O == stack_list[1]) + dat += " " //just looks nicer dat += text("[capitalize(s.name)]: [s.amount] Release ") if((/obj/item/stack/sheet/metal in stack_list) && (/obj/item/stack/sheet/mineral/plasma in stack_list)) @@ -123,10 +124,11 @@ if(min(metalstack.amount, plasmastack.amount)) dat += text("Plasteel Alloy (Metal + Plasma): Smelt ") - dat += text(" Mineral Value List: [get_ore_values()]") - - user << browse("[dat]", "window=console_stacking_machine") + dat += text(" Mineral Value List: ")
+ var/datum/browser/popup = new(user, "console_stacking_machine", "Ore Redemption Machine", 400, 500)
+ popup.set_content(dat)
+ popup.open()
return
/obj/machinery/mineral/ore_redemption/proc/get_ore_values()
@@ -228,19 +230,20 @@
anchored = 1.0
var/obj/item/weapon/card/id/inserted_id
var/list/prize_list = list(
- new /datum/data/mining_equipment("Chili", /obj/item/weapon/reagent_containers/food/snacks/hotchili, 100),
+ new /datum/data/mining_equipment("Stimpack MediPen", /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack, 50),
+ new /datum/data/mining_equipment("Leporazine MediPen", /obj/item/weapon/reagent_containers/hypospray/medipen/leporazine, 50),
+ new /datum/data/mining_equipment("MediPen Bundle", /obj/item/weapon/storage/box/medipens/utility, 200),
new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 100),
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150),
new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 200),
new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 250),
- new /datum/data/mining_equipment("Stimulant Pills", /obj/item/weapon/storage/pill_bottle/stimulant, 350),
- new /datum/data/mining_equipment("Advanced Scanner", /obj/item/device/t_scanner/adv_mining_scanner, 400),
+ new /datum/data/mining_equipment("Advanced Scanner", /obj/item/device/t_scanner/adv_mining_scanner, 300),
new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 400),
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 450),
new /datum/data/mining_equipment("Mining Drone", /mob/living/simple_animal/hostile/mining_drone/, 500),
+ new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 650),
+ new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 650),
new /datum/data/mining_equipment("Sonic Jackhammer", /obj/item/weapon/pickaxe/jackhammer, 800),
- new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 1000),
- new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 1000),
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000),
new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack/carbondioxide/mining, 2000),
new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 5000),
@@ -274,19 +277,20 @@
/obj/machinery/mineral/equipment_vendor/interact(mob/user)
var/dat
- dat += text("Mining Equipment vendor[get_ore_values()] ") - + dat +=" "
if(istype(inserted_id))
dat += "You have [inserted_id.mining_points] mining points collected. Eject ID. " else dat += "No ID inserted. Insert ID. " - - dat += " Equipment point cost list:
" + d += "
|