Files
Bubberstation/code/__DEFINES/research.dm
Andrew 5f36ef1d6e New Tech Tree (#84024)
## About The Pull Request

Reshuffles the tech tree nodes, adding reagent purity and cybernetic
organ scan experiments. The total point requirements barely changed.

Made the discount experiments unlock nodes for free, instead of
providing partial discounts, to provide more incentive to actually do
them.

Also devided all points by the amount generated per second, for
convenience. Now points correspond to seconds.

<details> 
  <summary>New tech tree</summary>
<img width="4320" alt="Tech New"
src="https://github.com/tgstation/tgstation/assets/3625094/77afdec7-9df3-47b7-8df0-5b9261e9e0d6">
</details>

## Why It's Good For The Game

- Breaks bloated general nodes into more specialized nodes, making the
tree more balanced
- Combines scattered nodes dedicated to a single design into specialized
nodes, reducing the number of nodes
- Reshuffles the unlocks within specialized tree to adjust progression
on some trees to follow the idead: Cheap nodes first, then nodes that
require experiments or nodes of neighbouring trees, then expensive nodes
with end-game tech.
- You no longer need a dissection experiment to unlock a microwave,
every experiment is relevant to the tree unlocked by it
- With specialized nodes, it is easier to pick a node for the new things
that people add
- Better foundation for potential per-department point system. It will
be easier to put it on top of a cleaner tree
- The nodes are separated in tiers, with progressively increasing costs,
so that early tech is cheap and easy to research with just points, but
later tech is more expensive, making the discount experiments for those
more likely to be performed.

## Changelog

🆑
balance: Reshuffled tech tree, making nodes more specialized
qol: Research points devided by the amount generated per second, so now
research points correspond to seconds
add: Introduced reagent purity scan experiments (required for Cryostasis
node)
add: Introduced synthetic organ scan experiment (required for top tier
cyber organs)
add: Added a variant of machinery scan experiment that accepts any
machines with upgraded parts (required for tier 3 parts)
del: Removed material scanning experiments from the tech tree
/🆑
2024-06-17 13:21:48 -04:00

83 lines
3.9 KiB
Plaintext

/// For instances where we don't want a design showing up due to it being for debug/sanity purposes
#define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN"
//! Techweb names for new point types. Can be used to define specific point values for specific types of research (science, security, engineering, etc.)
#define TECHWEB_POINT_TYPE_GENERIC "General Research"
//! Amount of points required to unlock nodes of corresponding tiers
#define TECHWEB_TIER_1_POINTS 40
#define TECHWEB_TIER_2_POINTS 80
#define TECHWEB_TIER_3_POINTS 120
#define TECHWEB_TIER_4_POINTS 160
#define TECHWEB_TIER_5_POINTS 200
//! Amount of points gained per second by a single R&D server, see: [research][code/controllers/subsystem/research.dm]
#define TECHWEB_SINGLE_SERVER_INCOME 1
//! Swab cell line types
#define CELL_LINE_TABLE_SLUDGE "cell_line_sludge_table"
#define CELL_LINE_TABLE_MOLD "cell_line_mold_table"
#define CELL_LINE_TABLE_MOIST "cell_line_moist_table"
#define CELL_LINE_TABLE_BLOB "cell_line_blob_table"
#define CELL_LINE_TABLE_CLOWN "cell_line_clown_table"
#define CELL_LINE_TABLE_ALGAE "cell_line_algae_table"
//! Biopsy cell line types
#define CELL_LINE_TABLE_BEAR "cell_line_bear_table"
#define CELL_LINE_TABLE_BLOBBERNAUT "cell_line_blobbernaut_table"
#define CELL_LINE_TABLE_BLOBSPORE "cell_line_blobspore_table"
#define CELL_LINE_TABLE_CARP "cell_line_carp_table"
#define CELL_LINE_TABLE_CAT "cell_line_cat_table"
#define CELL_LINE_TABLE_CHICKEN "cell_line_chicken_table"
#define CELL_LINE_TABLE_COCKROACH "cell_line_cockroach_table"
#define CELL_LINE_TABLE_CORGI "cell_line_corgi_table"
#define CELL_LINE_TABLE_COW "cell_line_cow_table"
#define CELL_LINE_TABLE_MOONICORN "cell_line_moonicorn_table"
#define CELL_LINE_TABLE_GELATINOUS "cell_line_gelatinous_table"
#define CELL_LINE_TABLE_GLOCKROACH "cell_line_glockroach_table"
#define CELL_LINE_TABLE_GRAPE "cell_line_grape_table"
#define CELL_LINE_TABLE_HAUBEROACH "cell_line_hauberoach_table"
#define CELL_LINE_TABLE_MEGACARP "cell_line_megacarp_table"
#define CELL_LINE_TABLE_MOUSE "cell_line_mouse_table"
#define CELL_LINE_TABLE_PINE "cell_line_pine_table"
#define CELL_LINE_TABLE_PUG "cell_line_pug_table"
#define CELL_LINE_TABLE_SLIME "cell_line_slime_table"
#define CELL_LINE_TABLE_SNAKE "cell_line_snake_table"
#define CELL_LINE_TABLE_VATBEAST "cell_line_vatbeast_table"
#define CELL_LINE_TABLE_NETHER "cell_line_nether_table"
#define CELL_LINE_TABLE_GLUTTON "cell_line_glutton_table"
#define CELL_LINE_TABLE_FROG "cell_line_frog_table"
#define CELL_LINE_TABLE_AXOLOTL "cell_line_axolotl_table"
#define CELL_LINE_TABLE_WALKING_MUSHROOM "cell_line_walking_mushroom_table"
#define CELL_LINE_TABLE_QUEEN_BEE "cell_line_bee_queen_table"
#define CELL_LINE_TABLE_BUTTERFLY "cell_line_butterfly_table"
#define CELL_LINE_TABLE_MEGA_ARACHNID "cell_line_table_mega_arachnid"
//! All cell virus types
#define CELL_VIRUS_TABLE_GENERIC "cell_virus_generic_table"
#define CELL_VIRUS_TABLE_GENERIC_MOB "cell_virus_generic_mob_table"
//! General defines for vatgrowing
/// Past how much growth can the other cell_lines affect a finished cell line negatively
#define VATGROWING_DANGER_MINIMUM 30
#define SCIPAPER_COOPERATION_INDEX 1
#define SCIPAPER_FUNDING_INDEX 2
#define SCIENTIFIC_COOPERATION_PURCHASE_MULTIPLIER 0.01
/// How much money is one point of gain worth.
#define SCIPAPER_GAIN_TO_MONEY 125
///Connects the 'server_var' to a valid research server on your Z level.
///Used for machines in LateInitialize, to ensure that RND servers are loaded first.
#define CONNECT_TO_RND_SERVER_ROUNDSTART(server_var, holder) do { \
var/list/found_servers = SSresearch.get_available_servers(get_turf(holder)); \
var/obj/machinery/rnd/server/selected_server = length(found_servers) ? found_servers[1] : null; \
if (selected_server) { \
server_var = selected_server.stored_research; \
}; \
else { \
var/datum/techweb/station_fallback_web = locate(/datum/techweb/science) in SSresearch.techwebs; \
server_var = station_fallback_web; \
}; \
} while (FALSE)