diff --git a/baystation12.dme b/baystation12.dme index d2066f939d8..bd47d9247ac 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -5,63 +5,6 @@ // END_INTERNALS // BEGIN_FILE_DIR #define FILE_DIR . -#define FILE_DIR "code" -#define FILE_DIR "code/TriDimension" -#define FILE_DIR "code/WorkInProgress" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Jungle" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/ShieldGen" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter" -#define FILE_DIR "code/WorkInProgress/Susan" -#define FILE_DIR "html" -#define FILE_DIR "icons" -#define FILE_DIR "icons/48x48" -#define FILE_DIR "icons/ass" -#define FILE_DIR "icons/effects" -#define FILE_DIR "icons/mecha" -#define FILE_DIR "icons/misc" -#define FILE_DIR "icons/mob" -#define FILE_DIR "icons/mob/human_races" -#define FILE_DIR "icons/mob/otherHuman" -#define FILE_DIR "icons/NTOS" -#define FILE_DIR "icons/obj" -#define FILE_DIR "icons/obj/assemblies" -#define FILE_DIR "icons/obj/atmospherics" -#define FILE_DIR "icons/obj/clothing" -#define FILE_DIR "icons/obj/doors" -#define FILE_DIR "icons/obj/flora" -#define FILE_DIR "icons/obj/machines" -#define FILE_DIR "icons/obj/pipes" -#define FILE_DIR "icons/obj/power_cond" -#define FILE_DIR "icons/pda_icons" -#define FILE_DIR "icons/spideros_icons" -#define FILE_DIR "icons/stamp_icons" -#define FILE_DIR "icons/Testing" -#define FILE_DIR "icons/turf" -#define FILE_DIR "icons/vending_icons" -#define FILE_DIR "nano" -#define FILE_DIR "nano/images" -#define FILE_DIR "sound" -#define FILE_DIR "sound/AI" -#define FILE_DIR "sound/ambience" -#define FILE_DIR "sound/effects" -#define FILE_DIR "sound/effects/turret" -#define FILE_DIR "sound/effects/wind" -#define FILE_DIR "sound/hallucinations" -#define FILE_DIR "sound/items" -#define FILE_DIR "sound/machines" -#define FILE_DIR "sound/mecha" -#define FILE_DIR "sound/misc" -#define FILE_DIR "sound/music" -#define FILE_DIR "sound/piano" -#define FILE_DIR "sound/turntable" -#define FILE_DIR "sound/violin" -#define FILE_DIR "sound/voice" -#define FILE_DIR "sound/voice/Serithi" -#define FILE_DIR "sound/vox" -#define FILE_DIR "sound/vox_fem" -#define FILE_DIR "sound/weapons" // END_FILE_DIR // BEGIN_PREFERENCES #define DEBUG @@ -622,6 +565,7 @@ #include "code\game\objects\items\weapons\teleportation.dm" #include "code\game\objects\items\weapons\tools.dm" #include "code\game\objects\items\weapons\twohanded.dm" +#include "code\game\objects\items\weapons\vending_items.dm" #include "code\game\objects\items\weapons\weaponry.dm" #include "code\game\objects\items\weapons\wires.dm" #include "code\game\objects\items\weapons\grenades\bananade.dm" diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 3d4a5f6a676..3150f2c09cd 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1006,3 +1006,39 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Beekeeping crate" access = access_hydroponics group = "Hydroponics" + + +/datum/supply_packs/organic/vending + name = "Bartending Supply Crate" + contains = list(/obj/item/weapon/vending_refill/boozeomat, + /obj/item/weapon/vending_refill/coffee) + cost = 15 + containername = "bartending supply crate" + +/datum/supply_packs/organic/vending/snack + name = "Snack Supply Crate" + contains = list(/obj/item/weapon/vending_refill/snack, + /obj/item/weapon/vending_refill/snack, + /obj/item/weapon/vending_refill/snack) + cost = 15 + containername = "snacks supply crate" + +/datum/supply_packs/organic/vending/cola + name = "Softdrinks Supply Crate" + contains = list(/obj/item/weapon/vending_refill/cola, + /obj/item/weapon/vending_refill/cola) + cost = 15 + containername = "softdrinks supply crate" + +/datum/supply_packs/organic/vending/cigarette + name = "Cigarette Supply Crate" + contains = list(/obj/item/weapon/vending_refill/cigarette) + cost = 15 + containername = "cigarette supply crate" + +/datum/supply_packs/misc/autodrobe + name = "Autodrobe Supply crate" + contains = list(/obj/item/weapon/vending_refill/autodrobe, + /obj/item/weapon/vending_refill/autodrobe) + cost = 15 + containername = "autodrobe supply crate" diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 75d3e402f8a..c6c0e4586b9 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1234,6 +1234,9 @@ proc/process_ghost_teleport_locs() /area/security/armoury name = "\improper Armory" icon_state = "Warden" +/area/security/armoury/gamma + name = "\improper Gamma Armory" + icon_state = "Warden" /area/security/hos name = "\improper Head of Security's Office" diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index c3b77d5f875..bfbdfc417f0 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -532,6 +532,7 @@ As such, it's hard-coded for now. No reason for it not to be, really. del(head) del(shoes) del(gloves) + del(back) var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src) equip_to_slot_or_del(R, slot_l_ear) @@ -544,6 +545,7 @@ As such, it's hard-coded for now. No reason for it not to be, really. equip_to_slot_or_del(new /obj/item/clothing/gloves/space_ninja(src), slot_gloves) equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/space_ninja(src), slot_head) equip_to_slot_or_del(new /obj/item/clothing/mask/gas/voice/space_ninja(src), slot_wear_mask) + equip_to_slot_or_del(new /obj/item/weapon/tank/jetpack/oxygenblack(src), slot_back) equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt) equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_r_store) equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_l_store) diff --git a/code/game/machinery/computer/telescience.dm b/code/game/machinery/computer/telescience.dm index 1b3b875d836..b0ce949fc0c 100644 --- a/code/game/machinery/computer/telescience.dm +++ b/code/game/machinery/computer/telescience.dm @@ -191,6 +191,9 @@ if(z_co == 2 || z_co < 1 || z_co > 6) usr << "\red Error: Z is less than 1, greater than 6, or equal to 2." fail = 1 + if(istype(get_area(locate(x_co,y_co,z_co)), /area/security/armoury/gamma)) + usr << "\red Error: Attempting to access telescience-protected area." + fail = 1 return fail /obj/machinery/computer/telescience/Topic(href, href_list) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 4d92b6ee8e4..5e6b66be525 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -121,6 +121,11 @@ opacity = 1 assembly_type = /obj/structure/door_assembly/door_assembly_hatch +/obj/machinery/door/airlock/hatch/gamma + name = "Gamma Level Hatch" + hackProof = 1 + aiControlDisabled = 1 + /obj/machinery/door/airlock/maintenance_hatch name = "Maintenance Hatch" icon = 'icons/obj/doors/Doorhatchmaint2.dmi' @@ -288,6 +293,11 @@ icon = 'icons/obj/doors/hightechsecurity.dmi' assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity +/obj/machinery/door/airlock/highsecurity/red + name = "Secure Armory Airlock" + hackProof = 1 + aiControlDisabled = 1 + /* About the new airlock wires panel: * An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires. @@ -1062,3 +1072,54 @@ About the new airlock wires panel: src.open() src.locked = 1 return + + +/obj/machinery/door/airlock/hatch/gamma/attackby(C as obj, mob/user as mob) + //world << text("airlock attackby src [] obj [] mob []", src, C, user) + if(!istype(usr, /mob/living/silicon)) + if(src.isElectrified()) + if(src.shock(user, 75)) + return + if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll)) + return + + src.add_fingerprint(user) + if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating > 0 ) && src.density)) + var/obj/item/weapon/weldingtool/W = C + if(W.remove_fuel(0,user)) + if(frozen) + frozen = 0 + if(!src.welded) + src.welded = 1 + else + src.welded = null + src.update_icon() + return + else + return + + +/obj/machinery/door/airlock/highsecurity/red/attackby(C as obj, mob/user as mob) + //world << text("airlock attackby src [] obj [] mob []", src, C, user) + if(!istype(usr, /mob/living/silicon)) + if(src.isElectrified()) + if(src.shock(user, 75)) + return + if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll)) + return + + src.add_fingerprint(user) + if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating > 0 ) && src.density)) + var/obj/item/weapon/weldingtool/W = C + if(W.remove_fuel(0,user)) + if(frozen) + frozen = 0 + if(!src.welded) + src.welded = 1 + else + src.welded = null + src.update_icon() + return + else + return + diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 09e7ceff8d4..de45169baed 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -2,6 +2,7 @@ var/product_name = "generic" var/product_path = null var/amount = 0 + var/max_amount = 0 var/price = 0 var/display_color = "blue" @@ -52,7 +53,7 @@ var/const/WIRE_SHOOTINV = 4 var/datum/wires/vending/wires = null var/scan_id = 1 - + var/obj/item/weapon/vending_refill/refill_canister = null //The type of refill canisters used by this machine. /obj/machinery/vending/New() @@ -118,6 +119,7 @@ R.product_name = temp.name R.product_path = typepath R.amount = amount + R.max_amount = amount R.price = price R.display_color = pick("red","blue","green") @@ -130,6 +132,36 @@ // world << "Added: [R.product_name]] - [R.amount] - [R.product_path]" return +/obj/machinery/vending/proc/refill_inventory(obj/item/weapon/vending_refill/refill, datum/data/vending_product/machine, mob/user) + var/total = 0 + + var/to_restock = 0 + for(var/datum/data/vending_product/machine_content in machine) + to_restock += machine_content.max_amount - machine_content.amount + + if(to_restock <= refill.charges) + for(var/datum/data/vending_product/machine_content in machine) + if(machine_content.amount != machine_content.max_amount) + usr << "[machine_content.max_amount - machine_content.amount] of [machine_content.product_name]" + machine_content.amount = machine_content.max_amount + refill.charges -= to_restock + total = to_restock + else + var/tmp_charges = refill.charges + for(var/datum/data/vending_product/machine_content in machine) + var/restock = Ceiling(((machine_content.max_amount - machine_content.amount)/to_restock)*tmp_charges) + if(restock > refill.charges) + restock = refill.charges + machine_content.amount += restock + refill.charges -= restock + total += restock + if(restock) + usr << "[restock] of [machine_content.product_name]" + if(refill.charges == 0) //due to rounding, we ran out of refill charges, exit. + break + return total + + /obj/machinery/vending/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/card/emag)) src.emagged = 1 @@ -163,9 +195,23 @@ else if(istype(W, /obj/item/weapon/card) && currently_vending) var/obj/item/weapon/card/I = W scan_card(I) - - - + else if(istype(W, refill_canister) && refill_canister != null) + if(stat & (BROKEN|NOPOWER)) + user << "It does nothing." + else if(panel_open) + //if the panel is open we attempt to refill the machine + var/obj/item/weapon/vending_refill/canister = W + if(canister.charges == 0) + user << "This [canister.name] is empty!" + else + var/transfered = refill_inventory(canister,product_records,user) + if(transfered) + user << "You loaded [transfered] items in \the [name]." + else + user << "The [name] is fully stocked." + return; + else + user << "You should probably unscrew the service panel first." else ..() @@ -542,7 +588,7 @@ vend_delay = 15 product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" - + refill_canister = /obj/item/weapon/vending_refill/boozeomat /obj/machinery/vending/assist products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4, /obj/item/weapon/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4) @@ -559,7 +605,7 @@ products = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 25,/obj/item/weapon/reagent_containers/food/drinks/tea = 25,/obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 25) contraband = list(/obj/item/weapon/reagent_containers/food/drinks/ice = 10) prices = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 25, /obj/item/weapon/reagent_containers/food/drinks/tea = 25, /obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 25) - + refill_canister = /obj/item/weapon/vending_refill/coffee @@ -576,7 +622,7 @@ prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 20,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 30,/obj/item/weapon/reagent_containers/food/snacks/chips =25, /obj/item/weapon/reagent_containers/food/snacks/sosjerky = 30,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 20,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 30, /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 25) - + refill_canister = /obj/item/weapon/vending_refill/snack /obj/machinery/vending/chinese name = "Mr. Chang" desc = "A self-serving chinese food machine, for all your chinese food needs." @@ -600,7 +646,7 @@ prices = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola = 20,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind = 20, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/dr_gibb = 20,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/starkist = 20, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_up = 20) - + refill_canister = /obj/item/weapon/vending_refill/cola //This one's from bay12 /obj/machinery/vending/cart name = "PTech" @@ -624,7 +670,7 @@ contraband = list(/obj/item/weapon/lighter/zippo = 4) premium = list(/obj/item/clothing/mask/cigarette/cigar/havana = 2) prices = list(/obj/item/weapon/storage/fancy/cigarettes = 60,/obj/item/weapon/storage/box/matches = 10,/obj/item/weapon/lighter/random = 60) - + refill_canister = /obj/item/weapon/vending_refill/cigarette /obj/machinery/vending/medical name = "NanoMed Plus" @@ -749,7 +795,7 @@ /obj/item/clothing/head/rabbitears =1) //Pretty much everything that had a chance to spawn. contraband = list(/obj/item/clothing/suit/cardborg = 1,/obj/item/clothing/head/cardborg = 1,/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1) premium = list(/obj/item/clothing/suit/hgpirate = 1, /obj/item/clothing/head/hgpiratecap = 1, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/weapon/shield/riot/roman = 1) - + refill_canister = /obj/item/weapon/vending_refill/autodrobe /obj/machinery/vending/dinnerware name = "Dinnerware" desc = "A kitchen and restaurant equipment vendor" @@ -820,7 +866,7 @@ /obj/machinery/vending/eva name = "Hardsuit Kits" desc = "Conversion kits for your alien hardsuit needs." - products = list(/obj/item/weapon/modkit/tajaran = 6) + products = list(/obj/item/weapon/modkit/tajaran = 6, /obj/item/weapon/modkit/unathi = 6) /obj/machinery/vending/sustenance diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index 0c7fda774bd..7a0486232c5 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -590,7 +590,7 @@
- +