From 67ee6fdd418f84b3a1df8384113d2333558be116 Mon Sep 17 00:00:00 2001 From: davipatury Date: Mon, 20 Feb 2017 21:28:14 -0300 Subject: [PATCH] Laptop vendor, access tweaks and computer recipes. --- code/game/jobs/access.dm | 8 +- code/game/jobs/job/science.dm | 6 +- .../items/stacks/sheets/sheet_types.dm | 1 + .../modular_computers/laptop_vendor.dm | 306 ++++++++++++++++++ code/modules/research/circuitprinter.dm | 1 + .../research/designs/computer_part_designs.dm | 251 ++++++++++++++ code/modules/research/protolathe.dm | 1 + nano/templates/card_prog.tmpl | 2 +- nano/templates/computer_fabricator.tmpl | 85 +++++ paradise.dme | 3 +- 10 files changed, 656 insertions(+), 8 deletions(-) create mode 100644 code/modules/modular_computers/laptop_vendor.dm create mode 100644 code/modules/research/designs/computer_part_designs.dm create mode 100644 nano/templates/computer_fabricator.tmpl diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index e54a4ca7bf2..0fa20a621fd 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -245,7 +245,7 @@ var/const/access_trade_sol = 160 access_pilot, access_ntrep, access_magistrate, access_mineral_storeroom, access_minisat, access_network) /proc/get_all_centcom_access() - return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_security, access_cent_storage, access_cent_shuttles, access_cent_telecomms, access_cent_teleporter, access_cent_specops, access_cent_specops_commander, access_cent_blackops, access_cent_thunder, access_cent_bridge, access_cent_commander, access_network) + return list(access_cent_general, access_cent_living, access_cent_medical, access_cent_security, access_cent_storage, access_cent_shuttles, access_cent_telecomms, access_cent_teleporter, access_cent_specops, access_cent_specops_commander, access_cent_blackops, access_cent_thunder, access_cent_bridge, access_cent_commander) /proc/get_all_syndicate_access() return list(access_syndicate, access_syndicate_leader, access_vox) @@ -267,13 +267,13 @@ var/const/access_trade_sol = 160 if(REGION_MEDBAY) //medbay return list(access_medical, access_genetics, access_morgue, access_chemistry, access_psychiatrist, access_virology, access_surgery, access_cmo, access_paramedic) if(REGION_RESEARCH) //research - return list(access_research, access_tox, access_tox_storage, access_genetics, access_robotics, access_xenobiology, access_xenoarch, access_minisat, access_rd) + return list(access_research, access_tox, access_tox_storage, access_genetics, access_robotics, access_xenobiology, access_xenoarch, access_minisat, access_rd, access_network) if(REGION_ENGINEERING) //engineering and maintenance return list(access_construction, access_maint_tunnels, access_engine, access_engine_equip, access_external_airlocks, access_tech_storage, access_atmospherics, access_minisat, access_ce, access_mechanic) if(REGION_SUPPLY) //supply return list(access_mailsorting, access_mining, access_mining_station, access_mineral_storeroom, access_cargo, access_qm) if(REGION_COMMAND) //command - return list(access_heads, access_RC_announce, access_keycard_auth, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_tcomsat, access_network, access_gateway, access_all_personal_lockers, access_heads_vault, access_blueshield, access_ntrep, access_hop, access_captain) + return list(access_heads, access_RC_announce, access_keycard_auth, access_change_ids, access_ai_upload, access_teleporter, access_eva, access_tcomsat, access_gateway, access_all_personal_lockers, access_heads_vault, access_blueshield, access_ntrep, access_hop, access_captain) if(REGION_CENTCOMM) //because why the heck not return get_all_centcom_access() + get_all_accesses() @@ -428,7 +428,7 @@ var/const/access_trade_sol = 160 if(access_tcomsat) return "Telecommunications" if(access_network) - return "Network" + return "Network Access" if(access_gateway) return "Gateway" if(access_sec_doors) diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 2e07a08b2bc..c09bf8b2e96 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -12,11 +12,13 @@ access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, access_tox_storage, access_tech_storage, access_teleporter, access_sec_doors, access_research, access_robotics, access_xenobiology, access_ai_upload, - access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_minisat, access_mineral_storeroom) + access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, + access_minisat, access_mineral_storeroom, access_network) minimal_access = list(access_eva, access_rd, access_heads, access_tox, access_genetics, access_morgue, access_tox_storage, access_tech_storage, access_teleporter, access_sec_doors, access_research, access_robotics, access_xenobiology, access_ai_upload, - access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_minisat, access_maint_tunnels, access_mineral_storeroom) + access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, + access_minisat, access_maint_tunnels, access_mineral_storeroom, access_network) minimal_player_age = 21 exp_requirements = 600 exp_type = EXP_TYPE_CREW diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 4e822d3ce12..04e42dfa15b 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -50,6 +50,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list( new /datum/stack_recipe/rods("metal rod", /obj/item/stack/rods, 1, 2, 60), null, new /datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1), + new /datum/stack_recipe("modular console", /obj/machinery/modular_computer/console/buildable/, 10, time = 25, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1), diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm new file mode 100644 index 00000000000..71324e005ef --- /dev/null +++ b/code/modules/modular_computers/laptop_vendor.dm @@ -0,0 +1,306 @@ +// A vendor machine for modular computer portable devices - Laptops and Tablets + +/obj/machinery/lapvend + name = "computer vendor" + desc = "A vending machine with a built-in microfabricator, capable of dispensing various NT-branded computers." + icon = 'icons/obj/vending.dmi' + icon_state = "robotics" + layer = BELOW_OBJ_LAYER + anchored = 1 + density = 1 + + // The actual laptop/tablet + var/obj/item/device/modular_computer/laptop/fabricated_laptop = null + var/obj/item/device/modular_computer/tablet/fabricated_tablet = null + + // Utility vars + var/state = 0 // 0: Select device type, 1: Select loadout, 2: Payment, 3: Thankyou screen + var/devtype = 0 // 0: None(unselected), 1: Laptop, 2: Tablet + var/total_price = 0 // Price of currently vended device. + + // Device loadout + var/dev_cpu = 1 // 1: Default, 2: Upgraded + var/dev_battery = 1 // 1: Default, 2: Upgraded, 3: Advanced + var/dev_disk = 1 // 1: Default, 2: Upgraded, 3: Advanced + var/dev_netcard = 0 // 0: None, 1: Basic, 2: Long-Range + var/dev_apc_recharger = 0 // 0: None, 1: Standard (LAPTOP ONLY) + var/dev_printer = 0 // 0: None, 1: Standard + var/dev_card = 0 // 0: None, 1: Standard + +// Removes all traces of old order and allows you to begin configuration from scratch. +/obj/machinery/lapvend/proc/reset_order() + state = 0 + devtype = 0 + if(fabricated_laptop) + qdel(fabricated_laptop) + fabricated_laptop = null + if(fabricated_tablet) + qdel(fabricated_tablet) + fabricated_tablet = null + dev_cpu = 1 + dev_battery = 1 + dev_disk = 1 + dev_netcard = 0 + dev_apc_recharger = 0 + dev_printer = 0 + dev_card = 0 + +// Recalculates the price and optionally even fabricates the device. +/obj/machinery/lapvend/proc/fabricate_and_recalc_price(fabricate = 0) + total_price = 0 + if(devtype == 1) // Laptop, generally cheaper to make it accessible for most station roles + var/obj/item/weapon/computer_hardware/battery/battery_module = null + if(fabricate) + fabricated_laptop = new /obj/item/device/modular_computer/laptop/buildable(src) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/battery) + battery_module = fabricated_laptop.all_components[MC_CELL] + total_price = 99 + switch(dev_cpu) + if(1) + if(fabricate) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/processor_unit/small) + if(2) + if(fabricate) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/processor_unit) + total_price += 299 + switch(dev_battery) + if(1) // Basic(750C) + if(fabricate) + battery_module.try_insert(new /obj/item/weapon/stock_parts/cell/computer) + if(2) // Upgraded(1100C) + if(fabricate) + battery_module.try_insert(new /obj/item/weapon/stock_parts/cell/computer/advanced) + total_price += 199 + if(3) // Advanced(1500C) + if(fabricate) + battery_module.try_insert(new /obj/item/weapon/stock_parts/cell/computer/super) + total_price += 499 + switch(dev_disk) + if(1) // Basic(128GQ) + if(fabricate) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/hard_drive) + if(2) // Upgraded(256GQ) + if(fabricate) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/hard_drive/advanced) + total_price += 99 + if(3) // Advanced(512GQ) + if(fabricate) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/hard_drive/super) + total_price += 299 + switch(dev_netcard) + if(1) // Basic(Short-Range) + if(fabricate) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/network_card) + total_price += 99 + if(2) // Advanced (Long Range) + if(fabricate) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/network_card/advanced) + total_price += 299 + if(dev_apc_recharger) + total_price += 399 + if(fabricate) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/recharger/APC) + if(dev_printer) + total_price += 99 + if(fabricate) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/printer/mini) + if(dev_card) + total_price += 199 + if(fabricate) + fabricated_laptop.install_component(new /obj/item/weapon/computer_hardware/card_slot) + + return total_price + else if(devtype == 2) // Tablet, more expensive, not everyone could probably afford this. + var/obj/item/weapon/computer_hardware/battery/battery_module = null + if(fabricate) + fabricated_tablet = new(src) + fabricated_tablet.install_component(new /obj/item/weapon/computer_hardware/battery) + fabricated_tablet.install_component(new /obj/item/weapon/computer_hardware/processor_unit/small) + battery_module = fabricated_tablet.all_components[MC_CELL] + total_price = 199 + switch(dev_battery) + if(1) // Basic(300C) + if(fabricate) + battery_module.try_insert(new /obj/item/weapon/stock_parts/cell/computer/nano) + if(2) // Upgraded(500C) + if(fabricate) + battery_module.try_insert(new /obj/item/weapon/stock_parts/cell/computer/micro) + total_price += 199 + if(3) // Advanced(750C) + if(fabricate) + battery_module.try_insert(new /obj/item/weapon/stock_parts/cell/computer) + total_price += 499 + switch(dev_disk) + if(1) // Basic(32GQ) + if(fabricate) + fabricated_tablet.install_component(new /obj/item/weapon/computer_hardware/hard_drive/micro) + if(2) // Upgraded(64GQ) + if(fabricate) + fabricated_tablet.install_component(new /obj/item/weapon/computer_hardware/hard_drive/small) + total_price += 99 + if(3) // Advanced(128GQ) + if(fabricate) + fabricated_tablet.install_component(new /obj/item/weapon/computer_hardware/hard_drive) + total_price += 299 + switch(dev_netcard) + if(1) // Basic(Short-Range) + if(fabricate) + fabricated_tablet.install_component(new/obj/item/weapon/computer_hardware/network_card) + total_price += 99 + if(2) // Advanced (Long Range) + if(fabricate) + fabricated_tablet.install_component(new/obj/item/weapon/computer_hardware/network_card/advanced) + total_price += 299 + if(dev_printer) + total_price += 99 + if(fabricate) + fabricated_tablet.install_component(new/obj/item/weapon/computer_hardware/printer) + if(dev_card) + total_price += 199 + if(fabricate) + fabricated_tablet.install_component(new/obj/item/weapon/computer_hardware/card_slot) + return total_price + return 0 + + +/obj/machinery/lapvend/Topic(href, href_list) + if(..()) + return 1 + + switch(href_list["action"]) + if("pick_device") + if(state) // We've already picked a device type + return 0 + devtype = text2num(href_list["pick"]) + state = 1 + fabricate_and_recalc_price(0) + return 1 + if("clean_order") + reset_order() + return 1 + if((state != 1) && devtype) // Following IFs should only be usable when in the Select Loadout mode + return 0 + switch(href_list["action"]) + if("confirm_order") + state = 2 // Wait for ID swipe for payment processing + fabricate_and_recalc_price(0) + return 1 + if("hw_cpu") + dev_cpu = text2num(href_list["cpu"]) + fabricate_and_recalc_price(0) + return 1 + if("hw_battery") + dev_battery = text2num(href_list["battery"]) + fabricate_and_recalc_price(0) + return 1 + if("hw_disk") + dev_disk = text2num(href_list["disk"]) + fabricate_and_recalc_price(0) + return 1 + if("hw_netcard") + dev_netcard = text2num(href_list["netcard"]) + fabricate_and_recalc_price(0) + return 1 + if("hw_tesla") + dev_apc_recharger = text2num(href_list["tesla"]) + fabricate_and_recalc_price(0) + return 1 + if("hw_nanoprint") + dev_printer = text2num(href_list["print"]) + fabricate_and_recalc_price(0) + return 1 + if("hw_card") + dev_card = text2num(href_list["card"]) + fabricate_and_recalc_price(0) + return 1 + return 0 + +/obj/machinery/lapvend/attack_hand(mob/user) + ui_interact(user) + +/obj/machinery/lapvend/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "computer_fabricator.tmpl", "Personal Computer Vendor", 500, 400) + ui.set_auto_update(1) + ui.open() + +/obj/machinery/lapvend/ui_data(mob/user) + var/list/data[0] + data["state"] = state + if(state == 1) + data["devtype"] = devtype + data["hw_battery"] = dev_battery + data["hw_disk"] = dev_disk + data["hw_netcard"] = dev_netcard + data["hw_tesla"] = dev_apc_recharger + data["hw_nanoprint"] = dev_printer + data["hw_card"] = dev_card + data["hw_cpu"] = dev_cpu + if(state == 1 || state == 2) + data["totalprice"] = total_price + return data + +obj/machinery/lapvend/attackby(obj/item/I, mob/user) + var/obj/item/weapon/card/id/C + if(istype(I, /obj/item/weapon/card/id)) + C = I + if(istype(I, /obj/item/device/pda)) + var/obj/item/device/pda/PDA = I + if(PDA.id) + C = PDA.id + + if(C && istype(C) && state == 2) + if(process_payment(C, I)) + fabricate_and_recalc_price(1) + if((devtype == 1) && fabricated_laptop) + fabricated_laptop.forceMove(loc) + fabricated_laptop = null + else if((devtype == 2) && fabricated_tablet) + fabricated_tablet.forceMove(loc) + fabricated_tablet = null + atom_say("Enjoy your new product!") + state = 3 + return 1 + return 0 + return ..() + + +// Simplified payment processing, returns 1 on success. +/obj/machinery/lapvend/proc/process_payment(obj/item/weapon/card/id/I, obj/item/ID_container) + visible_message("\The [usr] swipes \the [ID_container] through \the [src].") + var/datum/money_account/customer_account = get_card_account(I) + if(!customer_account || customer_account.suspended) + atom_say("Connection error. Unable to connect to account.") + return 0 + + if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) + var/attempt_pin = input("Enter pin code", "Vendor transaction") as num + customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2) + + if(!customer_account) + atom_say("Unable to access account: incorrect credentials.") + return 0 + + if(total_price > customer_account.money) + atom_say("Insufficient funds in account.") + return 0 + else + var/paid = customer_account.charge(total_price, + transaction_purpose = "Purchase of [(devtype == 1) ? "laptop computer" : "tablet microcomputer"].", + terminal_name = name, + terminal_id = name, + dest_name = vendor_account.owner_name) + + if(paid) + vendor_account.money += total_price + var/datum/transaction/T = new() + T.target_name = customer_account.owner_name + T.purpose = "Purchase of [(devtype == 1) ? "laptop computer" : "tablet microcomputer"]" + T.amount = "[total_price]" + T.source_terminal = name + T.date = current_date_string + T.time = worldtime2text() + vendor_account.transaction_log.Add(T) + return 1 + return 0 \ No newline at end of file diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 82bf6b43989..9e411abaee3 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -19,6 +19,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). var/list/categories = list( "AI Modules", "Computer Boards", + "Computer Parts", "Engineering Machinery", "Exosuit Modules", "Hydroponics Machinery", diff --git a/code/modules/research/designs/computer_part_designs.dm b/code/modules/research/designs/computer_part_designs.dm new file mode 100644 index 00000000000..5108cdfeaee --- /dev/null +++ b/code/modules/research/designs/computer_part_designs.dm @@ -0,0 +1,251 @@ +//////////////////////////////////////// +///////////Computer Parts/////////////// +//////////////////////////////////////// + +/datum/design/disk/normal + name = "hard disk drive" + id = "hdd_basic" + req_tech = list("programming" = 1, "engineering" = 1) + build_type = PROTOLATHE + materials = list(MAT_METAL = 400, MAT_GLASS = 100) + build_path = /obj/item/weapon/computer_hardware/hard_drive + category = list("Computer Parts") + +/datum/design/disk/advanced + name = "advanced hard disk drive" + id = "hdd_advanced" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 800, MAT_GLASS = 200) + build_path = /obj/item/weapon/computer_hardware/hard_drive/advanced + category = list("Computer Parts") + +/datum/design/disk/super + name = "super hard disk drive" + id = "hdd_super" + req_tech = list("programming" = 3, "engineering" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 1600, MAT_GLASS = 400) + build_path = /obj/item/weapon/computer_hardware/hard_drive/super + category = list("Computer Parts") + +/datum/design/disk/cluster + name = "cluster hard disk drive" + id = "hdd_cluster" + req_tech = list("programming" = 4, "engineering" = 4) + build_type = PROTOLATHE + materials = list(MAT_METAL = 3200, MAT_GLASS = 800) + build_path = /obj/item/weapon/computer_hardware/hard_drive/cluster + category = list("Computer Parts") + +/datum/design/disk/small + name = "solid state drive" + id = "ssd_small" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 800, MAT_GLASS = 200) + build_path = /obj/item/weapon/computer_hardware/hard_drive/small + category = list("Computer Parts") + +/datum/design/disk/micro + name = "micro solid state drive" + id = "ssd_micro" + req_tech = list("programming" = 1, "engineering" = 1) + build_type = PROTOLATHE + materials = list(MAT_METAL = 400, MAT_GLASS = 100) + build_path = /obj/item/weapon/computer_hardware/hard_drive/micro + category = list("Computer Parts") + + +// Network cards +/datum/design/netcard/basic + name = "network card" + id = "netcard_basic" + req_tech = list("programming" = 2, "engineering" = 1) + build_type = IMPRINTER + materials = list(MAT_METAL = 250, MAT_GLASS = 100, "sacid" = 20) + build_path = /obj/item/weapon/computer_hardware/network_card + category = list("Computer Parts") + +/datum/design/netcard/advanced + name = "advanced network card" + id = "netcard_advanced" + req_tech = list("programming" = 4, "engineering" = 2) + build_type = IMPRINTER + materials = list(MAT_METAL = 500, MAT_GLASS = 200, "sacid" = 20) + build_path = /obj/item/weapon/computer_hardware/network_card/advanced + category = list("Computer Parts") + +/datum/design/netcard/wired + name = "wired network card" + id = "netcard_wired" + req_tech = list("programming" = 5, "engineering" = 3) + build_type = IMPRINTER + materials = list(MAT_METAL = 2500, MAT_GLASS = 400, "sacid" = 20) + build_path = /obj/item/weapon/computer_hardware/network_card/wired + category = list("Computer Parts") + + +// Data disks +/datum/design/portabledrive/basic + name = "data disk" + id = "portadrive_basic" + req_tech = list("programming" = 1) + build_type = IMPRINTER + materials = list(MAT_GLASS = 800, "sacid" = 20) + build_path = /obj/item/weapon/computer_hardware/hard_drive/portable + category = list("Computer Parts") + +/datum/design/portabledrive/advanced + name = "advanced data disk" + id = "portadrive_advanced" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1600, "sacid" = 20) + build_path = /obj/item/weapon/computer_hardware/hard_drive/portable/advanced + category = list("Computer Parts") + +/datum/design/portabledrive/super + name = "super data disk" + id = "portadrive_super" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list(MAT_GLASS = 3200, "sacid" = 20) + build_path = /obj/item/weapon/computer_hardware/hard_drive/portable/super + category = list("Computer Parts") + + +// Card slot +/datum/design/cardslot + name = "ID card slot" + id = "cardslot" + req_tech = list("programming" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 600) + build_path = /obj/item/weapon/computer_hardware/card_slot + category = list("Computer Parts") + +// Intellicard slot +/datum/design/aislot + name = "Intellicard slot" + id = "aislot" + req_tech = list("programming" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 600) + build_path = /obj/item/weapon/computer_hardware/ai_slot + category = list("Computer Parts") + +// Mini printer +/datum/design/miniprinter + name = "miniprinter" + id = "miniprinter" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 600) + build_path = /obj/item/weapon/computer_hardware/printer/mini + category = list("Computer Parts") + + +// APC Link +/datum/design/APClink + name = "area power connector" + id = "APClink" + req_tech = list("programming" = 2, "powerstorage" = 3, "engineering" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000) + build_path = /obj/item/weapon/computer_hardware/recharger/APC + category = list("Computer Parts") + + +// Batteries +/datum/design/battery/controller + name = "power cell controller" + id = "bat_control" + req_tech = list("powerstorage" = 1, "engineering" = 1) + build_type = PROTOLATHE + materials = list(MAT_METAL = 400) + build_path = /obj/item/weapon/computer_hardware/battery + category = list("Computer Parts") + +/datum/design/battery/normal + name = "battery module" + id = "bat_normal" + req_tech = list("powerstorage" = 1, "engineering" = 1) + build_type = PROTOLATHE + materials = list(MAT_METAL = 400) + build_path = /obj/item/weapon/stock_parts/cell/computer + category = list("Computer Parts") + +/datum/design/battery/advanced + name = "advanced battery module" + id = "bat_advanced" + req_tech = list("powerstorage" = 2, "engineering" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 800) + build_path = /obj/item/weapon/stock_parts/cell/computer/advanced + category = list("Computer Parts") + +/datum/design/battery/super + name = "super battery module" + id = "bat_super" + req_tech = list("powerstorage" = 3, "engineering" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 1600) + build_path = /obj/item/weapon/stock_parts/cell/computer/super + category = list("Computer Parts") + +/datum/design/battery/nano + name = "nano battery module" + id = "bat_nano" + req_tech = list("powerstorage" = 1, "engineering" = 1) + build_type = PROTOLATHE + materials = list(MAT_METAL = 200) + build_path = /obj/item/weapon/stock_parts/cell/computer/nano + category = list("Computer Parts") + +/datum/design/battery/micro + name = "micro battery module" + id = "bat_micro" + req_tech = list("powerstorage" = 2, "engineering" = 2) + build_type = PROTOLATHE + materials = list(MAT_METAL = 400) + build_path = /obj/item/weapon/stock_parts/cell/computer/micro + category = list("Computer Parts") + + +// Processor unit +/datum/design/cpu + name = "processor board" + id = "cpu_normal" + req_tech = list("programming" = 3, "engineering" = 2) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1600, "sacid" = 20) + build_path = /obj/item/weapon/computer_hardware/processor_unit + category = list("Computer Parts") + +/datum/design/cpu/small + name = "microprocessor" + id = "cpu_small" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list(MAT_GLASS = 800, "sacid" = 20) + build_path = /obj/item/weapon/computer_hardware/processor_unit/small + category = list("Computer Parts") + +/datum/design/cpu/photonic + name = "photonic processor board" + id = "pcpu_normal" + req_tech = list("programming" = 5, "engineering" = 4) + build_type = IMPRINTER + materials = list(MAT_GLASS= 6400, MAT_GOLD = 2000, "sacid" = 40) + build_path = /obj/item/weapon/computer_hardware/processor_unit/photonic + category = list("Computer Parts") + +/datum/design/cpu/photonic/small + name = "photonic microprocessor" + id = "pcpu_small" + req_tech = list("programming" = 4, "engineering" = 3) + build_type = IMPRINTER + materials = list(MAT_GLASS = 3200, MAT_GOLD = 1000, "sacid" = 20) + build_path = /obj/item/weapon/computer_hardware/processor_unit/photonic/small + category = list("Computer Parts") \ No newline at end of file diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 81392aa99e5..2084e2a93c4 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -18,6 +18,7 @@ Note: Must be placed west/left of and R&D console to function. var/list/categories = list( "Bluespace", + "Computer Parts", "Equipment", "Janitorial", "Medical", diff --git a/nano/templates/card_prog.tmpl b/nano/templates/card_prog.tmpl index 897732ef1aa..56c913a9de9 100644 --- a/nano/templates/card_prog.tmpl +++ b/nano/templates/card_prog.tmpl @@ -1,7 +1,7 @@ {{if data.printing}}
The computer is currently busy.
-
Printing...
+
Printing...

