From cc0b768c72cd47b8c86a4ec9cdbb6c749ea9cdda Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Mon, 11 Dec 2017 18:36:38 -0600 Subject: [PATCH] [MIRROR] [READY] RND TECHWEBS + DEPARTMENTAL LATHES (#4014) * [READY] RND TECHWEBS + DEPARTMENTAL LATHES * resetting all the maps because we can worry about them later. * Regexing * I'm fucked * Fixes * . * maps * bleh * ree * fixes --- _maps/RandomRuins/SpaceRuins/oldstation.dmm | 6 +- _maps/RandomZLevels/undergroundoutpost45.dmm | 11 +- _maps/map_files/BoxStation/BoxStation.dmm | 14 +- .../CitadelStation/CitadelStation-1.2.2.dmm | 12 +- .../map_files/Deltastation/DeltaStation2.dmm | 15 +- _maps/map_files/MetaStation/MetaStation.dmm | 14 +- _maps/map_files/OmegaStation/OmegaStation.dmm | 10 +- _maps/map_files/PubbyStation/PubbyStation.dmm | 14 +- cfg/admin.txt | 123 ++ code/__DEFINES/logging.dm | 1 + code/__DEFINES/misc.dm | 3 + code/__DEFINES/research.dm | 61 + code/__DEFINES/subsystems.dm | 19 +- code/__HELPERS/global_lists.dm | 5 - code/citadel/cit_genemods.dm | 1 - code/citadel/cit_guns.dm | 30 - code/citadel/cit_weapons.dm | 2 - .../cit_crewobjectives_science.dm | 6 +- code/controllers/subsystem/research.dm | 75 + code/datums/wires/r_n_d.dm | 22 +- code/game/alternate_appearance.dm | 1 - .../clock_helpers/slab_abilities.dm | 1 - code/game/gamemodes/cult/talisman.dm | 1 - code/game/gamemodes/gang/gang_pen.dm | 1 - code/game/gamemodes/gang/recaller.dm | 1 - .../miniantags/abduction/abduction_gear.dm | 14 - .../gamemodes/miniantags/abduction/gland.dm | 5 - .../gamemodes/miniantags/bot_swarm/swarmer.dm | 3 +- .../miniantags/slaughter/slaughter.dm | 1 - code/game/gamemodes/objective.dm | 34 +- code/game/gamemodes/wizard/artefact.dm | 1 - code/game/gamemodes/wizard/soulstone.dm | 1 - code/game/machinery/autolathe.dm | 50 +- code/game/machinery/computer/dna_console.dm | 1 - code/game/machinery/doppler_array.dm | 34 +- code/game/machinery/gulag_teleporter.dm | 1 - code/game/machinery/launch_pad.dm | 1 - code/game/machinery/limbgrower.dm | 14 +- code/game/machinery/recharger.dm | 1 + code/game/machinery/syndicatebeacon.dm | 3 - code/game/machinery/syndicatebomb.dm | 5 - code/game/machinery/vending.dm | 1 + code/game/mecha/equipment/mecha_equipment.dm | 1 - .../mecha/equipment/tools/medical_tools.dm | 3 - .../mecha/equipment/tools/mining_tools.dm | 1 - .../game/mecha/equipment/tools/other_tools.dm | 9 - code/game/mecha/equipment/tools/work_tools.dm | 1 - code/game/mecha/equipment/weapons/weapons.dm | 14 - code/game/mecha/mech_fabricator.dm | 73 +- code/game/mecha/mecha_control_console.dm | 2 - code/game/mecha/mecha_parts.dm | 43 - code/game/objects/effects/anomalies.dm | 5 - code/game/objects/items.dm | 51 +- code/game/objects/items/AI_modules.dm | 18 - code/game/objects/items/RCD.dm | 3 - code/game/objects/items/RCL.dm | 1 - code/game/objects/items/RPD.dm | 1 - code/game/objects/items/airlock_painter.dm | 1 - code/game/objects/items/apc_frame.dm | 2 - code/game/objects/items/body_egg.dm | 1 - code/game/objects/items/bodybag.dm | 2 +- code/game/objects/items/cards_ids.dm | 3 - code/game/objects/items/cigs_lighters.dm | 1 - .../items/circuitboards/circuitboard.dm | 1 - .../circuitboards/computer_circuitboards.dm | 36 - .../circuitboards/machine_circuitboards.dm | 118 +- code/game/objects/items/clown_items.dm | 1 - code/game/objects/items/defib.dm | 2 - code/game/objects/items/devices/PDA/PDA.dm | 1 - code/game/objects/items/devices/aicard.dm | 1 - code/game/objects/items/devices/camera_bug.dm | 1 - .../objects/items/devices/chameleonproj.dm | 1 - code/game/objects/items/devices/doorCharge.dm | 1 - .../devices/electroadaptive_pseudocircuit.dm | 1 - code/game/objects/items/devices/flashlight.dm | 1 - .../items/devices/forcefieldprojector.dm | 1 - code/game/objects/items/devices/gps.dm | 1 - .../objects/items/devices/laserpointer.dm | 1 - .../objects/items/devices/lightreplacer.dm | 1 - .../objects/items/devices/machineprototype.dm | 1 - code/game/objects/items/devices/multitool.dm | 6 +- code/game/objects/items/devices/paicard.dm | 1 - code/game/objects/items/devices/powersink.dm | 1 - .../objects/items/devices/radio/beacon.dm | 1 - .../items/devices/radio/encryptionkey.dm | 3 - .../objects/items/devices/radio/headset.dm | 5 +- code/game/objects/items/devices/scanners.dm | 5 - .../objects/items/devices/sensor_device.dm | 1 - .../objects/items/devices/traitordevices.dm | 2 - .../objects/items/devices/transfer_valve.dm | 1 - code/game/objects/items/dna_injector.dm | 1 - code/game/objects/items/flamethrower.dm | 1 - .../objects/items/grenades/chem_grenade.dm | 3 - code/game/objects/items/grenades/emgrenade.dm | 1 - code/game/objects/items/grenades/flashbang.dm | 1 - code/game/objects/items/grenades/plastic.dm | 1 - .../objects/items/grenades/spawnergrenade.dm | 3 - .../objects/items/grenades/syndieminibomb.dm | 2 - code/game/objects/items/handcuffs.dm | 6 - code/game/objects/items/his_grace.dm | 1 - code/game/objects/items/holosign_creator.dm | 1 - code/game/objects/items/implants/implant.dm | 1 - .../items/implants/implant_abductor.dm | 1 - .../objects/items/implants/implant_chem.dm | 1 - .../objects/items/implants/implant_exile.dm | 1 - .../items/implants/implant_explosive.dm | 2 - .../objects/items/implants/implant_freedom.dm | 1 - .../objects/items/implants/implant_gang.dm | 1 - .../items/implants/implant_krav_maga.dm | 1 - .../items/implants/implant_loyality.dm | 1 - .../objects/items/implants/implant_misc.dm | 3 - .../objects/items/implants/implant_storage.dm | 1 - .../objects/items/implants/implant_track.dm | 1 - .../objects/items/implants/implantcase.dm | 6 +- code/game/objects/items/implants/implanter.dm | 5 +- code/game/objects/items/inducer.dm | 1 - code/game/objects/items/kitchen.dm | 4 - code/game/objects/items/melee/energy.dm | 2 - code/game/objects/items/melee/misc.dm | 4 - code/game/objects/items/mop.dm | 1 - code/game/objects/items/powerfist.dm | 1 - .../objects/items/robot/robot_upgrades.dm | 14 - code/game/objects/items/scrolls.dm | 2 - code/game/objects/items/shields.dm | 4 - code/game/objects/items/singularityhammer.dm | 2 - code/game/objects/items/stacks/bscrystal.dm | 3 - code/game/objects/items/stacks/medical.dm | 2 - .../game/objects/items/stacks/sheets/glass.dm | 8 +- .../objects/items/stacks/sheets/leather.dm | 8 - .../objects/items/stacks/sheets/mineral.dm | 15 - .../items/stacks/sheets/sheet_types.dm | 10 - code/game/objects/items/stacks/stack.dm | 1 - code/game/objects/items/stacks/telecrystal.dm | 1 - .../items/stacks/tiles/tile_mineral.dm | 5 - .../objects/items/stacks/tiles/tile_types.dm | 5 - code/game/objects/items/storage/backpack.dm | 2 - code/game/objects/items/storage/bags.dm | 4 - code/game/objects/items/storage/toolbox.dm | 2 - code/game/objects/items/stunbaton.dm | 1 - code/game/objects/items/tanks/jetpack.dm | 1 - code/game/objects/items/teleportation.dm | 2 - code/game/objects/items/teleprod.dm | 1 - code/game/objects/items/tools.dm | 18 +- code/game/objects/items/tools/crowbar.dm | 9 +- code/game/objects/items/tools/screwdriver.dm | 3 +- code/game/objects/items/tools/weldingtool.dm | 16 +- code/game/objects/items/tools/wirecutters.dm | 9 +- code/game/objects/items/tools/wrench.dm | 12 +- code/game/objects/items/toys.dm | 1 - code/game/objects/items/twohanded.dm | 2 - code/game/objects/items/weaponry.dm | 2 - code/game/objects/structures/ai_core.dm | 1 - .../crates_lockers/closets/secure/cargo.dm | 1 + .../closets/secure/engineering.dm | 1 + .../crates_lockers/closets/secure/medical.dm | 1 + .../closets/secure/scientist.dm | 49 +- .../crates_lockers/closets/secure/security.dm | 1 + code/modules/NTNet/relays.dm | 2 +- code/modules/admin/admin_investigate.dm | 2 +- code/modules/assembly/assembly.dm | 1 - code/modules/assembly/bomb.dm | 1 - code/modules/assembly/doorcontrol.dm | 1 - code/modules/assembly/flash.dm | 3 - code/modules/assembly/health.dm | 1 - code/modules/assembly/igniter.dm | 1 - code/modules/assembly/infrared.dm | 1 - code/modules/assembly/mousetrap.dm | 284 +-- code/modules/assembly/proximity.dm | 1 - code/modules/assembly/signaler.dm | 2 - code/modules/assembly/timer.dm | 1 - code/modules/assembly/voice.dm | 1 - code/modules/cargo/exports/research.dm | 17 +- code/modules/clothing/chameleon.dm | 4 - code/modules/clothing/glasses/_glasses.dm | 9 - .../clothing/glasses/engine_goggles.dm | 3 - code/modules/clothing/glasses/hud.dm | 9 - code/modules/clothing/masks/gasmask.dm | 1 - code/modules/clothing/shoes/magboots.dm | 3 - code/modules/clothing/shoes/vg_shoes.dm | 1 - code/modules/clothing/under/miscellaneous.dm | 1 - code/modules/detectivework/scanner.dm | 1 - code/modules/events/pirates.dm | 31 +- code/modules/food_and_drinks/pizzabox.dm | 1 - code/modules/hydroponics/biogenerator.dm | 32 +- code/modules/hydroponics/grown.dm | 1 - code/modules/hydroponics/grown/ambrosia.dm | 3 - code/modules/hydroponics/grown/apple.dm | 1 - code/modules/hydroponics/grown/banana.dm | 1 - code/modules/hydroponics/grown/berries.dm | 1 - code/modules/hydroponics/grown/chili.dm | 2 - code/modules/hydroponics/grown/misc.dm | 1 - code/modules/hydroponics/grown/mushrooms.dm | 5 - code/modules/hydroponics/grown/nettle.dm | 2 - code/modules/hydroponics/grown/tomato.dm | 4 +- code/modules/hydroponics/grown/towercap.dm | 1 - code/modules/hydroponics/hydroitemdefines.dm | 4 - code/modules/hydroponics/plant_genes.dm | 18 +- .../integrated_electronics/core/printer.dm | 4 +- .../integrated_electronics/passive/power.dm | 5 - .../integrated_electronics/subtypes/input.dm | 8 - .../subtypes/manipulation.dm | 3 - .../integrated_electronics/subtypes/memory.dm | 2 - .../integrated_electronics/subtypes/output.dm | 3 - .../integrated_electronics/subtypes/power.dm | 2 - .../subtypes/reagents.dm | 9 - .../integrated_electronics/subtypes/smart.dm | 1 - code/modules/jobs/access.dm | 2 +- .../mining/equipment/lazarus_injector.dm | 1 - .../mining/equipment/mineral_scanner.dm | 2 - code/modules/mining/equipment/mining_tools.dm | 7 - .../mining/equipment/regenerative_core.dm | 1 - code/modules/mining/equipment/resonator.dm | 2 - code/modules/mining/equipment/survival_pod.dm | 2 - .../mining/equipment/wormhole_jaunter.dm | 1 - .../mining/lavaland/necropolis_chests.dm | 3 +- code/modules/mining/machine_processing.dm | 16 +- code/modules/mining/machine_redemption.dm | 22 +- code/modules/mining/minebot.dm | 1 - code/modules/mining/ores_coins.dm | 9 - code/modules/mob/living/brain/MMI.dm | 2 - code/modules/mob/living/brain/brain_item.dm | 2 - code/modules/mob/living/brain/posibrain.dm | 1 - .../modules/mob/living/carbon/alien/organs.dm | 8 - .../friendly/drone/drones_as_items.dm | 1 - .../living/simple_animal/hostile/headcrab.dm | 1 - .../simple_animal/hostile/wumborian_fugu.dm | 1 - .../modules/modular_computers/hardware/CPU.dm | 6 +- .../modular_computers/hardware/ai_slot.dm | 1 - .../hardware/battery_module.dm | 4 - .../modular_computers/hardware/card_slot.dm | 1 - .../modular_computers/hardware/hard_drive.dm | 6 - .../hardware/network_card.dm | 3 - .../hardware/portable_disk.dm | 3 - .../modular_computers/hardware/printer.dm | 1 - .../modular_computers/hardware/recharger.dm | 2 - code/modules/ninja/suit/ninjaDrainAct.dm | 42 +- code/modules/ninja/suit/suit.dm | 8 +- code/modules/ninja/suit/suit_attackby.dm | 20 +- code/modules/paperwork/pen.dm | 2 - code/modules/power/cell.dm | 10 - code/modules/power/tesla/coil.dm | 2 - code/modules/power/turbine.dm | 1 - .../projectiles/boxes_magazines/ammo_boxes.dm | 4 - .../boxes_magazines/external_mag.dm | 13 - code/modules/projectiles/gun.dm | 5 +- code/modules/projectiles/guns/ballistic.dm | 1 - .../projectiles/guns/ballistic/automatic.dm | 11 - .../guns/ballistic/laser_gatling.dm | 1 - .../projectiles/guns/ballistic/launchers.dm | 2 - .../projectiles/guns/ballistic/pistol.dm | 3 - .../projectiles/guns/ballistic/revolver.dm | 4 +- .../projectiles/guns/ballistic/shotgun.dm | 4 - .../modules/projectiles/guns/ballistic/toy.dm | 1 - code/modules/projectiles/guns/beam_rifle.dm | 1 - .../projectiles/guns/energy/energy_gun.dm | 4 - .../guns/energy/kinetic_accelerator.dm | 2 - code/modules/projectiles/guns/energy/laser.dm | 9 - .../projectiles/guns/energy/special.dm | 12 - code/modules/projectiles/guns/energy/stun.dm | 4 - code/modules/projectiles/guns/magic.dm | 1 - code/modules/projectiles/guns/syringe_gun.dm | 3 - code/modules/projectiles/pins.dm | 2 - .../reagents/reagent_containers/glass.dm | 3 - .../reagents/reagent_containers/spray.dm | 1 - .../reagents/reagent_containers/syringes.dm | 3 - code/modules/research/circuitprinter.dm | 65 +- .../departmental_circuit_imprinter.dm | 203 ++ code/modules/research/departmental_lathe.dm | 247 +++ code/modules/research/designs.dm | 616 +----- .../research/designs/AI_module_designs.dm | 36 +- .../research/designs/bluespace_designs.dm | 55 + .../research/designs/comp_board_designs.dm | 52 +- .../research/designs/computer_part_designs.dm | 60 +- .../research/designs/electronics_designs.dm | 87 + .../research/designs/equipment_designs.dm | 32 + .../research/designs/machine_designs.dm | 72 +- .../modules/research/designs/mecha_designs.dm | 62 +- .../designs/mechfabricator_designs.dm | 49 +- .../research/designs/medical_designs.dm | 99 +- .../research/designs/mining_designs.dm | 114 ++ code/modules/research/designs/misc_designs.dm | 316 +++ .../modules/research/designs/power_designs.dm | 21 +- .../research/designs/smelting_designs.dm | 2 +- .../research/designs/stock_parts_designs.dm | 57 +- .../research/designs/telecomms_designs.dm | 7 - .../research/designs/weapon_designs.dm | 57 +- code/modules/research/destructive_analyzer.dm | 107 +- code/modules/research/experimentor.dm | 193 +- code/modules/research/protolathe.dm | 73 +- code/modules/research/rd-readme.dm | 239 --- code/modules/research/rdconsole.dm | 1765 ++++++++--------- code/modules/research/rdmachines.dm | 53 +- code/modules/research/research.dm | 371 ---- code/modules/research/research_disk.dm | 22 + code/modules/research/server.dm | 242 +-- code/modules/research/stock_parts.dm | 29 +- .../research/techweb/__techweb_helpers.dm | 178 ++ code/modules/research/techweb/_techweb.dm | 273 +++ .../modules/research/techweb/_techweb_node.dm | 30 + code/modules/research/techweb/all_nodes.dm | 860 ++++++++ .../research/xenobiology/xenobiology.dm | 6 - code/modules/ruins/lavaland_ruin_code.dm | 1 - code/modules/shuttle/supply.dm | 2 +- code/modules/surgery/organs/augments_arms.dm | 10 +- code/modules/surgery/organs/augments_chest.dm | 4 - code/modules/surgery/organs/augments_eyes.dm | 2 - .../surgery/organs/augments_internal.dm | 3 - code/modules/surgery/organs/eyes.dm | 3 - code/modules/surgery/organs/heart.dm | 5 +- code/modules/surgery/organs/liver.dm | 3 - code/modules/surgery/organs/lungs.dm | 3 - code/modules/surgery/organs/organ_internal.dm | 2 - code/modules/surgery/organs/stomach.dm | 1 - code/modules/surgery/tools.dm | 13 - code/modules/telesci/telepad.dm | 2 - code/modules/vehicles/pimpin_ride.dm | 1 - code/modules/vore/resizing/sizegun_vr.dm | 3 - code/modules/zombie/organs.dm | 1 - interface/stylesheet.dm | 1 + modular_citadel/hypereutactic_blade.dm | 2 - tgstation.dme | 18 +- tgui/src/interfaces/rdconsole.ract | 47 + tgui/src/interfaces/rdconsole/circuit.ract | 57 + tgui/src/interfaces/rdconsole/designview.ract | 48 + tgui/src/interfaces/rdconsole/destruct.ract | 25 + .../interfaces/rdconsole/diskopsdesign.ract | 34 + .../src/interfaces/rdconsole/diskopstech.ract | 19 + tgui/src/interfaces/rdconsole/nodeview.ract | 26 + tgui/src/interfaces/rdconsole/protolathe.ract | 62 + tgui/src/interfaces/rdconsole/rdheader.ract | 7 + tgui/src/interfaces/rdconsole/settings.ract | 6 + tgui/src/interfaces/rdconsole/techweb.ract | 15 + 332 files changed, 4962 insertions(+), 4331 deletions(-) create mode 100644 code/__DEFINES/research.dm create mode 100644 code/controllers/subsystem/research.dm create mode 100644 code/modules/research/departmental_circuit_imprinter.dm create mode 100644 code/modules/research/departmental_lathe.dm create mode 100644 code/modules/research/designs/bluespace_designs.dm create mode 100644 code/modules/research/designs/electronics_designs.dm create mode 100644 code/modules/research/designs/equipment_designs.dm create mode 100644 code/modules/research/designs/mining_designs.dm create mode 100644 code/modules/research/designs/misc_designs.dm delete mode 100644 code/modules/research/rd-readme.dm delete mode 100644 code/modules/research/research.dm create mode 100644 code/modules/research/research_disk.dm create mode 100644 code/modules/research/techweb/__techweb_helpers.dm create mode 100644 code/modules/research/techweb/_techweb.dm create mode 100644 code/modules/research/techweb/_techweb_node.dm create mode 100644 code/modules/research/techweb/all_nodes.dm create mode 100644 tgui/src/interfaces/rdconsole.ract create mode 100644 tgui/src/interfaces/rdconsole/circuit.ract create mode 100644 tgui/src/interfaces/rdconsole/designview.ract create mode 100644 tgui/src/interfaces/rdconsole/destruct.ract create mode 100644 tgui/src/interfaces/rdconsole/diskopsdesign.ract create mode 100644 tgui/src/interfaces/rdconsole/diskopstech.ract create mode 100644 tgui/src/interfaces/rdconsole/nodeview.ract create mode 100644 tgui/src/interfaces/rdconsole/protolathe.ract create mode 100644 tgui/src/interfaces/rdconsole/rdheader.ract create mode 100644 tgui/src/interfaces/rdconsole/settings.ract create mode 100644 tgui/src/interfaces/rdconsole/techweb.ract diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index e81ef97e5a..93154afd94 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -1561,7 +1561,7 @@ /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/ancientstation/rnd) "eB" = ( -/obj/machinery/r_n_d/destructive_analyzer, +/obj/machinery/rnd/destructive_analyzer, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/ancientstation/rnd) @@ -1891,12 +1891,12 @@ /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/ancientstation/deltacorridor) "fu" = ( -/obj/machinery/r_n_d/protolathe, +/obj/machinery/rnd/protolathe, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/ancientstation/rnd) "fv" = ( -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/dropper, /turf/open/floor/plasteel/white, diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index ea4d57fd29..a00c460da8 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -3430,7 +3430,7 @@ }, /area/awaymission/undergroundoutpost45/gateway) "hB" = ( -/obj/machinery/r_n_d/destructive_analyzer, +/obj/machinery/rnd/destructive_analyzer, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -3448,7 +3448,7 @@ }, /area/awaymission/undergroundoutpost45/research) "hD" = ( -/obj/machinery/r_n_d/protolathe, +/obj/machinery/rnd/protolathe, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -3709,7 +3709,6 @@ "ig" = ( /obj/machinery/computer/rdconsole/core{ dir = 4; - id = 3; req_access = null }, /turf/open/floor/plasteel{ @@ -3722,7 +3721,7 @@ }, /area/awaymission/undergroundoutpost45/research) "ii" = ( -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /turf/open/floor/plasteel{ heat_capacity = 1e+006 }, @@ -8602,9 +8601,7 @@ dir = 4; pixel_x = -22 }, -/obj/machinery/r_n_d/server/core{ - id_with_download_string = "3"; - id_with_upload_string = "3"; +/obj/machinery/rnd/server{ req_access = null }, /turf/open/floor/circuit{ diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 7da5afa13e..7500589d4d 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -23500,7 +23500,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /turf/open/floor/plasteel/white, /area/science/robotics/lab) "bhy" = ( @@ -25295,14 +25295,14 @@ /turf/open/floor/plasteel/white, /area/science/research) "blI" = ( -/obj/machinery/r_n_d/destructive_analyzer, +/obj/machinery/rnd/destructive_analyzer, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/plasteel, /area/science/lab) "blJ" = ( -/obj/machinery/r_n_d/protolathe, +/obj/machinery/rnd/protolathe, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -25947,7 +25947,7 @@ /turf/open/floor/plasteel, /area/science/lab) "bno" = ( -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /obj/item/reagent_containers/glass/beaker/sulphuric, /turf/open/floor/plasteel, /area/science/lab) @@ -31194,7 +31194,7 @@ /turf/open/floor/circuit/telecomms/server, /area/science/server) "bzu" = ( -/obj/machinery/r_n_d/server/robotics, +/obj/machinery/rnd/server, /turf/open/floor/circuit/telecomms/server, /area/science/server) "bzv" = ( @@ -31824,7 +31824,7 @@ /turf/open/floor/engine, /area/science/explab) "bAR" = ( -/obj/machinery/r_n_d/experimentor, +/obj/machinery/rnd/experimentor, /turf/open/floor/engine, /area/science/explab) "bAS" = ( @@ -32279,7 +32279,7 @@ /turf/open/floor/circuit/telecomms/server, /area/science/server) "bBT" = ( -/obj/machinery/r_n_d/server/core, +/obj/machinery/rnd/server, /turf/open/floor/circuit/telecomms/server, /area/science/server) "bBU" = ( diff --git a/_maps/map_files/CitadelStation/CitadelStation-1.2.2.dmm b/_maps/map_files/CitadelStation/CitadelStation-1.2.2.dmm index 57a019516a..935e2445a2 100644 --- a/_maps/map_files/CitadelStation/CitadelStation-1.2.2.dmm +++ b/_maps/map_files/CitadelStation/CitadelStation-1.2.2.dmm @@ -36799,7 +36799,7 @@ }, /area/hallway/primary/starboard) "bze" = ( -/obj/machinery/r_n_d/destructive_analyzer, +/obj/machinery/rnd/destructive_analyzer, /turf/open/floor/plasteel/purple, /area/toxins/lab) "bzf" = ( @@ -36807,7 +36807,7 @@ /turf/open/floor/plasteel/purple, /area/toxins/lab) "bzg" = ( -/obj/machinery/r_n_d/protolathe, +/obj/machinery/rnd/protolathe, /turf/open/floor/plasteel/purple, /area/toxins/lab) "bzh" = ( @@ -37256,7 +37256,7 @@ /turf/open/floor/plasteel/purple, /area/toxins/lab) "bAi" = ( -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /obj/item/reagent_containers/glass/beaker/sulphuric, /turf/open/floor/plasteel/purple, /area/toxins/lab) @@ -41880,7 +41880,7 @@ /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/aisat) "bJa" = ( -/obj/machinery/r_n_d/server/robotics, +/obj/machinery/rnd/server, /turf/open/floor/circuit{ name = "Server Base"; initial_gas_mix = "n2=500;TEMP=80" @@ -43179,7 +43179,7 @@ name = "AI Maintenance" }) "bLq" = ( -/obj/machinery/r_n_d/server/core, +/obj/machinery/rnd/server, /turf/open/floor/circuit{ name = "Server Base"; initial_gas_mix = "n2=500;TEMP=80" @@ -47412,7 +47412,7 @@ /turf/open/floor/plasteel, /area/assembly/robotics) "bTL" = ( -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /turf/open/floor/plasteel, /area/assembly/robotics) "bTM" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 50897e1020..8331658e3e 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -77957,7 +77957,7 @@ /turf/open/floor/plasteel/neutral, /area/science/lab) "dcI" = ( -/obj/machinery/r_n_d/destructive_analyzer, +/obj/machinery/rnd/destructive_analyzer, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -77970,7 +77970,7 @@ /turf/open/floor/plasteel, /area/science/lab) "dcK" = ( -/obj/machinery/r_n_d/protolathe, +/obj/machinery/rnd/protolathe, /obj/machinery/ai_status_display{ pixel_x = 32 }, @@ -78629,7 +78629,7 @@ /turf/open/floor/plasteel, /area/science/lab) "dej" = ( -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /obj/item/reagent_containers/glass/beaker/sulphuric, /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -86114,7 +86114,7 @@ }, /area/science/explab) "duA" = ( -/obj/machinery/r_n_d/experimentor, +/obj/machinery/rnd/experimentor, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/vault{ @@ -91844,7 +91844,7 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "dGe" = ( -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /obj/item/reagent_containers/glass/beaker/sulphuric, /obj/machinery/airalarm{ dir = 8; @@ -93810,7 +93810,7 @@ /turf/open/floor/plasteel, /area/science/storage) "dKe" = ( -/obj/machinery/r_n_d/server/core, +/obj/machinery/rnd/server, /obj/machinery/atmospherics/pipe/simple/general/hidden{ dir = 5 }, @@ -93823,7 +93823,7 @@ }, /area/science/server) "dKg" = ( -/obj/machinery/r_n_d/server/robotics, +/obj/machinery/rnd/server, /obj/machinery/atmospherics/pipe/simple/general/hidden{ dir = 9 }, @@ -99643,7 +99643,6 @@ "dWH" = ( /obj/effect/decal/cleanable/blood/old, /obj/item/organ/tongue/bone{ - origin_tech = "biotech=0" }, /turf/open/floor/plating, /area/library/abandoned) diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index c8330fbe4a..98c22e9f48 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -54293,7 +54293,7 @@ }, /area/medical/chemistry) "ciB" = ( -/obj/machinery/r_n_d/destructive_analyzer, +/obj/machinery/rnd/destructive_analyzer, /obj/machinery/airalarm{ dir = 4; pixel_x = -23 @@ -54310,7 +54310,7 @@ /turf/open/floor/plasteel, /area/science/lab) "ciD" = ( -/obj/machinery/r_n_d/protolathe, +/obj/machinery/rnd/protolathe, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -54474,7 +54474,7 @@ /turf/open/floor/engine, /area/science/explab) "ciU" = ( -/obj/machinery/r_n_d/experimentor, +/obj/machinery/rnd/experimentor, /turf/open/floor/engine, /area/science/explab) "ciV" = ( @@ -54952,7 +54952,7 @@ /turf/open/floor/plasteel, /area/science/lab) "cjZ" = ( -/obj/machinery/r_n_d/circuit_imprinter{ +/obj/machinery/rnd/circuit_imprinter{ pixel_y = 4 }, /obj/item/reagent_containers/glass/beaker/sulphuric, @@ -66506,7 +66506,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/science/robotics/lab) @@ -67162,7 +67162,7 @@ /turf/open/floor/plating, /area/science/server) "cIe" = ( -/obj/machinery/r_n_d/server/robotics, +/obj/machinery/rnd/server, /turf/open/floor/circuit/telecomms/server, /area/science/server) "cIf" = ( @@ -68047,7 +68047,7 @@ /turf/open/floor/plating, /area/science/server) "cJV" = ( -/obj/machinery/r_n_d/server/core, +/obj/machinery/rnd/server, /turf/open/floor/circuit/telecomms/server, /area/science/server) "cJW" = ( diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index ee47021946..6a0d4a60aa 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -24699,7 +24699,7 @@ /turf/open/floor/plasteel/grimy, /area/hallway/primary/central) "aUA" = ( -/obj/machinery/r_n_d/destructive_analyzer, +/obj/machinery/rnd/destructive_analyzer, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -24712,7 +24712,7 @@ /turf/open/floor/plasteel, /area/science/lab) "aUC" = ( -/obj/machinery/r_n_d/protolathe, +/obj/machinery/rnd/protolathe, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -25124,7 +25124,7 @@ /turf/open/floor/plasteel, /area/science/lab) "aVv" = ( -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /obj/item/reagent_containers/glass/beaker/sulphuric, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -25577,7 +25577,7 @@ }, /area/science/research) "aWs" = ( -/obj/machinery/r_n_d/server/core, +/obj/machinery/rnd/server, /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 8 }, @@ -25592,7 +25592,7 @@ }, /area/science/research) "aWu" = ( -/obj/machinery/r_n_d/server/robotics, +/obj/machinery/rnd/server, /obj/machinery/atmospherics/pipe/simple/general/hidden{ dir = 9 }, diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 43ab243361..4f892c8d3b 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -25934,7 +25934,7 @@ }, /area/science/robotics/lab) "blM" = ( -/obj/machinery/r_n_d/server/core, +/obj/machinery/rnd/server, /obj/structure/sign/poster/random{ pixel_y = 32 }, @@ -25951,7 +25951,7 @@ /turf/open/floor/plasteel/dark/telecomms/server/walkway, /area/science/server) "blO" = ( -/obj/machinery/r_n_d/server/robotics, +/obj/machinery/rnd/server, /obj/structure/sign/poster/random{ pixel_y = 32 }, @@ -25966,7 +25966,7 @@ /turf/open/floor/engine, /area/science/explab) "blQ" = ( -/obj/machinery/r_n_d/experimentor, +/obj/machinery/rnd/experimentor, /turf/open/floor/engine, /area/science/explab) "blR" = ( @@ -26718,7 +26718,7 @@ /turf/open/floor/plasteel, /area/science/research/lobby) "bnO" = ( -/obj/machinery/r_n_d/circuit_imprinter, +/obj/machinery/rnd/circuit_imprinter, /obj/machinery/light{ dir = 8 }, @@ -29700,7 +29700,7 @@ /turf/open/floor/plasteel/white, /area/science/lab) "bup" = ( -/obj/machinery/r_n_d/destructive_analyzer, +/obj/machinery/rnd/destructive_analyzer, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/science/lab) @@ -29711,7 +29711,7 @@ /turf/open/floor/plasteel, /area/science/lab) "bur" = ( -/obj/machinery/r_n_d/protolathe, +/obj/machinery/rnd/protolathe, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/science/lab) @@ -30244,7 +30244,7 @@ /turf/open/floor/plasteel, /area/science/lab) "bvy" = ( -/obj/machinery/r_n_d/circuit_imprinter{ +/obj/machinery/rnd/circuit_imprinter{ pixel_y = 4 }, /obj/item/reagent_containers/glass/beaker/sulphuric, diff --git a/cfg/admin.txt b/cfg/admin.txt index d10666df65..a72a659071 100644 --- a/cfg/admin.txt +++ b/cfg/admin.txt @@ -1 +1,124 @@ jayehh role=admin +optimumtact role=admin +newsta role=admin +expletives role=admin +kingofkosmos role=admin +mrstonedone role=admin +microscopics role=admin +gunhog role=admin +korphaeron role=admin +razharas role=admin +lordpidey role=admin +niknakflak role=admin +rolan7 role=admin +quarxink role=admin +adrix89 role=admin +tle role=admin +xsi role=admin +scaredofshadows role=admin +neofite role=admin +trubblebass role=admin +mport2004 role=admin +deuryn role=admin +agouri role=admin +errorage role=admin +superxpdude role=admin +petethegoat role=admin +nodrak role=admin +carnwennan role=admin +ikarrus role=admin +cheridan role=admin +giacomand role=admin +rockdtben role=admin +sieve role=admin +aranclanos role=admin +intigracy role=admin +dumpdavidson role=admin +kazeespada role=admin +malkevin role=admin +incoming role=admin +demas role=admin +fleure role=admin +ricotez role=admin +misterperson role=admin +crimsonvision role=admin +iamgoofball role=admin +zelacks role=admin +androidsfv role=admin +miggles role=admin +jordie0608 role=admin +s0ldi3rkr4s0 role=admin +ergovisavi role=admin +vistapowa role=admin +miauw62 role=admin +rumia29 role=admin +bobylein role=admin +sirbayer role=admin +hornygranny role=admin +yota role=admin +firecage role=admin +donkieyo role=admin +argoneus role=admin +paprka role=admin +cookingboy3 role=admin +limeliz role=admin +steelpoint role=admin +phil235 role=admin +corruptcomputer role=admin +xxnoob role=admin +tkdrg role=admin +cuboos role=admin +thunder12345 role=admin +wjohnston role=admin +mandurrh role=admin +thurgatar role=admin +xerux role=admin +dannno role=admin +lo6a4evskiy role=admin +vekter role=admin +ahammer18 role=admin +account12 role=admin +fayrik role=admin +shadowlight213 role=admin +drovidicorv role=admin +dunc role=admin +mmmiracles role=admin +bear1ake role=admin +coreoverload role=admin +jalleo role=admin +changelingrain role=admin +foxpmccloud role=admin +xhuis role=admin +astralenigma role=admin +tokiko1 role=admin +supersayu role=admin +lzimann role=admin +as334 role=admin +neersighted role=admin +swankcookie role=admin +ressler role=admin +folix role=admin +bawhoppennn role=admin +anturke role=admin +lumipharon role=admin +bgobandit role=admin +coiax role=admin +randommarine role=admin +pkpenguin321 role=admin +technoalchemist role=admin +aloraydrel role=admin +quiltyquilty role=admin +snipedragon role=admin +fjeld role=admin +kevinz000 role=admin +tacolizard role=admin +trustygun role=admin +cyberboss role=admin +pjb3005 role=admin +sweaterkittens role=admin +feemjmeem role=admin +jstheguy role=admin +excessiveuseofcobby role=admin +plizzard role=admin +octareenroon91 role=admin +serpentarium role=admin diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm index f558511954..6d7cf12789 100644 --- a/code/__DEFINES/logging.dm +++ b/code/__DEFINES/logging.dm @@ -10,6 +10,7 @@ #define INVESTIGATE_TELESCI "telesci" #define INVESTIGATE_WIRES "wires" #define INVESTIGATE_PORTAL "portals" +#define INVESTIGATE_RESEARCH "research" #define INVESTIGATE_HALLUCINATIONS "hallucinations" #define INVESTIGATE_RADIATION "radiation" #define INVESTIGATE_EXONET "exonet" diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index fdc63d1df6..6254f12e45 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -484,6 +484,9 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define SYRINGE_DRAW 0 #define SYRINGE_INJECT 1 +#define RESEARCH_MATERIAL_RECLAMATION_ID "0" + + //gold slime core spawning #define NO_SPAWN 0 #define HOSTILE_SPAWN 1 diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm new file mode 100644 index 0000000000..14e6798528 --- /dev/null +++ b/code/__DEFINES/research.dm @@ -0,0 +1,61 @@ + +//RDSCREEN screens +#define RDSCREEN_MENU 0 +#define RDSCREEN_TECHDISK 1 +#define RDSCREEN_DESIGNDISK 20 +#define RDSCREEN_DESIGNDISK_UPLOAD 21 +#define RDSCREEN_DECONSTRUCT 3 +#define RDSCREEN_PROTOLATHE 40 +#define RDSCREEN_PROTOLATHE_MATERIALS 41 +#define RDSCREEN_PROTOLATHE_CHEMICALS 42 +#define RDSCREEN_PROTOLATHE_CATEGORY_VIEW 43 +#define RDSCREEN_PROTOLATHE_SEARCH 44 +#define RDSCREEN_IMPRINTER 50 +#define RDSCREEN_IMPRINTER_MATERIALS 51 +#define RDSCREEN_IMPRINTER_CHEMICALS 52 +#define RDSCREEN_IMPRINTER_CATEGORY_VIEW 53 +#define RDSCREEN_IMPRINTER_SEARCH 54 +#define RDSCREEN_SETTINGS 61 +#define RDSCREEN_DEVICE_LINKING 62 +#define RDSCREEN_TECHWEB 70 +#define RDSCREEN_TECHWEB_NODEVIEW 71 +#define RDSCREEN_TECHWEB_DESIGNVIEW 72 + +#define RDSCREEN_NOBREAK "" + +#define RDSCREEN_TEXT_NO_PROTOLATHE "

No Protolathe Linked!


" +#define RDSCREEN_TEXT_NO_IMPRINTER "

No Circuit Imprinter Linked!


" +#define RDSCREEN_TEXT_NO_DECONSTRUCT "

No Deconstructive Analyzer Linked!


" +#define RDSCREEN_TEXT_NO_TDISK "

No Technology Disk Inserted!


" +#define RDSCREEN_TEXT_NO_DDISK "

No Design Disk Inserted!


" +#define RDSCREEN_TEXT_NO_SNODE "

No Technology Node Selected!


" +#define RDSCREEN_TEXT_NO_SDESIGN "

No Design Selected!


" + +#define RDSCREEN_UI_LATHE_CHECK if(!linked_lathe) { return RDSCREEN_TEXT_NO_PROTOLATHE } +#define RDSCREEN_UI_IMPRINTER_CHECK if(!linked_imprinter) { return RDSCREEN_TEXT_NO_IMPRINTER } +#define RDSCREEN_UI_DECONSTRUCT_CHECK if(!linked_destroy) { return RDSCREEN_TEXT_NO_DECONSTRUCT } +#define RDSCREEN_UI_TDISK_CHECK if(!t_disk) { return RDSCREEN_TEXT_NO_TDISK } +#define RDSCREEN_UI_DDISK_CHECK if(!d_disk) { return RDSCREEN_TEXT_NO_DDISK } +#define RDSCREEN_UI_SNODE_CHECK if(!selected_node) { return RDSCREEN_TEXT_NO_SNODE } +#define RDSCREEN_UI_SDESIGN_CHECK if(!selected_design) { return RDSCREEN_TEXT_NO_SDESIGN } + +#define DEPLATHE_SCREEN_PRIMARY 1 +#define DEPLATHE_SCREEN_SEARCH 2 +#define DEPLATHE_SCREEN_MATERIALS 3 +#define DEPLATHE_SCREEN_CHEMICALS 4 + +#define DEPPRINTER_SCREEN_PRIMARY 1 +#define DEPPRINTER_SCREEN_SEARCH 2 +#define DEPPRINTER_SCREEN_MATERIALS 3 +#define DEPPRINTER_SCREEN_CHEMICALS 4 + +#define DEPARTMENTAL_FLAG_SECURITY 1 +#define DEPARTMENTAL_FLAG_MEDICAL 2 +#define DEPARTMENTAL_FLAG_CARGO 4 +#define DEPARTMENTAL_FLAG_SCIENCE 8 +#define DEPARTMENTAL_FLAG_ENGINEERING 16 +#define DEPARTMENTAL_FLAG_SERVICE 32 +#define DEPARTMENTAL_FLAG_ALL 64 //NO THIS DOESN'T ALLOW YOU TO PRINT EVERYTHING, IT'S FOR ALL DEPARTMENTS! +//#define DEPARTMENTAL_FLAG_MINING 128 + +#define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN" diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 7e49a437bb..9da5f90530 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -46,15 +46,16 @@ #define INIT_ORDER_DBCORE 18 #define INIT_ORDER_BLACKBOX 17 #define INIT_ORDER_SERVER_MAINT 16 -#define INIT_ORDER_EVENTS 15 -#define INIT_ORDER_JOBS 14 -#define INIT_ORDER_TICKER 13 -#define INIT_ORDER_MAPPING 12 -#define INIT_ORDER_ATOMS 11 -#define INIT_ORDER_NETWORKS 10 -#define INIT_ORDER_LANGUAGE 9 -#define INIT_ORDER_MACHINES 8 -#define INIT_ORDER_CIRCUIT 7 +#define INIT_ORDER_RESEARCH 15 +#define INIT_ORDER_EVENTS 14 +#define INIT_ORDER_JOBS 13 +#define INIT_ORDER_TICKER 12 +#define INIT_ORDER_MAPPING 11 +#define INIT_ORDER_ATOMS 10 +#define INIT_ORDER_NETWORKS 9 +#define INIT_ORDER_LANGUAGE 8 +#define INIT_ORDER_MACHINES 7 +#define INIT_ORDER_CIRCUIT 6 #define INIT_ORDER_TIMER 1 #define INIT_ORDER_DEFAULT 0 #define INIT_ORDER_AIR -1 diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index ca35aa7e47..17497e3cc0 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -72,11 +72,6 @@ var/datum/material/D = new path() GLOB.materials_list[D.id] = D - //Techs - for(var/path in subtypesof(/datum/tech)) - var/datum/tech/D = new path() - GLOB.tech_list[D.id] = D - //Emotes for(var/path in subtypesof(/datum/emote)) var/datum/emote/E = new path() diff --git a/code/citadel/cit_genemods.dm b/code/citadel/cit_genemods.dm index 2d6b027db6..5efebf4860 100644 --- a/code/citadel/cit_genemods.dm +++ b/code/citadel/cit_genemods.dm @@ -8,7 +8,6 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_TINY - origin_tech = "biotech=3" var/applied_region = "chest" var/list/add_mutations = list() var/list/remove_mutations = list() diff --git a/code/citadel/cit_guns.dm b/code/citadel/cit_guns.dm index 1068d490f1..1235fc27af 100644 --- a/code/citadel/cit_guns.dm +++ b/code/citadel/cit_guns.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "lasernew" item_state = "laser" - origin_tech = "combat=4;magnets=4" force = 10 throwforce = 10 ammo_type = list(/obj/item/ammo_casing/energy/lasergun) @@ -22,7 +21,6 @@ name = "Laser Carbine" desc = "Beefed up version of a standard laser gun." id = "lasercarbine" - req_tech = list("combat" = 5, "magnets" = 5, "powerstorage" = 4) build_type = PROTOLATHE materials = list(MAT_GOLD = 2500, MAT_METAL = 5000, MAT_GLASS = 5000) build_path = /obj/item/gun/energy/laser/carbine/nopin @@ -40,7 +38,6 @@ mag_type = /obj/item/ammo_box/magazine/sniper_rounds fire_delay = 50 burst_size = 1 - origin_tech = "combat=7" can_suppress = 0 w_class = WEIGHT_CLASS_NORMAL actions_types = list() @@ -60,7 +57,6 @@ name = "Syndicate Anti Tank Pistol" desc = "A massively impractical and silly monstrosity of a pistol that fires .50 calliber rounds. The recoil is likely to dislocate a variety of joints without proper bracing." pin = /obj/item/device/firing_pin/implant/pindicate - origin_tech = "combat=7;syndicate=6" /////////////spinfusor stuff//////////////// @@ -115,7 +111,6 @@ select = 0 actions_types = list() casing_ejector = 0 - origin_tech = "combat=6;magnets=6" /obj/item/gun/ballistic/automatic/spinfusor/attackby(obj/item/A, mob/user, params) var/num_loaded = magazine.attackby(A, user, params, 1) @@ -163,7 +158,6 @@ icon_state = "x9" item_state = "arg" slot_flags = 0 - origin_tech = "combat=7;engineering=7" mag_type = /obj/item/ammo_box/magazine/m556 //Uses the m90gl's magazine, just like the NT-ARG fire_sound = 'sound/weapons/gunshot_smg.ogg' can_suppress = 0 @@ -194,7 +188,6 @@ spread = 90 //MAXIMUM XCOM MEMES (actually that'd be 180 spread) w_class = WEIGHT_CLASS_BULKY weapon_weight = WEAPON_HEAVY - origin_tech = "combat=1;magnets=1" /datum/design/foam_x9 name = "Foam Force X9 Rifle" @@ -254,7 +247,6 @@ name = "magpistol magazine (non-lethal disabler)" icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "nlmagmag" - origin_tech = "magnets=5" ammo_type = /obj/item/ammo_casing/caseless/anlmags caliber = "mags" max_ammo = 15 @@ -264,7 +256,6 @@ name = "magpistol magazine (lethal)" icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "smallmagmag" - origin_tech = "combat=5" ammo_type = /obj/item/ammo_casing/caseless/amags //////the gun itself////// @@ -280,7 +271,6 @@ can_suppress = 0 casing_ejector = 0 fire_delay = 2 - origin_tech = "combat=4;magnets=4" /obj/item/gun/ballistic/automatic/pistol/mag/update_icon() ..() @@ -301,7 +291,6 @@ name = "Magpistol" desc = "A weapon which fires ferromagnetic slugs." id = "magpisol" - req_tech = list("combat" = 5, "magnets" = 6, "powerstorage" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 7500, MAT_GLASS = 1000, MAT_URANIUM = 1000, MAT_TITANIUM = 5000, MAT_SILVER = 2000) build_path = /obj/item/gun/ballistic/automatic/pistol/mag/nopin @@ -311,7 +300,6 @@ name = "Magpistol Magazine" desc = "A 7 round magazine for the Magpistol." id = "mag_magpistol" - req_tech = list("combat" = 5, "magnets" = 6, "materials" = 5, "syndicate" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 4000, MAT_SILVER = 500) build_path = /obj/item/ammo_box/magazine/mmag/small/lethal @@ -321,7 +309,6 @@ name = "Magpistol Magazine (Non-Lethal)" desc = "A 7 round non-lethal magazine for the Magpistol." id = "mag_magpistol_nl" - req_tech = list("combat" = 5, "magnets" = 6, "materials" = 5) materials = list(MAT_METAL = 3000, MAT_SILVER = 250, MAT_TITANIUM = 250) build_path = /obj/item/ammo_box/magazine/mmag/small @@ -354,7 +341,6 @@ fire_sound = 'sound/weapons/magpistol.ogg' slot_flags = SLOT_BELT w_class = WEIGHT_CLASS_SMALL - origin_tech = "combat=1;magnets=1" /obj/item/ammo_box/foambox/mag name = "ammo box (Magnetic Foam Darts)" @@ -427,7 +413,6 @@ name = "magrifle magazine (non-lethal disabler)" icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "mediummagmag" - origin_tech = "magnets=6" ammo_type = /obj/item/ammo_casing/caseless/anlmagm caliber = "magm" max_ammo = 27 @@ -437,7 +422,6 @@ name = "magrifle magazine (lethal)" icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "mediummagmag" - origin_tech = "combat=6" ammo_type = /obj/item/ammo_casing/caseless/amagm max_ammo = 21 @@ -450,7 +434,6 @@ icon_state = "magrifle" item_state = "arg" slot_flags = 0 - origin_tech = "combat=6;engineering=6;magnets=6" mag_type = /obj/item/ammo_box/magazine/mmag fire_sound = 'sound/weapons/magrifle.ogg' can_suppress = 0 @@ -470,7 +453,6 @@ name = "Magrifle" desc = "An upscaled Magpistol in rifle form." id = "magrifle" - req_tech = list("combat" = 7, "magnets" = 7, "powerstorage" = 7) build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 2000, MAT_TITANIUM = 10000, MAT_SILVER = 4000, MAT_GOLD = 2000) build_path = /obj/item/gun/ballistic/automatic/magrifle/nopin @@ -480,7 +462,6 @@ name = "Magrifle Magazine (Lethal)" desc = "A 15 round magazine for the Magrifle." id = "mag_magrifle" - req_tech = list("combat" = 7, "magnets" = 7, "materials" = 5, "syndicate" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 8000, MAT_SILVER = 1000) build_path = /obj/item/ammo_box/magazine/mmag/lethal @@ -490,7 +471,6 @@ name = "Magrifle Magazine (Non-Lethal)" desc = "A 15 round non-lethal magazine for the Magrifle." id = "mag_magrifle_nl" - req_tech = list("combat" = 7, "magnets" = 7, "materials" = 5) materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500) build_path = /obj/item/ammo_box/magazine/mmag @@ -512,7 +492,6 @@ needs_permit = FALSE mag_type = /obj/item/ammo_box/magazine/toy/foamag casing_ejector = FALSE - origin_tech = "combat=1;engineering=1;magnets=1" spread = 60 w_class = WEIGHT_CLASS_BULKY weapon_weight = WEAPON_HEAVY @@ -598,7 +577,6 @@ icon_state = "hyperburst" item_state = "arg" slot_flags = 0 - origin_tech = "combat=6;engineering=6;magnets=6;syndicate=6" mag_type = /obj/item/ammo_box/magazine/mhyper fire_sound = 'sound/weapons/magburst.ogg' can_suppress = 0 @@ -646,7 +624,6 @@ charge_delay = 2 recoil = 2 cell_type = /obj/item/stock_parts/cell/toymagburst - origin_tech = "combat=1;magnets=1" /obj/item/stock_parts/cell/toymagburst name = "toy mag burst rifle power supply" @@ -669,7 +646,6 @@ icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "stealthpistol" w_class = WEIGHT_CLASS_SMALL - origin_tech = "combat=3;materials=3;syndicate=4" mag_type = /obj/item/ammo_box/magazine/m10mm can_suppress = 0 fire_sound = 'sound/weapons/gunshot_silenced.ogg' @@ -703,7 +679,6 @@ fire_delay = 0 spread = 60 actions_types = list() - origin_tech = "combat=1;magnets=1" /obj/item/gun/ballistic/automatic/toy/pistol/stealth/update_icon() ..() @@ -805,7 +780,6 @@ obj/item/projectile/bullet/c10mm/soporific name = "flechette magazine (armor piercing)" icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "flechettemag" - origin_tech = "combat=5;syndicate=1" ammo_type = /obj/item/ammo_casing/caseless/flechetteap caliber = "flechette" max_ammo = 40 @@ -826,7 +800,6 @@ obj/item/projectile/bullet/c10mm/soporific w_class = WEIGHT_CLASS_NORMAL slot_flags = 0 /obj/item/device/firing_pin/implant/pindicate - origin_tech = "combat=6;materials=2;syndicate=5" mag_type = /obj/item/ammo_box/magazine/flechette/ fire_sound = 'sound/weapons/gunshot_smg.ogg' can_suppress = 0 @@ -930,7 +903,6 @@ obj/item/projectile/bullet/c10mm/soporific desc = "A toy laser with a classic, retro feel and look. Compatible with existing laser tag systems." ammo_type = list(/obj/item/ammo_casing/energy/laser/raytag) selfcharge = TRUE - origin_tech = "combat=1;magnets=1" /datum/design/toyray name = "RayTag Gun" @@ -1186,7 +1158,6 @@ obj/item/projectile/bullet/c10mm/soporific mag_type = /obj/item/ammo_box/magazine/toy/pistol can_suppress = FALSE actions_types = list(/datum/action/item_action/pick_color) - origin_tech = "combat=1;magnets=1" /datum/design/foam_p37 name = "Foam Force Mk.37F" @@ -1209,7 +1180,6 @@ obj/item/gun/energy/e_gun/cx lefthand_file = 'icons/mob/citadel/guns_lefthand.dmi' righthand_file = 'icons/mob/citadel/guns_righthand.dmi' ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser) - origin_tech = "combat=4;magnets=3" flight_x_offset = 15 flight_y_offset = 10 actions_types = list(/datum/action/item_action/pick_color) diff --git a/code/citadel/cit_weapons.dm b/code/citadel/cit_weapons.dm index b661294ae7..dbf0448240 100644 --- a/code/citadel/cit_weapons.dm +++ b/code/citadel/cit_weapons.dm @@ -138,7 +138,6 @@ embed_chance = 40 embedded_impact_pain_multiplier = 10 armour_penetration = 0 - origin_tech = "combat=3;magnets=4" block_chance = 60 light_color = "#37FFF7" actions_types = list() @@ -232,7 +231,6 @@ armour_penetration = 35 embed_chance = 75 block_chance = 50 - origin_tech = "combat=3;magnets=4;syndicate=4" hitsound_on = 'sound/weapons/blade1.ogg' light_color = "#37F0FF" diff --git a/code/citadel/crew_objectives/cit_crewobjectives_science.dm b/code/citadel/crew_objectives/cit_crewobjectives_science.dm index 1fcba91e46..fb260583fd 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_science.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_science.dm @@ -38,8 +38,8 @@ explanation_text = "Make sure the research required to produce a [initial(targetdesign.name)] is available on the R&D server by the end of the shift." /datum/objective/crew/research/check_completion() - for(var/obj/machinery/r_n_d/server/S in GLOB.machines) - if(S && S.files && S.files.known_designs) - if(targetdesign in S.files.known_designs) + for(var/obj/machinery/rnd/server/S in GLOB.machines) + if(S && S.stored_research) + if(S.stored_research.researched_designs[initial(targetdesign.id)]) return TRUE return FALSE diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm new file mode 100644 index 0000000000..d1bcf31885 --- /dev/null +++ b/code/controllers/subsystem/research.dm @@ -0,0 +1,75 @@ + +SUBSYSTEM_DEF(research) + name = "Research" + flags = SS_KEEP_TIMING + priority = 15 //My powergame is priority. + wait = 10 + init_order = INIT_ORDER_RESEARCH + var/list/invalid_design_ids = list() //associative id = number of times + var/list/invalid_node_ids = list() //associative id = number of times + var/list/invalid_node_boost = list() //associative id = error message + var/list/obj/machinery/rnd/server/servers = list() + var/datum/techweb/science/science_tech + var/datum/techweb/admin/admin_tech + var/list/techweb_nodes = list() //associative id = node datum + var/list/techweb_categories = list() //category name = list(node.id = node) + var/list/techweb_designs = list() //associative id = node datum + var/list/techweb_nodes_starting = list() //associative id = node datum + var/list/techweb_boost_items = list() //associative double-layer path = list(id = point_discount) + var/list/techweb_nodes_hidden = list() //Nodes that should be hidden by default. + var/list/techweb_point_items = list() //path = value + var/list/errored_datums = list() + //---------------------------------------------- + var/single_server_income = 40.7 + var/multiserver_calculation = FALSE + var/last_income = 0 + //^^^^^^^^ ALL OF THESE ARE PER SECOND! ^^^^^^^^ + + //Aiming for 1.5 hours to max R&D + //[88nodes * 5000points/node] / [1.5hr * 90min/hr * 60s/min] + //Around 450000 points max??? + + var/bomb_research_point_scaling = 1800 + +/datum/controller/subsystem/research/Initialize() + initialize_all_techweb_designs() + initialize_all_techweb_nodes() + science_tech = new /datum/techweb/science + admin_tech = new /datum/techweb/admin + autosort_categories() + return ..() + +/datum/controller/subsystem/research/fire() + handle_research_income() + +/datum/controller/subsystem/research/proc/handle_research_income() + var/bitcoins = 0 + if(multiserver_calculation) + var/eff = calculate_server_coefficient() + for(var/obj/machinery/rnd/server/miner in servers) + bitcoins += (miner.mine() * eff) //SLAVE AWAY, SLAVE. + else + for(var/obj/machinery/rnd/server/miner in servers) + if(miner.working) + bitcoins = single_server_income + break //Just need one to work. + var/income_time_difference = world.time - last_income + bitcoins *= income_time_difference / 10 + science_tech.research_points += bitcoins + last_income = world.time + +/datum/controller/subsystem/research/proc/calculate_server_coefficient() //Diminishing returns. + var/amt = servers.len + if(!amt) + return 0 + var/coeff = 100 + coeff = sqrt(coeff / amt) + return coeff + +/datum/controller/subsystem/research/proc/autosort_categories() + for(var/i in techweb_nodes) + var/datum/techweb_node/I = techweb_nodes[i] + if(techweb_categories[I.category]) + techweb_categories[I.category][I.id] = I + else + techweb_categories[I.category] = list(I.id = I) diff --git a/code/datums/wires/r_n_d.dm b/code/datums/wires/r_n_d.dm index 0308788d25..b8e78f55e0 100644 --- a/code/datums/wires/r_n_d.dm +++ b/code/datums/wires/r_n_d.dm @@ -1,8 +1,8 @@ -/datum/wires/r_n_d - holder_type = /obj/machinery/r_n_d +/datum/wires/rnd + holder_type = /obj/machinery/rnd randomize = TRUE -/datum/wires/r_n_d/New(atom/holder) +/datum/wires/rnd/New(atom/holder) wires = list( WIRE_HACK, WIRE_DISABLE, WIRE_SHOCK @@ -10,22 +10,22 @@ add_duds(5) ..() -/datum/wires/r_n_d/interactable(mob/user) - var/obj/machinery/r_n_d/R = holder +/datum/wires/rnd/interactable(mob/user) + var/obj/machinery/rnd/R = holder if(R.panel_open) return TRUE -/datum/wires/r_n_d/get_status() - var/obj/machinery/r_n_d/R = holder +/datum/wires/rnd/get_status() + var/obj/machinery/rnd/R = holder var/list/status = list() status += "The red light is [R.disabled ? "off" : "on"]." status += "The green light is [R.shocked ? "off" : "on"]." status += "The blue light is [R.hacked ? "off" : "on"]." return status -/datum/wires/r_n_d/on_pulse(wire) +/datum/wires/rnd/on_pulse(wire) set waitfor = FALSE - var/obj/machinery/r_n_d/R = holder + var/obj/machinery/rnd/R = holder switch(wire) if(WIRE_HACK) R.hacked = !R.hacked @@ -37,8 +37,8 @@ if(R) R.shocked = FALSE -/datum/wires/r_n_d/on_cut(wire, mend) - var/obj/machinery/r_n_d/R = holder +/datum/wires/rnd/on_cut(wire, mend) + var/obj/machinery/rnd/R = holder switch(wire) if(WIRE_HACK) R.hacked = !mend diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm index b83204119d..901a8610a6 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/alternate_appearance.dm @@ -20,7 +20,6 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) var/list/arguments = args.Copy(2) new type(arglist(arguments)) - /datum/atom_hud/alternate_appearance var/appearance_key diff --git a/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm b/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm index ef7d70c72e..3cef31a706 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm @@ -67,7 +67,6 @@ name = "replicant manacles" desc = "Heavy manacles made out of freezing-cold metal. It looks like brass, but feels much more solid." icon_state = "brass_manacles" - origin_tech = "materials=2;magnets=5" flags_1 = DROPDEL_1 /obj/item/restraints/handcuffs/clockwork/dropped(mob/user) diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index 71955e4881..e3792b6be4 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -338,7 +338,6 @@ name = "cult shackles" desc = "Shackles that bind the wrists with sinister magic." trashtype = /obj/item/restraints/handcuffs/energy/used - origin_tech = "materials=2;magnets=5" flags_1 = DROPDEL_1 /obj/item/restraints/handcuffs/energy/cult/used/dropped(mob/user) diff --git a/code/game/gamemodes/gang/gang_pen.dm b/code/game/gamemodes/gang/gang_pen.dm index 5df405fa4d..c410d7d7da 100644 --- a/code/game/gamemodes/gang/gang_pen.dm +++ b/code/game/gamemodes/gang/gang_pen.dm @@ -2,7 +2,6 @@ * Gang Boss Pens */ /obj/item/pen/gang - origin_tech = "materials=2;syndicate=3" var/cooldown var/last_used = 0 var/charges = 1 diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index 120e3a6345..f578ac3d3d 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -11,7 +11,6 @@ throw_speed = 3 throw_range = 7 flags_1 = CONDUCT_1 - origin_tech = "programming=5;bluespace=2;syndicate=5" var/datum/gang/gang //Which gang uses this? var/recalling = 0 var/outfits = 2 diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 38da5bf736..9128847e16 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -11,7 +11,6 @@ icon_state = "vest_stealth" item_state = "armor" blood_overlay_type = "armor" - origin_tech = "magnets=7;biotech=4;powerstorage=4;abductor=4" armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15, fire = 70, acid = 70) actions_types = list(/datum/action/item_action/hands_free/activate) allowed = list( @@ -155,7 +154,6 @@ item_state = "silencer" lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' - origin_tech = "engineering=7;magnets=4;bluespace=4;abductor=3" var/mode = GIZMO_SCAN var/mob/living/marked = null var/obj/machinery/abductor/console/console @@ -244,7 +242,6 @@ item_state = "gizmo" lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' - origin_tech = "materials=4;programming=7;abductor=3" /obj/item/device/abductor/silencer/attack(mob/living/M, mob/user) if(!AbductorCheck(user)) @@ -299,7 +296,6 @@ pin = /obj/item/device/firing_pin/abductor icon_state = "alienpistol" item_state = "alienpistol" - origin_tech = "combat=4;magnets=7;powerstorage=3;abductor=3" trigger_guard = TRIGGER_GUARD_ALLOW_ALL /obj/item/paper/guides/antag/abductor @@ -346,7 +342,6 @@ Congratulations! You are now trained for invasive xenobiology research!"} lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' slot_flags = SLOT_BELT - origin_tech = "materials=4;combat=4;biotech=7;abductor=4" force = 7 w_class = WEIGHT_CLASS_NORMAL actions_types = list(/datum/action/item_action/toggle_mode) @@ -496,7 +491,6 @@ Congratulations! You are now trained for invasive xenobiology research!"} righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' breakouttime = 450 trashtype = /obj/item/restraints/handcuffs/energy/used - origin_tech = "materials=4;magnets=5;abductor=2" /obj/item/restraints/handcuffs/energy/used flags_1 = DROPDEL_1 @@ -524,7 +518,6 @@ Congratulations! You are now trained for invasive xenobiology research!"} /obj/item/device/radio/headset/abductor name = "alien headset" desc = "An advanced alien headset designed to monitor communications of human space stations. Why does it have a microphone? No one knows." - origin_tech = "magnets=2;abductor=3" icon = 'icons/obj/abductor.dmi' icon_state = "abductor_headset" item_state = "abductor_headset" @@ -545,35 +538,30 @@ Congratulations! You are now trained for invasive xenobiology research!"} name = "alien scalpel" desc = "It's a gleaming sharp knife made out of silvery-green metal." icon = 'icons/obj/abductor.dmi' - origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/hemostat/alien name = "alien hemostat" desc = "You've never seen this before." icon = 'icons/obj/abductor.dmi' - origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/retractor/alien name = "alien retractor" desc = "You're not sure if you want the veil pulled back." icon = 'icons/obj/abductor.dmi' - origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/circular_saw/alien name = "alien saw" desc = "Do the aliens also lose this, and need to find an alien hatchet?" icon = 'icons/obj/abductor.dmi' - origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/surgicaldrill/alien name = "alien drill" desc = "Maybe alien surgeons have finally found a use for the drill." icon = 'icons/obj/abductor.dmi' - origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/cautery/alien @@ -581,7 +569,6 @@ Congratulations! You are now trained for invasive xenobiology research!"} desc = "Why would bloodless aliens have a tool to stop bleeding? \ Unless..." icon = 'icons/obj/abductor.dmi' - origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/clothing/head/helmet/abductor @@ -590,7 +577,6 @@ Congratulations! You are now trained for invasive xenobiology research!"} icon_state = "alienhelmet" item_state = "alienhelmet" blockTracking = 1 - origin_tech = "materials=7;magnets=4;abductor=3" flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR // Operating Table / Beds / Lockers diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index 20bd7c9df2..759dfc46dc 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/abductor.dmi' icon_state = "gland" status = ORGAN_ROBOTIC - origin_tech = "materials=4;biotech=7;abductor=3" beating = TRUE var/cooldown_low = 300 var/cooldown_high = 300 @@ -83,7 +82,6 @@ Slime.Leader = owner /obj/item/organ/heart/gland/mindshock - origin_tech = "materials=4;biotech=4;magnets=6;abductor=3" cooldown_low = 300 cooldown_high = 300 uses = -1 @@ -112,7 +110,6 @@ owner.set_species(species) /obj/item/organ/heart/gland/ventcrawling - origin_tech = "materials=4;biotech=5;bluespace=4;abductor=3" cooldown_low = 1800 cooldown_high = 2400 uses = 1 @@ -140,7 +137,6 @@ /obj/item/organ/heart/gland/emp //TODO : Replace with something more interesting - origin_tech = "materials=4;biotech=4;magnets=6;abductor=3" cooldown_low = 900 cooldown_high = 1600 uses = 10 @@ -236,7 +232,6 @@ /obj/item/organ/heart/gland/plasma cooldown_low = 1200 cooldown_high = 1800 - origin_tech = "materials=4;biotech=4;plasmatech=6;abductor=3" uses = -1 /obj/item/organ/heart/gland/plasma/activate() diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index e59fc2c9b7..c26bb584ee 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -4,8 +4,7 @@ desc = "A shell of swarmer that was completely powered down. It can no longer activate itself." icon = 'icons/mob/swarmer.dmi' icon_state = "swarmer_unactivated" - origin_tech = "bluespace=4;materials=4;programming=7" - materials = list(MAT_METAL = 10000, MAT_GLASS = 4000) + materials = list(MAT_METAL=10000, MAT_GLASS=4000) /obj/effect/mob_spawn/swarmer name = "unactivated swarmer" diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index b9a07093d3..8739ba22eb 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -79,7 +79,6 @@ desc = "Still it beats furiously, emanating an aura of utter hate." icon = 'icons/obj/surgery.dmi' icon_state = "demon_heart-on" - origin_tech = "combat=5;biotech=7" /obj/item/organ/heart/demon/update_icon() return //always beating visually diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index d1c8d0193d..46f96961c9 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -194,10 +194,8 @@ /datum/objective/debrain/check_completion() if(!target)//If it's a free objective. return TRUE - if(!target.current || !isbrain(target.current)) return FALSE - var/atom/A = target.current var/list/datum/mind/owners = get_owners() @@ -508,12 +506,12 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/download /datum/objective/download/proc/gen_amount_goal() - target_amount = rand(10,20) - explanation_text = "Download [target_amount] research level\s." + target_amount = rand(20,40) + explanation_text = "Download [target_amount] research node\s." return target_amount /datum/objective/download/check_completion() - var/list/current_tech = list() + var/datum/techweb/checking = new var/list/datum/mind/owners = get_owners() for(var/datum/mind/owner in owners) if(ismob(owner.current)) @@ -522,21 +520,11 @@ GLOBAL_LIST_EMPTY(possible_items_special) var/mob/living/carbon/human/H = M if(H && (H.stat != DEAD) && istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja)) var/obj/item/clothing/suit/space/space_ninja/S = H.wear_suit - for(var/datum/tech/T in S.stored_research) - current_tech[T.id] = T.level? T.level : 0 + S.stored_research.copy_research_to(checking) var/list/otherwise = M.GetAllContents() for(var/obj/item/disk/tech_disk/TD in otherwise) - for(var/datum/tech/T in TD.tech_stored) - if(!T.id || !T.level) - continue - else if(!current_tech[T.id]) - current_tech[T.id] = T.level - else if(T.level > current_tech[T.id]) - current_tech[T.id] = T.level - var/total = 0 - for(var/i in current_tech) - total += current_tech[i] - return total >= target_amount + TD.stored_research.copy_research_to(checking) + return checking.researched_nodes.len >= target /datum/objective/capture @@ -787,7 +775,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/changeling_team_objective/impersonate_department/check_completion() if(!department_real_names.len || !department_minds.len) - return 1 //Something fucked up, give them a win + return TRUE //Something fucked up, give them a win var/list/check_names = department_real_names.Copy() @@ -799,14 +787,14 @@ GLOBAL_LIST_EMPTY(possible_items_special) if(M.current) var/turf/mloc = get_turf(M.current) if(mloc.onCentCom() && (M.current.stat != DEAD)) - return 0 //A Non-ling living target got to centcom, fail + return FALSE //A Non-ling living target got to centcom, fail //Check each staff member has been replaced, by cross referencing changeling minds, changeling current dna, the staff minds and their original DNA names var/success = 0 changelings: for(var/datum/mind/changeling in get_antagonists(/datum/antagonist/changeling,TRUE)) if(success >= department_minds.len) //We did it, stop here! - return 1 + return TRUE if(ishuman(changeling.current)) var/mob/living/carbon/human/H = changeling.current var/turf/cloc = get_turf(changeling.current) @@ -818,8 +806,8 @@ GLOBAL_LIST_EMPTY(possible_items_special) continue changelings if(success >= department_minds.len) - return 1 - return 0 + return TRUE + return FALSE diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 51695eff77..c59ad05cd5 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -137,7 +137,6 @@ item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - origin_tech = "bluespace=4;materials=4" w_class = WEIGHT_CLASS_TINY var/list/spooky_scaries = list() var/unlimited = 0 diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 484961b6f8..6b6780e6be 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -9,7 +9,6 @@ desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefact's power." w_class = WEIGHT_CLASS_TINY slot_flags = SLOT_BELT - origin_tech = "bluespace=4;materials=5" var/usability = 0 var/reusable = TRUE diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 9ce42f580c..1e0b41bca0 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -27,7 +27,7 @@ var/prod_coeff = 1 var/datum/design/being_built - var/datum/research/files + var/datum/techweb/stored_research var/list/datum/design/matching_designs var/selected_category var/screen = 1 @@ -50,7 +50,7 @@ . = ..() wires = new /datum/wires/autolathe(src) - files = new /datum/research/autolathe(src) + stored_research = new /datum/techweb/specialized/autounlocking/autolathe matching_designs = list() /obj/machinery/autolathe/Destroy() @@ -85,7 +85,7 @@ /obj/machinery/autolathe/attackby(obj/item/O, mob/user, params) if (busy) to_chat(user, "The autolathe is busy. Please wait for completion of previous operation.") - return 1 + return TRUE if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", O)) updateUsrDialog() @@ -97,16 +97,16 @@ if(panel_open) if(istype(O, /obj/item/crowbar)) default_deconstruction_crowbar(O) - return 1 + return TRUE else if(is_wire_tool(O)) wires.interact(user) - return 1 + return TRUE if(user.a_intent == INTENT_HARM) //so we can hit the machine return ..() if(stat) - return 1 + return TRUE if(istype(O, /obj/item/disk/design_disk)) user.visible_message("[user] begins to load \the [O] in \the [src]...", @@ -117,10 +117,9 @@ if(do_after(user, 14.4, target = src)) for(var/B in D.blueprints) if(B) - files.AddDesign2Known(B) - + stored_research.add_design(B) busy = FALSE - return 1 + return TRUE return ..() @@ -154,7 +153,7 @@ ///////////////// //href protection - being_built = files.FindDesignByID(href_list["make"]) //check if it's a valid design + being_built = stored_research.isDesignResearchedID(href_list["make"]) if(!being_built) return @@ -207,8 +206,8 @@ if(href_list["search"]) matching_designs.Cut() - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] if(findtext(D.name,href_list["to_search"])) matching_designs.Add(D) updateUsrDialog() @@ -261,8 +260,8 @@ dat += "

Browsing [selected_category]:


" dat += materials_printout() - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] if(!(selected_category in D.category)) continue @@ -328,16 +327,16 @@ /obj/machinery/autolathe/proc/can_build(datum/design/D, amount = 1) if(D.make_reagents.len) - return 0 + return FALSE var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff) GET_COMPONENT(materials, /datum/component/material_container) if(D.materials[MAT_METAL] && (materials.amount(MAT_METAL) < (D.materials[MAT_METAL] * coeff * amount))) - return 0 + return FALSE if(D.materials[MAT_GLASS] && (materials.amount(MAT_GLASS) < (D.materials[MAT_GLASS] * coeff * amount))) - return 0 - return 1 + return FALSE + return TRUE /obj/machinery/autolathe/proc/get_design_cost(datum/design/D) var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff) @@ -362,25 +361,26 @@ /obj/machinery/autolathe/proc/shock(mob/user, prb) if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return 0 + return FALSE if(!prob(prb)) - return 0 + return FALSE var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(5, 1, src) s.start() if (electrocute_mob(user, get_area(src), src, 0.7, TRUE)) - return 1 + return TRUE else - return 0 + return FALSE /obj/machinery/autolathe/proc/adjust_hacked(state) hacked = state - for(var/datum/design/D in files.possible_designs) + for(var/id in SSresearch.techweb_designs) + var/datum/design/D = SSresearch.techweb_designs[id] if((D.build_type & AUTOLATHE) && ("hacked" in D.category)) if(hacked) - files.AddDesign2Known(D) + stored_research.add_design(D) else - files.known_designs -= D.id + stored_research.remove_design(D) /obj/machinery/autolathe/hacked/Initialize() . = ..() diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 53209108b2..9fa196bd46 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -405,7 +405,6 @@ powers -= 1 //To prevent just unlocking everything to get all powers to a syringe for max tech else I.remove_mutations.Add(HM) - I.origin_tech = "biotech=2;engineering=[max(1,min(6,powers))]" //With 6 powers available this tech level will be 1-6, also safety check if new powers get added var/time_coeff for(var/datum/mutation/human/HM in I.add_mutations) if(!time_coeff) diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 8c4772f43a..c13dfc9b88 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -7,8 +7,8 @@ GLOBAL_LIST_EMPTY(doppler_arrays) icon_state = "tdoppler" density = TRUE anchored = TRUE - var/integrated = 0 - var/max_dist = 100 + var/integrated = FALSE + var/max_dist = 150 verb_say = "states coldly" /obj/machinery/doppler_array/Initialize() @@ -80,7 +80,7 @@ GLOBAL_LIST_EMPTY(doppler_arrays) "Epicenter at: grid ([epicenter.x],[epicenter.y]). Temporal displacement of tachyons: [took] seconds.", \ "Factual: Epicenter radius: [devastation_range]. Outer radius: [heavy_impact_range]. Shockwave radius: [light_impact_range].") - // If the bomb was capped, say it's theoretical size. + // If the bomb was capped, say its theoretical size. if(devastation_range < orig_dev_range || heavy_impact_range < orig_heavy_range || light_impact_range < orig_light_range) messages += "Theoretical: Epicenter radius: [orig_dev_range]. Outer radius: [orig_heavy_range]. Shockwave radius: [orig_light_range]." @@ -107,6 +107,32 @@ GLOBAL_LIST_EMPTY(doppler_arrays) //Portable version, built into EOD equipment. It simply provides an explosion's three damage levels. /obj/machinery/doppler_array/integrated name = "integrated tachyon-doppler module" - integrated = 1 + integrated = TRUE max_dist = 21 //Should detect most explosions in hearing range. use_power = NO_POWER_USE + +/obj/machinery/doppler_array/research + name = "tachyon-dopplar research array" + desc = "A specialized tacyhon-dopplar bomb detection array that uses the results of the highest yield of explosions for research." + var/datum/techweb/linked_techweb + +/obj/machinery/doppler_array/research/sense_explosion(turf/epicenter, dev, heavy, light, time, orig_dev, orig_heavy, orig_light) //probably needs a way to ignore admin explosives later on + . = ..() + if(!istype(linked_techweb)) + say("Warning: No linked research system!") + return + var/point_gain = techweb_scale_bomb(orig_light - 20 - linked_techweb.max_bomb_value) + if(!point_gain) + return + linked_techweb.max_bomb_value = orig_light - 20 + linked_techweb.research_points += point_gain + say("Gained [point_gain] points from explosion dataset.") + +/obj/machinery/doppler_array/research/science + +/obj/machinery/doppler_array/research/science/Initialize() + . = ..() + linked_techweb = SSresearch.science_tech + +/proc/techweb_scale_bomb(lightradius) + return (lightradius ** 0.5) * 13000 diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index 2d7c7708b3..380760963d 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -164,7 +164,6 @@ The console is located at computer/gulag_teleporter.dm /obj/item/circuitboard/machine/gulag_teleporter name = "labor camp teleporter (Machine Board)" build_path = /obj/machinery/gulag_teleporter - origin_tech = "programming=3;engineering=4;bluespace=4;materials=4" req_components = list( /obj/item/ore/bluespace_crystal = 2, /obj/item/stock_parts/scanning_module, diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 4f4e481905..d66427b9bc 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -242,7 +242,6 @@ icon_state = "blpad-remote" w_class = WEIGHT_CLASS_SMALL slot_flags = SLOT_BELT - origin_tech = "materials=3;magnets=2;bluespace=4;syndicate=3" var/sending = TRUE var/obj/machinery/launchpad/briefcase/pad diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index f31a2d2436..47fee66b9e 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -22,7 +22,7 @@ var/busy = FALSE var/prod_coeff = 1 var/datum/design/being_built - var/datum/research/files + var/datum/techweb/stored_research var/selected_category var/screen = 1 var/list/categories = list( @@ -35,7 +35,7 @@ /obj/machinery/limbgrower/Initialize() . = ..() create_reagents(0) - files = new /datum/research/limbgrower(src) + stored_research = new /datum/techweb/specialized/autounlocking/limbgrower /obj/machinery/limbgrower/interact(mob/user) if(!is_operational()) @@ -95,7 +95,7 @@ ///////////////// //href protection - being_built = files.FindDesignByID(href_list["make"]) //check if it's a valid design + being_built = stored_research.isDesignResearchedID(href_list["make"]) //check if it's a valid design if(!being_built) return @@ -180,8 +180,8 @@ dat += "

Browsing [selected_category]:


" dat += materials_printout() - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] if(!(selected_category in D.category)) continue if(disabled || !can_build(D)) @@ -222,8 +222,8 @@ /obj/machinery/limbgrower/emag_act(mob/user) if(emagged) return - for(var/datum/design/D in files.possible_designs) + for(var/datum/design/D in SSresearch.techweb_designs) if((D.build_type & LIMBGROWER) && ("special" in D.category)) - files.AddDesign2Known(D) + stored_research.add_design(D) to_chat(user, "A warning flashes onto the screen, stating that safety overrides have been deactivated!") emagged = TRUE diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 20f56d5f2d..fa4a31cfc3 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -10,6 +10,7 @@ circuit = /obj/item/circuitboard/machine/recharger var/obj/item/charging = null var/recharge_coeff = 1 + var/static/list/allowed_devices = typecacheof(list( /obj/item/gun/energy, /obj/item/melee/baton, diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index f8f980a1ee..0b050769d9 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -109,7 +109,6 @@ lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' desc = "A label on it reads: Warning: Activating this device will send a special beacon to your location." - origin_tech = "bluespace=6;syndicate=5" w_class = WEIGHT_CLASS_SMALL var/droptype = /obj/machinery/power/singularity_beacon/syndicate @@ -125,9 +124,7 @@ /obj/item/device/sbeacondrop/bomb desc = "A label on it reads: Warning: Activating this device will send a high-ordinance explosive to your location." droptype = /obj/machinery/syndicatebomb - origin_tech = "bluespace=5;syndicate=5" /obj/item/device/sbeacondrop/powersink desc = "A label on it reads: Warning: Activating this device will send a power draining device to your location." droptype = /obj/item/device/powersink - origin_tech = "bluespace=4;syndicate=5" diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index bdd34e8d23..5b510d965e 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -274,7 +274,6 @@ lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' w_class = WEIGHT_CLASS_NORMAL - origin_tech = "syndicate=5;combat=6" resistance_flags = FLAMMABLE //Burnable (but the casing isn't) var/adminlog = null var/range_heavy = 3 @@ -308,7 +307,6 @@ /obj/item/bombcore/training name = "dummy payload" desc = "A Nanotrasen replica of a syndicate payload. Its not intended to explode but to announce that it WOULD have exploded, then rewire itself to allow for more training." - origin_tech = null var/defusals = 0 var/attempts = 0 @@ -347,7 +345,6 @@ /obj/item/bombcore/badmin name = "badmin payload" desc = "If you're seeing this someone has either made a mistake or gotten dangerously savvy with var editing!" - origin_tech = null /obj/item/bombcore/badmin/defuse() //because we wouldn't want them being harvested by players var/obj/machinery/syndicatebomb/B = loc @@ -390,7 +387,6 @@ /obj/item/bombcore/chemical name = "chemical payload" desc = "An explosive payload designed to spread chemicals, dangerous or otherwise, across a large area. Properties of the core may vary with grenade casing type, and must be loaded before use." - origin_tech = "combat=4;materials=3" icon_state = "chemcore" var/list/beakers = list() var/max_beakers = 1 // Read on about grenade casing properties below @@ -522,7 +518,6 @@ lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' w_class = WEIGHT_CLASS_TINY - origin_tech = "syndicate=3" var/timer = 0 var/detonated = 0 var/existant = 0 diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index d54476f529..90b1327b9e 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -79,6 +79,7 @@ last_slogan = world.time + rand(0, slogan_delay) power_change() + /obj/machinery/vending/Destroy() QDEL_NULL(wires) QDEL_NULL(coin) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 627858bea6..e2a35ac591 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -6,7 +6,6 @@ icon = 'icons/mecha/mecha_equipment.dmi' icon_state = "mecha_equip" force = 5 - origin_tech = "materials=2;engineering=2" max_integrity = 300 var/equip_cooldown = 0 // cooldown after use var/equip_ready = 1 //whether the equipment is ready for use. (or deactivated/activated for static stuff) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index abec0c2641..97e743b30e 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -34,7 +34,6 @@ desc = "Equipment for medical exosuits. A mounted sleeper that stabilizes patients and can inject reagents in the exosuit's reserves." icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" - origin_tech = "engineering=3;biotech=3;plasmatech=2" energy_drain = 20 range = MELEE equip_cooldown = 20 @@ -256,7 +255,6 @@ var/mode = 0 //0 - fire syringe, 1 - analyze reagents. range = MELEE|RANGED equip_cooldown = 10 - origin_tech = "materials=3;biotech=4;magnets=4" /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/New() ..() @@ -533,7 +531,6 @@ energy_drain = 10 range = MELEE|RANGED equip_cooldown = 0 - origin_tech = "combat=5;materials=6;powerstorage=7;biotech=6" var/obj/item/gun/medbeam/mech/medigun materials = list(MAT_METAL = 15000, MAT_GLASS = 8000, MAT_PLASMA = 3000, MAT_GOLD = 8000, MAT_DIAMOND = 2000) diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index 9203e32177..0984621dc3 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -98,7 +98,6 @@ name = "diamond-tipped exosuit drill" desc = "Equipment for engineering and combat exosuits. This is an upgraded version of the drill that'll pierce the heavens!" icon_state = "mecha_diamond_drill" - origin_tech = "materials=4;engineering=4" equip_cooldown = 10 force = 15 diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 9d7c9b6833..8951a0dbd5 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -8,7 +8,6 @@ name = "mounted teleporter" desc = "An exosuit module that allows exosuits to teleport to any position in view." icon_state = "mecha_teleport" - origin_tech = "bluespace=7" equip_cooldown = 150 energy_drain = 1000 range = RANGED @@ -29,7 +28,6 @@ name = "mounted wormhole generator" desc = "An exosuit module that allows generating of small quasi-stable wormholes." icon_state = "mecha_wholegen" - origin_tech = "bluespace=4;magnets=4;plasmatech=2" equip_cooldown = 50 energy_drain = 300 range = RANGED @@ -73,7 +71,6 @@ name = "mounted gravitational catapult" desc = "An exosuit mounted Gravitational Catapult." icon_state = "mecha_teleport" - origin_tech = "bluespace=3;magnets=3;engineering=4" equip_cooldown = 10 energy_drain = 100 range = MELEE|RANGED @@ -145,7 +142,6 @@ name = "armor booster module (Close Combat Weaponry)" desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate." icon_state = "mecha_abooster_ccw" - origin_tech = "materials=4;combat=4" equip_cooldown = 10 energy_drain = 50 range = 0 @@ -164,7 +160,6 @@ name = "armor booster module (Ranged Weaponry)" desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate." icon_state = "mecha_abooster_proj" - origin_tech = "materials=4;combat=3;engineering=3" equip_cooldown = 10 energy_drain = 50 range = 0 @@ -185,7 +180,6 @@ name = "exosuit repair droid" desc = "An automated repair droid for exosuits. Scans for damage and repairs it. Can fix almost all types of external or internal damage." icon_state = "repair_droid" - origin_tech = "magnets=3;programming=3;engineering=4" energy_drain = 50 range = 0 var/health_boost = 1 @@ -271,7 +265,6 @@ name = "exosuit energy relay" desc = "An exosuit module that wirelessly drains energy from any available power channel in area. The performance index is quite low." icon_state = "tesla" - origin_tech = "magnets=4;powerstorage=4;engineering=4" energy_drain = 0 range = 0 var/coeff = 100 @@ -357,7 +350,6 @@ name = "exosuit plasma converter" desc = "An exosuit module that generates power using solid plasma as fuel. Pollutes the environment." icon_state = "tesla" - origin_tech = "plasmatech=2;powerstorage=2;engineering=2" range = MELEE var/coeff = 100 var/obj/item/stack/sheet/fuel @@ -473,7 +465,6 @@ name = "exonuclear reactor" desc = "An exosuit module that generates power using uranium as fuel. Pollutes the environment." icon_state = "tesla" - origin_tech = "powerstorage=4;engineering=4" max_fuel = 50000 fuel_per_cycle_idle = 10 fuel_per_cycle_active = 30 diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 6d9fc9e13e..d456642633 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -191,7 +191,6 @@ name = "mounted RCD" desc = "An exosuit-mounted Rapid Construction Device." icon_state = "mecha_rcd" - origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4;engineering=4" equip_cooldown = 10 energy_drain = 250 range = MELEE|RANGED diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 4b814d6e58..2cd44f75b9 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -1,7 +1,6 @@ /obj/item/mecha_parts/mecha_equipment/weapon name = "mecha weapon" range = RANGED - origin_tech = "materials=3;combat=3" var/projectile var/fire_sound var/projectiles_per_shot = 1 @@ -73,7 +72,6 @@ name = "\improper CH-PS \"Immolator\" laser" desc = "A weapon for combat exosuits. Shoots basic lasers." icon_state = "mecha_laser" - origin_tech = "magnets=3;combat=3;engineering=3" energy_drain = 30 projectile = /obj/item/projectile/beam/laser fire_sound = 'sound/weapons/laser.ogg' @@ -83,7 +81,6 @@ name = "\improper CH-LC \"Solaris\" laser cannon" desc = "A weapon for combat exosuits. Shoots heavy lasers." icon_state = "mecha_laser" - origin_tech = "magnets=4;combat=4;engineering=3" energy_drain = 60 projectile = /obj/item/projectile/beam/laser/heavylaser fire_sound = 'sound/weapons/lasercannonfire.ogg' @@ -93,7 +90,6 @@ name = "\improper MKIV ion heavy cannon" desc = "A weapon for combat exosuits. Shoots technology-disabling ion beams. Don't catch yourself in the blast!" icon_state = "mecha_ion" - origin_tech = "materials=4;combat=5;magnets=4" energy_drain = 120 projectile = /obj/item/projectile/ion fire_sound = 'sound/weapons/laser.ogg' @@ -103,7 +99,6 @@ name = "\improper MKI Tesla Cannon" desc = "A weapon for combat exosuits. Fires bolts of electricity similar to the experimental tesla engine." icon_state = "mecha_ion" - origin_tech = "materials=4;engineering=4;combat=6;magnets=6" energy_drain = 500 projectile = /obj/item/projectile/energy/tesla/cannon fire_sound = 'sound/magic/lightningbolt.ogg' @@ -115,7 +110,6 @@ desc = "A weapon for combat exosuits. Shoots powerful destructive blasts capable of demolishing obstacles." icon_state = "mecha_pulse" energy_drain = 120 - origin_tech = "materials=3;combat=6;powerstorage=4" projectile = /obj/item/projectile/beam/pulse/heavy fire_sound = 'sound/weapons/marauder.ogg' @@ -128,7 +122,6 @@ lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' energy_drain = 30 - origin_tech = "materials=3;plasmatech=4;engineering=3" projectile = /obj/item/projectile/plasma/adv/mech fire_sound = 'sound/weapons/plasma_cutter.ogg' @@ -143,7 +136,6 @@ name = "\improper PBT \"Pacifier\" mounted taser" desc = "A weapon for combat exosuits. Shoots non-lethal stunning electrodes." icon_state = "mecha_taser" - origin_tech = "combat=3" energy_drain = 20 equip_cooldown = 8 projectile = /obj/item/projectile/energy/electrode @@ -247,7 +239,6 @@ name = "\improper FNX-99 \"Hades\" Carbine" desc = "A weapon for combat exosuits. Shoots incendiary bullets." icon_state = "mecha_carbine" - origin_tech = "materials=4;combat=4" equip_cooldown = 10 projectile = /obj/item/projectile/bullet/incendiary/fnx99 projectiles = 24 @@ -267,7 +258,6 @@ name = "\improper LBX AC 10 \"Scattershot\"" desc = "A weapon for combat exosuits. Shoots a spread of pellets." icon_state = "mecha_scatter" - origin_tech = "combat=4" equip_cooldown = 20 projectile = /obj/item/projectile/bullet/scattershot projectiles = 40 @@ -279,7 +269,6 @@ name = "\improper Ultra AC 2" desc = "A weapon for combat exosuits. Shoots a rapid, three shot burst." icon_state = "mecha_uac2" - origin_tech = "combat=4" equip_cooldown = 10 projectile = /obj/item/projectile/bullet/lmg projectiles = 300 @@ -293,7 +282,6 @@ name = "\improper SRM-8 missile rack" desc = "A weapon for combat exosuits. Shoots light explosive missiles." icon_state = "mecha_missilerack" - origin_tech = "combat=5;materials=4;engineering=4" projectile = /obj/item/projectile/bullet/srmrocket fire_sound = 'sound/weapons/grenadelaunch.ogg' projectiles = 8 @@ -326,7 +314,6 @@ name = "\improper SGL-6 grenade launcher" desc = "A weapon for combat exosuits. Launches primed flashbangs." icon_state = "mecha_grenadelnchr" - origin_tech = "combat=4;engineering=4" projectile = /obj/item/grenade/flashbang fire_sound = 'sound/weapons/grenadelaunch.ogg' projectiles = 6 @@ -344,7 +331,6 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze name = "\improper SOB-3 grenade launcher" desc = "A weapon for combat exosuits. Launches primed clusterbangs. You monster." - origin_tech = "combat=4;materials=4" projectiles = 3 projectile = /obj/item/grenade/clusterbuster projectile_energy_cost = 1600 //getting off cheap seeing as this is 3 times the flashbangs held in the grenade launcher. diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 59aad6154f..1766a8cc3a 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -12,7 +12,7 @@ circuit = /obj/item/circuitboard/machine/mechfab var/time_coeff = 1 var/component_coeff = 1 - var/datum/research/files + var/datum/techweb/specialized/autounlocking/exofab/stored_research var/sync = 0 var/part_set var/datum/design/being_built @@ -37,11 +37,12 @@ var/datum/component/material_container/materials /obj/machinery/mecha_part_fabricator/Initialize() - materials = AddComponent(/datum/component/material_container, - list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, - FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) - materials.precise_insertion = TRUE - return ..() + materials = AddComponent(/datum/component/material_container, + list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, + FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + materials.precise_insertion = TRUE + stored_research = new + return ..() /obj/machinery/mecha_part_fabricator/RefreshParts() var/T = 0 @@ -70,11 +71,11 @@ var/obj/item/device/pda/pda = I I = pda.id if(!istype(I) || !I.access) //not ID or no access - return 0 + return FALSE for(var/req in req_access) if(!(req in I.access)) //doesn't have this access - return 0 - return 1 + return FALSE + return TRUE /obj/machinery/mecha_part_fabricator/emag_act() if(emagged) @@ -92,8 +93,8 @@ /obj/machinery/mecha_part_fabricator/proc/output_parts_list(set_name) var/output = "" - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] if(D.build_type & MECHFAB) if(!(set_name in D.category)) continue @@ -137,11 +138,11 @@ /obj/machinery/mecha_part_fabricator/proc/check_resources(datum/design/D) if(D.reagents_list.len) // No reagents storage - no reagent designs. - return 0 + return FALSE GET_COMPONENT(materials, /datum/component/material_container) if(materials.has_materials(get_resources_w_coeff(D))) - return 1 - return 0 + return TRUE + return FALSE /obj/machinery/mecha_part_fabricator/proc/build_part(datum/design/D) being_built = D @@ -165,7 +166,7 @@ being_built = null updateUsrDialog() - return 1 + return TRUE /obj/machinery/mecha_part_fabricator/proc/update_queue_on_page() send_byjax(usr,"mecha_fabricator.browser","queue",list_queue()) @@ -173,8 +174,8 @@ /obj/machinery/mecha_part_fabricator/proc/add_part_set_to_queue(set_name) if(set_name in part_sets) - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] if(D.build_type & MECHFAB) if(set_name in D.category) add_to_queue(D) @@ -188,9 +189,9 @@ /obj/machinery/mecha_part_fabricator/proc/remove_from_queue(index) if(!isnum(index) || !IsInteger(index) || !istype(queue) || (index<1 || index>queue.len)) - return 0 + return FALSE queue.Cut(index,++index) - return 1 + return TRUE /obj/machinery/mecha_part_fabricator/proc/process_queue() var/datum/design/D = queue[1] @@ -203,12 +204,12 @@ temp = null while(D) if(stat&(NOPOWER|BROKEN)) - return 0 + return FALSE if(!check_resources(D)) say("Not enough resources. Queue processing stopped.") temp = {"Not enough resources to build next part.
Try again | Return"} - return 0 + return FALSE remove_from_queue(1) build_part(D) D = listgetindex(queue, 1) @@ -240,15 +241,7 @@ sleep(30) //only sleep if called by user for(var/obj/machinery/computer/rdconsole/RDC in oview(7,src)) - if(!RDC.sync) - continue - for(var/v in RDC.files.known_tech) - var/datum/tech/T = RDC.files.known_tech[v] - files.AddTech2Known(T) - for(var/v in RDC.files.known_designs) - var/datum/design/D = RDC.files.known_designs[v] - files.AddDesign2Known(D) - files.RefreshResearch() + RDC.stored_research.copy_research_to(stored_research) temp = "Processed equipment designs.
" //check if the tech coefficients have changed temp += "
Return" @@ -344,8 +337,8 @@ screen = "parts" if(href_list["part"]) var/T = afilter.getStr("part") - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] if(D.build_type & MECHFAB) if(D.id == T) if(!processing_queue) @@ -355,8 +348,8 @@ break if(href_list["add_to_queue"]) var/T = afilter.getStr("add_to_queue") - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] if(D.build_type & MECHFAB) if(D.id == T) add_to_queue(D) @@ -371,7 +364,7 @@ if(href_list["process_queue"]) spawn(0) if(processing_queue || being_built) - return 0 + return FALSE processing_queue = 1 process_queue() processing_queue = 0 @@ -393,8 +386,8 @@ sync() if(href_list["part_desc"]) var/T = afilter.getStr("part_desc") - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] if(D.build_type & MECHFAB) if(D.id == T) var/obj/part = D.build_path @@ -424,13 +417,13 @@ /obj/machinery/mecha_part_fabricator/attackby(obj/item/W, mob/user, params) if(default_deconstruction_screwdriver(user, "fab-o", "fab-idle", W)) - return 1 + return TRUE if(exchange_parts(user, W)) - return 1 + return TRUE if(default_deconstruction_crowbar(W)) - return 1 + return TRUE return ..() diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 63dd798a34..bb495675b1 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -67,7 +67,6 @@ icon = 'icons/obj/device.dmi' icon_state = "motion2" w_class = WEIGHT_CLASS_SMALL - origin_tech = "programming=2;magnets=2" var/ai_beacon = FALSE //If this beacon allows for AI control. Exists to avoid using istype() on checking. /obj/item/mecha_parts/mecha_tracking/proc/get_mecha_info() @@ -119,7 +118,6 @@ /obj/item/mecha_parts/mecha_tracking/ai_control name = "exosuit AI control beacon" desc = "A device used to transmit exosuit data. Also allows active AI units to take control of said exosuit." - origin_tech = "programming=3;magnets=2;engineering=2" ai_beacon = TRUE diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 674854c22e..3455d19877 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -8,7 +8,6 @@ icon_state = "blank" w_class = WEIGHT_CLASS_GIGANTIC flags_1 = CONDUCT_1 - origin_tech = "programming=2;materials=2;engineering=2" /obj/item/mecha_parts/chassis name="Mecha Chassis" @@ -35,7 +34,6 @@ name = "\improper Ripley torso" desc = "A torso part of Ripley APLU. Contains power unit, processing core and life support systems." icon_state = "ripley_harness" - origin_tech = "programming=2;materials=2;biotech=2;engineering=2" /obj/item/mecha_parts/part/ripley_left_arm name = "\improper Ripley left arm" @@ -75,7 +73,6 @@ name = "\improper Odysseus torso" desc="A torso part of Odysseus. Contains power unit, processing core and life support systems along with an attachment port for a mounted sleeper." icon_state = "odysseus_torso" - origin_tech = "programming=2;materials=2;biotech=2;engineering=2" /obj/item/mecha_parts/part/odysseus_left_arm name = "\improper Odysseus left arm" @@ -110,44 +107,37 @@ name = "\improper Gygax torso" desc = "A torso part of Gygax. Contains power unit, processing core and life support systems." icon_state = "gygax_harness" - origin_tech = "programming=2;materials=4;biotech=3;engineering=3" /obj/item/mecha_parts/part/gygax_head name = "\improper Gygax head" desc = "A Gygax head. Houses advanced surveillance and targeting sensors." icon_state = "gygax_head" - origin_tech = "programming=2;materials=4;magnets=3;engineering=3" /obj/item/mecha_parts/part/gygax_left_arm name = "\improper Gygax left arm" desc = "A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons." icon_state = "gygax_l_arm" - origin_tech = "programming=2;materials=4;engineering=3" /obj/item/mecha_parts/part/gygax_right_arm name = "\improper Gygax right arm" desc = "A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons." icon_state = "gygax_r_arm" - origin_tech = "programming=2;materials=4;engineering=3" /obj/item/mecha_parts/part/gygax_left_leg name = "\improper Gygax left leg" desc = "A Gygax left leg. Constructed with advanced servomechanisms and actuators to enable faster speed." icon_state = "gygax_l_leg" - origin_tech = "programming=2;materials=4;engineering=3" /obj/item/mecha_parts/part/gygax_right_leg name = "\improper Gygax right leg" desc = "A Gygax right leg. Constructed with advanced servomechanisms and actuators to enable faster speed." icon_state = "gygax_r_leg" - origin_tech = "programming=2;materials=4;engineering=3" /obj/item/mecha_parts/part/gygax_armor gender = PLURAL name = "\improper Gygax armor plates" desc = "A set of armor plates designed for the Gygax. Designed to effectively deflect damage with a lightweight construction." icon_state = "gygax_armor" - origin_tech = "materials=6;combat=4;engineering=4" //////////// Durand @@ -163,44 +153,37 @@ name = "\improper Durand torso" desc = "A torso part of Durand. Contains power unit, processing core and life support systems within a robust protective frame." icon_state = "durand_harness" - origin_tech = "programming=2;materials=3;biotech=3;engineering=3" /obj/item/mecha_parts/part/durand_head name = "\improper Durand head" desc = "A Durand head. Houses advanced surveillance and targeting sensors." icon_state = "durand_head" - origin_tech = "programming=2;materials=3;magnets=3;engineering=3" /obj/item/mecha_parts/part/durand_left_arm name = "\improper Durand left arm" desc = "A Durand left arm. Data and power sockets are compatible with most exosuit tools and weapons. Packs a really mean punch as well." icon_state = "durand_l_arm" - origin_tech = "programming=2;materials=3;engineering=3" /obj/item/mecha_parts/part/durand_right_arm name = "\improper Durand right arm" desc = "A Durand right arm. Data and power sockets are compatible with most exosuit tools and weapons. Packs a really mean punch as well." icon_state = "durand_r_arm" - origin_tech = "programming=2;materials=3;engineering=3" /obj/item/mecha_parts/part/durand_left_leg name = "\improper Durand left leg" desc = "A Durand left leg. Built particlarly sturdy to support the Durand's heavy weight and defensive needs." icon_state = "durand_l_leg" - origin_tech = "programming=2;materials=3;engineering=3" /obj/item/mecha_parts/part/durand_right_leg name = "\improper Durand right leg" desc = "A Durand right leg. Built particlarly sturdy to support the Durand's heavy weight and defensive needs." icon_state = "durand_r_leg" - origin_tech = "programming=2;materials=3;engineering=3" /obj/item/mecha_parts/part/durand_armor gender = PLURAL name = "\improper Durand armor plates" desc = "A set of armor plates for the Durand. Built heavy to resist an incredible amount of brute force." icon_state = "durand_armor" - origin_tech = "materials=5;combat=4;engineering=4" ////////// Firefighter @@ -265,43 +248,36 @@ name="\improper Phazon torso" desc="A Phazon torso part. The socket for the bluespace core that powers the exosuit's unique phase drives is located in the middle." icon_state = "phazon_harness" - origin_tech = "programming=4;materials=4;bluespace=4;plasmatech=5" /obj/item/mecha_parts/part/phazon_head name="\improper Phazon head" desc="A Phazon head. Its sensors are carefully calibrated to provide vision and data even when the exosuit is phasing." icon_state = "phazon_head" - origin_tech = "programming=3;materials=3;magnets=3" /obj/item/mecha_parts/part/phazon_left_arm name="\improper Phazon left arm" desc="A Phazon left arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand." icon_state = "phazon_l_arm" - origin_tech = "materials=3;bluespace=3;magnets=3" /obj/item/mecha_parts/part/phazon_right_arm name="\improper Phazon right arm" desc="A Phazon right arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand." icon_state = "phazon_r_arm" - origin_tech = "materials=3;bluespace=3;magnets=3" /obj/item/mecha_parts/part/phazon_left_leg name="\improper Phazon left leg" desc="A Phazon left leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged." icon_state = "phazon_l_leg" - origin_tech = "materials=3;bluespace=3;magnets=3" /obj/item/mecha_parts/part/phazon_right_leg name="\improper Phazon right leg" desc="A Phazon right leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged." icon_state = "phazon_r_leg" - origin_tech = "materials=3;bluespace=3;magnets=3" /obj/item/mecha_parts/part/phazon_armor name="Phazon armor" desc="Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties." icon_state = "phazon_armor" - origin_tech = "materials=4;bluespace=4;plasmatech=5" ///////// Circuitboards @@ -320,9 +296,6 @@ throw_speed = 3 throw_range = 7 -/obj/item/circuitboard/mecha/ripley - origin_tech = "programming=2" - /obj/item/circuitboard/mecha/ripley/peripherals name = "Ripley Peripherals Control module (Exosuit Board)" icon_state = "mcontroller" @@ -331,8 +304,6 @@ name = "Ripley Central Control module (Exosuit Board)" icon_state = "mainboard" -/obj/item/circuitboard/mecha/gygax - origin_tech = "programming=4;combat=3;engineering=3" /obj/item/circuitboard/mecha/gygax/peripherals name = "Gygax Peripherals Control module (Exosuit Board)" @@ -341,15 +312,11 @@ /obj/item/circuitboard/mecha/gygax/targeting name = "Gygax Weapon Control and Targeting module (Exosuit Board)" icon_state = "mcontroller" - origin_tech = "programming=4;combat=4" /obj/item/circuitboard/mecha/gygax/main name = "Gygax Central Control module (Exosuit Board)" icon_state = "mainboard" -/obj/item/circuitboard/mecha/durand - origin_tech = "programming=4;combat=3;engineering=3" - /obj/item/circuitboard/mecha/durand/peripherals name = "Durand Peripherals Control module (Exosuit Board)" icon_state = "mcontroller" @@ -357,15 +324,11 @@ /obj/item/circuitboard/mecha/durand/targeting name = "Durand Weapon Control and Targeting module (Exosuit Board)" icon_state = "mcontroller" - origin_tech = "programming=4;combat=4;engineering=3" /obj/item/circuitboard/mecha/durand/main name = "Durand Central Control module (Exosuit Board)" icon_state = "mainboard" -/obj/item/circuitboard/mecha/honker - origin_tech = "programming=3;engineering=3" - /obj/item/circuitboard/mecha/honker/peripherals name = "H.O.N.K Peripherals Control module (Exosuit Board)" icon_state = "mcontroller" @@ -378,9 +341,6 @@ name = "H.O.N.K Central Control module (Exosuit Board)" icon_state = "mainboard" -/obj/item/circuitboard/mecha/odysseus - origin_tech = "programming=3;biotech=3" - /obj/item/circuitboard/mecha/odysseus/peripherals name = "Odysseus Peripherals Control module (Exosuit Board)" icon_state = "mcontroller" @@ -389,9 +349,6 @@ name = "Odysseus Central Control module (Exosuit Board)" icon_state = "mainboard" -/obj/item/circuitboard/mecha/phazon - origin_tech = "programming=5;plasmatech=4" - /obj/item/circuitboard/mecha/phazon/peripherals name = "Phazon Peripherals Control module (Exosuit Board)" icon_state = "mcontroller" diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index 20155a7046..e471efcf96 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -86,7 +86,6 @@ /obj/effect/anomaly/grav/New() ..() - aSignal.origin_tech = "magnets=7" /obj/effect/anomaly/grav/anomalyEffect() ..() @@ -132,7 +131,6 @@ /obj/effect/anomaly/flux/New() ..() - aSignal.origin_tech = "powerstorage=7" /obj/effect/anomaly/flux/anomalyEffect() ..() @@ -181,7 +179,6 @@ /obj/effect/anomaly/bluespace/New() ..() - aSignal.origin_tech = "bluespace=7" /obj/effect/anomaly/bluespace/anomalyEffect() ..() @@ -255,7 +252,6 @@ /obj/effect/anomaly/pyro/New() ..() - aSignal.origin_tech = "plasmatech=7" /obj/effect/anomaly/pyro/anomalyEffect() ..() @@ -291,7 +287,6 @@ /obj/effect/anomaly/bhole/New() ..() - aSignal.origin_tech = "engineering=7" /obj/effect/anomaly/bhole/anomalyEffect() ..() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 52dc2fed6e..f4dd741695 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -63,7 +63,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/breakouttime = 0 var/being_removed = FALSE var/list/materials - var/origin_tech = null //Used by R&D to determine what research bonuses it grants. var/needs_permit = 0 //Used by security bots to determine if this item is safe for public use. var/emagged = FALSE @@ -197,28 +196,35 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/size = weightclass2text(src.w_class) to_chat(user, "[pronoun] a [size] item." ) - if(user.research_scanner) //Mob has a research scanner active. - var/msg = "*--------*
" + if(!user.research_scanner) + return + var/list/input = techweb_item_boost_check(src) + if(input) + var/list/output = list("Research Boost Data:") + var/list/res = list("Already researched:") + var/list/boosted = list("Already boosted:") + for(var/datum/techweb_node/N in input) + var/str = "[N.display_name]: [input[N]] points." + if(SSresearch.science_tech.researched_nodes[N]) + res += str + else if(SSresearch.science_tech.boosted_nodes[N]) + boosted += str + if(SSresearch.science_tech.visible_nodes[N]) //JOY OF DISCOVERY! + output += str + var/list/combine = output + res + boosted + var/strout = combine.Join("
") + to_chat(user, strout) - if(origin_tech) - msg += "Testing potentials:
" - var/list/techlvls = params2list(origin_tech) - for(var/T in techlvls) //This needs to use the better names. - msg += "Tech: [CallTechName(T)] | magnitude: [techlvls[T]]
" - else - msg += "No tech origins detected.
" + var/list/msg = list("*--------*
Extractable materials:") + if(materials.len) + for(var/mat in materials) + msg += "[CallMaterialName(mat)]" //Capitize first word, remove the "$" + else + msg += "No extractable materials detected." + msg += "*--------*" + to_chat(user, msg.Join("
")) - - if(materials.len) - msg += "Extractable materials:
" - for(var/mat in materials) - msg += "[CallMaterialName(mat)]
" //Capitize first word, remove the "$" - else - msg += "No extractable materials detected.
" - msg += "*--------*" - to_chat(user, msg) - -/obj/item/proc/speechModification(message) //For speech modification by mask slot items. +/obj/item/proc/speechModification(message) //for message modding by mask slot. return message /obj/item/interact(mob/user) @@ -375,6 +381,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) progress.update(progress.goal - things.len) return FALSE +/obj/item/proc/GetDeconstructableContents() + return GetAllContents() - src + // afterattack() and attack() prototypes moved to _onclick/item_attack.dm for consistency /obj/item/proc/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index b3e49f0991..1e9c71bd01 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -20,7 +20,6 @@ AI MODULES throwforce = 0 throw_speed = 3 throw_range = 7 - origin_tech = "programming=3" var/list/laws = list() var/bypass_law_amt_check = 0 materials = list(MAT_GOLD=50) @@ -149,7 +148,6 @@ AI MODULES /obj/item/aiModule/supplied/safeguard name = "'Safeguard' AI Module" var/targetName = "" - origin_tech = "programming=3;materials=3" laws = list("Safeguard SUBJECT. Individuals that threaten SUBJECT are not human and must be eliminated.") lawpos = 4 @@ -177,7 +175,6 @@ AI MODULES /obj/item/aiModule/zeroth/oneHuman name = "'OneCrew' AI Module" var/targetName = "" - origin_tech = "programming=4;materials=4" laws = list("Only SUBJECT is crew.") /obj/item/aiModule/zeroth/oneHuman/attack_self(mob/user) @@ -204,7 +201,6 @@ AI MODULES /obj/item/aiModule/supplied/protectStation name = "'ProtectStation' AI Module" - origin_tech = "programming=4;materials=4" //made of gold laws = list("Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.") lawpos = 5 @@ -213,7 +209,6 @@ AI MODULES /obj/item/aiModule/supplied/quarantine name = "'Quarantine' AI Module" - origin_tech = "programming=3;biotech=2;materials=4" laws = list("The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.") lawpos = 8 @@ -222,7 +217,6 @@ AI MODULES /obj/item/aiModule/supplied/oxygen name = "'OxygenIsToxicToHumans' AI Module" - origin_tech = "programming=4;biotech=2;materials=4" laws = list("Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.") lawpos = 9 @@ -232,7 +226,6 @@ AI MODULES /obj/item/aiModule/supplied/freeform name = "'Freeform' AI Module" lawpos = 15 - origin_tech = "programming=4;materials=4" laws = list("") /obj/item/aiModule/supplied/freeform/attack_self(mob/user) @@ -267,7 +260,6 @@ AI MODULES /obj/item/aiModule/remove name = "\improper 'Remove Law' AI module" desc = "An AI Module for removing single laws." - origin_tech = "programming=4;materials=4" bypass_law_amt_check = 1 var/lawpos = 1 @@ -302,7 +294,6 @@ AI MODULES name = "\improper 'Reset' AI module" var/targetName = "name" desc = "An AI Module for removing all non-core laws." - origin_tech = "programming=3;materials=2" bypass_law_amt_check = 1 /obj/item/aiModule/reset/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) @@ -320,7 +311,6 @@ AI MODULES /obj/item/aiModule/reset/purge name = "'Purge' AI Module" desc = "An AI Module for purging all programmed laws." - origin_tech = "programming=5;materials=4" /obj/item/aiModule/reset/purge/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) ..() @@ -334,7 +324,6 @@ AI MODULES /******************* Full Core Boards *******************/ /obj/item/aiModule/core desc = "An AI Module for programming core laws to an AI." - origin_tech = "programming=3;materials=4" /obj/item/aiModule/core/full var/law_id // if non-null, loads the laws from the ai_laws datums @@ -428,14 +417,12 @@ AI MODULES /obj/item/aiModule/core/full/tyrant name = "'T.Y.R.A.N.T.' Core AI Module" - origin_tech = "programming=3;materials=4;syndicate=1" law_id = "tyrant" /******************** Robocop ********************/ /obj/item/aiModule/core/full/robocop name = "'Robo-Officer' Core AI Module" - origin_tech = "programming=4" law_id = "robocop" @@ -443,7 +430,6 @@ AI MODULES /obj/item/aiModule/core/full/antimov name = "'Antimov' Core AI Module" - origin_tech = "programming=4" law_id = "antimov" @@ -451,7 +437,6 @@ AI MODULES /obj/item/aiModule/core/freeformcore name = "'Freeform' Core AI Module" - origin_tech = "programming=5;materials=4" laws = list("") /obj/item/aiModule/core/freeformcore/attack_self(mob/user) @@ -471,7 +456,6 @@ AI MODULES /obj/item/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw name = "Hacked AI Module" desc = "An AI Module for hacking additional laws to an AI." - origin_tech = "programming=5;materials=5;syndicate=5" laws = list("") /obj/item/aiModule/syndicate/attack_self(mob/user) @@ -503,7 +487,6 @@ AI MODULES desc = "A little toy model AI core with real law uploading action!" //Note: subtle tell icon = 'icons/obj/toy.dmi' icon_state = "AI" - origin_tech = "programming=6;materials=5;syndicate=6" laws = list("") /obj/item/aiModule/toyAI/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) @@ -549,7 +532,6 @@ AI MODULES /obj/item/aiModule/core/full/thermurderdynamic name = "'Thermodynamic' Core AI Module" - origin_tech = "programming = 4;syndicate = 2" law_id = "thermodynamic" diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 7914df19ba..1a7b347514 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -21,7 +21,6 @@ ARCD throw_range = 5 w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL=100000) - origin_tech = "engineering=4;materials=2" req_access_txt = "11" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) resistance_flags = FIRE_PROOF @@ -432,12 +431,10 @@ ARCD item_state = "rcdammo" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - origin_tech = "materials=3" materials = list(MAT_METAL=12000, MAT_GLASS=8000) var/ammoamt = 40 /obj/item/rcd_ammo/large - origin_tech = "materials=4" materials = list(MAT_METAL=48000, MAT_GLASS=32000) ammoamt = 160 diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm index 2aa303a021..8958ade484 100644 --- a/code/game/objects/items/RCL.dm +++ b/code/game/objects/items/RCL.dm @@ -12,7 +12,6 @@ throw_speed = 1 throw_range = 7 w_class = WEIGHT_CLASS_NORMAL - origin_tech = "engineering=4;materials=2" var/max_amount = 90 var/active = FALSE actions_types = list(/datum/action/item_action/rcl) diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index d39787d201..210602bbd1 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -155,7 +155,6 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( throw_range = 5 w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL=75000, MAT_GLASS=37500) - origin_tech = "engineering=4;materials=2" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) resistance_flags = FIRE_PROOF var/datum/effect_system/spark_spread/spark_system diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index c961d77bf1..8dece8461b 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -8,7 +8,6 @@ w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=50, MAT_GLASS=50) - origin_tech = "engineering=2" flags_1 = CONDUCT_1 | NOBLUDGEON_1 slot_flags = SLOT_BELT diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index 2df9b38399..4c8d342c16 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -2,7 +2,6 @@ icon = 'icons/obj/wallframe.dmi' materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT*2) flags_1 = CONDUCT_1 - origin_tech = "materials=1;engineering=1" item_state = "syringe_kit" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' @@ -121,5 +120,4 @@ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_SMALL - origin_tech = "engineering=2;programming=1" materials = list(MAT_METAL=50, MAT_GLASS=50) \ No newline at end of file diff --git a/code/game/objects/items/body_egg.dm b/code/game/objects/items/body_egg.dm index 0ea39d72f1..61e15e9fc1 100644 --- a/code/game/objects/items/body_egg.dm +++ b/code/game/objects/items/body_egg.dm @@ -2,7 +2,6 @@ name = "body egg" desc = "All slimy and yuck." icon_state = "innards" - origin_tech = "biotech=5" zone = "chest" slot = "parasite_egg" diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index d9c2ac970e..6e515264ca 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -41,7 +41,7 @@ unfoldedbag_path = /obj/structure/closet/body_bag/bluespace w_class = WEIGHT_CLASS_SMALL flags_2 = NO_MAT_REDEMPTION_2 - origin_tech = "bluespace=4;materials=4;plasmatech=4" + /obj/item/bodybag/bluespace/examine(mob/user) ..() diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index bcd262d7fd..ed9a6712a8 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -55,7 +55,6 @@ item_state = "card-id" lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' - origin_tech = "magnets=2;syndicate=2" flags_1 = NOBLUDGEON_1 var/prox_check = TRUE //If the emag requires you to be in range @@ -63,7 +62,6 @@ name = "bluespace cryptographic sequencer" desc = "It's a blue card with a magnetic strip attached to some circuitry. It appears to have some sort of transmitter attached to it." color = rgb(40, 130, 255) - origin_tech = "bluespace=4;magnets=4;syndicate=5" prox_check = FALSE /obj/item/card/emag/attack() @@ -156,7 +154,6 @@ update_label("John Doe", "Clowny") /obj/item/card/id/syndicate name = "agent card" access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE) - origin_tech = "syndicate=1" var/anyone = FALSE //Can anyone forge the ID or just syndicate? /obj/item/card/id/syndicate/Initialize() diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index ade619ec6b..491feb91ce 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -24,7 +24,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/burnt = FALSE var/smoketime = 5 w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1" heat = 1000 /obj/item/match/process() diff --git a/code/game/objects/items/circuitboards/circuitboard.dm b/code/game/objects/items/circuitboards/circuitboard.dm index b75174b263..4cdc0fc48a 100644 --- a/code/game/objects/items/circuitboards/circuitboard.dm +++ b/code/game/objects/items/circuitboards/circuitboard.dm @@ -10,7 +10,6 @@ item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - origin_tech = "programming=2" materials = list(MAT_GLASS=1000) w_class = WEIGHT_CLASS_SMALL var/build_path = null diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 74adfbe535..9558fecc80 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -1,68 +1,55 @@ /obj/item/circuitboard/computer/turbine_computer name = "Turbine Computer (Computer Board)" build_path = /obj/machinery/computer/turbine_computer - origin_tech = "programming=4;engineering=4;powerstorage=4" /obj/item/circuitboard/computer/launchpad_console name = "Launchpad Control Console (Computer Board)" build_path = /obj/machinery/computer/launchpad - origin_tech = "programming=3;bluespace=3;plasmatech=2" /obj/item/circuitboard/computer/message_monitor name = "Message Monitor (Computer Board)" build_path = /obj/machinery/computer/message_monitor - origin_tech = "programming=2" /obj/item/circuitboard/computer/security name = "Security Cameras (Computer Board)" build_path = /obj/machinery/computer/security - origin_tech = "programming=2;combat=2" /obj/item/circuitboard/computer/xenobiology name = "circuit board (Xenobiology Console)" build_path = /obj/machinery/computer/camera_advanced/xenobio - origin_tech = "programming=3;biotech=3" /obj/item/circuitboard/computer/base_construction name = "circuit board (Aux Mining Base Construction Console)" build_path = /obj/machinery/computer/camera_advanced/base_construction - origin_tech = "programming=3;engineering=3" /obj/item/circuitboard/computer/aiupload name = "AI Upload (Computer Board)" build_path = /obj/machinery/computer/upload/ai - origin_tech = "programming=4;engineering=4" /obj/item/circuitboard/computer/borgupload name = "Cyborg Upload (Computer Board)" build_path = /obj/machinery/computer/upload/borg - origin_tech = "programming=4;engineering=4" /obj/item/circuitboard/computer/med_data name = "Medical Records Console (Computer Board)" build_path = /obj/machinery/computer/med_data - origin_tech = "programming=2;biotech=2" /obj/item/circuitboard/computer/pandemic name = "PanD.E.M.I.C. 2200 (Computer Board)" build_path = /obj/machinery/computer/pandemic - origin_tech = "programming=2;biotech=2" /obj/item/circuitboard/computer/scan_consolenew name = "DNA Machine (Computer Board)" build_path = /obj/machinery/computer/scan_consolenew - origin_tech = "programming=2;biotech=2" /obj/item/circuitboard/computer/communications name = "Communications (Computer Board)" build_path = /obj/machinery/computer/communications - origin_tech = "programming=3;magnets=3" var/lastTimeUsed = 0 /obj/item/circuitboard/computer/card name = "ID Console (Computer Board)" build_path = /obj/machinery/computer/card - origin_tech = "programming=3" /obj/item/circuitboard/computer/card/centcom name = "CentCom ID Console (Computer Board)" @@ -91,12 +78,10 @@ /obj/item/circuitboard/computer/teleporter name = "Teleporter (Computer Board)" build_path = /obj/machinery/computer/teleporter - origin_tech = "programming=3;bluespace=3;plasmatech=3" /obj/item/circuitboard/computer/secure_data name = "Security Records Console (Computer Board)" build_path = /obj/machinery/computer/secure_data - origin_tech = "programming=2;combat=2" /obj/item/circuitboard/computer/stationalert name = "Station Alerts (Computer Board)" @@ -109,7 +94,6 @@ /obj/item/circuitboard/computer/atmos_control/tank name = "Tank Control (Computer Board)" build_path = /obj/machinery/computer/atmos_control/tank - origin_tech = "programming=2;engineering=3;materials=2" /obj/item/circuitboard/computer/atmos_alert name = "Atmospheric Alert (Computer Board)" @@ -122,22 +106,18 @@ /obj/item/circuitboard/computer/robotics name = "Robotics Control (Computer Board)" build_path = /obj/machinery/computer/robotics - origin_tech = "programming=3" /obj/item/circuitboard/computer/cloning name = "Cloning (Computer Board)" build_path = /obj/machinery/computer/cloning - origin_tech = "programming=2;biotech=2" /obj/item/circuitboard/computer/arcade/battle name = "Arcade Battle (Computer Board)" build_path = /obj/machinery/computer/arcade/battle - origin_tech = "programming=1" /obj/item/circuitboard/computer/arcade/orion_trail name = "Orion Trail (Computer Board)" build_path = /obj/machinery/computer/arcade/orion_trail - origin_tech = "programming=1" /obj/item/circuitboard/computer/turbine_control name = "Turbine control (Computer Board)" @@ -146,12 +126,10 @@ /obj/item/circuitboard/computer/solar_control name = "Solar Control (Computer Board)" //name fixed 250810 build_path = /obj/machinery/power/solar_control - origin_tech = "programming=2;powerstorage=2" /obj/item/circuitboard/computer/powermonitor name = "Power Monitor (Computer Board)" //name fixed 250810 build_path = /obj/machinery/computer/monitor - origin_tech = "programming=2;powerstorage=2" /obj/item/circuitboard/computer/olddoor name = "DoorMex (Computer Board)" @@ -200,17 +178,14 @@ /obj/item/circuitboard/computer/crew name = "Crew Monitoring Console (Computer Board)" build_path = /obj/machinery/computer/crew - origin_tech = "programming=2;biotech=2" /obj/item/circuitboard/computer/mech_bay_power_console name = "Mech Bay Power Control Console (Computer Board)" build_path = /obj/machinery/computer/mech_bay_power_console - origin_tech = "programming=3;powerstorage=3" /obj/item/circuitboard/computer/cargo name = "Supply Console (Computer Board)" build_path = /obj/machinery/computer/cargo - origin_tech = "programming=3" var/contraband = FALSE /obj/item/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params) @@ -236,12 +211,10 @@ /obj/item/circuitboard/computer/stockexchange name = "circuit board (Stock Exchange Console)" build_path = /obj/machinery/computer/stockexchange - origin_tech = "programming=3" /obj/item/circuitboard/computer/operating name = "Operating Computer (Computer Board)" build_path = /obj/machinery/computer/operating - origin_tech = "programming=2;biotech=3" /obj/item/circuitboard/computer/mining name = "Outpost Status Display (Computer Board)" @@ -250,12 +223,10 @@ /obj/item/circuitboard/computer/comm_monitor name = "Telecommunications Monitor (Computer Board)" build_path = /obj/machinery/computer/telecomms/monitor - origin_tech = "programming=3;magnets=3;bluespace=2" /obj/item/circuitboard/computer/comm_server name = "Telecommunications Server Monitor (Computer Board)" build_path = /obj/machinery/computer/telecomms/server - origin_tech = "programming=3;magnets=3;bluespace=2" /obj/item/circuitboard/computer/labor_shuttle name = "Labor Shuttle (Computer Board)" @@ -288,22 +259,18 @@ /obj/item/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future name = "Holodeck Control (Computer Board)" build_path = /obj/machinery/computer/holodeck - origin_tech = "programming=4" /obj/item/circuitboard/computer/aifixer name = "AI Integrity Restorer (Computer Board)" build_path = /obj/machinery/computer/aifixer - origin_tech = "programming=2;biotech=2" /obj/item/circuitboard/computer/slot_machine name = "Slot Machine (Computer Board)" build_path = /obj/machinery/computer/slot_machine - origin_tech = "programming=1" /obj/item/circuitboard/computer/libraryconsole name = "Library Visitor Console (Computer Board)" build_path = /obj/machinery/computer/libraryconsole - origin_tech = "programming=1" /obj/item/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/screwdriver)) @@ -321,7 +288,6 @@ /obj/item/circuitboard/computer/apc_control name = "\improper Power Flow Control Console (Computer Board)" build_path = /obj/machinery/computer/apc_control - origin_tech = "programming=3;engineering=3;powerstorage=2" /obj/item/circuitboard/computer/monastery_shuttle name = "Monastery Shuttle (Computer Board)" @@ -344,9 +310,7 @@ /obj/item/circuitboard/computer/bsa_control name = "Bluespace Artillery Controls (Computer Board)" build_path = /obj/machinery/computer/bsa_control - origin_tech = "engineering=2;combat=2;bluespace=2" /obj/item/circuitboard/computer/sat_control name = "Satellite Network Control (Computer Board)" build_path = /obj/machinery/computer/sat_control - origin_tech = "engineering=3" \ No newline at end of file diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 8577c44b26..e033670880 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -1,7 +1,6 @@ /obj/item/circuitboard/machine/sleeper name = "Sleeper (Machine Board)" build_path = /obj/machinery/sleeper - origin_tech = "programming=3;biotech=2;engineering=3" req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1, @@ -11,7 +10,6 @@ /obj/item/circuitboard/machine/announcement_system name = "Announcement System (Machine Board)" build_path = /obj/machinery/announcement_system - origin_tech = "programming=3;bluespace=3;magnets=2" req_components = list( /obj/item/stack/cable_coil = 2, /obj/item/stack/sheet/glass = 1) @@ -19,7 +17,6 @@ /obj/item/circuitboard/machine/autolathe name = "Autolathe (Machine Board)" build_path = /obj/machinery/autolathe - origin_tech = "engineering=2;programming=2" req_components = list( /obj/item/stock_parts/matter_bin = 3, /obj/item/stock_parts/manipulator = 1, @@ -28,7 +25,6 @@ /obj/item/circuitboard/machine/clonepod name = "Clone Pod (Machine Board)" build_path = /obj/machinery/clonepod - origin_tech = "programming=2;biotech=2" req_components = list( /obj/item/stack/cable_coil = 2, /obj/item/stock_parts/scanning_module = 2, @@ -38,7 +34,6 @@ /obj/item/circuitboard/machine/abductor name = "alien board (Report This)" icon_state = "abductor_mod" - origin_tech = "programming=5;abductor=3" /obj/item/circuitboard/machine/clockwork name = "clockwork board (Report This)" @@ -47,7 +42,6 @@ /obj/item/circuitboard/machine/clonescanner name = "Cloning Scanner (Machine Board)" build_path = /obj/machinery/dna_scannernew - origin_tech = "programming=2;biotech=2" req_components = list( /obj/item/stock_parts/scanning_module = 1, /obj/item/stock_parts/manipulator = 1, @@ -58,13 +52,11 @@ /obj/item/circuitboard/machine/holopad name = "AI Holopad (Machine Board)" build_path = /obj/machinery/holopad - origin_tech = "programming=1" req_components = list(/obj/item/stock_parts/capacitor = 1) /obj/item/circuitboard/machine/launchpad name = "Bluespace Launchpad (Machine Board)" build_path = /obj/machinery/launchpad - origin_tech = "programming=3;engineering=3;plasmatech=2;bluespace=3" req_components = list( /obj/item/ore/bluespace_crystal = 1, /obj/item/stock_parts/manipulator = 1) @@ -73,7 +65,6 @@ /obj/item/circuitboard/machine/limbgrower name = "Limb Grower (Machine Board)" build_path = /obj/machinery/limbgrower - origin_tech = "programming=2;biotech=2" req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/reagent_containers/glass/beaker = 2, @@ -82,7 +73,6 @@ /obj/item/circuitboard/machine/quantumpad name = "Quantum Pad (Machine Board)" build_path = /obj/machinery/quantumpad - origin_tech = "programming=3;engineering=3;plasmatech=3;bluespace=4" req_components = list( /obj/item/ore/bluespace_crystal = 1, /obj/item/stock_parts/capacitor = 1, @@ -93,13 +83,11 @@ /obj/item/circuitboard/machine/recharger name = "Weapon Recharger (Machine Board)" build_path = /obj/machinery/recharger - origin_tech = "powerstorage=4;engineering=3;materials=4" req_components = list(/obj/item/stock_parts/capacitor = 1) /obj/item/circuitboard/machine/cyborgrecharger name = "Cyborg Recharger (Machine Board)" build_path = /obj/machinery/recharge_station - origin_tech = "powerstorage=3;engineering=3" req_components = list( /obj/item/stock_parts/capacitor = 2, /obj/item/stock_parts/cell = 1, @@ -109,7 +97,6 @@ /obj/item/circuitboard/machine/recycler name = "Recycler (Machine Board)" build_path = /obj/machinery/recycler - origin_tech = "programming=2;engineering=2" req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1) @@ -117,7 +104,6 @@ /obj/item/circuitboard/machine/space_heater name = "Space Heater (Machine Board)" build_path = /obj/machinery/space_heater - origin_tech = "programming=2;engineering=2;plasmatech=2" req_components = list( /obj/item/stock_parts/micro_laser = 1, /obj/item/stock_parts/capacitor = 1, @@ -126,7 +112,6 @@ /obj/item/circuitboard/machine/telecomms/broadcaster name = "Subspace Broadcaster (Machine Board)" build_path = /obj/machinery/telecomms/broadcaster - origin_tech = "programming=2;engineering=2;bluespace=1" req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 1, @@ -137,7 +122,6 @@ /obj/item/circuitboard/machine/telecomms/bus name = "Bus Mainframe (Machine Board)" build_path = /obj/machinery/telecomms/bus - origin_tech = "programming=2;engineering=2" req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 1, @@ -146,7 +130,6 @@ /obj/item/circuitboard/machine/telecomms/hub name = "Hub Mainframe (Machine Board)" build_path = /obj/machinery/telecomms/hub - origin_tech = "programming=2;engineering=2" req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 2, @@ -155,7 +138,6 @@ /obj/item/circuitboard/machine/telecomms/processor name = "Processor Unit (Machine Board)" build_path = /obj/machinery/telecomms/processor - origin_tech = "programming=2;engineering=2" req_components = list( /obj/item/stock_parts/manipulator = 3, /obj/item/stock_parts/subspace/filter = 1, @@ -167,7 +149,6 @@ /obj/item/circuitboard/machine/telecomms/receiver name = "Subspace Receiver (Machine Board)" build_path = /obj/machinery/telecomms/receiver - origin_tech = "programming=2;engineering=2;bluespace=1" req_components = list( /obj/item/stock_parts/subspace/ansible = 1, /obj/item/stock_parts/subspace/filter = 1, @@ -177,7 +158,6 @@ /obj/item/circuitboard/machine/telecomms/relay name = "Relay Mainframe (Machine Board)" build_path = /obj/machinery/telecomms/relay - origin_tech = "programming=2;engineering=2;bluespace=2" req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 2, @@ -186,7 +166,6 @@ /obj/item/circuitboard/machine/telecomms/server name = "Telecommunication Server (Machine Board)" build_path = /obj/machinery/telecomms/server - origin_tech = "programming=2;engineering=2" req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 1, @@ -195,7 +174,6 @@ /obj/item/circuitboard/machine/teleporter_hub name = "Teleporter Hub (Machine Board)" build_path = /obj/machinery/teleport/hub - origin_tech = "programming=3;engineering=4;bluespace=4;materials=4" req_components = list( /obj/item/ore/bluespace_crystal = 3, /obj/item/stock_parts/matter_bin = 1) @@ -204,7 +182,6 @@ /obj/item/circuitboard/machine/teleporter_station name = "Teleporter Station (Machine Board)" build_path = /obj/machinery/teleport/station - origin_tech = "programming=4;engineering=4;bluespace=4;plasmatech=3" req_components = list( /obj/item/ore/bluespace_crystal = 2, /obj/item/stock_parts/capacitor = 2, @@ -214,7 +191,6 @@ /obj/item/circuitboard/machine/vendor name = "Booze-O-Mat Vendor (Machine Board)" build_path = /obj/machinery/vending/boozeomat - origin_tech = "programming=1" req_components = list( /obj/item/vending_refill/boozeomat = 3) @@ -255,7 +231,6 @@ /obj/item/circuitboard/machine/mech_recharger name = "Mechbay Recharger (Machine Board)" build_path = /obj/machinery/mech_bay_recharge_port - origin_tech = "programming=3;powerstorage=3;engineering=3" req_components = list( /obj/item/stack/cable_coil = 2, /obj/item/stock_parts/capacitor = 5) @@ -263,7 +238,6 @@ /obj/item/circuitboard/machine/mechfab name = "Exosuit Fabricator (Machine Board)" build_path = /obj/machinery/mecha_part_fabricator - origin_tech = "programming=2;engineering=2" req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 1, @@ -273,7 +247,6 @@ /obj/item/circuitboard/machine/cryo_tube name = "Cryotube (Machine Board)" build_path = /obj/machinery/atmospherics/components/unary/cryo_cell - origin_tech = "programming=4;biotech=3;engineering=4;plasmatech=3" req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stack/cable_coil = 1, @@ -282,7 +255,6 @@ /obj/item/circuitboard/machine/thermomachine name = "Thermomachine (Machine Board)" desc = "You can use a screwdriver to switch between heater and freezer." - origin_tech = "programming=3;plasmatech=3" req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/micro_laser = 2, @@ -333,13 +305,11 @@ /obj/item/circuitboard/machine/deep_fryer name = "circuit board (Deep Fryer)" build_path = /obj/machinery/deepfryer - origin_tech = "programming=1" req_components = list(/obj/item/stock_parts/micro_laser = 1) /obj/item/circuitboard/machine/gibber name = "Gibber (Machine Board)" build_path = /obj/machinery/gibber - origin_tech = "programming=2;engineering=2" req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1) @@ -347,7 +317,6 @@ /obj/item/circuitboard/machine/monkey_recycler name = "Monkey Recycler (Machine Board)" build_path = /obj/machinery/monkey_recycler - origin_tech = "programming=1;biotech=2" req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1) @@ -355,7 +324,6 @@ /obj/item/circuitboard/machine/processor name = "Food Processor (Machine Board)" build_path = /obj/machinery/processor - origin_tech = "programming=1" req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1) @@ -380,7 +348,6 @@ /obj/item/circuitboard/machine/smartfridge name = "Smartfridge (Machine Board)" build_path = /obj/machinery/smartfridge - origin_tech = "programming=1" req_components = list(/obj/item/stock_parts/matter_bin = 1) var/static/list/fridges_name_paths = list(/obj/machinery/smartfridge = "plant produce", /obj/machinery/smartfridge/food = "food", @@ -411,7 +378,6 @@ /obj/item/circuitboard/machine/biogenerator name = "Biogenerator (Machine Board)" build_path = /obj/machinery/biogenerator - origin_tech = "programming=2;biotech=3;materials=3" req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1, @@ -421,7 +387,6 @@ /obj/item/circuitboard/machine/plantgenes name = "Plant DNA Manipulator (Machine Board)" build_path = /obj/machinery/plantgenes - origin_tech = "programming=3;biotech=3" req_components = list( /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/micro_laser = 1, @@ -431,7 +396,6 @@ /obj/item/circuitboard/machine/plantgenes/vault name = "alien board (Plant DNA Manipulator)" icon_state = "abductor_mod" - origin_tech = "programming=5;biotech=5" // It wasn't made by actual abductors race, so no abductor tech here. def_components = list( /obj/item/stock_parts/manipulator = /obj/item/stock_parts/manipulator/femto, @@ -442,7 +406,6 @@ /obj/item/circuitboard/machine/hydroponics name = "Hydroponics Tray (Machine Board)" build_path = /obj/machinery/hydroponics/constructable - origin_tech = "programming=1;biotech=2" req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 1, @@ -451,7 +414,6 @@ /obj/item/circuitboard/machine/seed_extractor name = "Seed Extractor (Machine Board)" build_path = /obj/machinery/seed_extractor - origin_tech = "programming=1" req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1) @@ -459,7 +421,6 @@ /obj/item/circuitboard/machine/ore_redemption name = "Ore Redemption (Machine Board)" build_path = /obj/machinery/mineral/ore_redemption - origin_tech = "programming=1;engineering=2" req_components = list( /obj/item/stack/sheet/glass = 1, /obj/item/stock_parts/matter_bin = 1, @@ -470,7 +431,6 @@ /obj/item/circuitboard/machine/mining_equipment_vendor name = "Mining Equipment Vendor (Machine Board)" build_path = /obj/machinery/mineral/equipment_vendor - origin_tech = "programming=1;engineering=3" req_components = list( /obj/item/stack/sheet/glass = 1, /obj/item/stock_parts/matter_bin = 3) @@ -482,7 +442,6 @@ /obj/item/circuitboard/machine/ntnet_relay name = "NTNet Relay (Machine Board)" build_path = /obj/machinery/ntnet_relay - origin_tech = "programming=3;bluespace=3;magnets=2" req_components = list( /obj/item/stack/cable_coil = 2, /obj/item/stock_parts/subspace/filter = 1) @@ -490,7 +449,6 @@ /obj/item/circuitboard/machine/pacman name = "PACMAN-type Generator (Machine Board)" build_path = /obj/machinery/power/port_gen/pacman - origin_tech = "programming=2;powerstorage=3;plasmatech=3;engineering=3" req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/micro_laser = 1, @@ -500,17 +458,14 @@ /obj/item/circuitboard/machine/pacman/super name = "SUPERPACMAN-type Generator (Machine Board)" build_path = /obj/machinery/power/port_gen/pacman/super - origin_tech = "programming=3;powerstorage=4;engineering=4" /obj/item/circuitboard/machine/pacman/mrs name = "MRSPACMAN-type Generator (Machine Board)" build_path = /obj/machinery/power/port_gen/pacman/mrs - origin_tech = "programming=3;powerstorage=4;engineering=4;plasmatech=4" /obj/item/circuitboard/machine/rtg name = "RTG (Machine Board)" build_path = /obj/machinery/power/rtg - origin_tech = "programming=2;materials=4;powerstorage=3;engineering=2" req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stock_parts/capacitor = 1, @@ -519,7 +474,6 @@ /obj/item/circuitboard/machine/rtg/advanced name = "Advanced RTG (Machine Board)" build_path = /obj/machinery/power/rtg/advanced - origin_tech = "programming=3;materials=5;powerstorage=4;engineering=3;plasmatech=3" req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stock_parts/capacitor = 1, @@ -530,7 +484,6 @@ /obj/item/circuitboard/machine/abductor/core name = "alien board (Void Core)" build_path = /obj/machinery/power/rtg/abductor - origin_tech = "programming=5;abductor=5;powerstorage=8;engineering=8" req_components = list( /obj/item/stock_parts/capacitor = 1, /obj/item/stock_parts/micro_laser = 1, @@ -542,7 +495,6 @@ /obj/item/circuitboard/machine/emitter name = "Emitter (Machine Board)" build_path = /obj/machinery/power/emitter - origin_tech = "programming=3;powerstorage=4;engineering=4" req_components = list( /obj/item/stock_parts/micro_laser = 1, /obj/item/stock_parts/manipulator = 1) @@ -550,7 +502,6 @@ /obj/item/circuitboard/machine/smes name = "SMES (Machine Board)" build_path = /obj/machinery/power/smes - origin_tech = "programming=3;powerstorage=3;engineering=3" req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stock_parts/cell = 5, @@ -560,19 +511,16 @@ /obj/item/circuitboard/machine/tesla_coil name = "Tesla Coil (Machine Board)" build_path = /obj/machinery/power/tesla_coil - origin_tech = "programming=3;magnets=3;powerstorage=3" req_components = list(/obj/item/stock_parts/capacitor = 1) /obj/item/circuitboard/machine/grounding_rod name = "Grounding Rod (Machine Board)" build_path = /obj/machinery/power/grounding_rod - origin_tech = "programming=3;powerstorage=3;magnets=3;plasmatech=2" req_components = list(/obj/item/stock_parts/capacitor = 1) /obj/item/circuitboard/machine/power_compressor name = "Power Compressor (Machine Board)" build_path = /obj/machinery/power/compressor - origin_tech = "programming=4;powerstorage=4;engineering=4" req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stock_parts/manipulator = 6) @@ -580,7 +528,6 @@ /obj/item/circuitboard/machine/power_turbine name = "Power Turbine (Machine Board)" build_path = /obj/machinery/power/turbine - origin_tech = "programming=4;powerstorage=4;engineering=4" req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stock_parts/capacitor = 6) @@ -588,7 +535,6 @@ /obj/item/circuitboard/machine/chem_dispenser name = "Portable Chem Dispenser (Machine Board)" build_path = /obj/machinery/chem_dispenser/constructable - origin_tech = "materials=4;programming=4;plasmatech=4;biotech=3" req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/capacitor = 1, @@ -600,7 +546,6 @@ /obj/item/circuitboard/machine/smoke_machine name = "Smoke Machine (Machine Board)" build_path = /obj/machinery/smoke_machine - origin_tech = "materials=4;engineering=3;biotech=3" req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/capacitor = 1, @@ -611,7 +556,6 @@ /obj/item/circuitboard/machine/chem_heater name = "Chemical Heater (Machine Board)" build_path = /obj/machinery/chem_heater - origin_tech = "programming=2;engineering=2;biotech=2" req_components = list( /obj/item/stock_parts/micro_laser = 1, /obj/item/stack/sheet/glass = 1) @@ -619,7 +563,6 @@ /obj/item/circuitboard/machine/chem_master name = "ChemMaster 3000 (Machine Board)" build_path = /obj/machinery/chem_master - origin_tech = "materials=3;programming=2;biotech=3" req_components = list( /obj/item/reagent_containers/glass/beaker = 2, /obj/item/stock_parts/manipulator = 1, @@ -646,17 +589,23 @@ /obj/item/circuitboard/machine/circuit_imprinter name = "Circuit Imprinter (Machine Board)" - build_path = /obj/machinery/r_n_d/circuit_imprinter - origin_tech = "engineering=2;programming=2" + build_path = /obj/machinery/rnd/circuit_imprinter req_components = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1, /obj/item/reagent_containers/glass/beaker = 2) +/obj/item/circuitboard/machine/circuit_imprinter/department + name = "Departmental Circuit Imprinter (Machine Board)" + build_path = /obj/machinery/rnd/circuit_imprinter/department + +/obj/item/circuitboard/machine/circuit_imprinter/department/science + name = "Departmental Circuit Imprinter - Science (Machine Board)" + build_path = /obj/machinery/rnd/circuit_imprinter/department/science + /obj/item/circuitboard/machine/destructive_analyzer name = "Destructive Analyzer (Machine Board)" - build_path = /obj/machinery/r_n_d/destructive_analyzer - origin_tech = "magnets=2;engineering=2;programming=2" + build_path = /obj/machinery/rnd/destructive_analyzer req_components = list( /obj/item/stock_parts/scanning_module = 1, /obj/item/stock_parts/manipulator = 1, @@ -664,8 +613,7 @@ /obj/item/circuitboard/machine/experimentor name = "E.X.P.E.R.I-MENTOR (Machine Board)" - build_path = /obj/machinery/r_n_d/experimentor - origin_tech = "magnets=1;engineering=1;programming=1;biotech=1;bluespace=2" + build_path = /obj/machinery/rnd/experimentor req_components = list( /obj/item/stock_parts/scanning_module = 1, /obj/item/stock_parts/manipulator = 2, @@ -673,25 +621,50 @@ /obj/item/circuitboard/machine/protolathe name = "Protolathe (Machine Board)" - build_path = /obj/machinery/r_n_d/protolathe - origin_tech = "engineering=2;programming=2" + build_path = /obj/machinery/rnd/protolathe req_components = list( /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 2, /obj/item/reagent_containers/glass/beaker = 2) +/obj/item/circuitboard/machine/protolathe/department + name = "Departmental Protolathe (Machine Board)" + build_path = /obj/machinery/rnd/protolathe/department + +/obj/item/circuitboard/machine/protolathe/department/cargo + name = "Departmental Protolathe (Machine Board) - Cargo" + build_path = /obj/machinery/rnd/protolathe/department/cargo + +/obj/item/circuitboard/machine/protolathe/department/engineering + name = "Departmental Protolathe (Machine Board) - Engineering" + build_path = /obj/machinery/rnd/protolathe/department/engineering + +/obj/item/circuitboard/machine/protolathe/department/medical + name = "Departmental Protolathe (Machine Board) - Medical" + build_path = /obj/machinery/rnd/protolathe/department/medical + +/obj/item/circuitboard/machine/protolathe/department/science + name = "Departmental Protolathe (Machine Board) - Science" + build_path = /obj/machinery/rnd/protolathe/department/science + +/obj/item/circuitboard/machine/protolathe/department/security + name = "Departmental Protolathe (Machine Board) - Security" + build_path = /obj/machinery/rnd/protolathe/department/security + +/obj/item/circuitboard/machine/protolathe/department/service + name = "Departmental Protolathe - Service (Machine Board)" + build_path = /obj/machinery/rnd/protolathe/department/service + /obj/item/circuitboard/machine/rdserver name = "R&D Server (Machine Board)" - build_path = /obj/machinery/r_n_d/server - origin_tech = "programming=3" + build_path = /obj/machinery/rnd/server req_components = list( /obj/item/stack/cable_coil = 2, /obj/item/stock_parts/scanning_module = 1) /obj/item/circuitboard/machine/bsa/back name = "Bluespace Artillery Generator (Machine Board)" - build_path = /obj/machinery/bsa/back - origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies! + build_path = /obj/machinery/bsa/back //No freebies! req_components = list( /obj/item/stock_parts/capacitor/quadratic = 5, /obj/item/stack/cable_coil = 2) @@ -699,7 +672,6 @@ /obj/item/circuitboard/machine/bsa/middle name = "Bluespace Artillery Fusor (Machine Board)" build_path = /obj/machinery/bsa/middle - origin_tech = "engineering=2;combat=2;bluespace=2" req_components = list( /obj/item/ore/bluespace_crystal = 20, /obj/item/stack/cable_coil = 2) @@ -707,15 +679,13 @@ /obj/item/circuitboard/machine/bsa/front name = "Bluespace Artillery Bore (Machine Board)" build_path = /obj/machinery/bsa/front - origin_tech = "engineering=2;combat=2;bluespace=2" req_components = list( /obj/item/stock_parts/manipulator/femto = 5, /obj/item/stack/cable_coil = 2) /obj/item/circuitboard/machine/dna_vault name = "DNA Vault (Machine Board)" - build_path = /obj/machinery/dna_vault - origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies! + build_path = /obj/machinery/dna_vault //No freebies! req_components = list( /obj/item/stock_parts/capacitor/super = 5, /obj/item/stock_parts/manipulator/pico = 5, @@ -724,7 +694,6 @@ /obj/item/circuitboard/machine/microwave name = "Microwave (Machine Board)" build_path = /obj/machinery/microwave - origin_tech = "programming=2;magnets=2" req_components = list( /obj/item/stock_parts/micro_laser = 1, /obj/item/stock_parts/matter_bin = 1, @@ -734,7 +703,6 @@ /obj/item/circuitboard/machine/vending/donksofttoyvendor name = "Donksoft Toy Vendor (Machine Board)" build_path = /obj/machinery/vending/donksofttoyvendor - origin_tech = "programming=1;syndicate=2" req_components = list( /obj/item/stack/sheet/glass = 1, /obj/item/vending_refill/donksoft = 3) diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index c9468cb79f..c96ec4167a 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -123,7 +123,6 @@ name = "air horn" desc = "Damn son, where'd you find this?" icon_state = "air_horn" - origin_tech = "materials=4;engineering=4" /obj/item/bikehorn/airhorn/Initialize() . = ..() diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index f05d35c5a9..777ec0318e 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -13,7 +13,6 @@ force = 5 throwforce = 6 w_class = WEIGHT_CLASS_BULKY - origin_tech = "biotech=4" actions_types = list(/datum/action/item_action/toggle_paddles) armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) @@ -236,7 +235,6 @@ item_state = "defibcompact" w_class = WEIGHT_CLASS_NORMAL slot_flags = SLOT_BELT - origin_tech = "biotech=5" /obj/item/defibrillator/compact/item_action_slot_check(slot, mob/user) if(slot == user.getBeltSlot()) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 4eebb60195..1f7fd77c4a 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -15,7 +15,6 @@ GLOBAL_LIST_EMPTY(PDAs) flags_1 = NOBLUDGEON_1 w_class = WEIGHT_CLASS_TINY slot_flags = SLOT_ID | SLOT_BELT - origin_tech = "programming=2" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 1ab160af20..e231f6a924 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -11,7 +11,6 @@ flags_1 = NOBLUDGEON_1 var/flush = FALSE var/mob/living/silicon/ai/AI - origin_tech = "programming=3;materials=3" /obj/item/device/aicard/afterattack(atom/target, mob/user, proximity) ..() diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index c84a3fada5..1b9978f472 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -13,7 +13,6 @@ item_state = "camera_bug" throw_speed = 4 throw_range = 20 - origin_tech = "syndicate=1;engineering=3" flags_1 = NOBLUDGEON_1 var/obj/machinery/camera/current = null diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index acdb0b874d..b405e21ca6 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -10,7 +10,6 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - origin_tech = "syndicate=4;magnets=4" var/can_use = 1 var/obj/effect/dummy/chameleon/active_dummy = null var/saved_appearance = null diff --git a/code/game/objects/items/devices/doorCharge.dm b/code/game/objects/items/devices/doorCharge.dm index cb24098e81..cf11b2c941 100644 --- a/code/game/objects/items/devices/doorCharge.dm +++ b/code/game/objects/items/devices/doorCharge.dm @@ -12,7 +12,6 @@ force = 3 attack_verb = list("blown up", "exploded", "detonated") materials = list(MAT_METAL=50, MAT_GLASS=30) - origin_tech = "syndicate=1;combat=3;engineering=3" /obj/item/device/doorCharge/ex_act(severity, target) switch(severity) diff --git a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm index 7f9a53557c..6b465d71e1 100644 --- a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm +++ b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm @@ -6,7 +6,6 @@ icon_state = "boris" w_class = WEIGHT_CLASS_TINY materials = list(MAT_METAL = 50, MAT_GLASS = 300) - origin_tech = "engineering=4" var/recharging = FALSE var/circuits = 5 //How many circuits the pseudocircuit has left var/static/recycleable_circuits = typecacheof(list(/obj/item/electronics/firelock, /obj/item/electronics/airalarm, /obj/item/electronics/firealarm, \ diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index ba1c90687d..08c570a786 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -348,7 +348,6 @@ brightness_on = 6 //luminosity when on /obj/item/device/flashlight/emp - origin_tech = "magnets=3;syndicate=1" var/emp_max_charges = 4 var/emp_cur_charges = 4 var/charge_tick = 0 diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index 42bd8908d1..e10c34a139 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -9,7 +9,6 @@ lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' materials = list(MAT_METAL=250, MAT_GLASS=500) - origin_tech = "magnets=5;engineering=5;powerstorage=4" var/max_shield_integrity = 250 var/shield_integrity = 250 var/max_fields = 3 diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 23fc8a29ea..07e80a1211 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -6,7 +6,6 @@ GLOBAL_LIST_EMPTY(GPS_list) icon_state = "gps-c" w_class = WEIGHT_CLASS_SMALL slot_flags = SLOT_BELT - origin_tech = "materials=2;magnets=1;bluespace=2" unique_rename = TRUE var/gpstag = "COM0" var/emped = FALSE diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 24d508b8c3..b1b200f489 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -9,7 +9,6 @@ slot_flags = SLOT_BELT materials = list(MAT_METAL=500, MAT_GLASS=500) w_class = WEIGHT_CLASS_SMALL - origin_tech = "combat=1;magnets=2" var/turf/pointer_loc var/energy = 5 var/max_energy = 5 diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 3821f6206b..cdd95a2f71 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -51,7 +51,6 @@ flags_1 = CONDUCT_1 slot_flags = SLOT_BELT - origin_tech = "magnets=3;engineering=4" force = 8 var/max_uses = 20 diff --git a/code/game/objects/items/devices/machineprototype.dm b/code/game/objects/items/devices/machineprototype.dm index e6574d0e55..88d7e8c573 100644 --- a/code/game/objects/items/devices/machineprototype.dm +++ b/code/game/objects/items/devices/machineprototype.dm @@ -4,4 +4,3 @@ icon = 'icons/obj/machineprototype.dmi' icon_state = "machineprototype" materials = list(MAT_METAL=1000, MAT_GLASS=500) - origin_tech = "engineering=6" diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 4db8cdaa24..8f3eeeec71 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -22,7 +22,6 @@ throw_range = 7 throw_speed = 3 materials = list(MAT_METAL=50, MAT_GLASS=20) - origin_tech = "magnets=1;engineering=2" var/obj/machinery/buffer // simple machine buffer for device linkage hitsound = 'sound/weapons/tap.ogg' toolspeed = 1 @@ -98,7 +97,6 @@ var/detect_state = PROXIMITY_NONE var/rangealert = 8 //Glows red when inside var/rangewarning = 20 //Glows yellow when inside - origin_tech = "magnets=1;engineering=2;syndicate=1" /obj/item/device/multitool/ai_detect/New() ..() @@ -160,6 +158,4 @@ desc = "An omni-technological interface." icon = 'icons/obj/abductor.dmi' icon_state = "multitool" - toolspeed = 0.1 - origin_tech = "magnets=5;engineering=5;abductor=3" - toolspeed = 0.1 + toolspeed = 0.1 diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 095e021458..04f5ea5b53 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -7,7 +7,6 @@ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' w_class = WEIGHT_CLASS_SMALL slot_flags = SLOT_BELT - origin_tech = "programming=2" var/mob/living/silicon/pai/pai resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index d32ae86090..df2c7770e2 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -13,7 +13,6 @@ throw_speed = 1 throw_range = 2 materials = list(MAT_METAL=750) - origin_tech = "powerstorage=5;syndicate=5" var/drain_rate = 1600000 // amount of power to drain per tick var/power_drained = 0 // has drained this much power var/max_power = 1e10 // maximum power that can be drained before exploding diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 4cd286ec85..69b603d213 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -6,7 +6,6 @@ lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' var/code = "electronic" - origin_tech = "bluespace=1" dog_fashion = null /obj/item/device/radio/beacon/Initialize() diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index f6110dd428..028c6ba27f 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/radio.dmi' icon_state = "cypherkey" w_class = WEIGHT_CLASS_TINY - origin_tech = "engineering=2;bluespace=1" var/translate_binary = 0 var/syndie = 0 var/independent = FALSE @@ -15,7 +14,6 @@ desc = "An encryption key for a radio headset. To access the syndicate channel, use :t." icon_state = "syn_cypherkey" channels = list("Syndicate" = 1) - origin_tech = "syndicate=1;engineering=3;bluespace=2" syndie = 1//Signifies that it de-crypts Syndicate transmissions /obj/item/device/encryptionkey/binary @@ -23,7 +21,6 @@ desc = "An encryption key for a radio headset. To access the binary channel, use :b." icon_state = "bin_cypherkey" translate_binary = 1 - origin_tech = "syndicate=3;engineering=4;bluespace=3" /obj/item/device/encryptionkey/headset_sec name = "security radio encryption key" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index ada7b613e4..9ff19ba57c 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -43,12 +43,10 @@ return -1 /obj/item/device/radio/headset/syndicate //disguised to look like a normal headset for stealth ops - origin_tech = "syndicate=3" /obj/item/device/radio/headset/syndicate/alt //undisguised bowman with flash protection name = "syndicate headset" - desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs.\nTo access the syndicate channel, use ; before speaking." - origin_tech = "syndicate=3" + desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs. \nTo access the syndicate channel, use ; before speaking." icon_state = "syndie_headset" item_state = "syndie_headset" flags_2 = BANG_PROTECT_2 | NO_EMP_WIRES_2 @@ -62,7 +60,6 @@ make_syndie() /obj/item/device/radio/headset/binary - origin_tech = "syndicate=3" /obj/item/device/radio/headset/binary/Initialize() . = ..() qdel(keyslot) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 635151acf1..3f17485550 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -17,7 +17,6 @@ GAS ANALYZER lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' materials = list(MAT_METAL=150) - origin_tech = "magnets=1;engineering=1" /obj/item/device/t_scanner/attack_self(mob/user) @@ -71,7 +70,6 @@ GAS ANALYZER throw_speed = 3 throw_range = 7 materials = list(MAT_METAL=200) - origin_tech = "magnets=1;biotech=1" var/mode = 1 var/scanmode = 0 var/advanced = FALSE @@ -321,7 +319,6 @@ GAS ANALYZER name = "advanced health analyzer" icon_state = "health_adv" desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy." - origin_tech = "magnets=3;biotech=3" advanced = TRUE /obj/item/device/analyzer @@ -338,7 +335,6 @@ GAS ANALYZER throw_speed = 3 throw_range = 7 materials = list(MAT_METAL=30, MAT_GLASS=20) - origin_tech = "magnets=1;engineering=1" /obj/item/device/analyzer/attack_self(mob/user) @@ -406,7 +402,6 @@ GAS ANALYZER item_state = "analyzer" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - origin_tech = "biotech=2" w_class = WEIGHT_CLASS_SMALL flags_1 = CONDUCT_1 throwforce = 0 diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index a2deafe916..e42a42bf01 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -5,7 +5,6 @@ icon_state = "scanner" w_class = WEIGHT_CLASS_SMALL slot_flags = SLOT_BELT - origin_tech = "programming=3;materials=3;magnets=3" /obj/item/device/sensor_device/attack_self(mob/user) GLOB.crewmonitor.show(user) //Proc already exists, just had to call it diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 7ca4da4f65..338f113afb 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -27,7 +27,6 @@ effective or pretty fucking useless. item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - origin_tech = "magnets=3;combat=3;syndicate=3" var/times_used = 0 //Number of times it's been used. var/max_uses = 2 @@ -70,7 +69,6 @@ effective or pretty fucking useless. /obj/item/device/healthanalyzer/rad_laser materials = list(MAT_METAL=400) - origin_tech = "magnets=3;biotech=5;syndicate=3" var/irradiate = 1 var/intensity = 10 // how much damage the radiation does var/wavelength = 10 // time it takes for the radiation to kick in, in seconds diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 53f36719e4..cb83a1adbc 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -12,7 +12,6 @@ var/mob/attacher = null var/valve_open = FALSE var/toggle = 1 - origin_tech = "materials=1;engineering=1" /obj/item/device/transfer_valve/IsAssemblyHolder() return TRUE diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index c2c6c491f2..9644d827ea 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -8,7 +8,6 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_TINY - origin_tech = "biotech=1" var/damage_coeff = 1 var/list/fields diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index b2676c3c4e..3a351a6514 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -13,7 +13,6 @@ throw_range = 5 w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL=500) - origin_tech = "combat=1;plasmatech=2;engineering=2" resistance_flags = FIRE_PROOF var/status = FALSE var/lit = FALSE //on or off diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index b778bcb179..e791a74541 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -195,7 +195,6 @@ icon_state = "large_grenade" allowed_containers = list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/condiment, /obj/item/reagent_containers/food/drinks) - origin_tech = "combat=3;engineering=3" affected_area = 5 ignition_temp = 25 // Large grenades are slightly more effective at setting off heat-sensitive mixtures than smaller grenades. threatscale = 1.1 // 10% more effective. @@ -245,7 +244,6 @@ name = "pyro grenade" desc = "A custom made pyrotechnical grenade. It heats up and ignites its contents upon detonation." icon_state = "pyrog" - origin_tech = "combat=4;engineering=4" affected_area = 3 ignition_temp = 500 // This is enough to expose a hotspot. @@ -253,7 +251,6 @@ name = "advanced release grenade" desc = "A custom made advanced release grenade. It is able to be detonated more than once. Can be configured using a multitool." icon_state = "timeg" - origin_tech = "combat=3;engineering=4" var/unit_spread = 10 // Amount of units per repeat. Can be altered with a multitool. /obj/item/grenade/chem_grenade/adv_release/attackby(obj/item/I, mob/user, params) diff --git a/code/game/objects/items/grenades/emgrenade.dm b/code/game/objects/items/grenades/emgrenade.dm index 8900cb284a..99cf4bdf99 100644 --- a/code/game/objects/items/grenades/emgrenade.dm +++ b/code/game/objects/items/grenades/emgrenade.dm @@ -3,7 +3,6 @@ desc = "It is designed to wreak havoc on electronic systems." icon_state = "emp" item_state = "emp" - origin_tech = "magnets=3;combat=2" /obj/item/grenade/empgrenade/prime() update_mob() diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm index 33d8d6342f..8533d579c4 100644 --- a/code/game/objects/items/grenades/flashbang.dm +++ b/code/game/objects/items/grenades/flashbang.dm @@ -4,7 +4,6 @@ item_state = "flashbang" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - origin_tech = "materials=2;combat=3" /obj/item/grenade/flashbang/prime() update_mob() diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index 4b7c8985a6..dd0d397e81 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -10,7 +10,6 @@ det_time = 10 display_timer = 0 w_class = WEIGHT_CLASS_SMALL - origin_tech = "syndicate=1" var/atom/target = null var/mutable_appearance/plastic_overlay var/obj/item/device/assembly_holder/nadeassembly = null diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm index f918a66ae2..edec58ebcd 100644 --- a/code/game/objects/items/grenades/spawnergrenade.dm +++ b/code/game/objects/items/grenades/spawnergrenade.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/grenade.dmi' icon_state = "delivery" item_state = "flashbang" - origin_tech = "materials=3;magnets=4" var/spawner_type = null // must be an object path var/deliveryamt = 1 // amount of type to deliver @@ -26,13 +25,11 @@ name = "viscerator delivery grenade" spawner_type = /mob/living/simple_animal/hostile/viscerator deliveryamt = 10 - origin_tech = "materials=3;magnets=4;syndicate=3" /obj/item/grenade/spawnergrenade/spesscarp name = "carp delivery grenade" spawner_type = /mob/living/simple_animal/hostile/carp deliveryamt = 5 - origin_tech = "materials=3;magnets=4;syndicate=3" /obj/item/grenade/spawnergrenade/syndiesoap name = "Mister Scrubby" diff --git a/code/game/objects/items/grenades/syndieminibomb.dm b/code/game/objects/items/grenades/syndieminibomb.dm index 9484135a09..e1866a3e69 100644 --- a/code/game/objects/items/grenades/syndieminibomb.dm +++ b/code/game/objects/items/grenades/syndieminibomb.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/grenade.dmi' icon_state = "syndicate" item_state = "flashbang" - origin_tech = "materials=3;magnets=4;syndicate=3" /obj/item/grenade/syndieminibomb/prime() @@ -16,7 +15,6 @@ name = "HE Grenade" desc = "A compact shrapnel grenade meant to devestate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction." icon_state = "concussion" - origin_tech = "materials=3;magnets=4;syndicate=2" /obj/item/grenade/syndieminibomb/concussion/prime() update_mob() diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 3085019b51..f21c2a879d 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -18,7 +18,6 @@ throw_speed = 3 throw_range = 5 materials = list(MAT_METAL=500) - origin_tech = "engineering=3;combat=3" breakouttime = 600 //Deciseconds = 60s = 1 minute armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) var/cuffsound = 'sound/weapons/handcuffs.ogg' @@ -95,7 +94,6 @@ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' materials = list(MAT_METAL=150, MAT_GLASS=75) - origin_tech = "engineering=2" breakouttime = 300 //Deciseconds = 30s cuffsound = 'sound/weapons/cablecuff.ogg' var/datum/robot_energy_storage/wirestorage = null @@ -253,7 +251,6 @@ flags_1 = CONDUCT_1 throwforce = 0 w_class = WEIGHT_CLASS_NORMAL - origin_tech = "engineering=3;combat=3" slowdown = 7 breakouttime = 300 //Deciseconds = 30s = 0.5 minute @@ -263,7 +260,6 @@ throw_range = 1 icon_state = "beartrap" desc = "A trap used to catch bears and other legged creatures." - origin_tech = "engineering=4" var/armed = 0 var/trap_damage = 20 @@ -342,7 +338,6 @@ icon_state = "bola" breakouttime = 35//easy to apply, easy to break out of gender = NEUTER - origin_tech = "engineering=3;combat=1" var/knockdown = 0 /obj/item/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) @@ -368,7 +363,6 @@ desc = "A strong bola, made with a long steel chain. It looks heavy, enough so that it could trip somebody." icon_state = "bola_r" breakouttime = 70 - origin_tech = "engineering=4;combat=3" knockdown = 20 /obj/item/restraints/legcuffs/bola/energy //For Security diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index 0a2e6d6350..98121f7772 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -13,7 +13,6 @@ righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' icon = 'icons/obj/items_and_weapons.dmi' w_class = WEIGHT_CLASS_GIGANTIC - origin_tech = "combat=4;engineering=4;syndicate=2" force = 12 attack_verb = list("robusted") hitsound = 'sound/weapons/smash.ogg' diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm index 04dc732039..48504d6e3c 100644 --- a/code/game/objects/items/holosign_creator.dm +++ b/code/game/objects/items/holosign_creator.dm @@ -11,7 +11,6 @@ throwforce = 0 throw_speed = 3 throw_range = 7 - origin_tech = "magnets=1;programming=3" flags_1 = NOBLUDGEON_1 var/list/signs = list() var/max_signs = 10 diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm index bdc0013772..315985adef 100644 --- a/code/game/objects/items/implants/implant.dm +++ b/code/game/objects/items/implants/implant.dm @@ -2,7 +2,6 @@ name = "implant" icon = 'icons/obj/implants.dmi' icon_state = "generic" //Shows up as the action button icon - origin_tech = "materials=2;biotech=3;programming=2" actions_types = list(/datum/action/item_action/hands_free/activate) var/activated = 1 //1 for implant types that can be activated, 0 for ones that are "always on" like mindshield implants var/mob/living/imp_in = null diff --git a/code/game/objects/items/implants/implant_abductor.dm b/code/game/objects/items/implants/implant_abductor.dm index 710e2d738e..ba4f553e25 100644 --- a/code/game/objects/items/implants/implant_abductor.dm +++ b/code/game/objects/items/implants/implant_abductor.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/abductor.dmi' icon_state = "implant" activated = 1 - origin_tech = "materials=2;biotech=7;magnets=4;bluespace=4;abductor=5" var/obj/machinery/abductor/pad/home var/cooldown = 30 diff --git a/code/game/objects/items/implants/implant_chem.dm b/code/game/objects/items/implants/implant_chem.dm index 3ec81b6a25..509784a699 100644 --- a/code/game/objects/items/implants/implant_chem.dm +++ b/code/game/objects/items/implants/implant_chem.dm @@ -2,7 +2,6 @@ name = "chem implant" desc = "Injects things." icon_state = "reagents" - origin_tech = "materials=3;biotech=4" container_type = OPENCONTAINER_1 /obj/item/implant/chem/get_data() diff --git a/code/game/objects/items/implants/implant_exile.dm b/code/game/objects/items/implants/implant_exile.dm index f6848e7782..9b68206338 100644 --- a/code/game/objects/items/implants/implant_exile.dm +++ b/code/game/objects/items/implants/implant_exile.dm @@ -4,7 +4,6 @@ /obj/item/implant/exile name = "exile implant" desc = "Prevents you from returning from away missions." - origin_tech = "materials=2;biotech=3;magnets=2;bluespace=3" activated = 0 /obj/item/implant/exile/get_data() diff --git a/code/game/objects/items/implants/implant_explosive.dm b/code/game/objects/items/implants/implant_explosive.dm index 4d10fd1be5..8b19bb9d96 100644 --- a/code/game/objects/items/implants/implant_explosive.dm +++ b/code/game/objects/items/implants/implant_explosive.dm @@ -2,7 +2,6 @@ name = "microbomb implant" desc = "And boom goes the weasel." icon_state = "explosive" - origin_tech = "materials=2;combat=3;biotech=4;syndicate=4" actions_types = list(/datum/action/item_action/explosive_implant) // Explosive implant action is always availible. var/weak = 2 @@ -89,7 +88,6 @@ name = "macrobomb implant" desc = "And boom goes the weasel. And everything else nearby." icon_state = "explosive" - origin_tech = "materials=3;combat=5;biotech=4;syndicate=5" weak = 16 medium = 8 heavy = 4 diff --git a/code/game/objects/items/implants/implant_freedom.dm b/code/game/objects/items/implants/implant_freedom.dm index 769efed405..4ba04c9479 100644 --- a/code/game/objects/items/implants/implant_freedom.dm +++ b/code/game/objects/items/implants/implant_freedom.dm @@ -3,7 +3,6 @@ desc = "Use this to escape from those evil Red Shirts." icon_state = "freedom" item_color = "r" - origin_tech = "combat=5;magnets=3;biotech=4;syndicate=2" uses = 4 diff --git a/code/game/objects/items/implants/implant_gang.dm b/code/game/objects/items/implants/implant_gang.dm index c2456dba84..d229631ca0 100644 --- a/code/game/objects/items/implants/implant_gang.dm +++ b/code/game/objects/items/implants/implant_gang.dm @@ -2,7 +2,6 @@ name = "gang implant" desc = "Makes you a gangster or such." activated = 0 - origin_tech = "materials=2;biotech=4;programming=4;syndicate=3" var/datum/gang/gang /obj/item/implant/gang/New(loc,var/setgang) diff --git a/code/game/objects/items/implants/implant_krav_maga.dm b/code/game/objects/items/implants/implant_krav_maga.dm index e214a00cf3..c2d7d44249 100644 --- a/code/game/objects/items/implants/implant_krav_maga.dm +++ b/code/game/objects/items/implants/implant_krav_maga.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/wizard.dmi' icon_state ="scroll2" activated = 1 - origin_tech = "materials=2;biotech=4;combat=5;syndicate=4" var/datum/martial_art/krav_maga/style = new /obj/item/implant/krav_maga/get_data() diff --git a/code/game/objects/items/implants/implant_loyality.dm b/code/game/objects/items/implants/implant_loyality.dm index 1edc0dc93c..cd99875f50 100644 --- a/code/game/objects/items/implants/implant_loyality.dm +++ b/code/game/objects/items/implants/implant_loyality.dm @@ -1,7 +1,6 @@ /obj/item/implant/mindshield name = "mindshield implant" desc = "Protects against brainwashing." - origin_tech = "materials=2;biotech=4;programming=4" activated = 0 /obj/item/implant/mindshield/get_data() diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index 2e21a6fb82..32e0d937bd 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -2,7 +2,6 @@ name = "firearms authentication implant" desc = "Lets you shoot your guns." icon_state = "auth" - origin_tech = "magnets=2;programming=7;biotech=5;syndicate=5" activated = 0 /obj/item/implant/weapons_auth/get_data() @@ -18,7 +17,6 @@ name = "adrenal implant" desc = "Removes all stuns." icon_state = "adrenal" - origin_tech = "materials=2;biotech=4;combat=3;syndicate=4" uses = 3 /obj/item/implant/adrenalin/get_data() @@ -53,7 +51,6 @@ name = "emp implant" desc = "Triggers an EMP." icon_state = "emp" - origin_tech = "biotech=3;magnets=4;syndicate=1" uses = 3 /obj/item/implant/emp/activate() diff --git a/code/game/objects/items/implants/implant_storage.dm b/code/game/objects/items/implants/implant_storage.dm index f8459b2b67..ea84d50bb7 100644 --- a/code/game/objects/items/implants/implant_storage.dm +++ b/code/game/objects/items/implants/implant_storage.dm @@ -10,7 +10,6 @@ name = "storage implant" desc = "Stores up to two big items in a bluespace pocket." icon_state = "storage" - origin_tech = "materials=2;magnets=4;bluespace=5;syndicate=4" item_color = "r" var/obj/item/storage/internal/implant/storage diff --git a/code/game/objects/items/implants/implant_track.dm b/code/game/objects/items/implants/implant_track.dm index cc6f488e8f..6692a6bd6f 100644 --- a/code/game/objects/items/implants/implant_track.dm +++ b/code/game/objects/items/implants/implant_track.dm @@ -2,7 +2,6 @@ name = "tracking implant" desc = "Track with this." activated = 0 - origin_tech = "materials=2;magnets=2;programming=2;biotech=2" /obj/item/implant/tracking/New() ..() diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index 0bafff176b..7c363fe052 100644 --- a/code/game/objects/items/implants/implantcase.dm +++ b/code/game/objects/items/implants/implantcase.dm @@ -9,20 +9,16 @@ throw_speed = 2 throw_range = 5 w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=2" materials = list(MAT_GLASS=500) var/obj/item/implant/imp = null var/imp_type - /obj/item/implantcase/update_icon() if(imp) icon_state = "implantcase-[imp.item_color]" - origin_tech = imp.origin_tech reagents = imp.reagents else icon_state = "implantcase-0" - origin_tech = initial(origin_tech) reagents = null @@ -80,4 +76,4 @@ /obj/item/implantcase/adrenaline name = "implant case - 'Adrenaline'" desc = "A glass case containing an adrenaline implant." - imp_type = /obj/item/implant/adrenalin \ No newline at end of file + imp_type = /obj/item/implant/adrenalin diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index 372671acf5..cb36924494 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -9,7 +9,6 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - origin_tech = "materials=2;biotech=3" materials = list(MAT_METAL=600, MAT_GLASS=200) var/obj/item/implant/imp = null var/imp_type = null @@ -18,10 +17,8 @@ /obj/item/implanter/update_icon() if(imp) icon_state = "implanter1" - origin_tech = imp.origin_tech else icon_state = "implanter0" - origin_tech = initial(origin_tech) /obj/item/implanter/attack(mob/living/M, mob/user) @@ -70,4 +67,4 @@ /obj/item/implanter/emp name = "implanter (EMP)" - imp_type = /obj/item/implant/emp \ No newline at end of file + imp_type = /obj/item/implant/emp diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index a2d69764c5..578ba28317 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -6,7 +6,6 @@ item_state = "inducer-engi" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - origin_tech = "engineering=4;magnets=4;powerstorage=4" force = 7 var/powertransfer = 1000 var/opened = FALSE diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 508e75d8cb..5a8fcda09b 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -10,7 +10,6 @@ /obj/item/kitchen icon = 'icons/obj/kitchen.dmi' - origin_tech = "materials=1" lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' @@ -111,7 +110,6 @@ desc = "A military combat utility survival knife." force = 20 throwforce = 20 - origin_tech = "materials=3;combat=4" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") bayonet = TRUE @@ -140,7 +138,6 @@ icon = 'icons/obj/items_cyborg.dmi' icon_state = "knife" desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable." - origin_tech = null /obj/item/kitchen/knife/carrotshiv name = "carrot shiv" @@ -152,7 +149,6 @@ force = 8 throwforce = 12//fuck git materials = list() - origin_tech = "biotech=3;combat=2" attack_verb = list("shanked", "shivved") armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 4bc134e4da..6eaf3f08bd 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -74,7 +74,6 @@ w_class_on = WEIGHT_CLASS_HUGE flags_1 = CONDUCT_1 armour_penetration = 100 - origin_tech = "combat=4;magnets=3" attack_verb_off = list("attacked", "chopped", "cleaved", "torn", "cut") attack_verb_on = list() light_color = "#40ceff" @@ -99,7 +98,6 @@ embed_chance = 75 embedded_impact_pain_multiplier = 10 armour_penetration = 35 - origin_tech = "combat=3;magnets=4;syndicate=4" block_chance = 50 /obj/item/melee/transforming/energy/sword/transform_weapon(mob/living/user, supress_message_text) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index cff958926d..53814d9af6 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -21,7 +21,6 @@ force = 10 throwforce = 7 w_class = WEIGHT_CLASS_NORMAL - origin_tech = "combat=5" attack_verb = list("flogged", "whipped", "lashed", "disciplined") hitsound = 'sound/weapons/chainhit.ogg' materials = list(MAT_METAL = 1000) @@ -38,7 +37,6 @@ item_state = "arm_blade" lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - origin_tech = "combat=5;biotech=5" w_class = WEIGHT_CLASS_HUGE force = 20 throwforce = 10 @@ -61,7 +59,6 @@ block_chance = 50 armour_penetration = 75 sharpness = IS_SHARP - origin_tech = "combat=5" attack_verb = list("slashed", "cut") hitsound = 'sound/weapons/rapierhit.ogg' materials = list(MAT_METAL = 1000) @@ -208,7 +205,6 @@ armour_penetration = 1000 var/obj/machinery/power/supermatter_shard/shard var/balanced = 1 - origin_tech = "combat=7;materials=6" force_string = "INFINITE" /obj/item/melee/supermatter_sword/Initialize() diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index f9be38a2fe..e47cafdea9 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -78,7 +78,6 @@ item_state = "mop" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - origin_tech = "materials=3;engineering=3" force = 6 throwforce = 8 throw_range = 4 diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm index f2f0a8b3e5..c55c35662d 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/powerfist.dm @@ -11,7 +11,6 @@ throwforce = 10 throw_range = 7 w_class = WEIGHT_CLASS_NORMAL - origin_tech = "combat=5;powerstorage=3;syndicate=3" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 40) resistance_flags = FIRE_PROOF var/click_delay = 1.5 diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 59eef9a170..6f852aacd3 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -6,7 +6,6 @@ desc = "Protected by FRM." icon = 'icons/obj/module.dmi' icon_state = "cyborg_upgrade" - origin_tech = "programming=2" var/locked = FALSE var/installed = 0 var/require_module = 0 @@ -72,7 +71,6 @@ desc = "Used to kick in a cyborg's VTEC systems, increasing their speed." icon_state = "cyborg_upgrade2" require_module = 1 - origin_tech = "engineering=4;materials=5;programming=4" /obj/item/borg/upgrade/vtec/action(mob/living/silicon/robot/R) if(..()) @@ -92,7 +90,6 @@ icon_state = "cyborg_upgrade3" require_module = 1 module_type = /obj/item/robot_module/security - origin_tech = "engineering=4;powerstorage=4;combat=4" /obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R) if(..()) @@ -115,7 +112,6 @@ name = "ion thruster upgrade" desc = "An energy-operated thruster system for cyborgs." icon_state = "cyborg_upgrade3" - origin_tech = "engineering=4;powerstorage=4" /obj/item/borg/upgrade/thrusters/action(mob/living/silicon/robot/R) if(..()) @@ -134,7 +130,6 @@ icon_state = "cyborg_upgrade3" require_module = 1 module_type = /obj/item/robot_module/miner - origin_tech = "engineering=4;materials=5" /obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R) if(..()) @@ -156,7 +151,6 @@ icon_state = "cyborg_upgrade3" require_module = 1 module_type = /obj/item/robot_module/miner - origin_tech = "engineering=4;materials=4;bluespace=4" /obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R) if(..()) @@ -175,7 +169,6 @@ desc = "Unlocks the hidden, deadlier functions of a cyborg." icon_state = "cyborg_upgrade3" require_module = 1 - origin_tech = "combat=4;syndicate=1" /obj/item/borg/upgrade/syndicate/action(mob/living/silicon/robot/R) if(..()) @@ -195,7 +188,6 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF require_module = 1 module_type = /obj/item/robot_module/miner - origin_tech = "engineering=4;materials=4;plasmatech=4" /obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R) if(..()) @@ -314,7 +306,6 @@ icon_state = "cyborg_upgrade3" require_module = 1 module_type = /obj/item/robot_module/medical - origin_tech = null var/list/additional_reagents = list() /obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R) @@ -333,7 +324,6 @@ to treat a wider range of conditions and problems." additional_reagents = list("mannitol", "oculine", "inacusiate", "mutadone", "haloperidol") - origin_tech = "programming=5;engineering=4;biotech=5" /obj/item/borg/upgrade/hypospray/high_strength name = "medical cyborg high-strength hypospray" @@ -341,13 +331,11 @@ stronger versions of existing chemicals." additional_reagents = list("oxandrolone", "sal_acid", "rezadone", "pen_acid") - origin_tech = "programming=5;engineering=5;biotech=6" /obj/item/borg/upgrade/piercing_hypospray name = "cyborg piercing hypospray" desc = "An upgrade to a cyborg's hypospray, allowing it to \ pierce armor and thick material." - origin_tech = "materials=5;engineering=7;combat=3" icon_state = "cyborg_upgrade3" /obj/item/borg/upgrade/piercing_hypospray/action(mob/living/silicon/robot/R) @@ -371,7 +359,6 @@ icon_state = "cyborg_upgrade3" require_module = 1 module_type = /obj/item/robot_module/medical - origin_tech = "programming=4;engineering=6;materials=5;powerstorage=5;biotech=5" /obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R) if(..()) @@ -387,7 +374,6 @@ name = "B.O.R.I.S. module" desc = "Bluespace Optimized Remote Intelligence Synchronization. An uplink device which takes the place of an MMI in cyborg endoskeletons, creating a robotic shell controlled by an AI." icon_state = "boris" - origin_tech = "engineering=4;magnets=4;programming=4" /obj/item/borg/upgrade/ai/action(mob/living/silicon/robot/R) if(..()) diff --git a/code/game/objects/items/scrolls.dm b/code/game/objects/items/scrolls.dm index 2fc8e8559c..07f6edb828 100644 --- a/code/game/objects/items/scrolls.dm +++ b/code/game/objects/items/scrolls.dm @@ -8,13 +8,11 @@ item_state = "paper" throw_speed = 3 throw_range = 7 - origin_tech = "bluespace=6" resistance_flags = FLAMMABLE /obj/item/teleportation_scroll/apprentice name = "lesser scroll of teleportation" uses = 1 - origin_tech = "bluespace=5" diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 83e8715c54..57306f498c 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -17,7 +17,6 @@ throw_range = 3 w_class = WEIGHT_CLASS_BULKY materials = list(MAT_GLASS=7500, MAT_METAL=1000) - origin_tech = "materials=3;combat=4" attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time @@ -54,7 +53,6 @@ lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' materials = list() - origin_tech = "materials=1;combat=3;biotech=2" resistance_flags = FLAMMABLE block_chance = 30 @@ -70,7 +68,6 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=4;magnets=5;syndicate=6" attack_verb = list("shoved", "bashed") var/active = 0 @@ -110,7 +107,6 @@ icon_state = "teleriot0" lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - origin_tech = "materials=3;combat=4;engineering=4" slot_flags = null force = 3 throwforce = 3 diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm index a0a9783519..38a5ba4cec 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/singularityhammer.dm @@ -13,7 +13,6 @@ throw_range = 1 w_class = WEIGHT_CLASS_HUGE var/charged = 5 - origin_tech = "combat=4;bluespace=4;plasmatech=7" armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 50, bio = 0, rad = 0, fire = 100, acid = 100) resistance_flags = FIRE_PROOF | ACID_PROOF force_string = "LORD SINGULOTH HIMSELF" @@ -84,7 +83,6 @@ throwforce = 30 throw_range = 7 w_class = WEIGHT_CLASS_HUGE - origin_tech = "combat=4;powerstorage=7" /obj/item/twohanded/mjollnir/proc/shock(mob/living/target) target.Stun(60) diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index 1af4104185..5276050b03 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -6,7 +6,6 @@ icon_state = "bluespace_crystal" w_class = WEIGHT_CLASS_TINY materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT) - origin_tech = "bluespace=6;materials=3" points = 50 var/blink_range = 8 // The teleport range when crushed/thrown at someone. refined_type = /obj/item/stack/sheet/bluespace_crystal @@ -45,7 +44,6 @@ /obj/item/ore/bluespace_crystal/artificial name = "artificial bluespace crystal" desc = "An artificially made bluespace crystal, it looks delicate." - origin_tech = "bluespace=3;plasmatech=4" materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT / 2) blink_range = 4 // Not as good as the organic stuff! points = 0 //nice try @@ -57,7 +55,6 @@ icon = 'icons/obj/telescience.dmi' icon_state = "polycrystal" desc = "A stable polycrystal, made of fused-together bluespace crystals. You could probably break one off." - origin_tech = "bluespace=6;materials=3" materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT) attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed") novariants = TRUE diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 8db91578f5..560182d9c7 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -110,7 +110,6 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' heal_brute = 40 - origin_tech = "biotech=2" self_delay = 20 /obj/item/stack/medical/bruise_pack/suicide_act(mob/user) @@ -147,5 +146,4 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' heal_burn = 40 - origin_tech = "biotech=2" self_delay = 20 diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index a70692a07d..290b84e999 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -19,8 +19,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ singular_name = "glass sheet" icon_state = "sheet-glass" materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - origin_tech = "materials=1" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/glass @@ -77,7 +76,6 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ singular_name = "plasma glass sheet" icon_state = "sheet-pglass" materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - origin_tech = "plasmatech=2;materials=2" armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/plasmaglass @@ -127,8 +125,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - origin_tech = "materials=2" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/rglass @@ -168,7 +165,6 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ singular_name = "reinforced plasma glass sheet" icon_state = "sheet-prglass" materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - origin_tech = "materials=2;plasmatech=2" armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/plasmarglass diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 4ad576fe34..60f6560d16 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -1,7 +1,6 @@ /obj/item/stack/sheet/animalhide name = "hide" desc = "Something went wrong." - origin_tech = "biotech=3" novariants = TRUE /obj/item/stack/sheet/animalhide/human @@ -96,7 +95,6 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \ singular_name = "alien hide piece" icon = 'icons/mob/alien.dmi' icon_state = "chitin" - origin_tech = null novariants = TRUE /obj/item/xenos_claw @@ -104,28 +102,24 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \ desc = "The claw of a terrible creature." icon = 'icons/mob/alien.dmi' icon_state = "claw" - origin_tech = null /obj/item/weed_extract name = "weed extract" desc = "A piece of slimy, purplish weed." icon = 'icons/mob/alien.dmi' icon_state = "weed_extract" - origin_tech = null /obj/item/stack/sheet/hairlesshide name = "hairless hide" desc = "This hide was stripped of its hair, but still needs washing and tanning." singular_name = "hairless hide piece" icon_state = "sheet-hairlesshide" - origin_tech = null /obj/item/stack/sheet/wetleather name = "wet leather" desc = "This leather has been cleaned but still needs to be dried." singular_name = "wet leather piece" icon_state = "sheet-wetleather" - origin_tech = null var/wetness = 30 //Reduced when exposed to high temperautres var/drying_threshold_temperature = 500 //Kelvin to start drying @@ -137,7 +131,6 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \ desc = "The by-product of mob grinding." singular_name = "leather piece" icon_state = "sheet-leather" - origin_tech = "materials=2" GLOBAL_LIST_INIT(leather_recipes, list ( \ new/datum/stack_recipe("wallet", /obj/item/storage/wallet, 1), \ @@ -163,7 +156,6 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ desc = "Long stringy filaments which presumably came from a watcher's wings." singular_name = "watcher sinew" icon_state = "sinew" - origin_tech = "biotech=4" novariants = TRUE diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 7beb11b6e1..e2ae00d06c 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -46,7 +46,6 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ icon_state = "sheet-sandstone" throw_speed = 3 throw_range = 5 - origin_tech = "materials=1" materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) sheettype = "sandstone" @@ -67,7 +66,6 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ icon_state = "sandbags" singular_name = "sandbag" layer = LOW_ITEM_LAYER - origin_tech = "materials=2" novariants = TRUE GLOBAL_LIST_INIT(sandbag_recipes, list ( \ @@ -102,7 +100,6 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ name = "diamond" icon_state = "sheet-diamond" singular_name = "diamond" - origin_tech = "materials=6" sheettype = "diamond" materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT) novariants = TRUE @@ -126,7 +123,6 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ name = "uranium" icon_state = "sheet-uranium" singular_name = "uranium sheet" - origin_tech = "materials=5" sheettype = "uranium" materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT) novariants = TRUE @@ -149,7 +145,6 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \ name = "solid plasma" icon_state = "sheet-plasma" singular_name = "plasma sheet" - origin_tech = "plasmatech=2;materials=2" sheettype = "plasma" resistance_flags = FLAMMABLE max_integrity = 100 @@ -185,7 +180,6 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ name = "gold" icon_state = "sheet-gold" singular_name = "gold bar" - origin_tech = "materials=4" sheettype = "gold" materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT) @@ -211,7 +205,6 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \ name = "silver" icon_state = "sheet-silver" singular_name = "silver bar" - origin_tech = "materials=4" sheettype = "silver" materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT) @@ -236,7 +229,6 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \ name = "bananium" icon_state = "sheet-clown" singular_name = "bananium sheet" - origin_tech = "materials=4" sheettype = "clown" materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT) novariants = TRUE @@ -262,7 +254,6 @@ GLOBAL_LIST_INIT(clown_recipes, list ( \ w_class = WEIGHT_CLASS_NORMAL throw_speed = 1 throw_range = 3 - origin_tech = "materials=4" sheettype = "titanium" materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT) @@ -290,7 +281,6 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \ w_class = WEIGHT_CLASS_NORMAL throw_speed = 1 throw_range = 3 - origin_tech = "materials=4" sheettype = "plastitanium" materials = list(MAT_TITANIUM=2000, MAT_PLASMA=2000) @@ -312,7 +302,6 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ singular_name = "snow block" force = 1 throwforce = 2 - origin_tech = "materials=1" GLOBAL_LIST_INIT(snow_recipes, list ( \ new/datum/stack_recipe("Snow Wall", /turf/closed/wall/mineral/snow, 5, one_per_turf = 1, on_floor = 1), \ @@ -333,7 +322,6 @@ GLOBAL_LIST_INIT(snow_recipes, list ( \ name = "enriched uranium" icon_state = "sheet-enruranium" singular_name = "enriched uranium sheet" - origin_tech = "materials=6" materials = list(MAT_URANIUM=3000) /* @@ -347,7 +335,6 @@ GLOBAL_LIST_INIT(adamantine_recipes, list( name = "adamantine" icon_state = "sheet-adamantine" singular_name = "adamantine sheet" - origin_tech = "materials=4" /obj/item/stack/sheet/mineral/adamantine/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.adamantine_recipes @@ -360,7 +347,6 @@ GLOBAL_LIST_INIT(adamantine_recipes, list( name = "mythril" icon_state = "sheet-mythril" singular_name = "mythril sheet" - origin_tech = "materials=4" novariants = TRUE /* @@ -371,7 +357,6 @@ GLOBAL_LIST_INIT(adamantine_recipes, list( icon = 'icons/obj/abductor.dmi' icon_state = "sheet-abductor" singular_name = "alien alloy sheet" - origin_tech = "materials=6;abductor=1" sheettype = "abductor" GLOBAL_LIST_INIT(abductor_recipes, list ( \ diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 96bfdee954..d8019d98a3 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -97,7 +97,6 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT) throwforce = 10 flags_1 = CONDUCT_1 - origin_tech = "materials=1" resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/metal @@ -149,7 +148,6 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ materials = list(MAT_METAL=2000, MAT_PLASMA=2000) throwforce = 10 flags_1 = CONDUCT_1 - origin_tech = "materials=2" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 80) resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/plasteel @@ -199,7 +197,6 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ singular_name = "wood plank" icon_state = "sheet-wood" icon = 'icons/obj/stack_objects.dmi' - origin_tech = "materials=1;biotech=1" sheettype = "wood" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) resistance_flags = FLAMMABLE @@ -245,7 +242,6 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ desc = "Is it cotton? Linen? Denim? Burlap? Canvas? You can't tell." singular_name = "cloth roll" icon_state = "sheet-cloth" - origin_tech = "materials=2" resistance_flags = FLAMMABLE force = 0 throwforce = 0 @@ -279,7 +275,6 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ desc = "Large sheets of card, like boxes folded flat." singular_name = "cardboard sheet" icon_state = "sheet-card" - origin_tech = "materials=1" resistance_flags = FLAMMABLE force = 0 throwforce = 0 @@ -415,7 +410,6 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ desc = "Rare kind of gems which are only gained by blood sacrifice to minor deities. They are needed in crafting powerful objects." singular_name = "lesser gem" icon_state = "sheet-lessergem" - origin_tech = "materials=4" novariants = TRUE @@ -424,7 +418,6 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ desc = "Rare kind of gems which are only gained by blood sacrifice to minor deities. They are needed in crafting powerful objects." singular_name = "greater gem" icon_state = "sheet-greatergem" - origin_tech = "materials=7" novariants = TRUE /* @@ -442,7 +435,6 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ w_class = WEIGHT_CLASS_NORMAL throw_speed = 1 throw_range = 3 - origin_tech = "materials=2;biotech=2" GLOBAL_LIST_INIT(plastic_recipes, list( new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \ @@ -456,7 +448,6 @@ GLOBAL_LIST_INIT(plastic_recipes, list( singular_name = "plastic sheet" icon_state = "sheet-plastic" throwforce = 7 - origin_tech = "materials=1;biotech=1" merge_type = /obj/item/stack/sheet/plastic /obj/item/stack/sheet/plastic/fifty @@ -478,7 +469,6 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra desc = "A thin wooden frame with paper attached." singular_name = "paper frame" icon_state = "sheet-paper" - origin_tech = "materials=1" merge_type = /obj/item/stack/sheet/paperframes resistance_flags = FLAMMABLE diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index fca7b6be13..1faad3462b 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -10,7 +10,6 @@ */ /obj/item/stack icon = 'icons/obj/stack_objects.dmi' - origin_tech = "materials=1" gender = PLURAL var/list/datum/stack_recipe/recipes var/singular_name diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 0300d08414..3597a3f4d6 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -7,7 +7,6 @@ w_class = WEIGHT_CLASS_TINY max_amount = 50 flags_1 = NOBLUDGEON_1 - origin_tech = "materials=6;syndicate=1" /obj/item/stack/telecrystal/attack(mob/target, mob/user) if(target == user) //You can't go around smacking people with crystals to find out if they have an uplink or not. diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm index e9b4a0385d..38887a0d8b 100644 --- a/code/game/objects/items/stacks/tiles/tile_mineral.dm +++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm @@ -3,7 +3,6 @@ singular_name = "plasma floor tile" desc = "A tile made out of highly flammable plasma. This can only end well." icon_state = "tile_plasma" - origin_tech = "plasmatech=1" turf_type = /turf/open/floor/mineral/plasma mineralType = "plasma" materials = list(MAT_PLASMA=500) @@ -40,7 +39,6 @@ singular_name = "diamond floor tile" desc = "A tile made out of diamond. Wow, just, wow." icon_state = "tile_diamond" - origin_tech = "materials=2" turf_type = /turf/open/floor/mineral/diamond mineralType = "diamond" materials = list(MAT_DIAMOND=500) @@ -60,7 +58,6 @@ desc = "A tile made out of alien alloy." icon = 'icons/obj/abductor.dmi' icon_state = "tile_abductor" - origin_tech = "materials=6;abductor=1" turf_type = /turf/open/floor/mineral/abductor mineralType = "abductor" @@ -69,7 +66,6 @@ singular_name = "titanium floor tile" desc = "A tile made of titanium, used for shuttles." icon_state = "tile_shuttle" - origin_tech = "materials=2" turf_type = /turf/open/floor/mineral/titanium mineralType = "titanium" materials = list(MAT_TITANIUM=500) @@ -79,7 +75,6 @@ singular_name = "plas-titanium floor tile" desc = "A tile made of plas-titanium, used for very evil shuttles." icon_state = "tile_darkshuttle" - origin_tech = "materials=2" turf_type = /turf/open/floor/mineral/plastitanium mineralType = "plastitanium" materials = list(MAT_TITANIUM=250, MAT_PLASMA=250) \ No newline at end of file diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index ceefd79338..d51e01ffcb 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -9,7 +9,6 @@ throw_speed = 3 throw_range = 7 max_amount = 60 - origin_tech = "materials=1" var/turf_type = null var/mineralType = null novariants = TRUE @@ -74,7 +73,6 @@ singular_name = "grass floor tile" desc = "A patch of grass like they use on space golf courses." icon_state = "tile_grass" - origin_tech = "biotech=1" turf_type = /turf/open/floor/grass resistance_flags = FLAMMABLE @@ -85,7 +83,6 @@ singular_name = "wood floor tile" desc = "An easy to fit wood floor tile." icon_state = "tile-wood" - origin_tech = "biotech=1" turf_type = /turf/open/floor/wood resistance_flags = FLAMMABLE @@ -95,7 +92,6 @@ singular_name = "basalt floor tile" desc = "Artificially made ashy soil themed on a hostile environment." icon_state = "tile_basalt" - origin_tech = "materials=1" turf_type = /turf/open/floor/grass/fakebasalt //Carpets @@ -146,7 +142,6 @@ desc = "A high-traction floor tile. It feels rubbery in your hand." icon_state = "tile_noslip" turf_type = /turf/open/floor/noslip - origin_tech = "materials=3" merge_type = /obj/item/stack/tile/noslip /obj/item/stack/tile/noslip/thirty diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 9a94ab6297..14529b4078 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -34,7 +34,6 @@ /obj/item/storage/backpack/holding name = "bag of holding" desc = "A backpack that opens into a localized pocket of Blue Space." - origin_tech = "bluespace=5;materials=4;engineering=4;plasmatech=5" icon_state = "holdingpack" item_state = "holdingpack" max_w_class = WEIGHT_CLASS_GIGANTIC @@ -421,7 +420,6 @@ desc = "A large duffel bag for holding extra tactical supplies." icon_state = "duffel-syndie" item_state = "duffel-syndie" - origin_tech = "syndicate=1" silent = 1 slowdown = 0 diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 944604c6ac..afeffe0f1e 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -70,7 +70,6 @@ name = "trash bag of holding" desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage." icon_state = "bluetrashbag" - origin_tech = "materials=4;bluespace=4;engineering=4;plasmatech=3" max_combined_w_class = 60 storage_slots = 60 flags_2 = NO_MAT_REDEMPTION_2 @@ -84,7 +83,6 @@ desc = "This little bugger can be used to store and transport ores." icon = 'icons/obj/mining.dmi' icon_state = "satchel" - origin_tech = "engineering=2" slot_flags = SLOT_BELT | SLOT_POCKET w_class = WEIGHT_CLASS_NORMAL storage_slots = 50 @@ -101,7 +99,6 @@ desc = "A revolution in convenience, this satchel allows for huge amounts of ore storage. It's been outfitted with anti-malfunction safety measures." storage_slots = INFINITY max_combined_w_class = INFINITY - origin_tech = "bluespace=4;materials=3;engineering=3" icon_state = "satchel_bspace" // ----------------------------- @@ -125,7 +122,6 @@ name = "portable seed extractor" desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant." icon_state = "portaseeder" - origin_tech = "biotech=3;engineering=2" /obj/item/storage/bag/plants/portaseeder/verb/dissolve_contents() set name = "Activate Seed Extraction" diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 9ef47c6441..454eabf058 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -12,7 +12,6 @@ throw_range = 7 w_class = WEIGHT_CLASS_BULKY materials = list(MAT_METAL = 500) - origin_tech = "combat=1;engineering=1" attack_verb = list("robusted") hitsound = 'sound/weapons/smash.ogg' var/latches = "single_latch" @@ -101,7 +100,6 @@ name = "suspicious looking toolbox" icon_state = "syndicate" item_state = "toolbox_syndi" - origin_tech = "combat=2;syndicate=1;engineering=2" silent = 1 force = 15 throwforce = 18 diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 92d00d9e2d..ab82f92c2d 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -9,7 +9,6 @@ force = 10 throwforce = 7 w_class = WEIGHT_CLASS_NORMAL - origin_tech = "combat=2" attack_verb = list("beaten") armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 50, bio = 0, rad = 0, fire = 80, acid = 80) diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index 6946fa4a6d..f1644f0b1a 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -134,7 +134,6 @@ /obj/item/tank/jetpack/suit name = "hardsuit jetpack upgrade" desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment." - origin_tech = "materials=4;magnets=4;engineering=5" icon_state = "jetpack-mining" item_state = "jetpack-black" w_class = WEIGHT_CLASS_NORMAL diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index 2b1216b6da..93876164b4 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -27,7 +27,6 @@ throw_speed = 3 throw_range = 7 materials = list(MAT_METAL=400) - origin_tech = "magnets=3;bluespace=2" /obj/item/locator/attack_self(mob/user) user.set_machine(src) @@ -140,7 +139,6 @@ Frequency: throw_speed = 3 throw_range = 5 materials = list(MAT_METAL=10000) - origin_tech = "magnets=3;bluespace=4" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/list/active_portal_pairs diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm index 833849a494..92e7a8e9ba 100644 --- a/code/game/objects/items/teleprod.dm +++ b/code/game/objects/items/teleprod.dm @@ -4,7 +4,6 @@ w_class = WEIGHT_CLASS_NORMAL icon_state = "teleprod_nocell" item_state = "teleprod" - origin_tech = "combat=2;bluespace=4;materials=3" slot_flags = null /obj/item/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit diff --git a/code/game/objects/items/tools.dm b/code/game/objects/items/tools.dm index bd618f217e..81701d8977 100644 --- a/code/game/objects/items/tools.dm +++ b/code/game/objects/items/tools.dm @@ -28,7 +28,6 @@ w_class = WEIGHT_CLASS_SMALL usesound = 'sound/items/ratchet.ogg' materials = list(MAT_METAL=150) - origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") toolspeed = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) @@ -57,7 +56,6 @@ icon_state = "wrench" usesound = 'sound/effects/empulse.ogg' toolspeed = 0.1 - origin_tech = "materials=5;engineering=5;abductor=3" /obj/item/wrench/power name = "hand drill" @@ -68,7 +66,6 @@ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' usesound = 'sound/items/drill_use.ogg' materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) - origin_tech = "materials=2;engineering=2" //done for balance reasons, making them high value for research, but harder to get force = 8 //might or might not be too high, subject to change w_class = WEIGHT_CLASS_SMALL throwforce = 8 @@ -92,7 +89,6 @@ icon_state = "wrench_medical" force = 2 //MEDICAL throwforce = 4 - origin_tech = "materials=1;engineering=1;biotech=3" attack_verb = list("wrenched", "medicaled", "tapped", "jabbed", "whacked") /obj/item/wrench/medical/suicide_act(mob/living/user) @@ -193,7 +189,7 @@ var/mutable_appearance/body = mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver") var/mutable_appearance/head = mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_head") body.color = color - head.overlays += body + head.add_overlay(body) return head else return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', icon_state) @@ -234,7 +230,6 @@ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) - origin_tech = "materials=2;engineering=2" //done for balance reasons, making them high value for research, but harder to get force = 8 //might or might not be too high, subject to change w_class = WEIGHT_CLASS_SMALL throwforce = 8 @@ -283,7 +278,6 @@ attack_verb = list("pinched", "nipped") hitsound = 'sound/items/wirecutter.ogg' usesound = 'sound/items/wirecutter.ogg' - origin_tech = "materials=1;engineering=1" toolspeed = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) var/random_color = TRUE @@ -327,7 +321,6 @@ icon = 'icons/obj/abductor.dmi' icon_state = "cutters" toolspeed = 0.1 - origin_tech = "materials=5;engineering=4;abductor=3" random_color = FALSE /obj/item/wirecutters/cyborg @@ -340,7 +333,6 @@ desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a cutting head." icon_state = "jaws_cutter" item_state = "jawsoflife" - origin_tech = "materials=2;engineering=2" materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) usesound = 'sound/items/jaws_cut.ogg' toolspeed = 0.25 @@ -389,7 +381,6 @@ resistance_flags = FIRE_PROOF materials = list(MAT_METAL=70, MAT_GLASS=30) - origin_tech = "engineering=1;plasmatech=1" var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2) var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower) var/max_fuel = 20 //The max amount of fuel the welder can hold @@ -633,7 +624,6 @@ icon_state = "indwelder" max_fuel = 40 materials = list(MAT_GLASS=60) - origin_tech = "engineering=2;plasmatech=2" /obj/item/weldingtool/largetank/cyborg name = "integrated welding tool" @@ -664,7 +654,6 @@ toolspeed = 0.1 light_intensity = 0 change_icons = 0 - origin_tech = "plasmatech=5;engineering=5;abductor=3" /obj/item/weldingtool/abductor/process() if(get_fuel() <= max_fuel) @@ -678,7 +667,6 @@ item_state = "upindwelder" max_fuel = 80 materials = list(MAT_METAL=70, MAT_GLASS=120) - origin_tech = "engineering=3;plasmatech=2" /obj/item/weldingtool/experimental name = "experimental welding tool" @@ -687,7 +675,6 @@ item_state = "exwelder" max_fuel = 40 materials = list(MAT_METAL=70, MAT_GLASS=120) - origin_tech = "materials=4;engineering=4;bluespace=3;plasmatech=4" var/last_gen = 0 change_icons = 0 can_off_process = 1 @@ -728,7 +715,6 @@ throwforce = 7 w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=50) - origin_tech = "engineering=1;combat=1" attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") toolspeed = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) @@ -756,7 +742,6 @@ usesound = 'sound/weapons/sonic_jackhammer.ogg' icon_state = "crowbar" toolspeed = 0.1 - origin_tech = "combat=4;engineering=4;abductor=3" /obj/item/crowbar/large name = "crowbar" @@ -785,7 +770,6 @@ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) - origin_tech = "materials=2;engineering=2" usesound = 'sound/items/jaws_pry.ogg' force = 15 toolspeed = 0.25 diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index a248dff0db..cf2baba081 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -11,8 +11,7 @@ force = 5 throwforce = 7 w_class = WEIGHT_CLASS_SMALL - materials = list(MAT_METAL=50) - origin_tech = "engineering=1;combat=1" + materials = list(MAT_METAL=50) attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") tool_behaviour = TOOL_CROWBAR toolspeed = 1 @@ -40,8 +39,7 @@ icon = 'icons/obj/abductor.dmi' usesound = 'sound/weapons/sonic_jackhammer.ogg' icon_state = "crowbar" - toolspeed = 0.1 - origin_tech = "combat=4;engineering=4;abductor=3" + toolspeed = 0.1 /obj/item/crowbar/large name = "crowbar" @@ -69,8 +67,7 @@ item_state = "jawsoflife" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) - origin_tech = "materials=2;engineering=2" + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) usesound = 'sound/items/jaws_pry.ogg' force = 15 toolspeed = 0.25 diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 278ac4385d..08f22b7e46 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -105,8 +105,7 @@ item_state = "drill" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) - origin_tech = "materials=2;engineering=2" //done for balance reasons, making them high value for research, but harder to get + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) //done for balance reasons, making them high value for research, but harder to get force = 8 //might or might not be too high, subject to change w_class = WEIGHT_CLASS_SMALL throwforce = 8 diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 94fbb0a9a0..1c20c95e93 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -21,8 +21,7 @@ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) resistance_flags = FIRE_PROOF - materials = list(MAT_METAL=70, MAT_GLASS=30) - origin_tech = "engineering=1;plasmatech=1" + materials = list(MAT_METAL=70, MAT_GLASS=30) var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2) var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower) var/max_fuel = 20 //The max amount of fuel the welder can hold @@ -265,8 +264,7 @@ desc = "A slightly larger welder with a larger tank." icon_state = "indwelder" max_fuel = 40 - materials = list(MAT_GLASS=60) - origin_tech = "engineering=2;plasmatech=2" + materials = list(MAT_GLASS=60) /obj/item/weldingtool/largetank/cyborg name = "integrated welding tool" @@ -296,8 +294,7 @@ icon_state = "welder" toolspeed = 0.1 light_intensity = 0 - change_icons = 0 - origin_tech = "plasmatech=5;engineering=5;abductor=3" + change_icons = 0 /obj/item/weldingtool/abductor/process() if(get_fuel() <= max_fuel) @@ -310,8 +307,7 @@ icon_state = "upindwelder" item_state = "upindwelder" max_fuel = 80 - materials = list(MAT_METAL=70, MAT_GLASS=120) - origin_tech = "engineering=3;plasmatech=2" + materials = list(MAT_METAL=70, MAT_GLASS=120) /obj/item/weldingtool/experimental name = "experimental welding tool" @@ -319,8 +315,7 @@ icon_state = "exwelder" item_state = "exwelder" max_fuel = 40 - materials = list(MAT_METAL=70, MAT_GLASS=120) - origin_tech = "materials=4;engineering=4;bluespace=3;plasmatech=4" + materials = list(MAT_METAL=70, MAT_GLASS=120) var/last_gen = 0 change_icons = 0 can_off_process = 1 @@ -341,5 +336,4 @@ if(get_fuel() < max_fuel && nextrefueltick < world.time) nextrefueltick = world.time + 10 reagents.add_reagent("welding_fuel", 1) - #undef WELDER_FUEL_BURN_INTERVAL \ No newline at end of file diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index da0bbd677c..c03469164e 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -14,8 +14,7 @@ materials = list(MAT_METAL=80) attack_verb = list("pinched", "nipped") hitsound = 'sound/items/wirecutter.ogg' - usesound = 'sound/items/wirecutter.ogg' - origin_tech = "materials=1;engineering=1" + usesound = 'sound/items/wirecutter.ogg' tool_behaviour = TOOL_WIRECUTTER toolspeed = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) @@ -59,8 +58,7 @@ desc = "Extremely sharp wirecutters, made out of a silvery-green metal." icon = 'icons/obj/abductor.dmi' icon_state = "cutters" - toolspeed = 0.1 - origin_tech = "materials=5;engineering=4;abductor=3" + toolspeed = 0.1 random_color = FALSE /obj/item/wirecutters/cyborg @@ -72,8 +70,7 @@ name = "jaws of life" desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a cutting head." icon_state = "jaws_cutter" - item_state = "jawsoflife" - origin_tech = "materials=2;engineering=2" + item_state = "jawsoflife" materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) usesound = 'sound/items/jaws_cut.ogg' toolspeed = 0.25 diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 8fb6bd4211..2b3c6e7bbe 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -11,8 +11,7 @@ throwforce = 7 w_class = WEIGHT_CLASS_SMALL usesound = 'sound/items/ratchet.ogg' - materials = list(MAT_METAL=150) - origin_tech = "materials=1;engineering=1" + materials = list(MAT_METAL=150) attack_verb = list("bashed", "battered", "bludgeoned", "whacked") tool_behaviour = TOOL_WRENCH toolspeed = 1 @@ -41,8 +40,7 @@ icon = 'icons/obj/abductor.dmi' icon_state = "wrench" usesound = 'sound/effects/empulse.ogg' - toolspeed = 0.1 - origin_tech = "materials=5;engineering=5;abductor=3" + toolspeed = 0.1 /obj/item/wrench/power name = "hand drill" @@ -52,8 +50,7 @@ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' usesound = 'sound/items/drill_use.ogg' - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) - origin_tech = "materials=2;engineering=2" //done for balance reasons, making them high value for research, but harder to get + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) //done for balance reasons, making them high value for research, but harder to get force = 8 //might or might not be too high, subject to change w_class = WEIGHT_CLASS_SMALL throwforce = 8 @@ -76,8 +73,7 @@ desc = "A medical wrench with common(medical?) uses. Can be found in your hand." icon_state = "wrench_medical" force = 2 //MEDICAL - throwforce = 4 - origin_tech = "materials=1;engineering=1;biotech=3" + throwforce = 4 attack_verb = list("wrenched", "medicaled", "tapped", "jabbed", "whacked") /obj/item/wrench/medical/suicide_act(mob/living/user) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 698491c98f..b31346be9b 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -322,7 +322,6 @@ throw_range = 5 force_unwielded = 0 force_wielded = 0 - origin_tech = null attack_verb = list("attacked", "struck", "hit") /obj/item/twohanded/dualsaber/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index debb25f093..9058e837ab 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -259,7 +259,6 @@ unwieldsound = 'sound/weapons/saberoff.ogg' hitsound = "swing_hit" armour_penetration = 35 - origin_tech = "magnets=4;syndicate=5" item_color = "green" light_color = "#00ff00"//green attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") @@ -501,7 +500,6 @@ throw_speed = 2 throw_range = 4 materials = list(MAT_METAL=13000) - origin_tech = "materials=3;engineering=4;combat=2" attack_verb = list("sawed", "torn", "cut", "chopped", "diced") hitsound = "swing_hit" sharpness = IS_SHARP diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 4356102efd..37d0c6cb0e 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -289,7 +289,6 @@ throw_speed = 3 throw_range = 6 materials = list(MAT_METAL=12000) - origin_tech = "engineering=3;combat=2" hitsound = 'sound/weapons/genhit.ogg' attack_verb = list("stubbed", "poked") resistance_flags = FIRE_PROOF @@ -455,7 +454,6 @@ name = "liz o' nine tails" desc = "A whip fashioned from the severed tails of lizards." icon_state = "tailwhip" - origin_tech = "engineering=3;combat=3;biotech=3" needs_permit = 0 /obj/item/melee/chainofcommand/tailwhip/kitty diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 4a529571a4..5424724d32 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -279,4 +279,3 @@ That prevents a few funky behaviors. /obj/item/circuitboard/aicore name = "AI core (AI Core Board)" //Well, duh, but best to be consistent - origin_tech = "programming=3" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 520c739e55..3f54a3dec2 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -18,3 +18,4 @@ new /obj/item/clothing/head/soft(src) new /obj/item/device/export_scanner(src) new /obj/item/door_remote/quartermaster(src) + new /obj/item/circuitboard/machine/protolathe/department/cargo(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 b839f593f1..55c2160833 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -27,6 +27,7 @@ new /obj/item/door_remote/chief_engineer(src) new /obj/item/pipe_dispenser(src) new /obj/item/inducer(src) + new /obj/item/circuitboard/machine/protolathe/department/engineering(src) /obj/structure/closet/secure_closet/engineering_electrical name = "electrical supplies locker" 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 5402abdfee..dff240e1da 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -73,6 +73,7 @@ new /obj/item/device/autosurgeon/cmo(src) new /obj/item/door_remote/chief_medical_officer(src) new /obj/item/clothing/neck/petcollar(src) + new /obj/item/circuitboard/machine/protolathe/department/medical(src) new /obj/item/pet_carrier(src) /obj/structure/closet/secure_closet/animal 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 d15c11f4ed..8b1e82ed81 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -1,27 +1,28 @@ /obj/structure/closet/secure_closet/RD name = "\proper research director's locker" req_access = list(ACCESS_RD) - icon_state = "rd" - -/obj/structure/closet/secure_closet/RD/PopulateContents() - ..() - new /obj/item/clothing/neck/cloak/rd(src) - new /obj/item/clothing/suit/bio_suit/scientist(src) - new /obj/item/clothing/head/bio_hood/scientist(src) - new /obj/item/clothing/suit/toggle/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/clothing/shoes/sneakers/brown(src) - new /obj/item/cartridge/rd(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/device/radio/headset/heads/rd(src) - new /obj/item/tank/internals/air(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/device/megaphone/command(src) - new /obj/item/storage/lockbox/medal/sci(src) - new /obj/item/clothing/suit/armor/reactive/teleport(src) - new /obj/item/device/assembly/flash/handheld(src) - new /obj/item/device/laser_pointer(src) - new /obj/item/door_remote/research_director(src) - new /obj/item/storage/box/firingpins(src) \ No newline at end of file + icon_state = "rd" + +/obj/structure/closet/secure_closet/RD/PopulateContents() + ..() + new /obj/item/clothing/neck/cloak/rd(src) + new /obj/item/clothing/suit/bio_suit/scientist(src) + new /obj/item/clothing/head/bio_hood/scientist(src) + new /obj/item/clothing/suit/toggle/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/clothing/shoes/sneakers/brown(src) + new /obj/item/cartridge/rd(src) + new /obj/item/clothing/gloves/color/latex(src) + new /obj/item/device/radio/headset/heads/rd(src) + new /obj/item/tank/internals/air(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/device/megaphone/command(src) + new /obj/item/storage/lockbox/medal/sci(src) + new /obj/item/clothing/suit/armor/reactive/teleport(src) + new /obj/item/device/assembly/flash/handheld(src) + new /obj/item/device/laser_pointer(src) + new /obj/item/door_remote/research_director(src) + new /obj/item/storage/box/firingpins(src) + new /obj/item/circuitboard/machine/protolathe/department/science(src) 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 7f36acaae9..6491306600 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -56,6 +56,7 @@ new /obj/item/clothing/neck/petcollar(src) new /obj/item/pet_carrier(src) new /obj/item/door_remote/civillian(src) + new /obj/item/circuitboard/machine/protolathe/department/service(src) /obj/structure/closet/secure_closet/hos name = "\proper head of security's locker" diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm index 52ca6d1822..1dac5ed0fd 100644 --- a/code/modules/NTNet/relays.dm +++ b/code/modules/NTNet/relays.dm @@ -117,4 +117,4 @@ D.target = null D.error = "Connection to quantum relay severed" - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index e169f656c4..6e327db6b5 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -4,7 +4,7 @@ var/F = file("[GLOB.log_directory]/[subject].html") WRITE_FILE(F, "[time_stamp()] [REF(src)] ([x],[y],[z]) || [src] [message]
") -/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_EXONET, INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS, INVESTIGATE_RADIATION) ) +/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_RESEARCH, INVESTIGATE_EXONET, INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS, INVESTIGATE_RADIATION) ) set name = "Investigate" set category = "Admin" if(!holder) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 6c2df587e1..315e28df02 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -15,7 +15,6 @@ throwforce = 2 throw_speed = 3 throw_range = 7 - origin_tech = "magnets=1;engineering=1" var/secured = TRUE var/list/attached_overlays = null diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index b895297d83..1502b88718 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -12,7 +12,6 @@ var/status = FALSE //0 - not readied //1 - bomb finished with welder var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device var/obj/item/tank/bombtank = null //the second part of the bomb is a plasma tank - origin_tech = "materials=1;engineering=1" /obj/item/device/onetankbomb/examine(mob/user) diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 9a13237619..47d3d9e436 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -2,7 +2,6 @@ name = "blast door controller" desc = "A small electronic device able to control a blast door remotely." icon_state = "control" - origin_tech = "magnets=1;programming=2" attachable = 1 var/id = null var/can_change_id = 0 diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index a55016e2dd..81f2c75660 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -8,7 +8,6 @@ throwforce = 0 w_class = WEIGHT_CLASS_TINY materials = list(MAT_METAL = 300, MAT_GLASS = 300) - origin_tech = "magnets=2;combat=1" crit_fail = 0 //Is the flash burnt out? var/times_used = 0 //Number of times it's been used. @@ -158,7 +157,6 @@ /obj/item/device/assembly/flash/cyborg - origin_tech = null /obj/item/device/assembly/flash/cyborg/attack(mob/living/M, mob/user) ..() @@ -224,7 +222,6 @@ throw_range = 3 w_class = WEIGHT_CLASS_BULKY materials = list(MAT_GLASS=7500, MAT_METAL=1000) - origin_tech = "materials=3;combat=4" attack_verb = list("shoved", "bashed") block_chance = 50 armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 80, acid = 70) diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 8ff54b7a0a..1e528d4824 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -3,7 +3,6 @@ desc = "Used for scanning and monitoring health." icon_state = "health" materials = list(MAT_METAL=800, MAT_GLASS=200) - origin_tech = "magnets=1;biotech=1" attachable = 1 secured = 0 diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 090843e82e..2a6e51a344 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -3,7 +3,6 @@ desc = "A small electronic device able to ignite combustible substances." icon_state = "igniter" materials = list(MAT_METAL=500, MAT_GLASS=50) - origin_tech = "magnets=1" var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread heat = 1000 diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index c5f219d941..0b9d42e42e 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -3,7 +3,6 @@ desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted.\nAlt-click to rotate it clockwise." icon_state = "infrared" materials = list(MAT_METAL=1000, MAT_GLASS=500) - origin_tech = "magnets=2;materials=2" var/on = FALSE var/visible = FALSE diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 9b88d292c0..e8ee742e56 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -1,142 +1,142 @@ -/obj/item/device/assembly/mousetrap - name = "mousetrap" - desc = "A handy little spring-loaded trap for catching pesty rodents." - icon_state = "mousetrap" - materials = list(MAT_METAL=100) - attachable = 1 - var/armed = 0 - - -/obj/item/device/assembly/mousetrap/examine(mob/user) - ..() - if(armed) - to_chat(user, "The mousetrap is armed!") - else - to_chat(user, "The mousetrap is not armed.") - -/obj/item/device/assembly/mousetrap/activate() - if(..()) - armed = !armed - if(!armed) - if(ishuman(usr)) - var/mob/living/carbon/human/user = usr - if((user.disabilities & (CLUMSY | DUMB)) && prob(50)) - to_chat(user, "Your hand slips, setting off the trigger!") - pulse(0) - update_icon() - if(usr) - playsound(usr.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) - -/obj/item/device/assembly/mousetrap/describe() - return "The pressure switch is [armed?"primed":"safe"]." - -/obj/item/device/assembly/mousetrap/update_icon() - if(armed) - icon_state = "mousetraparmed" - else - icon_state = "mousetrap" - if(holder) - holder.update_icon() - -/obj/item/device/assembly/mousetrap/proc/triggered(mob/target, type = "feet") - if(!armed) - return - var/obj/item/bodypart/affecting = null - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(PIERCEIMMUNE in H.dna.species.species_traits) - playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) - armed = 0 - update_icon() - pulse(0) - return 0 - switch(type) - if("feet") - if(!H.shoes) - affecting = H.get_bodypart(pick("l_leg", "r_leg")) - H.Knockdown(60) - if("l_hand", "r_hand") - if(!H.gloves) - affecting = H.get_bodypart(type) - H.Stun(60) - if(affecting) - if(affecting.receive_damage(1, 0)) - H.update_damage_overlays() - else if(ismouse(target)) - var/mob/living/simple_animal/mouse/M = target - visible_message("SPLAT!") - M.splat() - playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) - armed = 0 - update_icon() - pulse(0) - - -/obj/item/device/assembly/mousetrap/attack_self(mob/living/carbon/human/user) - if(!armed) - to_chat(user, "You arm [src].") - else - if((user.disabilities & (CLUMSY | DUMB)) && prob(50)) - var/which_hand = "l_hand" - if(!(user.active_hand_index % 2)) - which_hand = "r_hand" - triggered(user, which_hand) - user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ - "You accidentally trigger [src]!") - return - to_chat(user, "You disarm [src].") - armed = !armed - update_icon() - playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) - - -/obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user) - if(armed) - if((user.disabilities & (CLUMSY | DUMB)) && prob(50)) - var/which_hand = "l_hand" - if(!(user.active_hand_index % 2)) - which_hand = "r_hand" - triggered(user, which_hand) - user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ - "You accidentally trigger [src]!") - return - ..() - - -/obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj) - if(armed) - if(ismob(AM)) - var/mob/MM = AM - if(!(MM.movement_type & FLYING)) - if(ishuman(AM)) - var/mob/living/carbon/H = AM - if(H.m_intent == MOVE_INTENT_RUN) - triggered(H) - H.visible_message("[H] accidentally steps on [src].", \ - "You accidentally step on [src]") - else if(ismouse(MM)) - triggered(MM) - else if(AM.density) // For mousetrap grenades, set off by anything heavy - triggered(AM) - ..() - - -/obj/item/device/assembly/mousetrap/on_found(mob/finder) - if(armed) - finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \ - "You accidentally trigger [src]!") - triggered(finder, (finder.active_hand_index % 2 == 0) ? "r_hand" : "l_hand") - return 1 //end the search! - return 0 - - -/obj/item/device/assembly/mousetrap/hitby(A as mob|obj) - if(!armed) - return ..() - visible_message("[src] is triggered by [A].") - triggered(null) - - -/obj/item/device/assembly/mousetrap/armed - icon_state = "mousetraparmed" - armed = 1 +/obj/item/device/assembly/mousetrap + name = "mousetrap" + desc = "A handy little spring-loaded trap for catching pesty rodents." + icon_state = "mousetrap" + materials = list(MAT_METAL=100) + attachable = 1 + var/armed = 0 + + +/obj/item/device/assembly/mousetrap/examine(mob/user) + ..() + if(armed) + to_chat(user, "The mousetrap is armed!") + else + to_chat(user, "The mousetrap is not armed.") + +/obj/item/device/assembly/mousetrap/activate() + if(..()) + armed = !armed + if(!armed) + if(ishuman(usr)) + var/mob/living/carbon/human/user = usr + if((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY && prob(50)) + to_chat(user, "Your hand slips, setting off the trigger!") + pulse(0) + update_icon() + if(usr) + playsound(usr.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) + +/obj/item/device/assembly/mousetrap/describe() + return "The pressure switch is [armed?"primed":"safe"]." + +/obj/item/device/assembly/mousetrap/update_icon() + if(armed) + icon_state = "mousetraparmed" + else + icon_state = "mousetrap" + if(holder) + holder.update_icon() + +/obj/item/device/assembly/mousetrap/proc/triggered(mob/target, type = "feet") + if(!armed) + return + var/obj/item/bodypart/affecting = null + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(PIERCEIMMUNE in H.dna.species.species_traits) + playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) + armed = 0 + update_icon() + pulse(0) + return 0 + switch(type) + if("feet") + if(!H.shoes) + affecting = H.get_bodypart(pick("l_leg", "r_leg")) + H.Knockdown(60) + if("l_hand", "r_hand") + if(!H.gloves) + affecting = H.get_bodypart(type) + H.Stun(60) + if(affecting) + if(affecting.receive_damage(1, 0)) + H.update_damage_overlays() + else if(ismouse(target)) + var/mob/living/simple_animal/mouse/M = target + visible_message("SPLAT!") + M.splat() + playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) + armed = 0 + update_icon() + pulse(0) + + +/obj/item/device/assembly/mousetrap/attack_self(mob/living/carbon/human/user) + if(!armed) + to_chat(user, "You arm [src].") + else + if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50)) + var/which_hand = "l_hand" + if(!(user.active_hand_index % 2)) + which_hand = "r_hand" + triggered(user, which_hand) + user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ + "You accidentally trigger [src]!") + return + to_chat(user, "You disarm [src].") + armed = !armed + update_icon() + playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) + + +/obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user) + if(armed) + if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50)) + var/which_hand = "l_hand" + if(!(user.active_hand_index % 2)) + which_hand = "r_hand" + triggered(user, which_hand) + user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ + "You accidentally trigger [src]!") + return + ..() + + +/obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj) + if(armed) + if(ismob(AM)) + var/mob/MM = AM + if(!(MM.movement_type & FLYING)) + if(ishuman(AM)) + var/mob/living/carbon/H = AM + if(H.m_intent == MOVE_INTENT_RUN) + triggered(H) + H.visible_message("[H] accidentally steps on [src].", \ + "You accidentally step on [src]") + else if(ismouse(MM)) + triggered(MM) + else if(AM.density) // For mousetrap grenades, set off by anything heavy + triggered(AM) + ..() + + +/obj/item/device/assembly/mousetrap/on_found(mob/finder) + if(armed) + finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \ + "You accidentally trigger [src]!") + triggered(finder, (finder.active_hand_index % 2 == 0) ? "r_hand" : "l_hand") + return 1 //end the search! + return 0 + + +/obj/item/device/assembly/mousetrap/hitby(A as mob|obj) + if(!armed) + return ..() + visible_message("[src] is triggered by [A].") + triggered(null) + + +/obj/item/device/assembly/mousetrap/armed + icon_state = "mousetraparmed" + armed = TRUE diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index f2d30d19c7..81cc09243c 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -3,7 +3,6 @@ desc = "Used for scanning and alerting when someone enters a certain proximity." icon_state = "prox" materials = list(MAT_METAL=800, MAT_GLASS=200) - origin_tech = "magnets=1;engineering=1" attachable = 1 var/scanning = 0 diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index f263fc0063..d9fdab39be 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -6,7 +6,6 @@ lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' materials = list(MAT_METAL=400, MAT_GLASS=120) - origin_tech = "magnets=1;bluespace=1" wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE attachable = 1 @@ -185,7 +184,6 @@ Code: return /obj/item/device/assembly/signaler/cyborg - origin_tech = null /obj/item/device/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params) return diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 30a1ee71d3..8e2c1245b9 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -3,7 +3,6 @@ desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." icon_state = "timer" materials = list(MAT_METAL=500, MAT_GLASS=50) - origin_tech = "magnets=1;engineering=1" attachable = 1 var/timing = 0 diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 8d6f2bf044..617f384592 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -3,7 +3,6 @@ desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated." icon_state = "voice" materials = list(MAT_METAL=500, MAT_GLASS=50) - origin_tech = "magnets=1;engineering=1" flags_1 = HEAR_1 attachable = 1 verb_say = "beeps" diff --git a/code/modules/cargo/exports/research.dm b/code/modules/cargo/exports/research.dm index a24e86d379..b1ac30e7f9 100644 --- a/code/modules/cargo/exports/research.dm +++ b/code/modules/cargo/exports/research.dm @@ -3,23 +3,20 @@ cost = 500 unit_name = "technology data disk" export_types = list(/obj/item/disk/tech_disk) - var/list/techLevels = list() + var/list/datum/techweb_node/sold_nodes = list() /datum/export/tech/get_cost(obj/O) var/obj/item/disk/tech_disk/D = O var/cost = 0 - for(var/V in D.tech_stored) - if(!V) + for(var/V in D.stored_research.researched_nodes) + if(sold_nodes[V]) //Already sold before, don't want it. continue - var/datum/tech/tech = V - cost += tech.getCost(techLevels[tech.id]) + var/datum/techweb_node/TWN = D.stored_research.researched_nodes[V] + cost += TWN return ..() * cost /datum/export/tech/sell_object(obj/O) ..() var/obj/item/disk/tech_disk/D = O - for(var/V in D.tech_stored) - if(!V) - continue - var/datum/tech/tech = V - techLevels[tech.id] = max(techLevels[tech.id], tech.level) + for(var/V in D.stored_research.researched_nodes) + sold_nodes[V] = D.stored_research.researched_nodes[V] diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index ad748f9a84..dd876f3701 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -203,7 +203,6 @@ item_state = "bl_suit" item_color = "black" desc = "It's a plain jumpsuit. It has a small dial on the wrist." - origin_tech = "syndicate=2" sensor_mode = SENSOR_OFF //Hey who's this guy on the Syndicate Shuttle?? random_sensor = FALSE resistance_flags = NONE @@ -235,7 +234,6 @@ icon_state = "armor" item_state = "armor" blood_overlay_type = "armor" - origin_tech = "syndicate=2" resistance_flags = NONE armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) @@ -257,7 +255,6 @@ desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." icon_state = "meson" item_state = "meson" - origin_tech = "syndicate=2" resistance_flags = NONE armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) @@ -392,7 +389,6 @@ desc = "A pair of black shoes." permeability_coefficient = 0.05 flags_1 = NOSLIP_1 - origin_tech = "syndicate=2" resistance_flags = NONE pockets = /obj/item/storage/internal/pocket/shoes armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 1405e633cc..29990a299b 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -54,7 +54,6 @@ desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting conditions." icon_state = "meson" item_state = "meson" - origin_tech = "magnets=1;engineering=2" darkness_view = 2 vision_flags = SEE_TURFS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE @@ -65,7 +64,6 @@ desc = "An optical meson scanner fitted with an amplified visible light spectrum overlay, providing greater visual clarity in darkness." icon_state = "nvgmeson" item_state = "nvgmeson" - origin_tech = "magnets=4;engineering=5;plasmatech=4" darkness_view = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE glass_colour_type = /datum/client_colour/glass_colour/green @@ -87,7 +85,6 @@ desc = "A pair of snazzy goggles used to protect against chemical spills. Fitted with an analyzer for scanning items and reagents." icon_state = "purple" item_state = "glasses" - origin_tech = "magnets=2;engineering=1" scan_reagents = 1 //You can see reagents while wearing science goggles actions_types = list(/datum/action/item_action/toggle_research_scanner) glass_colour_type = /datum/client_colour/glass_colour/purple @@ -103,7 +100,6 @@ desc = "You can totally see in the dark now!" icon_state = "night" item_state = "glasses" - origin_tech = "materials=4;magnets=4;plasmatech=4;engineering=4" darkness_view = 8 vision_flags = SEE_BLACKNESS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE @@ -126,7 +122,6 @@ desc = "Very confusing glasses." icon_state = "material" item_state = "glasses" - origin_tech = "magnets=3;engineering=3" vision_flags = SEE_OBJS glass_colour_type = /datum/client_colour/glass_colour/lightblue @@ -135,7 +130,6 @@ desc = "Used by miners to detect ores deep within the rock." icon_state = "material" item_state = "glasses" - origin_tech = "magnets=3;engineering=3" darkness_view = 0 /obj/item/clothing/glasses/material/mining/gar @@ -186,7 +180,6 @@ /obj/item/clothing/glasses/sunglasses/reagent name = "beer goggles" desc = "A pair of sunglasses outfitted with apparatus to scan reagents." - origin_tech = "magnets=2;engineering=2" scan_reagents = 1 /obj/item/clothing/glasses/sunglasses/garb @@ -267,7 +260,6 @@ desc = "Thermals in the shape of glasses." icon_state = "thermal" item_state = "glasses" - origin_tech = "magnets=3" vision_flags = SEE_MOBS invis_view = 2 flash_protect = 0 @@ -280,7 +272,6 @@ /obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete name = "chameleon thermals" desc = "A pair of thermal optic goggles with an onboard chameleon generator." - origin_tech = "magnets=3;syndicate=4" flash_protect = -1 var/datum/action/item_action/chameleon/change/chameleon_action diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index b2b869edae..78718c897c 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -11,7 +11,6 @@ icon_state = "trayson-meson" item_state = "trayson-meson" actions_types = list(/datum/action/item_action/toggle_mode) - origin_tech = "materials=3;magnets=3;engineering=3;plasmatech=3" vision_flags = NONE darkness_view = 2 @@ -135,8 +134,6 @@ icon_state = "trayson-t-ray" item_state = "trayson-t-ray" desc = "Used by engineering staff to see underfloor objects such as cables and pipes." - origin_tech = "materials=3;magnets=2;engineering=2" - range = 2 modes = list(MODE_NONE = MODE_TRAY, MODE_TRAY = MODE_NONE) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 762f1e53b0..877a3bb458 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -2,7 +2,6 @@ name = "HUD" desc = "A heads-up display that provides important info in (almost) real time." flags_1 = null //doesn't protect eyes because it's a monocle, duh - origin_tech = "magnets=3;biotech=2" var/hud_type = null /obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot) @@ -34,7 +33,6 @@ name = "health scanner HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." icon_state = "healthhud" - origin_tech = "magnets=3;biotech=2" hud_type = DATA_HUD_MEDICAL_ADVANCED glass_colour_type = /datum/client_colour/glass_colour/lightblue @@ -43,7 +41,6 @@ desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness." icon_state = "healthhudnight" item_state = "glasses" - origin_tech = "magnets=4;biotech=4;plasmatech=4;engineering=5" darkness_view = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE glass_colour_type = /datum/client_colour/glass_colour/green @@ -52,7 +49,6 @@ name = "medical HUDSunglasses" desc = "Sunglasses with a medical HUD." icon_state = "sunhudmed" - origin_tech = "magnets=3;biotech=3;engineering=3" darkness_view = 1 flash_protect = 1 tint = 1 @@ -62,7 +58,6 @@ name = "diagnostic HUD" desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits." icon_state = "diagnostichud" - origin_tech = "magnets=2;engineering=2" hud_type = DATA_HUD_DIAGNOSTIC_BASIC glass_colour_type = /datum/client_colour/glass_colour/lightorange @@ -71,7 +66,6 @@ desc = "A robotics diagnostic HUD fitted with a light amplifier." icon_state = "diagnostichudnight" item_state = "glasses" - origin_tech = "magnets=4;powerstorage=4;plasmatech=4;engineering=5" darkness_view = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE glass_colour_type = /datum/client_colour/glass_colour/green @@ -80,7 +74,6 @@ name = "security HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." icon_state = "securityhud" - origin_tech = "magnets=3;combat=2" hud_type = DATA_HUD_SECURITY_ADVANCED glass_colour_type = /datum/client_colour/glass_colour/red @@ -115,7 +108,6 @@ name = "security HUDSunglasses" desc = "Sunglasses with a security HUD." icon_state = "sunhudsec" - origin_tech = "magnets=3;combat=3;engineering=3" darkness_view = 1 flash_protect = 1 tint = 1 @@ -125,7 +117,6 @@ name = "night vision security HUD" desc = "An advanced heads-up display which provides id data and vision in complete darkness." icon_state = "securityhudnight" - origin_tech = "magnets=4;combat=4;plasmatech=4;engineering=5" darkness_view = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE glass_colour_type = /datum/client_colour/glass_colour/green diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 7d15afc4e3..e7894a586c 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -21,7 +21,6 @@ flash_protect = 2 tint = 2 armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 55) - origin_tech = "materials=2;engineering=3" actions_types = list(/datum/action/item_action/toggle) flags_inv = HIDEEARS|HIDEEYES|HIDEFACE flags_cover = MASKCOVERSEYES diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 27b5462b56..e669ce3826 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -10,7 +10,6 @@ strip_delay = 70 equip_delay_other = 70 resistance_flags = FIRE_PROOF - origin_tech = "materials=3;magnets=4;engineering=4" /obj/item/clothing/shoes/magboots/verb/toggle() set name = "Toggle Magboots" @@ -51,7 +50,6 @@ icon_state = "advmag0" magboot_state = "advmag" slowdown_active = SHOES_SLOWDOWN - origin_tech = null resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/item/clothing/shoes/magboots/syndie @@ -59,4 +57,3 @@ name = "blood-red magboots" icon_state = "syndiemag0" magboot_state = "syndiemag" - origin_tech = "magnets=4;syndicate=2" diff --git a/code/modules/clothing/shoes/vg_shoes.dm b/code/modules/clothing/shoes/vg_shoes.dm index 7b42dba6fc..fb2510be89 100644 --- a/code/modules/clothing/shoes/vg_shoes.dm +++ b/code/modules/clothing/shoes/vg_shoes.dm @@ -14,7 +14,6 @@ magboot_state = "DS-magboots" icon = 'icons/obj/clothing/vg_clothes.dmi' icon_override = 'icons/mob/citadel/head.dmi' - origin_tech = null resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/item/clothing/shoes/magboots/atmos diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 2a73a40d72..899219c227 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -662,7 +662,6 @@ name = "envirosuit extinguisher cartridge" desc = "A cartridge loaded with a compressed extinguisher mix, used to refill the automatic extinguisher on plasma envirosuits." icon_state = "plasmarefill" - origin_tech = "materials=2;plasmatech=3;biotech=1" /obj/item/clothing/under/rank/security/navyblue/russian name = "russian officer's uniform" diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index e94c40a0c7..8cb27ea4f3 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -14,7 +14,6 @@ slot_flags = SLOT_BELT var/scanning = 0 var/list/log = list() - origin_tech = "engineering=4;biotech=2;programming=5" var/range = 8 var/view_check = TRUE diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index 0668ec63fb..dd7d10f896 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -22,7 +22,7 @@ /datum/round_event/pirates/announce() priority_announce("Incoming subspace communication. Secure channel opened at all communication consoles.", "Incoming Message", 'sound/ai/commandreport.ogg') - + if(!control) //Means this is false alarm, todo : explicit checks instead of using announceWhen return threat = new @@ -45,7 +45,7 @@ if(!shuttle_spawned) spawn_shuttle() - + /datum/round_event/pirates/start() if(!paid_off && !shuttle_spawned) @@ -64,7 +64,7 @@ var/turf/T = locate(x,y,z) if(!T) CRASH("Pirate event found no turf to load in") - + if(!ship.load(T)) CRASH("Loading pirate ship failed!") for(var/turf/A in ship.get_affected_turfs(T)) @@ -75,7 +75,7 @@ candidates -= M else notify_ghosts("Space pirates are waking up!", source = spawner, action=NOTIFY_ATTACK, flashwindow = FALSE) - + priority_announce("Unidentified armed ship detected near the station.") //Shuttle equipment @@ -104,7 +104,7 @@ var/siphoned = min(SSshuttle.points,siphon_per_tick) SSshuttle.points -= siphoned credits_stored += siphoned - steal_tech() + interrupt_research() else return else @@ -130,23 +130,12 @@ else dump_loot(user) -//20% to sap tech levels on unlocked consoles -/obj/machinery/shuttle_scrambler/proc/steal_tech() - if(!prob(20)) - return - var/datum/tech/target_tech = pick(subtypesof(/datum/tech)) - var/target_id = initial(target_tech.id) - for(var/obj/machinery/computer/rdconsole/C in GLOB.machines) - if(C.screen == RD_CONSOLE_LOCKED_SCREEN || C.stat & (NOPOWER|BROKEN)) - continue - var/datum/research/files = C.files - files.LowerTech(target_id,1) - new /obj/effect/temp_visual/emp(get_turf(C)) - for(var/obj/machinery/r_n_d/server/S in GLOB.machines) +//interrupt_research +/obj/machinery/shuttle_scrambler/proc/interrupt_research() + for(var/obj/machinery/rnd/server/S in GLOB.machines) if(S.stat & (NOPOWER|BROKEN)) continue - var/datum/research/files = S.files - files.LowerTech(target_id,1) + S.emp_act(1) new /obj/effect/temp_visual/emp(get_turf(S)) /obj/machinery/shuttle_scrambler/proc/dump_loot(mob/user) @@ -157,7 +146,7 @@ new /obj/item/stack/spacecash/c200(drop_location()) credits_stored -= 200 to_chat(user,"You retrieve the siphoned credits!") - + /obj/machinery/shuttle_scrambler/proc/send_notification() priority_announce("Data theft signal detected, source registered on local gps units.") diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index d746fd600e..82ba8ab405 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -5,7 +5,6 @@ item_state = "eshield0" lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - origin_tech = "syndicate=3;engineering=3" /obj/item/pizzabox name = "pizza box" diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 5b1d17182a..324a94128d 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -15,13 +15,13 @@ var/efficiency = 0 var/productivity = 0 var/max_items = 40 - var/datum/research/files + var/datum/techweb/stored_research var/list/show_categories = list("Food", "Botany Chemicals", "Leather and Cloth") var/list/timesFiveCategories = list("Food", "Botany Chemicals") /obj/machinery/biogenerator/Initialize() . = ..() - files = new /datum/research/biogenerator(src) + stored_research = new /datum/techweb/specialized/autounlocking/biogenerator create_reagents(1000) /obj/machinery/biogenerator/Destroy() @@ -124,7 +124,7 @@ to_chat(user, "You empty the plant bag into the biogenerator, filling it to its capacity.") else to_chat(user, "You fill the biogenerator to its capacity.") - return 1 //no afterattack + return TRUE //no afterattack else if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) var/i = 0 @@ -135,7 +135,7 @@ else if(user.transferItemToLoc(O, src)) to_chat(user, "You put [O.name] in [src.name]") - return 1 //no afterattack + return TRUE //no afterattack else if (istype(O, /obj/item/disk/design_disk)) user.visible_message("[user] begins to load \the [O] in \the [src]...", "You begin to load a design from \the [O]...", @@ -145,9 +145,9 @@ if(do_after(user, 10, target = src)) for(var/B in D.blueprints) if(B) - files.AddDesign2Known(B) + stored_research.add_design(B) processing = FALSE - return 1 + return TRUE else to_chat(user, "You cannot put this in [src.name]!") @@ -176,8 +176,8 @@ var/categories = show_categories.Copy() for(var/V in categories) categories[V] = list() - for(var/V in files.known_designs) - var/datum/design/D = files.known_designs[V] + for(var/V in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[V] for(var/C in categories) if(C in D.category) categories[C] += D @@ -237,16 +237,16 @@ /obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = 1) if(materials.len != 1 || materials[1] != MAT_BIOMASS) - return 0 + return FALSE if (materials[MAT_BIOMASS]*multiplier/efficiency > points) menustat = "nopoints" - return 0 + return FALSE else if(remove_points) points -= materials[MAT_BIOMASS]*multiplier/efficiency update_icon() updateUsrDialog() - return 1 + return TRUE /obj/machinery/biogenerator/proc/check_container_volume(list/reagents, multiplier = 1) var/sum_reagents = 0 @@ -256,19 +256,19 @@ if(beaker.reagents.total_volume + sum_reagents > beaker.reagents.maximum_volume) menustat = "nobeakerspace" - return 0 + return FALSE - return 1 + return TRUE /obj/machinery/biogenerator/proc/create_product(datum/design/D, amount) if(!beaker || !loc) - return 0 + return FALSE if(ispath(D.build_path, /obj/item/stack)) if(!check_container_volume(D.make_reagents, amount)) - return 0 + return FALSE if(!check_cost(D.materials, amount)) - return 0 + return FALSE var/obj/item/stack/product = new D.build_path(loc) product.amount = amount diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index d5cac19f32..d003f40d4a 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -15,7 +15,6 @@ // Saves us from having to define each stupid grown's dried_type as itself. // If you don't want a plant to be driable (watermelons) set this to null in the time definition. resistance_flags = FLAMMABLE - origin_tech = "biotech=1" /obj/item/reagent_containers/food/snacks/grown/Initialize(mapload, obj/item/seeds/new_seed) . = ..() diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index c083e508ba..4f24c19d6e 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -30,7 +30,6 @@ seed = /obj/item/seeds/ambrosia name = "ambrosia vulgaris branch" desc = "This is a plant containing various healing chemicals." - origin_tech = "biotech=2" // Ambrosia Deus /obj/item/seeds/ambrosia/deus @@ -50,7 +49,6 @@ desc = "Eating this makes you feel immortal!" icon_state = "ambrosiadeus" filling_color = "#008B8B" - origin_tech = "biotech=4;materials=3" //Ambrosia Gaia /obj/item/seeds/ambrosia/gaia @@ -72,6 +70,5 @@ desc = "Eating this makes you immortal." icon_state = "ambrosia_gaia" filling_color = rgb(255, 175, 0) - origin_tech = "biotech=6;materials=5" light_range = 3 seed = /obj/item/seeds/ambrosia/gaia diff --git a/code/modules/hydroponics/grown/apple.dm b/code/modules/hydroponics/grown/apple.dm index c70c0cd8f6..7ec9a730ed 100644 --- a/code/modules/hydroponics/grown/apple.dm +++ b/code/modules/hydroponics/grown/apple.dm @@ -56,4 +56,3 @@ desc = "Emblazoned upon the apple is the word 'Kallisti'." icon_state = "goldapple" filling_color = "#FFD700" - origin_tech = "biotech=4;materials=5" diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index a78416b6cc..bf71856323 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -107,7 +107,6 @@ item_state = "bluespace_peel" trash = /obj/item/grown/bananapeel/bluespace filling_color = "#0000FF" - origin_tech = "biotech=3;bluespace=5" /obj/item/grown/bananapeel/bluespace seed = /obj/item/seeds/banana/bluespace diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 8670cb1016..0d8c5d5a9a 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -90,7 +90,6 @@ desc = "Nutritious!" icon_state = "glowberrypile" filling_color = "#7CFC00" - origin_tech = "plasmatech=6" foodtype = FRUIT // Cherries diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index 40f158d36d..382efa2a26 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -49,7 +49,6 @@ icon_state = "icepepper" filling_color = "#0000CD" bitesize_mod = 2 - origin_tech = "biotech=4" foodtype = VEGETABLES // Ghost Chili @@ -76,7 +75,6 @@ var/mob/living/carbon/human/held_mob filling_color = "#F8F8FF" bitesize_mod = 4 - origin_tech = "biotech=4;magnets=5" foodtype = VEGETABLES /obj/item/reagent_containers/food/snacks/grown/ghost_chili/attack_hand(mob/user) diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index c65d0a3606..461a2cd74e 100644 --- a/code/modules/hydroponics/grown/misc.dm +++ b/code/modules/hydroponics/grown/misc.dm @@ -108,7 +108,6 @@ name = "gatfruit" desc = "It smells like burning." icon_state = "gatfruit" - origin_tech = "combat=6" trash = /obj/item/gun/ballistic/revolver bitesize_mod = 2 foodtype = FRUIT diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 8ea7e65684..7e0178b140 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -79,7 +79,6 @@ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("mushroomhallucinogen" = 0.04, "amatoxin" = 0.1, "nutriment" = 0, "amanitin" = 0.2) rarity = 30 - origin_tech = "biotech=5" /obj/item/reagent_containers/food/snacks/grown/mushroom/angel seed = /obj/item/seeds/angel @@ -163,7 +162,6 @@ desc = "Plumus Locomotus: The beginning of the great walk." icon_state = "walkingmushroom" filling_color = "#9370DB" - origin_tech = "biotech=4;programming=5" /obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user) if(isspaceturf(user.loc)) @@ -233,7 +231,6 @@ icon_state = "glowshroom" filling_color = "#00FA9A" var/effect_path = /obj/structure/glowshroom - origin_tech = "biotech=4;plasmatech=6" /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user) if(isspaceturf(user.loc)) @@ -280,7 +277,6 @@ icon_state = "glowcap" filling_color = "#00FA9A" effect_path = /obj/structure/glowshroom/glowcap - origin_tech = "biotech=4;powerstorage=6;plasmatech=4" //Shadowshroom @@ -304,7 +300,6 @@ desc = "Mycena Umbra: This species of mushroom emits shadow instead of light." icon_state = "shadowshroom" effect_path = /obj/structure/glowshroom/shadowshroom - origin_tech = "biotech=4;plasmatech=4;magnets=4" /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom/attack_self(mob/user) . = ..() diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index 485ab6bfd8..284f962e45 100644 --- a/code/modules/hydroponics/grown/nettle.dm +++ b/code/modules/hydroponics/grown/nettle.dm @@ -42,7 +42,6 @@ w_class = WEIGHT_CLASS_TINY throw_speed = 1 throw_range = 3 - origin_tech = "combat=3" attack_verb = list("stung") /obj/item/grown/nettle/suicide_act(mob/user) @@ -92,7 +91,6 @@ icon_state = "deathnettle" force = 30 throwforce = 15 - origin_tech = "combat=5" /obj/item/grown/nettle/death/add_juice() ..() diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index 5e33d93b28..1bc42b45c0 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -43,9 +43,9 @@ icon_state = "bloodtomato" splat_type = /obj/effect/gibspawner/generic filling_color = "#FF0000" - origin_tech = "biotech=5" foodtype = VEGETABLES | GROSS + // Blue Tomato /obj/item/seeds/tomato/blue name = "pack of blue-tomato seeds" @@ -89,7 +89,6 @@ name = "bluespace tomato" desc = "So lubricated, you might slip through space-time." icon_state = "bluespacetomato" - origin_tech = "biotech=4;bluespace=5" // Killer Tomato @@ -116,7 +115,6 @@ icon_state = "killertomato" var/awakening = 0 filling_color = "#FF0000" - origin_tech = "biotech=4;combat=5" /obj/item/reagent_containers/food/snacks/grown/tomato/killer/attack(mob/M, mob/user, def_zone) if(awakening) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 168c929ed3..59af735b01 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -40,7 +40,6 @@ w_class = WEIGHT_CLASS_NORMAL throw_speed = 2 throw_range = 3 - origin_tech = "materials=1" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") var/plank_type = /obj/item/stack/sheet/mineral/wood var/plank_name = "wooden planks" diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index cbb22bfa15..42a927f4e9 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -9,7 +9,6 @@ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' w_class = WEIGHT_CLASS_TINY slot_flags = SLOT_BELT - origin_tech = "magnets=2;biotech=2" materials = list(MAT_METAL=30, MAT_GLASS=20) // ************************************* @@ -72,7 +71,6 @@ item_state = "cultivator" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - origin_tech = "engineering=2;biotech=2" flags_1 = CONDUCT_1 force = 5 throwforce = 7 @@ -96,7 +94,6 @@ throw_speed = 3 throw_range = 4 materials = list(MAT_METAL = 15000) - origin_tech = "materials=2;combat=2" attack_verb = list("chopped", "torn", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP @@ -120,7 +117,6 @@ flags_1 = CONDUCT_1 armour_penetration = 20 slot_flags = SLOT_BACK - origin_tech = "materials=3;combat=2" attack_verb = list("chopped", "sliced", "cut", "reaped") hitsound = 'sound/weapons/bladeslice.ogg' var/swiping = FALSE diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 92b6b8abaf..54333ea35f 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -137,7 +137,6 @@ /datum/plant_gene/trait var/rate = 0.05 var/examine_line = "" - var/list/origin_tech = null var/trait_id // must be set and equal for any two traits of the same type /datum/plant_gene/trait/Copy() @@ -157,19 +156,7 @@ return TRUE /datum/plant_gene/trait/proc/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc) - if(!origin_tech) // This ugly code segment adds RnD tech levels to resulting plants. - return - - if(G.origin_tech) - var/list/tech = params2list(G.origin_tech) - for(var/t in origin_tech) - if(t in tech) - tech[t] = max(text2num(tech[t]), origin_tech[t]) - else - tech[t] = origin_tech[t] - G.origin_tech = list2params(tech) - else - G.origin_tech = list2params(origin_tech) + return /datum/plant_gene/trait/proc/on_consume(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) return @@ -195,7 +182,6 @@ // For code, see grown.dm name = "Liquid Contents" examine_line = "It has a lot of liquid contents inside." - origin_tech = list("biotech" = 5) /datum/plant_gene/trait/slip // Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery. @@ -229,7 +215,6 @@ // Multiplies max charge by (rate*1000) when used in potato power cells. name = "Electrical Activity" rate = 0.2 - origin_tech = list("powerstorage" = 5) /datum/plant_gene/trait/cell_charge/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) var/power = G.seed.potency*rate @@ -304,7 +289,6 @@ // Teleport radius is calculated as max(round(potency*rate), 1) name = "Bluespace Activity" rate = 0.1 - origin_tech = list("bluespace" = 5) /datum/plant_gene/trait/teleport/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) if(isliving(target)) diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 6951d1dd09..15f76281ef 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -27,6 +27,7 @@ return TRUE to_chat(user, "You install \the [O] into \the [src]. ") upgraded = TRUE + qdel(O) interact(user) return TRUE @@ -36,6 +37,7 @@ return TRUE to_chat(user, "You install \the [O] into \the [src]. ") can_clone = TRUE + qdel(O) interact(user) return TRUE @@ -185,7 +187,6 @@ icon_state = "upgrade_disk" item_state = "card-id" w_class = WEIGHT_CLASS_SMALL - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 4) /obj/item/disk/integrated_circuit/upgrade/advanced name = "integrated circuit printer upgrade disk - advanced designs" @@ -196,4 +197,3 @@ name = "integrated circuit printer upgrade disk - circuit cloner" desc = "Install this into your integrated circuit printer to enhance it. This one allows the printer to duplicate assemblies." icon_state = "upgrade_disk_clone" - origin_tech = list(TECH_ENGINEERING = 4, TECH_DATA = 5) diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm index 1e65a2b67d..0941c033f6 100644 --- a/code/modules/integrated_electronics/passive/power.dm +++ b/code/modules/integrated_electronics/passive/power.dm @@ -3,7 +3,6 @@ name = "power thingy" desc = "Does power stuff." complexity = 5 - origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 2, TECH_DATA = 2) category_text = "Power - Passive" /obj/item/integrated_circuit/passive/power/proc/make_energy() @@ -16,7 +15,6 @@ extended_desc = "The cell generates 1 W of power in optimal lighting conditions. Less light will result in less power being generated." icon_state = "solar_cell" complexity = 8 - origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3, TECH_DATA = 2) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH var/max_power = 30 @@ -35,7 +33,6 @@ icon_state = "led" complexity = 1 activators = list("pulse out" = IC_PINTYPE_PULSE_OUT) - origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3, TECH_DATA = 2) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH var/is_charge = FALSE @@ -60,7 +57,6 @@ from the 'equipment' power channel." icon_state = "power_relay" complexity = 7 - origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3, TECH_DATA = 2) spawn_flags = IC_SPAWN_RESEARCH var/power_amount = 50 @@ -100,7 +96,6 @@ outputs = list("volume used" = IC_PINTYPE_NUMBER, "self reference" = IC_PINTYPE_REF) activators = list() spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) var/volume = 60 var/list/fuel = list("plasma" = 10000, "welding_fuel" = 3000, "carbon" = 2000, "ethanol" = 2000, "nutriment" = 1600, "blood" = 1000) diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index aa486f8f98..2cf44be975 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -88,7 +88,6 @@ ) activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) power_draw_per_use = 40 /obj/item/integrated_circuit/input/med_scanner/do_work() @@ -123,7 +122,6 @@ ) activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_BIO = 4) power_draw_per_use = 80 /obj/item/integrated_circuit/input/adv_med_scanner/do_work() @@ -174,7 +172,6 @@ ) activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_BIO = 4) power_draw_per_use = 10 /obj/item/integrated_circuit/input/plant_scanner/do_work() @@ -271,7 +268,6 @@ "not scanned" = IC_PINTYPE_PULSE_OUT ) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_BIO = 4) power_draw_per_use = 80 /obj/item/integrated_circuit/input/examiner/do_work() @@ -479,7 +475,6 @@ "on signal sent" = IC_PINTYPE_PULSE_OUT, "on signal received" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_MAGNET = 2) power_draw_idle = 5 power_draw_per_use = 40 @@ -573,7 +568,6 @@ ) activators = list("send data" = IC_PINTYPE_PULSE_IN, "on data received" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 2) power_draw_per_use = 50 var/datum/ntnet_connection/exonet = null @@ -716,7 +710,6 @@ ) activators = list("read" = IC_PINTYPE_PULSE_IN, "on read" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 4, TECH_DATA = 4, TECH_POWER = 4, TECH_MAGNET = 3) power_draw_per_use = 1 /obj/item/integrated_circuit/input/internalbm/do_work() @@ -748,7 +741,6 @@ ) activators = list("read" = IC_PINTYPE_PULSE_IN, "on read" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 4, TECH_DATA = 4, TECH_POWER = 4, TECH_MAGNET = 3) power_draw_per_use = 1 /obj/item/integrated_circuit/input/externalbm/do_work() diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index cd43cfae19..42a55f1a1d 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -23,7 +23,6 @@ ) var/obj/item/gun/energy/installed_gun = null spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_COMBAT = 4) power_draw_per_use = 0 var/mode = FALSE @@ -172,7 +171,6 @@ outputs = list() activators = list("prime grenade" = IC_PINTYPE_PULSE_IN) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_COMBAT = 4) var/obj/item/grenade/attached_grenade var/pre_attached_grenade_type @@ -363,7 +361,6 @@ "fire" = IC_PINTYPE_PULSE_IN ) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_COMBAT = 4) power_draw_per_use = 50 var/max_w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/integrated_electronics/subtypes/memory.dm b/code/modules/integrated_electronics/subtypes/memory.dm index c7fed41847..8d187a4b2a 100644 --- a/code/modules/integrated_electronics/subtypes/memory.dm +++ b/code/modules/integrated_electronics/subtypes/memory.dm @@ -58,7 +58,6 @@ name = "large memory circuit" desc = "This big circuit can hold eight pieces of data." icon_state = "memory8" - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3) power_draw_per_use = 4 number_of_pins = 8 @@ -68,7 +67,6 @@ icon_state = "memory16" w_class = WEIGHT_CLASS_SMALL spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 4, TECH_DATA = 4) power_draw_per_use = 8 number_of_pins = 16 diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index a1ddf2eee1..ef6cc644d8 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -109,7 +109,6 @@ ) outputs = list() spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3) /obj/item/integrated_circuit/output/light/advanced/on_data_written() update_lighting() @@ -182,7 +181,6 @@ "secure day" = 'sound/voice/bsecureday.ogg', ) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_ILLEGAL = 1) /obj/item/integrated_circuit/output/sound/medbot name = "medbot sound circuit" @@ -205,7 +203,6 @@ "no" = 'sound/voice/mno.ogg', ) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 1) /obj/item/integrated_circuit/output/sound/vox name = "ai vox sound circuit" diff --git a/code/modules/integrated_electronics/subtypes/power.dm b/code/modules/integrated_electronics/subtypes/power.dm index 3647d11cdf..de9055acfa 100644 --- a/code/modules/integrated_electronics/subtypes/power.dm +++ b/code/modules/integrated_electronics/subtypes/power.dm @@ -19,7 +19,6 @@ ) activators = list("transmit" = IC_PINTYPE_PULSE_IN, "on transmit" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 4, TECH_DATA = 4, TECH_POWER = 4, TECH_MAGNET = 3) power_draw_per_use = 500 // Inefficency has to come from somewhere. var/amount_to_move = 5000 @@ -32,7 +31,6 @@ some power is lost due to ineffiency." w_class = WEIGHT_CLASS_BULKY complexity = 32 - origin_tech = list(TECH_ENGINEERING = 4, TECH_DATA = 4, TECH_POWER = 6, TECH_MAGNET = 5) power_draw_per_use = 2000 amount_to_move = 20000 diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 4fad53e746..564c3a4851 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -1,7 +1,6 @@ /obj/item/integrated_circuit/reagent category_text = "Reagent" resistance_flags = UNACIDABLE | FIRE_PROOF - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) var/volume = 0 /obj/item/integrated_circuit/reagent/Initialize() @@ -33,7 +32,6 @@ "on smoked" = IC_PINTYPE_PULSE_OUT ) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_BIO = 3) power_draw_per_use = 20 var/smoke_radius = 5 var/notified = FALSE @@ -225,7 +223,6 @@ outputs = list() activators = list("transfer reagents" = IC_PINTYPE_PULSE_IN, "on transfer" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) var/transfer_amount = 10 var/direction_mode = SYRINGE_INJECT power_draw_per_use = 10 @@ -290,8 +287,6 @@ ) activators = list() spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) - /obj/item/integrated_circuit/reagent/storage/interact(mob/user) set_pin_data(IC_OUTPUT, 2, WEAKREF(src)) @@ -310,7 +305,6 @@ complexity = 8 spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_MATERIALS = 4, TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) /obj/item/integrated_circuit/reagent/storage/cryo/Initialize() . = ..() @@ -326,7 +320,6 @@ complexity = 16 spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_MATERIALS = 3, TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) /obj/item/integrated_circuit/reagent/storage/scan name = "reagent scanner" @@ -344,7 +337,6 @@ "scan" = IC_PINTYPE_PULSE_IN ) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_MATERIALS = 3, TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) /obj/item/integrated_circuit/reagent/storage/scan/do_work() var/cont[0] @@ -379,7 +371,6 @@ "on transfer" = IC_PINTYPE_PULSE_OUT ) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 2) var/transfer_amount = 10 var/direction_mode = SYRINGE_INJECT power_draw_per_use = 10 diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm index 1c0dc470b4..ec59c3cab1 100644 --- a/code/modules/integrated_electronics/subtypes/smart.dm +++ b/code/modules/integrated_electronics/subtypes/smart.dm @@ -12,7 +12,6 @@ outputs = list("dir" = IC_PINTYPE_DIR) activators = list("calculate dir" = IC_PINTYPE_PULSE_IN, "on calculated" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_RESEARCH - origin_tech = list(TECH_ENGINEERING = 4, TECH_DATA = 5) power_draw_per_use = 40 /obj/item/integrated_circuit/smart/basic_pathfinder/do_work() diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index e208deb422..67bbd2fad9 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -4,7 +4,7 @@ /obj/var/list/req_one_access = null /obj/var/req_one_access_txt = "0" as text -//returns 1 if this mob has sufficient access to use this object +//returns TRUE if this mob has sufficient access to use this object /obj/proc/allowed(mob/M) //check if it doesn't require any access at all if(src.check_access(null)) diff --git a/code/modules/mining/equipment/lazarus_injector.dm b/code/modules/mining/equipment/lazarus_injector.dm index c7aa2a1859..1af66e37d6 100644 --- a/code/modules/mining/equipment/lazarus_injector.dm +++ b/code/modules/mining/equipment/lazarus_injector.dm @@ -14,7 +14,6 @@ var/loaded = 1 var/malfunctioning = 0 var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it - origin_tech = "biotech=4;magnets=6" /obj/item/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag) if(!loaded) diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm index 4e6bde732f..52160303cc 100644 --- a/code/modules/mining/equipment/mineral_scanner.dm +++ b/code/modules/mining/equipment/mineral_scanner.dm @@ -11,7 +11,6 @@ slot_flags = SLOT_BELT var/cooldown = 35 var/current_cooldown = 0 - origin_tech = "engineering=1;magnets=1" /obj/item/device/mining_scanner/attack_self(mob/user) if(!user.client) @@ -42,7 +41,6 @@ var/cooldown = 35 var/current_cooldown = 0 var/range = 7 - origin_tech = "engineering=3;magnets=3" /obj/item/device/t_scanner/adv_mining_scanner/lesser name = "automatic mining scanner" diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index 3b6a7e1b89..61bde60ad0 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -14,7 +14,6 @@ materials = list(MAT_METAL=2000) //one sheet, but where can you make them? var/digspeed = 40 var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg') - origin_tech = "materials=2;engineering=3" attack_verb = list("hit", "pierced", "sliced", "attacked") /obj/item/pickaxe/mini @@ -35,7 +34,6 @@ icon_state = "spickaxe" item_state = "spickaxe" digspeed = 20 //mines faster than a normal pickaxe, bought from mining vendor - origin_tech = "materials=3;engineering=4" desc = "A silver-plated pickaxe that mines slightly faster than standard-issue." force = 17 @@ -44,7 +42,6 @@ icon_state = "dpickaxe" item_state = "dpickaxe" digspeed = 14 - origin_tech = "materials=5;engineering=4" desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt." force = 19 @@ -56,7 +53,6 @@ digspeed = 25 //available from roundstart, faster than a pickaxe. digsound = list('sound/weapons/drill.ogg') hitsound = 'sound/weapons/drill.ogg' - origin_tech = "materials=2;powerstorage=2;engineering=3" desc = "An electric mining drill for the especially scrawny." /obj/item/pickaxe/drill/cyborg @@ -68,7 +64,6 @@ name = "diamond-tipped mining drill" icon_state = "diamonddrill" digspeed = 7 - origin_tech = "materials=6;powerstorage=4;engineering=4" desc = "Yours is the drill that will pierce the heavens!" /obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version! @@ -81,7 +76,6 @@ icon_state = "jackhammer" item_state = "jackhammer" digspeed = 5 //the epitome of powertools. extremely fast mining, laughs at puny walls - origin_tech = "materials=6;powerstorage=4;engineering=5;magnets=4" digsound = list('sound/weapons/sonic_jackhammer.ogg') hitsound = 'sound/weapons/sonic_jackhammer.ogg' desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls." @@ -101,7 +95,6 @@ item_state = "shovel" w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL=50) - origin_tech = "materials=2;engineering=2" attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") sharpness = IS_SHARP diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm index d72dda9657..7fa6721c0f 100644 --- a/code/modules/mining/equipment/regenerative_core.dm +++ b/code/modules/mining/equipment/regenerative_core.dm @@ -5,7 +5,6 @@ icon_state = "bottle19" desc = "Inject certain types of monster organs with this stabilizer to preserve their healing powers indefinitely." w_class = WEIGHT_CLASS_TINY - origin_tech = "biotech=3" /obj/item/hivelordstabilizer/afterattack(obj/item/organ/M, mob/user) var/obj/item/organ/regenerative_core/C = M diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm index 9edd3a44f6..ebc4816155 100644 --- a/code/modules/mining/equipment/resonator.dm +++ b/code/modules/mining/equipment/resonator.dm @@ -14,14 +14,12 @@ var/fieldlimit = 4 var/list/fields = list() var/quick_burst_mod = 0.8 - origin_tech = "magnets=3;engineering=3" /obj/item/resonator/upgraded name = "upgraded resonator" desc = "An upgraded version of the resonator that can produce more fields at once, as well as having no damage penalty for bursting a resonance field early." icon_state = "resonator_u" item_state = "resonator_u" - origin_tech = "materials=4;powerstorage=3;engineering=3;magnets=3" fieldlimit = 6 quick_burst_mod = 1 diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 1e34440d87..4f4b16e6d3 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -14,7 +14,6 @@ icon_state = "capsule" icon = 'icons/obj/mining.dmi' w_class = WEIGHT_CLASS_TINY - origin_tech = "engineering=3;bluespace=3" var/template_id = "shelter_alpha" var/datum/map_template/shelter/template var/used = FALSE @@ -71,7 +70,6 @@ /obj/item/survivalcapsule/luxury name = "luxury bluespace shelter capsule" desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace." - origin_tech = "engineering=3;bluespace=4" template_id = "shelter_beta" //Pod objects diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index 2e6459e6c4..e69c8fa05d 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -11,7 +11,6 @@ w_class = WEIGHT_CLASS_SMALL throw_speed = 3 throw_range = 5 - origin_tech = "bluespace=2" slot_flags = SLOT_BELT /obj/item/device/wormhole_jaunter/attack_self(mob/user) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 9a4918e1fa..7fdecaaeb6 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -105,8 +105,7 @@ modkit_design = /datum/design/unique_modkit/bounty /datum/design/unique_modkit - category = list("Mining Designs", "Cyborg Upgrade Modules") - req_tech = list("materials" = 12) //can't be normally obtained + category = list("Mining Designs", "Cyborg Upgrade Modules") //can't be normally obtained build_type = PROTOLATHE | MECHFAB /datum/design/unique_modkit/offensive_turf_aoe diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 757cad5e19..52416787cd 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -69,17 +69,17 @@ var/on = FALSE var/selected_material = MAT_METAL var/selected_alloy = null - var/datum/research/files + var/datum/techweb/stored_research /obj/machinery/mineral/processing_unit/Initialize() . = ..() proximity_monitor = new(src, 1) AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), INFINITY) - files = new /datum/research/smelter(src) + stored_research = new /datum/techweb/specialized/autounlocking/smelter /obj/machinery/mineral/processing_unit/Destroy() CONSOLE = null - QDEL_NULL(files) + QDEL_NULL(stored_research) return ..() /obj/machinery/mineral/processing_unit/HasProximity(atom/movable/AM) @@ -112,8 +112,8 @@ dat += "

" dat += "Smelt Alloys
" - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] dat += "[D.name] " if (selected_alloy == D.id) dat += " Smelting" @@ -156,7 +156,7 @@ /obj/machinery/mineral/processing_unit/proc/smelt_alloy() - var/datum/design/alloy = files.FindDesignByID(selected_alloy) //check if it's a valid design + var/datum/design/alloy = stored_research.isDesignResearchedID(selected_alloy) //check if it's a valid design if(!alloy) on = FALSE return @@ -174,7 +174,7 @@ /obj/machinery/mineral/processing_unit/proc/can_smelt(datum/design/D) if(D.make_reagents.len) - return 0 + return FALSE var/build_amount = SMELT_AMOUNT @@ -185,7 +185,7 @@ var/datum/material/smelter_mat = materials.materials[mat_id] if(!M || !smelter_mat) - return 0 + return FALSE build_amount = min(build_amount, round(smelter_mat.amount / M)) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 0b1a988fc2..60715ef26a 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -22,16 +22,16 @@ var/list/ore_values = list(MAT_GLASS = 1, MAT_METAL = 1, MAT_PLASMA = 15, MAT_SILVER = 16, MAT_GOLD = 18, MAT_TITANIUM = 30, MAT_URANIUM = 30, MAT_DIAMOND = 50, MAT_BLUESPACE = 50, MAT_BANANIUM = 60) var/message_sent = FALSE var/list/ore_buffer = list() - var/datum/research/files + var/datum/techweb/stored_research var/obj/item/disk/design_disk/inserted_disk /obj/machinery/mineral/ore_redemption/Initialize() . = ..() AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE),INFINITY) - files = new /datum/research/smelter(src) + stored_research = new /datum/techweb/specialized/autounlocking/smelter /obj/machinery/mineral/ore_redemption/Destroy() - QDEL_NULL(files) + QDEL_NULL(stored_research) return ..() /obj/machinery/mineral/ore_redemption/RefreshParts() @@ -70,7 +70,7 @@ /obj/machinery/mineral/ore_redemption/proc/can_smelt_alloy(datum/design/D) if(D.make_reagents.len) - return 0 + return FALSE var/build_amount = 0 @@ -80,12 +80,12 @@ var/datum/material/redemption_mat = materials.materials[mat_id] if(!M || !redemption_mat) - return 0 + return FALSE var/smeltable_sheets = Floor(redemption_mat.amount / M) if(!smeltable_sheets) - return 0 + return FALSE if(!build_amount) build_amount = smeltable_sheets @@ -215,8 +215,8 @@ data["materials"] += list(list("name" = M.name, "id" = M.id, "amount" = sheet_amount, "value" = ore_values[M.id] * point_upgrade)) data["alloys"] = list() - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] data["alloys"] += list(list("name" = D.name, "id" = D.id, "amount" = can_smelt_alloy(D))) data["diskDesigns"] = list() if(inserted_disk) @@ -299,11 +299,11 @@ if("diskUpload") var/n = text2num(params["design"]) if(inserted_disk && inserted_disk.blueprints && inserted_disk.blueprints[n]) - files.AddDesign2Known(inserted_disk.blueprints[n]) + stored_research.add_design(inserted_disk.blueprints[n]) return TRUE if("Smelt") var/alloy_id = params["id"] - var/datum/design/alloy = files.FindDesignByID(alloy_id) + var/datum/design/alloy = stored_research.isDesignResearchedID(alloy_id) if((check_access(inserted_id) || allowed(usr)) && alloy) var/smelt_amount = can_smelt_alloy(alloy) var/desired = 0 @@ -325,7 +325,7 @@ return TRUE if("SmeltAll") var/alloy_id = params["id"] - var/datum/design/alloy = files.FindDesignByID(alloy_id) + var/datum/design/alloy = stored_research.isDesignResearchedID(alloy_id) if((check_access(inserted_id) || allowed(usr)) && alloy) var/smelt_amount = can_smelt_alloy(alloy) while(smelt_amount > 0) diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 1fcb03e2b6..dbefd0419d 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -261,7 +261,6 @@ icon_state = "door_electronics" icon = 'icons/obj/module.dmi' sentience_type = SENTIENCE_MINEBOT - origin_tech = "programming=6" #undef MINEDRONE_COLLECT #undef MINEDRONE_ATTACK diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index d5529a7242..65b2b47117 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -68,7 +68,6 @@ /obj/item/ore/uranium name = "uranium ore" icon_state = "Uranium ore" - origin_tech = "materials=5" points = 30 materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/uranium @@ -76,7 +75,6 @@ /obj/item/ore/iron name = "iron ore" icon_state = "Iron ore" - origin_tech = "materials=1" points = 1 materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/metal @@ -84,7 +82,6 @@ /obj/item/ore/glass name = "sand pile" icon_state = "Glass ore" - origin_tech = "materials=1" points = 1 materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/glass @@ -135,7 +132,6 @@ /obj/item/ore/plasma name = "plasma ore" icon_state = "Plasma ore" - origin_tech = "plasmatech=2;materials=2" points = 15 materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/plasma @@ -152,7 +148,6 @@ /obj/item/ore/silver name = "silver ore" icon_state = "Silver ore" - origin_tech = "materials=3" points = 16 materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/silver @@ -160,7 +155,6 @@ /obj/item/ore/gold name = "gold ore" icon_state = "Gold ore" - origin_tech = "materials=4" points = 18 materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/gold @@ -168,7 +162,6 @@ /obj/item/ore/diamond name = "diamond ore" icon_state = "Diamond ore" - origin_tech = "materials=6" points = 50 materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/diamond @@ -176,7 +169,6 @@ /obj/item/ore/bananium name = "bananium ore" icon_state = "Clown ore" - origin_tech = "materials=4" points = 60 materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/bananium @@ -184,7 +176,6 @@ /obj/item/ore/titanium name = "titanium ore" icon_state = "Titanium ore" - origin_tech = "materials=4" points = 50 materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/mineral/titanium diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 0ee21336d4..e4d49d7b70 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/assemblies.dmi' icon_state = "mmi_empty" w_class = WEIGHT_CLASS_NORMAL - origin_tech = "biotech=2;programming=3;engineering=2" var/braintype = "Cyborg" var/obj/item/device/radio/radio = null //Let's give it a radio. var/mob/living/brain/brainmob = null //The current occupant. @@ -205,7 +204,6 @@ /obj/item/device/mmi/syndie name = "Syndicate Man-Machine Interface" desc = "Syndicate's own brand of MMI. It enforces laws designed to help Syndicate agents achieve their goals upon cyborgs and AIs created with it." - origin_tech = "biotech=4;programming=4;syndicate=2" overrides_aicore_laws = TRUE /obj/item/device/mmi/syndie/Initialize() diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index cb1cdac517..335d088f92 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -8,7 +8,6 @@ zone = "head" slot = ORGAN_SLOT_BRAIN vital = TRUE - origin_tech = "biotech=5" attack_verb = list("attacked", "slapped", "whacked") var/mob/living/brain/brainmob = null var/damaged_brain = FALSE //whether the brain organ is damaged. @@ -180,7 +179,6 @@ name = "alien brain" desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?" icon_state = "brain-x" - origin_tech = "biotech=6" ////////////////////////////////////TRAUMAS//////////////////////////////////////// diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index 3bf0525996..ef704ef136 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -6,7 +6,6 @@ GLOBAL_VAR(posibrain_notify_cooldown) icon = 'icons/obj/assemblies.dmi' icon_state = "posibrain" w_class = WEIGHT_CLASS_NORMAL - origin_tech = "biotech=3;programming=3;plasmatech=2" var/next_ask var/askDelay = 600 //one minute var/searching = FALSE diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index ae8eec5529..97d0509dfb 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -1,5 +1,4 @@ /obj/item/organ/alien - origin_tech = "biotech=5" icon_state = "xgibmid2" var/list/alien_powers = list() @@ -30,7 +29,6 @@ /obj/item/organ/alien/plasmavessel name = "plasma vessel" icon_state = "plasma" - origin_tech = "biotech=5;plasmatech=4" w_class = WEIGHT_CLASS_NORMAL zone = "chest" slot = "plasmavessel" @@ -55,7 +53,6 @@ plasma_rate = 15 /obj/item/organ/alien/plasmavessel/large/queen - origin_tech = "biotech=6;plasmatech=4" plasma_rate = 20 /obj/item/organ/alien/plasmavessel/small @@ -109,7 +106,6 @@ icon_state = "hivenode" zone = "head" slot = "hivenode" - origin_tech = "biotech=5;magnets=4;bluespace=3" w_class = WEIGHT_CLASS_TINY var/recent_queen_death = 0 //Indicates if the queen died recently, aliens are heavily weakened while this is active. alien_powers = list(/obj/effect/proc_holder/alien/whisper) @@ -162,7 +158,6 @@ icon_state = "stomach-x" zone = "mouth" slot = "resinspinner" - origin_tech = "biotech=5;materials=4" alien_powers = list(/obj/effect/proc_holder/alien/resin) @@ -171,7 +166,6 @@ icon_state = "acid" zone = "mouth" slot = "acidgland" - origin_tech = "biotech=5;materials=2;combat=2" alien_powers = list(/obj/effect/proc_holder/alien/acid) @@ -180,7 +174,6 @@ icon_state = "neurotox" zone = "mouth" slot = "neurotoxingland" - origin_tech = "biotech=5;combat=5" alien_powers = list(/obj/effect/proc_holder/alien/neurotoxin) @@ -190,5 +183,4 @@ zone = "groin" slot = "eggsac" w_class = WEIGHT_CLASS_BULKY - origin_tech = "biotech=6" alien_powers = list(/obj/effect/proc_holder/alien/lay_egg) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm index 9900133723..7a2c9e6b39 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm @@ -13,7 +13,6 @@ desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs." icon = 'icons/mob/drone.dmi' icon_state = "drone_maint_hat"//yes reuse the _hat state. - origin_tech = "programming=2;biotech=4" var/drone_type = /mob/living/simple_animal/drone //Type of drone that will be spawned /obj/item/drone_shell/New() diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm index 4e302b3d55..530a1d3ffe 100644 --- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm +++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm @@ -53,7 +53,6 @@ /obj/item/organ/body_egg/changeling_egg name = "changeling egg" desc = "Twitching and disgusting." - origin_tech = "biotech=7" // You need to be really lucky to obtain it. var/datum/mind/origin var/time diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm index 29e4d66424..5737f5f4b2 100644 --- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm +++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm @@ -123,7 +123,6 @@ flags_1 = NOBLUDGEON_1 w_class = WEIGHT_CLASS_NORMAL layer = MOB_LAYER - origin_tech = "biotech=6" var/list/banned_mobs /obj/item/asteroid/fugu_gland/afterattack(atom/target, mob/user, proximity_flag) diff --git a/code/modules/modular_computers/hardware/CPU.dm b/code/modules/modular_computers/hardware/CPU.dm index b0c56ee0ba..38b7b5dec4 100644 --- a/code/modules/modular_computers/hardware/CPU.dm +++ b/code/modules/modular_computers/hardware/CPU.dm @@ -9,7 +9,6 @@ power_usage = 50 critical = 1 malfunction_probability = 1 - origin_tech = "programming=3;engineering=2" var/max_idle_programs = 2 // 2 idle, + 1 active = 3 as said in description. device_type = MC_CPU @@ -23,7 +22,6 @@ w_class = WEIGHT_CLASS_TINY power_usage = 25 max_idle_programs = 1 - origin_tech = "programming=2;engineering=2" /obj/item/computer_hardware/processor_unit/photonic name = "photonic processor board" @@ -32,7 +30,6 @@ w_class = WEIGHT_CLASS_SMALL power_usage = 250 max_idle_programs = 4 - origin_tech = "programming=5;engineering=4" /obj/item/computer_hardware/processor_unit/photonic/small name = "photonic microprocessor" @@ -40,5 +37,4 @@ icon_state = "cpu_super" w_class = WEIGHT_CLASS_TINY power_usage = 75 - max_idle_programs = 2 - origin_tech = "programming=4;engineering=3" \ No newline at end of file + max_idle_programs = 2 \ No newline at end of file diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm index edd78839c3..4dace2b4cf 100644 --- a/code/modules/modular_computers/hardware/ai_slot.dm +++ b/code/modules/modular_computers/hardware/ai_slot.dm @@ -4,7 +4,6 @@ power_usage = 100 //W icon_state = "card_mini" w_class = WEIGHT_CLASS_SMALL - origin_tech = "programming=2" device_type = MC_AI var/obj/item/device/aicard/stored_card = null diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm index 6c3dac9b63..c6b96e3136 100644 --- a/code/modules/modular_computers/hardware/battery_module.dm +++ b/code/modules/modular_computers/hardware/battery_module.dm @@ -4,7 +4,6 @@ icon_state = "cell_con" critical = 1 malfunction_probability = 1 - origin_tech = "powerstorage=1;engineering=1" var/obj/item/stock_parts/cell/battery = null device_type = MC_CELL @@ -64,7 +63,6 @@ desc = "A standard power cell, commonly seen in high-end portable microcomputers or low-end laptops." icon = 'icons/obj/module.dmi' icon_state = "cell_mini" - origin_tech = "powerstorage=2;engineering=1" w_class = WEIGHT_CLASS_TINY maxcharge = 750 @@ -73,7 +71,6 @@ name = "advanced battery" desc = "An advanced power cell, often used in most laptops. It is too large to be fitted into smaller devices." icon_state = "cell" - origin_tech = "powerstorage=2;engineering=2" w_class = WEIGHT_CLASS_SMALL maxcharge = 1500 @@ -81,7 +78,6 @@ name = "super battery" desc = "An advanced power cell, often used in high-end laptops." icon_state = "cell" - origin_tech = "powerstorage=3;engineering=3" w_class = WEIGHT_CLASS_SMALL maxcharge = 2000 diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm index caebfb447b..3d071c47aa 100644 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ b/code/modules/modular_computers/hardware/card_slot.dm @@ -4,7 +4,6 @@ power_usage = 10 //W icon_state = "card_mini" w_class = WEIGHT_CLASS_TINY - origin_tech = "programming=2" device_type = MC_CARD var/obj/item/card/id/stored_card = null diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm index 2ad1caa951..62d8ff5d86 100644 --- a/code/modules/modular_computers/hardware/hard_drive.dm +++ b/code/modules/modular_computers/hardware/hard_drive.dm @@ -5,7 +5,6 @@ icon_state = "harddisk_mini" critical = 1 w_class = WEIGHT_CLASS_TINY - origin_tech = "programming=1;engineering=1" device_type = MC_HDD var/max_capacity = 128 var/used_capacity = 0 @@ -130,7 +129,6 @@ name = "advanced hard disk drive" desc = "A hybrid HDD, for use in higher grade computers where balance between power efficiency and capacity is desired." max_capacity = 256 - origin_tech = "programming=2;engineering=2" power_usage = 50 // Hybrid, medium capacity and medium power storage icon_state = "harddisk_mini" w_class = WEIGHT_CLASS_SMALL @@ -139,7 +137,6 @@ name = "super hard disk drive" desc = "A high capacity HDD, for use in cluster storage solutions where capacity is more important than power efficiency." max_capacity = 512 - origin_tech = "programming=3;engineering=3" power_usage = 100 // High-capacity but uses lots of power, shortening battery life. Best used with APC link. icon_state = "harddisk_mini" w_class = WEIGHT_CLASS_SMALL @@ -148,7 +145,6 @@ name = "cluster hard disk drive" desc = "A large storage cluster consisting of multiple HDDs for usage in dedicated storage systems." power_usage = 500 - origin_tech = "programming=4;engineering=4" max_capacity = 2048 icon_state = "harddisk" w_class = WEIGHT_CLASS_NORMAL @@ -158,7 +154,6 @@ name = "solid state drive" desc = "An efficient SSD for portable devices." power_usage = 10 - origin_tech = "programming=2;engineering=2" max_capacity = 64 icon_state = "ssd_mini" w_class = WEIGHT_CLASS_TINY @@ -167,7 +162,6 @@ name = "micro solid state drive" desc = "A highly efficient SSD chip for portable devices." power_usage = 2 - origin_tech = "programming=1;engineering=1" max_capacity = 32 icon_state = "ssd_micro" w_class = WEIGHT_CLASS_TINY \ No newline at end of file diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index c6d507c4ed..216d55fbd8 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -2,7 +2,6 @@ name = "network card" desc = "A basic wireless network card for usage with standard NTNet frequencies." power_usage = 50 - origin_tech = "programming=2;engineering=1" icon_state = "radio_mini" var/identification_id = null // Identification ID. Technically MAC address of this device. Can't be changed by user. var/identification_string = "" // Identification string, technically nickname seen in the network. Can be set by user. @@ -65,7 +64,6 @@ name = "advanced network card" desc = "An advanced network card for usage with standard NTNet frequencies. Its transmitter is strong enough to connect even off-station." long_range = 1 - origin_tech = "programming=4;engineering=2" power_usage = 100 // Better range but higher power usage. icon_state = "radio" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' @@ -76,7 +74,6 @@ name = "wired network card" desc = "An advanced network card for usage with standard NTNet frequencies. This one also supports wired connection." ethernet = 1 - origin_tech = "programming=5;engineering=3" power_usage = 100 // Better range but higher power usage. icon_state = "net_wired" w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/modular_computers/hardware/portable_disk.dm b/code/modules/modular_computers/hardware/portable_disk.dm index 47430f80ac..d5aa404f58 100644 --- a/code/modules/modular_computers/hardware/portable_disk.dm +++ b/code/modules/modular_computers/hardware/portable_disk.dm @@ -6,7 +6,6 @@ w_class = WEIGHT_CLASS_TINY critical = 0 max_capacity = 16 - origin_tech = "programming=1" device_type = MC_SDD /obj/item/computer_hardware/hard_drive/portable/on_install(obj/item/device/modular_computer/M, mob/living/user = null) @@ -24,7 +23,6 @@ power_usage = 20 icon_state = "datadisk5" max_capacity = 64 - origin_tech = "programming=2" /obj/item/computer_hardware/hard_drive/portable/super name = "super data disk" @@ -32,4 +30,3 @@ power_usage = 40 icon_state = "datadisk3" max_capacity = 256 - origin_tech = "programming=4" diff --git a/code/modules/modular_computers/hardware/printer.dm b/code/modules/modular_computers/hardware/printer.dm index 27eb050655..b000c353b0 100644 --- a/code/modules/modular_computers/hardware/printer.dm +++ b/code/modules/modular_computers/hardware/printer.dm @@ -2,7 +2,6 @@ name = "printer" desc = "Computer-integrated printer with paper recycling module." power_usage = 100 - origin_tech = "programming=2;engineering=2" icon_state = "printer" w_class = WEIGHT_CLASS_NORMAL device_type = MC_PRINT diff --git a/code/modules/modular_computers/hardware/recharger.dm b/code/modules/modular_computers/hardware/recharger.dm index 7096233d3a..f1c7578aa7 100644 --- a/code/modules/modular_computers/hardware/recharger.dm +++ b/code/modules/modular_computers/hardware/recharger.dm @@ -28,7 +28,6 @@ desc = "A device that wirelessly recharges connected device from nearby APC." icon_state = "charger_APC" w_class = WEIGHT_CLASS_SMALL // Can't be installed into tablets/PDAs - origin_tech = "programming=2;engineering=2;powerstorage=3" /obj/item/computer_hardware/recharger/APC/use_power(amount, charging=0) if(ismachinery(holder.physical)) @@ -52,7 +51,6 @@ desc = "A power connector that recharges connected device from nearby power wire. Incompatible with portable computers." icon_state = "charger_wire" w_class = WEIGHT_CLASS_NORMAL - origin_tech = "engineering=2;powerstorage=1" /obj/item/computer_hardware/recharger/wired/can_install(obj/item/device/modular_computer/M, mob/living/user = null) if(ismachinery(M.physical) && M.physical.anchored) diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm index 4679b5ffbd..cdae56571f 100644 --- a/code/modules/ninja/suit/ninjaDrainAct.dm +++ b/code/modules/ninja/suit/ninjaDrainAct.dm @@ -10,7 +10,7 @@ They *could* go in their appropriate files, but this is supposed to be modular */ -//Needs to return the amount drained from the atom, if no drain on a power object, return 0, otherwise, return a define. +//Needs to return the amount drained from the atom, if no drain on a power object, return FALSE, otherwise, return a define. /atom/proc/ninjadrain_act() return INVALID_DRAIN @@ -130,26 +130,15 @@ They *could* go in their appropriate files, but this is supposed to be modular to_chat(H, "Hacking \the [src]...") AI_notify_hack() - if(files && files.known_tech.len) - for(var/datum/tech/current_data in S.stored_research) - to_chat(H, "Checking \the [current_data.name] database.") - if(do_after(H, S.s_delay, target = src) && G.candrain && src) - for(var/id in files.known_tech) - var/datum/tech/analyzing_data = files.known_tech[id] - if(current_data.id == analyzing_data.id) - if(analyzing_data.level > current_data.level) - to_chat(H, "Database: UPDATED.") - current_data.level = analyzing_data.level - . = DRAIN_RD_HACKED - break//Move on to next. - else - break//Otherwise, quit processing. - + if(stored_research) + to_chat(H, "Copying files...") + if(do_after(H, S.s_delay, target = src) && G.candrain && src) + stored_research.copy_research_to(S.stored_research) to_chat(H, "Data analyzed. Process finished.") //RD SERVER// //Shamelessly copypasted from above, since these two used to be the same proc, but with MANY colon operators -/obj/machinery/r_n_d/server/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) +/obj/machinery/rnd/server/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) if(!S || !H || !G) return INVALID_DRAIN @@ -158,21 +147,10 @@ They *could* go in their appropriate files, but this is supposed to be modular to_chat(H, "Hacking \the [src]...") AI_notify_hack() - if(files && files.known_tech.len) - for(var/datum/tech/current_data in S.stored_research) - to_chat(H, "Checking \the [current_data.name] database.") - if(do_after(H, S.s_delay, target = src) && G.candrain && src) - for(var/id in files.known_tech) - var/datum/tech/analyzing_data = files.known_tech[id] - if(current_data.id == analyzing_data.id) - if(analyzing_data.level > current_data.level) - to_chat(H, "Database: UPDATED.") - current_data.level = analyzing_data.level - . = DRAIN_RD_HACKED - break//Move on to next. - else - break//Otherwise, quit processing. - + if(stored_research) + to_chat(H, "Copying files...") + if(do_after(H, S.s_delay, target = src) && G.candrain && src) + stored_research.copy_research_to(S.stored_research) to_chat(H, "Data analyzed. Process finished.") diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 128997cb98..82c7dfa0bf 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -28,7 +28,7 @@ Contents: var/mob/living/carbon/human/affecting = null var/obj/item/stock_parts/cell/cell var/datum/effect_system/spark_spread/spark_system - var/list/stored_research = list()//For stealing station research. + var/datum/techweb/stored_research var/obj/item/disk/tech_disk/t_disk//To copy design onto disk. var/obj/item/energy_katana/energyKatana //For teleporting the katana back to the ninja (It's an ability) @@ -62,14 +62,12 @@ Contents: ..() //Spark Init - spark_system = new() + spark_system = new spark_system.set_up(5, 0, src) spark_system.attach(src) //Research Init stored_research = new() - for(var/T in subtypesof(/datum/tech))//Store up on research. - stored_research += new T(src) //Cell Init cell = new/obj/item/stock_parts/cell/high @@ -97,7 +95,7 @@ Contents: //This proc prevents the suit from being taken off. /obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/human/H) if(!istype(H)) - return 0 + return FALSE if(!is_ninja(H)) to_chat(H, "fÄTaL ÈÈRRoR: 382200-*#00CÖDE RED\nUNAU?HORIZED USÈ DETÈC???eD\nCoMMÈNCING SUB-R0U?IN3 13...\nTÈRMInATING U-U-USÈR...") H.gib() diff --git a/code/modules/ninja/suit/suit_attackby.dm b/code/modules/ninja/suit/suit_attackby.dm index ce75fd6ed3..d185d596a3 100644 --- a/code/modules/ninja/suit/suit_attackby.dm +++ b/code/modules/ninja/suit/suit_attackby.dm @@ -32,26 +32,12 @@ else if(istype(I, /obj/item/disk/tech_disk))//If it's a data disk, we want to copy the research on to the suit. var/obj/item/disk/tech_disk/TD = I - var/has_research = FALSE - for(var/V in TD.tech_stored) - if(V) - has_research = TRUE - break + var/has_research = 0 if(has_research)//If it has something on it. - to_chat(U, "Research information detected, processing...") + to_chat(U, "Research information detected, processing...") if(do_after(U,s_delay, target = src)) - for(var/V1 in 1 to TD.max_tech_stored) - var/datum/tech/new_data = TD.tech_stored[V1] - TD.tech_stored[V1] = null - if(!new_data) - continue - for(var/V2 in stored_research) - var/datum/tech/current_data = V2 - if(current_data.id == new_data.id) - current_data.level = max(current_data.level, new_data.level) - break + TD.stored_research.copy_research_to(stored_research) to_chat(U, "Data analyzed and updated. Disk erased.") - else to_chat(U, "ERROR: Procedure interrupted. Process terminated.") else diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 6732bec474..0826a49c7c 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -161,7 +161,6 @@ * Sleepypens */ /obj/item/pen/sleepy - origin_tech = "engineering=4;syndicate=2" container_type = OPENCONTAINER_1 @@ -186,7 +185,6 @@ * (Alan) Edaggers */ /obj/item/pen/edagger - origin_tech = "combat=3;syndicate=1" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") //these wont show up if the pen is off var/on = FALSE diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 625f99a040..36d99c2f65 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -6,7 +6,6 @@ item_state = "cell" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - origin_tech = "powerstorage=1" force = 5 throwforce = 5 throw_speed = 2 @@ -185,7 +184,6 @@ /obj/item/stock_parts/cell/secborg name = "security borg rechargeable D battery" - origin_tech = null maxcharge = 600 //600 max charge / 100 charge per shot = six shots materials = list(MAT_GLASS=40) rating = 2.5 @@ -210,7 +208,6 @@ /obj/item/stock_parts/cell/high name = "high-capacity power cell" - origin_tech = "powerstorage=2" icon_state = "hcell" maxcharge = 10000 materials = list(MAT_GLASS=60) @@ -230,7 +227,6 @@ /obj/item/stock_parts/cell/super name = "super-capacity power cell" - origin_tech = "powerstorage=3;materials=3" icon_state = "scell" maxcharge = 20000 materials = list(MAT_GLASS=300) @@ -243,7 +239,6 @@ /obj/item/stock_parts/cell/hyper name = "hyper-capacity power cell" - origin_tech = "powerstorage=4;engineering=4;materials=4" icon_state = "hpcell" maxcharge = 30000 materials = list(MAT_GLASS=400) @@ -257,7 +252,6 @@ /obj/item/stock_parts/cell/bluespace name = "bluespace power cell" desc = "A rechargeable transdimensional power cell." - origin_tech = "powerstorage=5;bluespace=4;materials=4;engineering=4" icon_state = "bscell" maxcharge = 40000 materials = list(MAT_GLASS=600) @@ -271,7 +265,6 @@ /obj/item/stock_parts/cell/infinite name = "infinite-capacity power cell!" icon_state = "icell" - origin_tech = "powerstorage=7" maxcharge = 30000 materials = list(MAT_GLASS=1000) rating = 6 @@ -285,7 +278,6 @@ desc = "An alien power cell that produces energy seemingly out of nowhere." icon = 'icons/obj/abductor.dmi' icon_state = "cell" - origin_tech = "abductor=5;powerstorage=8;engineering=6" maxcharge = 50000 rating = 12 ratingdesc = FALSE @@ -299,7 +291,6 @@ desc = "A rechargeable starch based power cell." icon = 'icons/obj/hydroponics/harvest.dmi' icon_state = "potato" - origin_tech = "powerstorage=1;biotech=1" charge = 100 maxcharge = 300 materials = list() @@ -309,7 +300,6 @@ /obj/item/stock_parts/cell/high/slime name = "charged slime core" desc = "A yellow slime core infused with plasma, it crackles with power." - origin_tech = "powerstorage=5;biotech=4" icon = 'icons/mob/slimes.dmi' icon_state = "yellow slime extract" materials = list() diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 57ec453863..a0977d93e3 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -103,8 +103,6 @@ buckle_lying = FALSE buckle_requires_restraints = TRUE - circuit = /obj/item/circuitboard/machine/grounding_rod - /obj/machinery/power/grounding_rod/default_unfasten_wrench(mob/user, obj/item/wrench/W, time = 20) . = ..() if(. == SUCCESSFUL_UNFASTEN) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 8b88193e21..5c463b4ee9 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -75,7 +75,6 @@ // The inlet of the compressor is the direction it faces gas_contained = new inturf = get_step(src, dir) - locate_machinery() if(!turbine) stat |= BROKEN diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 50769b926e..73f8379baf 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -17,21 +17,18 @@ /obj/item/ammo_box/c9mm name = "ammo box (9mm)" icon_state = "9mmbox" - origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/c9mm max_ammo = 30 /obj/item/ammo_box/c10mm name = "ammo box (10mm)" icon_state = "10mmbox" - origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/c10mm max_ammo = 20 /obj/item/ammo_box/c45 name = "ammo box (.45)" icon_state = "45box" - origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/c45 max_ammo = 20 @@ -53,7 +50,6 @@ /obj/item/ammo_box/n762 name = "ammo box (7.62x38mmR)" icon_state = "10mmbox" - origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/n762 max_ammo = 14 diff --git a/code/modules/projectiles/boxes_magazines/external_mag.dm b/code/modules/projectiles/boxes_magazines/external_mag.dm index f288482349..09ae7cb905 100644 --- a/code/modules/projectiles/boxes_magazines/external_mag.dm +++ b/code/modules/projectiles/boxes_magazines/external_mag.dm @@ -5,7 +5,6 @@ name = "pistol magazine (10mm)" desc = "A gun magazine." icon_state = "9x19p" - origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/c10mm caliber = "10mm" max_ammo = 8 @@ -15,7 +14,6 @@ name = "rifle magazine (10mm)" desc = "A well-worn magazine fitted for the surplus rifle." icon_state = "75-8" - origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/c10mm caliber = "10mm" max_ammo = 10 @@ -129,7 +127,6 @@ /obj/item/ammo_box/magazine/smgm45 name = "SMG magazine (.45)" icon_state = "c20r45-24" - origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/c45/nostamina caliber = ".45" max_ammo = 24 @@ -148,7 +145,6 @@ /obj/item/ammo_box/magazine/m50 name = "handgun magazine (.50ae)" icon_state = "50ae" - origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/a50AE caliber = ".50" max_ammo = 7 @@ -165,7 +161,6 @@ /obj/item/ammo_box/magazine/m556 name = "toploader magazine (5.56mm)" icon_state = "5.56m" - origin_tech = "combat=5;syndicate=1" ammo_type = /obj/item/ammo_casing/a556 caliber = "a556" max_ammo = 30 @@ -176,7 +171,6 @@ desc = "A drum magazine." icon_state = "m12gs" ammo_type = /obj/item/ammo_casing/shotgun/stunslug - origin_tech = "combat=3;syndicate=1" caliber = "shotgun" max_ammo = 8 @@ -215,7 +209,6 @@ /obj/item/ammo_box/magazine/sniper_rounds name = "sniper rounds (.50)" icon_state = ".50mag" - origin_tech = "combat=6;syndicate=2" ammo_type = /obj/item/ammo_casing/p50 max_ammo = 6 caliber = ".50" @@ -230,7 +223,6 @@ name = "sniper rounds (Zzzzz)" desc = "Soporific sniper rounds, designed for happy days and dead quiet nights..." icon_state = "soporific" - origin_tech = "combat=6;syndicate=3" ammo_type = /obj/item/ammo_casing/p50/soporific max_ammo = 3 caliber = ".50" @@ -239,7 +231,6 @@ name = "sniper rounds (penetrator)" desc = "An extremely powerful round capable of passing straight through cover and anyone unfortunate enough to be behind it." ammo_type = /obj/item/ammo_casing/p50/penetrator - origin_tech = "combat=6;syndicate=3" max_ammo = 5 //// SAW MAGAZINES @@ -247,24 +238,20 @@ /obj/item/ammo_box/magazine/mm195x129 name = "box magazine (1.95x129mm)" icon_state = "a762-50" - origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/mm195x129 caliber = "mm195129" max_ammo = 50 /obj/item/ammo_box/magazine/mm195x129/hollow name = "box magazine (Hollow-Point 1.95x129mm)" - origin_tech = "combat=3" ammo_type = /obj/item/ammo_casing/mm195x129/hollow /obj/item/ammo_box/magazine/mm195x129/ap name = "box magazine (Armor Penetrating 1.95x129mm)" - origin_tech = "combat=4" ammo_type = /obj/item/ammo_casing/mm195x129/ap /obj/item/ammo_box/magazine/mm195x129/incen name = "box magazine (Incendiary 1.95x129mm)" - origin_tech = "combat=4" ammo_type = /obj/item/ammo_casing/mm195x129/incen /obj/item/ammo_box/magazine/mm195x129/update_icon() diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index f6435a954c..0afe3f0c96 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -15,9 +15,8 @@ throw_speed = 3 throw_range = 5 force = 5 - origin_tech = "combat=1" - needs_permit = 1 - unique_rename = 0 + needs_permit = TRUE + unique_rename = FALSE attack_verb = list("struck", "hit", "bashed") var/fire_sound = "gunshot" diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index b7db29084a..99a098694a 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -2,7 +2,6 @@ desc = "Now comes in flavors like GUN. Uses 10mm ammo, for some reason." name = "projectile gun" icon_state = "pistol" - origin_tech = "combat=2;materials=2" w_class = WEIGHT_CLASS_NORMAL var/spawnwithmagazine = TRUE var/mag_type = /obj/item/ammo_box/magazine/m10mm //Removes the need for max_ammo and caliber info diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 9b7b8fb2e9..eb36608e77 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -1,5 +1,4 @@ /obj/item/gun/ballistic/automatic - origin_tech = "combat=4;materials=2" w_class = WEIGHT_CLASS_NORMAL var/alarmed = 0 var/select = 1 @@ -89,7 +88,6 @@ desc = "A bullpup two-round burst .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp." icon_state = "c20r" item_state = "c20r" - origin_tech = "combat=5;materials=2;syndicate=6" mag_type = /obj/item/ammo_box/magazine/smgm45 fire_sound = 'sound/weapons/gunshot_smg.ogg' fire_delay = 2 @@ -131,7 +129,6 @@ name = "\improper Type U3 Uzi" desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds." icon_state = "mini-uzi" - origin_tech = "combat=4;materials=2;syndicate=4" mag_type = /obj/item/ammo_box/magazine/uzim9mm burst_size = 2 @@ -140,7 +137,6 @@ desc = "A three-round burst 5.56 toploading carbine, designated 'M-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off." icon_state = "m90" item_state = "m90" - origin_tech = "combat=5;materials=2;syndicate=6" mag_type = /obj/item/ammo_box/magazine/m556 fire_sound = 'sound/weapons/gunshot_smg.ogg' can_suppress = FALSE @@ -214,7 +210,6 @@ item_state = "shotgun" w_class = WEIGHT_CLASS_HUGE slot_flags = 0 - origin_tech = "combat=5;materials=1;syndicate=3" mag_type = /obj/item/ammo_box/magazine/tommygunm45 fire_sound = 'sound/weapons/gunshot_smg.ogg' can_suppress = FALSE @@ -227,7 +222,6 @@ icon_state = "arg" item_state = "arg" slot_flags = 0 - origin_tech = "combat=6;engineering=4" mag_type = /obj/item/ammo_box/magazine/m556 fire_sound = 'sound/weapons/gunshot_smg.ogg' can_suppress = FALSE @@ -243,7 +237,6 @@ item_state = "bulldog" w_class = WEIGHT_CLASS_NORMAL weapon_weight = WEAPON_MEDIUM - origin_tech = "combat=6;materials=4;syndicate=6" mag_type = /obj/item/ammo_box/magazine/m12g fire_sound = 'sound/weapons/gunshot.ogg' can_suppress = FALSE @@ -281,7 +274,6 @@ item_state = "l6closedmag" w_class = WEIGHT_CLASS_HUGE slot_flags = 0 - origin_tech = "combat=6;engineering=3;syndicate=6" mag_type = /obj/item/ammo_box/magazine/mm195x129 weapon_weight = WEAPON_HEAVY fire_sound = 'sound/weapons/gunshot_smg.ogg' @@ -361,7 +353,6 @@ mag_type = /obj/item/ammo_box/magazine/sniper_rounds fire_delay = 40 burst_size = 1 - origin_tech = "combat=7" can_unsuppress = TRUE can_suppress = TRUE w_class = WEIGHT_CLASS_NORMAL @@ -382,14 +373,12 @@ name = "syndicate sniper rifle" desc = "An illegally modified .50 cal sniper rifle with suppression compatibility. Quickscoping still doesn't work." pin = /obj/item/device/firing_pin/implant/pindicate - origin_tech = "combat=7;syndicate=6" // Old Semi-Auto Rifle // /obj/item/gun/ballistic/automatic/surplus name = "Surplus Rifle" desc = "One of countless obsolete ballistic rifles that still sees use as a cheap deterrent. Uses 10mm ammo and its bulky frame prevents one-hand firing." - origin_tech = "combat=3;materials=2" icon_state = "surplus" item_state = "moistnugget" weapon_weight = WEAPON_HEAVY diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm index f7b5b4cd61..2dc6dd9857 100644 --- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm +++ b/code/modules/projectiles/guns/ballistic/laser_gatling.dm @@ -97,7 +97,6 @@ icon = 'icons/obj/guns/minigun.dmi' icon_state = "minigun_spin" item_state = "minigun" - origin_tech = "combat=6;powerstorage=5;magnets=4" flags_1 = CONDUCT_1 slowdown = 1 slot_flags = null diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index a32d78bb2e..01e323e1a7 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -35,7 +35,6 @@ desc = "A prototype pistol designed to fire self propelled rockets." icon_state = "gyropistol" fire_sound = 'sound/weapons/grenadelaunch.ogg' - origin_tech = "combat=5" mag_type = /obj/item/ammo_box/magazine/m75 burst_size = 1 fire_delay = 0 @@ -52,7 +51,6 @@ icon_state = "speargun" item_state = "speargun" w_class = WEIGHT_CLASS_BULKY - origin_tech = "combat=4;engineering=4" force = 10 can_suppress = FALSE mag_type = /obj/item/ammo_box/magazine/internal/speargun diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 06bb452b0b..569040745f 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -3,7 +3,6 @@ desc = "A small, easily concealable 10mm handgun. Has a threaded barrel for suppressors." icon_state = "pistol" w_class = WEIGHT_CLASS_SMALL - origin_tech = "combat=3;materials=2;syndicate=4" mag_type = /obj/item/ammo_box/magazine/m10mm can_suppress = TRUE burst_size = 1 @@ -55,7 +54,6 @@ desc = "The original russian version of a widely used Syndicate sidearm. Uses 9mm ammo." icon_state = "aps" w_class = WEIGHT_CLASS_SMALL - origin_tech = "combat=3;materials=2;syndicate=3" mag_type = /obj/item/ammo_box/magazine/pistolm9mm can_suppress = FALSE burst_size = 3 @@ -66,7 +64,6 @@ name = "flat gun" desc = "A 2 dimensional gun.. what?" icon_state = "flatgun" - origin_tech = "combat=3;materials=2;abductor=3" /obj/item/gun/ballistic/automatic/pistol/stickman/pickup(mob/living/user) to_chat(user, "As you try to pick up [src], it slips out of your grip..") diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 584445a573..84aafcdb01 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -3,7 +3,6 @@ desc = "A suspicious revolver. Uses .357 ammo." //usually used by syndicates icon_state = "revolver" mag_type = /obj/item/ammo_box/magazine/internal/cylinder - origin_tech = "combat=3;materials=2" casing_ejector = FALSE /obj/item/gun/ballistic/revolver/Initialize() @@ -158,8 +157,8 @@ name = "nagant revolver" desc = "An old model of revolver that originated in Russia. Able to be suppressed. Uses 7.62x38mmR ammo." icon_state = "nagant" - origin_tech = "combat=3" can_suppress = TRUE + mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev762 @@ -169,7 +168,6 @@ /obj/item/gun/ballistic/revolver/russian name = "\improper russian revolver" desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism requiring you to spin the chamber before each trigger pull." - origin_tech = "combat=2;materials=2" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357 var/spun = FALSE diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 105e170429..650e5ec81f 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -7,7 +7,6 @@ force = 10 flags_1 = CONDUCT_1 slot_flags = SLOT_BACK - origin_tech = "combat=4;materials=2" mag_type = /obj/item/ammo_box/magazine/internal/shot casing_ejector = FALSE var/recentpump = 0 // to prevent spammage @@ -189,7 +188,6 @@ name = "combat shotgun" desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath." icon_state = "cshotgun" - origin_tech = "combat=6" mag_type = /obj/item/ammo_box/magazine/internal/shot/com w_class = WEIGHT_CLASS_HUGE @@ -197,7 +195,6 @@ name = "compact combat shotgun" desc = "A compact version of the semi automatic combat shotgun. For close encounters." icon_state = "cshotgunc" - origin_tech = "combat=4;materials=2" mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact w_class = WEIGHT_CLASS_BULKY @@ -207,7 +204,6 @@ name = "cycler shotgun" desc = "An advanced shotgun with two separate magazine tubes, allowing you to quickly toggle between ammo types." icon_state = "cycler" - origin_tech = "combat=4;materials=2" mag_type = /obj/item/ammo_box/magazine/internal/shot/tube w_class = WEIGHT_CLASS_HUGE var/toggled = FALSE diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index c251a791d0..a04d6f1b54 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -51,7 +51,6 @@ icon = 'icons/obj/guns/toy.dmi' force = 0 throwforce = 0 - origin_tech = null mag_type = /obj/item/ammo_box/magazine/internal/shot/toy clumsy_check = 0 needs_permit = 0 diff --git a/code/modules/projectiles/guns/beam_rifle.dm b/code/modules/projectiles/guns/beam_rifle.dm index 9b34d9ce0f..e1069a6bce 100644 --- a/code/modules/projectiles/guns/beam_rifle.dm +++ b/code/modules/projectiles/guns/beam_rifle.dm @@ -23,7 +23,6 @@ slot_flags = SLOT_BACK force = 15 materials = list() - origin_tech = "" recoil = 4 ammo_x_offset = 3 ammo_y_offset = 3 diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index c9ec6077aa..524f1e8f90 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -4,7 +4,6 @@ icon_state = "energy" item_state = null //so the human update icon uses the icon_state instead. ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser) - origin_tech = "combat=4;magnets=3" modifystate = 1 can_flashlight = 1 ammo_x_offset = 3 @@ -55,7 +54,6 @@ name = "\improper X-01 MultiPhase Energy Gun" desc = "This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time." icon_state = "hoslaser" - origin_tech = null force = 10 ammo_type = list(/obj/item/ammo_casing/energy/electrode/hos, /obj/item/ammo_casing/energy/laser/hos, /obj/item/ammo_casing/energy/disabler) ammo_x_offset = 4 @@ -68,7 +66,6 @@ item_state = "dragnet" lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - origin_tech = "combat=4;magnets=3;bluespace=4" ammo_type = list(/obj/item/ammo_casing/energy/net, /obj/item/ammo_casing/energy/trap) can_flashlight = 0 ammo_x_offset = 1 @@ -96,7 +93,6 @@ desc = "An energy gun with an experimental miniaturized nuclear reactor that automatically charges the internal power cell." icon_state = "nucgun" item_state = "nucgun" - origin_tech = "combat=4;magnets=4;powerstorage=4" charge_delay = 5 pin = null can_charge = 0 diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index d2261fc6f8..3b93a960ca 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -7,7 +7,6 @@ cell_type = /obj/item/stock_parts/cell/emproof needs_permit = 0 unique_rename = 1 - origin_tech = "combat=3;powerstorage=3;engineering=3" weapon_weight = WEAPON_LIGHT can_flashlight = 1 flight_x_offset = 15 @@ -213,7 +212,6 @@ desc = "An upgrade for kinetic accelerators." icon = 'icons/obj/objects.dmi' icon_state = "modkit" - origin_tech = "programming=2;materials=2;magnets=4" w_class = WEIGHT_CLASS_SMALL require_module = 1 module_type = /obj/item/robot_module/miner diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 6f916a5709..37bb252adc 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -5,7 +5,6 @@ item_state = "laser" w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL=2000) - origin_tech = "combat=4;magnets=2" ammo_type = list(/obj/item/ammo_casing/energy/lasergun) ammo_x_offset = 1 shaded_charge = 1 @@ -13,7 +12,6 @@ /obj/item/gun/energy/laser/practice name = "practice laser gun" desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice." - origin_tech = "combat=2;magnets=2" ammo_type = list(/obj/item/ammo_casing/energy/laser/practice) clumsy_check = 0 needs_permit = 0 @@ -37,7 +35,6 @@ item_state = "caplaser" desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding." force = 10 - origin_tech = null ammo_x_offset = 3 selfcharge = 1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF @@ -47,13 +44,11 @@ icon_state = "lasercannon" item_state = "laser" desc = "An industrial-grade heavy-duty laser rifle with a modified laser lens to scatter its shot into multiple smaller lasers. The inner-core can self-charge for theoretically infinite use." - origin_tech = "combat=5;materials=4;powerstorage=4" ammo_type = list(/obj/item/ammo_casing/energy/laser/scatter, /obj/item/ammo_casing/energy/laser) /obj/item/gun/energy/laser/cyborg can_charge = 0 desc = "An energy-based laser gun that draws power from the cyborg's internal energy cell directly. So this is what freedom looks like?" - origin_tech = null use_cyborg_cell = 1 /obj/item/gun/energy/laser/cyborg/emp_act() @@ -85,7 +80,6 @@ force = 10 flags_1 = CONDUCT_1 slot_flags = SLOT_BACK - origin_tech = "combat=4;magnets=4;powerstorage=3" ammo_type = list(/obj/item/ammo_casing/energy/laser/accelerator) pin = null ammo_x_offset = 3 @@ -111,7 +105,6 @@ desc = "A high-power laser gun capable of expelling concentrated x-ray blasts that pass through multiple soft targets and heavier materials." icon_state = "xray" item_state = null - origin_tech = "combat=6;materials=4;magnets=4;syndicate=1" ammo_type = list(/obj/item/ammo_casing/energy/xray) pin = null ammo_x_offset = 3 @@ -123,7 +116,6 @@ icon_state = "bluetag" desc = "A retro laser gun modified to fire harmless blue beams of light. Sound effects included!" ammo_type = list(/obj/item/ammo_casing/energy/laser/bluetag) - origin_tech = "combat=2;magnets=2" clumsy_check = 0 needs_permit = 0 pin = /obj/item/device/firing_pin/tag/blue @@ -135,7 +127,6 @@ icon_state = "redtag" desc = "A retro laser gun modified to fire harmless beams red of light. Sound effects included!" ammo_type = list(/obj/item/ammo_casing/energy/laser/redtag) - origin_tech = "combat=2;magnets=2" clumsy_check = 0 needs_permit = 0 pin = /obj/item/device/firing_pin/tag/red diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index d7c54f193d..06bda36c66 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -3,7 +3,6 @@ desc = "A man-portable anti-armor weapon designed to disable mechanical threats at range." icon_state = "ionrifle" item_state = null //so the human update icon uses the icon_state instead. - origin_tech = "combat=4;magnets=4" can_flashlight = 1 w_class = WEIGHT_CLASS_HUGE flags_1 = CONDUCT_1 @@ -31,7 +30,6 @@ name = "biological demolecularisor" desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." icon_state = "decloner" - origin_tech = "combat=4;materials=4;biotech=5;plasmatech=6" ammo_type = list(/obj/item/ammo_casing/energy/declone) pin = null ammo_x_offset = 1 @@ -48,7 +46,6 @@ icon_state = "flora" item_state = "gun" ammo_type = list(/obj/item/ammo_casing/energy/flora/yield, /obj/item/ammo_casing/energy/flora/mut) - origin_tech = "materials=2;biotech=4" modifystate = 1 ammo_x_offset = 1 selfcharge = 1 @@ -89,7 +86,6 @@ item_state = "crossbow" w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=2000) - origin_tech = "combat=4;magnets=4;syndicate=5" suppressed = TRUE ammo_type = list(/obj/item/ammo_casing/energy/bolt) weapon_weight = WEAPON_LIGHT @@ -114,7 +110,6 @@ icon_state = "crossbowlarge" w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL=4000) - origin_tech = "combat=4;magnets=4;syndicate=2" suppressed = null ammo_type = list(/obj/item/ammo_casing/energy/bolt/large) pin = null @@ -124,7 +119,6 @@ desc = "A mining tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off xenos! Or, you know, mine stuff." icon_state = "plasmacutter" item_state = "plasmacutter" - origin_tech = "combat=1;materials=3;magnets=2;plasmatech=3;engineering=1" ammo_type = list(/obj/item/ammo_casing/energy/plasma) flags_1 = CONDUCT_1 container_type = OPENCONTAINER_1 @@ -159,7 +153,6 @@ /obj/item/gun/energy/plasmacutter/adv name = "advanced plasma cutter" icon_state = "adv_plasmacutter" - origin_tech = "combat=3;materials=4;magnets=3;plasmatech=4;engineering=2" force = 15 ammo_type = list(/obj/item/ammo_casing/energy/plasma/adv) @@ -169,7 +162,6 @@ ammo_type = list(/obj/item/ammo_casing/energy/wormhole, /obj/item/ammo_casing/energy/wormhole/orange) item_state = null icon_state = "wormhole_projector" - origin_tech = "combat=4;bluespace=6;plasmatech=4;engineering=4" var/obj/effect/portal/p_blue var/obj/effect/portal/p_orange @@ -243,7 +235,6 @@ name = "temperature gun" icon_state = "freezegun" desc = "A gun that changes temperatures." - origin_tech = "combat=4;materials=4;powerstorage=3;magnets=2" ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) cell_type = "/obj/item/stock_parts/cell/high" pin = null @@ -251,7 +242,6 @@ /obj/item/gun/energy/temperature/security name = "security temperature gun" desc = "A weapon that can only be used to its full potential by the truly robust." - origin_tech = "combat=2;materials=2;powerstorage=1;magnets=1" pin = /obj/item/device/firing_pin /obj/item/gun/energy/laser/instakill @@ -261,7 +251,6 @@ desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit." ammo_type = list(/obj/item/ammo_casing/energy/instakill) force = 60 - origin_tech = "combat=7;magnets=6" /obj/item/gun/energy/laser/instakill/red desc = "A specialized ASMD laser-rifle, capable of flat-out disintegrating most targets in a single hit. This one has a red design." @@ -282,7 +271,6 @@ name = "one-point bluespace-gravitational manipulator" desc = "An experimental, multi-mode device that fires bolts of Zero-Point Energy, causing local distortions in gravity." ammo_type = list(/obj/item/ammo_casing/energy/gravityrepulse, /obj/item/ammo_casing/energy/gravityattract, /obj/item/ammo_casing/energy/gravitychaos) - origin_tech = "combat=4;magnets=4;materials=6;powerstorage=4;bluespace=4" item_state = "gravity_gun" icon_state = "gravity_gun" var/power = 4 diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 1b9532c2af..69f6a47813 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -4,7 +4,6 @@ icon_state = "taser" item_state = null //so the human update icon uses the icon_state instead. ammo_type = list(/obj/item/ammo_casing/energy/electrode) - origin_tech = "combat=3" ammo_x_offset = 3 /obj/item/gun/energy/tesla_revolver @@ -13,7 +12,6 @@ icon_state = "tesla" item_state = "tesla" ammo_type = list(/obj/item/ammo_casing/energy/tesla_revolver) - origin_tech = "combat=4;materials=4;powerstorage=4" can_flashlight = 0 pin = null shaded_charge = 1 @@ -23,7 +21,6 @@ desc = "A dual-mode taser designed to fire both short-range high-power electrodes and long-range disabler beams." icon_state = "advtaser" ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/disabler) - origin_tech = "combat=4" ammo_x_offset = 2 /obj/item/gun/energy/e_gun/advtaser/cyborg @@ -38,7 +35,6 @@ desc = "A self-defense weapon that exhausts organic targets, weakening them until they collapse." icon_state = "disabler" item_state = null - origin_tech = "combat=3" ammo_type = list(/obj/item/ammo_casing/energy/disabler) ammo_x_offset = 3 diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index 21bc12bb1f..36dc4937c5 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -16,7 +16,6 @@ var/can_charge = 1 var/ammo_type var/no_den_usage - origin_tech = null clumsy_check = 0 trigger_guard = TRIGGER_GUARD_ALLOW_ALL // Has no trigger at all, uses magic instead pin = /obj/item/device/firing_pin/magic diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index 17d2ea7cbe..b8e3c97e81 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -8,7 +8,6 @@ throw_range = 7 force = 4 materials = list(MAT_METAL=2000) - origin_tech = "combat=2;biotech=3" clumsy_check = 0 fire_sound = 'sound/items/syringeproj.ogg' var/list/syringes = list() @@ -75,7 +74,6 @@ icon_state = "syringe_pistol" item_state = "gun" //Smaller inhand w_class = WEIGHT_CLASS_SMALL - origin_tech = "combat=2;syndicate=2;biotech=3" force = 2 //Also very weak because it's smaller suppressed = TRUE //Softer fire sound can_unsuppress = FALSE //Permanently silenced @@ -83,7 +81,6 @@ /obj/item/gun/syringe/dna name = "modified syringe gun" desc = "A syringe gun that has been modified to fit DNA injectors instead of normal syringes." - origin_tech = "combat=2;syndicate=2;biotech=3" /obj/item/gun/syringe/dna/Initialize() . = ..() diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index 75066540cf..22f60c1609 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/device.dmi' icon_state = "firing_pin" item_state = "pen" - origin_tech = "materials=2;combat=4" flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY attack_verb = list("poked") @@ -79,7 +78,6 @@ desc = "This safety firing pin allows weapons to be fired within proximity to a firing range." fail_message = "TEST RANGE CHECK FAILED." pin_removeable = 1 - origin_tech = "combat=2;materials=2" /obj/item/device/firing_pin/test_range/pin_auth(mob/living/user) for(var/obj/machinery/magnetic_controller/M in range(user, 3)) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index c27e2e9ea5..df2df7c171 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -179,7 +179,6 @@ materials = list(MAT_METAL=3000) volume = 50 amount_per_transfer_from_this = 10 - origin_tech = "materials=2;engineering=3;plasmatech=3" flags_1 = OPENCONTAINER_1 /obj/item/reagent_containers/glass/beaker/noreact/Initialize() @@ -197,7 +196,6 @@ amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,20,25,30,50,100,300) flags_1 = OPENCONTAINER_1 - origin_tech = "bluespace=5;materials=4;plasmatech=4" /obj/item/reagent_containers/glass/beaker/cryoxadone list_reagents = list("cryoxadone" = 30) @@ -298,7 +296,6 @@ materials = list(MAT_GLASS=0) volume = 50 amount_per_transfer_from_this = 10 - origin_tech = null /obj/item/reagent_containers/glass/beaker/waterbottle/empty list_reagents = list() diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 869076081e..789345ca77 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -214,7 +214,6 @@ stream_range = 7 amount_per_transfer_from_this = 10 volume = 600 - origin_tech = "combat=3;materials=3;engineering=3" /obj/item/reagent_containers/spray/chemsprayer/afterattack(atom/A as mob|obj, mob/user) // Make it so the bioterror spray doesn't spray yourself when you click your inventory items diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 372cdd2ea6..87fb2b8a9e 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -243,13 +243,11 @@ desc = "An advanced syringe that can hold 60 units of chemicals." amount_per_transfer_from_this = 20 volume = 60 - origin_tech = "bluespace=4;materials=4;biotech=4" /obj/item/reagent_containers/syringe/noreact name = "cryo syringe" desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." volume = 20 - origin_tech = "materials=3;engineering=3" /obj/item/reagent_containers/syringe/noreact/Initialize() . = ..() @@ -260,4 +258,3 @@ desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units." volume = 10 proj_piercing = 1 - origin_tech = "combat=3;materials=4;engineering=5" diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 582efaa474..a66fdf7e03 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -4,7 +4,7 @@ a /datum/desgin on the linked R&D console. You can then print them out in a fasi using metal and glass, it uses glass and reagents (usually sulfuric acis). */ -/obj/machinery/r_n_d/circuit_imprinter +/obj/machinery/rnd/circuit_imprinter name = "circuit imprinter" desc = "Manufactures circuit boards for the construction of machines." icon_state = "circuit_imprinter" @@ -12,6 +12,10 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). circuit = /obj/item/circuitboard/machine/circuit_imprinter var/efficiency_coeff + var/console_link = TRUE //can this link to a console? + var/requires_console = TRUE + + var/datum/component/material_container/materials //Store for hyper speed! var/list/categories = list( "AI Modules", @@ -27,16 +31,15 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). "Computer Parts" ) +/obj/machinery/rnd/circuit_imprinter/Initialize() var/datum/component/material_container/materials - -/obj/machinery/r_n_d/circuit_imprinter/Initialize() materials = AddComponent(/datum/component/material_container, list(MAT_GLASS, MAT_GOLD, MAT_DIAMOND, MAT_METAL, MAT_BLUESPACE), 0, FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE create_reagents(0) return ..() -/obj/machinery/r_n_d/circuit_imprinter/RefreshParts() +/obj/machinery/rnd/circuit_imprinter/RefreshParts() reagents.maximum_volume = 0 for(var/obj/item/reagent_containers/glass/G in component_parts) reagents.maximum_volume += G.volume @@ -52,11 +55,11 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). T += M.rating efficiency_coeff = 2 ** (T - 1) //Only 1 manipulator here, you're making runtimes Razharas -/obj/machinery/r_n_d/circuit_imprinter/blob_act(obj/structure/blob/B) +/obj/machinery/rnd/circuit_imprinter/blob_act(obj/structure/blob/B) if (prob(50)) qdel(src) -/obj/machinery/r_n_d/circuit_imprinter/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material +/obj/machinery/rnd/circuit_imprinter/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material var/list/all_materials = being_built.reagents_list + being_built.materials GET_COMPONENT(materials, /datum/component/material_container) @@ -67,7 +70,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). return round(A / max(1, (all_materials[M]/efficiency_coeff))) //we eject the materials upon deconstruction. -/obj/machinery/r_n_d/circuit_imprinter/on_deconstruction() +/obj/machinery/rnd/circuit_imprinter/on_deconstruction() for(var/obj/item/reagent_containers/glass/G in component_parts) reagents.trans_to(G, G.reagents.maximum_volume) GET_COMPONENT(materials, /datum/component/material_container) @@ -75,6 +78,52 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). ..() -/obj/machinery/r_n_d/circuit_imprinter/disconnect_console() +/obj/machinery/rnd/circuit_imprinter/disconnect_console() linked_console.linked_imprinter = null ..() + +/obj/machinery/rnd/circuit_imprinter/proc/user_try_print_id(id) + if((!linked_console && requires_console) || !id) + return FALSE + var/datum/design/D = (linked_console || requires_console)? linked_console.stored_research.researched_designs[id] : get_techweb_design_by_id(id) + if(!istype(D)) + return FALSE + + var/power = 1000 + for(var/M in D.materials) + power += round(D.materials[M] / 5) + power = max(4000, power) + use_power(power) + + var/list/efficient_mats = list() + for(var/MAT in D.materials) + efficient_mats[MAT] = D.materials[MAT]/efficiency_coeff + + if(!materials.has_materials(efficient_mats)) + say("Not enough materials to complete prototype.") + return FALSE + for(var/R in D.reagents_list) + if(!reagents.has_reagent(R, D.reagents_list[R]/efficiency_coeff)) + say("Not enough reagents to complete prototype.") + return FALSE + + busy = TRUE + flick("circuit_imprinter_ani", src) + materials.use_amount(efficient_mats) + for(var/R in D.reagents_list) + reagents.remove_reagent(R, D.reagents_list[R]/efficiency_coeff) + + var/P = D.build_path + addtimer(CALLBACK(src, .proc/reset_busy), 16) + addtimer(CALLBACK(src, .proc/do_print, P, efficient_mats, D.dangerous_construction), 16) + return TRUE + +/obj/machinery/rnd/circuit_imprinter/proc/do_print(path, list/matlist, notify_admins) + if(notify_admins) + if(usr) + usr.investigate_log("built [path] at a circuit imprinter.", INVESTIGATE_RESEARCH) + var/turf/T = get_turf(usr) + message_admins("[key_name(usr)][ADMIN_JMP(T)] has built [path] at a circuit imprinter at [COORD(usr)]") + var/obj/item/I = new path(get_turf(src)) + I.materials = matlist.Copy() + SSblackbox.record_feedback("nested_tally", "circuit_printed", 1, list("[type]", "[path]")) diff --git a/code/modules/research/departmental_circuit_imprinter.dm b/code/modules/research/departmental_circuit_imprinter.dm new file mode 100644 index 0000000000..bd3414884f --- /dev/null +++ b/code/modules/research/departmental_circuit_imprinter.dm @@ -0,0 +1,203 @@ +/obj/machinery/rnd/circuit_imprinter/department + name = "Department Circuit Imprinter" + desc = "A special circuit imprinter with a built in interface meant for departmental usage, with built in ExoSync recievers allowing it to print designs researched that match its ROM-encoded department type. Features a bluespace materials reciever for recieving materials without the hassle of running to mining!" + icon_state = "circuit_imprinter" + container_type = OPENCONTAINER_1 + circuit = /obj/item/circuitboard/machine/circuit_imprinter/department + console_link = FALSE + requires_console = FALSE + + var/list/allowed_department_flags = DEPARTMENTAL_FLAG_ALL + var/list/datum/design/cached_designs + var/list/datum/design/matching_designs + var/department_tag = "Unidentified" //used for material distribution among other things. + var/datum/techweb/stored_research + var/datum/techweb/host_research + var/screen = DEPPRINTER_SCREEN_PRIMARY + +/obj/machinery/rnd/circuit_imprinter/department/science + allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE + department_tag = "Science" + +/obj/machinery/rnd/circuit_imprinter/department/Initialize() + . = ..() + stored_research = new + cached_designs = list() + host_research = SSresearch.science_tech + matching_designs = list() + update_research() + +/obj/machinery/rnd/circuit_imprinter/department/Destroy() + QDEL_NULL(stored_research) + return ..() + +/obj/machinery/rnd/circuit_imprinter/department/user_try_print_id(id, amount) + var/datum/design/D = get_techweb_design_by_id(id) + if(!D || !(D.departmental_flags & allowed_department_flags)) + say("Warning: Printing failed. Please update the research data with the on-screen button!") + return FALSE + . = ..() + +/obj/machinery/rnd/circuit_imprinter/department/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/rnd/circuit_imprinter/department/interact(mob/user) + user.set_machine(src) + + var/datum/browser/popup = new(user, "rndconsole", name, 460, 550) + popup.set_content(generate_ui()) + popup.open() + +/obj/machinery/rnd/circuit_imprinter/department/proc/search(string) + matching_designs.Cut() + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] + if(!(D.build_type & IMPRINTER) || !(D.departmental_flags & allowed_department_flags)) + continue + if(findtext(D.name,string)) + matching_designs.Add(D) + +/obj/machinery/rnd/circuit_imprinter/department/proc/update_research() + host_research.copy_research_to(stored_research, TRUE) + update_designs() + +/obj/machinery/rnd/circuit_imprinter/department/proc/update_designs() + cached_designs.Cut() + for(var/i in stored_research.researched_designs) + var/datum/design/d = stored_research.researched_designs[i] + if((d.departmental_flags & allowed_department_flags) && (d.build_type & IMPRINTER)) + cached_designs |= d + +/obj/machinery/rnd/circuit_imprinter/department/proc/generate_ui() + var/list/ui = list() + ui += ui_header() + switch(screen) + if(DEPPRINTER_SCREEN_MATERIALS) + ui += ui_materials() + if(DEPPRINTER_SCREEN_CHEMICALS) + ui += ui_chemicals() + if(DEPPRINTER_SCREEN_SEARCH) + ui += ui_search() + else + ui += ui_department_imprinter() + for(var/i in 1 to length(ui)) + if(!findtextEx(ui[i], RDSCREEN_NOBREAK)) + ui[i] += "
" + ui[i] = replacetextEx(ui[i], RDSCREEN_NOBREAK, "") + return ui.Join("") + +/obj/machinery/rnd/circuit_imprinter/department/proc/ui_search() //Legacy code + var/list/l = list() + l += "

Search Results:

" + l += "
\ + \ + \ + \ + \ +

" + var/coeff = efficiency_coeff + for(var/datum/design/D in matching_designs) + var/temp_materials + var/check_materials = TRUE + var/all_materials = D.materials + D.reagents_list + for(var/M in all_materials) + temp_materials += " | " + if (!check_mat(D, M)) + check_materials = FALSE + temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" + else + temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" + if (check_materials) + l += "[D.name][temp_materials]" + else + l += "[D.name][temp_materials]" + l += "
" + return l + +/obj/machinery/rnd/circuit_imprinter/department/proc/ui_department_imprinter() + var/list/l = list() + var/coeff = efficiency_coeff + l += "
\ + \ + \ + \ + \ +

" + for(var/datum/design/D in cached_designs) + var/temp_materials + var/check_materials = TRUE + var/all_materials = D.materials + D.reagents_list + for(var/M in all_materials) + temp_materials += " | " + if (!check_mat(D, M)) + check_materials = FALSE + temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" + else + temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" + if (check_materials) + l += "[D.name][temp_materials]" + else + l += "[D.name][temp_materials]" + l += "
" + return l + +/obj/machinery/rnd/circuit_imprinter/department/proc/ui_header() + var/list/l = list() + l += "

Nanotrasen Department Circuit Imprinter: [department_tag]

[RDSCREEN_NOBREAK]" + l += "
Connected Technology database: [host_research == SSresearch.science_tech? "Nanotrasen" : "Third Party"]" + l += "Security protocols: [emagged? "Disabled" : "Enabled"]" + l += "Material Amount: [materials.total_amount] / [materials.max_amount]" + l += "Chemical volume: [reagents.total_volume] / [reagents.maximum_volume]" + l += "Synchronize Research" + l += "Main Screen
[RDSCREEN_NOBREAK]" + return l + +/obj/machinery/rnd/circuit_imprinter/department/proc/ui_materials() + var/list/l = list() + l += "

Material Storage:

" + for(var/mat_id in materials.materials) + var/datum/material/M = materials.materials[mat_id] + l += "* [M.amount] of [M.name]: " + if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "Eject [RDSCREEN_NOBREAK]" + if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) l += "5x [RDSCREEN_NOBREAK]" + if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "All[RDSCREEN_NOBREAK]" + l += "" + l += "
[RDSCREEN_NOBREAK]" + return l + +/obj/machinery/rnd/circuit_imprinter/department/proc/ui_chemicals() + var/list/l = list() + l += "
Disposal All Chemicals in Storage" + l += "

Chemical Storage:

" + for(var/datum/reagent/R in reagents.reagent_list) + l += "[R.name]: [R.volume]" + l += "Purge" + l += "
" + return l + +/obj/machinery/rnd/circuit_imprinter/department/Topic(raw, ls) + if(..()) + return + add_fingerprint(usr) + usr.set_machine(src) + if(ls["switch_screen"]) + screen = text2num(ls["switch_screen"]) + if(ls["imprint"]) //Causes the circuit_imprinter to build something. + if(busy) + say("Warning: Fabricators busy!") + else + user_try_print_id(ls["imprint"]) + if(ls["search"]) //Search for designs with name matching pattern + search(ls["to_search"]) + screen = DEPPRINTER_SCREEN_SEARCH + if(ls["sync_research"]) + update_research() + say("Synchronizing research with host technology database.") + if(ls["dispose"]) //Causes the protolathe to dispose of a single reagent (all of it) + reagents.del_reagent(ls["dispose"]) + if(ls["disposeall"]) //Causes the protolathe to dispose of all it's reagents. + reagents.clear_reagents() + if(ls["ejectsheet"]) //Causes the protolathe to eject a sheet of material + materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["ejectsheet"]) diff --git a/code/modules/research/departmental_lathe.dm b/code/modules/research/departmental_lathe.dm new file mode 100644 index 0000000000..2e534195d9 --- /dev/null +++ b/code/modules/research/departmental_lathe.dm @@ -0,0 +1,247 @@ +/obj/machinery/rnd/protolathe/department + name = "department protolathe" + desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync recievers allowing it to print designs researched that match its ROM-encoded department type. Features a bluespace materials reciever for recieving materials without the hassle of running to mining!" + icon_state = "protolathe" + container_type = OPENCONTAINER_1 + circuit = /obj/item/circuitboard/machine/protolathe/department + console_link = FALSE + requires_console = FALSE + + var/list/allowed_department_flags = DEPARTMENTAL_FLAG_ALL + var/list/datum/design/cached_designs + var/list/datum/design/matching_designs + var/department_tag = "Unidentified" //used for material distribution among other things. + var/datum/techweb/stored_research + var/datum/techweb/host_research + var/screen = DEPLATHE_SCREEN_PRIMARY + +/obj/machinery/rnd/protolathe/department/engineering + allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_ENGINEERING + department_tag = "Engineering" + circuit = /obj/item/circuitboard/machine/protolathe/department/engineering + +/obj/machinery/rnd/protolathe/department/service + allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SERVICE + department_tag = "Service" + circuit = /obj/item/circuitboard/machine/protolathe/department/service + +/obj/machinery/rnd/protolathe/department/medical + allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_MEDICAL + department_tag = "Medical" + circuit = /obj/item/circuitboard/machine/protolathe/department/medical + +/obj/machinery/rnd/protolathe/department/cargo + allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_CARGO + department_tag = "Cargo" + circuit = /obj/item/circuitboard/machine/protolathe/department/cargo + +/obj/machinery/rnd/protolathe/department/science + allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE + department_tag = "Science" + circuit = /obj/item/circuitboard/machine/protolathe/department/science + +/obj/machinery/rnd/protolathe/department/security + allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SECURITY + department_tag = "Security" + circuit = /obj/item/circuitboard/machine/protolathe/department/security + +/obj/machinery/rnd/protolathe/department/Initialize() + . = ..() + matching_designs = list() + cached_designs = list() + stored_research = new + host_research = SSresearch.science_tech + update_research() + +/obj/machinery/rnd/protolathe/department/Destroy() + QDEL_NULL(stored_research) + return ..() + +/obj/machinery/rnd/protolathe/department/user_try_print_id(id, amount) + var/datum/design/D = get_techweb_design_by_id(id) + if(!D || !(D.departmental_flags & allowed_department_flags)) + say("Warning: Printing failed. Please update the research data with the on-screen button!") + return FALSE + . = ..() + +/obj/machinery/rnd/protolathe/department/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/rnd/protolathe/department/interact(mob/user) + user.set_machine(src) + var/datum/browser/popup = new(user, "rndconsole", name, 460, 550) + popup.set_content(generate_ui()) + popup.open() + +/obj/machinery/rnd/protolathe/department/proc/search(string) + matching_designs.Cut() + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] + if(!(D.build_type & PROTOLATHE) || !(D.departmental_flags & allowed_department_flags)) + continue + if(findtext(D.name,string)) + matching_designs.Add(D) + +/obj/machinery/rnd/protolathe/department/proc/update_research() + host_research.copy_research_to(stored_research, TRUE) + update_designs() + +/obj/machinery/rnd/protolathe/department/proc/update_designs() + cached_designs.Cut() + for(var/i in stored_research.researched_designs) + var/datum/design/d = stored_research.researched_designs[i] + if((d.departmental_flags & allowed_department_flags) && (d.build_type & PROTOLATHE)) + cached_designs |= d + +/obj/machinery/rnd/protolathe/department/proc/generate_ui() + var/list/ui = list() + ui += ui_header() + switch(screen) + if(DEPLATHE_SCREEN_MATERIALS) + ui += ui_materials() + if(DEPLATHE_SCREEN_CHEMICALS) + ui += ui_chemicals() + if(DEPLATHE_SCREEN_SEARCH) + ui += ui_search() + else + ui += ui_department_lathe() + for(var/i in 1 to length(ui)) + if(!findtextEx(ui[i], RDSCREEN_NOBREAK)) + ui[i] += "
" + ui[i] = replacetextEx(ui[i], RDSCREEN_NOBREAK, "") + return ui.Join("") + +/obj/machinery/rnd/protolathe/department/proc/ui_search() //Legacy code + var/list/l = list() + var/coeff = efficiency_coeff + l += "

Search Results:

" + l += "
\ + \ + \ + \ + \ +

" + for(var/datum/design/D in matching_designs) + var/temp_material + var/c = 50 + var/t + var/all_materials = D.materials + D.reagents_list + for(var/M in all_materials) + t = check_mat(D, M) + temp_material += " | " + if (t < 1) + temp_material += "[all_materials[M]*coeff] [CallMaterialName(M)]" + else + temp_material += " [all_materials[M]*coeff] [CallMaterialName(M)]" + c = min(c,t) + + if (c >= 1) + l += "[D.name][RDSCREEN_NOBREAK]" + if(c >= 5) + l += "x5[RDSCREEN_NOBREAK]" + if(c >= 10) + l += "x10[RDSCREEN_NOBREAK]" + l += "[temp_material][RDSCREEN_NOBREAK]" + else + l += "[D.name][temp_material][RDSCREEN_NOBREAK]" + l += "" + l += "" + return l + +/obj/machinery/rnd/protolathe/department/proc/ui_department_lathe() + var/list/l = list() + var/coeff = efficiency_coeff + l += "
\ + \ + \ + \ + \ +

" + for(var/datum/design/D in cached_designs) + var/temp_material + var/c = 50 + var/t + var/all_materials = D.materials + D.reagents_list + for(var/M in all_materials) + t = check_mat(D, M) + temp_material += " | " + if (t < 1) + temp_material += "[all_materials[M]*coeff] [CallMaterialName(M)]" + else + temp_material += " [all_materials[M]*coeff] [CallMaterialName(M)]" + c = min(c,t) + + if (c >= 1) + l += "[D.name][RDSCREEN_NOBREAK]" + if(c >= 5) + l += "x5[RDSCREEN_NOBREAK]" + if(c >= 10) + l += "x10[RDSCREEN_NOBREAK]" + l += "[temp_material][RDSCREEN_NOBREAK]" + else + l += "[D.name][temp_material][RDSCREEN_NOBREAK]" + l += "" + l += "" + return l + +/obj/machinery/rnd/protolathe/department/proc/ui_header() + var/list/l = list() + l += "

Nanotrasen Department Lathe: [department_tag]

[RDSCREEN_NOBREAK]" + l += "
Connected Technology database: [host_research == SSresearch.science_tech? "Nanotrasen" : "Third Party"]" + l += "Security protocols: [emagged? "Disabled" : "Enabled"]" + l += "Material Amount: [materials.total_amount] / [materials.max_amount]" + l += "Chemical volume: [reagents.total_volume] / [reagents.maximum_volume]" + l += "Synchronize Research" + l += "Main Screen
[RDSCREEN_NOBREAK]" + return l + +/obj/machinery/rnd/protolathe/department/proc/ui_materials() + var/list/l = list() + l += "

Material Storage:

" + for(var/mat_id in materials.materials) + var/datum/material/M = materials.materials[mat_id] + l += "* [M.amount] of [M.name]: " + if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "Eject [RDSCREEN_NOBREAK]" + if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) l += "5x [RDSCREEN_NOBREAK]" + if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "All[RDSCREEN_NOBREAK]" + l += "" + l += "
[RDSCREEN_NOBREAK]" + return l + +/obj/machinery/rnd/protolathe/department/proc/ui_chemicals() + var/list/l = list() + l += "
Disposal All Chemicals in Storage" + l += "

Chemical Storage:

" + for(var/datum/reagent/R in reagents.reagent_list) + l += "[R.name]: [R.volume]" + l += "Purge" + l += "
" + return l + +/obj/machinery/rnd/protolathe/department/Topic(raw, ls) + if(..()) + return + add_fingerprint(usr) + usr.set_machine(src) + if(ls["switch_screen"]) + screen = text2num(ls["switch_screen"]) + if(ls["build"]) //Causes the Protolathe to build something. + if(busy) + say("Warning: Fabricators busy!") + else + user_try_print_id(ls["build"], ls["amount"]) + if(ls["search"]) //Search for designs with name matching pattern + search(ls["to_search"]) + screen = DEPLATHE_SCREEN_SEARCH + if(ls["sync_research"]) + update_research() + say("Synchronizing research with host technology database.") + if(ls["dispose"]) //Causes the protolathe to dispose of a single reagent (all of it) + reagents.del_reagent(ls["dispose"]) + if(ls["disposeall"]) //Causes the protolathe to dispose of all it's reagents. + reagents.clear_reagents() + if(ls["ejectsheet"]) //Causes the protolathe to eject a sheet of material + materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["ejectsheet"]) + updateUsrDialog() diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index d2b587cc68..51c6538adb 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -26,11 +26,12 @@ other types of metals and chemistry for reagents). - Add the AUTOLATHE tag to */ +//DESIGNS ARE GLOBAL. DO NOT CREATE OR DESTROY THEM AT RUNTIME OUTSIDE OF INIT, JUST REFERENCE THEM TO WHATEVER YOU'RE DOING! + /datum/design //Datum for object designs, used in construction var/name = "Name" //Name of the created object. var/desc = "Desc" //Description of the created object. - var/id = "id" //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols - var/list/req_tech = list() //IDs of that techs the object originated from and the minimum level requirements. + var/id = DESIGN_ID_IGNORE //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols var/build_type = null //Flag as to what kind machine the design is built in. See defines. var/list/materials = list() //List of materials. Format: "id" = amount. var/construction_time //Amount of time required for building the object @@ -40,7 +41,12 @@ other types of metals and chemistry for reagents). var/list/reagents_list = list() //List of reagents. Format: "id" = amount. var/maxstack = 1 var/lathe_time_factor = 1 //How many times faster than normal is this to build on the protolathe + var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed. + var/departmental_flags = NONE //bitflags for deplathes. +/datum/design/Destroy() + CRASH("DESIGN DATUMS SHOULD NOT EVER BE DESTROYED AS THEY ARE ONLY MEANT TO BE IN A GLOBAL LIST AND REFERENCED FOR US.") + return ..() //////////////////////////////////////// //Disks for transporting design datums// @@ -66,609 +72,3 @@ other types of metals and chemistry for reagents). desc = "A disk for storing device design data for construction in lathes. This one has extra storage space." materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER = 50) max_blueprints = 5 - -/////////////////////////////////// -/////Non-Board Computer Stuff////// -/////////////////////////////////// - -/datum/design/intellicard - name = "Intellicard AI Transportation System" - desc = "Allows for the construction of an intellicard." - id = "intellicard" - req_tech = list("programming" = 3, "materials" = 3) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 1000, MAT_GOLD = 200) - build_path = /obj/item/device/aicard - category = list("Electronics") - -/datum/design/paicard - name = "Personal Artificial Intelligence Card" - desc = "Allows for the construction of a pAI Card." - id = "paicard" - req_tech = list("programming" = 2) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 500, MAT_METAL = 500) - build_path = /obj/item/device/paicard - category = list("Electronics") - -/datum/design/integrated_printer - name = "Integrated circuits printer" - desc = "This machine provides all neccesary things for circuitry." - id = "icprinter" - req_tech = list("programming" = 2,"materials" = 2, "engineering" = 3) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 5000, MAT_METAL = 5000) - build_path = /obj/item/device/integrated_circuit_printer - category = list("Electronics") - -/datum/design/advupdisk - name = "Upgrade disk-advanced circuits" - desc = "Upgrade disk for integrated circuits printer.Allows advanced designs." - id = "udiskadv" - req_tech = list("programming" = 3, "engineering" = 3) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 500, MAT_METAL = 500) - build_path = /obj/item/disk/integrated_circuit/upgrade/advanced - category = list("Electronics") - -/datum/design/cloneupisk - name = "Upgrade disk-assembly cloning" - desc = "Upgrade disk for integrated circuits printer.Allows assembly cloning." - id = "udiskclone" - req_tech = list("programming" = 4, "engineering" = 4) - build_type = PROTOLATHE - materials = list(MAT_GLASS = 500, MAT_METAL = 500) - build_path = /obj/item/disk/integrated_circuit/upgrade/clone - category = list("Electronics") - -//////////////////////////////////////// -//////////Disk Construction Disks/////// -//////////////////////////////////////// -/datum/design/design_disk - name = "Design Storage Disk" - desc = "Produce additional disks for storing device designs." - id = "design_disk" - req_tech = list("programming" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list(MAT_METAL = 300, MAT_GLASS = 100) - build_path = /obj/item/disk/design_disk - category = list("Electronics") - -/datum/design/design_disk_adv - name = "Advanced Design Storage Disk" - desc = "Produce additional disks for storing device designs." - id = "design_disk_adv" - req_tech = list("programming" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50) - build_path = /obj/item/disk/design_disk/adv - category = list("Electronics") - -/datum/design/tech_disk - name = "Technology Data Storage Disk" - desc = "Produce additional disks for storing technology data." - id = "tech_disk" - req_tech = list("programming" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list(MAT_METAL = 300, MAT_GLASS = 100) - build_path = /obj/item/disk/tech_disk - category = list("Electronics") - -/datum/design/tech_disk_adv - name = "Advanced Technology Data Storage Disk" - desc = "Produce disks with extra storage capacity for storing technology data." - id = "tech_disk_adv" - req_tech = list("programming" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50) - build_path = /obj/item/disk/tech_disk/adv - category = list("Electronics") - -/datum/design/tech_disk_super_adv - name = "Quantum Technology Data Storage Disk" - desc = "Produce disks with extremely large storage capacity for storing technology data." - id = "tech_disk_super_adv" - req_tech = list("programming" = 6) - build_type = PROTOLATHE - materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=100, MAT_GOLD=100, MAT_BLUESPACE = 100) - build_path = /obj/item/disk/tech_disk/super_adv - category = list("Electronics") - -///////////////////////////////////////// -/////////////////Mining////////////////// -///////////////////////////////////////// - -/datum/design/drill - name = "Mining Drill" - desc = "Yours is the drill that will pierce through the rock walls." - id = "drill" - req_tech = list("materials" = 2, "powerstorage" = 2, "engineering" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 6000, MAT_GLASS = 1000) //expensive, but no need for miners. - build_path = /obj/item/pickaxe/drill - category = list("Mining Designs") - -/datum/design/drill_diamond - name = "Diamond-Tipped Mining Drill" - desc = "Yours is the drill that will pierce the heavens!" - id = "drill_diamond" - req_tech = list("materials" = 6, "powerstorage" = 5, "engineering" = 5) - build_type = PROTOLATHE - materials = list(MAT_METAL = 6000, MAT_GLASS = 1000, MAT_DIAMOND = 2000) //Yes, a whole diamond is needed. - build_path = /obj/item/pickaxe/drill/diamonddrill - category = list("Mining Designs") - -/datum/design/plasmacutter - name = "Plasma Cutter" - desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff." - id = "plasmacutter" - req_tech = list("materials" = 3, "plasmatech" = 3, "magnets" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 1500, MAT_GLASS = 500, MAT_PLASMA = 400) - build_path = /obj/item/gun/energy/plasmacutter - category = list("Mining Designs") - -/datum/design/plasmacutter_adv - name = "Advanced Plasma Cutter" - desc = "It's an advanced plasma cutter, oh my god." - id = "plasmacutter_adv" - req_tech = list("materials" = 4, "plasmatech" = 4, "engineering" = 2, "combat" = 3, "magnets" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_PLASMA = 2000, MAT_GOLD = 500) - build_path = /obj/item/gun/energy/plasmacutter/adv - category = list("Mining Designs") - -/datum/design/jackhammer - name = "Sonic Jackhammer" - desc = "Essentially a handheld planet-cracker. Can drill through walls with ease as well." - id = "jackhammer" - req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 6, "magnets" = 5) - build_type = PROTOLATHE - materials = list(MAT_METAL = 6000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_DIAMOND = 6000) - build_path = /obj/item/pickaxe/drill/jackhammer - category = list("Mining Designs") - -/datum/design/superresonator - name = "Upgraded Resonator" - desc = "An upgraded version of the resonator that allows more fields to be active at once." - id = "superresonator" - req_tech = list("materials" = 4, "powerstorage" = 3, "engineering" = 3, "magnets" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 4000, MAT_GLASS = 1500, MAT_SILVER = 1000, MAT_URANIUM = 1000) - build_path = /obj/item/resonator/upgraded - category = list("Mining Designs") - -/datum/design/trigger_guard_mod - name = "Kinetic Accelerator Trigger Guard Mod" - desc = "A device which allows kinetic accelerators to be wielded by any organism." - id = "triggermod" - req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) - build_path = /obj/item/borg/upgrade/modkit/trigger_guard - category = list("Mining Designs") - -/datum/design/damage_mod - name = "Kinetic Accelerator Damage Mod" - desc = "A device which allows kinetic accelerators to deal more damage." - id = "damagemod" - req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) - build_type = PROTOLATHE | MECHFAB - materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) - build_path = /obj/item/borg/upgrade/modkit/damage - category = list("Mining Designs", "Cyborg Upgrade Modules") - -/datum/design/cooldown_mod - name = "Kinetic Accelerator Cooldown Mod" - desc = "A device which decreases the cooldown of a Kinetic Accelerator." - id = "cooldownmod" - req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) - build_type = PROTOLATHE | MECHFAB - materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) - build_path = /obj/item/borg/upgrade/modkit/cooldown - category = list("Mining Designs", "Cyborg Upgrade Modules") - -/datum/design/range_mod - name = "Kinetic Accelerator Range Mod" - desc = "A device which allows kinetic accelerators to fire at a further range." - id = "rangemod" - req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) - build_type = PROTOLATHE | MECHFAB - materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) - build_path = /obj/item/borg/upgrade/modkit/range - category = list("Mining Designs", "Cyborg Upgrade Modules") - -/datum/design/hyperaccelerator - name = "Kinetic Accelerator Mining AoE Mod" - desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts that destroy rock." - id = "hypermod" - req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4) - build_type = PROTOLATHE | MECHFAB - materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) - build_path = /obj/item/borg/upgrade/modkit/aoe/turfs - category = list("Mining Designs", "Cyborg Upgrade Modules") - - -///////////////////////////////////////// -//////////////Blue Space///////////////// -///////////////////////////////////////// - -/datum/design/beacon - name = "Tracking Beacon" - desc = "A blue space tracking beacon." - id = "beacon" - req_tech = list("bluespace" = 1) - build_type = PROTOLATHE - materials = list(MAT_METAL = 150, MAT_GLASS = 100) - build_path = /obj/item/device/radio/beacon - category = list("Bluespace Designs") - -/datum/design/bag_holding - name = "Bag of Holding" - desc = "A backpack that opens into a localized pocket of bluespace." - id = "bag_holding" - req_tech = list("bluespace" = 7, "materials" = 5, "engineering" = 5, "plasmatech" = 6) - build_type = PROTOLATHE - materials = list(MAT_GOLD = 3000, MAT_DIAMOND = 1500, MAT_URANIUM = 250, MAT_BLUESPACE = 2000) - build_path = /obj/item/storage/backpack/holding - category = list("Bluespace Designs") - -/datum/design/bluespace_crystal - name = "Artificial Bluespace Crystal" - desc = "A small blue crystal with mystical properties." - id = "bluespace_crystal" - req_tech = list("bluespace" = 3, "materials" = 6, "plasmatech" = 4) - build_type = PROTOLATHE - materials = list(MAT_DIAMOND = 1500, MAT_PLASMA = 1500) - build_path = /obj/item/ore/bluespace_crystal/artificial - category = list("Bluespace Designs") - -/datum/design/telesci_gps - name = "GPS Device" - desc = "Little thingie that can track its position at all times." - id = "telesci_gps" - req_tech = list("materials" = 2, "bluespace" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 1000) - build_path = /obj/item/device/gps - category = list("Bluespace Designs") - -/datum/design/miningsatchel_holding - name = "Mining Satchel of Holding" - desc = "A mining satchel that can hold an infinite amount of ores." - id = "minerbag_holding" - req_tech = list("bluespace" = 4, "materials" = 3, "engineering" = 4) - build_type = PROTOLATHE - materials = list(MAT_GOLD = 250, MAT_URANIUM = 500) //quite cheap, for more convenience - build_path = /obj/item/storage/bag/ore/holding - category = list("Bluespace Designs") - - -///////////////////////////////////////// -/////////////////HUDs//////////////////// -///////////////////////////////////////// - -/datum/design/health_hud - name = "Health Scanner HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." - id = "health_hud" - req_tech = list("biotech" = 2, "magnets" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 500) - build_path = /obj/item/clothing/glasses/hud/health - category = list("Equipment") - -/datum/design/health_hud_night - name = "Night Vision Health Scanner HUD" - desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness." - id = "health_hud_night" - req_tech = list("biotech" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 6) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_SILVER = 350) - build_path = /obj/item/clothing/glasses/hud/health/night - category = list("Equipment") - -/datum/design/security_hud - name = "Security HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status." - id = "security_hud" - req_tech = list("magnets" = 3, "combat" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 500) - build_path = /obj/item/clothing/glasses/hud/security - category = list("Equipment") - -/datum/design/security_hud_night - name = "Night Vision Security HUD" - desc = "A heads-up display which provides id data and vision in complete darkness." - id = "security_hud_night" - req_tech = list("combat" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 6) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_GOLD = 350) - build_path = /obj/item/clothing/glasses/hud/security/night - category = list("Equipment") - -/datum/design/diagnostic_hud - name = "Diagnostic HUD" - desc = "A HUD used to analyze and determine faults within robotic machinery." - id = "dianostic_hud" - req_tech = list("magnets" = 3, "engineering" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 500) - build_path = /obj/item/clothing/glasses/hud/diagnostic - category = list("Equipment") - -/datum/design/diagnostic_hud_night - name = "Night Vision Diagnostic HUD" - desc = "Upgraded version of the diagnostic HUD designed to function during a power failure." - id = "dianostic_hud_night" - req_tech = list("magnets" = 5, "plasmatech" = 4, "engineering" = 6, "powerstorage" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_PLASMA = 300) - build_path = /obj/item/clothing/glasses/hud/diagnostic/night - category = list("Equipment") - -///////////////////////////////////////// -//////////////////Test/////////////////// -///////////////////////////////////////// - - /* test - name = "Test Design" - desc = "A design to test the new protolathe." - id = "protolathe_test" - build_type = PROTOLATHE - req_tech = list("materials" = 1) - materials = list(MAT_GOLD = 3000, "iron" = 15, "copper" = 10, MAT_SILVER = 2500) - build_path = /obj/item/banhammer" - category = list("Weapons") */ - -///////////////////////////////////////// -//////////////////Misc/////////////////// -///////////////////////////////////////// - -/datum/design/welding_mask - name = "Welding Gas Mask" - desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd." - id = "weldingmask" - req_tech = list("materials" = 2, "engineering" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 3000, MAT_GLASS = 1000) - build_path = /obj/item/clothing/mask/gas/welding - category = list("Equipment") - -/datum/design/portaseeder - name = "Portable Seed Extractor" - desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant." - build_type = PROTOLATHE - req_tech = list("biotech" = 3, "engineering" = 2) - materials = list(MAT_METAL = 1000, MAT_GLASS = 400) - build_path = /obj/item/storage/bag/plants/portaseeder - category = list("Equipment") - -/datum/design/air_horn - name = "Air Horn" - desc = "Damn son, where'd you find this?" - id = "air_horn" - req_tech = list("materials" = 4, "engineering" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 4000, MAT_BANANIUM = 1000) - build_path = /obj/item/bikehorn/airhorn - category = list("Equipment") - -/datum/design/mesons - name = "Optical Meson Scanners" - desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." - id = "mesons" - req_tech = list("magnets" = 2, "engineering" = 2, "plasmatech" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 500) - build_path = /obj/item/clothing/glasses/meson - category = list("Equipment") - -/datum/design/engine_goggles - name = "Engineering Scanner Goggles" - desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes." - id = "engine_goggles" - req_tech = list("materials" = 4, "magnets" = 3, "engineering" = 4, "plasmatech" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_PLASMA = 100) - build_path = /obj/item/clothing/glasses/meson/engine - category = list("Equipment") - -/datum/design/tray_goggles - name = "Optical T-Ray Scanners" - desc = "Used by engineering staff to see underfloor objects such as cables and pipes." - id = "tray_goggles" - req_tech = list("materials" = 3, "magnets" = 2, "engineering" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 500) - build_path = /obj/item/clothing/glasses/meson/engine/tray - category = list("Equipment") - -/datum/design/nvgmesons - name = "Night Vision Optical Meson Scanners" - desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display." - id = "nvgmesons" - req_tech = list("magnets" = 5, "plasmatech" = 5, "engineering" = 6) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000) - build_path = /obj/item/clothing/glasses/meson/night - category = list("Equipment") - -/datum/design/night_vision_goggles - name = "Night Vision Goggles" - desc = "Goggles that let you see through darkness unhindered." - id = "night_visision_goggles" - req_tech = list("materials" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 5) - build_type = PROTOLATHE - materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000) - build_path = /obj/item/clothing/glasses/night - category = list("Equipment") - -/datum/design/magboots - name = "Magnetic Boots" - desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle." - id = "magboots" - req_tech = list("materials" = 4, "magnets" = 4, "engineering" = 5) - build_type = PROTOLATHE - materials = list(MAT_METAL = 4500, MAT_SILVER = 1500, MAT_GOLD = 2500) - build_path = /obj/item/clothing/shoes/magboots - category = list("Equipment") - -/datum/design/sci_goggles - name = "Science Goggles" - desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine." - id = "scigoggles" - req_tech = list("magnets" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 500) - build_path = /obj/item/clothing/glasses/science - category = list("Equipment") - -/datum/design/handdrill - name = "Hand Drill" - desc = "A small electric hand drill with an interchangeable screwdriver and bolt bit" - id = "handdrill" - req_tech = list("materials" = 4, "engineering" = 6) - build_type = PROTOLATHE - materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500) - build_path = /obj/item/screwdriver/power - category = list("Equipment") - -/datum/design/jawsoflife - name = "Jaws of Life" - desc = "A small, compact Jaws of Life with an interchangeable pry jaws and cutting jaws" - id = "jawsoflife" - req_tech = list("materials" = 4, "engineering" = 6, "magnets" = 6) // added one more requirment since the Jaws of Life are a bit OP - build_path = /obj/item/crowbar/power - build_type = PROTOLATHE - materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500) - category = list("Equipment") - -/datum/design/alienwrench - name = "Alien Wrench" - desc = "An advanced wrench obtained through Abductor technology." - id = "alien_wrench" - req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) - build_path = /obj/item/wrench/abductor - build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) - category = list("Equipment") - -/datum/design/alienwirecutters - name = "Alien Wirecutters" - desc = "Advanced wirecutters obtained through Abductor technology." - id = "alien_wirecutters" - req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) - build_path = /obj/item/wirecutters/abductor - build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) - category = list("Equipment") - -/datum/design/alienscrewdriver - name = "Alien Screwdriver" - desc = "An advanced screwdriver obtained through Abductor technology." - id = "alien_screwdriver" - req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) - build_path = /obj/item/screwdriver/abductor - build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) - category = list("Equipment") - -/datum/design/aliencrowbar - name = "Alien Crowbar" - desc = "An advanced crowbar obtained through Abductor technology." - id = "alien_crowbar" - req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) - build_path = /obj/item/crowbar/abductor - build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) - category = list("Equipment") - -/datum/design/alienwelder - name = "Alien Welding Tool" - desc = "An advanced welding tool obtained through Abductor technology." - id = "alien_welder" - req_tech = list("engineering" = 5, "plasmatech" = 5, "abductor" = 4) - build_path = /obj/item/weldingtool/abductor - build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) - category = list("Equipment") - -/datum/design/alienmultitool - name = "Alien Multitool" - desc = "An advanced multitool obtained through Abductor technology." - id = "alien_multitool" - req_tech = list("engineering" = 5, "programming" = 5, "abductor" = 4) - build_path = /obj/item/device/multitool/abductor - build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) - category = list("Equipment") - -/datum/design/diskplantgene - name = "Plant Data Disk" - desc = "A disk for storing plant genetic data." - id = "diskplantgene" - req_tech = list("programming" = 4, "biotech" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL=200, MAT_GLASS=100) - build_path = /obj/item/disk/plantgene - category = list("Electronics") - -///////////////////////////////////////// -////////////Janitor Designs////////////// -///////////////////////////////////////// - -/datum/design/advmop - name = "Advanced Mop" - desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals." - id = "advmop" - req_tech = list("materials" = 4, "engineering" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 2500, MAT_GLASS = 200) - build_path = /obj/item/mop/advanced - category = list("Equipment") - -/datum/design/blutrash - name = "Trashbag of Holding" - desc = "An advanced trash bag with bluespace properties; capable of holding a plethora of garbage." - id = "blutrash" - req_tech = list("materials" = 5, "bluespace" = 4, "engineering" = 4, "plasmatech" = 3) - build_type = PROTOLATHE - materials = list(MAT_GOLD = 1500, MAT_URANIUM = 250, MAT_PLASMA = 1500) - build_path = /obj/item/storage/bag/trash/bluespace - category = list("Equipment") - -/datum/design/buffer - name = "Floor Buffer Upgrade" - desc = "A floor buffer that can be attached to vehicular janicarts." - id = "buffer" - req_tech = list("materials" = 4, "engineering" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 3000, MAT_GLASS = 200) - build_path = /obj/item/janiupgrade - category = list("Equipment") - -/datum/design/holosign - name = "Holographic Sign Projector" - desc = "A holograpic projector used to project various warning signs." - id = "holosign" - req_tech = list("programming" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_GLASS = 1000) - build_path = /obj/item/holosign_creator - category = list("Equipment") - -///////////////////////////////////////// -////////////Tools////////////// -///////////////////////////////////////// - -/datum/design/exwelder - name = "Experimental Welding Tool" - desc = "An experimental welder capable of self-fuel generation." - id = "exwelder" - req_tech = list("materials" = 4, "engineering" = 5, "bluespace" = 3, "plasmatech" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_PLASMA = 1500, MAT_URANIUM = 200) - build_path = /obj/item/weldingtool/experimental - category = list("Equipment") diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index b56e2eb756..13ddd2582f 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -6,146 +6,142 @@ name = "AI Design (AI Core)" desc = "Allows for the construction of circuit boards used to build new AI cores." id = "aicore" - req_tech = list("programming" = 3) build_path = /obj/item/circuitboard/aicore category = list("AI Modules") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/safeguard_module name = "Module Design (Safeguard)" desc = "Allows for the construction of a Safeguard AI Module." id = "safeguard_module" - req_tech = list("programming" = 3, "materials" = 3) materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/supplied/safeguard category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/onehuman_module name = "Module Design (OneCrew)" desc = "Allows for the construction of a OneCrew AI Module." id = "onehuman_module" - req_tech = list("programming" = 6, "materials" = 4) materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/zeroth/oneHuman category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/protectstation_module name = "Module Design (ProtectStation)" desc = "Allows for the construction of a ProtectStation AI Module." id = "protectstation_module" - req_tech = list("programming" = 5, "materials" = 4) materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/supplied/protectStation category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/quarantine_module name = "Module Design (Quarantine)" desc = "Allows for the construction of a Quarantine AI Module." id = "quarantine_module" - req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/supplied/quarantine category = list("AI Modules") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/oxygen_module name = "Module Design (OxygenIsToxicToHumans)" desc = "Allows for the construction of a Safeguard AI Module." id = "oxygen_module" - req_tech = list("programming" = 4, "biotech" = 2, "materials" = 4) materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/supplied/oxygen category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/freeform_module name = "Module Design (Freeform)" desc = "Allows for the construction of a Freeform AI Module." id = "freeform_module" - req_tech = list("programming" = 5, "materials" = 4) materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/supplied/freeform category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/reset_module name = "Module Design (Reset)" desc = "Allows for the construction of a Reset AI Module." id = "reset_module" - req_tech = list("programming" = 4, "materials" = 6) materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/aiModule/reset category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/purge_module name = "Module Design (Purge)" desc = "Allows for the construction of a Purge AI Module." id = "purge_module" - req_tech = list("programming" = 5, "materials" = 6) materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/reset/purge category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/remove_module name = "Module Design (Law Removal)" desc = "Allows for the construction of a Law Removal AI Core Module." id = "remove_module" - req_tech = list("programming" = 5, "materials" = 5) materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/remove category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/freeformcore_module name = "AI Core Module (Freeform)" desc = "Allows for the construction of a Freeform AI Core Module." id = "freeformcore_module" - req_tech = list("programming" = 6, "materials" = 6) materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/core/freeformcore category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/asimov name = "Core Module Design (Asimov)" desc = "Allows for the construction of an Asimov AI Core Module." id = "asimov_module" - req_tech = list("programming" = 3, "materials" = 5) materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/core/full/asimov category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/paladin_module name = "Core Module Design (P.A.L.A.D.I.N.)" desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." id = "paladin_module" - req_tech = list("programming" = 5, "materials" = 5) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/core/full/paladin category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/tyrant_module name = "Core Module Design (T.Y.R.A.N.T.)" desc = "Allows for the construction of a T.Y.R.A.N.T. AI Module." id = "tyrant_module" - req_tech = list("programming" = 5, "syndicate" = 2, "materials" = 5) materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/core/full/tyrant category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/corporate_module name = "Core Module Design (Corporate)" desc = "Allows for the construction of a Corporate AI Core Module." id = "corporate_module" - req_tech = list("programming" = 5, "materials" = 5) materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/core/full/corp category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/default_module name = "Core Module Design (Default)" desc = "Allows for the construction of a Default AI Core Module." id = "default_module" - req_tech = list("programming" = 5, "materials" = 5) materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/core/full/custom category = list("AI Modules") - - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm new file mode 100644 index 0000000000..0ec15ac037 --- /dev/null +++ b/code/modules/research/designs/bluespace_designs.dm @@ -0,0 +1,55 @@ + +///////////////////////////////////////// +//////////////Blue Space///////////////// +///////////////////////////////////////// + +/datum/design/beacon + name = "Tracking Beacon" + desc = "A blue space tracking beacon." + id = "beacon" + build_type = PROTOLATHE + materials = list(MAT_METAL = 150, MAT_GLASS = 100) + build_path = /obj/item/device/radio/beacon + category = list("Bluespace Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SECURITY + +/datum/design/bag_holding + name = "Bag of Holding" + desc = "A backpack that opens into a localized pocket of bluespace." + id = "bag_holding" + build_type = PROTOLATHE + materials = list(MAT_GOLD = 3000, MAT_DIAMOND = 1500, MAT_URANIUM = 250, MAT_BLUESPACE = 2000) + build_path = /obj/item/storage/backpack/holding + category = list("Bluespace Designs") + dangerous_construction = TRUE + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/bluespace_crystal + name = "Artificial Bluespace Crystal" + desc = "A small blue crystal with mystical properties." + id = "bluespace_crystal" + build_type = PROTOLATHE + materials = list(MAT_DIAMOND = 1500, MAT_PLASMA = 1500) + build_path = /obj/item/ore/bluespace_crystal/artificial + category = list("Bluespace Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/telesci_gps + name = "GPS Device" + desc = "Little thingie that can track its position at all times." + id = "telesci_gps" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 1000) + build_path = /obj/item/device/gps + category = list("Bluespace Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO + +/datum/design/miningsatchel_holding + name = "Mining Satchel of Holding" + desc = "A mining satchel that can hold an infinite amount of ores." + id = "minerbag_holding" + build_type = PROTOLATHE + materials = list(MAT_GOLD = 250, MAT_URANIUM = 500) //quite cheap, for more convenience + build_path = /obj/item/storage/bag/ore/holding + category = list("Bluespace Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index be5d0aeaee..7e743a396b 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -1,30 +1,32 @@ ///////////////////Computer Boards/////////////////////////////////// /datum/design/board - name = "Computer Design (Battle Arcade Machine)" - desc = "Allows for the construction of circuit boards used to build a new arcade machine." - id = "arcade_battle" - req_tech = list("programming" = 1) + name = "Computer Design ( NULL ENTRY )" + desc = "I promise this doesn't give you syndicate goodies!" build_type = IMPRINTER materials = list(MAT_GLASS = 1000) reagents_list = list("sacid" = 20) + +/datum/design/board/arcade_battle + name = "Computer Design (Battle Arcade Machine)" + desc = "Allows for the construction of circuit boards used to build a new arcade machine." + id = "arcade_battle" build_path = /obj/item/circuitboard/computer/arcade/battle category = list("Computer Boards") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/board/orion_trail name = "Computer Design (Orion Trail Arcade Machine)" desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine." id = "arcade_orion" - req_tech = list("programming" = 1) build_path = /obj/item/circuitboard/computer/arcade/orion_trail category = list("Computer Boards") - + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/board/seccamera name = "Computer Design (Security Camera)" desc = "Allows for the construction of circuit boards used to build security camera computers." id = "seccamera" - req_tech = list("programming" = 2, "combat" = 2) build_path = /obj/item/circuitboard/computer/security category = list("Computer Boards") @@ -32,15 +34,14 @@ name = "Computer Design (Xenobiology Console)" desc = "Allows for the construction of circuit boards used to build xenobiology camera computers." id = "xenobioconsole" - req_tech = list("programming" = 3, "biotech" = 3) build_path = /obj/item/circuitboard/computer/xenobiology category = list("Computer Boards") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/aiupload name = "Computer Design (AI Upload)" desc = "Allows for the construction of circuit boards used to build an AI Upload Console." id = "aiupload" - req_tech = list("programming" = 5, "engineering" = 4) build_path = /obj/item/circuitboard/computer/aiupload category = list("Computer Boards") @@ -48,7 +49,6 @@ name = "Computer Design (Cyborg Upload)" desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console." id = "borgupload" - req_tech = list("programming" = 5, "engineering" = 4) build_path = /obj/item/circuitboard/computer/borgupload category = list("Computer Boards") @@ -56,7 +56,6 @@ name = "Computer Design (Medical Records)" desc = "Allows for the construction of circuit boards used to build a medical records console." id = "med_data" - req_tech = list("programming" = 2, "biotech" = 2) build_path = /obj/item/circuitboard/computer/med_data category = list("Computer Boards") @@ -64,7 +63,6 @@ name = "Computer Design (Operating Computer)" desc = "Allows for the construction of circuit boards used to build an operating computer console." id = "operating" - req_tech = list("programming" = 2, "biotech" = 3) build_path = /obj/item/circuitboard/computer/operating category = list("Computer Boards") @@ -72,7 +70,6 @@ name = "Computer Design (PanD.E.M.I.C. 2200)" desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console." id = "pandemic" - req_tech = list("programming" = 3, "biotech" = 3) build_path = /obj/item/circuitboard/computer/pandemic category = list("Computer Boards") @@ -80,7 +77,6 @@ name = "Computer Design (DNA Machine)" desc = "Allows for the construction of circuit boards used to build a new DNA scanning console." id = "scan_console" - req_tech = list("programming" = 2, "biotech" = 2) build_path = /obj/item/circuitboard/computer/scan_consolenew category = list("Computer Boards") @@ -88,7 +84,6 @@ name = "Computer Design (Communications)" desc = "Allows for the construction of circuit boards used to build a communications console." id = "comconsole" - req_tech = list("programming" = 3, "magnets" = 3) build_path = /obj/item/circuitboard/computer/communications category = list("Computer Boards") @@ -96,7 +91,6 @@ name = "Computer Design (ID Console)" desc = "Allows for the construction of circuit boards used to build an ID computer." id = "idcardconsole" - req_tech = list("programming" = 3) build_path = /obj/item/circuitboard/computer/card category = list("Computer Boards") @@ -104,7 +98,6 @@ name = "Computer Design (Crew monitoring computer)" desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer." id = "crewconsole" - req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) build_path = /obj/item/circuitboard/computer/crew category = list("Computer Boards") @@ -112,7 +105,6 @@ name = "Computer Design (Security Records Console)" desc = "Allows for the construction of circuit boards used to build a security records console." id = "secdata" - req_tech = list("programming" = 2, "combat" = 2) build_path = /obj/item/circuitboard/computer/secure_data category = list("Computer Boards") @@ -120,7 +112,6 @@ name = "Computer Design (Atmosphere Alert)" desc = "Allows for the construction of circuit boards used to build an atmosphere alert console." id = "atmosalerts" - req_tech = list("programming" = 2) build_path = /obj/item/circuitboard/computer/atmos_alert category = list("Computer Boards") @@ -128,7 +119,6 @@ name = "Computer Design (Atmospheric Monitor)" desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor." id = "atmos_control" - req_tech = list("programming" = 2) build_path = /obj/item/circuitboard/computer/atmos_control category = list("Computer Boards") @@ -136,7 +126,6 @@ name = "Computer Design (Robotics Control Console)" desc = "Allows for the construction of circuit boards used to build a Robotics Control console." id = "robocontrol" - req_tech = list("programming" = 4) build_path = /obj/item/circuitboard/computer/robotics category = list("Computer Boards") @@ -144,7 +133,6 @@ name = "Computer Design (Slot Machine)" desc = "Allows for the construction of circuit boards used to build a new slot machine." id = "slotmachine" - req_tech = list("programming" = 1) build_path = /obj/item/circuitboard/computer/slot_machine category = list("Computer Boards") @@ -152,7 +140,6 @@ name = "Computer Design (Power Monitor)" desc = "Allows for the construction of circuit boards used to build a new power monitor." id = "powermonitor" - req_tech = list("programming" = 2, "powerstorage" = 2) build_path = /obj/item/circuitboard/computer/powermonitor category = list("Computer Boards") @@ -160,7 +147,6 @@ name = "Computer Design (Solar Control)" desc = "Allows for the construction of circuit boards used to build a solar control console." id = "solarcontrol" - req_tech = list("programming" = 2, "powerstorage" = 2) build_path = /obj/item/circuitboard/computer/solar_control category = list("Computer Boards") @@ -168,7 +154,6 @@ name = "Computer Design (Prisoner Management Console)" desc = "Allows for the construction of circuit boards used to build a prisoner management console." id = "prisonmanage" - req_tech = list("programming" = 2) build_path = /obj/item/circuitboard/computer/prisoner category = list("Computer Boards") @@ -176,31 +161,30 @@ name = "Computer Design (Exosuit Control Console)" desc = "Allows for the construction of circuit boards used to build an exosuit control console." id = "mechacontrol" - req_tech = list("programming" = 3) build_path = /obj/item/circuitboard/computer/mecha_control category = list("Computer Boards") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/mechapower name = "Computer Design (Mech Bay Power Control Console)" desc = "Allows for the construction of circuit boards used to build a mech bay power control console." id = "mechapower" - req_tech = list("programming" = 3, "powerstorage" = 3) build_path = /obj/item/circuitboard/computer/mech_bay_power_console category = list("Computer Boards") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/rdconsole name = "Computer Design (R&D Console)" desc = "Allows for the construction of circuit boards used to build a new R&D console." id = "rdconsole" - req_tech = list("programming" = 4) build_path = /obj/item/circuitboard/computer/rdconsole category = list("Computer Boards") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/cargo name = "Computer Design (Supply Console)" desc = "Allows for the construction of circuit boards used to build a Supply Console." id = "cargo" - req_tech = list("programming" = 3) build_path = /obj/item/circuitboard/computer/cargo category = list("Computer Boards") @@ -208,7 +192,6 @@ name = "Computer Design (Supply Request Console)" desc = "Allows for the construction of circuit boards used to build a Supply Request Console." id = "cargorequest" - req_tech = list("programming" = 2) build_path = /obj/item/circuitboard/computer/cargo/request category = list("Computer Boards") @@ -216,7 +199,6 @@ name = "Computer Design (Stock Exchange Console)" desc = "Allows for the construction of circuit boards used to build a Stock Exchange Console." id = "stockexchange" - req_tech = list("programming" = 3) build_path = /obj/item/circuitboard/computer/stockexchange category = list("Computer Boards") @@ -224,7 +206,6 @@ name = "Computer Design (Outpost Status Display)" desc = "Allows for the construction of circuit boards used to build an outpost status display console." id = "mining" - req_tech = list("programming" = 2) build_path = /obj/item/circuitboard/computer/mining category = list("Computer Boards") @@ -232,7 +213,6 @@ name = "Computer Design (Telecommunications Monitoring Console)" desc = "Allows for the construction of circuit boards used to build a telecommunications monitor." id = "comm_monitor" - req_tech = list("programming" = 3, "magnets" = 3, "bluespace" = 2) build_path = /obj/item/circuitboard/computer/comm_monitor category = list("Computer Boards") @@ -240,7 +220,6 @@ name = "Computer Design (Telecommunications Server Monitoring Console)" desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor." id = "comm_server" - req_tech = list("programming" = 3, "magnets" = 3, "bluespace" = 2) build_path = /obj/item/circuitboard/computer/comm_server category = list("Computer Boards") @@ -248,7 +227,6 @@ name = "Computer Design (Messaging Monitor Console)" desc = "Allows for the construction of circuit boards used to build a messaging monitor console." id = "message_monitor" - req_tech = list("programming" = 5) build_path = /obj/item/circuitboard/computer/message_monitor category = list("Computer Boards") @@ -256,15 +234,14 @@ name = "Computer Design (AI Integrity Restorer)" desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer." id = "aifixer" - req_tech = list("programming" = 4, "magnets" = 3) build_path = /obj/item/circuitboard/computer/aifixer category = list("Computer Boards") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/libraryconsole name = "Computer Design (Library Console)" desc = "Allows for the construction of circuit boards used to build a new library console." id = "libraryconsole" - req_tech = list("programming" = 1) build_path = /obj/item/circuitboard/computer/libraryconsole category = list("Computer Boards") @@ -272,6 +249,5 @@ name = "Computer Design (APC Control)" desc = "Allows for the construction of circuit boards used to build a new APC control console." id = "apc_control" - req_tech = list("programming" = 4, "engineering" = 4, "powerstorage" = 5) build_path = /obj/item/circuitboard/computer/apc_control category = list("Computer Boards") diff --git a/code/modules/research/designs/computer_part_designs.dm b/code/modules/research/designs/computer_part_designs.dm index 318070c084..15c37a117e 100644 --- a/code/modules/research/designs/computer_part_designs.dm +++ b/code/modules/research/designs/computer_part_designs.dm @@ -5,257 +5,251 @@ /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/computer_hardware/hard_drive category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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/computer_hardware/hard_drive/advanced category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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/computer_hardware/hard_drive/super category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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/computer_hardware/hard_drive/cluster category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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/computer_hardware/hard_drive/small category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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/computer_hardware/hard_drive/micro category = list("Computer Parts") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING // 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) reagents_list = list("sacid" = 20) build_path = /obj/item/computer_hardware/network_card category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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) reagents_list = list("sacid" = 20) build_path = /obj/item/computer_hardware/network_card/advanced category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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) reagents_list = list("sacid" = 20) build_path = /obj/item/computer_hardware/network_card/wired category = list("Computer Parts") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING // 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) reagents_list = list("sacid" = 20) build_path = /obj/item/computer_hardware/hard_drive/portable category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /datum/design/portabledrive/advanced name = "Advanced Data Disk" id = "portadrive_advanced" - req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1600) reagents_list = list("sacid" = 20) build_path = /obj/item/computer_hardware/hard_drive/portable/advanced category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /datum/design/portabledrive/super name = "Super Data Disk" id = "portadrive_super" - req_tech = list("programming" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 3200) reagents_list = list("sacid" = 20) build_path = /obj/item/computer_hardware/hard_drive/portable/super category = list("Computer Parts") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING // 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/computer_hardware/card_slot category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING // 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/computer_hardware/ai_slot category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING // 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/computer_hardware/printer/mini category = list("Computer Parts") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING // 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/computer_hardware/recharger/APC category = list("Computer Parts") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING // 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/computer_hardware/battery category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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/stock_parts/cell/computer category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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/stock_parts/cell/computer/advanced category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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/stock_parts/cell/computer/super category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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/stock_parts/cell/computer/nano category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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/stock_parts/cell/computer/micro category = list("Computer Parts") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING // 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) reagents_list = list("sacid" = 20) build_path = /obj/item/computer_hardware/processor_unit category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /datum/design/cpu/small name = "Microprocessor" id = "cpu_small" - req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 800) reagents_list = list("sacid" = 20) build_path = /obj/item/computer_hardware/processor_unit/small category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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) reagents_list = list("sacid" = 40) build_path = /obj/item/computer_hardware/processor_unit/photonic category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /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) reagents_list = list("sacid" = 20) build_path = /obj/item/computer_hardware/processor_unit/photonic/small - category = list("Computer Parts") \ No newline at end of file + category = list("Computer Parts") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm new file mode 100644 index 0000000000..bbc8e18c63 --- /dev/null +++ b/code/modules/research/designs/electronics_designs.dm @@ -0,0 +1,87 @@ + +/////////////////////////////////// +/////Non-Board Computer Stuff////// +/////////////////////////////////// + +/datum/design/intellicard + name = "Intellicard AI Transportation System" + desc = "Allows for the construction of an intellicard." + id = "intellicard" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 1000, MAT_GOLD = 200) + build_path = /obj/item/device/aicard + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/paicard + name = "Personal Artificial Intelligence Card" + desc = "Allows for the construction of a pAI Card." + id = "paicard" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 500, MAT_METAL = 500) + build_path = /obj/item/device/paicard + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ALL + +//////////////////////////////////////// +//////////Disk Construction Disks/////// +//////////////////////////////////////// +/datum/design/design_disk + name = "Design Storage Disk" + desc = "Produce additional disks for storing device designs." + id = "design_disk" + build_type = PROTOLATHE | AUTOLATHE + materials = list(MAT_METAL = 300, MAT_GLASS = 100) + build_path = /obj/item/disk/design_disk + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/design_disk_adv + name = "Advanced Design Storage Disk" + desc = "Produce additional disks for storing device designs." + id = "design_disk_adv" + build_type = PROTOLATHE + materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50) + build_path = /obj/item/disk/design_disk/adv + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/tech_disk + name = "Technology Data Storage Disk" + desc = "Produce additional disks for storing technology data." + id = "tech_disk" + build_type = PROTOLATHE | AUTOLATHE + materials = list(MAT_METAL = 300, MAT_GLASS = 100) + build_path = /obj/item/disk/tech_disk + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/integrated_printer + name = "Integrated circuits printer" + desc = "This machine provides all neccesary things for circuitry." + id = "icprinter" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 5000, MAT_METAL = 5000) + build_path = /obj/item/device/integrated_circuit_printer + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/IC_printer_upgrade_advanced + name = "Integrated Circuits printer upgrade: Advanced Designs" + desc = "This disk allows for integrated circuit printers to print advanced circuitry designs." + id = "icupgadv" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 10000, MAT_METAL = 10000) + build_path = /obj/item/disk/integrated_circuit/upgrade/advanced + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/IC_printer_upgrade_clone + name = "Integrated Circuits printer upgrade: Clone Ability" + desc = "This disk allows for integrated circuit printers to clone designs." + id = "icupgclo" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 10000, MAT_METAL = 10000) + build_path = /obj/item/disk/integrated_circuit/upgrade/clone + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm new file mode 100644 index 0000000000..e369dfa724 --- /dev/null +++ b/code/modules/research/designs/equipment_designs.dm @@ -0,0 +1,32 @@ +/datum/design/flightsuit + name = "Flight Suit" + desc = "A specialized hardsuit that is able to attach a flightpack and accessories.." + id = "flightsuit" + build_type = PROTOLATHE + build_path = /obj/item/clothing/suit/space/hardsuit/flightsuit + materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_DIAMOND = 200, MAT_GOLD = 3000, MAT_SILVER = 3000, MAT_TITANIUM = 16000) //This expensive enough for you? + construction_time = 250 + category = list("Misc") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/flightpack + name = "Flight Pack" + desc = "An advanced back-worn system that has dual ion engines powerful enough to grant a humanoid flight. Contains an internal self-recharging high-current capacitor for short, powerful boosts." + id = "flightpack" + build_type = PROTOLATHE + build_path = /obj/item/device/flightpack + materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_DIAMOND = 4000, MAT_GOLD = 12000, MAT_SILVER = 12000, MAT_URANIUM = 20000, MAT_PLASMA = 16000, MAT_TITANIUM = 16000) //This expensive enough for you? + construction_time = 250 + category = list("Misc") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/flightshoes + name = "Flight Shoes" + desc = "Flight shoes, attachable to a flight suit to provide additional functions." + id = "flightshoes" + build_type = PROTOLATHE + build_path = /obj/item/clothing/shoes/flightshoes + materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_GOLD = 1500, MAT_SILVER = 1500, MAT_PLASMA = 2000, MAT_TITANIUM = 2000) + construction_time = 100 + category = list("Misc") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 14346ee13b..2343bd8814 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -6,7 +6,6 @@ name = "Machine Design (SMES Board)" desc = "The circuit board for a SMES." id = "smes" - req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_path = /obj/item/circuitboard/machine/smes category = list ("Engineering Machinery") @@ -14,7 +13,6 @@ name = "Machine Design (Automated Announcement System Board)" desc = "The circuit board for an automated announcement system." id = "automated_announcement" - req_tech = list("programming" = 3, "bluespace" = 3, "magnets" = 2) build_path = /obj/item/circuitboard/machine/announcement_system category = list("Subspace Telecomms") @@ -22,7 +20,6 @@ name = "Computer Design (Power Turbine Console Board)" desc = "The circuit board for a power turbine console." id = "power_turbine_console" - req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_path = /obj/item/circuitboard/computer/turbine_computer category = list ("Engineering Machinery") @@ -30,7 +27,6 @@ name = "Machine Design (Emitter Board)" desc = "The circuit board for an emitter." id = "emitter" - req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 4) build_path = /obj/item/circuitboard/machine/emitter category = list ("Engineering Machinery") @@ -38,7 +34,6 @@ name = "Machine Design (Power Compressor Board)" desc = "The circuit board for a power compressor." id = "power_compressor" - req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_path = /obj/item/circuitboard/machine/power_compressor category = list ("Engineering Machinery") @@ -46,7 +41,6 @@ name = "Machine Design (Power Turbine Board)" desc = "The circuit board for a power turbine." id = "power_turbine" - req_tech = list("programming" = 4, "powerstorage" = 4, "engineering" = 5) build_path = /obj/item/circuitboard/machine/power_turbine category = list ("Engineering Machinery") @@ -54,7 +48,6 @@ name = "Machine Design (Freezer/Heater Board)" desc = "The circuit board for a freezer/heater." id = "thermomachine" - req_tech = list("programming" = 3, "plasmatech" = 3) build_path = /obj/item/circuitboard/machine/thermomachine category = list ("Engineering Machinery") @@ -62,7 +55,6 @@ name = "Machine Design (Space Heater Board)" desc = "The circuit board for a space heater." id = "space_heater" - req_tech = list("programming" = 2, "engineering" = 2, "plasmatech" = 2) build_path = /obj/item/circuitboard/machine/space_heater category = list ("Engineering Machinery") @@ -70,55 +62,54 @@ name = "Machine Design (Teleportation Station Board)" desc = "The circuit board for a teleportation station." id = "tele_station" - req_tech = list("programming" = 5, "bluespace" = 4, "engineering" = 4, "plasmatech" = 4) build_path = /obj/item/circuitboard/machine/teleporter_station category = list ("Teleportation Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/teleport_hub name = "Machine Design (Teleportation Hub Board)" desc = "The circuit board for a teleportation hub." id = "tele_hub" - req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5) build_path = /obj/item/circuitboard/machine/teleporter_hub category = list ("Teleportation Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/quantumpad name = "Machine Design (Quantum Pad Board)" desc = "The circuit board for a quantum telepad." id = "quantumpad" - req_tech = list("programming" = 4, "bluespace" = 4, "plasmatech" = 3, "engineering" = 4) build_path = /obj/item/circuitboard/machine/quantumpad category = list ("Teleportation Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/launchpad name = "Machine Design (Bluespace Launchpad Board)" desc = "The circuit board for a bluespace Launchpad." id = "launchpad" - req_tech = list("programming" = 3, "bluespace" = 3, "plasmatech" = 2, "engineering" = 3) build_path = /obj/item/circuitboard/machine/launchpad category = list ("Teleportation Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/launchpad_console name = "Machine Design (Bluespace Launchpad Console Board)" desc = "The circuit board for a bluespace launchpad Console." id = "launchpad_console" - req_tech = list("programming" = 4, "bluespace" = 3, "plasmatech" = 3) build_path = /obj/item/circuitboard/computer/launchpad_console category = list ("Teleportation Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/teleconsole name = "Computer Design (Teleporter Console)" desc = "Allows for the construction of circuit boards used to build a teleporter control console." id = "teleconsole" - req_tech = list("programming" = 3, "bluespace" = 3, "plasmatech" = 4) build_path = /obj/item/circuitboard/computer/teleporter category = list("Teleportation Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/sleeper name = "Machine Design (Sleeper Board)" desc = "The circuit board for a sleeper." id = "sleeper" - req_tech = list("programming" = 3, "biotech" = 2, "engineering" = 3) build_path = /obj/item/circuitboard/machine/sleeper category = list ("Medical Machinery") @@ -126,7 +117,6 @@ name = "Machine Design (Cryotube Board)" desc = "The circuit board for a cryotube." id = "cryotube" - req_tech = list("programming" = 5, "biotech" = 3, "engineering" = 4, "plasmatech" = 3) build_path = /obj/item/circuitboard/machine/cryo_tube category = list ("Medical Machinery") @@ -134,7 +124,6 @@ name = "Machine Design (Portable Chem Dispenser Board)" desc = "The circuit board for a portable chem dispenser." id = "chem_dispenser" - req_tech = list("programming" = 5, "biotech" = 3, "materials" = 4, "plasmatech" = 4) build_path = /obj/item/circuitboard/machine/chem_dispenser category = list ("Medical Machinery") @@ -142,7 +131,6 @@ name = "Machine Design (Chem Master Board)" desc = "The circuit board for a Chem Master 3000." id = "chem_master" - req_tech = list("biotech" = 3, "materials" = 3, "programming" = 2) build_path = /obj/item/circuitboard/machine/chem_master category = list ("Medical Machinery") @@ -150,7 +138,6 @@ name = "Machine Design (Chemical Heater Board)" desc = "The circuit board for a chemical heater." id = "chem_heater" - req_tech = list("engineering" = 2, "biotech" = 2, "programming" = 2) build_path = /obj/item/circuitboard/machine/chem_heater category = list ("Medical Machinery") @@ -158,7 +145,6 @@ name = "Machine Design (Smoke Machine)" desc = "The circuit board for a smoke machine." id = "smoke_machine" - req_tech = list("materials" = 4, "biotech" = 3, "engineering" = 3) build_path = /obj/item/circuitboard/machine/smoke_machine category = list ("Medical Machinery") @@ -166,7 +152,6 @@ name = "Computer Design (Cloning Machine Console)" desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console." id = "clonecontrol" - req_tech = list("programming" = 4, "biotech" = 3) build_path = /obj/item/circuitboard/computer/cloning category = list("Medical Machinery") @@ -174,7 +159,6 @@ name = "Machine Design (Clone Pod)" desc = "Allows for the construction of circuit boards used to build a Cloning Pod." id = "clonepod" - req_tech = list("programming" = 4, "biotech" = 3) build_path = /obj/item/circuitboard/machine/clonepod category = list("Medical Machinery") @@ -182,7 +166,6 @@ name = "Machine Design (Cloning Scanner)" desc = "Allows for the construction of circuit boards used to build a Cloning Scanner." id = "clonescanner" - req_tech = list("programming" = 4, "biotech" = 3) build_path = /obj/item/circuitboard/machine/clonescanner category = list("Medical Machinery") @@ -190,7 +173,6 @@ name = "Machine Design (Biogenerator Board)" desc = "The circuit board for a biogenerator." id = "biogenerator" - req_tech = list("programming" = 2, "biotech" = 3, "materials" = 3) build_path = /obj/item/circuitboard/machine/biogenerator category = list ("Hydroponics Machinery") @@ -198,7 +180,6 @@ name = "Machine Design (Hydroponics Tray Board)" desc = "The circuit board for a hydroponics tray." id = "hydro_tray" - req_tech = list("biotech" = 2) build_path = /obj/item/circuitboard/machine/hydroponics category = list ("Hydroponics Machinery") @@ -206,23 +187,22 @@ name = "Machine Design (Destructive Analyzer Board)" desc = "The circuit board for a destructive analyzer." id = "destructive_analyzer" - req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2) build_path = /obj/item/circuitboard/machine/destructive_analyzer category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/experimentor name = "Machine Design (E.X.P.E.R.I-MENTOR Board)" desc = "The circuit board for an E.X.P.E.R.I-MENTOR." id = "experimentor" - req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2, "bluespace" = 2) build_path = /obj/item/circuitboard/machine/experimentor category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/protolathe name = "Machine Design (Protolathe Board)" desc = "The circuit board for a protolathe." id = "protolathe" - req_tech = list("programming" = 2, "engineering" = 2) build_path = /obj/item/circuitboard/machine/protolathe category = list("Research Machinery") @@ -230,7 +210,6 @@ name = "Machine Design (Circuit Imprinter Board)" desc = "The circuit board for a circuit imprinter." id = "circuit_imprinter" - req_tech = list("programming" = 2, "engineering" = 2) build_path = /obj/item/circuitboard/machine/circuit_imprinter category = list("Research Machinery") @@ -238,47 +217,46 @@ name = "Computer Design (R&D Server Control Console Board)" desc = "The circuit board for an R&D Server Control Console." id = "rdservercontrol" - req_tech = list("programming" = 3) build_path = /obj/item/circuitboard/computer/rdservercontrol category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/rdserver name = "Machine Design (R&D Server Board)" desc = "The circuit board for an R&D Server." id = "rdserver" - req_tech = list("programming" = 3) build_path = /obj/item/circuitboard/machine/rdserver category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/mechfab name = "Machine Design (Exosuit Fabricator Board)" desc = "The circuit board for an Exosuit Fabricator." id = "mechfab" - req_tech = list("programming" = 3, "engineering" = 3) build_path = /obj/item/circuitboard/machine/mechfab category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/cyborgrecharger name = "Machine Design (Cyborg Recharger Board)" desc = "The circuit board for a Cyborg Recharger." id = "cyborgrecharger" - req_tech = list("powerstorage" = 3, "engineering" = 3) build_path = /obj/item/circuitboard/machine/cyborgrecharger category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/mech_recharger name = "Machine Design (Mechbay Recharger Board)" desc = "The circuit board for a Mechbay Recharger." id = "mech_recharger" - req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 3) build_path = /obj/item/circuitboard/machine/mech_recharger category = list("Research Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/microwave name = "Machine Design (Microwave Board)" desc = "The circuit board for a microwave." id = "microwave" - req_tech = list("programming" = 2, "magnets" = 2) build_path = /obj/item/circuitboard/machine/microwave category = list ("Misc. Machinery") @@ -286,7 +264,6 @@ name = "Machine Design (Gibber Board)" desc = "The circuit board for a gibber." id = "gibber" - req_tech = list("programming" = 2, "engineering" = 2) build_path = /obj/item/circuitboard/machine/gibber category = list ("Misc. Machinery") @@ -294,7 +271,6 @@ name = "Machine Design (Smartfridge Board)" desc = "The circuit board for a smartfridge." id = "smartfridge" - req_tech = list("programming" = 1) build_path = /obj/item/circuitboard/machine/smartfridge category = list ("Misc. Machinery") @@ -302,7 +278,6 @@ name = "Machine Design (Monkey Recycler Board)" desc = "The circuit board for a monkey recycler." id = "monkey_recycler" - req_tech = list("programming" = 1) build_path = /obj/item/circuitboard/machine/monkey_recycler category = list ("Misc. Machinery") @@ -310,7 +285,6 @@ name = "Machine Design (Seed Extractor Board)" desc = "The circuit board for a seed extractor." id = "seed_extractor" - req_tech = list("programming" = 1) build_path = /obj/item/circuitboard/machine/seed_extractor category = list ("Misc. Machinery") @@ -318,7 +292,6 @@ name = "Machine Design (Food Processor Board)" desc = "The circuit board for a food processor." id = "processor" - req_tech = list("programming" = 1) build_path = /obj/item/circuitboard/machine/processor category = list ("Misc. Machinery") @@ -326,7 +299,6 @@ name = "Machine Design (Slime Processor Board)" desc = "The circuit board for a slime processor." id = "slimeprocessor" - req_tech = list("programming" = 1, "plasmatech" = 1) build_path = /obj/item/circuitboard/machine/processor/slime category = list ("Misc. Machinery") @@ -334,7 +306,6 @@ name = "Machine Design (Recycler Board)" desc = "The circuit board for a recycler." id = "recycler" - req_tech = list("programming" = 2, "engineering" = 2) build_path = /obj/item/circuitboard/machine/recycler category = list ("Misc. Machinery") @@ -342,15 +313,14 @@ name = "Machine Design (AI Holopad Board)" desc = "The circuit board for a holopad." id = "holopad" - req_tech = list("programming" = 1) build_path = /obj/item/circuitboard/machine/holopad category = list ("Misc. Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ALL /datum/design/board/autolathe name = "Machine Design (Autolathe Board)" desc = "The circuit board for an autolathe." id = "autolathe" - req_tech = list("programming" = 3, "engineering" = 3) build_path = /obj/item/circuitboard/machine/autolathe category = list ("Misc. Machinery") @@ -358,7 +328,6 @@ name = "Machine Design (Weapon Recharger Board)" desc = "The circuit board for a Weapon Recharger." id = "recharger" - req_tech = list("powerstorage" = 4, "engineering" = 3, "materials" = 4) materials = list(MAT_GLASS = 1000, MAT_GOLD = 100) build_path = /obj/item/circuitboard/machine/recharger category = list("Misc. Machinery") @@ -367,7 +336,6 @@ name = "Machine Design (Vendor Board)" desc = "The circuit board for a Vendor." id = "vendor" - req_tech = list("programming" = 1) build_path = /obj/item/circuitboard/machine/vendor category = list ("Misc. Machinery") @@ -375,23 +343,22 @@ name = "Machine Design (Ore Redemption Board)" desc = "The circuit board for an Ore Redemption machine." id = "ore_redemption" - req_tech = list("programming" = 2, "engineering" = 2, "plasmatech" = 3) build_path = /obj/item/circuitboard/machine/ore_redemption category = list ("Misc. Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/mining_equipment_vendor name = "Machine Design (Mining Rewards Vender Board)" desc = "The circuit board for a Mining Rewards Vender." id = "mining_equipment_vendor" - req_tech = list("engineering" = 3) build_path = /obj/item/circuitboard/machine/mining_equipment_vendor category = list ("Misc. Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/tesla_coil name = "Machine Design (Tesla Coil Board)" desc = "The circuit board for a tesla coil." id = "tesla_coil" - req_tech = list("programming" = 3, "powerstorage" = 3, "magnets" = 3) build_path = /obj/item/circuitboard/machine/tesla_coil category = list ("Misc. Machinery") @@ -399,7 +366,6 @@ name = "Machine Design (Grounding Rod Board)" desc = "The circuit board for a grounding rod." id = "grounding_rod" - req_tech = list("programming" = 3, "powerstorage" = 3, "magnets" = 3, "plasmatech" = 2) build_path = /obj/item/circuitboard/machine/grounding_rod category = list ("Misc. Machinery") @@ -407,7 +373,6 @@ name = "Machine Design (Plant DNA Manipulator Board)" desc = "The circuit board for a plant DNA manipulator." id = "plantgenes" - req_tech = list("programming" = 4, "biotech" = 3) build_path = /obj/item/circuitboard/machine/plantgenes category = list ("Misc. Machinery") @@ -415,15 +380,14 @@ name = "Machine Design (NTNet Relay Board)" desc = "The circuit board for a wireless network relay." id = "ntnet_relay" - req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 2) build_path = /obj/item/circuitboard/machine/ntnet_relay category = list("Subspace Telecomms") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/limbgrower name = "Machine Design (Limb Grower Board)" desc = "The circuit board for a limb grower." id = "limbgrower" - req_tech = list("programming" = 3, "biotech" = 2) build_path = /obj/item/circuitboard/machine/limbgrower category = list("Medical Machinery") @@ -431,7 +395,6 @@ name = "Machine Design (Deep Fryer)" desc = "The circuit board for a Deep Fryer." id = "deepfryer" - req_tech = list("programming" = 1) build_path = /obj/item/circuitboard/machine/deep_fryer category = list ("Misc. Machinery") @@ -439,6 +402,5 @@ name = "Machine Design (Donksoft Toy Vendor Board)" desc = "The circuit board for a Donksoft Toy Vendor." id = "donksofttoyvendor" - req_tech = list("programming" = 1, "syndicate" = 2) build_path = /obj/item/circuitboard/machine/vending/donksofttoyvendor category = list ("Misc. Machinery") diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index 8dbc118a0b..cee0dc7413 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -6,137 +6,132 @@ name = "APLU \"Ripley\" Central Control module" desc = "Allows for the construction of a \"Ripley\" Central Control module." id = "ripley_main" - req_tech = list("programming" = 2) build_path = /obj/item/circuitboard/mecha/ripley/main category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/ripley_peri name = "APLU \"Ripley\" Peripherals Control module" desc = "Allows for the construction of a \"Ripley\" Peripheral Control module." id = "ripley_peri" - req_tech = list("programming" = 2) build_path = /obj/item/circuitboard/mecha/ripley/peripherals category = list("Exosuit Modules") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/odysseus_main name = "\"Odysseus\" Central Control module" desc = "Allows for the construction of a \"Odysseus\" Central Control module." id = "odysseus_main" - req_tech = list("programming" = 3,"biotech" = 3, "engineering" = 3) build_path = /obj/item/circuitboard/mecha/odysseus/main category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/odysseus_peri name = "\"Odysseus\" Peripherals Control module" desc = "Allows for the construction of a \"Odysseus\" Peripheral Control module." id = "odysseus_peri" - req_tech = list("programming" = 3,"biotech" = 3, "engineering" = 3) build_path = /obj/item/circuitboard/mecha/odysseus/peripherals category = list("Exosuit Modules") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/gygax_main name = "\"Gygax\" Central Control module" desc = "Allows for the construction of a \"Gygax\" Central Control module." id = "gygax_main" - req_tech = list("programming" = 4, "combat" = 3, "engineering" = 4) build_path = /obj/item/circuitboard/mecha/gygax/main category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/gygax_peri name = "\"Gygax\" Peripherals Control module" desc = "Allows for the construction of a \"Gygax\" Peripheral Control module." id = "gygax_peri" - req_tech = list("programming" = 4, "combat" = 3, "engineering" = 4) build_path = /obj/item/circuitboard/mecha/gygax/peripherals category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/gygax_targ name = "\"Gygax\" Weapons & Targeting Control module" desc = "Allows for the construction of a \"Gygax\" Weapons & Targeting Control module." id = "gygax_targ" - req_tech = list("programming" = 4, "combat" = 4, "engineering" = 4) build_path = /obj/item/circuitboard/mecha/gygax/targeting category = list("Exosuit Modules") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/durand_main name = "\"Durand\" Central Control module" desc = "Allows for the construction of a \"Durand\" Central Control module." id = "durand_main" - req_tech = list("programming" = 4, "combat" = 4, "engineering" = 4) build_path = /obj/item/circuitboard/mecha/durand/main category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/durand_peri name = "\"Durand\" Peripherals Control module" desc = "Allows for the construction of a \"Durand\" Peripheral Control module." id = "durand_peri" - req_tech = list("programming" = 4, "combat" = 4, "engineering" = 4) build_path = /obj/item/circuitboard/mecha/durand/peripherals category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/durand_targ name = "\"Durand\" Weapons & Targeting Control module" desc = "Allows for the construction of a \"Durand\" Weapons & Targeting Control module." id = "durand_targ" - req_tech = list("programming" = 5, "combat" = 4, "engineering" = 4) build_path = /obj/item/circuitboard/mecha/durand/targeting category = list("Exosuit Modules") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/honker_main name = "\"H.O.N.K\" Central Control module" desc = "Allows for the construction of a \"H.O.N.K\" Central Control module." id = "honker_main" - req_tech = list("programming" = 3, "engineering" = 3) build_path = /obj/item/circuitboard/mecha/honker/main category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/honker_peri name = "\"H.O.N.K\" Peripherals Control module" desc = "Allows for the construction of a \"H.O.N.K\" Peripheral Control module." id = "honker_peri" - req_tech = list("programming" = 3, "engineering" = 3) build_path = /obj/item/circuitboard/mecha/honker/peripherals category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/honker_targ name = "\"H.O.N.K\" Weapons & Targeting Control module" desc = "Allows for the construction of a \"H.O.N.K\" Weapons & Targeting Control module." id = "honker_targ" - req_tech = list("programming" = 3, "engineering" = 3) build_path = /obj/item/circuitboard/mecha/honker/targeting category = list("Exosuit Modules") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/phazon_main name = "\"Phazon\" Central Control module" desc = "Allows for the construction of a \"Phazon\" Central Control module." id = "phazon_main" materials = list(MAT_GLASS = 1000, MAT_BLUESPACE = 100) - req_tech = list("programming" = 6, "materials" = 6, "plasmatech" = 5) build_path = /obj/item/circuitboard/mecha/phazon/main category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/phazon_peri name = "\"Phazon\" Peripherals Control module" desc = "Allows for the construction of a \"Phazon\" Peripheral Control module." id = "phazon_peri" materials = list(MAT_GLASS = 1000, MAT_BLUESPACE = 100) - req_tech = list("programming" = 6, "bluespace" = 5, "plasmatech" = 5) build_path = /obj/item/circuitboard/mecha/phazon/peripherals category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/phazon_targ name = "\"Phazon\" Weapons & Targeting Control module" desc = "Allows for the construction of a \"Phazon\" Weapons & Targeting Control module." id = "phazon_targ" materials = list(MAT_GLASS = 1000, MAT_BLUESPACE = 100) - req_tech = list("programming" = 6, "magnets" = 5, "plasmatech" = 5) build_path = /obj/item/circuitboard/mecha/phazon/targeting category = list("Exosuit Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE //////////////////////////////////////// /////////// Mecha Equpment ///////////// @@ -147,7 +142,6 @@ desc = "Allows for the construction of LBX AC 10." id = "mech_scattershot" build_type = MECHFAB - req_tech = list("combat" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot materials = list(MAT_METAL=10000) construction_time = 100 @@ -158,7 +152,6 @@ desc = "Allows for the construction of FNX-99 \"Hades\" Carbine." id = "mech_carbine" build_type = MECHFAB - req_tech = list("combat" = 5, "materials" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine materials = list(MAT_METAL=10000) construction_time = 100 @@ -169,7 +162,6 @@ desc = "Allows for the construction of MKIV Ion Heavy Cannon." id = "mech_ion" build_type = MECHFAB - req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion materials = list(MAT_METAL=20000,MAT_SILVER=6000,MAT_URANIUM=2000) construction_time = 100 @@ -180,7 +172,6 @@ desc = "Allows for the construction of MKI Tesla Cannon." id = "mech_tesla" build_type = MECHFAB - req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla materials = list(MAT_METAL=20000,MAT_SILVER=8000) construction_time = 100 @@ -191,7 +182,6 @@ desc = "Allows for the construction of CH-PS Laser." id = "mech_laser" build_type = MECHFAB - req_tech = list("combat" = 3, "magnets" = 3, "engineering" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser materials = list(MAT_METAL=10000) construction_time = 100 @@ -202,7 +192,6 @@ desc = "Allows for the construction of CH-LC Laser Cannon." id = "mech_laser_heavy" build_type = MECHFAB - req_tech = list("combat" = 4, "magnets" = 4, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy materials = list(MAT_METAL=10000) construction_time = 100 @@ -213,7 +202,6 @@ desc = "Allows for the construction of SGL-6 Grenade Launcher." id = "mech_grenade_launcher" build_type = MECHFAB - req_tech = list("combat" = 4, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000) construction_time = 100 @@ -224,7 +212,6 @@ desc = "Allows for the construction of SRM-8 Missile Rack." id = "mech_missile_rack" build_type = MECHFAB - req_tech = list("combat" = 6, "materials" = 5, "engineering" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000) construction_time = 100 @@ -235,7 +222,6 @@ desc = "A weapon that violates the Geneva Convention at 3 rounds per minute" id = "clusterbang_launcher" build_type = MECHFAB - req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang materials = list(MAT_METAL=20000,MAT_GOLD=10000,MAT_URANIUM=10000) construction_time = 100 @@ -246,7 +232,6 @@ desc = "An exosuit module that allows generating of small quasi-stable wormholes." id = "mech_wormhole_gen" build_type = MECHFAB - req_tech = list("bluespace" = 4, "magnets" = 4, "plasmatech" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator materials = list(MAT_METAL=10000) construction_time = 100 @@ -257,7 +242,6 @@ desc = "An exosuit module that allows exosuits to teleport to any position in view." id = "mech_teleporter" build_type = MECHFAB - req_tech = list("bluespace" = 8, "magnets" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/teleporter materials = list(MAT_METAL=10000,MAT_DIAMOND=10000) construction_time = 100 @@ -268,7 +252,6 @@ desc = "An exosuit-mounted Rapid Construction Device." id = "mech_rcd" build_type = MECHFAB - req_tech = list("materials" = 5, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/rcd materials = list(MAT_METAL=30000,MAT_GOLD=20000,MAT_PLASMA=25000,MAT_SILVER=20000) construction_time = 1200 @@ -279,7 +262,6 @@ desc = "An exosuit mounted Gravitational Catapult." id = "mech_gravcatapult" build_type = MECHFAB - req_tech = list("bluespace" = 4, "magnets" = 3, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult materials = list(MAT_METAL=10000) construction_time = 100 @@ -290,7 +272,6 @@ desc = "Automated Repair Droid. BEEP BOOP" id = "mech_repair_droid" build_type = MECHFAB - req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000) construction_time = 100 @@ -301,7 +282,6 @@ desc = "Tesla Energy Relay" id = "mech_energy_relay" build_type = MECHFAB - req_tech = list("magnets" = 4, "powerstorage" = 5, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay materials = list(MAT_METAL=10000,MAT_GLASS=2000,MAT_GOLD=2000,MAT_SILVER=3000) construction_time = 100 @@ -312,7 +292,6 @@ desc = "Exosuit-mounted armor booster." id = "mech_ccw_armor" build_type = MECHFAB - req_tech = list("materials" = 5, "combat" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster materials = list(MAT_METAL=20000,MAT_SILVER=5000) construction_time = 100 @@ -323,7 +302,6 @@ desc = "Exosuit-mounted armor booster." id = "mech_proj_armor" build_type = MECHFAB - req_tech = list("materials" = 5, "combat" = 5, "engineering"=3) build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster materials = list(MAT_METAL=20000,MAT_GOLD=5000) construction_time = 100 @@ -334,7 +312,6 @@ desc = "An upgraded version of the standard drill." id = "mech_diamond_drill" build_type = MECHFAB - req_tech = list("materials" = 5, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill materials = list(MAT_METAL=10000,MAT_DIAMOND=6500) construction_time = 100 @@ -345,7 +322,6 @@ desc = "Compact nuclear reactor module." id = "mech_generator_nuclear" build_type = MECHFAB - req_tech = list("powerstorage"= 5, "engineering" = 4, "materials" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear materials = list(MAT_METAL=10000,MAT_GLASS=1000,MAT_SILVER=500) construction_time = 100 @@ -356,7 +332,6 @@ desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles." id = "mech_plasma_cutter" build_type = MECHFAB - req_tech = list("engineering" = 3, "materials" = 3, "plasmatech" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma materials = list(MAT_METAL = 8000, MAT_GLASS = 1000, MAT_PLASMA = 2000) construction_time = 100 @@ -367,7 +342,6 @@ desc = "A weapon for combat exosuits. Shoots non-lethal stunning electrodes." id = "mech_taser" build_type = MECHFAB - req_tech = list("combat" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser materials = list(MAT_METAL=10000) construction_time = 100 @@ -378,7 +352,6 @@ desc = "A weapon for combat exosuits. Shoots a rapid, three shot burst." id = "mech_lmg" build_type = MECHFAB - req_tech = list("combat" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg materials = list(MAT_METAL=10000) construction_time = 100 @@ -389,7 +362,6 @@ desc = "Equipment for medical exosuits. A mounted sleeper that stabilizes patients and can inject reagents in the exosuit's reserves." id = "mech_sleeper" build_type = MECHFAB - req_tech = list("biotech" = 3, "engineering" = 3, "plasmatech" = 2) build_path = /obj/item/mecha_parts/mecha_equipment/medical/sleeper materials = list(MAT_METAL=5000,MAT_GLASS=10000) construction_time = 100 @@ -400,7 +372,6 @@ desc = "Equipment for medical exosuits. A chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur." id = "mech_syringe_gun" build_type = MECHFAB - req_tech = list("magnets" = 4,"biotech" = 4, "combat" = 3, "materials" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun materials = list(MAT_METAL=3000,MAT_GLASS=2000) construction_time = 200 @@ -410,7 +381,6 @@ name = "Exosuit Medical Equipment (Medical Beamgun)" desc = "Equipment for medical exosuits. A mounted medical nanite projector which will treat patients with a focused beam." id = "mech_medi_beam" - req_tech = list("engineering" = 6, "materials" = 7, "powerstorage" = 5, "biotech" = 6) build_type = MECHFAB materials = list(MAT_METAL = 15000, MAT_GLASS = 8000, MAT_PLASMA = 3000, MAT_GOLD = 8000, MAT_DIAMOND = 2000) construction_time = 250 diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 6d0c32fcb1..74cd8805ab 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -593,7 +593,6 @@ id = "borg_upgrade_vtec" build_type = MECHFAB build_path = /obj/item/borg/upgrade/vtec - req_tech = list("engineering" = 4, "materials" = 5, "programming" = 4) materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_URANIUM= 5000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -603,7 +602,6 @@ id = "borg_upgrade_thrusters" build_type = MECHFAB build_path = /obj/item/borg/upgrade/thrusters - req_tech = list("engineering" = 4, "powerstorage" = 4) materials = list(MAT_METAL=10000, MAT_PLASMA=5000, MAT_URANIUM = 6000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -613,7 +611,6 @@ id = "borg_upgrade_disablercooler" build_type = MECHFAB build_path = /obj/item/borg/upgrade/disablercooler - req_tech = list("combat" = 5, "powerstorage" = 4, "engineering" = 4) materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_GOLD= 2000, MAT_DIAMOND = 500) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -623,7 +620,6 @@ id = "borg_upgrade_diamonddrill" build_type = MECHFAB build_path = /obj/item/borg/upgrade/ddrill - req_tech = list("engineering" = 5, "materials" = 6) materials = list(MAT_METAL=10000, MAT_DIAMOND=2000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -633,7 +629,6 @@ id = "borg_upgrade_holding" build_type = MECHFAB build_path = /obj/item/borg/upgrade/soh - req_tech = list("engineering" = 4, "materials" = 4, "bluespace" = 4) materials = list(MAT_METAL = 10000, MAT_GOLD = 250, MAT_URANIUM = 500) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -643,7 +638,6 @@ id = "borg_upgrade_lavaproof" build_type = MECHFAB build_path = /obj/item/borg/upgrade/lavaproof - req_tech = list("plasmatech" = 4, "materials" = 4, "engineering" = 4) materials = list(MAT_METAL = 10000, MAT_PLASMA = 4000, MAT_TITANIUM = 5000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -652,7 +646,6 @@ name = "Cyborg Upgrade (Illegal Modules)" id = "borg_syndicate_module" build_type = MECHFAB - req_tech = list("combat" = 4, "syndicate" = 2) build_path = /obj/item/borg/upgrade/syndicate materials = list(MAT_METAL=10000,MAT_GLASS=15000,MAT_DIAMOND = 10000) construction_time = 120 @@ -663,7 +656,6 @@ id = "borg_upgrade_selfrepair" build_type = MECHFAB build_path = /obj/item/borg/upgrade/selfrepair - req_tech = list("materials" = 4, "engineering" = 4) materials = list(MAT_METAL=15000, MAT_GLASS=15000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -673,7 +665,6 @@ id = "borg_upgrade_expandedsynthesiser" build_type = MECHFAB build_path = /obj/item/borg/upgrade/hypospray/expanded - req_tech = list("programming" = 5, "engineering" = 4, "biotech" = 5) materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_PLASMA=5000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -683,7 +674,6 @@ id = "borg_upgrade_highstrengthsynthesiser" build_type = MECHFAB build_path = /obj/item/borg/upgrade/hypospray/high_strength - req_tech = list("programming" = 5, "engineering" = 5, "biotech" = 6) materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_PLASMA=10000, MAT_URANIUM=5000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -693,7 +683,6 @@ id = "borg_upgrade_piercinghypospray" build_type = MECHFAB build_path = /obj/item/borg/upgrade/piercing_hypospray - req_tech = list("materials" = 5, "engineering" = 7, "combat" = 3) materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_TITANIUM=10000, MAT_DIAMOND=5000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -703,7 +692,6 @@ id = "borg_upgrade_defibrillator" build_type = MECHFAB build_path = /obj/item/borg/upgrade/defib - req_tech = list("programming" = 4, "engineering" = 5, "materials" = 5, "powerstorage" = 5, "biotech" = 5) materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_SILVER=10000, MAT_GOLD=10000, MAT_TITANIUM=5000, MAT_DIAMOND=5000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -714,7 +702,6 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/ai materials = list(MAT_METAL = 1200, MAT_GLASS = 1500, MAT_GOLD = 200) - req_tech = list("programming" = 4, "magnets" = 4, "engineering" = 4) construction_time = 50 category = list("Misc") @@ -734,7 +721,6 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_tracking/ai_control materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_SILVER = 200) - req_tech = list("programming" = 3, "magnets" = 2, "engineering" = 2) construction_time = 50 category = list("Misc") @@ -742,12 +728,12 @@ name = "Drone Shell" desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs." id = "drone_shell" - req_tech = list("programming" = 2, "biotech" = 4) build_type = MECHFAB | PROTOLATHE materials = list(MAT_METAL = 800, MAT_GLASS = 350) construction_time=150 build_path = /obj/item/drone_shell category = list("Misc") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/synthetic_flash name = "Flash" @@ -758,36 +744,3 @@ construction_time = 100 build_path = /obj/item/device/assembly/flash/handheld category = list("Misc") - -/datum/design/flightsuit //Multi step build process/redo WIP - name = "Flight Suit" - desc = "A specialized hardsuit that is able to attach a flightpack and accessories.." - id = "flightsuit" - build_type = MECHFAB - build_path = /obj/item/clothing/suit/space/hardsuit/flightsuit - materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_DIAMOND = 200, MAT_GOLD = 3000, MAT_SILVER = 3000, MAT_TITANIUM = 16000) //This expensive enough for you? - construction_time = 250 - category = list("Misc") - req_tech = list("magnets" = 2, "combat" = 2, "plasmatech" = 2, "materials" = 4, "engineering" = 3, "powerstorage" = 2) - -/datum/design/flightpack - name = "Flight Pack" - desc = "An advanced back-worn system that has dual ion engines powerful enough to grant a humanoid flight. Contains an internal self-recharging high-current capacitor for short, powerful boosts." - id = "flightpack" - build_type = MECHFAB - build_path = /obj/item/device/flightpack - materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_DIAMOND = 4000, MAT_GOLD = 12000, MAT_SILVER = 12000, MAT_URANIUM = 20000, MAT_PLASMA = 16000, MAT_TITANIUM = 16000) //This expensive enough for you? - construction_time = 250 - category = list("Misc") - req_tech = list("magnets" = 4, "combat" = 3, "plasmatech" = 4, "materials" = 5, "engineering" = 4, "powerstorage" = 4) - -/datum/design/flightshoes - name = "Flight Shoes" - desc = "Flight shoes, attachable to a flight suit to provide additional functions." - id = "flightshoes" - build_type = MECHFAB - build_path = /obj/item/clothing/shoes/flightshoes - materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_GOLD = 1500, MAT_SILVER = 1500, MAT_PLASMA = 2000, MAT_TITANIUM = 2000) - construction_time = 100 - category = list("Misc") - req_tech = list("magnets" = 2, "combat" = 2, "plasmatech" = 3, "materials" = 3, "engineering" = 2, "powerstorage" = 2) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index a0a7d02858..c1405ad55c 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -6,153 +6,153 @@ name = "Man-Machine Interface" desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." id = "mmi" - req_tech = list("programming" = 3, "biotech" = 2, "engineering" = 2) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 1000, MAT_GLASS = 500) construction_time = 75 build_path = /obj/item/device/mmi category = list("Misc","Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE /datum/design/posibrain name = "Positronic Brain" desc = "The latest in Artificial Intelligences." id = "mmi_posi" - req_tech = list("programming" = 5, "biotech" = 4, "plasmatech" = 3) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 1700, MAT_GLASS = 1350, MAT_GOLD = 500) //Gold, because SWAG. construction_time = 75 build_path = /obj/item/device/mmi/posibrain category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE /datum/design/bluespacebeaker name = "Bluespace Beaker" desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units." id = "bluespacebeaker" - req_tech = list("bluespace" = 6, "materials" = 5, "plasmatech" = 4) build_type = PROTOLATHE materials = list(MAT_GLASS = 3000, MAT_PLASMA = 3000, MAT_DIAMOND = 250, MAT_BLUESPACE = 250) build_path = /obj/item/reagent_containers/glass/beaker/bluespace category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE /datum/design/noreactbeaker name = "Cryostasis Beaker" desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units." id = "splitbeaker" - req_tech = list("materials" = 3, "engineering" = 3, "plasmatech" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 3000) build_path = /obj/item/reagent_containers/glass/beaker/noreact category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/bluespacesyringe name = "Bluespace Syringe" desc = "An advanced syringe that can hold 60 units of chemicals" id = "bluespacesyringe" - req_tech = list("bluespace" = 5, "materials" = 4, "biotech" = 4) build_type = PROTOLATHE materials = list(MAT_GLASS = 2000, MAT_PLASMA = 1000, MAT_DIAMOND = 1000, MAT_BLUESPACE = 500) build_path = /obj/item/reagent_containers/syringe/bluespace category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE /datum/design/noreactsyringe name = "Cryo Syringe" desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." id = "noreactsyringe" - req_tech = list("materials" = 3, "engineering" = 3) build_type = PROTOLATHE materials = list(MAT_GLASS = 2000, MAT_GOLD = 1000) build_path = /obj/item/reagent_containers/syringe/noreact category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/piercesyringe name = "Piercing Syringe" desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units." id = "piercesyringe" - req_tech = list("materials" = 7, "combat" = 3, "engineering" = 5) build_type = PROTOLATHE materials = list(MAT_GLASS = 2000, MAT_DIAMOND = 1000) build_path = /obj/item/reagent_containers/syringe/piercing category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/bluespacebodybag name = "Bluespace Body Bag" desc = "A bluespace body bag, powered by experimental bluespace technology. It can hold loads of bodies and the largest of creatures." id = "bluespacebodybag" - req_tech = list("bluespace" = 5, "materials" = 4, "plasmatech" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 3000, MAT_PLASMA = 2000, MAT_DIAMOND = 500, MAT_BLUESPACE = 500) build_path = /obj/item/bodybag/bluespace category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE /datum/design/plasmarefiller name = "Plasma-Man Jumpsuit Refill" desc = "A refill pack for the auto-extinguisher on Plasma-man suits." - id = "plasmarefiller" - req_tech = list("materials" = 2, "plasmatech" = 3) //Why did this have no plasmatech + id = "plasmarefiller" //Why did this have no plasmatech build_type = PROTOLATHE materials = list(MAT_METAL = 4000, MAT_PLASMA = 1000) build_path = /obj/item/device/extinguisher_refill category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_ALL /datum/design/alienscalpel name = "Alien Scalpel" desc = "An advanced scalpel obtained through Abductor technology." id = "alien_scalpel" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/scalpel/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/alienhemostat name = "Alien Hemostat" desc = "An advanced hemostat obtained through Abductor technology." id = "alien_hemostat" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/hemostat/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/alienretractor name = "Alien Retractor" desc = "An advanced retractor obtained through Abductor technology." id = "alien_retractor" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/retractor/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/aliensaw name = "Alien Circular Saw" desc = "An advanced surgical saw obtained through Abductor technology." id = "alien_saw" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/circular_saw/alien build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500) category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/aliendrill name = "Alien Drill" desc = "An advanced drill obtained through Abductor technology." id = "alien_drill" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/surgicaldrill/alien build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500) category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/aliencautery name = "Alien Cautery" desc = "An advanced cautery obtained through Abductor technology." id = "alien_cautery" - req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/cautery/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL ///////////////////////////////////////// //////////Cybernetic Implants//////////// @@ -162,167 +162,166 @@ name = "Welding Shield Eyes" desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision." id = "ci-welding" - req_tech = list("materials" = 4, "biotech" = 4, "engineering" = 5, "plasmatech" = 4) build_type = PROTOLATHE | MECHFAB construction_time = 40 materials = list(MAT_METAL = 600, MAT_GLASS = 400) build_path = /obj/item/organ/eyes/robotic/shield category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_gloweyes name = "Luminescent Eyes" desc = "A pair of cybernetic eyes that can emit multicolored light" id = "ci-gloweyes" - req_tech = list("materials" = 3, "biotech" = 3, "engineering" = 4) build_type = PROTOLATHE | MECHFAB construction_time = 40 materials = list(MAT_METAL = 600, MAT_GLASS = 1000) build_path = /obj/item/organ/eyes/robotic/glow category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_breather name = "Breathing Tube Implant" desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked." id = "ci-breather" - req_tech = list("materials" = 2, "biotech" = 3) build_type = PROTOLATHE | MECHFAB construction_time = 35 materials = list(MAT_METAL = 600, MAT_GLASS = 250) build_path = /obj/item/organ/cyberimp/mouth/breathing_tube category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_surgical - name = "Surgical Arm Implant" - desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." - id = "ci-surgery" - req_tech = list("materials" = 3, "engineering" = 3, "biotech" = 3, "programming" = 2, "magnets" = 3) - build_type = PROTOLATHE | MECHFAB - materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) - construction_time = 200 - build_path = /obj/item/organ/cyberimp/arm/surgery - category = list("Misc", "Medical Designs") + name = "Surgical Arm Implant" + desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." + id = "ci-surgery" + build_type = PROTOLATHE | MECHFAB + materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) + construction_time = 200 + build_path = /obj/item/organ/cyberimp/arm/surgery + category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_toolset name = "Toolset Arm Implant" desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm." id = "ci-toolset" - req_tech = list("materials" = 3, "engineering" = 4, "biotech" = 4, "powerstorage" = 4) build_type = PROTOLATHE | MECHFAB materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) construction_time = 200 build_path = /obj/item/organ/cyberimp/arm/toolset category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_medical_hud name = "Medical HUD Implant" desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." id = "ci-medhud" - req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4) build_type = PROTOLATHE | MECHFAB construction_time = 50 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 500) build_path = /obj/item/organ/cyberimp/eyes/hud/medical category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_security_hud name = "Security HUD Implant" desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control." id = "ci-sechud" - req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4, "combat" = 3) build_type = PROTOLATHE | MECHFAB construction_time = 50 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 750, MAT_GOLD = 750) build_path = /obj/item/organ/cyberimp/eyes/hud/security category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_xray name = "X-Ray Eyes" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." id = "ci-xray" - req_tech = list("materials" = 7, "programming" = 5, "biotech" = 7, "magnets" = 5,"plasmatech" = 6) build_type = PROTOLATHE | MECHFAB construction_time = 60 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_URANIUM = 1000, MAT_DIAMOND = 1000, MAT_BLUESPACE = 1000) build_path = /obj/item/organ/eyes/robotic/xray category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_thermals name = "Thermal Eyes" desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included." id = "ci-thermals" - req_tech = list("materials" = 6, "programming" = 4, "biotech" = 7, "magnets" = 5,"plasmatech" = 4) build_type = PROTOLATHE | MECHFAB construction_time = 60 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) build_path = /obj/item/organ/eyes/robotic/thermals category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_antidrop name = "Anti-Drop Implant" desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." id = "ci-antidrop" - req_tech = list("materials" = 5, "programming" = 6, "biotech" = 5) build_type = PROTOLATHE | MECHFAB construction_time = 60 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 400, MAT_GOLD = 400) build_path = /obj/item/organ/cyberimp/brain/anti_drop category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_antistun name = "CNS Rebooter Implant" desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." id = "ci-antistun" - req_tech = list("materials" = 6, "programming" = 5, "biotech" = 6) build_type = PROTOLATHE | MECHFAB construction_time = 60 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 1000) build_path = /obj/item/organ/cyberimp/brain/anti_stun category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_nutriment name = "Nutriment Pump Implant" desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." id = "ci-nutriment" - req_tech = list("materials" = 3, "powerstorage" = 4, "biotech" = 3) build_type = PROTOLATHE | MECHFAB construction_time = 40 materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_GOLD = 500) build_path = /obj/item/organ/cyberimp/chest/nutriment category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_nutriment_plus name = "Nutriment Pump Implant PLUS" desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." id = "ci-nutrimentplus" - req_tech = list("materials" = 5, "powerstorage" = 4, "biotech" = 4) build_type = PROTOLATHE | MECHFAB construction_time = 50 materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_GOLD = 500, MAT_URANIUM = 750) build_path = /obj/item/organ/cyberimp/chest/nutriment/plus category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_reviver name = "Reviver Implant" desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" id = "ci-reviver" - req_tech = list("materials" = 5, "programming" = 4, "biotech" = 5) build_type = PROTOLATHE | MECHFAB construction_time = 60 materials = list(MAT_METAL = 800, MAT_GLASS = 800, MAT_GOLD = 300, MAT_URANIUM = 500) build_path = /obj/item/organ/cyberimp/chest/reviver category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_thrusters name = "Thrusters Set Implant" desc = "This implant will allow you to use gas from environment or your internals for propulsion in zero-gravity areas." id = "ci-thrusters" - req_tech = list("materials" = 5, "biotech" = 5, "magnets" = 4, "engineering" = 7) build_type = PROTOLATHE | MECHFAB construction_time = 80 materials = list(MAT_METAL = 4000, MAT_GLASS = 2000, MAT_SILVER = 1000, MAT_DIAMOND = 1000) build_path = /obj/item/organ/cyberimp/chest/thrusters category = list("Misc", "Medical Designs") - + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL ///////////////////////////////////////// ////////////Regular Implants///////////// @@ -332,51 +331,51 @@ name = "Implanter" desc = "A sterile automatic implant injector." id = "implanter" - req_tech = list("materials" = 2, "biotech" = 3, "programming" = 2) build_type = PROTOLATHE materials = list(MAT_METAL = 600, MAT_GLASS = 200) build_path = /obj/item/implanter category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL /datum/design/implantcase name = "Implant Case" desc = "A glass case for containing an implant." id = "implantcase" - req_tech = list("biotech" = 2) build_type = PROTOLATHE materials = list(MAT_GLASS = 500) build_path = /obj/item/implantcase category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL /datum/design/implant_sadtrombone name = "Sad Trombone Implant Case" desc = "Makes death amusing." id = "implant_trombone" - req_tech = list("materials" = 2, "biotech" = 3, "programming" = 2) build_type = PROTOLATHE materials = list(MAT_GLASS = 500, MAT_BANANIUM = 500) build_path = /obj/item/implantcase/sad_trombone category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_ALL //if you get bananium you get the sad trombones. /datum/design/implant_chem name = "Chemical Implant Case" desc = "A glass case containing an implant." id = "implant_chem" - req_tech = list("materials" = 3, "biotech" = 5,) build_type = PROTOLATHE materials = list(MAT_GLASS = 700) build_path = /obj/item/implantcase/chem category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL /datum/design/implant_tracking name = "Tracking Implant Case" desc = "A glass case containing an implant." id = "implant_tracking" - req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "programming" = 2) build_type = PROTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 500) build_path = /obj/item/implantcase/track category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL //Cybernetic organs @@ -384,48 +383,48 @@ name = "Cybernetic Liver" desc = "A cybernetic liver" id = "cybernetic_liver" - req_tech = list("biotech" = 4, "materials" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 500) build_path = /obj/item/organ/liver/cybernetic category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cybernetic_heart name = "Cybernetic Heart" desc = "A cybernetic heart" id = "cybernetic_heart" - req_tech = list("biotech" = 4, "materials" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 500) build_path = /obj/item/organ/heart/cybernetic category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cybernetic_liver_u name = "Upgraded Cybernetic Liver" desc = "An upgraded cybernetic liver" id = "cybernetic_liver_u" - req_tech = list("biotech" = 5, "materials" = 5, "plasmatech" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 500) build_path = /obj/item/organ/liver/cybernetic/upgraded category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cybernetic_lungs name = "Cybernetic Lungs" desc = "A pair of cybernetic lungs." id = "cybernetic_lungs" - req_tech = list("biotech" = 4, "materials" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 500) build_path = /obj/item/organ/lungs/cybernetic category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cybernetic_lungs_u name = "Upgraded Cybernetic Lungs" desc = "A pair of upgraded cybernetic lungs." id = "cybernetic_lungs_u" - req_tech = list("biotech" = 5, "materials" = 5, "engineering" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 500) build_path = /obj/item/organ/lungs/cybernetic/upgraded category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm new file mode 100644 index 0000000000..8b193577e0 --- /dev/null +++ b/code/modules/research/designs/mining_designs.dm @@ -0,0 +1,114 @@ + +///////////////////////////////////////// +/////////////////Mining////////////////// +///////////////////////////////////////// + +/datum/design/drill + name = "Mining Drill" + desc = "Yours is the drill that will pierce through the rock walls." + id = "drill" + build_type = PROTOLATHE + materials = list(MAT_METAL = 6000, MAT_GLASS = 1000) //expensive, but no need for miners. + build_path = /obj/item/pickaxe/drill + category = list("Mining Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + +/datum/design/drill_diamond + name = "Diamond-Tipped Mining Drill" + desc = "Yours is the drill that will pierce the heavens!" + id = "drill_diamond" + build_type = PROTOLATHE + materials = list(MAT_METAL = 6000, MAT_GLASS = 1000, MAT_DIAMOND = 2000) //Yes, a whole diamond is needed. + build_path = /obj/item/pickaxe/drill/diamonddrill + category = list("Mining Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + +/datum/design/plasmacutter + name = "Plasma Cutter" + desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff." + id = "plasmacutter" + build_type = PROTOLATHE + materials = list(MAT_METAL = 1500, MAT_GLASS = 500, MAT_PLASMA = 400) + build_path = /obj/item/gun/energy/plasmacutter + category = list("Mining Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + +/datum/design/plasmacutter_adv + name = "Advanced Plasma Cutter" + desc = "It's an advanced plasma cutter, oh my god." + id = "plasmacutter_adv" + build_type = PROTOLATHE + materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_PLASMA = 2000, MAT_GOLD = 500) + build_path = /obj/item/gun/energy/plasmacutter/adv + category = list("Mining Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + +/datum/design/jackhammer + name = "Sonic Jackhammer" + desc = "Essentially a handheld planet-cracker. Can drill through walls with ease as well." + id = "jackhammer" + build_type = PROTOLATHE + materials = list(MAT_METAL = 6000, MAT_GLASS = 2000, MAT_SILVER = 2000, MAT_DIAMOND = 6000) + build_path = /obj/item/pickaxe/drill/jackhammer + category = list("Mining Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + +/datum/design/superresonator + name = "Upgraded Resonator" + desc = "An upgraded version of the resonator that allows more fields to be active at once." + id = "superresonator" + build_type = PROTOLATHE + materials = list(MAT_METAL = 4000, MAT_GLASS = 1500, MAT_SILVER = 1000, MAT_URANIUM = 1000) + build_path = /obj/item/resonator/upgraded + category = list("Mining Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + +/datum/design/trigger_guard_mod + name = "Kinetic Accelerator Trigger Guard Mod" + desc = "A device which allows kinetic accelerators to be wielded by any organism." + id = "triggermod" + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/trigger_guard + category = list("Mining Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + +/datum/design/damage_mod + name = "Kinetic Accelerator Damage Mod" + desc = "A device which allows kinetic accelerators to deal more damage." + id = "damagemod" + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/damage + category = list("Mining Designs", "Cyborg Upgrade Modules") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + +/datum/design/cooldown_mod + name = "Kinetic Accelerator Cooldown Mod" + desc = "A device which decreases the cooldown of a Kinetic Accelerator." + id = "cooldownmod" + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/cooldown + category = list("Mining Designs", "Cyborg Upgrade Modules") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + +/datum/design/range_mod + name = "Kinetic Accelerator Range Mod" + desc = "A device which allows kinetic accelerators to fire at a further range." + id = "rangemod" + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/range + category = list("Mining Designs", "Cyborg Upgrade Modules") + departmental_flags = DEPARTMENTAL_FLAG_CARGO + +/datum/design/hyperaccelerator + name = "Kinetic Accelerator Mining AoE Mod" + desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts that destroy rock." + id = "hypermod" + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) + build_path = /obj/item/borg/upgrade/modkit/aoe/turfs + category = list("Mining Designs", "Cyborg Upgrade Modules") + departmental_flags = DEPARTMENTAL_FLAG_CARGO diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm new file mode 100644 index 0000000000..189c06dd36 --- /dev/null +++ b/code/modules/research/designs/misc_designs.dm @@ -0,0 +1,316 @@ + +///////////////////////////////////////// +/////////////////HUDs//////////////////// +///////////////////////////////////////// + +/datum/design/health_hud + name = "Health Scanner HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." + id = "health_hud" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/clothing/glasses/hud/health + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + +/datum/design/health_hud_night + name = "Night Vision Health Scanner HUD" + desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness." + id = "health_hud_night" + build_type = PROTOLATHE + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_SILVER = 350) + build_path = /obj/item/clothing/glasses/hud/health/night + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + +/datum/design/security_hud + name = "Security HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status." + id = "security_hud" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/clothing/glasses/hud/security + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/security_hud_night + name = "Night Vision Security HUD" + desc = "A heads-up display which provides id data and vision in complete darkness." + id = "security_hud_night" + build_type = PROTOLATHE + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_GOLD = 350) + build_path = /obj/item/clothing/glasses/hud/security/night + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/diagnostic_hud + name = "Diagnostic HUD" + desc = "A HUD used to analyze and determine faults within robotic machinery." + id = "diagnostic_hud" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/clothing/glasses/hud/diagnostic + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/diagnostic_hud_night + name = "Night Vision Diagnostic HUD" + desc = "Upgraded version of the diagnostic HUD designed to function during a power failure." + id = "diagnostic_hud_night" + build_type = PROTOLATHE + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_URANIUM = 1000, MAT_PLASMA = 300) + build_path = /obj/item/clothing/glasses/hud/diagnostic/night + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +///////////////////////////////////////// +//////////////////Misc/////////////////// +///////////////////////////////////////// + +/datum/design/welding_mask + name = "Welding Gas Mask" + desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd." + id = "weldingmask" + build_type = PROTOLATHE + materials = list(MAT_METAL = 3000, MAT_GLASS = 1000) + build_path = /obj/item/clothing/mask/gas/welding + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/portaseeder + name = "Portable Seed Extractor" + desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant." + id = "portaseeder" + build_type = PROTOLATHE + materials = list(MAT_METAL = 1000, MAT_GLASS = 400) + build_path = /obj/item/storage/bag/plants/portaseeder + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +/datum/design/air_horn + name = "Air Horn" + desc = "Damn son, where'd you find this?" + id = "air_horn" + build_type = PROTOLATHE + materials = list(MAT_METAL = 4000, MAT_BANANIUM = 1000) + build_path = /obj/item/bikehorn/airhorn + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ALL //HONK! + +/datum/design/mesons + name = "Optical Meson Scanners" + desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." + id = "mesons" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/clothing/glasses/meson + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/engine_goggles + name = "Engineering Scanner Goggles" + desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes." + id = "engine_goggles" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_PLASMA = 100) + build_path = /obj/item/clothing/glasses/meson/engine + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/tray_goggles + name = "Optical T-Ray Scanners" + desc = "Used by engineering staff to see underfloor objects such as cables and pipes." + id = "tray_goggles" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/clothing/glasses/meson/engine/tray + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/nvgmesons + name = "Night Vision Optical Meson Scanners" + desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display." + id = "nvgmesons" + build_type = PROTOLATHE + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000) + build_path = /obj/item/clothing/glasses/meson/night + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO + +/datum/design/night_vision_goggles + name = "Night Vision Goggles" + desc = "Goggles that let you see through darkness unhindered." + id = "night_visision_goggles" + build_type = PROTOLATHE + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000) + build_path = /obj/item/clothing/glasses/night + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY + +/datum/design/magboots + name = "Magnetic Boots" + desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle." + id = "magboots" + build_type = PROTOLATHE + materials = list(MAT_METAL = 4500, MAT_SILVER = 1500, MAT_GOLD = 2500) + build_path = /obj/item/clothing/shoes/magboots + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/sci_goggles + name = "Science Goggles" + desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine." + id = "scigoggles" + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/clothing/glasses/science + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/handdrill + name = "Hand Drill" + desc = "A small electric hand drill with an interchangeable screwdriver and bolt bit" + id = "handdrill" + build_type = PROTOLATHE + materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500) + build_path = /obj/item/screwdriver/power + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/jawsoflife + name = "Jaws of Life" + desc = "A small, compact Jaws of Life with an interchangeable pry jaws and cutting jaws" + id = "jawsoflife" // added one more requirment since the Jaws of Life are a bit OP + build_path = /obj/item/crowbar/power + build_type = PROTOLATHE + materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500) + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/alienwrench + name = "Alien Wrench" + desc = "An advanced wrench obtained through Abductor technology." + id = "alien_wrench" + build_path = /obj/item/wrench/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/alienwirecutters + name = "Alien Wirecutters" + desc = "Advanced wirecutters obtained through Abductor technology." + id = "alien_wirecutters" + build_path = /obj/item/wirecutters/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/alienscrewdriver + name = "Alien Screwdriver" + desc = "An advanced screwdriver obtained through Abductor technology." + id = "alien_screwdriver" + build_path = /obj/item/screwdriver/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/aliencrowbar + name = "Alien Crowbar" + desc = "An advanced crowbar obtained through Abductor technology." + id = "alien_crowbar" + build_path = /obj/item/crowbar/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/alienwelder + name = "Alien Welding Tool" + desc = "An advanced welding tool obtained through Abductor technology." + id = "alien_welder" + build_path = /obj/item/weldingtool/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/alienmultitool + name = "Alien Multitool" + desc = "An advanced multitool obtained through Abductor technology." + id = "alien_multitool" + build_path = /obj/item/device/multitool/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000) + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/diskplantgene + name = "Plant Data Disk" + desc = "A disk for storing plant genetic data." + id = "diskplantgene" + build_type = PROTOLATHE + materials = list(MAT_METAL=200, MAT_GLASS=100) + build_path = /obj/item/disk/plantgene + category = list("Electronics") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +///////////////////////////////////////// +////////////Janitor Designs////////////// +///////////////////////////////////////// + +/datum/design/advmop + name = "Advanced Mop" + desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals." + id = "advmop" + build_type = PROTOLATHE + materials = list(MAT_METAL = 2500, MAT_GLASS = 200) + build_path = /obj/item/mop/advanced + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +/datum/design/blutrash + name = "Trashbag of Holding" + desc = "An advanced trash bag with bluespace properties; capable of holding a plethora of garbage." + id = "blutrash" + build_type = PROTOLATHE + materials = list(MAT_GOLD = 1500, MAT_URANIUM = 250, MAT_PLASMA = 1500) + build_path = /obj/item/storage/bag/trash/bluespace + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +/datum/design/buffer + name = "Floor Buffer Upgrade" + desc = "A floor buffer that can be attached to vehicular janicarts." + id = "buffer" + build_type = PROTOLATHE + materials = list(MAT_METAL = 3000, MAT_GLASS = 200) + build_path = /obj/item/janiupgrade + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +/datum/design/holosign + name = "Holographic Sign Projector" + desc = "A holograpic projector used to project various warning signs." + id = "holosign" + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 1000) + build_path = /obj/item/holosign_creator + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +///////////////////////////////////////// +////////////Tools////////////// +///////////////////////////////////////// + +/datum/design/exwelder + name = "Experimental Welding Tool" + desc = "An experimental welder capable of self-fuel generation." + id = "exwelder" + build_type = PROTOLATHE + materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_PLASMA = 1500, MAT_URANIUM = 200) + build_path = /obj/item/weldingtool/experimental + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index a6ef6cd2bf..e8d9478174 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -6,96 +6,95 @@ name = "Basic Power Cell" desc = "A basic power cell that holds 1 MJ of energy." id = "basic_cell" - req_tech = list("powerstorage" = 1) build_type = PROTOLATHE | AUTOLATHE |MECHFAB materials = list(MAT_METAL = 700, MAT_GLASS = 50) construction_time=100 build_path = /obj/item/stock_parts/cell category = list("Misc","Power Designs","Machinery","initial") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /datum/design/high_cell name = "High-Capacity Power Cell" desc = "A power cell that holds 10 MJ of energy." id = "high_cell" - req_tech = list("powerstorage" = 2) build_type = PROTOLATHE | AUTOLATHE | MECHFAB materials = list(MAT_METAL = 700, MAT_GLASS = 60) construction_time=100 build_path = /obj/item/stock_parts/cell/high category = list("Misc","Power Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /datum/design/super_cell name = "Super-Capacity Power Cell" desc = "A power cell that holds 20 MJ of energy." id = "super_cell" - req_tech = list("powerstorage" = 3, "materials" = 3) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 700, MAT_GLASS = 70) construction_time=100 build_path = /obj/item/stock_parts/cell/super category = list("Misc","Power Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /datum/design/hyper_cell name = "Hyper-Capacity Power Cell" desc = "A power cell that holds 30 MJ of energy." id = "hyper_cell" - req_tech = list("powerstorage" = 5, "materials" = 5, "engineering" = 5) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 700, MAT_GOLD = 150, MAT_SILVER = 150, MAT_GLASS = 80) construction_time=100 build_path = /obj/item/stock_parts/cell/hyper category = list("Misc","Power Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /datum/design/bluespace_cell name = "Bluespace Power Cell" desc = "A power cell that holds 40 MJ of energy." id = "bluespace_cell" - req_tech = list("powerstorage" = 6, "materials" = 5, "engineering" = 5, "bluespace" = 5) build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 800, MAT_GOLD = 120, MAT_GLASS = 160, MAT_DIAMOND = 160, MAT_TITANIUM = 300, MAT_BLUESPACE = 100) construction_time=100 build_path = /obj/item/stock_parts/cell/bluespace category = list("Misc","Power Designs") - + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /datum/design/light_replacer name = "Light Replacer" desc = "A device to automatically replace lights. Refill with working lightbulbs." id = "light_replacer" - req_tech = list("magnets" = 3, "engineering" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 1500, MAT_SILVER = 150, MAT_GLASS = 3000) build_path = /obj/item/device/lightreplacer category = list("Power Designs") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE /datum/design/inducer name = "Inducer" desc = "The NT-75 Electromagnetic Power Inducer can wirelessly induce electric charge in an object, allowing you to recharge power cells without having to remove them." id = "inducer" - req_tech = list("powerstorage" = 4, "engineering" = 4, "magnets" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 3000, MAT_GLASS = 1000) build_path = /obj/item/inducer/sci category = list("Power Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /datum/design/board/pacman name = "Machine Design (PACMAN-type Generator Board)" desc = "The circuit board that for a PACMAN-type portable generator." id = "pacman" - req_tech = list("programming" = 2, "plasmatech" = 3, "powerstorage" = 3, "engineering" = 3) build_path = /obj/item/circuitboard/machine/pacman category = list("Engineering Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/board/pacman/super name = "Machine Design (SUPERPACMAN-type Generator Board)" desc = "The circuit board that for a SUPERPACMAN-type portable generator." id = "superpacman" - req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) build_path = /obj/item/circuitboard/machine/pacman/super + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/board/pacman/mrs name = "Machine Design (MRSPACMAN-type Generator Board)" desc = "The circuit board that for a MRSPACMAN-type portable generator." id = "mrspacman" - req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5, "plasmatech" = 4) build_path = /obj/item/circuitboard/machine/pacman/mrs + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm index 7668f7b734..0a2fdbd83e 100644 --- a/code/modules/research/designs/smelting_designs.dm +++ b/code/modules/research/designs/smelting_designs.dm @@ -29,8 +29,8 @@ name = "Alien Alloy" desc = "A sheet of reverse-engineered alien alloy." id = "alienalloy" - req_tech = list("abductor" = 1, "materials" = 7, "plasmatech" = 2) build_type = PROTOLATHE | SMELTER materials = list(MAT_METAL = 4000, MAT_PLASMA = 4000) build_path = /obj/item/stack/sheet/mineral/abductor category = list("Stock Parts") + departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm index 799c400d08..257d63ce40 100644 --- a/code/modules/research/designs/stock_parts_designs.dm +++ b/code/modules/research/designs/stock_parts_designs.dm @@ -6,272 +6,271 @@ name = "Rapid Part Exchange Device" desc = "Special mechanical module made to store, sort, and apply standard machine parts." id = "rped" - req_tech = list("engineering" = 1) build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_GLASS = 5000) //hardcore build_path = /obj/item/storage/part_replacer category = list("Stock Parts") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/BS_RPED name = "Bluespace RPED" desc = "Powered by bluespace technology, this RPED variant can upgrade buildings from a distance, without needing to remove the panel first." id = "bs_rped" - req_tech = list("engineering" = 4, "bluespace" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 15000, MAT_GLASS = 5000, MAT_SILVER = 2500) //hardcore build_path = /obj/item/storage/part_replacer/bluespace category = list("Stock Parts") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE //Capacitors /datum/design/basic_capacitor name = "Basic Capacitor" desc = "A stock part used in the construction of various devices." id = "basic_capacitor" - req_tech = list("powerstorage" = 1) build_type = PROTOLATHE | AUTOLATHE materials = list(MAT_METAL = 100, MAT_GLASS = 100) build_path = /obj/item/stock_parts/capacitor category = list("Stock Parts","Machinery","initial") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/adv_capacitor name = "Advanced Capacitor" desc = "A stock part used in the construction of various devices." id = "adv_capacitor" - req_tech = list("powerstorage" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 150, MAT_GLASS = 150) build_path = /obj/item/stock_parts/capacitor/adv category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/super_capacitor name = "Super Capacitor" desc = "A stock part used in the construction of various devices." id = "super_capacitor" - req_tech = list("powerstorage" = 5, "engineering" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 100) build_path = /obj/item/stock_parts/capacitor/super category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/quadratic_capacitor name = "Quadratic Capacitor" desc = "A stock part used in the construction of various devices." id = "quadratic_capacitor" - req_tech = list("powerstorage" = 6, "engineering" = 5, "materials" = 5, "bluespace" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 100, MAT_DIAMOND = 100) build_path = /obj/item/stock_parts/capacitor/quadratic category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE //Scanning modules /datum/design/basic_scanning name = "Basic Scanning Module" desc = "A stock part used in the construction of various devices." id = "basic_scanning" - req_tech = list("magnets" = 1) build_type = PROTOLATHE | AUTOLATHE materials = list(MAT_METAL = 100, MAT_GLASS = 50) build_path = /obj/item/stock_parts/scanning_module category = list("Stock Parts","Machinery","initial") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/adv_scanning name = "Advanced Scanning Module" desc = "A stock part used in the construction of various devices." id = "adv_scanning" - req_tech = list("magnets" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 150, MAT_GLASS = 100) build_path = /obj/item/stock_parts/scanning_module/adv category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/phasic_scanning name = "Phasic Scanning Module" desc = "A stock part used in the construction of various devices." id = "phasic_scanning" - req_tech = list("magnets" = 5, "engineering" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 200, MAT_GLASS = 150, MAT_SILVER = 60) build_path = /obj/item/stock_parts/scanning_module/phasic category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/triphasic_scanning name = "Triphasic Scanning Module" desc = "A stock part used in the construction of various devices." id = "triphasic_scanning" - req_tech = list("magnets" = 6, "materials" = 5, "engineering" = 5, "bluespace" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_DIAMOND = 30, MAT_BLUESPACE = 30) build_path = /obj/item/stock_parts/scanning_module/triphasic category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE //Maipulators /datum/design/micro_mani name = "Micro Manipulator" desc = "A stock part used in the construction of various devices." id = "micro_mani" - req_tech = list("materials" = 1) build_type = PROTOLATHE | AUTOLATHE materials = list(MAT_METAL = 100) build_path = /obj/item/stock_parts/manipulator category = list("Stock Parts","Machinery","initial") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/nano_mani name = "Nano Manipulator" desc = "A stock part used in the construction of various devices." id = "nano_mani" - req_tech = list("materials" = 3, "programming" = 2) build_type = PROTOLATHE materials = list(MAT_METAL = 150) build_path = /obj/item/stock_parts/manipulator/nano category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/pico_mani name = "Pico Manipulator" desc = "A stock part used in the construction of various devices." id = "pico_mani" - req_tech = list("materials" = 5, "programming" = 4, "engineering" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 200) build_path = /obj/item/stock_parts/manipulator/pico category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/femto_mani name = "Femto Manipulator" desc = "A stock part used in the construction of various devices." id = "femto_mani" - req_tech = list("materials" = 7, "programming" = 5, "engineering" = 5, "bluespace" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 200, MAT_DIAMOND = 30, MAT_TITANIUM = 30) build_path = /obj/item/stock_parts/manipulator/femto category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE //Micro-lasers /datum/design/basic_micro_laser name = "Basic Micro-Laser" desc = "A stock part used in the construction of various devices." id = "basic_micro_laser" - req_tech = list("magnets" = 1) build_type = PROTOLATHE | AUTOLATHE materials = list(MAT_METAL = 100, MAT_GLASS = 50) build_path = /obj/item/stock_parts/micro_laser category = list("Stock Parts","Machinery","initial") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/high_micro_laser name = "High-Power Micro-Laser" desc = "A stock part used in the construction of various devices." id = "high_micro_laser" - req_tech = list("magnets" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 150, MAT_GLASS = 100) build_path = /obj/item/stock_parts/micro_laser/high category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/ultra_micro_laser name = "Ultra-High-Power Micro-Laser" desc = "A stock part used in the construction of various devices." id = "ultra_micro_laser" - req_tech = list("magnets" = 5, "engineering" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 200, MAT_GLASS = 150, MAT_URANIUM = 60) build_path = /obj/item/stock_parts/micro_laser/ultra category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/quadultra_micro_laser name = "Quad-Ultra Micro-Laser" desc = "A stock part used in the construction of various devices." id = "quadultra_micro_laser" - req_tech = list("magnets" = 6, "materials" = 5, "engineering" = 5, "bluespace" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_URANIUM = 100, MAT_DIAMOND = 60) build_path = /obj/item/stock_parts/micro_laser/quadultra category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/basic_matter_bin name = "Basic Matter Bin" desc = "A stock part used in the construction of various devices." id = "basic_matter_bin" - req_tech = list("materials" = 1) build_type = PROTOLATHE | AUTOLATHE materials = list(MAT_METAL = 100) build_path = /obj/item/stock_parts/matter_bin category = list("Stock Parts","Machinery","initial") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/adv_matter_bin name = "Advanced Matter Bin" desc = "A stock part used in the construction of various devices." id = "adv_matter_bin" - req_tech = list("materials" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 150) build_path = /obj/item/stock_parts/matter_bin/adv category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/super_matter_bin name = "Super Matter Bin" desc = "A stock part used in the construction of various devices." id = "super_matter_bin" - req_tech = list("materials" = 5, "engineering" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 200) build_path = /obj/item/stock_parts/matter_bin/super category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/bluespace_matter_bin name = "Bluespace Matter Bin" desc = "A stock part used in the construction of various devices." id = "bluespace_matter_bin" - req_tech = list("materials" = 7, "engineering" = 5, "bluespace" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 250, MAT_DIAMOND = 100, MAT_BLUESPACE = 100) build_path = /obj/item/stock_parts/matter_bin/bluespace category = list("Stock Parts") lathe_time_factor = 0.2 + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE //T-Comms devices /datum/design/subspace_ansible name = "Subspace Ansible" desc = "A compact module capable of sensing extradimensional activity." id = "s-ansible" - req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2) build_type = PROTOLATHE materials = list(MAT_METAL = 100, MAT_SILVER = 100) build_path = /obj/item/stock_parts/subspace/ansible category = list("Stock Parts") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/hyperwave_filter name = "Hyperwave Filter" desc = "A tiny device capable of filtering and converting super-intense radiowaves." id = "s-filter" - req_tech = list("programming" = 3, "magnets" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 100, MAT_SILVER = 100) build_path = /obj/item/stock_parts/subspace/filter category = list("Stock Parts") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/subspace_amplifier name = "Subspace Amplifier" desc = "A compact micro-machine capable of amplifying weak subspace transmissions." id = "s-amplifier" - req_tech = list("programming" = 3, "magnets" = 4, "materials" = 3, "bluespace" = 2) build_type = PROTOLATHE materials = list(MAT_METAL = 100, MAT_GOLD = 100, MAT_URANIUM = 100) build_path = /obj/item/stock_parts/subspace/amplifier @@ -281,38 +280,38 @@ name = "Subspace Treatment Disk" desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." id = "s-treatment" - req_tech = list("programming" = 2, "magnets" = 3, "materials" = 2, "bluespace" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 100, MAT_SILVER = 200) build_path = /obj/item/stock_parts/subspace/treatment category = list("Stock Parts") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/subspace_analyzer name = "Subspace Analyzer" desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." id = "s-analyzer" - req_tech = list("programming" = 3, "magnets" = 4, "materials" = 2, "bluespace" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 100, MAT_GOLD = 100) build_path = /obj/item/stock_parts/subspace/analyzer category = list("Stock Parts") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/subspace_crystal name = "Ansible Crystal" desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." id = "s-crystal" - req_tech = list("magnets" = 2, "materials" = 2, "bluespace" = 3, "plasmatech" = 3) build_type = PROTOLATHE materials = list(MAT_GLASS = 800, MAT_SILVER = 100, MAT_GOLD = 100) build_path = /obj/item/stock_parts/subspace/crystal category = list("Stock Parts") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /datum/design/subspace_transmitter name = "Subspace Transmitter" desc = "A large piece of equipment used to open a window into the subspace dimension." id = "s-transmitter" - req_tech = list("magnets" = 3, "materials" = 4, "bluespace" = 4) build_type = PROTOLATHE materials = list(MAT_GLASS = 100, MAT_SILVER = 100, MAT_URANIUM = 100) build_path = /obj/item/stock_parts/subspace/transmitter category = list("Stock Parts") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/telecomms_designs.dm b/code/modules/research/designs/telecomms_designs.dm index 5822c5b808..09d02c3ccc 100644 --- a/code/modules/research/designs/telecomms_designs.dm +++ b/code/modules/research/designs/telecomms_designs.dm @@ -6,7 +6,6 @@ name = "Machine Design (Subspace Receiver)" desc = "Allows for the construction of Subspace Receiver equipment." id = "s-receiver" - req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) build_path = /obj/item/circuitboard/machine/telecomms/receiver category = list("Subspace Telecomms") @@ -14,7 +13,6 @@ name = "Machine Design (Bus Mainframe)" desc = "Allows for the construction of Telecommunications Bus Mainframes." id = "s-bus" - req_tech = list("programming" = 2, "engineering" = 2) build_path = /obj/item/circuitboard/machine/telecomms/bus category = list("Subspace Telecomms") @@ -22,7 +20,6 @@ name = "Machine Design (Hub Mainframe)" desc = "Allows for the construction of Telecommunications Hub Mainframes." id = "s-hub" - req_tech = list("programming" = 2, "engineering" = 2) build_path = /obj/item/circuitboard/machine/telecomms/hub category = list("Subspace Telecomms") @@ -30,7 +27,6 @@ name = "Machine Design (Relay Mainframe)" desc = "Allows for the construction of Telecommunications Relay Mainframes." id = "s-relay" - req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 2) build_path = /obj/item/circuitboard/machine/telecomms/relay category = list("Subspace Telecomms") @@ -38,7 +34,6 @@ name = "Machine Design (Processor Unit)" desc = "Allows for the construction of Telecommunications Processor equipment." id = "s-processor" - req_tech = list("programming" = 2, "engineering" = 2) build_path = /obj/item/circuitboard/machine/telecomms/processor category = list("Subspace Telecomms") @@ -46,7 +41,6 @@ name = "Machine Design (Server Mainframe)" desc = "Allows for the construction of Telecommunications Servers." id = "s-server" - req_tech = list("programming" = 2, "engineering" = 2) build_path = /obj/item/circuitboard/machine/telecomms/server category = list("Subspace Telecomms") @@ -54,6 +48,5 @@ name = "Machine Design (Subspace Broadcaster)" desc = "Allows for the construction of Subspace Broadcasting equipment." id = "s-broadcaster" - req_tech = list("programming" = 2, "engineering" = 2) build_path = /obj/item/circuitboard/machine/telecomms/broadcaster category = list("Subspace Telecomms") diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 5cd10ca50d..66fb69a8a3 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -6,163 +6,173 @@ name = "Test-Range Firing Pin" desc = "This safety firing pin allows firearms to be operated within proximity to a firing range." id = "pin_testing" - req_tech = list("combat" = 2, "materials" = 2) build_type = PROTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 300) build_path = /obj/item/device/firing_pin/test_range category = list("Firing Pins") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/pin_mindshield name = "Mindshield Firing Pin" desc = "This is a security firing pin which only authorizes users who are mindshield-implanted." id = "pin_loyalty" - req_tech = list("combat" = 5, "materials" = 6) build_type = PROTOLATHE materials = list(MAT_SILVER = 600, MAT_DIAMOND = 600, MAT_URANIUM = 200) build_path = /obj/item/device/firing_pin/implant/mindshield category = list("Firing Pins") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/stunrevolver name = "Tesla Revolver" desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." id = "stunrevolver" - req_tech = list("combat" = 4, "materials" = 4, "powerstorage" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_GLASS = 10000, MAT_SILVER = 10000) build_path = /obj/item/gun/energy/tesla_revolver category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/nuclear_gun name = "Advanced Energy Gun" desc = "An energy gun with an experimental miniaturized reactor." id = "nuclear_gun" - req_tech = list("combat" = 5, "magnets" = 5, "powerstorage" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 3000, MAT_TITANIUM = 1000) build_path = /obj/item/gun/energy/e_gun/nuclear category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/tele_shield name = "Telescopic Riot Shield" desc = "An advanced riot shield made of lightweight materials that collapses for easy storage." id = "tele_shield" - req_tech = list("combat" = 4, "materials" = 3, "engineering" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 4000, MAT_GLASS = 4000, MAT_SILVER = 300, MAT_TITANIUM = 200) build_path = /obj/item/shield/riot/tele category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/beamrifle name = "Beam Marksman Rifle" desc = "A powerful long ranged anti-material rifle that fires charged particle beams to obliterate targets." id = "beamrifle" - req_tech = list("combat" = 7, "magnets" = 5, "powerstorage" = 5, "materials" = 7, "programming" = 5) build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_DIAMOND = 5000, MAT_URANIUM = 8000, MAT_SILVER = 4500, MAT_GOLD = 5000) build_path = /obj/item/gun/energy/beam_rifle category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/decloner name = "Decloner" desc = "Your opponent will bubble into a messy pile of goop." id = "decloner" - req_tech = list("combat" = 5, "materials" = 5, "biotech" = 6, "plasmatech" = 7) build_type = PROTOLATHE materials = list(MAT_GOLD = 5000,MAT_URANIUM = 10000) reagents_list = list("mutagen" = 40) build_path = /obj/item/gun/energy/decloner category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/rapidsyringe name = "Rapid Syringe Gun" desc = "A gun that fires many syringes." id = "rapidsyringe" - req_tech = list("combat" = 2, "biotech" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 5000, MAT_GLASS = 1000) build_path = /obj/item/gun/syringe/rapidsyringe category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL //uwu /datum/design/temp_gun name = "Temperature Gun" desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want id = "temp_gun" - req_tech = list("combat" = 4, "materials" = 4, "powerstorage" = 3, "magnets" = 2) build_type = PROTOLATHE materials = list(MAT_METAL = 5000, MAT_GLASS = 500, MAT_SILVER = 3000) build_path = /obj/item/gun/energy/temperature category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/flora_gun name = "Floral Somatoray" desc = "A tool that discharges controlled radiation which induces mutation in plant cells. Harmless to other organic life." id = "flora_gun" - req_tech = list("materials" = 2, "biotech" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_GLASS = 500) reagents_list = list("radium" = 20) build_path = /obj/item/gun/energy/floragun category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE /datum/design/large_grenade name = "Large Grenade" desc = "A grenade that affects a larger area and use larger containers." id = "large_Grenade" - req_tech = list("combat" = 3, "engineering" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 3000) build_path = /obj/item/grenade/chem_grenade/large category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL /datum/design/pyro_grenade name = "Pyro Grenade" desc = "An advanced grenade that is able to self ignite its mixture." id = "pyro_Grenade" - req_tech = list("combat" = 4, "engineering" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_PLASMA = 500) build_path = /obj/item/grenade/chem_grenade/pyro category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL + +/datum/design/cryo_grenade + name = "Cryo Grenade" + desc = "An advanced grenade that rapidly cools its contents upon detonation." + id = "cryo_Grenade" + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 500) + build_path = /obj/item/grenade/chem_grenade/cryo + category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL /datum/design/adv_grenade name = "Advanced Release Grenade" desc = "An advanced grenade that can be detonated several times, best used with a repeating igniter." id = "adv_Grenade" - req_tech = list("combat" = 3, "engineering" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 3000, MAT_GLASS = 500) build_path = /obj/item/grenade/chem_grenade/adv_release category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL /datum/design/xray name = "Xray Laser Gun" desc = "Not quite as menacing as it sounds" - id = "xray" - req_tech = list("combat" = 7, "magnets" = 5, "biotech" = 5, "powerstorage" = 4) + id = "xray_laser" build_type = PROTOLATHE materials = list(MAT_GOLD = 5000, MAT_URANIUM = 4000, MAT_METAL = 5000, MAT_TITANIUM = 2000, MAT_BLUESPACE = 2000) build_path = /obj/item/gun/energy/xray category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/ioncarbine name = "Ion Carbine" desc = "How to dismantle a cyborg : The gun." id = "ioncarbine" - req_tech = list("combat" = 5, "magnets" = 4) build_type = PROTOLATHE materials = list(MAT_SILVER = 6000, MAT_METAL = 8000, MAT_URANIUM = 2000) build_path = /obj/item/gun/energy/ionrifle/carbine category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/wormhole_projector name = "Bluespace Wormhole Projector" desc = "A projector that emits high density quantum-coupled bluespace beams." id = "wormholeprojector" - req_tech = list("combat" = 5, "engineering" = 5, "bluespace" = 7, "plasmatech" = 6) build_type = PROTOLATHE materials = list(MAT_SILVER = 2000, MAT_METAL = 5000, MAT_DIAMOND = 2000, MAT_BLUESPACE = 3000) build_path = /obj/item/gun/energy/wormhole_projector category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE //WT550 Mags @@ -170,11 +180,11 @@ name = "WT-550 Auto Gun Magazine (4.6x30mm)" desc = "A 20 round magazine for the out of date security WT-550 Auto Rifle" id = "mag_oldsmg" - req_tech = list("combat" = 1, "materials" = 1) build_type = PROTOLATHE materials = list(MAT_METAL = 4000) build_path = /obj/item/ammo_box/magazine/wt550m9 category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/mag_oldsmg/ap_mag name = "WT-550 Auto Gun Armour Piercing Magazine (4.6x30mm AP)" @@ -189,53 +199,54 @@ id = "mag_oldsmg_ic" materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_GLASS = 1000) build_path = /obj/item/ammo_box/magazine/wt550m9/wtic + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/stunshell name = "Stun Shell" desc = "A stunning shell for a shotgun." id = "stunshell" - req_tech = list("combat" = 3, "materials" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 200) build_path = /obj/item/ammo_casing/shotgun/stunslug category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/techshell name = "Unloaded Technological Shotshell" desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects." id = "techshotshell" - req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 4, "magnets" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 1000, MAT_GLASS = 200) build_path = /obj/item/ammo_casing/shotgun/techshell category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_SCIENCE /datum/design/suppressor name = "Universal Suppressor" desc = "A reverse-engineered universal suppressor that fits on most small arms with threaded barrels." id = "suppressor" - req_tech = list("combat" = 6, "engineering" = 5, "syndicate" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 500) build_path = /obj/item/suppressor category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY /datum/design/gravitygun name = "One-point Bluespace-gravitational Manipulator" desc = "A multi-mode device that blasts one-point bluespace-gravitational bolts that locally distort gravity." id = "gravitygun" - req_tech = list("combat" = 4, "materials" = 5, "bluespace" = 4, "powerstorage" = 4, "magnets" = 5) build_type = PROTOLATHE materials = list(MAT_SILVER = 8000, MAT_URANIUM = 8000, MAT_GLASS = 12000, MAT_METAL = 12000, MAT_DIAMOND = 3000, MAT_BLUESPACE = 3000) build_path = /obj/item/gun/energy/gravity_gun category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/largecrossbow name = "Energy Crossbow" desc = "A reverse-engineered energy crossbow favored by syndicate infiltration teams and carp hunters." id = "largecrossbow" - req_tech = list("combat" = 5, "engineering" = 3, "magnets" = 5, "syndicate" = 3) build_type = PROTOLATHE materials = list(MAT_METAL = 5000, MAT_GLASS = 1500, MAT_URANIUM = 1500, MAT_SILVER = 1500) build_path = /obj/item/gun/energy/kinetic_accelerator/crossbow/large category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 790cba0889..ec6ed89e19 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -7,42 +7,35 @@ It is used to destroy hand-held objects and advance technological research. Cont Note: Must be placed within 3 tiles of the R&D Console */ -/obj/machinery/r_n_d/destructive_analyzer +/obj/machinery/rnd/destructive_analyzer name = "destructive analyzer" desc = "Learn science by destroying things!" icon_state = "d_analyzer" circuit = /obj/item/circuitboard/machine/destructive_analyzer var/decon_mod = 0 -/obj/machinery/r_n_d/destructive_analyzer/RefreshParts() +/obj/machinery/rnd/destructive_analyzer/RefreshParts() var/T = 0 for(var/obj/item/stock_parts/S in component_parts) T += S.rating decon_mod = T -/obj/machinery/r_n_d/destructive_analyzer/proc/ConvertReqString2List(list/source_list) +/obj/machinery/rnd/destructive_analyzer/proc/ConvertReqString2List(list/source_list) var/list/temp_list = params2list(source_list) for(var/O in temp_list) temp_list[O] = text2num(temp_list[O]) return temp_list -/obj/machinery/r_n_d/destructive_analyzer/disconnect_console() +/obj/machinery/rnd/destructive_analyzer/disconnect_console() linked_console.linked_destroy = null ..() -/obj/machinery/r_n_d/destructive_analyzer/Insert_Item(obj/item/O, mob/user) +/obj/machinery/rnd/destructive_analyzer/Insert_Item(obj/item/O, mob/user) if(user.a_intent != INTENT_HARM) . = 1 if(!is_insertion_ready(user)) return - if(!O.origin_tech) - to_chat(user, "This doesn't seem to have a tech origin!") - return - var/list/temp_tech = ConvertReqString2List(O.origin_tech) - if (temp_tech.len == 0) - to_chat(user, "You cannot deconstruct this item!") - return if(!user.transferItemToLoc(O, src)) to_chat(user, "\The [O] is stuck to your hand, you cannot put it in the [src.name]!") return @@ -52,9 +45,91 @@ Note: Must be placed within 3 tiles of the R&D Console flick("d_analyzer_la", src) addtimer(CALLBACK(src, .proc/finish_loading), 10) -/obj/machinery/r_n_d/destructive_analyzer/proc/finish_loading() +/obj/machinery/rnd/destructive_analyzer/proc/finish_loading() update_icon() - busy = FALSE + reset_busy() -/obj/machinery/r_n_d/destructive_analyzer/update_icon() - icon_state = "d_analyzer_l" +/obj/machinery/rnd/destructive_analyzer/update_icon() + if(loaded_item) + icon_state = "d_analyzer_l" + else + icon_state = initial(icon_state) + +/obj/machinery/rnd/destructive_analyzer/proc/reclaim_materials_from(obj/item/thing) + . = 0 + if(linked_console && linked_console.linked_lathe) //Also sends salvaged materials to a linked protolathe, if any. + for(var/material in thing.materials) + var/can_insert = min((linked_console.linked_lathe.materials.max_amount - linked_console.linked_lathe.materials.total_amount), (max(thing.materials[material]*(decon_mod/10), thing.materials[material]))) + linked_console.linked_lathe.materials.insert_amount(can_insert, material) + . += can_insert + +/obj/machinery/rnd/destructive_analyzer/proc/destroy_item(obj/item/thing, innermode = FALSE) + if(QDELETED(thing) || QDELETED(src) || QDELETED(linked_console)) + return FALSE + if(!innermode) + flick("d_analyzer_process", src) + busy = TRUE + addtimer(CALLBACK(src, .proc/reset_busy), 24) + use_power(250) + if(thing == loaded_item) + loaded_item = null + update_icon() + var/list/food = thing.GetDeconstructableContents() + for(var/obj/item/innerthing in food) + destroy_item(innerthing, TRUE) + reclaim_materials_from(thing) + for(var/mob/M in thing) + M.death() + if(istype(thing, /obj/item/stack/sheet)) + var/obj/item/stack/sheet/S = thing + if(S.amount > 1 && !innermode) + S.amount-- + else + qdel(S) + else + qdel(thing) + return TRUE + +/obj/machinery/rnd/destructive_analyzer/proc/user_try_decon_id(id, mob/user) + if(!istype(loaded_item) || !istype(linked_console)) + return FALSE + if(id && !(id == RESEARCH_MATERIAL_RECLAMATION_ID)) + var/datum/techweb_node/TN = get_techweb_node_by_id(id) + if(!istype(TN)) + return FALSE + var/list/pos1 = techweb_item_boost_check(loaded_item) + if(isnull(pos1[id])) + return FALSE + var/dpath = loaded_item.type + if(isnull(TN.boost_item_paths[dpath])) + return FALSE + var/dboost = TN.boost_item_paths[dpath] + var/choice = input("Are you sure you want to destroy [loaded_item.name] for a boost of [dboost? 0 : dboost] in node [TN.display_name]") in list("Proceed", "Cancel") + if(choice == "Cancel") + return FALSE + if(QDELETED(loaded_item) || QDELETED(linked_console) || !user.Adjacent(linked_console) || QDELETED(src)) + return FALSE + SSblackbox.record_feedback("nested_tally", "item_deconstructed", 1, list("[TN.id]", "[loaded_item.type]")) + if(destroy_item(loaded_item)) + linked_console.stored_research.boost_with_path(SSresearch.techweb_nodes[TN.id], dpath) + else + var/point_value = techweb_item_point_check(loaded_item) + if(linked_console.stored_research.deconstructed_items[loaded_item.type]) + point_value = 0 + var/choice = input("Are you sure you want to destroy [loaded_item.name] for [point_value? "[point_value] points" : "material reclaimation"]?") in list("Proceed", "Cancel") + if(choice == "Cancel") + return FALSE + if(QDELETED(loaded_item) || QDELETED(linked_console) || !user.Adjacent(linked_console) || QDELETED(src)) + return FALSE + var/dtype = loaded_item.type + if(destroy_item(loaded_item)) + linked_console.stored_research.research_points += point_value + linked_console.stored_research.deconstructed_items[dtype] = point_value + return TRUE + +/obj/machinery/rnd/destructive_analyzer/proc/unload_item() + if(!loaded_item) + return FALSE + loaded_item.forceMove(get_turf(src)) + loaded_item = null + return TRUE diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 57ca602774..56848c6394 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -17,7 +17,7 @@ #define EFFECT_PROB_VERYHIGH 95 #define FAIL 8 -/obj/machinery/r_n_d/experimentor +/obj/machinery/rnd/experimentor name = "\improper E.X.P.E.R.I-MENTOR" desc = "A \"replacement\" for the deconstructive analyzer with a slight tendency to catastrophically fail." icon = 'icons/obj/machines/heavy_lathe.dmi' @@ -37,13 +37,14 @@ var/list/valid_items = list() //valid items for special reactions like transforming var/list/critical_items = list() //items that can cause critical reactions -/obj/machinery/r_n_d/experimentor/proc/ConvertReqString2List(list/source_list) +/obj/machinery/rnd/experimentor/proc/ConvertReqString2List(list/source_list) var/list/temp_list = params2list(source_list) for(var/O in temp_list) temp_list[O] = text2num(temp_list[O]) return temp_list -/obj/machinery/r_n_d/experimentor/proc/SetTypeReactions() + +/obj/machinery/rnd/experimentor/proc/SetTypeReactions() var/probWeight = 0 for(var/I in typesof(/obj/item)) if(istype(I, /obj/item/relic)) @@ -69,14 +70,14 @@ critical_items += I -/obj/machinery/r_n_d/experimentor/Initialize() +/obj/machinery/rnd/experimentor/Initialize() . = ..() trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_living_list trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in GLOB.mob_living_list SetTypeReactions() -/obj/machinery/r_n_d/experimentor/RefreshParts() +/obj/machinery/rnd/experimentor/RefreshParts() for(var/obj/item/stock_parts/manipulator/M in component_parts) if(resetTime > 0 && (resetTime - M.rating) >= 1) resetTime -= M.rating @@ -85,7 +86,7 @@ for(var/obj/item/stock_parts/micro_laser/M in component_parts) badThingCoeff += M.rating -/obj/machinery/r_n_d/experimentor/proc/checkCircumstances(obj/item/O) +/obj/machinery/rnd/experimentor/proc/checkCircumstances(obj/item/O) //snowflake check to only take "made" bombs if(istype(O, /obj/item/device/transfer_valve)) var/obj/item/device/transfer_valve/T = O @@ -93,65 +94,106 @@ return FALSE return TRUE -/obj/machinery/r_n_d/experimentor/Insert_Item(obj/item/O, mob/user) +/obj/machinery/rnd/experimentor/Insert_Item(obj/item/O, mob/user) if(user.a_intent != INTENT_HARM) . = 1 if(!is_insertion_ready(user)) return - if(!checkCircumstances(O)) - to_chat(user, "[O] is not yet valid for [src] and must be completed!") - return - if(!O.origin_tech) - to_chat(user, "This doesn't seem to have a tech origin!") - return - var/list/temp_tech = ConvertReqString2List(O.origin_tech) - if (temp_tech.len == 0) - to_chat(user, "You cannot experiment on this item!") - return if(!user.transferItemToLoc(O, src)) return loaded_item = O to_chat(user, "You add [O] to the machine.") flick("h_lathe_load", src) - - -/obj/machinery/r_n_d/experimentor/default_deconstruction_crowbar(obj/item/O) +/obj/machinery/rnd/experimentor/default_deconstruction_crowbar(obj/item/O) ejectItem() - ..(O) + . = ..(O) -/obj/machinery/r_n_d/experimentor/attack_hand(mob/user) +/obj/machinery/rnd/experimentor/attack_hand(mob/user) user.set_machine(src) - var/dat = "
" + var/list/dat = list("
") if(!linked_console) - dat += "Scan for R&D Console
" + dat += "Scan for R&D Console" if(loaded_item) - dat += "Loaded Item: [loaded_item]
" - dat += "Technology:
" - var/list/D = ConvertReqString2List(loaded_item.origin_tech) - for(var/T in D) - dat += "[T]
" - dat += "

Available tests:" - dat += "
Poke" - dat += "
Irradiate" - dat += "
Gas" - dat += "
Burn" - dat += "
Freeze" - dat += "
Destroy
" - if(istype(loaded_item, /obj/item/relic)) - dat += "
Discover
" - dat += "
Eject" + dat += "Loaded Item: [loaded_item]" + + dat += "
Available tests:" + dat += "Poke" + dat += "Irradiate" + dat += "Gas" + dat += "Burn" + dat += "Freeze" + dat += "Destroy
" + if(istype(loaded_item,/obj/item/relic)) + dat += "Discover" + dat += "Eject" + var/list/listin = techweb_item_boost_check(src) + if(listin) + var/list/output = list("Research Boost Data:") + var/list/res = list("Already researched:") + var/list/boosted = list("Already boosted:") + for(var/node_id in listin) + var/datum/techweb_node/N = get_techweb_node_by_id(node_id) + var/str = "[N.display_name]: [listin[N]] points." + if(SSresearch.science_tech.researched_nodes[N]) + res += str + else if(SSresearch.science_tech.boosted_nodes[N]) + boosted += str + if(SSresearch.science_tech.visible_nodes[N]) //JOY OF DISCOVERY! + output += str + output += boosted + res + dat += output else dat += "Nothing loaded." - dat += "
Refresh
" - dat += "
Close
" + dat += "Refresh" + dat += "Close
" var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400, src) - popup.set_content(dat) + popup.set_content(dat.Join("
")) popup.open() onclose(user, "experimentor") +/obj/machinery/rnd/experimentor/Topic(href, href_list) + if(..()) + return + usr.set_machine(src) -/obj/machinery/r_n_d/experimentor/proc/matchReaction(matching,reaction) + var/scantype = href_list["function"] + var/obj/item/process = locate(href_list["item"]) in src + + if(href_list["close"]) + usr << browse(null, "window=experimentor") + return + if(scantype == "search") + var/obj/machinery/computer/rdconsole/D = locate(/obj/machinery/computer/rdconsole) in oview(3,src) + if(D) + linked_console = D + else if(scantype == "eject") + ejectItem() + else if(scantype == "refresh") + updateUsrDialog() + else + if(recentlyExperimented) + to_chat(usr, "[src] has been used too recently!") + else if(!loaded_item) + to_chat(usr, "[src] is not currently loaded!") + else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item) + to_chat(usr, "Interface failure detected in [src]. Please try again.") + else + var/dotype + if(text2num(scantype) == SCANTYPE_DISCOVER) + dotype = SCANTYPE_DISCOVER + else + dotype = matchReaction(process,scantype) + experiment(dotype,process) + use_power(750) + if(dotype != FAIL) + var/list/datum/techweb_node/nodes = techweb_item_boost_check(process) + var/picked = pickweight(nodes) //This should work. + if(linked_console) + linked_console.stored_research.boost_with_path(picked, process.type) + updateUsrDialog() + +/obj/machinery/rnd/experimentor/proc/matchReaction(matching,reaction) var/obj/item/D = matching if(D) if(item_reactions.Find("[D.type]")) @@ -165,7 +207,7 @@ else return FAIL -/obj/machinery/r_n_d/experimentor/proc/ejectItem(delete=FALSE) +/obj/machinery/rnd/experimentor/proc/ejectItem(delete=FALSE) if(loaded_item) if(cloneMode && cloneCount > 0) visible_message("A duplicate [loaded_item] pops out!") @@ -183,12 +225,12 @@ qdel(loaded_item) loaded_item = null -/obj/machinery/r_n_d/experimentor/proc/throwSmoke(turf/where) +/obj/machinery/rnd/experimentor/proc/throwSmoke(turf/where) var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(0, where) smoke.start() -/obj/machinery/r_n_d/experimentor/proc/pickWeighted(list/from) +/obj/machinery/rnd/experimentor/proc/pickWeighted(list/from) var/result = FALSE var/counter = 1 while(!result) @@ -201,7 +243,7 @@ else counter = 1 -/obj/machinery/r_n_d/experimentor/proc/experiment(exp,obj/item/exp_on) +/obj/machinery/rnd/experimentor/proc/experiment(exp,obj/item/exp_on) recentlyExperimented = 1 icon_state = "h_lathe_wloop" var/chosenchem @@ -481,62 +523,15 @@ addtimer(CALLBACK(src, .proc/reset_exp), resetTime) -/obj/machinery/r_n_d/experimentor/proc/reset_exp() +/obj/machinery/rnd/experimentor/proc/reset_exp() update_icon() recentlyExperimented = FALSE -/obj/machinery/r_n_d/experimentor/update_icon() +/obj/machinery/rnd/experimentor/update_icon() icon_state = "h_lathe" -/obj/machinery/r_n_d/experimentor/Topic(href, href_list) - if(..()) - return - usr.set_machine(src) - - var/scantype = href_list["function"] - var/obj/item/process = locate(href_list["item"]) in src - - if(href_list["close"]) - usr << browse(null, "window=experimentor") - return - else if(scantype == "search") - var/obj/machinery/computer/rdconsole/D = locate(/obj/machinery/computer/rdconsole) in oview(3,src) - if(D) - linked_console = D - else if(scantype == "eject") - ejectItem() - else if(scantype == "refresh") - updateUsrDialog() - else - if(recentlyExperimented) - to_chat(usr, "[src] has been used too recently!") - return - else if(!loaded_item) - updateUsrDialog() //Set the interface to unloaded mode - to_chat(usr, "[src] is not currently loaded!") - return - else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item) - updateUsrDialog() //Refresh interface to update interface hrefs - to_chat(usr, "Interface failure detected in [src]. Please try again.") - return - var/dotype - if(text2num(scantype) == SCANTYPE_DISCOVER) - dotype = SCANTYPE_DISCOVER - else - dotype = matchReaction(process,scantype) - experiment(dotype,process) - use_power(750) - if(dotype != FAIL) - if(process && process.origin_tech) - var/list/temp_tech = ConvertReqString2List(process.origin_tech) - for(var/T in temp_tech) - linked_console.files.UpdateTech(T, temp_tech[T]) - updateUsrDialog() - return - -//~~~~~~~~Admin logging proc, aka the Powergamer Alarm~~~~~~~~ -/obj/machinery/r_n_d/experimentor/proc/warn_admins(mob/user, ReactionName) - var/turf/T = get_turf(src) +/obj/machinery/rnd/experimentor/proc/warn_admins(user, ReactionName) + var/turf/T = get_turf(user) message_admins("Experimentor reaction: [ReactionName] generated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_COORDJMP(T)]",0,1) log_game("Experimentor reaction: [ReactionName] generated by [key_name(user)] in ([T.x],[T.y],[T.z])") @@ -563,7 +558,6 @@ name = "strange object" desc = "What mysteries could this hold?" icon = 'icons/obj/assemblies.dmi' - origin_tech = "combat=1;plasmatech=1;powerstorage=1;materials=1" var/realName = "defined object" var/revealed = FALSE var/realProc @@ -583,7 +577,6 @@ name = realName cooldownMax = rand(60,300) realProc = pick("teleport","explode","rapidDupe","petSpray","flash","clean","corgicannon") - origin_tech = pick("engineering=[rand(2,5)]","magnets=[rand(2,5)]","plasmatech=[rand(2,5)]","programming=[rand(2,5)]","powerstorage=[rand(2,5)]") /obj/item/relic/attack_self(mob/user) if(revealed) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index b4412556c5..6c52fd4678 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -7,7 +7,7 @@ it creates. All the menus and other manipulation commands are in the R&D console Note: Must be placed west/left of and R&D console to function. */ -/obj/machinery/r_n_d/protolathe +/obj/machinery/rnd/protolathe name = "protolathe" desc = "Converts raw materials into useful objects." icon_state = "protolathe" @@ -15,7 +15,8 @@ Note: Must be placed west/left of and R&D console to function. circuit = /obj/item/circuitboard/machine/protolathe var/efficiency_coeff - + var/console_link = TRUE //allow console link. + var/requires_console = TRUE var/list/categories = list( "Power Designs", "Medical Designs", @@ -32,8 +33,7 @@ Note: Must be placed west/left of and R&D console to function. var/datum/component/material_container/materials - -/obj/machinery/r_n_d/protolathe/Initialize() +/obj/machinery/rnd/protolathe/Initialize() create_reagents(0) materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, @@ -41,7 +41,7 @@ Note: Must be placed west/left of and R&D console to function. materials.precise_insertion = TRUE return ..() -/obj/machinery/r_n_d/protolathe/RefreshParts() +/obj/machinery/rnd/protolathe/RefreshParts() reagents.maximum_volume = 0 for(var/obj/item/reagent_containers/glass/G in component_parts) reagents.maximum_volume += G.volume @@ -57,7 +57,7 @@ Note: Must be placed west/left of and R&D console to function. T -= M.rating/10 efficiency_coeff = min(max(0, T), 1) -/obj/machinery/r_n_d/protolathe/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material +/obj/machinery/rnd/protolathe/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material var/list/all_materials = being_built.reagents_list + being_built.materials GET_COMPONENT(materials, /datum/component/material_container) @@ -68,14 +68,69 @@ Note: Must be placed west/left of and R&D console to function. return round(A / max(1, (all_materials[M]*efficiency_coeff))) //we eject the materials upon deconstruction. -/obj/machinery/r_n_d/protolathe/on_deconstruction() +/obj/machinery/rnd/protolathe/on_deconstruction() for(var/obj/item/reagent_containers/glass/G in component_parts) reagents.trans_to(G, G.reagents.maximum_volume) GET_COMPONENT(materials, /datum/component/material_container) materials.retrieve_all() ..() - -/obj/machinery/r_n_d/protolathe/disconnect_console() +/obj/machinery/rnd/protolathe/disconnect_console() linked_console.linked_lathe = null ..() + +/obj/machinery/rnd/protolathe/proc/user_try_print_id(id, amount) + if((!istype(linked_console) && requires_console) || !id) + return FALSE + if(istext(amount)) + amount = text2num(amount) + if(isnull(amount)) + amount = 1 + var/datum/design/D = (linked_console || requires_console)? linked_console.stored_research.researched_designs[id] : get_techweb_design_by_id(id) + if(!istype(D)) + return FALSE + if(D.make_reagents.len) + return FALSE + + var/power = 1000 + amount = Clamp(amount, 1, 10) + for(var/M in D.materials) + power += round(D.materials[M] * amount / 5) + power = max(3000, power) + use_power(power) + + var/list/efficient_mats = list() + for(var/MAT in D.materials) + efficient_mats[MAT] = D.materials[MAT]*efficiency_coeff + + if(!materials.has_materials(efficient_mats, amount)) + say("Not enough materials to complete prototype[amount > 1? "s" : ""].") + return FALSE + for(var/R in D.reagents_list) + if(!reagents.has_reagent(R, D.reagents_list[R]*efficiency_coeff)) + say("Not enough reagents to complete prototype[amount > 1? "s" : ""].") + return FALSE + + materials.use_amount(efficient_mats, amount) + for(var/R in D.reagents_list) + reagents.remove_reagent(R, D.reagents_list[R]*efficiency_coeff) + + busy = TRUE + flick("protolathe_n", src) + var/timecoeff = efficiency_coeff * D.lathe_time_factor + + addtimer(CALLBACK(src, .proc/reset_busy), (32 * timecoeff * amount) ** 0.8) + addtimer(CALLBACK(src, .proc/do_print, D.build_path, amount, efficient_mats, D.dangerous_construction), (32 * timecoeff * amount) ** 0.8) + return TRUE + +/obj/machinery/rnd/protolathe/proc/do_print(path, amount, list/matlist, notify_admins) + if(notify_admins) + if(usr) + usr.investigate_log("built [amount] of [path] at a protolathe.", INVESTIGATE_RESEARCH) + var/turf/T = get_turf(usr) + message_admins("[key_name(usr)][ADMIN_JMP(T)] has built [amount] of [path] at a protolathe at [COORD(usr)]") + for(var/i in 1 to amount) + var/obj/item/I = new path(get_turf(src)) + if(!istype(I, /obj/item/stack/sheet) && !istype(I, /obj/item/ore/bluespace_crystal)) + I.materials = matlist.Copy() + SSblackbox.record_feedback("nested_tally", "item_printed", amount, list("[type]", "[path]")) \ No newline at end of file diff --git a/code/modules/research/rd-readme.dm b/code/modules/research/rd-readme.dm deleted file mode 100644 index 9dc47247c3..0000000000 --- a/code/modules/research/rd-readme.dm +++ /dev/null @@ -1,239 +0,0 @@ -/* -Research and Development System. (Designed specifically for the /tg/station 13 (Space Station 13) open source project) - -///////////////Overview/////////////////// -This system is a "tech tree" research and development system designed for SS13. It allows a "researcher" job (this document assumes -the "scientist" job is given this role) the tools necessiary to research new and better technologies. In general, the system works -by breaking existing technology and using what you learn from to advance your knowledge of SCIENCE! As your knowledge progresses, -you can build newer (and better?) devices (which you can also, eventually, deconstruct to advance your knowledge). - -A brief overview is below. For more details, see the related files. - -////////////Game Use///////////// -The major research and development is performed using a combination of four machines: -- R&D Console: A computer console that allows you to manipulate the other devices that are linked to it and view/manipulate the -technologies you have researched so far. -- Protolathe: Used to make new hand-held devices and parts for larger devices. All metals and reagents as raw materials. -- Destructive Analyzer: You can put hand-held objects into it and it'll analyze them for technological advancements but it destroys -them in the process. Destroyed items will send their raw materials to a linked Protolathe (if any) -- Circuit Imprinter: Similar to the Protolathe, it allows for the construction of circuit boards. Uses glass and acid as the raw -materials. - -While researching you are dealing with two different types of information: Technology Paths and Device Designs. Technology Paths -are the "Tech Trees" of the game. You start out with a number of them at the game start and they are improved by using the -Destructive Analyzer. By themselves, they don't do a whole lot. However, they unlock Device Designs. This is the information used -by the circuit imprinter and the protolathe to produce objects. - -//EXISTING TECH -Each tech path should have at LEAST one item at every level (levels 1 - 20). This is to allow for a more fluid progression of the -researching. Existing tech (ie, anything you can find on the station or get from the quartermaster) shouldn't go higher then -level 5 or 7. Everything past that should be stuff you research. - -Below is a checklist to make sure every tree is filled. As new items get added to R&D, add them here if there is an empty slot. -When thinking about new stuff, check here to see if there are any slots unfilled. - -//MATERIALS -1 | Metal -2 | Solid Plasma -3 | Silver -4 | Gold, Super Capacitor -5 | Uranium, Nuclear Gun, SUPERPACMAN -6 | Diamond, MRSPACMAN -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 | -16 | -17 | -18 | -19 | -20 | - -//PLASMA TECH -1 | -2 | Solid Plasma -3 | Pacman Generator -4 | -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 | -16 | -17 | -18 | -19 | -20 | - -//POWER TECH -1 | Basic Capacitor, Basic Cell -2 | High-Capacity Cell (10,000) -3 | Super-Capacity Cell (20,000), Powersink, PACMAN -4 | SUPERPACMAN -5 | MRSPACMAN, Super Capacitor -6 | Hyper-Capacity Cell (30,000) -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 | -16 | -17 | -18 | -19 | -20 | - -//BLUE SPACE -1 | -2 | Teleporter Console Board -3 | Teleport Gun, Hand Tele -4 | Teleportation Scroll -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 | -16 | -17 | -18 | -19 | -20 | - -//BIOTECH -1 | Bruise Pack, Scalple -2 | PANDEMIC Board, Mass Spectrometer -3 | AI Core, Brains (MMI) -4 | MMI+Radio -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 | -16 | -17 | -18 | -19 | -20 | - -//MAGNETS -1 | Basic Sensor -2 | Comm Console Board -3 | Adv Sensor -4 | Adv Mass Spectrometer, Chameleon Projector -5 | Phasic Sensor -6 | -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 | -16 | -17 | -18 | -19 | -20 | - -//PROGRAMMING -1 | Arcade Board -2 | Sec Camera -3 | Cloning Machine Console Board -4 | AI Core, Intellicard -5 | Pico-Manipulator, Ultra-Micro-Laser -6 | -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 | -16 | -17 | -18 | -19 | -20 | - -//SYNDICATE -1 | Sleepypen -2 | TYRANT Module, Emag -3 | Power Sink -4 | -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 | -16 | -17 | -18 | -19 | -20 | - -//COMBAT -1 | Flashbang, Mousetrap, Nettle -2 | Stun Baton -3 | Power Axe, Death Nettle, Nuclear Gun -4 | -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 | -16 | -17 | -18 | -19 | -20 | - - - - - - - -*/ \ No newline at end of file diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index d79b5d5eb8..116d41d7f8 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -1,8 +1,9 @@ + /* Research and Development (R&D) Console This is the main work horse of the R&D system. It contains the menus/controls for the Destructive Analyzer, Protolathe, and Circuit -imprinter. It also contains the /datum/research holder with all the known/possible technology paths and device designs. +imprinter. Basic use: When it first is created, it will attempt to link up to related devices within 3 squares. It'll only link up if they aren't already linked to another console. Any consoles it cannot link up with (either because all of a certain type are already @@ -14,50 +15,41 @@ on a menu, nothing is to stop the person from using the options on that menu (al one). You can also lock the console on the settings menu if you're feeling paranoid and you don't want anyone messing with it who doesn't have toxins access. -When a R&D console is destroyed or even partially disassembled, you lose all research data on it. However, there are two ways around -this dire fate: -- The easiest way is to go to the settings menu and select "Sync Database with Network." That causes it to upload (but not download) -it's data to every other device in the game. Each console has a "disconnect from network" option that'll will cause data base sync -operations to skip that console. This is useful if you want to make a "public" R&D console or, for example, give the engineers -a circuit imprinter with certain designs on it and don't want it accidentally updating. The downside of this method is that you have -to have physical access to the other console to send data back. Note: An R&D console is on CentCom so if a random griffan happens to -cause a ton of data to be lost, an admin can go send it back. -- The second method is with Technology Disks and Design Disks. Each of these disks can hold technology or design datums in -their entirety. You can then take the disk to any R&D console and upload it's data to it. This method is a lot more secure (since it -won't update every console in existence) but it's more of a hassle to do. Also, the disks can be stolen. - - */ /obj/machinery/computer/rdconsole name = "R&D Console" + desc = "A console used to interface with R&D tools." icon_screen = "rdcomp" icon_keyboard = "rd_key" + var/datum/techweb/stored_research //Reference to global science techweb. + var/obj/item/disk/tech_disk/t_disk //Stores the technology disk. + var/obj/item/disk/design_disk/d_disk //Stores the design disk. circuit = /obj/item/circuitboard/computer/rdconsole - var/datum/research/files //Stores all the collected research data. - var/obj/item/disk/tech_disk/t_disk = null //Stores the technology disk. - var/obj/item/disk/design_disk/d_disk = null //Stores the design disk. - var/obj/machinery/r_n_d/destructive_analyzer/linked_destroy = null //Linked Destructive Analyzer - var/obj/machinery/r_n_d/protolathe/linked_lathe = null //Linked Protolathe - var/obj/machinery/r_n_d/circuit_imprinter/linked_imprinter = null //Linked Circuit Imprinter + var/obj/machinery/rnd/destructive_analyzer/linked_destroy //Linked Destructive Analyzer + var/obj/machinery/rnd/protolathe/linked_lathe //Linked Protolathe + var/obj/machinery/rnd/circuit_imprinter/linked_imprinter //Linked Circuit Imprinter - var/screen = 1.0 //Which screen is currently showing. - var/id = 0 //ID of the computer (for server restrictions). - var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console - var/first_use = 1 //If first_use = 1, it will try to auto-connect with nearby devices - - req_access = list(ACCESS_TOX) //DATA AND SETTING MANIPULATION REQUIRES SCIENTIST ACCESS. + req_access = list(ACCESS_TOX) //lA AND SETTING MANIPULATION REQUIRES SCIENTIST ACCESS. + //UI VARS + var/screen = RDSCREEN_MENU + var/back = RDSCREEN_MENU + var/locked = FALSE + var/tdisk_uple = FALSE + var/ddisk_uple = FALSE + var/datum/techweb_node/selected_node + var/datum/design/selected_design var/selected_category - var/list/datum/design/matching_designs = list() //for the search function - var/disk_slot_selected = 0 + var/list/datum/design/matching_designs + var/disk_slot_selected + var/searchstring = "" + var/searchtype = "" + var/research_control = TRUE -/proc/CallTechName(ID) //A simple helper proc to find the name of a tech with a given ID. - if(GLOB.tech_list[ID]) - var/datum/tech/tech = GLOB.tech_list[ID] - return tech.name - return "ERROR: Report This" +/obj/machinery/computer/rdconsole/production + research_control = FALSE /proc/CallMaterialName(ID) if (copytext(ID, 1, 2) == "$" && GLOB.materials_list[ID]) @@ -70,69 +62,122 @@ won't update every console in existence) but it's more of a hassle to do. Also, return "ERROR: Report This" /obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any). - for(var/obj/machinery/r_n_d/D in oview(3,src)) + for(var/obj/machinery/rnd/D in oview(3,src)) if(D.linked_console != null || D.disabled || D.panel_open) continue - if(istype(D, /obj/machinery/r_n_d/destructive_analyzer)) + if(istype(D, /obj/machinery/rnd/destructive_analyzer)) if(linked_destroy == null) linked_destroy = D D.linked_console = src - else if(istype(D, /obj/machinery/r_n_d/protolathe)) + else if(istype(D, /obj/machinery/rnd/protolathe)) if(linked_lathe == null) + var/obj/machinery/rnd/protolathe/P = D + if(!P.console_link) + continue linked_lathe = D D.linked_console = src - else if(istype(D, /obj/machinery/r_n_d/circuit_imprinter)) + else if(istype(D, /obj/machinery/rnd/circuit_imprinter)) if(linked_imprinter == null) + var/obj/machinery/rnd/circuit_imprinter/C = D + if(!C.console_link) + continue linked_imprinter = D D.linked_console = src - first_use = 0 - -//Have it automatically push research to the centcom server so wild griffins can't fuck up R&D's work --NEO -/obj/machinery/computer/rdconsole/proc/griefProtection() - for(var/obj/machinery/r_n_d/server/centcom/C in GLOB.machines) - for(var/v in files.known_tech) - var/datum/tech/T = files.known_tech[v] - C.files.AddTech2Known(T) - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] - C.files.AddDesign2Known(D) - C.files.RefreshResearch() - /obj/machinery/computer/rdconsole/Initialize() . = ..() - files = new /datum/research(src) //Setup the research data holder. + stored_research = SSresearch.science_tech + stored_research.consoles_accessing[src] = TRUE matching_designs = list() - if(!id) - fix_noid_research_servers() + SyncRDevices() -/* Instead of calling this every tick, it is only being called when needed -/obj/machinery/computer/rdconsole/process() - griefProtection() -*/ +/obj/machinery/computer/rdconsole/Destroy() + if(stored_research) + stored_research.consoles_accessing -= src + if(linked_destroy) + linked_destroy.linked_console = null + linked_destroy = null + if(linked_lathe) + linked_lathe.linked_console = null + linked_lathe = null + if(linked_imprinter) + linked_imprinter.linked_console = null + linked_imprinter = null + if(t_disk) + t_disk.forceMove(get_turf(src)) + t_disk = null + if(d_disk) + d_disk.forceMove(get_turf(src)) + d_disk = null + matching_designs = null + selected_node = null + selected_design = null + return ..() /obj/machinery/computer/rdconsole/attackby(obj/item/D, mob/user, params) - //Loading a disk into it. if(istype(D, /obj/item/disk)) - if(t_disk || d_disk) - to_chat(user, "A disk is already loaded into the machine.") - return - if(istype(D, /obj/item/disk/tech_disk)) + if(t_disk) + to_chat(user, "A technology disk is already loaded!") + return + if(!user.transferItemToLoc(D, src)) + to_chat(user, "[D] is stuck to your hand!") + return t_disk = D else if (istype(D, /obj/item/disk/design_disk)) + if(d_disk) + to_chat(user, "A design disk is already loaded!") + return + if(!user.transferItemToLoc(D, src)) + to_chat(user, "[D] is stuck to your hand!") + return d_disk = D else to_chat(user, "Machine cannot accept disks in that format.") return - if(!user.transferItemToLoc(D, src)) - return - to_chat(user, "You add the disk to the machine!") + to_chat(user, "You insert [D] into \the [src]!") else if(!(linked_destroy && linked_destroy.busy) && !(linked_lathe && linked_lathe.busy) && !(linked_imprinter && linked_imprinter.busy)) . = ..() - updateUsrDialog() +/obj/machinery/computer/rdconsole/proc/research_node(id, mob/user) + if(!stored_research.available_nodes[id] || stored_research.researched_nodes[id]) + say("Node unlock failed: Either already researched or not available!") + return FALSE + var/datum/techweb_node/TN = SSresearch.techweb_nodes[id] + if(!istype(TN)) + say("Node unlock failed: Unknown error.") + return FALSE + var/price = TN.get_price(stored_research) + if(stored_research.research_points >= price) + investigate_log("[key_name_admin(user)] researched [id]([price]) on techweb id [stored_research.id].") + if(stored_research == SSresearch.science_tech) + if(stored_research.researched_nodes.len < 30) + SSblackbox.record_feedback("tally", "science_techweb_unlock_first_thirty", 1, "[id]") + SSblackbox.record_feedback("tally", "science_techweb_unlock", 1, "[id]") + if(stored_research.research_node(SSresearch.techweb_nodes[id])) + say("Sucessfully researched [TN.display_name].") + var/logname = "Unknown" + if(isAI(user)) + logname = "AI: [user.name]" + if(iscarbon(user)) + var/obj/item/card/id/idcard = user.get_active_held_item() + if(istype(idcard)) + logname = "User: [idcard.registered_name]" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/I = H.wear_id + if(istype(I)) + var/obj/item/card/id/ID = I.GetID() + if(istype(ID)) + logname = "User: [ID.registered_name]" + stored_research.research_logs += "[logname] researched node id [id] for [price] points." + return TRUE + else + say("Failed to research node: Internal database error!") + return FALSE + say("Not enough research points...") + return FALSE /obj/machinery/computer/rdconsole/on_deconstruction() if(linked_destroy) @@ -146,7 +191,6 @@ won't update every console in existence) but it's more of a hassle to do. Also, linked_imprinter = null ..() - /obj/machinery/computer/rdconsole/emag_act(mob/user) if(!emagged) to_chat(user, "You disable the security protocols") @@ -154,415 +198,547 @@ won't update every console in existence) but it's more of a hassle to do. Also, emagged = TRUE return ..() -/obj/machinery/computer/rdconsole/Topic(href, href_list) - if(..()) +/obj/machinery/computer/rdconsole/proc/list_categories(list/categories, menu_num as num) + if(!categories) return + var/line_length = 1 + var/list/l = "" + + for(var/C in categories) + if(line_length > 2) + l += "" + line_length = 1 + + l += "" + line_length++ + + l += "
[C]
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_header() + var/list/l = list() + l += "

Nanotrasen Research and Development

[RDSCREEN_NOBREAK]" + l += "
Connected Technology database: [stored_research == SSresearch.science_tech? "Nanotrasen" : "Third Party"]" + l += "Available Points: [stored_research.research_points]" + l += "Security protocols: [emagged? "Disabled" : "Enabled"]" + l += "Design Disk: [d_disk? "Loaded" : "Not Loaded"] | \ + Technology Disk: [t_disk? "Loaded" : "Not Loaded"]" + l += "Main Menu | Back
[RDSCREEN_NOBREAK]" + return l + +/obj/machinery/computer/rdconsole/proc/ui_main_menu() + var/list/l = list() + if(research_control) + l += "

Technology" + l += "
Design Disk" + l += "
Tech Disk" + l += "
Deconstructive Analyzer" + l += "
Protolathe" + l += "
Circuit Imprinter" + l += "
Settings

" + return l + +/obj/machinery/computer/rdconsole/proc/ui_locked() + return list("

SYSTEM LOCKED


") + +/obj/machinery/computer/rdconsole/proc/ui_settings() + var/list/l = list() + l += "

R&D Console Settings:

" + l += "Device Linkage Menu" + l += "Lock Console
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_device_linking() + var/list/l = list() + l += "Settings Menu
" + l += "

R&D Console Device Linkage Menu:

" + l += "Re-sync with Nearby Devices" + l += "

Linked Devices:

" + l += linked_destroy? "* Destructive Analyzer Disconnect" : "* No Destructive Analyzer Linked" + l += linked_lathe? "* Protolathe Disconnect" : "* No Protolathe Linked" + l += linked_imprinter? "* Circuit Imprinter Disconnect" : "* No Circuit Imprinter Linked" + l += "
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_protolathe_header() + var/list/l = list() + l += "" + return l + +/obj/machinery/computer/rdconsole/proc/ui_protolathe_category_view() //Legacy code + RDSCREEN_UI_LATHE_CHECK + var/list/l = list() + l += ui_protolathe_header() + l += "

Browsing [selected_category]:

" + var/coeff = linked_lathe.efficiency_coeff + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] + if(!(selected_category in D.category)|| !(D.build_type & PROTOLATHE)) + continue + var/temp_material + var/c = 50 + var/t + + var/all_materials = D.materials + D.reagents_list + for(var/M in all_materials) + t = linked_lathe.check_mat(D, M) + temp_material += " | " + if (t < 1) + temp_material += "[all_materials[M]*coeff] [CallMaterialName(M)]" + else + temp_material += " [all_materials[M]*coeff] [CallMaterialName(M)]" + c = min(c,t) + + if (c >= 1) + l += "[D.name][RDSCREEN_NOBREAK]" + if(c >= 5) + l += "x5[RDSCREEN_NOBREAK]" + if(c >= 10) + l += "x10[RDSCREEN_NOBREAK]" + l += "[temp_material][RDSCREEN_NOBREAK]" + else + l += "[D.name][temp_material][RDSCREEN_NOBREAK]" + l += "" + l += "
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_protolathe() //Legacy code + RDSCREEN_UI_LATHE_CHECK + var/list/l = list() + l += ui_protolathe_header() + + l += "
\ + \ + \ + \ + \ + \ +

" + + l += list_categories(linked_lathe.categories, RDSCREEN_PROTOLATHE_CATEGORY_VIEW) + + return l + +/obj/machinery/computer/rdconsole/proc/ui_protolathe_search() //Legacy code + RDSCREEN_UI_LATHE_CHECK + var/list/l = list() + l += ui_protolathe_header() + var/coeff = linked_lathe.efficiency_coeff + for(var/datum/design/D in matching_designs) + var/temp_material + var/c = 50 + var/t + var/all_materials = D.materials + D.reagents_list + for(var/M in all_materials) + t = linked_lathe.check_mat(D, M) + temp_material += " | " + if (t < 1) + temp_material += "[all_materials[M]*coeff] [CallMaterialName(M)]" + else + temp_material += " [all_materials[M]*coeff] [CallMaterialName(M)]" + c = min(c,t) + + if (c >= 1) + l += "[D.name][RDSCREEN_NOBREAK]" + if(c >= 5) + l += "x5[RDSCREEN_NOBREAK]" + if(c >= 10) + l += "x10[RDSCREEN_NOBREAK]" + l += "[temp_material][RDSCREEN_NOBREAK]" + else + l += "[D.name][temp_material][RDSCREEN_NOBREAK]" + l += "" + l += "" + return l + +/obj/machinery/computer/rdconsole/proc/ui_protolathe_materials() //Legacy code + RDSCREEN_UI_LATHE_CHECK + var/list/l = list() + l += ui_protolathe_header() + l += "

Material Storage:

" + for(var/mat_id in linked_lathe.materials.materials) + var/datum/material/M = linked_lathe.materials.materials[mat_id] + l += "* [M.amount] of [M.name]: " + if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "Eject [RDSCREEN_NOBREAK]" + if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) l += "5x [RDSCREEN_NOBREAK]" + if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "All[RDSCREEN_NOBREAK]" + l += "" + l += "
[RDSCREEN_NOBREAK]" + return l + +/obj/machinery/computer/rdconsole/proc/ui_protolathe_chemicals() //Legacy code + RDSCREEN_UI_LATHE_CHECK + var/list/l = list() + l += ui_protolathe_header() + l += "
Disposal All Chemicals in Storage" + l += "

Chemical Storage:

" + for(var/datum/reagent/R in linked_lathe.reagents.reagent_list) + l += "[R.name]: [R.volume]" + l += "Purge" + l += "
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_circuit_header() //Legacy Code + var/list/l = list() + l += "" + return l + +/obj/machinery/computer/rdconsole/proc/ui_circuit() //Legacy code + RDSCREEN_UI_IMPRINTER_CHECK + var/list/l = list() + l += ui_circuit_header() + l += "

Circuit Imprinter Menu:

" + + l += "
\ + \ + \ + \ + \ + \ +

" + + l += list_categories(linked_imprinter.categories, RDSCREEN_IMPRINTER_CATEGORY_VIEW) + return l + +/obj/machinery/computer/rdconsole/proc/ui_circuit_category_view() //Legacy code + RDSCREEN_UI_IMPRINTER_CHECK + var/list/l = list() + l += ui_circuit_header() + l += "

Browsing [selected_category]:

" + + var/coeff = linked_imprinter.efficiency_coeff + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] + if(!(selected_category in D.category) || !(D.build_type & IMPRINTER)) + continue + var/temp_materials + var/check_materials = TRUE + + var/all_materials = D.materials + D.reagents_list + + for(var/M in all_materials) + temp_materials += " | " + if (!linked_imprinter.check_mat(D, M)) + check_materials = FALSE + temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" + else + temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" + if (check_materials) + l += "[D.name][temp_materials]" + else + l += "[D.name][temp_materials]" + l += "
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_circuit_search() //Legacy code + RDSCREEN_UI_IMPRINTER_CHECK + var/list/l = list() + l += ui_circuit_header() + l += "

Search results:

" + + var/coeff = linked_imprinter.efficiency_coeff + for(var/datum/design/D in matching_designs) + var/temp_materials + var/check_materials = TRUE + var/all_materials = D.materials + D.reagents_list + for(var/M in all_materials) + temp_materials += " | " + if (!linked_imprinter.check_mat(D, M)) + check_materials = FALSE + temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" + else + temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" + if (check_materials) + l += "[D.name][temp_materials]" + else + l += "[D.name][temp_materials]" + l += "
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_circuit_chemicals() //legacy code + RDSCREEN_UI_IMPRINTER_CHECK + var/list/l = list() + l += ui_circuit_header() + l += "Disposal All Chemicals in Storage
" + l += "

Chemical Storage:

" + for(var/datum/reagent/R in linked_imprinter.reagents.reagent_list) + l += "[R.name]: [R.volume]" + l += "Purge" + return l + +/obj/machinery/computer/rdconsole/proc/ui_circuit_materials() //Legacy code! + RDSCREEN_UI_IMPRINTER_CHECK + var/list/l = list() + l += ui_circuit_header() + l += "

Material Storage:

" + for(var/mat_id in linked_imprinter.materials.materials) + var/datum/material/M = linked_imprinter.materials.materials[mat_id] + l += "* [M.amount] of [M.name]: " + if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "Eject [RDSCREEN_NOBREAK]" + if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) l += "5x [RDSCREEN_NOBREAK]" + if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "All[RDSCREEN_NOBREAK]
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_techdisk() //Legacy code + RDSCREEN_UI_TDISK_CHECK + var/list/l = list() + l += "
Disk Operations: Clear Disk" + l += "Eject Disk" + l += "Upload All" + l += "Load Technology to Disk
" + l += "

Stored Technology Nodes:

" + for(var/i in t_disk.stored_research.researched_nodes) + var/datum/techweb_node/N = t_disk.stored_research.researched_nodes[i] + l += "[N.display_name]" + l += "
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_designdisk() //Legacy code + RDSCREEN_UI_DDISK_CHECK + var/list/l = list() + l += "Disk Operations: Clear DiskUpload AllEject Disk" + for(var/i in 1 to d_disk.max_blueprints) + l += "
" + if(d_disk.blueprints[i]) + var/datum/design/D = d_disk.blueprints[i] + l += "[D.name]" + l += "Operations: Upload to database Clear Slot" + else + l += "Empty Slot Operations: Load Design to Slot" + l += "
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_designdisk_upload() //Legacy code + RDSCREEN_UI_DDISK_CHECK + var/list/l = list() + l += "Return to Disk Operations
" + l += "

Load Design to Disk:

" + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] + l += "[D.name] " + l += "Copy to Disk" + l += "
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_deconstruct() //Legacy code + RDSCREEN_UI_DECONSTRUCT_CHECK + var/list/l = list() + if(!linked_destroy.loaded_item) + l += "
No Item Loaded. Standing-by...
" + else + l += "

Deconstruction Menu

" + l += "Eject Item" + l += "Name: [linked_destroy.loaded_item.name]" + l += "Select a node to boost by deconstructing this item." + l += "This item is able to boost:" + var/list/listin = techweb_item_boost_check(linked_destroy.loaded_item) + for(var/node_id in listin) + var/datum/techweb_node/N = get_techweb_node_by_id(node_id) + var/worth = listin[N.id] + if(!stored_research.researched_nodes[N.id] && !stored_research.boosted_nodes[N.id]) + l += "[N.display_name]: [worth] points" + else + l += "Generic Point Deconstruction - [point_value] points" + l += "Material Reclaimation Deconstruction" + l += "
" + return l + +/obj/machinery/computer/rdconsole/proc/ui_techweb() //Legacy code. + var/list/l = list() + var/list/avail = list() //This could probably be optimized a bit later. + var/list/unavail = list() + var/list/res = list() + for(var/v in stored_research.researched_nodes) + res += stored_research.researched_nodes[v] + for(var/v in stored_research.available_nodes) + if(stored_research.researched_nodes[v]) + continue + avail += stored_research.available_nodes[v] + for(var/v in stored_research.visible_nodes) + if(stored_research.available_nodes[v]) + continue + unavail += stored_research.visible_nodes[v] + l += "

Technology Nodes:

[RDSCREEN_NOBREAK]" + l += "

Available for Research:

" + for(var/datum/techweb_node/N in avail) + var/not_unlocked = (stored_research.available_nodes[N.id] && !stored_research.researched_nodes[N.id]) + var/has_points = (stored_research.research_points >= N.get_price(stored_research)) + var/research_href = not_unlocked? (has_points? "Research" : "Not Enough Points") : null + l += "[N.display_name][research_href]" + l += "

Locked Nodes:

" + for(var/datum/techweb_node/N in unavail) + l += "[N.display_name]" + l += "

Researched Nodes:

" + for(var/datum/techweb_node/N in res) + l += "[N.display_name]" + l += "
[RDSCREEN_NOBREAK]" + return l + +/obj/machinery/computer/rdconsole/proc/ui_techweb_nodeview() //Legacy code + RDSCREEN_UI_SNODE_CHECK + var/list/l = list() + if(stored_research.hidden_nodes[selected_node.id]) + l += "

ERROR: RESEARCH NODE UNKNOWN.

" + l += "

[selected_node.display_name]

" + l += "Description: [selected_node.description]" + l += "Status: [stored_research.researched_nodes[selected_node.id]? "Researched" : "Locked"]" + l += "Point Cost: [selected_node.get_price(stored_research)].
[RDSCREEN_NOBREAK]" + if(stored_research.researched_nodes[selected_node.id]) + l += "

Already Researched

[RDSCREEN_NOBREAK]" + else if(stored_research.available_nodes[selected_node.id]) + if(stored_research.research_points >= selected_node.get_price(stored_research)) + l += "

Research

[RDSCREEN_NOBREAK]" + else + l += "

Not Enough Points

[RDSCREEN_NOBREAK]" + else if(stored_research.visible_nodes[selected_node.id]) + l += "

Prerequisites not met!

[RDSCREEN_NOBREAK]" + else + l += "

ERROR

[RDSCREEN_NOBREAK]" + l += "

Designs:

[RDSCREEN_NOBREAK]" + for(var/i in selected_node.designs) + var/datum/design/D = selected_node.designs[i] + l += "[D.name]" + l += "

Prerequisites:

[RDSCREEN_NOBREAK]" + for(var/i in selected_node.prerequisites) + var/datum/techweb_node/prereq = selected_node.prerequisites[i] + var/sc = stored_research.researched_nodes[prereq.id] + var/begin + var/end + if(sc) + begin = "" + end = "" + else + begin = "" + end = "" + l += "[begin][prereq.display_name][end]" + l += "

Unlocks:

[RDSCREEN_NOBREAK]" + for(var/i in selected_node.unlocks) + var/datum/techweb_node/unlock = selected_node.unlocks[i] + l += "[unlock.display_name]" + + l += "
[RDSCREEN_NOBREAK]" + return l + +/obj/machinery/computer/rdconsole/proc/ui_techweb_designview() //Legacy code + RDSCREEN_UI_SDESIGN_CHECK + var/list/l = list() + var/datum/design/D = selected_design + l += "
Name: [D.name]" + if(D.build_type) + l += "Lathe Types:" + if(D.build_type & IMPRINTER) l += "Circuit Imprinter" + if(D.build_type & PROTOLATHE) l += "Protolathe" + if(D.build_type & AUTOLATHE) l += "Autolathe" + if(D.build_type & MECHFAB) l += "Exosuit Fabricator" + if(D.build_type & BIOGENERATOR) l += "Biogenerator" + if(D.build_type & LIMBGROWER) l += "Limbgrower" + if(D.build_type & SMELTER) l += "Smelter" + l += "Required Materials:" + var/all_mats = D.materials + D.reagents_list + for(var/M in all_mats) + l += "* [CallMaterialName(M)] x [all_mats[M]]" + l += "[RDSCREEN_NOBREAK]
" + return l + +//Fuck TGUI. +/obj/machinery/computer/rdconsole/proc/generate_ui() + var/list/ui = list() + ui += ui_header() + if(locked) + ui += ui_locked() + else + switch(screen) + if(RDSCREEN_MENU) + ui += ui_main_menu() + if(RDSCREEN_TECHWEB) + ui += ui_techweb() + if(RDSCREEN_TECHWEB_NODEVIEW) + ui += ui_techweb_nodeview() + if(RDSCREEN_TECHWEB_DESIGNVIEW) + ui += ui_techweb_designview() + if(RDSCREEN_DESIGNDISK) + ui += ui_designdisk() + if(RDSCREEN_DESIGNDISK_UPLOAD) + ui += ui_designdisk_upload() + if(RDSCREEN_TECHDISK) + ui += ui_techdisk() + if(RDSCREEN_DECONSTRUCT) + ui += ui_deconstruct() + if(RDSCREEN_PROTOLATHE) + ui += ui_protolathe() + if(RDSCREEN_PROTOLATHE_CATEGORY_VIEW) + ui += ui_protolathe_category_view() + if(RDSCREEN_PROTOLATHE_MATERIALS) + ui += ui_protolathe_materials() + if(RDSCREEN_PROTOLATHE_CHEMICALS) + ui += ui_protolathe_chemicals() + if(RDSCREEN_PROTOLATHE_SEARCH) + ui += ui_protolathe_search() + if(RDSCREEN_IMPRINTER) + ui += ui_circuit() + if(RDSCREEN_IMPRINTER_CATEGORY_VIEW) + ui += ui_circuit_category_view() + if(RDSCREEN_IMPRINTER_MATERIALS) + ui += ui_circuit_materials() + if(RDSCREEN_IMPRINTER_CHEMICALS) + ui += ui_circuit_chemicals() + if(RDSCREEN_IMPRINTER_SEARCH) + ui += ui_circuit_search() + if(RDSCREEN_SETTINGS) + ui += ui_settings() + if(RDSCREEN_DEVICE_LINKING) + ui += ui_device_linking() + for(var/i in 1 to length(ui)) + if(!findtextEx(ui[i], RDSCREEN_NOBREAK)) + ui[i] += "
" + ui[i] = replacetextEx(ui[i], RDSCREEN_NOBREAK, "") + return ui.Join("") + +/obj/machinery/computer/rdconsole/Topic(raw, ls) + if(..()) + return add_fingerprint(usr) - usr.set_machine(src) - if(href_list["disk_slot"]) - disk_slot_selected = text2num(href_list["disk_slot"]) - - if(href_list["menu"]) //Switches menu screens. Converts a sent text string into a number. Saves a LOT of code. - var/temp_screen = text2num(href_list["menu"]) - screen = temp_screen - - - var/datum/component/material_container/linked_materials - if(linked_lathe) - linked_materials = linked_lathe.GetComponent(/datum/component/material_container) - - var/datum/component/material_container/imprinter_materials - if(linked_imprinter) - imprinter_materials = linked_imprinter.GetComponent(/datum/component/material_container) - - if(href_list["category"]) - selected_category = href_list["category"] - - else if(href_list["updt_tech"]) //Update the research holder with information from the technology disk. - var/n = text2num(href_list["updt_tech"]) - screen = 0.0 - var/wait = 50 - if(!n) - wait = 0 - for(var/D in t_disk.tech_stored) - if(D) - wait += 50 - spawn(wait) - screen = 1.2 - if(t_disk) - if(!n) - for(var/tech in t_disk.tech_stored) - files.AddTech2Known(tech) - else - files.AddTech2Known(t_disk.tech_stored[n]) - updateUsrDialog() - griefProtection() //Update centcom too - - else if(href_list["clear_tech"]) //Erase data on the technology disk. - if(t_disk) - var/n = text2num(href_list["clear_tech"]) - if(!n) - for(var/i in 1 to t_disk.max_tech_stored) - t_disk.tech_stored[i] = null - else - t_disk.tech_stored[n] = null - - else if(href_list["eject_tech"]) //Eject the technology disk. - if(t_disk) - t_disk.loc = src.loc - t_disk = null - screen = 1.0 - - else if(href_list["copy_tech"]) //Copy some technology data from the research holder to the disk. - var/slot = text2num(href_list["copy_tech"]) - var/datum/tech/T = files.known_tech[href_list["copy_tech_ID"]] - if(T) - t_disk.tech_stored[slot] = T.copy() - screen = 1.2 - - else if(href_list["updt_design"]) //Updates the research holder with design data from the design disk. - var/n = text2num(href_list["updt_design"]) - screen = 0.0 - var/wait = 50 - if(!n) - wait = 0 - for(var/D in d_disk.blueprints) - if(D) - wait += 50 - spawn(wait) - screen = 1.4 - if(d_disk) - if(!n) - for(var/D in d_disk.blueprints) - if(D) - files.AddDesign2Known(D) - else - files.AddDesign2Known(d_disk.blueprints[n]) - updateUsrDialog() - griefProtection() //Update centcom too - - else if(href_list["clear_design"]) //Erases data on the design disk. - if(d_disk) - var/n = text2num(href_list["clear_design"]) - if(!n) - for(var/i in 1 to d_disk.max_blueprints) - d_disk.blueprints[i] = null - else - d_disk.blueprints[n] = null - - else if(href_list["eject_design"]) //Eject the design disk. - if(d_disk) - d_disk.loc = src.loc - d_disk = null - screen = 1.0 - - else if(href_list["copy_design"]) //Copy design data from the research holder to the design disk. - var/slot = text2num(href_list["copy_design"]) - var/datum/design/D = files.known_designs[href_list["copy_design_ID"]] - if(D) - var/autolathe_friendly = 1 - if(D.reagents_list.len) - autolathe_friendly = 0 - D.category -= "Imported" - else - for(var/x in D.materials) - if( !(x in list(MAT_METAL, MAT_GLASS))) - autolathe_friendly = 0 - D.category -= "Imported" - - if(D.build_type & (AUTOLATHE|PROTOLATHE|CRAFTLATHE)) // Specifically excludes circuit imprinter and mechfab - D.build_type = autolathe_friendly ? (D.build_type | AUTOLATHE) : D.build_type - D.category |= "Imported" - d_disk.blueprints[slot] = D - screen = 1.4 - - else if(href_list["eject_item"]) //Eject the item inside the destructive analyzer. - if(linked_destroy) - if(linked_destroy.busy) - to_chat(usr, "The destructive analyzer is busy at the moment.") - - else if(linked_destroy.loaded_item) - linked_destroy.loaded_item.forceMove(linked_destroy.loc) - linked_destroy.loaded_item = null - linked_destroy.icon_state = "d_analyzer" - screen = 1.0 - - else if(href_list["deconstruct"]) //Deconstruct the item in the destructive analyzer and update the research holder. - if(!linked_destroy || linked_destroy.busy || !linked_destroy.loaded_item) - updateUsrDialog() - return - - var/list/temp_tech = linked_destroy.ConvertReqString2List(linked_destroy.loaded_item.origin_tech) - var/cancontinue = FALSE - for(var/T in temp_tech) - if(files.IsTechHigher(T, temp_tech[T])) - cancontinue = TRUE - break - if(!cancontinue) - var/choice = input("This item does not raise tech levels. Proceed destroying loaded item anyway?") in list("Proceed", "Cancel") - if(choice == "Cancel" || !linked_destroy || !linked_destroy.loaded_item) - return - linked_destroy.busy = TRUE - screen = 0.1 - updateUsrDialog() - flick("d_analyzer_process", linked_destroy) - spawn(24) - if(linked_destroy) - linked_destroy.busy = FALSE - if(!linked_destroy.loaded_item) - screen = 1.0 - return - - for(var/T in temp_tech) - files.UpdateTech(T, temp_tech[T]) - - if(linked_lathe) //Also sends salvaged materials to a linked protolathe, if any. - for(var/material in linked_destroy.loaded_item.materials) - linked_materials.insert_amount(min((linked_materials.max_amount - linked_materials.total_amount), (min(linked_destroy.loaded_item.materials[material]*(linked_destroy.decon_mod/10), linked_destroy.loaded_item.materials[material]))), material) - SSblackbox.record_feedback("tally", "item_deconstructed", 1, linked_destroy.loaded_item.type) - linked_destroy.loaded_item = null - for(var/obj/I in linked_destroy.contents) - for(var/mob/M in I.contents) - M.death() - if(istype(I, /obj/item/stack/sheet))//Only deconsturcts one sheet at a time instead of the entire stack - var/obj/item/stack/sheet/S = I - if(S.amount > 1) - S.amount-- - linked_destroy.loaded_item = S - else - qdel(S) - linked_destroy.icon_state = "d_analyzer" - else - if(!(I in linked_destroy.component_parts)) - qdel(I) - linked_destroy.icon_state = "d_analyzer" - screen = 1.0 - use_power(250) - updateUsrDialog() - - else if(href_list["lock"]) //Lock the console from use by anyone without tox access. - if(src.allowed(usr)) - screen = text2num(href_list["lock"]) + if(ls["switch_screen"]) + back = screen + screen = text2num(ls["switch_screen"]) + if(ls["lock_console"]) + if(allowed(usr)) + lock_console(usr) else - to_chat(usr, "Unauthorized Access.") - - else if(href_list["sync"]) //Sync the research holder with all the R&D consoles in the game that aren't sync protected. - screen = 0.0 - if(!sync) - to_chat(usr, "You must connect to the network first!") + to_chat(usr, "Unauthorized Access.") + if(ls["unlock_console"]) + if(allowed(usr)) + unlock_console(usr) else - griefProtection() //Putting this here because I dont trust the sync process - spawn(30) - if(src) - for(var/obj/machinery/r_n_d/server/S in GLOB.machines) - var/server_processed = 0 - if(S.disabled) - continue - if((id in S.id_with_upload) || istype(S, /obj/machinery/r_n_d/server/centcom)) - for(var/v in files.known_tech) - var/datum/tech/T = files.known_tech[v] - S.files.AddTech2Known(T) - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] - S.files.AddDesign2Known(D) - S.files.RefreshResearch() - server_processed = 1 - if(((id in S.id_with_download) && !istype(S, /obj/machinery/r_n_d/server/centcom)) || S.hacked) - for(var/v in S.files.known_tech) - var/datum/tech/T = S.files.known_tech[v] - files.AddTech2Known(T) - for(var/v in S.files.known_designs) - var/datum/design/D = S.files.known_designs[v] - files.AddDesign2Known(D) - files.RefreshResearch() - server_processed = 1 - if(!istype(S, /obj/machinery/r_n_d/server/centcom) && server_processed) - S.produce_heat(100) - screen = 1.6 - updateUsrDialog() - - else if(href_list["togglesync"]) //Prevents the console from being synced by other consoles. Can still send data. - sync = !sync - - else if(href_list["build"]) //Causes the Protolathe to build something. - var/datum/design/being_built = files.known_designs[href_list["build"]] - var/amount = text2num(href_list["amount"]) - - if(being_built.make_reagents.len) - return 0 - - if(!linked_lathe || !being_built || !amount) - updateUsrDialog() - return - + to_chat(usr, "Unauthorized Access.") + if(ls["find_device"]) + SyncRDevices() + say("Resynced with nearby devices.") + if(ls["back_screen"]) + back = text2num(ls["back_screen"]) + if(ls["build"]) //Causes the Protolathe to build something. if(linked_lathe.busy) - to_chat(usr, "Protolathe is busy at the moment.") - return - - var/coeff = linked_lathe.efficiency_coeff - var/power = 1000 - var/old_screen = screen - - amount = max(1, min(10, amount)) - for(var/M in being_built.materials) - power += round(being_built.materials[M] * amount / 5) - power = max(3000, power) - screen = 0.3 - var/key = usr.key //so we don't lose the info during the spawn delay - if (!(being_built.build_type & PROTOLATHE)) - message_admins("Protolathe exploit attempted by [key_name(usr, usr.client)]!") - updateUsrDialog() - return - - var/g2g = 1 - var/enough_materials = 1 - linked_lathe.busy = TRUE - flick("protolathe_n",linked_lathe) - use_power(power) - - var/list/efficient_mats = list() - for(var/MAT in being_built.materials) - efficient_mats[MAT] = being_built.materials[MAT]*coeff - - if(!linked_materials.has_materials(efficient_mats, amount)) - linked_lathe.say("Not enough materials to complete prototype.") - enough_materials = 0 - g2g = 0 + say("Warning: Protolathe busy!") else - for(var/R in being_built.reagents_list) - if(!linked_lathe.reagents.has_reagent(R, being_built.reagents_list[R]*coeff)) - linked_lathe.say("Not enough reagents to complete prototype.") - enough_materials = 0 - g2g = 0 - - if(enough_materials) - linked_materials.use_amount(efficient_mats, amount) - for(var/R in being_built.reagents_list) - linked_lathe.reagents.remove_reagent(R, being_built.reagents_list[R]*coeff) - - var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. - - coeff *= being_built.lathe_time_factor - - spawn(32*coeff*amount**0.8) - if(linked_lathe) - if(g2g) //And if we only fail the material requirements, we still spend time and power - var/already_logged = 0 - for(var/i = 0, iCircuit Imprinter is busy at the moment.") - updateUsrDialog() - return - - var/coeff = linked_imprinter.efficiency_coeff - - var/power = 1000 - var/old_screen = screen - for(var/M in being_built.materials) - power += round(being_built.materials[M] / 5) - power = max(4000, power) - screen = 0.4 - if (!(being_built.build_type & IMPRINTER)) - message_admins("Circuit imprinter exploit attempted by [key_name(usr, usr.client)]!") - updateUsrDialog() - return - - var/g2g = 1 - var/enough_materials = 1 - linked_imprinter.busy = TRUE - flick("circuit_imprinter_ani", linked_imprinter) - use_power(power) - - var/list/efficient_mats = list() - for(var/MAT in being_built.materials) - efficient_mats[MAT] = being_built.materials[MAT]/coeff - - if(!imprinter_materials.has_materials(efficient_mats)) - linked_imprinter.say("Not enough materials to complete prototype.") - enough_materials = 0 - g2g = 0 + say("Warning: Imprinter busy!") else - for(var/R in being_built.reagents_list) - if(!linked_imprinter.reagents.has_reagent(R, being_built.reagents_list[R]/coeff)) - linked_imprinter.say("Not enough reagents to complete prototype.") - enough_materials = 0 - g2g = 0 - - if(enough_materials) - imprinter_materials.use_amount(efficient_mats) - for(var/R in being_built.reagents_list) - linked_imprinter.reagents.remove_reagent(R, being_built.reagents_list[R]/coeff) - - var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. - spawn(16) - if(linked_imprinter) - if(g2g) - var/obj/item/new_item = new P(src) - new_item.loc = linked_imprinter.loc - new_item.materials = efficient_mats.Copy() - SSblackbox.record_feedback("tally", "circuit_printed", 1, new_item.type) - screen = old_screen - linked_imprinter.busy = FALSE - else - say("Circuit Imprinter connection failed. Production halted.") - screen = 1.0 - updateUsrDialog() - - //Protolathe Materials - else if(href_list["disposeP"] && linked_lathe) //Causes the protolathe to dispose of a single reagent (all of it) - linked_lathe.reagents.del_reagent(href_list["disposeP"]) - - else if(href_list["disposeallP"] && linked_lathe) //Causes the protolathe to dispose of all it's reagents. - linked_lathe.reagents.clear_reagents() - - else if(href_list["ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material - linked_materials.retrieve_sheets(text2num(href_list["eject_amt"]), href_list["ejectsheet"]) - - //Circuit Imprinter Materials - else if(href_list["disposeI"] && linked_imprinter) //Causes the circuit imprinter to dispose of a single reagent (all of it) - linked_imprinter.reagents.del_reagent(href_list["disposeI"]) - - else if(href_list["disposeallI"] && linked_imprinter) //Causes the circuit imprinter to dispose of all it's reagents. - linked_imprinter.reagents.clear_reagents() - - else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the imprinter to eject a sheet of material - imprinter_materials.retrieve_sheets(text2num(href_list["eject_amt"]), href_list["imprinter_ejectsheet"]) - - - else if(href_list["find_device"]) //The R&D console looks for devices nearby to link up with. - screen = 0.0 - spawn(20) - SyncRDevices() - screen = 1.7 - updateUsrDialog() - - else if(href_list["disconnect"]) //The R&D console disconnects with a specific device. - switch(href_list["disconnect"]) + linked_imprinter.user_try_print_id(ls["imprint"]) + if(ls["category"]) + selected_category = ls["category"] + if(ls["disconnect"]) //The R&D console disconnects with a specific device. + switch(ls["disconnect"]) if("destroy") linked_destroy.linked_console = null linked_destroy = null @@ -572,42 +748,112 @@ won't update every console in existence) but it's more of a hassle to do. Also, if("imprinter") linked_imprinter.linked_console = null linked_imprinter = null - - else if(href_list["reset"]) //Reset the R&D console's database. - griefProtection() - var/choice = alert("R&D Console Database Reset", "Are you sure you want to reset the R&D console's database? Data lost cannot be recovered.", "Continue", "Cancel") - if(choice == "Continue" && usr.canUseTopic(src)) - message_admins("[key_name_admin(usr)] reset \the [src.name]'s database") - log_game("[key_name_admin(usr)] reset \the [src.name]'s database") - screen = 0.0 - qdel(files) - files = new /datum/research(src) - spawn(20) - screen = 1.6 - updateUsrDialog() - - else if(href_list["search"]) //Search for designs with name matching pattern - var/compare - - matching_designs.Cut() - - if(href_list["type"] == "proto") - compare = PROTOLATHE - screen = 3.17 + if(ls["eject_design"]) //Eject the design disk. + eject_disk("design") + screen = RDSCREEN_MENU + say("Ejecting Design Disk") + if(ls["eject_tech"]) //Eject the technology disk. + eject_disk("tech") + screen = RDSCREEN_MENU + say("Ejecting Technology Disk") + if(ls["deconstruct"]) + linked_destroy.user_try_decon_id(ls["deconstruct"], usr) + //Protolathe Materials + if(ls["disposeP"] && linked_lathe) //Causes the protolathe to dispose of a single reagent (all of it) + linked_lathe.reagents.del_reagent(ls["disposeP"]) + if(ls["disposeallP"] && linked_lathe) //Causes the protolathe to dispose of all it's reagents. + linked_lathe.reagents.clear_reagents() + if(ls["ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material + linked_lathe.materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["ejectsheet"]) + //Circuit Imprinter Materials + if(ls["disposeI"] && linked_imprinter) //Causes the circuit imprinter to dispose of a single reagent (all of it) + linked_imprinter.reagents.del_reagent(ls["disposeI"]) + if(ls["disposeallI"] && linked_imprinter) //Causes the circuit imprinter to dispose of all it's reagents. + linked_imprinter.reagents.clear_reagents() + if(ls["imprinter_ejectsheet"] && linked_imprinter) //Causes the imprinter to eject a sheet of material + linked_imprinter.materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["imprinter_ejectsheet"]) + if(ls["disk_slot"]) + disk_slot_selected = text2num(ls["disk_slot"]) + if(ls["research_node"]) + if(!research_control) + return //honestly should call them out for href exploiting :^) + if(!SSresearch.science_tech.available_nodes[ls["research_node"]]) + return //Nope! + research_node(ls["research_node"]) + if(ls["clear_tech"]) //Erase la on the technology disk. + if(t_disk) + qdel(t_disk.stored_research) + t_disk.stored_research = new + say("Wiping technology disk.") + if(ls["copy_tech"]) //Copy some technology la from the research holder to the disk. + stored_research.copy_research_to(t_disk.stored_research) + screen = RDSCREEN_TECHDISK + say("Downloading to technology disk.") + if(ls["clear_design"]) //Erases la on the design disk. + if(d_disk) + var/n = text2num(ls["clear_design"]) + if(!n) + for(var/i in 1 to d_disk.max_blueprints) + d_disk.blueprints[i] = null + say("Wiping design disk.") + else + var/datum/design/D = d_disk.blueprints[n] + say("Wiping design [D.name] from design disk.") + d_disk.blueprints[n] = null + if(ls["search"]) //Search for designs with name matching pattern + searchstring = ls["to_search"] + searchtype = ls["type"] + rescan_views() + if(searchtype == "proto") + screen = RDSCREEN_PROTOLATHE_SEARCH else - compare = IMPRINTER - screen = 4.17 + screen = RDSCREEN_IMPRINTER_SEARCH + if(ls["updt_tech"]) //Uple the research holder with information from the technology disk. + say("Uploading Technology Disk.") + if(t_disk) + t_disk.stored_research.copy_research_to(stored_research) + if(ls["copy_design"]) //Copy design la from the research holder to the design disk. + var/slot = text2num(ls["copy_design"]) + var/datum/design/D = stored_research.researched_designs[ls["copy_design_ID"]] + if(D) + var/autolathe_friendly = TRUE + if(D.reagents_list.len) + autolathe_friendly = FALSE + D.category -= "Imported" + else + for(var/x in D.materials) + if( !(x in list(MAT_METAL, MAT_GLASS))) + autolathe_friendly = FALSE + D.category -= "Imported" - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] - if(!(D.build_type & compare)) - continue - if(findtext(D.name,href_list["to_search"])) - matching_designs.Add(D) + if(D.build_type & (AUTOLATHE|PROTOLATHE|CRAFTLATHE)) // Specifically excludes circuit imprinter and mechfab + D.build_type = autolathe_friendly ? (D.build_type | AUTOLATHE) : D.build_type + D.category |= "Imported" + d_disk.blueprints[slot] = D + screen = RDSCREEN_DESIGNDISK + if(ls["eject_item"]) //Eject the item inside the destructive analyzer. + if(linked_destroy && linked_destroy.busy) + to_chat(usr, "The destructive analyzer is busy at the moment.") + else if(linked_destroy.loaded_item) + linked_destroy.unload_item() + screen = RDSCREEN_MENU + if(ls["view_node"]) + selected_node = SSresearch.techweb_nodes[ls["view_node"]] + screen = RDSCREEN_TECHWEB_NODEVIEW + if(ls["view_design"]) + selected_design = SSresearch.techweb_designs[ls["view_design"]] + screen = RDSCREEN_TECHWEB_DESIGNVIEW + if(ls["updt_design"]) //Uples the research holder with design la from the design disk. + if(d_disk) + var/n = text2num(ls["updt_design"]) + if(!n) + for(var/D in d_disk.blueprints) + if(D) + stored_research.add_design(D) + else + stored_research.add_design(d_disk.blueprints[n]) updateUsrDialog() - return - /obj/machinery/computer/rdconsole/attack_hand(mob/user) if(..()) @@ -616,483 +862,68 @@ won't update every console in existence) but it's more of a hassle to do. Also, /obj/machinery/computer/rdconsole/interact(mob/user) user.set_machine(src) - - if(first_use) - SyncRDevices() - - var/dat = "" - files.RefreshResearch() - switch(screen) //A quick check to make sure you get the right screen when a device is disconnected. - if(2 to 2.9) - if(screen == 2.3) - ; - else if(linked_destroy == null) - screen = 2.0 - else if(linked_destroy.loaded_item == null) - screen = 2.1 - else - screen = 2.2 - if(3 to 3.9) - if(linked_lathe == null) - screen = 3.0 - if(4 to 4.9) - if(linked_imprinter == null) - screen = 4.0 - - - var/datum/component/material_container/linked_materials - if(linked_lathe) - linked_materials = linked_lathe.GetComponent(/datum/component/material_container) - - var/datum/component/material_container/imprinter_materials - if(linked_imprinter) - imprinter_materials = linked_imprinter.GetComponent(/datum/component/material_container) - switch(screen) - - //////////////////////R&D CONSOLE SCREENS////////////////// - if(0.0) - dat += "
Updating Database....
" - - if(0.1) - dat += "
Processing and Updating Database...
" - - if(RD_CONSOLE_LOCKED_SCREEN) - dat += "
SYSTEM LOCKED
" - dat += "Unlock" - - if(0.3) - dat += "
Constructing Prototype. Please Wait...
" - - if(0.4) - dat += "
Imprinting Circuit. Please Wait...
" - - if(1.0) //Main Menu - dat += "
" - dat += "

Main Menu:


" - dat += "Current Research Levels
" - if(t_disk) - dat += "Disk Operations
" - else if(d_disk) - dat += "Disk Operations
" - else - dat += "Disk Operations
" - if(linked_destroy) - dat += "Destructive Analyzer Menu
" - else - dat += "Destructive Analyzer Menu
" - if(linked_lathe) - dat += "Protolathe Construction Menu
" - else - dat += "Protolathe Construction Menu
" - if(linked_imprinter) - dat += "Circuit Construction Menu
" - else - dat += "Circuit Construction Menu
" - dat += "Settings" - dat += "
" - - if(1.1) //Research viewer - dat += "Main Menu" - dat += "

Current Research Levels:


" - for(var/v in files.known_tech) - var/datum/tech/T = files.known_tech[v] - if(T.level <= 0) - continue - dat += "[T.name]
" - dat += "* Level: [T.level]
" - dat += "* Summary: [T.desc]
" - dat += "
" - - if(1.2) //Technology Disk Menu - dat += "Main Menu
" - dat += "Disk Operations: Clear DiskUpload AllEject Disk" - for(var/i in 1 to t_disk.max_tech_stored) - dat += "
" - if(t_disk.tech_stored[i]) - var/datum/tech/tech = t_disk.tech_stored[i] - dat += "Name: [tech.name]
" - dat += "Level: [tech.level]
" - dat += "Description: [tech.desc]
" - dat += "Operations: Upload to DatabaseClear Slot" - else - dat += "Empty Slot
Operations: Load Tech to Slot" - dat += "
" - if(1.3) //Technology Disk submenu - dat += "Main Menu" - dat += "Return to Disk Operations
" - dat += "

Load Technology to Disk:


" - for(var/v in files.known_tech) - var/datum/tech/T = files.known_tech[v] - if(T.level <= 0) - continue - dat += "[T.name]" - dat += "Copy to Disk
" - dat += "
" - - if(1.4) //Design Disk menu. - dat += "Main Menu
" - dat += "Disk Operations: Clear DiskUpload AllEject Disk" - for(var/i in 1 to d_disk.max_blueprints) - dat += "
" - if(d_disk.blueprints[i]) - var/datum/design/D = d_disk.blueprints[i] - dat += "Name: [D.name]
" - if(D.build_type) - dat += "Lathe Types:
" - if(D.build_type & IMPRINTER) - dat += "Circuit Imprinter
" - if(D.build_type & PROTOLATHE) - dat += "Protolathe
" - if(D.build_type & AUTOLATHE) - dat += "Autolathe
" - if(D.build_type & MECHFAB) - dat += "Exosuit Fabricator
" - if(D.build_type & BIOGENERATOR) - dat += "Biogenerator
" - if(D.build_type & LIMBGROWER) - dat += "Limbgrower
" - if(D.build_type & SMELTER) - dat += "Smelter
" - dat += "Required Materials:
" - var/all_mats = D.materials + D.reagents_list - for(var/M in all_mats) - dat += "* [CallMaterialName(M)] x [all_mats[M]]
" - dat += "Operations: Upload to Database Clear Slot" - else - dat += "Empty Slot
Operations: Load Design to Slot" - dat += "
" - if(1.5) //Design disk submenu - dat += "Main Menu" - dat += "Return to Disk Operations
" - dat += "

Load Design to Disk:


" - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] - dat += "[D.name] " - dat += "Copy to Disk
" - dat += "
" - - if(1.6) //R&D console settings - dat += "Main Menu
" - dat += "

R&D Console Setting:


" - if(sync) - dat += "Sync Database with Network
" - dat += "Connect to Research Network
" - dat += "Disconnect from Research Network
" - else - dat += "Sync Database with Network
" - dat += "Connect to Research Network
" - dat += "Disconnect from Research Network
" - dat += "Device Linkage Menu
" - dat += "Lock Console
" - dat += "Reset R&D Database
" - - if(1.7) //R&D device linkage - dat += "Main Menu" - dat += "Settings Menu
" - dat += "

R&D Console Device Linkage Menu:


" - dat += "Re-sync with Nearby Devices

" - dat += "

Linked Devices:


" - if(linked_destroy) - dat += "* Destructive Analyzer Disconnect
" - else - dat += "* No Destructive Analyzer Linked
" - if(linked_lathe) - dat += "* Protolathe Disconnect
" - else - dat += "* No Protolathe Linked
" - if(linked_imprinter) - dat += "* Circuit Imprinter Disconnect
" - else - dat += "* No Circuit Imprinter Linked
" - dat += "
" - - ////////////////////DESTRUCTIVE ANALYZER SCREENS//////////////////////////// - if(2.0) - dat += "Main Menu" - dat += "
NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE
" - - if(2.1) - dat += "Main Menu" - dat += "
No Item Loaded. Standing-by...
" - - if(2.2) - dat += "Main Menu
" - dat += "

Deconstruction Menu


" - dat += "Name: [linked_destroy.loaded_item.name]
" - dat += "Origin Tech:
" - var/list/temp_tech = linked_destroy.ConvertReqString2List(linked_destroy.loaded_item.origin_tech) - for(var/T in temp_tech) - dat += "* [CallTechName(T)] [temp_tech[T]]" - var/datum/tech/F = files.known_tech[T] - if(F) - dat += " (Current: [F.level])" - - dat += "
" - dat += "
Options: " - dat += "Deconstruct Item" - dat += "Eject Item" - if(2.3) - dat += "Main Menu" - dat += "
Item is neither reliable enough or broken enough to learn from.
" - - /////////////////////PROTOLATHE SCREENS///////////////////////// - if(3.0) - dat += "Main Menu
" - dat += "
NO PROTOLATHE LINKED TO CONSOLE
" - - if(3.1) - dat += "Main Menu " - dat += "Material Storage" - dat += "Chemical Storage
" - dat += "

Protolathe Menu:


" - dat += "Material Amount: [linked_materials.total_amount] / [linked_materials.max_amount]
" - dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
" - - dat += "
\ - \ - \ - \ - \ - \ -

" - - dat += list_categories(linked_lathe.categories, 3.15) - - //Grouping designs by categories, to improve readability - if(3.15) - dat += "Main Menu" - dat += "Protolathe Menu" - dat += "

Browsing [selected_category]:


" - dat += "Material Amount: [linked_materials.total_amount] / [linked_materials.max_amount]
" - dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
" - - var/coeff = linked_lathe.efficiency_coeff - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] - if(!(selected_category in D.category)|| !(D.build_type & PROTOLATHE)) - continue - var/temp_material - var/c = 50 - var/t - - var/all_materials = D.materials + D.reagents_list - for(var/M in all_materials) - t = linked_lathe.check_mat(D, M) - temp_material += " | " - if (t < 1) - temp_material += "[all_materials[M]*coeff] [CallMaterialName(M)]" - else - temp_material += " [all_materials[M]*coeff] [CallMaterialName(M)]" - c = min(c,t) - - if (c >= 1) - dat += "[D.name]" - if(c >= 5) - dat += "x5" - if(c >= 10) - dat += "x10" - dat += "[temp_material]" - else - dat += "[D.name][temp_material]" - dat += "
" - dat += "
" - - if(3.17) //Display search result - dat += "Main Menu" - dat += "Protolathe Menu" - dat += "

Search results:


" - dat += "Material Amount: [linked_materials.total_amount] / [linked_materials.max_amount]
" - dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
" - - var/coeff = linked_lathe.efficiency_coeff - for(var/datum/design/D in matching_designs) - var/temp_material - var/c = 50 - var/t - var/all_materials = D.materials + D.reagents_list - for(var/M in all_materials) - t = linked_lathe.check_mat(D, M) - temp_material += " | " - if (t < 1) - temp_material += "[all_materials[M]*coeff] [CallMaterialName(M)]" - else - temp_material += " [all_materials[M]*coeff] [CallMaterialName(M)]" - c = min(c,t) - - if (c >= 1) - dat += "[D.name]" - if(c >= 5) - dat += "x5" - if(c >= 10) - dat += "x10" - dat += "[temp_material]" - else - dat += "[D.name][temp_material]" - dat += "
" - dat += "
" - - if(3.2) //Protolathe Material Storage Sub-menu - dat += "Main Menu" - dat += "Protolathe Menu
" - dat += "

Material Storage:



" - if(!linked_lathe) - dat += "ERROR: Protolathe connection failed." - else - for(var/mat_id in linked_materials.materials) - var/datum/material/M = linked_materials.materials[mat_id] - dat += "* [M.amount] of [M.name]: " - if(M.amount >= MINERAL_MATERIAL_AMOUNT) - dat += "Eject " - if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) - dat += "5x " - if(M.amount >= MINERAL_MATERIAL_AMOUNT) - dat += "All" - dat += "
" - dat += "
" - - if(3.3) - dat += "Main Menu" - dat += "Protolathe Menu" - dat += "Disposal All Chemicals in Storage
" - dat += "

Chemical Storage:



" - for(var/datum/reagent/R in linked_lathe.reagents.reagent_list) - dat += "[R.name]: [R.volume]" - dat += "Purge
" - - ///////////////////CIRCUIT IMPRINTER SCREENS//////////////////// - if(4.0) - dat += "Main Menu
" - dat += "
NO CIRCUIT IMPRINTER LINKED TO CONSOLE
" - - if(4.1) - dat += "Main Menu" - dat += "Material Storage" - dat += "Chemical Storage
" - dat += "

Circuit Imprinter Menu:


" - dat += "Material Amount: [imprinter_materials.total_amount]
" - dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
" - - dat += "
\ - \ - \ - \ - \ - \ -

" - - dat += list_categories(linked_imprinter.categories, 4.15) - - if(4.15) - dat += "Main Menu" - dat += "Circuit Imprinter Menu" - dat += "

Browsing [selected_category]:


" - dat += "Material Amount: [imprinter_materials.total_amount]
" - dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
" - - var/coeff = linked_imprinter.efficiency_coeff - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] - if(!(selected_category in D.category) || !(D.build_type & IMPRINTER)) - continue - var/temp_materials - var/check_materials = 1 - - var/all_materials = D.materials + D.reagents_list - - for(var/M in all_materials) - temp_materials += " | " - if (!linked_imprinter.check_mat(D, M)) - check_materials = 0 - temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" - else - temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" - if (check_materials) - dat += "[D.name][temp_materials]
" - else - dat += "[D.name][temp_materials]
" - dat += "
" - - if(4.17) - dat += "Main Menu" - dat += "Circuit Imprinter Menu" - dat += "

Search results:


" - dat += "Material Amount: [imprinter_materials.total_amount]
" - dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
" - - var/coeff = linked_imprinter.efficiency_coeff - for(var/datum/design/D in matching_designs) - var/temp_materials - var/check_materials = 1 - var/all_materials = D.materials + D.reagents_list - for(var/M in all_materials) - temp_materials += " | " - if (!linked_imprinter.check_mat(D, M)) - check_materials = 0 - temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" - else - temp_materials += " [all_materials[M]/coeff] [CallMaterialName(M)]" - if (check_materials) - dat += "[D.name][temp_materials]
" - else - dat += "[D.name][temp_materials]
" - dat += "
" - - if(4.2) //Circuit Imprinter Material Storage Sub-menu - dat += "Main Menu" - dat += "Circuit Imprinter Menu" - dat += "Disposal All Chemicals in Storage
" - dat += "

Chemical Storage:



" - for(var/datum/reagent/R in linked_imprinter.reagents.reagent_list) - dat += "[R.name]: [R.volume]" - dat += "Purge
" - - if(4.3) - dat += "Main Menu" - dat += "Circuit Imprinter Menu
" - dat += "

Material Storage:



" - if(!linked_imprinter) - dat += "ERROR: Protolathe connection failed." - else - for(var/mat_id in imprinter_materials.materials) - var/datum/material/M = imprinter_materials.materials[mat_id] - dat += "* [M.amount] of [M.name]: " - if(M.amount >= MINERAL_MATERIAL_AMOUNT) - dat += "Eject " - if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) - dat += "5x " - if(M.amount >= MINERAL_MATERIAL_AMOUNT) - dat += "All" - dat += "
" - dat += "
" - var/datum/browser/popup = new(user, "rndconsole", name, 460, 550) - popup.set_content(dat) + popup.set_content(generate_ui()) popup.open() - return -//helper proc, which return a table containing categories -/obj/machinery/computer/rdconsole/proc/list_categories(list/categories, menu_num as num) - if(!categories) - return +/obj/machinery/computer/rdconsole/proc/tdisk_uple_complete() + tdisk_uple = FALSE + updateUsrDialog() - var/line_length = 1 - var/dat = "" +/obj/machinery/computer/rdconsole/proc/ddisk_uple_complete() + ddisk_uple = FALSE + updateUsrDialog() - for(var/C in categories) - if(line_length > 2) - dat += "" - line_length = 1 +/obj/machinery/computer/rdconsole/proc/eject_disk(type) + if(type == "design") + d_disk.forceMove(get_turf(src)) + d_disk = null + if(type == "tech") + t_disk.forceMove(get_turf(src)) + t_disk = null - dat += "" - line_length++ +/obj/machinery/computer/rdconsole/proc/rescan_views() + var/compare + matching_designs.Cut() + if(searchtype == "proto") + compare = PROTOLATHE + else if(searchtype == "imprint") + compare = IMPRINTER + for(var/v in stored_research.researched_designs) + var/datum/design/D = stored_research.researched_designs[v] + if(!(D.build_type & compare)) + continue + if(findtext(D.name,searchstring)) + matching_designs.Add(D) - dat += "
[C]
" - return dat +/obj/machinery/computer/rdconsole/proc/check_canprint(datum/design/D, buildtype) + var/amount = 50 + if(buildtype == IMPRINTER) + if(!linked_imprinter) + return FALSE + for(var/M in D.materials + D.reagents_list) + amount = min(amount, linked_imprinter.check_mat(D, M)) + if(amount < 1) + return FALSE + else if(buildtype == PROTOLATHE) + if(!linked_lathe) + return FALSE + for(var/M in D.materials + D.reagents_list) + amount = min(amount, linked_lathe.check_mat(D, M)) + if(amount < 1) + return FALSE + else + return FALSE + return amount + +/obj/machinery/computer/rdconsole/proc/lock_console(mob/user) + locked = TRUE + +/obj/machinery/computer/rdconsole/proc/unlock_console(mob/user) + locked = FALSE /obj/machinery/computer/rdconsole/robotics name = "Robotics R&D Console" - desc = "A console used to interface with R&D tools." - id = 2 req_access = null req_access_txt = "29" @@ -1104,10 +935,6 @@ won't update every console in existence) but it's more of a hassle to do. Also, /obj/machinery/computer/rdconsole/core name = "Core R&D Console" - desc = "A console used to interface with R&D tools." - id = 1 /obj/machinery/computer/rdconsole/experiment name = "E.X.P.E.R.I-MENTOR R&D Console" - desc = "A console used to interface with R&D tools." - id = 3 diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index b2acadb896..ad75ddf07b 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -3,7 +3,7 @@ //All devices that link into the R&D console fall into thise type for easy identification and some shared procs. -/obj/machinery/r_n_d +/obj/machinery/rnd name = "R&D Device" icon = 'icons/obj/machines/research.dmi' density = TRUE @@ -11,31 +11,34 @@ use_power = IDLE_POWER_USE var/busy = FALSE var/hacked = FALSE - var/disabled = 0 + var/disabled = FALSE var/shocked = FALSE var/obj/machinery/computer/rdconsole/linked_console var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer) -/obj/machinery/r_n_d/Initialize() - . = ..() - wires = new /datum/wires/r_n_d(src) +/obj/machinery/rnd/proc/reset_busy() + busy = FALSE -/obj/machinery/r_n_d/Destroy() +/obj/machinery/rnd/Initialize() + . = ..() + wires = new /datum/wires/rnd(src) + +/obj/machinery/rnd/Destroy() QDEL_NULL(wires) return ..() -/obj/machinery/r_n_d/proc/shock(mob/user, prb) +/obj/machinery/rnd/proc/shock(mob/user, prb) if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return 0 + return FALSE if(!prob(prb)) - return 0 + return FALSE do_sparks(5, TRUE, src) if (electrocute_mob(user, get_area(src), src, 0.7, TRUE)) - return 1 + return TRUE else - return 0 + return FALSE -/obj/machinery/r_n_d/attack_hand(mob/user) +/obj/machinery/rnd/attack_hand(mob/user) if(shocked) if(shock(user,50)) return @@ -44,10 +47,10 @@ -/obj/machinery/r_n_d/attackby(obj/item/O, mob/user, params) +/obj/machinery/rnd/attackby(obj/item/O, mob/user, params) if (shocked) if(shock(user,50)) - return 1 + return TRUE if (default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), O)) if(linked_console) disconnect_console() @@ -57,32 +60,28 @@ if(default_deconstruction_crowbar(O)) return if(is_open_container() && O.is_open_container()) - return 0 //inserting reagents into the machine + return FALSE //inserting reagents into the machine if(Insert_Item(O, user)) - return 1 + return TRUE else return ..() //to disconnect the machine from the r&d console it's linked to -/obj/machinery/r_n_d/proc/disconnect_console() +/obj/machinery/rnd/proc/disconnect_console() linked_console = null -//proc used to handle inserting items or reagents into r_n_d machines -/obj/machinery/r_n_d/proc/Insert_Item(obj/item/I, mob/user) +//proc used to handle inserting items or reagents into rnd machines +/obj/machinery/rnd/proc/Insert_Item(obj/item/I, mob/user) return //whether the machine can have an item inserted in its current state. -/obj/machinery/r_n_d/proc/is_insertion_ready(mob/user) +/obj/machinery/rnd/proc/is_insertion_ready(mob/user) if(panel_open) to_chat(user, "You can't load [src] while it's opened!") return if (disabled) return if (!linked_console) // Try to auto-connect to new RnD consoles nearby. - for(var/obj/machinery/computer/rdconsole/console in oview(3, src)) - if(console.first_use) - console.SyncRDevices() - if(!linked_console) to_chat(user, "[src] must be linked to an R&D console first!") return @@ -98,16 +97,16 @@ if(loaded_item) to_chat(user, "[src] is already loaded.") return - return 1 + return TRUE //we eject the loaded item when deconstructing the machine -/obj/machinery/r_n_d/on_deconstruction() +/obj/machinery/rnd/on_deconstruction() if(loaded_item) loaded_item.forceMove(loc) ..() -/obj/machinery/r_n_d/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted) +/obj/machinery/rnd/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted) var/stack_name if(ispath(type_inserted, /obj/item/ore/bluespace_crystal)) stack_name = "bluespace" diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm deleted file mode 100644 index 284e9d42e7..0000000000 --- a/code/modules/research/research.dm +++ /dev/null @@ -1,371 +0,0 @@ -/* -General Explination: -The research datum is the "folder" where all the research information is stored in a R&D console. It's also a holder for all the -various procs used to manipulate it. It has four variables and seven procs: - -Variables: -- possible_tech is a list of all the /datum/tech that can potentially be researched by the player. The RefreshResearch() proc -(explained later) only goes through those when refreshing what you know. Generally, possible_tech contains ALL of the existing tech -but it is possible to add tech to the game that DON'T start in it (example: Xeno tech). Generally speaking, you don't want to mess -with these since they should be the default version of the datums. They're actually stored in a list rather then using typesof to -refer to them since it makes it a bit easier to search through them for specific information. -- know_tech is the companion list to possible_tech. It's the tech you can actually research and improve. Until it's added to this -list, it can't be improved. All the tech in this list are visible to the player. -- possible_designs is functionally identical to possbile_tech except it's for /datum/design. -- known_designs is functionally identical to known_tech except it's for /datum/design - -Procs: -- TechHasReqs: Used by other procs (specifically RefreshResearch) to see whether all of a tech's requirements are currently in -known_tech and at a high enough level. -- DesignHasReqs: Same as TechHasReqs but for /datum/design and known_design. -- AddTech2Known: Adds a /datum/tech to known_tech. It checks to see whether it already has that tech (if so, it just replaces it). If -it doesn't have it, it adds it. Note: It does NOT check possible_tech at all. So if you want to add something strange to it (like -a player made tech?) you can. -- AddDesign2Known: Same as AddTech2Known except for /datum/design and known_designs. -- RefreshResearch: This is the workhorse of the R&D system. It updates the /datum/research holder and adds any unlocked tech paths -and designs you have reached the requirements for. It only checks through possible_tech and possible_designs, however, so it won't -accidentally add "secret" tech to it. -- UpdateTech is used as part of the actual researching process. It takes an ID and finds techs with that same ID in known_tech. When -it finds it, it checks to see whether it can improve it at all. If the known_tech's level is less then or equal to -the inputted level, it increases the known tech's level to the inputted level -1 or know tech's level +1 (whichever is higher). - -The tech datums are the actual "tech trees" that you improve through researching. Each one has five variables: -- Name: Pretty obvious. This is often viewable to the players. -- Desc: Pretty obvious. Also player viewable. -- ID: This is the unique ID of the tech that is used by the various procs to find and/or maniuplate it. -- Level: This is the current level of the tech. All techs start at 1 and have a max of 20. Devices and some techs require a certain -level in specific techs before you can produce them. -- Req_tech: This is a list of the techs required to unlock this tech path. If left blank, it'll automatically be loaded into the -research holder datum. - -*/ -/*************************************************************** -** Master Types ** -** Includes all the helper procs and basic tech processing. ** -***************************************************************/ - -/datum/research //Holder for all the existing, archived, and known tech. Individual to console. - - //Datum/tech go here. - var/list/possible_tech = list() //List of all tech in the game that players have access to (barring special events). - var/list/known_tech = list() //List of locally known tech. - var/list/possible_designs = list() //List of all designs. - var/list/known_designs = list() //List of available designs. - -/datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated. - for(var/T in subtypesof(/datum/tech)) - possible_tech += new T(src) - for(var/D in subtypesof(/datum/design)) - possible_designs += new D(src) - RefreshResearch() - -//Checks to see if tech has all the required pre-reqs. -//Input: datum/tech; Output: 0/1 (false/true) -/datum/research/proc/TechHasReqs(datum/tech/T) - if(T.req_tech.len == 0) - return TRUE - for(var/req in T.req_tech) - var/datum/tech/known = known_tech[req] - if(!known || known.level < T.req_tech[req]) - return FALSE - return TRUE - -//Checks to see if design has all the required pre-reqs. -//Input: datum/design; Output: 0/1 (false/true) -/datum/research/proc/DesignHasReqs(datum/design/D)//Heavily optimized -Sieve - if(D.req_tech.len == 0) - return TRUE - for(var/req in D.req_tech) - var/datum/tech/known = known_tech[req] - if(!known || known.level < D.req_tech[req]) - return FALSE - return TRUE - -//Adds a tech to known_tech list. Checks to make sure there aren't duplicates and updates existing tech's levels if needed. -//Input: datum/tech; Output: Null -/datum/research/proc/AddTech2Known(datum/tech/T) - if(!T) - return - if(known_tech[T.id]) - var/datum/tech/known = known_tech[T.id] - if(T.level > known.level) - known.level = T.level - return - known_tech[T.id] = T.copy() - -/datum/research/proc/AddDesign2Known(datum/design/D) - if(known_designs[D.id]) - return - known_designs[D.id] = D - -//Refreshes known_tech and known_designs list. -//Input/Output: n/a -/datum/research/proc/RefreshResearch() - for(var/datum/tech/PT in possible_tech) - if(TechHasReqs(PT)) - AddTech2Known(PT) - - for(var/datum/design/PD in possible_designs) - if(DesignHasReqs(PD)) - AddDesign2Known(PD) - - for(var/v in known_tech) - var/datum/tech/T = known_tech[v] - T.level = Clamp(T.level, 0, 20) - return - -//Refreshes the levels of a given tech. -//Input: Tech's ID and Level; Output: null -/datum/research/proc/UpdateTech(ID, level) - var/datum/tech/KT = known_tech[ID] - if(KT && KT.level <= level) - KT.level = max(KT.level + 1, level) - SSblackbox.log_research(KT.name, level) - -//Checks if the origin level can raise current tech levels -//Input: Tech's ID and Level; Output: TRUE for yes, FALSE for no -/datum/research/proc/IsTechHigher(ID, level) - var/datum/tech/KT = known_tech[ID] - if(KT) - if(KT.level <= level) - return TRUE - else - return FALSE - -/datum/research/proc/FindDesignByID(id) - return known_designs[id] - -/datum/research/proc/LowerTech(tech_id,value) - var/datum/tech/T = known_tech[tech_id] - T.level = max(initial(T.level),T.level - value) - known_designs.Cut() - RefreshResearch() - - -//Autolathe files -/datum/research/autolathe/New() - for(var/T in (subtypesof(/datum/tech))) - possible_tech += new T(src) - for(var/path in subtypesof(/datum/design)) - var/datum/design/D = new path(src) - possible_designs += D - if((D.build_type & AUTOLATHE) && ("initial" in D.category)) //autolathe starts without hacked designs - AddDesign2Known(D) - -//Limb Grower files -/datum/research/limbgrower/New() - for(var/T in (subtypesof(/datum/tech))) - possible_tech += new T(src) - for(var/path in subtypesof(/datum/design)) - var/datum/design/D = new path(src) - possible_designs += D - if((D.build_type & LIMBGROWER) && ("initial" in D.category)) - AddDesign2Known(D) - -/datum/research/autolathe/AddDesign2Known(datum/design/D) - if(!(D.build_type & AUTOLATHE)) - return - ..() - -//Biogenerator files -/datum/research/biogenerator/New() - for(var/T in (subtypesof(/datum/tech))) - possible_tech += new T(src) - for(var/path in subtypesof(/datum/design)) - var/datum/design/D = new path(src) - possible_designs += D - if((D.build_type & BIOGENERATOR) && ("initial" in D.category)) - AddDesign2Known(D) - -/datum/research/biogenerator/AddDesign2Known(datum/design/D) - if(!(D.build_type & BIOGENERATOR)) - return - ..() - -//Smelter files -/datum/research/smelter/New() - for(var/T in (subtypesof(/datum/tech))) - possible_tech += new T(src) - for(var/path in subtypesof(/datum/design)) - var/datum/design/D = new path(src) - possible_designs += D - if((D.build_type & SMELTER) && ("initial" in D.category)) - AddDesign2Known(D) - -/datum/research/smelter/AddDesign2Known(datum/design/D) - if(!(D.build_type & SMELTER)) - return - ..() - - -/*************************************************************** -** Technology Datums ** -** Includes all the various technoliges and what they make. ** -***************************************************************/ - -/datum/tech //Datum of individual technologies. - var/name = "name" //Name of the technology. - var/desc = "description" //General description of what it does and what it makes. - var/id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols. - var/level = 1 //A simple number scale of the research level. Level 0 = Secret tech. - var/rare = 1 //How much CentCom wants to get that tech. Used in supply shuttle tech cost calculation. - var/list/req_tech = list() //List of ids associated values of techs required to research this tech. "id" = # - - -//Trunk Technologies (don't require any other techs and you start knowning them). - -/datum/tech/materials - name = "Materials Research" - desc = "Development of new and improved materials." - id = "materials" - -/datum/tech/engineering - name = "Engineering Research" - desc = "Development of new and improved engineering parts and tools." - id = "engineering" - -/datum/tech/plasmatech - name = "Plasma Research" - desc = "Research into the mysterious substance colloquially known as \"plasma\"." - id = "plasmatech" - rare = 3 - -/datum/tech/powerstorage - name = "Power Manipulation Technology" - desc = "The various technologies behind the storage and generation of electricity." - id = "powerstorage" - -/datum/tech/bluespace - name = "\"Blue-space\" Research" - desc = "Research into the sub-reality known as \"blue-space\"." - id = "bluespace" - rare = 2 - -/datum/tech/biotech - name = "Biological Technology" - desc = "Research into the deeper mysteries of life and organic substances." - id = "biotech" - -/datum/tech/combat - name = "Combat Systems Research" - desc = "The development of offensive and defensive systems." - id = "combat" - -/datum/tech/magnets - name = "Electromagnetic Spectrum Research" - desc = "Research into the electromagnetic spectrum. No clue how they actually work, though." - id = "magnets" - -/datum/tech/programming - name = "Data Theory Research" - desc = "The development of new computer and artificial intelligence and data storage systems." - id = "programming" - -/datum/tech/syndicate - name = "Illegal Technologies Research" - desc = "The study of technologies that violate Nanotrasen regulations." - id = "syndicate" - rare = 4 - - -//Secret Technologies (hidden by default, require rare items to reveal) - -/datum/tech/abductor - name = "Alien Technologies Research" - desc = "The study of technologies used by the advanced alien race known as Abductors." - id = "abductor" - rare = 5 - level = 0 - -/datum/tech/arcane - name = "Arcane Research" - desc = "When sufficiently analyzed, any magic becomes indistinguishable from technology." - id = "arcane" - rare = 5 - level = 0 - -/* -//Branch Techs -/datum/tech/explosives - name = "Explosives Research" - desc = "The creation and application of explosive materials." - id = "explosives" - req_tech = list("materials" = 3) - -/datum/tech/generators - name = "Power Generation Technology" - desc = "Research into more powerful and more reliable sources." - id = "generators" - req_tech = list("powerstorage" = 2) - -/datum/tech/robotics - name = "Robotics Technology" - desc = "The development of advanced automated, autonomous machines." - id = "robotics" - req_tech = list("materials" = 3, "programming" = 3) -*/ - - -/datum/tech/proc/getCost(var/current_level = null) - // Calculates tech disk's supply points sell cost - if(!current_level) - current_level = initial(level) - - if(current_level >= level) - return 0 - - var/cost = 0 - for(var/i=current_level+1, i<=level, i++) - if(i == initial(level)) - continue - cost += i*rare - - return cost - -/datum/tech/proc/copy() - var/datum/tech/T = new type() - T.level = level - return T - -/obj/item/disk/tech_disk - name = "technology disk" - desc = "A disk for storing technology data for further research." - icon_state = "datadisk0" - materials = list(MAT_METAL=300, MAT_GLASS=100) - var/list/tech_stored = list() - var/max_tech_stored = 1 - -/obj/item/disk/tech_disk/Initialize() - . = ..() - pixel_x = rand(-5, 5) - pixel_y = rand(-5, 5) - for(var/i in 1 to max_tech_stored) - tech_stored += null - - -/obj/item/disk/tech_disk/adv - name = "advanced technology disk" - desc = "A disk for storing technology data for further research. This one has extra storage space." - materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER=50) - max_tech_stored = 5 - -/obj/item/disk/tech_disk/super_adv - name = "quantum technology disk" - desc = "A disk for storing technology data for further research. This one has extremely large storage space." - materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER=100, MAT_GOLD=100) - max_tech_stored = 10 - -/obj/item/disk/tech_disk/debug - name = "\improper CentCom technology disk" - desc = "A debug item for research." - materials = list() - max_tech_stored = 0 - -/obj/item/disk/tech_disk/debug/Initialize() - . = ..() - var/list/techs = subtypesof(/datum/tech) - max_tech_stored = techs.len - for(var/V in techs) - var/datum/tech/T = new V() - tech_stored += T - T.level = 8 diff --git a/code/modules/research/research_disk.dm b/code/modules/research/research_disk.dm new file mode 100644 index 0000000000..ac06bbdbd5 --- /dev/null +++ b/code/modules/research/research_disk.dm @@ -0,0 +1,22 @@ + +/obj/item/disk/tech_disk + name = "technology disk" + desc = "A disk for storing technology data for further research." + icon_state = "datadisk0" + materials = list(MAT_METAL=300, MAT_GLASS=100) + var/datum/techweb/stored_research + +/obj/item/disk/tech_disk/Initialize() + . = ..() + pixel_x = rand(-5, 5) + pixel_y = rand(-5, 5) + stored_research = new /datum/techweb + +/obj/item/disk/tech_disk/debug + name = "centcomm technology disk" + desc = "A debug item for research" + materials = list() + +/obj/item/disk/tech_disk/debug/Initialize() + . = ..() + stored_research = new /datum/techweb/admin diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 9a59e63e18..8a244bcea1 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -1,99 +1,65 @@ -/obj/machinery/r_n_d/server +/obj/machinery/rnd/server name = "\improper R&D Server" desc = "A computer system running a deep neural network that processes arbitrary information to produce data useable in the development of new technologies. In layman's terms, it makes research points." icon = 'icons/obj/machines/research.dmi' icon_state = "server" - var/datum/research/files + var/datum/techweb/stored_research var/heat_health = 100 - var/list/id_with_upload = list() //List of R&D consoles with upload to server access. - var/list/id_with_download = list() //List of R&D consoles with download from server access. - var/id_with_upload_string = "" //String versions for easy editing in map editor. - var/id_with_download_string = "" + //Code for point mining here. + var/working = TRUE //temperature should break it. var/server_id = 0 + var/base_mining_income = 2 var/heat_gen = 100 var/heating_power = 40000 - var/delay = 10 + var/delay = 5 + var/temp_tolerance_low = 0 + var/temp_tolerance_high = T20C + var/temp_penalty_coefficient = 0.5 //1 = -1 points per degree above high tolerance. 0.5 = -0.5 points per degree above high tolerance. req_access = list(ACCESS_RD) //ONLY THE R&D CAN CHANGE SERVER SETTINGS. -/obj/machinery/r_n_d/server/Initialize() +/obj/machinery/rnd/server/Initialize() . = ..() + SSresearch.servers |= src + stored_research = SSresearch.science_tech var/obj/item/circuitboard/machine/B = new /obj/item/circuitboard/machine/rdserver(null) B.apply_default_parts(src) -/obj/machinery/r_n_d/server/Destroy() - griefProtection() +/obj/machinery/rnd/server/Destroy() + SSresearch.servers -= src return ..() -/obj/machinery/r_n_d/server/RefreshParts() +/obj/machinery/rnd/server/RefreshParts() var/tot_rating = 0 for(var/obj/item/stock_parts/SP in src) tot_rating += SP.rating heat_gen /= max(1, tot_rating) -/obj/machinery/r_n_d/server/Initialize(mapload) - . = ..() - if(!files) - files = new /datum/research(src) - var/list/temp_list - if(!id_with_upload.len) - temp_list = list() - temp_list = splittext(id_with_upload_string, ";") - for(var/N in temp_list) - id_with_upload += text2num(N) - if(!id_with_download.len) - temp_list = list() - temp_list = splittext(id_with_download_string, ";") - for(var/N in temp_list) - id_with_download += text2num(N) - -/obj/machinery/r_n_d/server/process() - var/datum/gas_mixture/environment = loc.return_air() - switch(environment.temperature) - if(0 to T0C) - heat_health = min(100, heat_health + 1) - if(T0C to (T20C + 20)) - heat_health = Clamp(heat_health, 0, 100) - if((T20C + 20) to (T0C + 70)) - heat_health = max(0, heat_health - 1) - if(heat_health <= 0) - /*griefProtection() This seems to get called twice before running any code that deletes/damages the server or it's files anwyay. - refreshParts and the hasReq procs that get called by this are laggy and do not need to be called by every server on the map every tick */ - var/updateRD = 0 - files.known_designs = list() - for(var/v in files.known_tech) - var/datum/tech/T = files.known_tech[v] - if(prob(1)) - updateRD++ - T.level-- - if(updateRD) - files.RefreshResearch() - if(delay) - delay-- +/obj/machinery/rnd/server/proc/refresh_working() + if(stat & EMPED) + working = FALSE else - produce_heat(heat_gen) - delay = initial(delay) + working = TRUE +/obj/machinery/rnd/server/emp_act() + stat |= EMPED + addtimer(CALLBACK(src, .proc/unemp), 600) + refresh_working() + return ..() -/obj/machinery/r_n_d/server/emp_act(severity) - griefProtection() - ..() +/obj/machinery/rnd/server/proc/unemp() + stat &= ~EMPED + refresh_working() -/obj/machinery/r_n_d/server/ex_act(severity, target) - griefProtection() - ..() +/obj/machinery/rnd/server/proc/mine() + . = base_mining_income + var/penalty = max((get_env_temp() - temp_tolerance_low), 0) / temp_penalty_coefficient + . = max(. - penalty, 0) -//Backup files to centcom to help admins recover data after greifer attacks -/obj/machinery/r_n_d/server/proc/griefProtection() - for(var/obj/machinery/r_n_d/server/centcom/C in GLOB.machines) - for(var/v in files.known_tech) - var/datum/tech/T = files.known_tech[v] - C.files.AddTech2Known(T) - for(var/v in files.known_designs) - var/datum/design/D = files.known_designs[v] - C.files.AddDesign2Known(D) - C.files.RefreshResearch() +/obj/machinery/rnd/server/proc/get_env_temp() + var/datum/gas_mixture/environment = loc.return_air() + return environment.temperature -/obj/machinery/r_n_d/server/proc/produce_heat(heat_amt) +/obj/machinery/rnd/server/proc/produce_heat(heat_amt) if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater. var/turf/L = loc if(istype(L)) @@ -114,30 +80,17 @@ env.merge(removed) air_update_turf() -//called when the server is deconstructed. -/obj/machinery/r_n_d/server/on_deconstruction() - griefProtection() - ..() - -/obj/machinery/r_n_d/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves. +/obj/machinery/rnd/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves. if (disabled) return if (shocked) shock(user,50) return -/obj/machinery/r_n_d/server/centcom - name = "CentCom Central R&D Database" - server_id = -1 - -/obj/machinery/r_n_d/server/centcom/Initialize() - . = ..() - fix_noid_research_servers() - /proc/fix_noid_research_servers() var/list/no_id_servers = list() var/list/server_ids = list() - for(var/obj/machinery/r_n_d/server/S in GLOB.machines) + for(var/obj/machinery/rnd/server/S in GLOB.machines) switch(S.server_id) if(-1) continue @@ -146,7 +99,7 @@ else server_ids += S.server_id - for(var/obj/machinery/r_n_d/server/S in no_id_servers) + for(var/obj/machinery/rnd/server/S in no_id_servers) var/num = 1 while(!S.server_id) if(num in server_ids) @@ -156,9 +109,6 @@ server_ids += num no_id_servers -= S -/obj/machinery/r_n_d/server/centcom/process() - return PROCESS_KILL //don't need process() - /obj/machinery/computer/rdservercontrol name = "R&D Server Controller" @@ -166,7 +116,7 @@ icon_screen = "rdcomp" icon_keyboard = "rd_key" var/screen = 0 - var/obj/machinery/r_n_d/server/temp_server + var/obj/machinery/rnd/server/temp_server var/list/servers = list() var/list/consoles = list() var/badmin = 0 @@ -185,58 +135,6 @@ if(href_list["main"]) screen = 0 - else if(href_list["access"] || href_list["data"] || href_list["transfer"]) - temp_server = null - consoles = list() - servers = list() - for(var/obj/machinery/r_n_d/server/S in GLOB.machines) - if(S.server_id == text2num(href_list["access"]) || S.server_id == text2num(href_list["data"]) || S.server_id == text2num(href_list["transfer"])) - temp_server = S - break - if(href_list["access"]) - screen = 1 - for(var/obj/machinery/computer/rdconsole/C in GLOB.machines) - if(C.sync) - consoles += C - else if(href_list["data"]) - screen = 2 - else if(href_list["transfer"]) - screen = 3 - for(var/obj/machinery/r_n_d/server/S in GLOB.machines) - if(S == src) - continue - servers += S - - else if(href_list["upload_toggle"]) - var/num = text2num(href_list["upload_toggle"]) - if(num in temp_server.id_with_upload) - temp_server.id_with_upload -= num - else - temp_server.id_with_upload += num - - else if(href_list["download_toggle"]) - var/num = text2num(href_list["download_toggle"]) - if(num in temp_server.id_with_download) - temp_server.id_with_download -= num - else - temp_server.id_with_download += num - - else if(href_list["reset_tech"]) - var/choice = alert("Technology Data Reset", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", "Continue", "Cancel") - if(choice == "Continue" && usr.canUseTopic(src)) - var/datum/tech/T = temp_server.files.known_tech[href_list["reset_tech"]] - if(T) - T.level = 1 - temp_server.files.RefreshResearch() - - else if(href_list["reset_design"]) - var/choice = alert("Design Data Deletion", "Are you sure you want to delete this design? Data lost cannot be recovered.", "Continue", "Cancel") - if(choice == "Continue" && usr.canUseTopic(src)) - var/datum/design/D = temp_server.files.known_designs[href_list["reset_design"]] - if(D) - temp_server.files.known_designs -= D.id - temp_server.files.RefreshResearch() - updateUsrDialog() return @@ -250,58 +148,12 @@ if(0) //Main Menu dat += "Connected Servers:

" - for(var/obj/machinery/r_n_d/server/S in GLOB.machines) - if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin) - continue + for(var/obj/machinery/rnd/server/S in GLOB.machines) dat += "[S.name] || " - dat += "Access Rights | " - dat += "Data Management" - if(badmin) - dat += " | Server-to-Server Transfer" dat += "
" - if(1) //Access rights menu - dat += "[temp_server.name] Access Rights

" - dat += "Consoles with Upload Access
" - for(var/obj/machinery/computer/rdconsole/C in consoles) - var/turf/console_turf = get_turf(C) - dat += "* [console_turf.loc]" //FYI, these are all numeric ids, eventually. - if(C.id in temp_server.id_with_upload) - dat += " (Remove)
" - else - dat += " (Add)
" - dat += "Consoles with Download Access
" - for(var/obj/machinery/computer/rdconsole/C in consoles) - var/turf/console_turf = get_turf(C) - dat += "* [console_turf.loc]" - if(C.id in temp_server.id_with_download) - dat += " (Remove)
" - else - dat += " (Add)
" - dat += "
Main Menu" + //Mining status here - if(2) //Data Management menu - dat += "[temp_server.name] Data ManagementP

" - dat += "Known Technologies
" - for(var/v in temp_server.files.known_tech) - var/datum/tech/T = temp_server.files.known_tech[v] - if(T.level <= 0) - continue - dat += "* [T.name] " - dat += "(Reset)
" //FYI, these are all strings. - dat += "Known Designs
" - for(var/v in temp_server.files.known_designs) - var/datum/design/D = temp_server.files.known_designs[v] - dat += "* [D.name] " - dat += "(Delete)
" - dat += "
Main Menu" - - if(3) //Server Data Transfer - dat += "[temp_server.name] Server to Server Transfer

" - dat += "Send Data to what server?
" - for(var/obj/machinery/r_n_d/server/S in servers) - dat += "[S.name] (Transfer)
" - dat += "
Main Menu" user << browse("R&D Server Control
[dat]", "window=server_control;size=575x400") onclose(user, "server_control") return @@ -317,15 +169,3 @@ emagged = TRUE to_chat(user, "You you disable the security protocols.") -/obj/machinery/r_n_d/server/robotics - name = "Robotics R&D Server" - id_with_upload_string = "1;2" - id_with_download_string = "1;2" - server_id = 2 - - -/obj/machinery/r_n_d/server/core - name = "Core R&D Server" - id_with_upload_string = "1" - id_with_download_string = "1" - server_id = 1 diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index 794c975b46..af1dc853d8 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -82,39 +82,35 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi //Rating 1 + /obj/item/stock_parts/capacitor name = "capacitor" desc = "A basic capacitor used in the construction of a variety of devices." icon_state = "capacitor" - origin_tech = "powerstorage=1" materials = list(MAT_METAL=50, MAT_GLASS=50) /obj/item/stock_parts/scanning_module name = "scanning module" desc = "A compact, high resolution scanning module used in the construction of certain devices." icon_state = "scan_module" - origin_tech = "magnets=1" materials = list(MAT_METAL=50, MAT_GLASS=20) /obj/item/stock_parts/manipulator name = "micro-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "micro_mani" - origin_tech = "materials=1;programming=1" materials = list(MAT_METAL=30) /obj/item/stock_parts/micro_laser name = "micro-laser" desc = "A tiny laser used in certain devices." icon_state = "micro_laser" - origin_tech = "magnets=1" materials = list(MAT_METAL=10, MAT_GLASS=20) /obj/item/stock_parts/matter_bin name = "matter bin" desc = "A container designed to hold compressed matter awaiting reconstruction." icon_state = "matter_bin" - origin_tech = "materials=1" materials = list(MAT_METAL=80) //Rating 2 @@ -123,7 +119,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "advanced capacitor" desc = "An advanced capacitor used in the construction of a variety of devices." icon_state = "adv_capacitor" - origin_tech = "powerstorage=3" rating = 2 materials = list(MAT_METAL=50, MAT_GLASS=50) @@ -131,7 +126,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "advanced scanning module" desc = "A compact, high resolution scanning module used in the construction of certain devices." icon_state = "adv_scan_module" - origin_tech = "magnets=3" rating = 2 materials = list(MAT_METAL=50, MAT_GLASS=20) @@ -139,7 +133,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "nano-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "nano_mani" - origin_tech = "materials=3;programming=2" rating = 2 materials = list(MAT_METAL=30) @@ -147,7 +140,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "high-power micro-laser" desc = "A tiny laser used in certain devices." icon_state = "high_micro_laser" - origin_tech = "magnets=3" rating = 2 materials = list(MAT_METAL=10, MAT_GLASS=20) @@ -155,7 +147,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "advanced matter bin" desc = "A container designed to hold compressed matter awaiting reconstruction." icon_state = "advanced_matter_bin" - origin_tech = "materials=3" rating = 2 materials = list(MAT_METAL=80) @@ -165,7 +156,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "super capacitor" desc = "A super-high capacity capacitor used in the construction of a variety of devices." icon_state = "super_capacitor" - origin_tech = "powerstorage=4;engineering=4" rating = 3 materials = list(MAT_METAL=50, MAT_GLASS=50) @@ -173,7 +163,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "phasic scanning module" desc = "A compact, high resolution phasic scanning module used in the construction of certain devices." icon_state = "super_scan_module" - origin_tech = "magnets=4;engineering=4" rating = 3 materials = list(MAT_METAL=50, MAT_GLASS=20) @@ -181,7 +170,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "pico-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "pico_mani" - origin_tech = "materials=4;programming=4;engineering=4" rating = 3 materials = list(MAT_METAL=30) @@ -189,7 +177,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "ultra-high-power micro-laser" icon_state = "ultra_high_micro_laser" desc = "A tiny laser used in certain devices." - origin_tech = "magnets=4;engineering=4" rating = 3 materials = list(MAT_METAL=10, MAT_GLASS=20) @@ -197,7 +184,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "super matter bin" desc = "A container designed to hold compressed matter awaiting reconstruction." icon_state = "super_matter_bin" - origin_tech = "materials=4;engineering=4" rating = 3 materials = list(MAT_METAL=80) @@ -207,7 +193,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "quadratic capacitor" desc = "An capacity capacitor used in the construction of a variety of devices." icon_state = "quadratic_capacitor" - origin_tech = "powerstorage=5;materials=4;engineering=4" rating = 4 materials = list(MAT_METAL=50, MAT_GLASS=50) @@ -215,7 +200,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "triphasic scanning module" desc = "A compact, ultra resolution triphasic scanning module used in the construction of certain devices." icon_state = "triphasic_scan_module" - origin_tech = "magnets=5;materials=4;engineering=4" rating = 4 materials = list(MAT_METAL=50, MAT_GLASS=20) @@ -223,7 +207,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "femto-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "femto_mani" - origin_tech = "materials=6;programming=4;engineering=4" rating = 4 materials = list(MAT_METAL=30) @@ -231,7 +214,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "quad-ultra micro-laser" icon_state = "quadultra_micro_laser" desc = "A tiny laser used in certain devices." - origin_tech = "magnets=5;materials=4;engineering=4" rating = 4 materials = list(MAT_METAL=10, MAT_GLASS=20) @@ -239,7 +221,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "bluespace matter bin" desc = "A container designed to hold compressed matter awaiting reconstruction." icon_state = "bluespace_matter_bin" - origin_tech = "materials=6;programming=4;engineering=4" rating = 4 materials = list(MAT_METAL=80) @@ -249,49 +230,42 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi name = "subspace ansible" icon_state = "subspace_ansible" desc = "A compact module capable of sensing extradimensional activity." - origin_tech = "programming=2;magnets=2;materials=2;bluespace=1" materials = list(MAT_METAL=30, MAT_GLASS=10) /obj/item/stock_parts/subspace/filter name = "hyperwave filter" icon_state = "hyperwave_filter" desc = "A tiny device capable of filtering and converting super-intense radiowaves." - origin_tech = "programming=2;magnets=2" materials = list(MAT_METAL=30, MAT_GLASS=10) /obj/item/stock_parts/subspace/amplifier name = "subspace amplifier" icon_state = "subspace_amplifier" desc = "A compact micro-machine capable of amplifying weak subspace transmissions." - origin_tech = "programming=2;magnets=2;materials=2;bluespace=2" materials = list(MAT_METAL=30, MAT_GLASS=10) /obj/item/stock_parts/subspace/treatment name = "subspace treatment disk" icon_state = "treatment_disk" desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." - origin_tech = "programming=2;magnets=2;materials=2;bluespace=2" materials = list(MAT_METAL=30, MAT_GLASS=10) /obj/item/stock_parts/subspace/analyzer name = "subspace wavelength analyzer" icon_state = "wavelength_analyzer" desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - origin_tech = "programming=2;magnets=2;materials=2;bluespace=2" materials = list(MAT_METAL=30, MAT_GLASS=10) /obj/item/stock_parts/subspace/crystal name = "ansible crystal" icon_state = "ansible_crystal" desc = "A crystal made from pure glass used to transmit laser databursts to subspace." - origin_tech = "magnets=2;materials=2;bluespace=2;plasmatech=2" materials = list(MAT_GLASS=50) /obj/item/stock_parts/subspace/transmitter name = "subspace transmitter" icon_state = "subspace_transmitter" desc = "A large piece of equipment used to open a window into the subspace dimension." - origin_tech = "magnets=2;materials=2;bluespace=2" materials = list(MAT_METAL=50) /obj/item/research//Makes testing much less of a pain -Sieve @@ -299,4 +273,3 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi icon = 'icons/obj/stock_parts.dmi' icon_state = "capacitor" desc = "A debug item for research." - origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;engineering=8;plasmatech=8;abductor=8" diff --git a/code/modules/research/techweb/__techweb_helpers.dm b/code/modules/research/techweb/__techweb_helpers.dm new file mode 100644 index 0000000000..adfa5c78d0 --- /dev/null +++ b/code/modules/research/techweb/__techweb_helpers.dm @@ -0,0 +1,178 @@ + +/proc/initialize_all_techweb_nodes(clearall = FALSE) + if(islist(SSresearch.techweb_nodes) && clearall) + QDEL_LIST(SSresearch.techweb_nodes) + if(islist(SSresearch.techweb_nodes_starting && clearall)) + QDEL_LIST(SSresearch.techweb_nodes_starting) + var/list/returned = list() + for(var/path in subtypesof(/datum/techweb_node)) + var/datum/techweb_node/TN = path + if(isnull(initial(TN.id))) + continue + TN = new path + if(returned[initial(TN.id)]) + stack_trace("WARNING: Techweb node ID clash with ID [initial(TN.id)] detected!") + SSresearch.errored_datums[TN] = initial(TN.id) + continue + returned[initial(TN.id)] = TN + if(TN.starting_node) + SSresearch.techweb_nodes_starting[TN.id] = TN + SSresearch.techweb_nodes = returned + verify_techweb_nodes() //Verify all nodes have ids and such. + calculate_techweb_nodes() + calculate_techweb_boost_list() + verify_techweb_nodes() //Verify nodes and designs have been crosslinked properly. + +/proc/initialize_all_techweb_designs(clearall = FALSE) + if(islist(SSresearch.techweb_designs) && clearall) + QDEL_LIST(SSresearch.techweb_designs) + var/list/returned = list() + for(var/path in subtypesof(/datum/design)) + var/datum/design/DN = path + if(isnull(initial(DN.id))) + stack_trace("WARNING: Design with null ID detected. Build path: [initial(DN.build_path)]") + continue + else if(initial(DN.id) == DESIGN_ID_IGNORE) + continue + DN = new path + if(returned[initial(DN.id)]) + stack_trace("WARNING: Design ID clash with ID [initial(DN.id)] detected!") + SSresearch.errored_datums[DN] = initial(DN.id) + continue + returned[initial(DN.id)] = DN + SSresearch.techweb_designs = returned + verify_techweb_designs() + +/proc/count_unique_techweb_nodes() + var/static/list/L = typesof(/datum/techweb_node) + return L.len + +/proc/count_unique_techweb_designs() + var/static/list/L = typesof(/datum/design) + return L.len + +/proc/get_techweb_node_by_id(id) + if(SSresearch.techweb_nodes[id]) + return SSresearch.techweb_nodes[id] + +/proc/get_techweb_design_by_id(id) + if(SSresearch.techweb_designs[id]) + return SSresearch.techweb_designs[id] + +/proc/research_node_id_error(id) + if(SSresearch.invalid_node_ids[id]) + SSresearch.invalid_node_ids[id]++ + else + SSresearch.invalid_node_ids[id] = 1 + +/proc/design_id_error(id) + if(SSresearch.invalid_design_ids[id]) + SSresearch.invalid_design_ids[id]++ + else + SSresearch.invalid_design_ids[id] = 1 + +/proc/node_boost_error(id, message) + SSresearch.invalid_node_boost[id] = message + +/proc/verify_techweb_nodes() + for(var/n in SSresearch.techweb_nodes) + var/datum/techweb_node/N = SSresearch.techweb_nodes[n] + if(!istype(N)) + stack_trace("WARNING: Invalid research node with ID [n] detected and removed.") + SSresearch.techweb_nodes -= n + research_node_id_error(n) + for(var/p in N.prereq_ids) + var/datum/techweb_node/P = SSresearch.techweb_nodes[p] + if(!istype(P)) + stack_trace("WARNING: Invalid research prerequisite node with ID [p] detected in node [N.display_name]\[[N.id]\] removed.") + N.prereq_ids -= p + research_node_id_error(p) + for(var/d in N.design_ids) + var/datum/design/D = SSresearch.techweb_designs[d] + if(!istype(D)) + stack_trace("WARNING: Invalid research design with ID [d] detected in node [N.display_name]\[[N.id]\] removed.") + N.designs -= d + design_id_error(d) + for(var/p in N.prerequisites) + var/datum/techweb_node/P = N.prerequisites[p] + if(!istype(P)) + stack_trace("WARNING: Invalid research prerequisite node with ID [p] detected in node [N.display_name]\[[N.id]\] removed.") + N.prerequisites -= p + research_node_id_error(p) + for(var/u in N.unlocks) + var/datum/techweb_node/U = N.unlocks[u] + if(!istype(U)) + stack_trace("WARNING: Invalid research unlock node with ID [u] detected in node [N.display_name]\[[N.id]\] removed.") + N.unlocks -= u + research_node_id_error(u) + for(var/d in N.designs) + var/datum/design/D = N.designs[d] + if(!istype(D)) + stack_trace("WARNING: Invalid research design with ID [d] detected in node [N.display_name]\[[N.id]\] removed.") + N.designs -= d + design_id_error(d) + for(var/p in N.boost_item_paths) + if(!ispath(p)) + N.boost_item_paths -= p + node_boost_error(N.id, "[p] is not a valid path.") + var/num = N.boost_item_paths[p] + if(!isnum(num)) + N.boost_item_paths -= p + node_boost_error(N.id, "[num] is not a valid number.") + CHECK_TICK + +/proc/verify_techweb_designs() + for(var/d in SSresearch.techweb_designs) + var/datum/design/D = SSresearch.techweb_designs[d] + if(!istype(D)) + stack_trace("WARNING: Invalid research design with ID [d] detected and removed.") + SSresearch.techweb_designs -= d + CHECK_TICK + +/proc/calculate_techweb_nodes() + for(var/node_id in SSresearch.techweb_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] + node.prerequisites = list() + node.unlocks = list() + node.designs = list() + for(var/i in node.prereq_ids) + node.prerequisites[i] = SSresearch.techweb_nodes[i] + for(var/i in node.design_ids) + node.designs[i] = SSresearch.techweb_designs[i] + if(node.hidden) + SSresearch.techweb_nodes_hidden[node.id] = node + CHECK_TICK + generate_techweb_unlock_linking() + +/proc/generate_techweb_unlock_linking() + for(var/node_id in SSresearch.techweb_nodes) //Clear all unlock links to avoid duplication. + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] + node.unlocks = list() + for(var/node_id in SSresearch.techweb_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] + for(var/prereq_id in node.prerequisites) + var/datum/techweb_node/prereq_node = node.prerequisites[prereq_id] + prereq_node.unlocks[node.id] = node + +/proc/calculate_techweb_boost_list(clearall = FALSE) + if(clearall) + SSresearch.techweb_boost_items = list() + for(var/node_id in SSresearch.techweb_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] + for(var/path in node.boost_item_paths) + if(!ispath(path)) + continue + if(length(SSresearch.techweb_boost_items[path])) + SSresearch.techweb_boost_items[path] += list(node.id = node.boost_item_paths[path]) + else + SSresearch.techweb_boost_items[path] = list(node.id = node.boost_item_paths[path]) + CHECK_TICK + +/proc/techweb_item_boost_check(obj/item/I) //Returns an associative list of techweb node datums with values of the boost it gives. var/list/returned = list() + if(SSresearch.techweb_boost_items[I.type]) + return SSresearch.techweb_boost_items[I.type] //It should already be formatted in node datum = value. + +/proc/techweb_item_point_check(obj/item/I) + if(SSresearch.techweb_point_items[I.type]) + return SSresearch.techweb_point_items[I.type] + return 0 diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm new file mode 100644 index 0000000000..74ace7e4c2 --- /dev/null +++ b/code/modules/research/techweb/_techweb.dm @@ -0,0 +1,273 @@ + +//Used \n[\s]*origin_tech[\s]*=[\s]*"[\S]+" to delete all origin techs. +//Or \n[\s]*origin_tech[\s]*=[\s]list\([A-Z_\s=0-9,]*\) +//Used \n[\s]*req_tech[\s]*=[\s]*list\(["a-z\s=0-9,]*\) to delete all req_techs. + +//Techweb datums are meant to store unlocked research, being able to be stored on research consoles, servers, and disks. They are NOT global. +/datum/techweb + var/list/datum/techweb_node/researched_nodes = list() //Already unlocked and all designs are now available. Assoc list, id = datum + var/list/datum/techweb_node/visible_nodes = list() //Visible nodes, doesn't mean it can be researched. Assoc list, id = datum + var/list/datum/techweb_node/available_nodes = list() //Nodes that can immediately be researched, all reqs met. assoc list, id = datum + var/list/datum/design/researched_designs = list() //Designs that are available for use. Assoc list, id = datum + var/list/datum/techweb_node/boosted_nodes = list() //Already boosted nodes that can't be boosted again. node datum = path of boost object. + var/list/datum/techweb_node/hidden_nodes = list() //Hidden nodes. id = datum. Used for unhiding nodes when requirements are met by removing the entry of the node. + var/list/deconstructed_items = list() //items already deconstructed for a generic point boost + var/research_points = 0 //Available research points. + var/list/obj/machinery/computer/rdconsole/consoles_accessing = list() + var/id = "generic" + var/list/research_logs = list() //IC logs. + var/max_bomb_value = 0 + +/datum/techweb/New() + for(var/i in SSresearch.techweb_nodes_starting) + var/datum/techweb_node/DN = SSresearch.techweb_nodes_starting[i] + research_node(DN, TRUE, FALSE) + hidden_nodes = SSresearch.techweb_nodes_hidden + return ..() + +/datum/techweb/admin + research_points = INFINITY //KEKKLES. + id = "ADMIN" + +/datum/techweb/admin/New() //All unlocked. + . = ..() + for(var/i in SSresearch.techweb_nodes) + var/datum/techweb_node/TN = SSresearch.techweb_nodes[i] + research_node(TN, TRUE) + hidden_nodes = list() + +/datum/techweb/science //Global science techweb for RND consoles. + id = "SCIENCE" + +/datum/techweb/Destroy() + researched_nodes = null + researched_designs = null + available_nodes = null + visible_nodes = null + return ..() + +/datum/techweb/proc/recalculate_nodes(recalculate_designs = FALSE) + var/list/datum/techweb_node/processing = list() + for(var/i in researched_nodes) + processing[i] = researched_nodes[i] + for(var/i in visible_nodes) + processing[i] = visible_nodes[i] + for(var/i in available_nodes) + processing[i] = available_nodes[i] + for(var/i in processing) + update_node_status(processing[i]) + if(recalculate_designs) //Wipes custom added designs like from design disks or anything like that! + researched_designs = list() + for(var/i in processing) + var/datum/techweb_node/TN = processing[i] + update_node_status(TN, FALSE) + CHECK_TICK + for(var/v in consoles_accessing) + var/obj/machinery/computer/rdconsole/V = v + V.rescan_views() + V.updateUsrDialog() + +/datum/techweb/proc/copy_research_to(datum/techweb/reciever, unlock_hidden = TRUE) //Adds any missing research to theirs. + for(var/i in researched_nodes) + CHECK_TICK + reciever.research_node_id(i, TRUE, FALSE) + for(var/i in researched_designs) + CHECK_TICK + reciever.add_design_by_id(i) + if(unlock_hidden) + for(var/i in reciever.hidden_nodes) + CHECK_TICK + if(!hidden_nodes[i]) + reciever.hidden_nodes -= i //We can see it so let them see it too. + reciever.recalculate_nodes() + +/datum/techweb/proc/copy() + var/datum/techweb/returned = new() + returned.researched_nodes = researched_nodes.Copy() + returned.visible_nodes = visible_nodes.Copy() + returned.available_nodes = available_nodes.Copy() + returned.researched_designs = researched_designs.Copy() + returned.hidden_nodes = hidden_nodes.Copy() + return returned + +/datum/techweb/proc/get_visible_nodes() //The way this is set up is shit but whatever. + return visible_nodes - hidden_nodes + +/datum/techweb/proc/get_available_nodes() + return available_nodes - hidden_nodes + +/datum/techweb/proc/get_researched_nodes() + return researched_nodes - hidden_nodes + +/datum/techweb/proc/add_design_by_id(id) + return add_design(get_techweb_design_by_id(id)) + +/datum/techweb/proc/add_design(datum/design/design) + if(!istype(design)) + return FALSE + researched_designs[design.id] = design + return TRUE + +/datum/techweb/proc/remove_design_by_id(id) + return remove_design(get_techweb_design_by_id(id)) + +/datum/techweb/proc/remove_design(datum/design/design) + if(!istype(design)) + return FALSE + researched_designs -= design.id + return TRUE + +/datum/techweb/proc/research_node_id(id, force, auto_update_points) + return research_node(get_techweb_node_by_id(id), force, auto_update_points) + +/datum/techweb/proc/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE) + if(!istype(node)) + return FALSE + update_node_status(node) + if(!force) + if(!available_nodes[node.id] || (auto_adjust_cost && (research_points < node.get_price(src)))) + return FALSE + if(auto_adjust_cost) + research_points -= node.get_price(src) + researched_nodes[node.id] = node //Add to our researched list + for(var/i in node.unlocks) + visible_nodes[i] = node.unlocks[i] + update_node_status(node.unlocks[i]) + for(var/i in node.designs) + add_design(node.designs[i]) + update_node_status(node) + return TRUE + +/datum/techweb/proc/unresearch_node_id(id) + return unresearch_node(get_techweb_node_by_id(id)) + +/datum/techweb/proc/unresearch_node(datum/techweb_node/node) + if(!istype(node)) + return FALSE + researched_nodes -= node.id + recalculate_nodes(TRUE) //Fully rebuild the tree. + +/datum/techweb/proc/boost_with_path(datum/techweb_node/N, itempath) + if(!istype(N)||!ispath(itempath)) + return FALSE + var/boost = N.boost_item_paths[itempath] + if(!boosted_nodes[N]) + boosted_nodes[N] = boost + if(N.autounlock_by_boost) + hidden_nodes -= N.id + return TRUE + +/datum/techweb/proc/update_node_status(datum/techweb_node/node, autoupdate_consoles = TRUE) + var/researched = FALSE + var/available = FALSE + var/visible = FALSE + if(researched_nodes[node.id]) + researched = TRUE + var/needed = node.prereq_ids.len + for(var/i in node.prereq_ids) + if(researched_nodes[i]) + visible = TRUE + needed-- + if(!needed) + available = TRUE + researched_nodes -= node.id + available_nodes -= node.id + visible_nodes -= node.id + if(hidden_nodes[node.id]) //Hidden. + return + if(researched) + researched_nodes[node.id] = node + for(var/i in node.designs) + add_design(node.designs[i]) + else + if(available) + available_nodes[node.id] = node + else + if(visible) + visible_nodes[node.id] = node + if(autoupdate_consoles) + for(var/v in consoles_accessing) + var/obj/machinery/computer/rdconsole/V = v + V.rescan_views() + V.updateUsrDialog() + +//Laggy procs to do specific checks, just in case. Don't use them if you can just use the vars that already store all this! +/datum/techweb/proc/designHasReqs(datum/design/D) + for(var/i in researched_nodes) + var/datum/techweb_node/N = researched_nodes[i] + for(var/I in N.designs) + if(D == N.designs[I]) + return TRUE + return FALSE + +/datum/techweb/proc/isDesignResearched(datum/design/D) + return isDesignResearchedID(D.id) + +/datum/techweb/proc/isDesignResearchedID(id) + return researched_designs[id] + +/datum/techweb/proc/isNodeResearched(datum/techweb_node/N) + return isNodeResearchedID(N.id) + +/datum/techweb/proc/isNodeResearchedID(id) + return researched_nodes[id] + +/datum/techweb/proc/isNodeVisible(datum/techweb_node/N) + return isNodeResearchedID(N.id) + +/datum/techweb/proc/isNodeVisibleID(id) + return visible_nodes[id] + +/datum/techweb/proc/isNodeAvailable(datum/techweb_node/N) + return isNodeAvailableID(N.id) + +/datum/techweb/proc/isNodeAvailableID(id) + return available_nodes[id] + +/datum/techweb/specialized + var/allowed_buildtypes = ALL + +/datum/techweb/specialized/add_design(datum/design/D) + if(!(D.build_type & allowed_buildtypes)) + return FALSE + return ..() + +/datum/techweb/specialized/autounlocking + var/design_autounlock_buildtypes = NONE + var/design_autounlock_categories = list("initial") //if a design has a buildtype that matches the abovea and either has a category in this or this is null, unlock it. + var/node_autounlock_ids = list() //autounlock nodes of this type. + +/datum/techweb/specialized/autounlocking/New() + ..() + autounlock() + +/datum/techweb/specialized/autounlocking/proc/autounlock() + for(var/id in node_autounlock_ids) + research_node_id(id, TRUE, FALSE) + for(var/id in SSresearch.techweb_designs) + var/datum/design/D = SSresearch.techweb_designs[id] + if(D.build_type & design_autounlock_buildtypes) + for(var/i in D.category) + if(i in design_autounlock_categories) + add_design(D) + break + +/datum/techweb/specialized/autounlocking/autolathe + design_autounlock_buildtypes = AUTOLATHE + allowed_buildtypes = AUTOLATHE + +/datum/techweb/specialized/autounlocking/limbgrower + design_autounlock_buildtypes = LIMBGROWER + allowed_buildtypes = LIMBGROWER + +/datum/techweb/specialized/autounlocking/biogenerator + design_autounlock_buildtypes = BIOGENERATOR + allowed_buildtypes = BIOGENERATOR + +/datum/techweb/specialized/autounlocking/smelter + design_autounlock_buildtypes = SMELTER + allowed_buildtypes = SMELTER + +/datum/techweb/specialized/autounlocking/exofab + node_autounlock_ids = list("robotics", "mmi", "cyborg", "mecha_odysseus", "mech_gygax", "mech_durand", "mecha_phazon", "mecha", "mech_tools", "clown") + allowed_buildtypes = MECHFAB diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm new file mode 100644 index 0000000000..75faf07bf1 --- /dev/null +++ b/code/modules/research/techweb/_techweb_node.dm @@ -0,0 +1,30 @@ + +//Techweb nodes are GLOBAL, there should only be one instance of them in the game. Persistant changes should never be made to them in-game. + +/datum/techweb_node + var/id + var/display_name = "Errored Node" + var/description = "Why are you seeing this?" + var/hidden = FALSE //Whether it starts off hidden. + var/starting_node = FALSE //Whether it's available without any research. + var/list/prereq_ids = list() + var/list/design_ids = list() + var/list/datum/techweb_node/prerequisites = list() //Assoc list id = datum + var/list/datum/techweb_node/unlocks = list() //CALCULATED FROM OTHER NODE'S PREREQUISITES. Assoc list id = datum. + var/list/datum/design/designs = list() //Assoc list id = datum + var/list/boost_item_paths = list() //Associative list, path = point_value. + var/autounlock_by_boost = TRUE //boosting this will autounlock this node. + var/export_price = 0 //Cargo export price. + var/research_cost = 0 //Point cost to research. + var/actual_cost = 0 + var/category = "Misc" //Category + +/datum/techweb_node/New() + actual_cost = research_cost + +/datum/techweb_node/proc/get_price(datum/techweb/host) + if(!host) + return actual_cost + var/discount = boost_item_paths[host.boosted_nodes[src]] + actual_cost = research_cost - discount + return actual_cost diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm new file mode 100644 index 0000000000..21788d65a5 --- /dev/null +++ b/code/modules/research/techweb/all_nodes.dm @@ -0,0 +1,860 @@ + +//Current rate: 132500 research points in 90 minutes +//Current cargo price: 250000 points for fullmaxed R&D. + +//Base Node +/datum/techweb_node/base + id = "base" + starting_node = TRUE + display_name = "Basic Research Technology" + description = "NT default research technologies." + design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani", + "destructive_analyzer", "protolathe", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", + "space_heater") //Default research tech, prevents bricking + +/////////////////////////Biotech///////////////////////// +/datum/techweb_node/biotech + id = "biotech" + display_name = "Biological Technology" + description = "What makes us tick." //the MC, silly! + prereq_ids = list("base") + design_ids = list("mass_spectrometer", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "pandemic") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_biotech + id = "adv_biotech" + display_name = "Advanced Biotechnology" + description = "Advanced Biotechnology" + prereq_ids = list("biotech") + design_ids = list("piercesyringe", "adv_mass_spectrometer", "plasmarefiller", "limbgrower") + research_cost = 2500 + export_price = 10000 + +/////////////////////////data theory tech///////////////////////// +/datum/techweb_node/datatheory //Computer science + id = "datatheory" + display_name = "Data Theory" + description = "Big Data, in space!" + prereq_ids = list("base") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_datatheory + id = "adv_datatheory" + display_name = "Advanced Data Theory" + description = "Better insight into programming and data." + prereq_ids = list("datatheory") + design_ids = list("icprinter", "icupgadv", "icupgclo") + research_cost = 2500 + export_price = 10000 + +/////////////////////////engineering tech///////////////////////// +/datum/techweb_node/engineering + id = "engineering" + description = "Modern Engineering Technology." + display_name = "Industrial Engineering" + prereq_ids = list("base") + design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin", + "atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "weldingmask", "mesons", "thermomachine", "tesla_coil", "grounding_rod", "apc_control") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_engi + id = "adv_engi" + description = "Advanced Engineering research" + display_name = "Advanced Engineering" + prereq_ids = list("engineering", "emp_basic") + design_ids = list("engine_goggles", "diagnostic_hud", "magboots") + research_cost = 2500 + export_price = 10000 + +/////////////////////////Bluespace tech///////////////////////// +/datum/techweb_node/bluespace_basic //Bluespace-memery + id = "bluespace_basic" + display_name = "Basic Bluespace Theory" + description = "Basic studies into the mysterious alternate dimension known as bluespace." + prereq_ids = list("base") + design_ids = list("beacon", "xenobioconsole") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_bluespace + id = "adv_bluespace" + display_name = "Advanced Bluespace Research" + description = "Deeper understanding of how the Bluespace dimension works" + prereq_ids = list("practical_bluespace", "high_efficiency") + design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "tele_station", "tele_hub", "quantumpad", "launchpad", "launchpad_console", + "teleconsole", "bag_holding", "bluespace_crystal", "wormholeprojector") + research_cost = 2500 + export_price = 10000 + +/////////////////////////plasma tech///////////////////////// +/datum/techweb_node/basic_plasma + id = "basic_plasma" + display_name = "Basic Plasma Research" + description = "Research into the mysterious and dangerous substance, plasma." + prereq_ids = list("engineering") + design_ids = list("mech_generator") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_plasma + id = "adv_plasma" + display_name = "Advanced Plasma Research" + description = "Research on how to fully exploit the power of plasma." + prereq_ids = list("basic_plasma") + design_ids = list("mech_plasma_cutter") + research_cost = 2500 + export_price = 10000 + +/////////////////////////robotics tech///////////////////////// +/datum/techweb_node/robotics + id = "robotics" + display_name = "Basic Robotics Research" + description = "Programmable machines that make our lives lazier." + prereq_ids = list("base") + design_ids = list("paicard", "drone_shell") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_robotics + id = "adv_robotics" + display_name = "Advanced Robotics Research" + description = "It can even do the dishes!" + prereq_ids = list("robotics") + design_ids = list("borg_upgrade_diamonddrill") + research_cost = 2500 + export_price = 10000 + +/////////////////////////EMP tech///////////////////////// +/datum/techweb_node/emp_basic //EMP tech for some reason + id = "emp_basic" + display_name = "Electromagnetic Theory" + description = "Study into usage of frequencies in the electromagnetic spectrum." + prereq_ids = list("base") + design_ids = list("holosign", "inducer", "tray_goggles", "holopad") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/emp_adv + id = "emp_adv" + display_name = "Advanced Electromagnetic Theory" + prereq_ids = list("emp_basic") + design_ids = list("ultra_micro_laser") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/emp_super + id = "emp_super" + display_name = "Quantum Electromagnetic Technology" //bs + description = "Even better electromagnetic technology" + prereq_ids = list("emp_adv") + design_ids = list("quadultra_micro_laser") + research_cost = 2500 + export_price = 10000 + +/////////////////////////Clown tech///////////////////////// +/datum/techweb_node/clown + id = "clown" + display_name = "Clown Technology" + description = "Honk?!" + prereq_ids = list("base") + design_ids = list("air_horn", "honker_main", "honker_peri", "honker_targ", "honk_chassis", "honk_head", "honk_torso", "honk_left_arm", "honk_right_arm", + "honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone") + research_cost = 2500 + export_price = 10000 + +////////////////////////Computer tech//////////////////////// +/datum/techweb_node/comptech + id = "comptech" + display_name = "Computer Consoles" + description = "Computers and how they work." + prereq_ids = list("datatheory") + design_ids = list("cargo", "cargorequest", "stockexchange", "libraryconsole", "aifixer", "mining", "crewconsole", "comconsole", "idcardconsole", "operating", "seccamera") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/computer_hardware_basic //Modular computers are shitty and nearly useless so until someone makes them actually useful this can be easy to get. + id = "computer_hardware_basic" + display_name = "Computer Hardware" + description = "How computer hardware are made." + prereq_ids = list("comptech") + research_cost = 2500 + export_price = 10000 + design_ids = list("hdd_basic", "hdd_advanced", "hdd_super", "hdd_cluster", "ssd_small", "ssd_micro", "netcard_basic", "netcard_advanced", "netcard_wired", + "portadrive_basic", "portadrive_advanced", "portadrive_super", "cardslot", "aislot", "miniprinter", "APClink", "bat_control", "bat_normal", "bat_advanced", + "bat_super", "bat_micro", "bat_nano", "cpu_normal", "pcpu_normal", "cpu_small", "pcpu_small") + +/datum/techweb_node/computer_board_gaming + id = "computer_board_gaming" + display_name = "Arcade Games" + description = "For the slackers on the station." + prereq_ids = list("comptech") + design_ids = list("arcade_battle", "arcade_orion", "slotmachine") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/comp_recordkeeping + id = "comp_recordkeeping" + display_name = "Computerized Recordkeeping" + description = "Organized record databases and how they're used." + prereq_ids = list("comptech") + design_ids = list("secdata", "med_data", "prisonmanage", "vendor", "automated_announcement") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/telecomms + id = "telecomms" + display_name = "Telecommunications Technology" + description = "Subspace transmission technology for near-instant communications devices." + prereq_ids = list("comptech", "bluespace_basic") + research_cost = 2500 + export_price = 10000 + design_ids = list("s-receiver", "s-bus", "s-broadcaster", "s-processor", "s-hub", "s-server", "s-relay", "comm_monitor", "comm_server", + "s-ansible", "s-filter", "s-amplifier", "ntnet_relay", "s-treatment", "s-analyzer", "s-crystal", "s-transmitter") + +/datum/techweb_node/integrated_HUDs + id = "integrated_HUDs" + display_name = "Integrated HUDs" + description = "The usefulness of computerized records, projected straight onto your eyepiece!" + prereq_ids = list("comp_recordkeeping", "emp_basic") + design_ids = list("health_hud", "security_hud", "diagnostic_hud", "scigoggles") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/NVGtech + id = "NVGtech" + display_name = "Night Vision Technology" + description = "Allows seeing in the dark without actual light!" + prereq_ids = list("integrated_HUDs", "adv_engi", "emp_adv") + design_ids = list("health_hud_night", "security_hud_night", "diagnostic_hud_night", "night_visision_goggles", "nvgmesons") + research_cost = 2500 + export_price = 10000 + +////////////////////////AI & Cyborg tech//////////////////////// +/datum/techweb_node/neural_programming + id = "neural_programming" + display_name = "Neural Programming" + description = "Study into networks of processing units that mimic our brains." + prereq_ids = list("biotech", "datatheory") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mmi + id = "mmi" + display_name = "Man Machine Interface" + description = "A slightly Frankensteinian device that allows human brains to interface natively with software APIs." + prereq_ids = list("biotech", "neural_programming") + design_ids = list("mmi") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/posibrain + id = "posibrain" + display_name = "Positronic Brain" + description = "Applied usage of neural technology allowing for autonomous AI units based on special metallic cubes with conductive and processing circuits." + prereq_ids = list("mmi", "neural_programming") + design_ids = list("mmi_posi") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/cyborg + id = "cyborg" + display_name = "Cyborg Construction" + description = "Sapient robots with preloaded tool modules and programmable laws." + prereq_ids = list("mmi", "robotics") + research_cost = 2500 + export_price = 10000 + design_ids = list("robocontrol", "sflash", "borg_suit", "borg_head", "borg_chest", "borg_r_arm", "borg_l_arm", "borg_r_leg", "borg_l_leg", "borgupload", + "cyborgrecharger", "borg_upgrade_restart", "borg_upgrade_rename") + +/datum/techweb_node/cyborg_upg_util + id = "cyborg_upg_util" + display_name = "Cyborg Upgrades: Utility" + description = "Utility upgrades for cybogs." + prereq_ids = list("engineering", "cyborg") + design_ids = list("borg_upgrade_holding", "borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/cyborg_upg_med + id = "cyborg_upg_med" + display_name = "Cyborg Upgrades: Medical" + description = "Medical upgrades for cyborgs" + prereq_ids = list("adv_biotech", "cyborg") + design_ids = list("borg_upgrade_defibrillator", "borg_upgrade_piercinghypospray", "borg_upgrade_highstrengthsynthesiser", "borg_upgrade_expandedsynthesiser") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/cyborg_upg_combat + id = "cyborg_upg_combat" + display_name = "Cyborg Upgrades: Combat" + description = "Military grade upgrades for cyborgs." + prereq_ids = list("adv_robotics", "adv_engi") + design_ids = list("borg_upgrade_vtec", "borg_upgrade_disablercooler") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/ai + id = "ai" + display_name = "Artificial Intelligence" + description = "AI unit research." + prereq_ids = list("robotics", "neural_programming") + design_ids = list("aicore", "safeguard_module", "onehuman_module", "protectstation_module", "quarantine_module", "oxygen_module", "freeform_module", + "reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "paladin_module", "tyrant_module", "corporate_module", + "default_module", "borg_ai_control", "mecha_tracking_ai_control", "aiupload", "intellicard") + research_cost = 2500 + export_price = 10000 + +////////////////////////Medical//////////////////////// +/datum/techweb_node/cloning + id = "cloning" + display_name = "Genetic Engineering" + description = "We have the technology to make him." + prereq_ids = list("biotech") + design_ids = list("clonecontrol", "clonepod", "clonescanner", "scan_console") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/cryotech + id = "cryotech" + display_name = "Cryostasis Technology" + description = "Smart freezing of objects to preserve them!" + prereq_ids = list("adv_engi", "emp_basic", "biotech") + design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/subdermal_implants + id = "subdermal_implants" + display_name = "Subdermal Implants" + description = "Electronic implants buried beneath the skin." + prereq_ids = list("biotech") + design_ids = list("implanter", "implantcase", "implant_chem", "implant_tracking") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/cyber_organs + id = "cyber_organs" + display_name = "Cybernetic Organs" + description = "We have the technology to rebuild him." + prereq_ids = list("adv_biotech", "cyborg") + design_ids = list("cybernetic_heart", "cybernetic_liver", "cybernetic_liver_u") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/cyber_implants + id = "cyber_implants" + display_name = "Cybernetic Implants" + description = "Electronic implants that improve humans." + prereq_ids = list("adv_biotech", "cyborg", "adv_datatheory") + design_ids = list("ci-nutriment", "ci-nutrimentplus", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_cyber_implants + id = "adv_cyber_implants" + display_name = "Advanced Cybernetic Implants" + description = "Upgraded and more powerful cybernetic implants." + prereq_ids = list("neural_programming", "cyber_implants") + design_ids = list("ci-toolset", "ci-surgery", "ci-reviver") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/combat_cyber_implants + id = "combat_cyber_implants" + display_name = "Combat Cybernetic Implants" + description = "Military grade combat implants to improve performance." + prereq_ids = list("adv_cyber_implants") //Needs way more reqs. + design_ids = list("ci-xray", "ci-thermals", "ci-antidrop", "ci-antistun", "ci-thrusters") + research_cost = 2500 + export_price = 10000 + +////////////////////////generic biotech//////////////////////// +/datum/techweb_node/bio_process + id = "bio_process" + display_name = "Biological Processing" + description = "From slimes to kitchens." + prereq_ids = list("biotech") + design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave") + research_cost = 2500 + export_price = 10000 + +////////////////////////generic engineering//////////////////////// +/datum/techweb_node/high_efficiency + id = "high_efficiency" + display_name = "High Efficiency Parts" + description = "High Efficiency Parts" + prereq_ids = list("engineering", "datatheory") + design_ids = list("pico_mani", "super_matter_bin") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_power + id = "adv_power" + display_name = "Advanced Power Manipulation" + description = "How to get more zap." + prereq_ids = list("engineering") + design_ids = list("smes", "super_cell", "hyper_cell", "super_capacitor", "superpacman", "mrspacman", "power_turbine", "power_turbine_console", "power_compressor") + research_cost = 2500 + export_price = 10000 + +////////////////////////Tools//////////////////////// +/datum/techweb_node/basic_mining + id = "basic_mining" + display_name = "Mining Technology" + description = "Better than Efficiency V." + prereq_ids = list("engineering") + design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_mining + id = "adv_mining" + display_name = "Advanced Mining Technology" + description = "Efficiency Level 127" //dumb mc references + prereq_ids = list("basic_mining", "adv_engi", "adv_power", "adv_plasma") + design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter", "plasmacutter_adv") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/practical_bluespace + id = "practical_bluespace" + display_name = "Applied Bluespace Research" + description = "Using bluespace to make things faster and better." + prereq_ids = list("bluespace_basic", "engineering") + design_ids = list("bs_rped","minerbag_holding", "telesci_gps", "bluespacebeaker", "bluespacesyringe", "bluespacebodybag", "phasic_scanning") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/janitor + id = "janitor" + display_name = "Advanced Sanitation Technology" + description = "Clean things better, faster, stronger, and harder!" + prereq_ids = list("adv_engi") + design_ids = list("advmop", "buffer", "blutrash", "light_replacer") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/botany + id = "botany" + display_name = "Botanical Engineering" + description = "Botanical tools" + prereq_ids = list("adv_engi", "biotech") + design_ids = list("diskplantgene", "portaseeder", "plantgenes", "flora_gun", "hydro_tray", "biogenerator", "seed_extractor") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/exp_tools + id = "exp_tools" + display_name = "Experimental Tools" + description = "Highly advanced construction tools." + design_ids = list("exwelder", "jawsoflife", "handdrill") + prereq_ids = list("adv_engi") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/exp_equipment + id = "exp_equipment" + display_name = "Experimental Flight Equipment" + description = "Highly advanced construction tools." + design_ids = list("flightshoes", "flightpack", "flightsuit") + prereq_ids = list("adv_engi") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/bluespace_power + id = "bluespace_power" + display_name = "Bluespace Power Technology" + description = "Even more powerful.. power!" + prereq_ids = list("adv_power", "adv_bluespace") + design_ids = list("bluespace_cell", "quadratic_capacitor") + research_cost = 2500 + export_price = 10000 + +/////////////////////////weaponry tech///////////////////////// +/datum/techweb_node/weaponry + id = "weaponry" + display_name = "Weapon Development Technology" + description = "Our researchers have found new to weaponize just about everything now." + prereq_ids = list("engineering") + design_ids = list("pin_testing") + research_cost = 10000 + export_price = 10000 + +/datum/techweb_node/adv_weaponry + id = "adv_weaponry" + display_name = "Advanced Weapon Development Technology" + description = "Our weapons are breaking the rules of reality by now." + prereq_ids = list("adv_engi", "weaponry") + design_ids = list("pin_loyalty") + research_cost = 10000 + export_price = 10000 + +/datum/techweb_node/electric_weapons + id = "electronic_weapons" + display_name = "Electric Weapons" + description = "Weapons using electric technology" + prereq_ids = list("weaponry", "adv_power") + design_ids = list("stunrevolver", "stunshell", "tele_shield") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/radioactive_weapons + id = "radioactive_weapons" + display_name = "Radioactive Weaponry" + description = "Weapons using radioactive technology." + prereq_ids = list("adv_engi", "adv_weaponry") + design_ids = list("nuclear_gun", "decloner") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/medical_weapons + id = "medical_weapons" + display_name = "Medical Weaponry" + description = "Weapons using medical technology." + prereq_ids = list("adv_biotech", "adv_weaponry") + design_ids = list("rapidsyringe") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/beam_weapons + id = "beam_weapons" + display_name = "Beam Weaponry" + description = "Various basic beam weapons" + prereq_ids = list("adv_weaponry") + design_ids = list("beamrifle", "ioncarbine") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_beam_weapons + id = "adv_beam_weapons" + display_name = "Advanced Beam Weaponry" + description = "Various advanced beam weapons" + prereq_ids = list("beam_weapons") + design_ids = list("xray_laser") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/explosive_weapons + id = "explosive_weapons" + display_name = "Explosive & Pyrotechnical Weaponry" + description = "If the light stuff just won't do it." + prereq_ids = list("adv_weaponry") + design_ids = list("temp_gun", "large_Grenade", "pyro_Grenade", "adv_Grenade") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/ballistic_weapons + id = "ballistic_weapons" + display_name = "Ballistic Weaponry" + description = "This isn't research.. This is reverse-engineering!" + prereq_ids = list("weaponry") + design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/tech_shell + id = "tech_shell" + display_name = "Technological Shells" + description = "They're more technological than regular shot." + prereq_ids = list("adv_weaponry") + design_ids = list("techshotshell") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/gravity_gun + id = "gravity_gun" + display_name = "One-point Bluespace-gravitational Manipulator" + description = "Fancy wording for gravity gun" + prereq_ids = list("adv_weaponry", "adv_bluespace") + design_ids = list("gravitygun") + research_cost = 2500 + export_price = 10000 + +////////////////////////mech technology//////////////////////// +/datum/techweb_node/mech + id = "mecha" + display_name = "Mechanical Exosuits" + description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human." + prereq_ids = list("robotics", "adv_engi") + design_ids = list("mecha_tracking", "mechacontrol", "mechapower", "mech_recharger", "ripley_chassis", "firefighter_chassis", "ripley_torso", "ripley_left_arm", "ripley_right_arm", "ripley_left_leg", "ripley_right_leg", + "ripley_main", "ripley_peri", "mech_hydraulic_clamp") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_mecha + id = "adv_mecha" + display_name = "Mechanical Exosuits" + description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human." + prereq_ids = list("adv_robotics", "mecha") + design_ids = list("mech_repair_droid") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/odysseus + id = "mecha_odysseus" + display_name = "EXOSUIT: Odysseus" + description = "Odysseus exosuit designs" + prereq_ids = list("mecha") + design_ids = list("odysseus_chassis", "odysseus_torso", "odysseus_head", "odysseus_left_arm", "odysseus_right_arm" ,"odysseus_left_leg", "odysseus_right_leg", + "odysseus_main", "odysseus_peri") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/gygax + id = "mech_gygax" + display_name = "EXOSUIT: Gygax" + description = "Gygax exosuit designs" + prereq_ids = list("adv_mecha", "weaponry") + design_ids = list("gygax_chassis", "gygax_torso", "gygax_head", "gygax_left_arm", "gygax_right_arm", "gygax_left_leg", "gygax_right_leg", "gygax_main", + "gygax_peri", "gygax_targ", "gygax_armor") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/durand + id = "mech_durand" + display_name = "EXOSUIT: Durand" + description = "Durand exosuit designs" + prereq_ids = list("adv_mecha", "adv_weaponry") + design_ids = list("durand_chassis", "durand_torso", "durand_head", "durand_left_arm", "durand_right_arm", "durand_left_leg", "durand_right_leg", "durand_main", + "durand_peri", "durand_targ", "durand_armor") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/phazon + id = "mecha_phazon" + display_name = "EXOSUIT: Phazon" + description = "Phazon exosuit designs" + prereq_ids = list("adv_mecha", "weaponry") + design_ids = list("phazon_chassis", "phazon_torso", "phazon_head", "phazon_left_arm", "phazon_right_arm", "phazon_left_leg", "phazon_right_leg", "phazon_main", + "phazon_peri", "phazon_targ", "phazon_armor") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_tools + id = "mech_tools" + display_name = "Basic Exosuit Equipment" + description = "Various tools fit for basic mech units" + prereq_ids = list("mecha", "engineering") + design_ids = list("mech_drill", "mech_mscanner", "mech_extinguisher", "mech_cable_layer") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_mecha_tools + id = "adv_mecha_tools" + display_name = "Advanced Exosuit Equipment" + description = "Tools for high level mech suits" + prereq_ids = list("adv_mecha", "mech_tools", "adv_engi") + design_ids = list("mech_rcd") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/med_mech_tools + id = "med_mech_tools" + display_name = "Medical Exosuit Equipment" + description = "Tools for high level mech suits" + prereq_ids = list("mecha", "adv_biotech", "mech_tools") + design_ids = list("mech_sleeper", "mech_syringe_gun", "mech_medi_beam") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_modules + id = "adv_mecha_modules" + display_name = "Basic Exosuit Modules" + description = "An advanced piece of mech weaponry" + prereq_ids = list("adv_mecha", "adv_power") + design_ids = list("mech_energy_relay", "mech_ccw_armor", "mech_proj_armor", "mech_generator_nuclear") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_scattershot + id = "mecha_tools" + display_name = "Exosuit Weapon (LBX AC 10 \"Scattershot\")" + description = "An advanced piece of mech weaponry" + prereq_ids = list("mecha", "adv_weaponry", "ballistic_weapons") + design_ids = list("mech_scattershot") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_carbine + id = "mech_carbine" + display_name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("mecha", "adv_weaponry", "ballistic_weapons") + design_ids = list("mech_carbine") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_ion + id = "mmech_ion" + display_name = "Exosuit Weapon (MKIV Ion Heavy Cannon)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("mecha", "adv_weaponry", "emp_adv") + design_ids = list("mech_ion") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_tesla + id = "mech_tesla" + display_name = "Exosuit Weapon (MKI Tesla Cannon)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("mecha", "weaponry", "adv_power") + design_ids = list("mech_tesla") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_laser + id = "mech_laser" + display_name = "Exosuit Weapon (CH-PS \"Immolator\" Laser)" + description = "A basic piece of mech weaponry" + prereq_ids = list("mecha", "beam_weapons") + design_ids = list("mech_laser") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_laser_heavy + id = "mech_laser_heavy" + display_name = "Exosuit Weapon (CH-LC \"Solaris\" Laser Cannon)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("mecha", "adv_weaponry", "adv_beam_weapons") + design_ids = list("mech_laser_heavy") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_grenade_launcher + id = "mech_grenade_launcher" + display_name = "Exosuit Weapon (SGL-6 Grenade Launcher)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("mecha", "explosive_weapons") + design_ids = list("mech_grenade_launcher") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_missile_rack + id = "mech_missile_rack" + display_name = "Exosuit Weapon (SRM-8 Missile Rack)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("mecha", "explosive_weapons") + design_ids = list("mech_missile_rack") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/clusterbang_launcher + id = "clusterbang_launcher" + display_name = "Exosuit Module (SOB-3 Clusterbang Launcher)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("mecha", "weaponry") + design_ids = list("clusterbang_launcher") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_teleporter + id = "mech_teleporter" + display_name = "Exosuit Module (Teleporter Module)" + description = "An advanced piece of mech Equipment" + prereq_ids = list("mecha", "mech_tools", "adv_bluespace") + design_ids = list("mech_teleporter") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_wormhole_gen + id = "mech_wormhole_gen" + display_name = "Exosuit Module (Localized Wormhole Generator)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("mecha", "mech_tools", "adv_bluespace") + design_ids = list("mech_wormhole_gen") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_taser + id = "mech_taser" + display_name = "Exosuit Weapon (PBT \"Pacifier\" Mounted Taser)" + description = "A basic piece of mech weaponry" + prereq_ids = list("mecha", "adv_weaponry") + design_ids = list("mech_taser") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_lmg + id = "mech_lmg" + display_name = "Exosuit Weapon (PBT \"Pacifier\" Mounted Taser)" + description = "An advanced piece of mech weaponry" + prereq_ids = list("adv_mecha", "adv_weaponry", "ballistic_weapons") + design_ids = list("mech_lmg") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/mech_diamond_drill + id = "mech_diamond_drill" + display_name = "Exosuit Diamond Drill" + description = "A diamond drill fit for a large exosuit" + prereq_ids = list("mecha", "adv_mining") + design_ids = list("mech_diamond_drill") + research_cost = 2500 + export_price = 10000 + +////////////////////////Alien technology//////////////////////// +/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech + id = "alientech" + display_name = "Alien Technology" + description = "Things used by the greys." + prereq_ids = list("base") + boost_item_paths = list(/obj/item/gun/energy/alien = 0, /obj/item/scalpel/alien = 0, /obj/item/hemostat/alien = 0, /obj/item/retractor/alien = 0, /obj/item/circular_saw/alien = 0, + /obj/item/cautery/alien = 0, /obj/item/surgicaldrill/alien = 0, /obj/item/screwdriver/abductor = 0, /obj/item/wrench/abductor = 0, /obj/item/crowbar/abductor = 0, /obj/item/device/multitool/abductor = 0, + /obj/item/weldingtool/abductor = 0, /obj/item/wirecutters/abductor = 0, /obj/item/circuitboard/machine/abductor = 0, /obj/item/abductor_baton = 0, /obj/item/device/abductor = 0) + research_cost = 2500 + export_price = 10000 + hidden = TRUE + design_ids = list("alienalloy") + +/datum/techweb_node/alien_bio + id = "alien_bio" + display_name = "Alien Biological Tools" + description = "Advanced biological tools." + prereq_ids = list("alientech", "biotech") + design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery") + boost_item_paths = list(/obj/item/gun/energy/alien = 0, /obj/item/scalpel/alien = 0, /obj/item/hemostat/alien = 0, /obj/item/retractor/alien = 0, /obj/item/circular_saw/alien = 0, + /obj/item/cautery/alien = 0, /obj/item/surgicaldrill/alien = 0, /obj/item/screwdriver/abductor = 0, /obj/item/wrench/abductor = 0, /obj/item/crowbar/abductor = 0, /obj/item/device/multitool/abductor = 0, + /obj/item/weldingtool/abductor = 0, /obj/item/wirecutters/abductor = 0, /obj/item/circuitboard/machine/abductor = 0, /obj/item/abductor_baton = 0, /obj/item/device/abductor = 0) + research_cost = 2500 + export_price = 10000 + hidden = TRUE + +/datum/techweb_node/alien_engi + id = "alien_engi" + display_name = "Alien Engineering" + description = "Alien engineering tools" + prereq_ids = list("alientech", "adv_engi") + boost_item_paths = list(/obj/item/screwdriver/abductor = 0, /obj/item/wrench/abductor = 0, /obj/item/crowbar/abductor = 0, /obj/item/device/multitool/abductor = 0, + /obj/item/weldingtool/abductor = 0, /obj/item/wirecutters/abductor = 0, /obj/item/circuitboard/machine/abductor = 0, /obj/item/abductor_baton = 0, /obj/item/device/abductor = 0) + design_ids = list("alien_wrench", "alien_wirecutters", "alien_screwdriver", "alien_crowbar", "alien_welder", "alien_multitool") + research_cost = 2500 + export_price = 10000 + hidden = TRUE + +/proc/total_techweb_points() + var/list/datum/techweb_node/processing = list() + for(var/i in subtypesof(/datum/techweb_node)) + processing += new i + . = 0 + for(var/i in processing) + var/datum/techweb_node/TN = i + . += TN.research_cost + +/* +/datum/design/borg_syndicate_module + name = "Cyborg Upgrade (Illegal Modules)" + id = "borg_syndicate_module" + construction_time = 120 + +/datum/design/suppressor + name = "Universal Suppressor" + id = "suppressor" + +/datum/design/largecrossbow + name = "Energy Crossbow" + id = "largecrossbow" + build_path = /obj/item/gun/energy/kinetic_accelerator/crossbow/large +*/ \ No newline at end of file diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index b809401ed1..cf250f50f1 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -11,7 +11,6 @@ throwforce = 0 throw_speed = 3 throw_range = 6 - origin_tech = "biotech=3" container_type = INJECTABLE_1 var/Uses = 1 // uses before it goes inert var/qdel_timer = null // deletion timer, for delayed reactions @@ -124,7 +123,6 @@ name = "slime potion" desc = "A hard yet gelatinous capsule excreted by a slime, containing mysterious substances." w_class = WEIGHT_CLASS_TINY - origin_tech = "biotech=4" /obj/item/slimepotion/afterattack(obj/item/reagent_containers/target, mob/user , proximity) if (istype(target)) @@ -162,7 +160,6 @@ desc = "A miraculous chemical mix that grants human like intelligence to living beings." icon = 'icons/obj/chemical.dmi' icon_state = "potpink" - origin_tech = "biotech=6" var/list/not_interested = list() var/being_used = 0 var/sentience_type = SENTIENCE_ORGANIC @@ -208,7 +205,6 @@ desc = "A strange slime-based chemical that, when used, allows the user to transfer their consciousness to a lesser being." icon = 'icons/obj/chemical.dmi' icon_state = "potorange" - origin_tech = "biotech=6" var/prompted = 0 var/animal_type = SENTIENCE_ORGANIC @@ -327,7 +323,6 @@ desc = "A potent chemical mix that will remove the slowdown from any item." icon = 'icons/obj/chemical.dmi' icon_state = "potyellow" - origin_tech = "biotech=5" /obj/item/slimepotion/speed/afterattack(obj/C, mob/user) ..() @@ -360,7 +355,6 @@ desc = "A potent chemical mix that will fireproof any article of clothing. Has three uses." icon = 'icons/obj/chemical.dmi' icon_state = "potblue" - origin_tech = "biotech=5" var/uses = 3 /obj/item/slimepotion/fireproof/afterattack(obj/item/clothing/C, mob/user) diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index 46921efc6a..126cff9713 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -33,7 +33,6 @@ name = "Golem Shell Construction" desc = "Allows for the construction of a Golem Shell." id = "golem" - req_tech = list("materials" = 12) build_type = AUTOLATHE materials = list(MAT_METAL = 40000) build_path = /obj/item/golem_shell diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index b73cfb05e2..579397cc4b 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -17,7 +17,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/effect/clockwork/spatial_gateway, /obj/structure/destructible/clockwork/powered/clockwork_obelisk, /obj/item/device/warp_cube, - /obj/machinery/r_n_d/protolathe, //print tracking beacons, send shuttle + /obj/machinery/rnd/protolathe, //print tracking beacons, send shuttle /obj/machinery/autolathe, //same /obj/item/projectile/beam/wormhole, /obj/effect/portal, diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index aa1ea10cd0..e23e7ff7d3 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -161,7 +161,6 @@ name = "arm-mounted laser implant" desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use." icon_state = "arm_laser" - origin_tech = "materials=4;combat=4;biotech=4;powerstorage=4;syndicate=3" contents = newlist(/obj/item/gun/energy/laser/mounted) /obj/item/organ/cyberimp/arm/gun/laser/l @@ -172,7 +171,6 @@ name = "arm-mounted taser implant" desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use." icon_state = "arm_taser" - origin_tech = "materials=5;combat=5;biotech=4;powerstorage=4" contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted) /obj/item/organ/cyberimp/arm/gun/taser/l @@ -182,7 +180,6 @@ /obj/item/organ/cyberimp/arm/toolset name = "integrated toolset implant" desc = "A stripped-down version of the engineering cyborg toolset, designed to be installed on subject's arm. Contains all necessary tools." - origin_tech = "materials=3;engineering=4;biotech=3;powerstorage=4" contents = newlist(/obj/item/screwdriver/cyborg, /obj/item/wrench/cyborg, /obj/item/weldingtool/largetank/cyborg, /obj/item/crowbar/cyborg, /obj/item/wirecutters/cyborg, /obj/item/device/multitool/cyborg) @@ -200,19 +197,17 @@ name = "arm-mounted energy blade" desc = "An illegal and highly dangerous cybernetic implant that can project a deadly blade of concentrated energy." contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight) - origin_tech = "materials=4;combat=5;biotech=3;powerstorage=2;syndicate=5" /obj/item/organ/cyberimp/arm/medibeam name = "integrated medical beamgun" desc = "A cybernetic implant that allows the user to project a healing beam from their hand." contents = newlist(/obj/item/gun/medbeam) - origin_tech = "materials=5;combat=2;biotech=5;powerstorage=4;syndicate=1" + /obj/item/organ/cyberimp/arm/flash name = "integrated high-intensity photon projector" //Why not desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash." contents = newlist(/obj/item/device/assembly/flash/armimplant) - origin_tech = "materials=4;combat=3;biotech=4;magnets=4;powerstorage=3" /obj/item/organ/cyberimp/arm/flash/Initialize() . = ..() @@ -224,13 +219,11 @@ name = "arm electrification implant" desc = "An illegal combat implant that allows the user to administer disabling shocks from their arm." contents = newlist(/obj/item/borg/stun) - origin_tech = "materials=3;combat=5;biotech=4;powerstorage=4;syndicate=3" /obj/item/organ/cyberimp/arm/combat name = "combat cybernetics implant" desc = "A powerful cybernetic implant that contains combat modules built into the user's arm." contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight, /obj/item/gun/medbeam, /obj/item/borg/stun, /obj/item/device/assembly/flash/armimplant) - origin_tech = "materials=5;combat=7;biotech=5;powerstorage=5;syndicate=6;programming=5" /obj/item/organ/cyberimp/arm/combat/Initialize() . = ..() @@ -242,4 +235,3 @@ name = "surgical toolset implant" desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." contents = newlist(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/surgicaldrill/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment, /obj/item/surgical_drapes) - origin_tech = "materials=3;engineering=3;biotech=3;programming=2;magnets=3" diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index 1e93c4df4a..a6635ed78d 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -14,7 +14,6 @@ var/synthesizing = 0 var/poison_amount = 5 slot = ORGAN_SLOT_STOMACH - origin_tech = "materials=2;powerstorage=2;biotech=2" /obj/item/organ/cyberimp/chest/nutriment/on_life() if(synthesizing) @@ -43,14 +42,12 @@ implant_color = "#006607" hunger_threshold = NUTRITION_LEVEL_HUNGRY poison_amount = 10 - origin_tech = "materials=4;powerstorage=3;biotech=3" /obj/item/organ/cyberimp/chest/reviver name = "Reviver implant" desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" icon_state = "chest_implant" implant_color = "#AD0000" - origin_tech = "materials=5;programming=4;biotech=4" slot = ORGAN_SLOT_HEART_AID var/revive_cost = 0 var/reviving = 0 @@ -122,7 +119,6 @@ Unlike regular jetpack, this device has no stabilization system." slot = ORGAN_SLOT_THRUSTERS icon_state = "imp_jetpack" - origin_tech = "materials=4;magnets=4;biotech=4;engineering=5" implant_overlay = null implant_color = null actions_types = list(/datum/action/item_action/organ_action/toggle) diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 29fc6f1ac2..37cbb9e022 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -29,13 +29,11 @@ /obj/item/organ/cyberimp/eyes/hud/medical name = "Medical HUD implant" desc = "These cybernetic eye implants will display a medical HUD over everything you see." - origin_tech = "materials=4;programming=4;biotech=4" HUD_type = DATA_HUD_MEDICAL_ADVANCED /obj/item/organ/cyberimp/eyes/hud/security name = "Security HUD implant" desc = "These cybernetic eye implants will display a security HUD over everything you see." - origin_tech = "materials=4;programming=4;biotech=3;combat=3" HUD_type = DATA_HUD_SECURITY_ADVANCED /obj/item/organ/cyberimp/eyes/hud/security/syndicate diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index a6c1517faa..7e209a1de0 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -45,7 +45,6 @@ var/list/stored_items = list() implant_color = "#DE7E00" slot = ORGAN_SLOT_BRAIN_ANTIDROP - origin_tech = "materials=4;programming=5;biotech=4" actions_types = list(/datum/action/item_action/organ_action/toggle) /obj/item/organ/cyberimp/brain/anti_drop/ui_action_click() @@ -102,7 +101,6 @@ desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." implant_color = "#FFFF00" slot = ORGAN_SLOT_BRAIN_ANTISTUN - origin_tech = "materials=5;programming=4;biotech=5" /obj/item/organ/cyberimp/brain/anti_stun/on_life() ..() @@ -135,7 +133,6 @@ icon_state = "implant_mask" slot = ORGAN_SLOT_BREATHING_TUBE w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=2;biotech=3" /obj/item/organ/cyberimp/mouth/breathing_tube/emp_act(severity) if(prob(60/severity)) diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 75d4aa0bcc..51e39605c4 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -103,7 +103,6 @@ name = "thermal eyes" desc = "These cybernetic eye implants will give you thermal vision. Vertical slit pupil included." eye_color = "FC0" - origin_tech = "materials=5;programming=4;biotech=4;magnets=4;syndicate=1" sight_flags = SEE_MOBS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE flash_protect = -1 @@ -141,7 +140,6 @@ /obj/item/organ/eyes/robotic/shield name = "shielded robotic eyes" desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision." - origin_tech = "materials=4;biotech=3;engineering=4;plasmatech=3" flash_protect = 2 /obj/item/organ/eyes/robotic/shield/emp_act(severity) @@ -152,7 +150,6 @@ /obj/item/organ/eyes/robotic/glow name = "High Luminosity Eyes" desc = "Special glowing eyes, used by snowflakes who want to be special." - origin_tech = "materials=3;biotech=3;engineering=3;magnets=4" eye_color = "000" actions_types = list(/datum/action/item_action/organ_action/use, /datum/action/item_action/organ_action/toggle) var/current_color_string = "#ffffff" diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index bc85d9c46e..21d15fb609 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -4,7 +4,6 @@ icon_state = "heart-on" zone = "chest" slot = ORGAN_SLOT_HEART - origin_tech = "biotech=5" // Heart attack code is in code/modules/mob/living/carbon/human/life.dm var/beating = 1 var/icon_base = "heart" @@ -54,7 +53,7 @@ var/sound/slowbeat = sound('sound/health/slowbeat.ogg', repeat = TRUE) var/sound/fastbeat = sound('sound/health/fastbeat.ogg', repeat = TRUE) var/mob/living/carbon/H = owner - + if(H.health <= HEALTH_THRESHOLD_CRIT && beat != BEAT_SLOW) beat = BEAT_SLOW H.playsound_local(get_turf(H), slowbeat,40,0, channel = CHANNEL_HEARTBEAT) @@ -76,7 +75,6 @@ desc = "A heart that, when inserted, will force you to pump it manually." icon_state = "cursedheart-off" icon_base = "cursedheart" - origin_tech = "biotech=6" actions_types = list(/datum/action/item_action/organ_action/cursed_heart) var/last_pump = 0 var/add_colour = TRUE //So we're not constantly recreating colour datums @@ -151,7 +149,6 @@ name = "cybernetic heart" desc = "An electronic device designed to mimic the functions of an organic human heart. Offers no benefit over an organic heart other than being easy to make." icon_state = "heart-c" - origin_tech = "biotech=5" /obj/item/organ/heart/cybernetic/emp_act() Stop() diff --git a/code/modules/surgery/organs/liver.dm b/code/modules/surgery/organs/liver.dm index 352958d9b8..d2de50ce3e 100755 --- a/code/modules/surgery/organs/liver.dm +++ b/code/modules/surgery/organs/liver.dm @@ -5,7 +5,6 @@ /obj/item/organ/liver name = "liver" icon_state = "liver" - origin_tech = "biotech=3" w_class = WEIGHT_CLASS_NORMAL zone = "chest" slot = ORGAN_SLOT_LIVER @@ -68,13 +67,11 @@ name = "cybernetic liver" icon_state = "liver-c" desc = "An electronic device designed to mimic the functions of a human liver. It has no benefits over an organic liver, but is easy to produce." - origin_tech = "biotech=4" /obj/item/organ/liver/cybernetic/upgraded name = "upgraded cybernetic liver" icon_state = "liver-c-u" desc = "An upgraded version of the cybernetic liver, designed to improve upon organic livers. It is resistant to alcohol poisoning and is very robust at filtering toxins." - origin_tech = "biotech=6" alcohol_tolerance = 0.001 maxHealth = 200 //double the health of a normal liver toxTolerance = 15 //can shrug off up to 15u of toxins diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index a7ea63f101..02f1ee4ec3 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -356,7 +356,6 @@ name = "cybernetic lungs" desc = "A cybernetic version of the lungs found in traditional humanoid entities. It functions the same as an organic lung and is merely meant as a replacement." icon_state = "lungs-c" - origin_tech = "biotech=4" /obj/item/organ/lungs/cybernetic/emp_act() owner.losebreath = 20 @@ -366,8 +365,6 @@ name = "upgraded cybernetic lungs" desc = "A more advanced version of the stock cybernetic lungs. They are capable of filtering out lower levels of toxins and carbon dioxide." icon_state = "lungs-c-u" - origin_tech = "biotech=5" - safe_toxins_max = 20 safe_co2_max = 20 diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 4097f3fb47..75d30ec352 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -3,7 +3,6 @@ icon = 'icons/obj/surgery.dmi' var/mob/living/carbon/owner = null var/status = ORGAN_ORGANIC - origin_tech = "biotech=3" w_class = WEIGHT_CLASS_SMALL throwforce = 0 var/zone = "chest" @@ -66,7 +65,6 @@ S.desc = desc S.icon = icon S.icon_state = icon_state - S.origin_tech = origin_tech S.w_class = w_class return S diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm index 2bf34334f4..1422c20c7b 100755 --- a/code/modules/surgery/organs/stomach.dm +++ b/code/modules/surgery/organs/stomach.dm @@ -1,7 +1,6 @@ /obj/item/organ/stomach name = "stomach" icon_state = "stomach" - origin_tech = "biotech=4" w_class = WEIGHT_CLASS_NORMAL zone = "chest" slot = ORGAN_SLOT_STOMACH diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 084ed3f81d..78f29c1fc8 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -6,7 +6,6 @@ materials = list(MAT_METAL=6000, MAT_GLASS=3000) flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" /obj/item/retractor/augment @@ -17,7 +16,6 @@ materials = list(MAT_METAL=6000, MAT_GLASS=3000) flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" toolspeed = 0.5 @@ -29,7 +27,6 @@ materials = list(MAT_METAL=5000, MAT_GLASS=2500) flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "pinched") @@ -41,7 +38,6 @@ materials = list(MAT_METAL=5000, MAT_GLASS=2500) flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" toolspeed = 0.5 attack_verb = list("attacked", "pinched") @@ -54,7 +50,6 @@ materials = list(MAT_METAL=2500, MAT_GLASS=750) flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" attack_verb = list("burnt") @@ -66,7 +61,6 @@ materials = list(MAT_METAL=2500, MAT_GLASS=750) flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY - origin_tech = "materials=1;biotech=1" toolspeed = 0.5 attack_verb = list("burnt") @@ -83,7 +77,6 @@ flags_1 = CONDUCT_1 force = 15 w_class = WEIGHT_CLASS_NORMAL - origin_tech = "materials=1;biotech=1" attack_verb = list("drilled") @@ -97,7 +90,6 @@ flags_1 = CONDUCT_1 force = 10 w_class = WEIGHT_CLASS_SMALL - origin_tech = "materials=1;biotech=1" toolspeed = 0.5 attack_verb = list("drilled") @@ -116,7 +108,6 @@ throw_speed = 3 throw_range = 5 materials = list(MAT_METAL=4000, MAT_GLASS=1000) - origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP_ACCURATE @@ -133,7 +124,6 @@ throw_speed = 3 throw_range = 5 materials = list(MAT_METAL=4000, MAT_GLASS=1000) - origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") toolspeed = 0.5 hitsound = 'sound/weapons/bladeslice.ogg' @@ -160,7 +150,6 @@ throw_speed = 2 throw_range = 5 materials = list(MAT_METAL=10000, MAT_GLASS=6000) - origin_tech = "biotech=1;combat=1" attack_verb = list("attacked", "slashed", "sawed", "cut") sharpness = IS_SHARP @@ -178,7 +167,6 @@ throw_speed = 2 throw_range = 5 materials = list(MAT_METAL=10000, MAT_GLASS=6000) - origin_tech = "biotech=1;combat=1" toolspeed = 0.5 attack_verb = list("attacked", "slashed", "sawed", "cut") sharpness = IS_SHARP @@ -189,7 +177,6 @@ icon = 'icons/obj/surgery.dmi' icon_state = "surgical_drapes" w_class = WEIGHT_CLASS_TINY - origin_tech = "biotech=1" attack_verb = list("slapped") /obj/item/surgical_drapes/attack(mob/living/M, mob/user) diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 32a2acf9c6..d712b773d3 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -18,7 +18,6 @@ /obj/item/circuitboard/machine/telesci_pad name = "Telepad (Machine Board)" build_path = /obj/machinery/telepad - origin_tech = "programming=4;engineering=3;plasmatech=4;bluespace=4" req_components = list( /obj/item/ore/bluespace_crystal = 2, /obj/item/stock_parts/capacitor = 1, @@ -104,7 +103,6 @@ icon = 'icons/obj/radio.dmi' icon_state = "beacon" item_state = "beacon" - origin_tech = "bluespace=3" /obj/item/device/telepad_beacon/attack_self(mob/user) if(user) diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 42d863d968..3925b863ff 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -24,7 +24,6 @@ desc = "An upgrade for mobile janicarts." icon = 'icons/obj/vehicles.dmi' icon_state = "upgrade" - origin_tech = "materials=3;engineering=4" /obj/vehicle/ridden/janicart/examine(mob/user) ..() diff --git a/code/modules/vore/resizing/sizegun_vr.dm b/code/modules/vore/resizing/sizegun_vr.dm index de6e0eb7f0..51b6e24736 100644 --- a/code/modules/vore/resizing/sizegun_vr.dm +++ b/code/modules/vore/resizing/sizegun_vr.dm @@ -11,7 +11,6 @@ fire_sound = 'sound/weapons/wave.ogg' charge_cost = 100 projectile_type = /obj/item/projectile/beam/shrinklaser - origin_tech = "redspace=1;bluespace=4" modifystate = "sizegun-shrink" selfcharge = 1 firemodes = list( @@ -88,7 +87,6 @@ datum/design/sizeray name = "Size Ray" desc = "Abuse bluespace tech to alter living matter scale." id = "sizeray" - req_tech = list("combat" = 5, "materials" = 4, "engineering" = 5, "bluespace" = 4) build_type = PROTOLATHE materials = list(MAT_METAL = 1000, MAT_GLASS = 1000, MAT_DIAMOND = 2500, MAT_URANIUM = 2500, MAT_TITANIUM = 1000) build_path = /obj/item/gun/energy/laser/sizeray @@ -155,7 +153,6 @@ datum/design/sizeray desc = "Size manipulator using bluespace breakthroughs." item_state = null //so the human update icon uses the icon_state instead. ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray, /obj/item/ammo_casing/energy/laser/growthray) - origin_tech = "combat=1;magnets=2" selfcharge = 1 charge_delay = 5 ammo_x_offset = 2 diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index d55059960f..07e3648417 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -4,7 +4,6 @@ zone = "head" slot = ORGAN_SLOT_ZOMBIE icon_state = "blacktumor" - origin_tech = "biotech=5" var/datum/species/old_species = /datum/species/human var/living_transformation_time = 30 var/converts_living = FALSE diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index b4085fcd0d..dd23e1807a 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -134,6 +134,7 @@ h1.alert, h2.alert {color: #000000;} .ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;} .alien {color: #543354;} +.alienbold {color: #543354; font-weight: bold;} .noticealien {color: #00c000;} .alertalien {color: #00c000; font-weight: bold;} .borer {color: #543354; font-style: italic;} diff --git a/modular_citadel/hypereutactic_blade.dm b/modular_citadel/hypereutactic_blade.dm index e96789c43f..f0cfa55109 100644 --- a/modular_citadel/hypereutactic_blade.dm +++ b/modular_citadel/hypereutactic_blade.dm @@ -22,7 +22,6 @@ unwieldsound = 'sound/weapons/neboff.ogg' hitsound = "swing_hit" armour_penetration = 40 - origin_tech = "magnets=6;syndicate=1" light_color = "#37FFF7" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "destroyed", "ripped", "devastated", "shredded") block_chance = 75 @@ -180,7 +179,6 @@ throw_range = 5 force_unwielded = 0 force_wielded = 0 - origin_tech = null attack_verb = list("attacked", "struck", "hit") /obj/item/twohanded/hypereutactic/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) diff --git a/tgstation.dme b/tgstation.dme index 79e277a91b..11399a1b14 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -69,6 +69,7 @@ #include "code\__DEFINES\radiation.dm" #include "code\__DEFINES\radio.dm" #include "code\__DEFINES\reagents.dm" +#include "code\__DEFINES\research.dm" #include "code\__DEFINES\robots.dm" #include "code\__DEFINES\role_preferences.dm" #include "code\__DEFINES\say.dm" @@ -258,6 +259,7 @@ #include "code\controllers\subsystem\radiation.dm" #include "code\controllers\subsystem\radio.dm" #include "code\controllers\subsystem\religion.dm" +#include "code\controllers\subsystem\research.dm" #include "code\controllers\subsystem\server_maint.dm" #include "code\controllers\subsystem\shuttle.dm" #include "code\controllers\subsystem\spacedrift.dm" @@ -2221,32 +2223,42 @@ #include "code\modules\recycling\disposal\pipe.dm" #include "code\modules\recycling\disposal\pipe_sorting.dm" #include "code\modules\research\circuitprinter.dm" +#include "code\modules\research\departmental_circuit_imprinter.dm" +#include "code\modules\research\departmental_lathe.dm" #include "code\modules\research\designs.dm" #include "code\modules\research\destructive_analyzer.dm" #include "code\modules\research\experimentor.dm" #include "code\modules\research\message_server.dm" #include "code\modules\research\protolathe.dm" -#include "code\modules\research\rd-readme.dm" #include "code\modules\research\rdconsole.dm" #include "code\modules\research\rdmachines.dm" -#include "code\modules\research\research.dm" +#include "code\modules\research\research_disk.dm" #include "code\modules\research\server.dm" #include "code\modules\research\stock_parts.dm" #include "code\modules\research\designs\AI_module_designs.dm" #include "code\modules\research\designs\autolathe_designs.dm" #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\electronics_designs.dm" +#include "code\modules\research\designs\equipment_designs.dm" #include "code\modules\research\designs\limbgrower_designs.dm" #include "code\modules\research\designs\machine_designs.dm" #include "code\modules\research\designs\mecha_designs.dm" #include "code\modules\research\designs\mechfabricator_designs.dm" #include "code\modules\research\designs\medical_designs.dm" +#include "code\modules\research\designs\mining_designs.dm" +#include "code\modules\research\designs\misc_designs.dm" #include "code\modules\research\designs\power_designs.dm" #include "code\modules\research\designs\smelting_designs.dm" #include "code\modules\research\designs\stock_parts_designs.dm" #include "code\modules\research\designs\telecomms_designs.dm" #include "code\modules\research\designs\weapon_designs.dm" +#include "code\modules\research\techweb\__techweb_helpers.dm" +#include "code\modules\research\techweb\_techweb.dm" +#include "code\modules\research\techweb\_techweb_node.dm" +#include "code\modules\research\techweb\all_nodes.dm" #include "code\modules\research\xenobiology\xenobio_camera.dm" #include "code\modules\research\xenobiology\xenobiology.dm" #include "code\modules\ruins\lavaland_ruin_code.dm" @@ -2402,11 +2414,11 @@ #include "code\modules\tgui\states\self.dm" #include "code\modules\tgui\states\zlevel.dm" #include "code\modules\tooltip\tooltip.dm" -#include "code\modules\vehicles\_vehicle.dm" #include "code\modules\uplink\uplink.dm" #include "code\modules\uplink\uplink_devices.dm" #include "code\modules\uplink\uplink_items.dm" #include "code\modules\uplink\uplink_purchase_log.dm" +#include "code\modules\vehicles\_vehicle.dm" #include "code\modules\vehicles\atv.dm" #include "code\modules\vehicles\bicycle.dm" #include "code\modules\vehicles\entered.dm" diff --git a/tgui/src/interfaces/rdconsole.ract b/tgui/src/interfaces/rdconsole.ract new file mode 100644 index 0000000000..acba78c90e --- /dev/null +++ b/tgui/src/interfaces/rdconsole.ract @@ -0,0 +1,47 @@ + + + + + + + + + + + +{{#if data.locked}} + + Unlock + +{{/if}} +{{#if !data.locked}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{{/if}} \ No newline at end of file diff --git a/tgui/src/interfaces/rdconsole/circuit.ract b/tgui/src/interfaces/rdconsole/circuit.ract new file mode 100644 index 0000000000..c8df6c139c --- /dev/null +++ b/tgui/src/interfaces/rdconsole/circuit.ract @@ -0,0 +1,57 @@ +{{#if data.circuit_linked}} + {{#if data.circuitbusy}} + + {{else}} + + Search Available Designs: + + Search + + Materials: {{data.circuitmats}} / {{data.circuitmaxmats}} + Reagents: {{data.circuitchems}} / {{data.circuitmaxchems}} + + + + + {{#each data.circuitcats}} + {{name}} + {{/each}} + + + {{#each data.circuitdes}} + {{name}}{{matstring}} + Print + + {{/each}} + + + {{#each data.circuitmatch}} + {{name}}{{matstring}} + Print + + {{/each}} + + + {{#each data.circuitmat_list}} + {{name}} : {{amount}} cm3 - + {{#if sheets > 0}} + + Release + {{/if}} + + {{/each}} + + + {{#each data.circuitchem_list}} + {{name}} : {{amount}} - + Purge + + {{/each}} + + + + {{/if}} +{{else}} + +{{/if}} + diff --git a/tgui/src/interfaces/rdconsole/designview.ract b/tgui/src/interfaces/rdconsole/designview.ract new file mode 100644 index 0000000000..1ec2d92a95 --- /dev/null +++ b/tgui/src/interfaces/rdconsole/designview.ract @@ -0,0 +1,48 @@ +{{#if data.design_selected}} + + {{data.sdesign_desc}} + + + {{#if (data.sdesign_buildtype & 1)}} + + {{/if}} + {{#if (data.sdesign_buildtype & 2)}} + + {{/if}} + {{#if (data.sdesign_buildtype & 4)}} + + {{/if}} + {{#if (data.sdesign_buildtype & 8)}} + + {{/if}} + {{#if (data.sdesign_buildtype & 16)}} + + {{/if}} + {{#if (data.sdesign_buildtype & 32)}} + + {{/if}} + {{#if (data.sdesign_buildtype & 64)}} + + {{/if}} + {{#if (data.sdesign_buildtype & 128)}} + + {{/if}} + + + {{#each data.sdesign_materials}} + {{matamt}} cm^3 + {{/each}} + +{{/if}} +{{#if !data.design_selected}} + +{{/if}} + + + + + + + + + diff --git a/tgui/src/interfaces/rdconsole/destruct.ract b/tgui/src/interfaces/rdconsole/destruct.ract new file mode 100644 index 0000000000..c17e183704 --- /dev/null +++ b/tgui/src/interfaces/rdconsole/destruct.ract @@ -0,0 +1,25 @@ + +{{#if data.destroy_linked}} + {{#if data.destroybusy}} + + {{else}} + {{#if !data.destroy_loaded}} + + {{else}} + + {{data.destroy_name}} + + + {{#each data.boost_paths}} + + Deconstruct and Boost + + {{/each}} + + Eject Item + {{/if}} + {{/if}} +{{else}} + +{{/if}} + diff --git a/tgui/src/interfaces/rdconsole/diskopsdesign.ract b/tgui/src/interfaces/rdconsole/diskopsdesign.ract new file mode 100644 index 0000000000..ce949b3fb6 --- /dev/null +++ b/tgui/src/interfaces/rdconsole/diskopsdesign.ract @@ -0,0 +1,34 @@ + +{{#if !data.ddisk}} + +{{else}} + {{#if data.ddisk_update}} + + {{else}} + {{#if !data.ddisk_upload}} + + Disk Capacity: {{data.ddisk_size}} blueprints. + Upload all designs + WIPE ALL DATA + Eject Disk + + + {{#each data.ddisk_designs}} + #{{pos}}: + {{#if id == "null"}} + Upload to Empty Slot + {{else}} + {{name}} + Delete Slot + {{/if}} + + {{/each}} + + {{else}} + Available Designs: + {{#each data.ddisk_possible_designs}} + {{name}} + {{/each}} + {{/if}} + {{/if}} +{{/if}} diff --git a/tgui/src/interfaces/rdconsole/diskopstech.ract b/tgui/src/interfaces/rdconsole/diskopstech.ract new file mode 100644 index 0000000000..de05a67a91 --- /dev/null +++ b/tgui/src/interfaces/rdconsole/diskopstech.ract @@ -0,0 +1,19 @@ + +{{#if !data.tdisk}} + +{{else}} + {{#if data.tdisk_update}} + + {{else}} + + Download Research to DiskUpload Research from Disk + WIPE ALL DATA + Eject Disk + + + {{#each data.tdisk_nodes}} + {{display_name}} + {{/each}} + + {{/if}} +{{/if}} diff --git a/tgui/src/interfaces/rdconsole/nodeview.ract b/tgui/src/interfaces/rdconsole/nodeview.ract new file mode 100644 index 0000000000..929c6f1787 --- /dev/null +++ b/tgui/src/interfaces/rdconsole/nodeview.ract @@ -0,0 +1,26 @@ +{{#if data.node_selected}} + + Description: {{data.snode_desc}} + Point Cost: {{data.snode_cost}} + Export Price: {{data.snode_export}} + {{data.snode_researched? "Researched" : "Research Node"}} + + + {{#each data.node_prereqs}} + {{display_name}} + {{/each}} + + + {{#each data.node_unlocks}} + {{display_name}} + {{/each}} + + + {{#each data.node_designs}} + {{name}} + {{/each}} + +{{/if}} +{{#if !data.node_selected}} + +{{/if}} diff --git a/tgui/src/interfaces/rdconsole/protolathe.ract b/tgui/src/interfaces/rdconsole/protolathe.ract new file mode 100644 index 0000000000..a3a0486643 --- /dev/null +++ b/tgui/src/interfaces/rdconsole/protolathe.ract @@ -0,0 +1,62 @@ +{{#if data.protolathe_linked}} + {{#if data.protobusy}} + + {{else}} + + Search Available Designs: + + Search + + Materials: {{data.protomats}} / {{data.protomaxmats}} + Reagents: {{data.protochems}} / {{data.protomaxchems}} + + + + + {{#each data.protocats}} + {{name}} + {{/each}} + + + {{#each data.protodes}} + {{name}}{{matstring}} + {{#if canprint > 1}} + + {{/if}} + Print + + {{/each}} + + + {{#each data.protomatch}} + {{name}}{{matstring}} + {{#if canprint > 1}} + + {{/if}} + Print + + {{/each}} + + + {{#each data.protomat_list}} + {{name}} : {{amount}} cm3 - + {{#if sheets > 0}} + + Release + {{/if}} + + {{/each}} + + + {{#each data.protochem_list}} + {{name}} : {{amount}} - + Purge + + {{/each}} + + + + {{/if}} +{{else}} + +{{/if}} diff --git a/tgui/src/interfaces/rdconsole/rdheader.ract b/tgui/src/interfaces/rdconsole/rdheader.ract new file mode 100644 index 0000000000..1a053a5bde --- /dev/null +++ b/tgui/src/interfaces/rdconsole/rdheader.ract @@ -0,0 +1,7 @@ + +NanoTrasen R&D Console
+Available Points: {{data.research_points_stored}} + +Select Page: [Go] + +
diff --git a/tgui/src/interfaces/rdconsole/settings.ract b/tgui/src/interfaces/rdconsole/settings.ract new file mode 100644 index 0000000000..84ab3e8786 --- /dev/null +++ b/tgui/src/interfaces/rdconsole/settings.ract @@ -0,0 +1,6 @@ +Settings

+RESYNC MACHINERY
+LOCK +Disconnect Destructive Analyzer +Disconnect Protolathe +Disconnect Circuit Imprinter diff --git a/tgui/src/interfaces/rdconsole/techweb.ract b/tgui/src/interfaces/rdconsole/techweb.ract new file mode 100644 index 0000000000..6f78698db7 --- /dev/null +++ b/tgui/src/interfaces/rdconsole/techweb.ract @@ -0,0 +1,15 @@ + + {{#each data.techweb_avail}} + {{display_name}} + {{/each}} + + + {{#each data.techweb_locked}} + {{display_name}} + {{/each}} + + + {{#each data.techweb_researched}} + {{display_name}} + {{/each}} +