diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_wizard.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_wizard.dmm index 4ffe6287eca..20b3a851265 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_wizard.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_wizard.dmm @@ -135,7 +135,7 @@ dir = 4 }, /obj/structure/table/bronze, -/obj/item/disk/design_disk/adv/knight_gear, +/obj/item/disk/design_disk/knight_gear, /turf/open/indestructible/necropolis, /area/lavaland/surface/outdoors) "q" = ( diff --git a/_maps/RandomRuins/SpaceRuins/clericden.dmm b/_maps/RandomRuins/SpaceRuins/clericden.dmm index eb4421f68bf..0bf5a3a0579 100644 --- a/_maps/RandomRuins/SpaceRuins/clericden.dmm +++ b/_maps/RandomRuins/SpaceRuins/clericden.dmm @@ -71,7 +71,7 @@ "r" = ( /obj/effect/decal/cleanable/shreds, /obj/effect/decal/remains/human, -/obj/item/disk/design_disk/adv/cleric_mace, +/obj/item/disk/design_disk/cleric_mace, /obj/structure/trap/cult, /turf/open/floor/carpet/airless, /area/ruin/space) diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm index 72f7c0842fd..cb86d311704 100644 --- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm @@ -678,7 +678,7 @@ /area/ruin/space/has_grav/dangerous_research) "ji" = ( /obj/structure/table, -/obj/item/disk/tech_disk/spaceloot, +/obj/item/disk/design_disk/bepis, /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research/dorms) diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 16f184e65fc..329b72f4f7b 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -195,12 +195,12 @@ pixel_y = 7 }, /obj/item/raw_anomaly_core/random, -/obj/item/disk/tech_disk/spaceloot{ +/obj/item/disk/design_disk/bepis{ pixel_x = -3; pixel_y = -3 }, -/obj/item/disk/tech_disk/spaceloot, -/obj/item/disk/tech_disk/spaceloot{ +/obj/item/disk/design_disk/bepis, +/obj/item/disk/design_disk/bepis{ pixel_x = 3; pixel_y = 3 }, diff --git a/code/game/objects/effects/spawners/random/exotic.dm b/code/game/objects/effects/spawners/random/exotic.dm index a4356b5ec3a..ce48a31e5fd 100644 --- a/code/game/objects/effects/spawners/random/exotic.dm +++ b/code/game/objects/effects/spawners/random/exotic.dm @@ -8,7 +8,7 @@ spawn_loot_count = 2 loot = list( // Space loot spawner. Couple of random bits of technology-adjacent stuff including anomaly cores and BEPIS techs. /obj/item/raw_anomaly_core/random, - /obj/item/disk/tech_disk/spaceloot, + /obj/item/disk/design_disk/bepis, /obj/item/camera_bug, ) diff --git a/code/modules/cargo/bounties/science.dm b/code/modules/cargo/bounties/science.dm index aab8429b394..1807c5ae56f 100644 --- a/code/modules/cargo/bounties/science.dm +++ b/code/modules/cargo/bounties/science.dm @@ -18,8 +18,8 @@ description = "It turns out the diskettes the BEPIS prints experimental nodes on are extremely space-efficient. Send us one of your spares when you're done with it." reward = CARGO_CRATE_VALUE * 8 wanted_types = list( - /obj/item/disk/tech_disk/major = TRUE, - /obj/item/disk/tech_disk/spaceloot = TRUE, + /obj/item/disk/design_disk/bepis/remove_tech = TRUE, + /obj/item/disk/design_disk/bepis = TRUE, ) /datum/bounty/item/science/genetics diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 709d4b76c87..2cbc2f288d0 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -29,7 +29,7 @@ mail_goodies = list( /obj/item/raw_anomaly_core/random = 10, - /obj/item/disk/tech_disk/spaceloot = 2, + /obj/item/disk/design_disk/bepis = 2, /obj/item/camera_bug = 1 ) rpg_title = "Thaumaturgist" diff --git a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm index be1e9ea9011..e622bee1b48 100644 --- a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm +++ b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm @@ -1,15 +1,13 @@ //If you're looking for spawners like ash walker eggs, check ghost_role_spawners.dm ///Wizard tower item -/obj/item/disk/design_disk/adv/knight_gear +/obj/item/disk/design_disk/knight_gear name = "Magic Disk of Smithing" -/obj/item/disk/design_disk/adv/knight_gear/Initialize(mapload) +/obj/item/disk/design_disk/knight_gear/Initialize(mapload) . = ..() - var/datum/design/knight_armour/A = new - var/datum/design/knight_helmet/H = new - blueprints[1] = A - blueprints[2] = H + blueprints += new /datum/design/knight_armour + blueprints += new /datum/design/knight_helmet //Free Golems @@ -17,12 +15,10 @@ name = "Golem Creation Disk" desc = "A gift from the Liberator." icon_state = "datadisk1" - max_blueprints = 1 /obj/item/disk/design_disk/golem_shell/Initialize(mapload) . = ..() - var/datum/design/golem_shell/G = new - blueprints[1] = G + blueprints += new /datum/design/golem_shell /datum/design/golem_shell name = "Golem Shell Construction" diff --git a/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm b/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm index 5f0e8f43803..2ea63245661 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/clericsden.dm @@ -1,13 +1,12 @@ /////////// cleric's den items. //Primary reward: the cleric's mace design disk. -/obj/item/disk/design_disk/adv/cleric_mace +/obj/item/disk/design_disk/cleric_mace name = "Enshrined Disc of Smiting" -/obj/item/disk/design_disk/adv/cleric_mace/Initialize(mapload) +/obj/item/disk/design_disk/cleric_mace/Initialize(mapload) . = ..() - var/datum/design/cleric_mace/M = new - blueprints[1] = M + blueprints += new /datum/design/cleric_mace /obj/item/paper/fluff/ruins/clericsden/contact default_raw_text = "Father Aurellion, the ritual is complete, and soon our brothers at the bastion will see the error of our ways. After all, a god of clockwork or blood? Preposterous. Only the TRUE GOD should have so much power. Signed, Father Odivallus." diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index f11d8bf75fe..2ff38c371f0 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -9,7 +9,7 @@ /obj/item/disk/design_disk/modkit_disc/Initialize(mapload) . = ..() - blueprints[1] = new modkit_design + blueprints += new modkit_design /obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe name = "Offensive Mining Explosion Mod Disk" diff --git a/code/modules/research/bepis.dm b/code/modules/research/bepis.dm index d3e901a48b5..ffb54a8320f 100644 --- a/code/modules/research/bepis.dm +++ b/code/modules/research/bepis.dm @@ -268,7 +268,7 @@ if((gauss_real >= gauss_major)) //Major Success. if(SSresearch.techweb_nodes_experimental.len > 0) say("Experiment concluded with major success. New technology node discovered on technology disc.") - new /obj/item/disk/tech_disk/major(dropturf,1) + new /obj/item/disk/design_disk/bepis/remove_tech(dropturf,1) return say("Expended all available experimental technology nodes. Resorting to minor rewards.") if(gauss_real >= gauss_minor) //Minor Success. diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 09a69a0cd68..0722ca9ab5c 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -99,19 +99,57 @@ other types of metals and chemistry for reagents). name = "Component Design Disk" desc = "A disk for storing device design data for construction in lathes." icon_state = "datadisk1" - custom_materials = list(/datum/material/iron =300, /datum/material/glass =100) + custom_materials = list(/datum/material/iron = 300, /datum/material/glass = 100) + + ///List of all `/datum/design` stored on the disk. var/list/blueprints = list() - var/max_blueprints = 1 /obj/item/disk/design_disk/Initialize(mapload) . = ..() - pixel_x = base_pixel_x + rand(-5, 5) - pixel_y = base_pixel_y + rand(-5, 5) - for(var/i in 1 to max_blueprints) - blueprints += null + if(mapload) + pixel_x = base_pixel_x + rand(-5, 5) + pixel_y = base_pixel_y + rand(-5, 5) + +/** + * Used for special interactions with a techweb when uploading the designs. + * Args: + * - stored_research - The techweb that's storing us. + */ +/obj/item/disk/design_disk/proc/on_upload(datum/techweb/stored_research) + return + +/obj/item/disk/design_disk/bepis + name = "Old experimental technology disk" + desc = "A disk containing some long-forgotten technology from a past age. You hope it still works after all these years. Upload the disk to an R&D Console to redeem the tech." + icon_state = "rndmajordisk" + + ///The bepis node we have the design id's of + var/datum/techweb_node/bepis_node + +/obj/item/disk/design_disk/bepis/Initialize(mapload) + . = ..() + var/bepis_id = pick(SSresearch.techweb_nodes_experimental) + bepis_node = (SSresearch.techweb_node_by_id(bepis_id)) + + for(var/entry in bepis_node.design_ids) + var/datum/design/new_entry = SSresearch.techweb_design_by_id(entry) + blueprints += new_entry + +///Unhide and research our node so we show up in the R&D console. +/obj/item/disk/design_disk/bepis/on_upload(datum/techweb/stored_research) + stored_research.hidden_nodes -= bepis_node.id + stored_research.research_node(bepis_node, force = TRUE, auto_adjust_cost = FALSE) + +/** + * Subtype of Bepis tech disk + * Removes the tech disk that's held on it from the experimental node list, making them not show up in future disks. + */ +/obj/item/disk/design_disk/bepis/remove_tech + name = "Reformatted technology disk" + desc = "A disk containing a new, completed tech from the B.E.P.I.S. Upload the disk to an R&D Console to redeem the tech." + +/obj/item/disk/design_disk/bepis/remove_tech/Initialize(mapload) + . = ..() + SSresearch.techweb_nodes_experimental -= bepis_node.id + log_research("[bepis_node.display_name] has been removed from experimental nodes through the BEPIS techweb's \"remove tech\" feature.") -/obj/item/disk/design_disk/adv - name = "Advanced Component Design Disk" - desc = "A disk for storing device design data for construction in lathes. This one has extra storage space." - custom_materials = list(/datum/material/iron =300, /datum/material/glass = 100, /datum/material/silver = 50) - max_blueprints = 5 diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm index 9bf02b2c4a5..c4922b092a6 100644 --- a/code/modules/research/designs/electronics_designs.dm +++ b/code/modules/research/designs/electronics_designs.dm @@ -42,30 +42,6 @@ //////////////////////////////////////// //////////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 | AWAY_LATHE | AUTOLATHE - materials = list(/datum/material/iron = 300, /datum/material/glass = 100) - build_path = /obj/item/disk/design_disk - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE - ) - departmental_flags = DEPARTMENT_BITFLAG_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 | AWAY_LATHE - materials = list(/datum/material/iron = 300, /datum/material/glass = 100, /datum/material/silver=50) - build_path = /obj/item/disk/design_disk/adv - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - /datum/design/tech_disk name = "Technology Data Storage Disk" desc = "Produce additional disks for storing technology data." diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm index 53b56265ff4..d38b7a42d64 100644 --- a/code/modules/research/designs/limbgrower_designs.dm +++ b/code/modules/research/designs/limbgrower_designs.dm @@ -224,7 +224,6 @@ /obj/item/disk/design_disk/limbs/Initialize(mapload) . = ..() - max_blueprints = limb_designs.len for(var/design in limb_designs) var/datum/design/new_design = design blueprints += new new_design diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index c6a330efd22..449a7078537 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -184,16 +184,9 @@ Nothing else in the console has ID requirements. "stored_research" = t_disk.stored_research.researched_nodes, ) if (d_disk) - data["d_disk"] = list ( - "max_blueprints" = d_disk.max_blueprints, - "blueprints" = list(), - ) - for (var/i in 1 to d_disk.max_blueprints) - if (d_disk.blueprints[i]) - var/datum/design/D = d_disk.blueprints[i] - data["d_disk"]["blueprints"] += D.id - else - data["d_disk"]["blueprints"] += null + data["d_disk"] = list("blueprints" = list()) + for (var/datum/design/D in d_disk.blueprints) + data["d_disk"]["blueprints"] += D.id // Serialize all nodes to display @@ -298,7 +291,7 @@ Nothing else in the console has ID requirements. .["static_data"] = list( "node_cache" = node_cache, "design_cache" = design_cache, - "id_cache" = flat_id_cache + "id_cache" = flat_id_cache, ) /obj/machinery/computer/rdconsole/ui_act(action, list/params) @@ -329,55 +322,6 @@ Nothing else in the console has ID requirements. if ("ejectDisk") eject_disk(params["type"]) return TRUE - if ("writeDesign") - if(QDELETED(d_disk)) - say("No Design Disk Inserted!") - return TRUE - var/slot = text2num(params["slot"]) - var/design_id = params["selectedDesign"] - if(!stored_research.researched_designs.Find(design_id)) - stack_trace("ID did not map to a researched datum [design_id]") - return - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) - if(design) - if(design.build_type & (AUTOLATHE|PROTOLATHE|AWAY_LATHE)) // Specifically excludes circuit imprinter and mechfab - if(design.autolathe_exportable && !design.reagents_list.len) - design.build_type |= AUTOLATHE - design.category |= RND_CATEGORY_IMPORTED - d_disk.blueprints[slot] = design - return TRUE - if ("uploadDesignSlot") - if(QDELETED(d_disk)) - say("No design disk found.") - return TRUE - var/n = text2num(params["slot"]) - stored_research.add_design(d_disk.blueprints[n], TRUE) - return TRUE - if ("clearDesignSlot") - if(QDELETED(d_disk)) - say("No design disk inserted!") - return TRUE - var/n = text2num(params["slot"]) - var/datum/design/D = d_disk.blueprints[n] - say("Wiping design [D.name] from design disk.") - d_disk.blueprints[n] = null - return TRUE - if ("eraseDisk") - if (params["type"] == RND_DESIGN_DISK) - if(QDELETED(d_disk)) - say("No design disk inserted!") - return TRUE - say("Wiping design disk.") - for(var/i in 1 to d_disk.max_blueprints) - d_disk.blueprints[i] = null - if (params["type"] == RND_TECH_DISK) - if(QDELETED(t_disk)) - say("No tech disk inserted!") - return TRUE - qdel(t_disk.stored_research) - t_disk.stored_research = new - say("Wiping technology disk.") - return TRUE if ("uploadDisk") if (params["type"] == RND_DESIGN_DISK) if(QDELETED(d_disk)) @@ -386,6 +330,9 @@ Nothing else in the console has ID requirements. for(var/D in d_disk.blueprints) if(D) stored_research.add_design(D, TRUE) + say("Uploading blueprints from disk.") + d_disk.on_upload(stored_research) + return TRUE if (params["type"] == RND_TECH_DISK) if (QDELETED(t_disk)) say("No tech disk inserted!") @@ -393,6 +340,7 @@ Nothing else in the console has ID requirements. say("Uploading technology disk.") t_disk.stored_research.copy_research_to(stored_research) return TRUE + //Tech disk-only action. if ("loadTech") if(QDELETED(t_disk)) say("No tech disk inserted!") diff --git a/code/modules/research/research_disk.dm b/code/modules/research/research_disk.dm index 1d88fe78494..16f0ed7e646 100644 --- a/code/modules/research/research_disk.dm +++ b/code/modules/research/research_disk.dm @@ -21,23 +21,3 @@ /obj/item/disk/tech_disk/debug/Initialize(mapload) stored_research = SSresearch.admin_tech return ..() - -/obj/item/disk/tech_disk/major - name = "Reformatted technology disk" - desc = "A disk containing a new, completed tech from the B.E.P.I.S. Upload the disk to an R&D Console to redeem the tech." - icon_state = "rndmajordisk" - custom_materials = list(/datum/material/iron=300, /datum/material/glass=100) - -/obj/item/disk/tech_disk/major/Initialize(mapload) - stored_research = new /datum/techweb/bepis - return ..() - -/obj/item/disk/tech_disk/spaceloot - name = "Old experimental technology disk" - desc = "A disk containing some long-forgotten technology from a past age. You hope it still works after all these years. Upload the disk to an R&D Console to redeem the tech." - icon_state = "rndmajordisk" - custom_materials = list(/datum/material/iron=300, /datum/material/glass=100) - -/obj/item/disk/tech_disk/spaceloot/Initialize(mapload) - stored_research = new /datum/techweb/bepis(remove_tech = FALSE) - return ..() diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 6b40449fe7b..a4be5367abb 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -143,12 +143,11 @@ l[i] = amount modify_point_list(l) -/datum/techweb/proc/copy_research_to(datum/techweb/receiver, unlock_hidden = TRUE) //Adds any missing research to theirs. - if(unlock_hidden) - for(var/i in receiver.hidden_nodes) - CHECK_TICK - if(available_nodes[i] || researched_nodes[i] || visible_nodes[i]) - receiver.hidden_nodes -= i //We can see it so let them see it too. +/datum/techweb/proc/copy_research_to(datum/techweb/receiver) //Adds any missing research to theirs. + for(var/i in receiver.hidden_nodes) + CHECK_TICK + if(available_nodes[i] || researched_nodes[i] || visible_nodes[i]) + receiver.hidden_nodes -= i //We can see it so let them see it too. for(var/i in researched_nodes) CHECK_TICK receiver.research_node_id(i, TRUE, FALSE, FALSE) @@ -217,6 +216,8 @@ else researched_designs[design.id] = TRUE + hidden_nodes -= design.id + return TRUE /datum/techweb/proc/remove_design_by_id(id, custom = FALSE) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index e1a6299448c..53e45f51889 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -38,7 +38,6 @@ "conveyor_belt", "conveyor_switch", "custom_vendor_refill", - "design_disk", "destructive_analyzer", "destructive_scanner", "desttagger", diff --git a/code/modules/research/techweb/techweb_types.dm b/code/modules/research/techweb/techweb_types.dm index 32743b2b068..1f226793624 100644 --- a/code/modules/research/techweb/techweb_types.dm +++ b/code/modules/research/techweb/techweb_types.dm @@ -28,25 +28,6 @@ research_points[i] = INFINITY hidden_nodes = list() -/** - * Techweb made through BEPIS machine - * Should only contain 1 BEPIS tech at random. - */ -/datum/techweb/bepis - id = "EXPERIMENTAL" - organization = "Nanotrasen R&D" - -/datum/techweb/bepis/New(remove_tech = TRUE) - . = ..() - var/bepis_id = pick(SSresearch.techweb_nodes_experimental) //To add a new tech to the BEPIS, add the ID to this pick list. - var/datum/techweb_node/BN = (SSresearch.techweb_node_by_id(bepis_id)) - hidden_nodes -= BN.id //Has to be removed from hidden nodes - research_node(BN, TRUE, FALSE, FALSE) - update_node_status(BN) - if(remove_tech) - SSresearch.techweb_nodes_experimental -= bepis_id - log_research("[BN.display_name] has been removed from experimental nodes through the BEPIS techweb's \"remove tech\" feature.") - /** * Techweb made through tech disks * Contains nothing, subtype mostly meant to make it easy for admins to see. diff --git a/tgui/packages/tgui/interfaces/Techweb.js b/tgui/packages/tgui/interfaces/Techweb.js index 34ce108ac7f..7b9d0814e6e 100644 --- a/tgui/packages/tgui/interfaces/Techweb.js +++ b/tgui/packages/tgui/interfaces/Techweb.js @@ -1,7 +1,6 @@ -import { filter, map, sortBy } from 'common/collections'; -import { flow } from 'common/fp'; +import { map, sortBy } from 'common/collections'; import { useBackend, useLocalState } from '../backend'; -import { Button, Section, Modal, Dropdown, Tabs, Box, Input, Flex, ProgressBar, Collapsible, Icon, Divider } from '../components'; +import { Button, Section, Modal, Tabs, Box, Input, Flex, ProgressBar, Collapsible, Icon, Divider } from '../components'; import { Window, NtosWindow } from '../layouts'; import { Experiment } from './ExperimentConfigure'; @@ -352,11 +351,6 @@ const TechwebDiskMenu = (props, context) => { onClick={() => act('uploadDisk', { type: diskType })}> Disk → Web - - - - - - )} {blueprints.map((x, i) => ( -
- {x !== null && ( - - )} - - {x !== null && ( - - )} - - }> +
{(x === null && 'Empty') || ( <> Contains the design for {design_cache[x].name}:
diff --git a/tools/UpdatePaths/Scripts/74147_tech_disk_repath.txt b/tools/UpdatePaths/Scripts/74147_tech_disk_repath.txt new file mode 100644 index 00000000000..6b5a0e4c5e6 --- /dev/null +++ b/tools/UpdatePaths/Scripts/74147_tech_disk_repath.txt @@ -0,0 +1,7 @@ +# removes advanced design, and moves bepis tech disks to its new type + +/obj/item/disk/design_disk/adv : /obj/item/disk/design_disk{@OLD} +/obj/item/disk/design_disk/adv/@SUBTPYES : /obj/item/disk/design_disk/@SUBTYPES{@OLD} + +/obj/item/disk/tech_disk/major : /obj/item/disk/design_disk/bepis/remove_tech +/obj/item/disk/tech_disk/spaceloot : /obj/item/disk/design_disk/bepis