Thank you for your patience! diff --git a/nano/templates/computer_fabricator.tmpl b/nano/templates/computer_fabricator.tmpl new file mode 100644 index 00000000000..d262beb4f6f --- /dev/null +++ b/nano/templates/computer_fabricator.tmpl @@ -0,0 +1,85 @@ +{{:helper.link('Clear Order', 'circle', {'action' : 'clean_order'})}}

+Your new computer device you always dreamed of is just four steps away...


+{{if data.state == 0}} +
+

Step 1: Select your device type

+ {{:helper.link('Laptop', 'laptop', {'action' : 'pick_device', 'pick' : 1})}} + {{:helper.link('LTablet', 'tablet', {'action' : 'pick_device', 'pick' : 2})}} +
+{{else data.state == 1}} +
+

Step 2: Personalise your device

+ + + + + + + + + + + + + +
Current Price: + {{:data.totalprice}}C +
Battery: + {{:helper.link('Standard', 'bolt', {'action' : 'hw_battery', 'battery' : 1}, data.hw_battery == 1 ? "selected" : null)}} + {{:helper.link('Upgraded', 'bolt', {'action' : 'hw_battery', 'battery' : 2}, data.hw_battery == 2 ? "selected" : null)}} + {{:helper.link('Advanced', 'bolt', {'action' : 'hw_battery', 'battery' : 3}, data.hw_battery == 3 ? "selected" : null)}} +
Hard Drive: + {{:helper.link('Standard', 'hdd-o', {'action' : 'hw_disk', 'disk' : 1}, data.hw_disk == 1 ? "selected" : null)}} + {{:helper.link('Upgraded', 'hdd-o', {'action' : 'hw_disk', 'disk' : 2}, data.hw_disk == 2 ? "selected" : null)}} + {{:helper.link('Advanced', 'hdd-o', {'action' : 'hw_disk', 'disk' : 3}, data.hw_disk == 3 ? "selected" : null)}} +
Network Card: + {{:helper.link('None', 'times', {'action' : 'hw_netcard', 'netcard' : 0}, data.hw_netcard == 0 ? "selected" : null)}} + {{:helper.link('Standard', 'signal', {'action' : 'hw_netcard', 'netcard' : 1}, data.hw_netcard == 1 ? "selected" : null)}} + {{:helper.link('Advanced', 'signal', {'action' : 'hw_netcard', 'netcard' : 2}, data.hw_netcard == 2 ? "selected" : null)}} +
Nano Printer: + {{:helper.link('None', 'times', {'action' : 'hw_nanoprint', 'print' : 0}, data.hw_nanoprint == 0 ? "selected" : null)}} + {{:helper.link('Standard', 'print', {'action' : 'hw_nanoprint', 'print' : 1}, data.hw_nanoprint == 1 ? "selected" : null)}} +
Card Reader: + {{:helper.link('None', 'times', {'action' : 'hw_card', 'card' : 0}, data.hw_card == 0 ? "selected" : null)}} + {{:helper.link('Standard', 'credit-card', {'action' : 'hw_card', 'card' : 1}, data.hw_card == 1 ? "selected" : null)}} +
+ + {{if data.devtype != 2}} + + + + + +
Processor Unit: + {{:helper.link('Standard', 'tasks', {'action' : 'hw_cpu', 'cpu' : 1}, data.hw_cpu == 1 ? "selected" : null)}} + {{:helper.link('Advanced', 'tasks', {'action' : 'hw_cpu', 'cpu' : 2}, data.hw_cpu == 2 ? "selected" : null)}} +
Tesla Relay: + {{:helper.link('None', 'times', {'action' : 'hw_tesla', 'tesla' : 0}, data.hw_tesla == 0 ? "selected" : null)}} + {{:helper.link('Standard', 'plug', {'action' : 'hw_tesla', 'tesla' : 1}, data.hw_tesla == 1 ? "selected" : null)}} +
+ {{/if}} + + + +
Confirm Order: + {{:helper.link('CONFIRM', 'check', {'action' : 'confirm_order'})}} +
+ +
+ Battery allows your device to operate without external utility power source. Advanced batteries increase battery life.
+ Hard Drive stores file on your device. Advanced drives can store more files, but use more power, shortening battery life.
+ Network Card allows your device to wirelessly connect to stationwide NTNet network. Basic cards are limited to on-station use, while advanced cards can operate anywhere near the station, which includes the asteroid outposts.
+ Processor Unit is critical for your device's functionality. It allows you to run programs from your hard drive. Advanced CPUs use more power, but allow you to run more programs on background at once.
+ Tesla Relay is an advanced wireless power relay that allows your device to connect to nearby area power controller to provide alternative power source. This component is currently unavailable on tablet computers due to size restrictions.
+ Nano Printer is device that allows for various paperwork manipulations, such as, scanning of documents or printing new ones. This device was certified EcoFriendlyPlus and is capable of recycling existing paper for printing purposes.
+ Card Reader adds a slot that allows you to manipulate RFID cards. Please note that this is not necessary to allow the device to read your identification, it is just necessary to manipulate other cards. +
+{{else data.state == 2}} +

Step 3: Payment

+ Your device is now ready for fabrication..
+ Please swipe your identification card to finish purchase.
+ Total price: {{:data.totalprice}}T +{{else data.state == 3}} +

Step 4: Thank you for your purchase

+ Should you experience any issues with your new device, contact technical support at support@computerservice.nt +{{/if}} \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index c3ea1823b25..5c468a2dba6 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1218,7 +1218,6 @@ #include "code\modules\computer3\computer3_notes.dm" #include "code\modules\computer3\file.dm" #include "code\modules\computer3\laptop.dm" -#include "code\modules\computer3\lapvend.dm" #include "code\modules\computer3\networking.dm" #include "code\modules\computer3\NTOS.dm" #include "code\modules\computer3\program.dm" @@ -1754,6 +1753,7 @@ #include "code\modules\mob\new_player\poll.dm" #include "code\modules\mob\new_player\preferences_setup.dm" #include "code\modules\mob\new_player\sprite_accessories.dm" +#include "code\modules\modular_computers\laptop_vendor.dm" #include "code\modules\modular_computers\computers\item\computer.dm" #include "code\modules\modular_computers\computers\item\computer_components.dm" #include "code\modules\modular_computers\computers\item\computer_damage.dm" @@ -2012,6 +2012,7 @@ #include "code\modules\research\designs\biogenerator_designs.dm" #include "code\modules\research\designs\bluespace_designs.dm" #include "code\modules\research\designs\comp_board_designs.dm" +#include "code\modules\research\designs\computer_part_designs.dm" #include "code\modules\research\designs\equipment_designs.dm" #include "code\modules\research\designs\janitorial_designs.dm" #include "code\modules\research\designs\machine_designs.dm"