Yet Another Research Tree (YART)

If you liked this item, please rate it up on Steam Workshop page.

Author: SeoHyeon

Last revision: 27 Jun at 07:12 UTC

File size: 11.33 MB

On Steam Workshop

Description:
Yet Another Research Tree (YART)

Yet Another Research Tree replaces the vanilla research tree with a cleaner, far more readable version.

I’m a heavy modpack user running 450+ mods. The problem was that neither the vanilla research tree nor existing research tree mods made it easy to find the one research I actually needed among hundreds of entries. So I started building this mod myself. It has been refined over a long time to let you quickly find the research you want, even in a tangle of hundreds of projects.

Features
  • A more compact, readable research tree — node placement is cleaned up so you can grasp the flow at a glance.
  • Per-tab or unified view — browse research split by tab like vanilla, or lay out every research project on a single screen.
  • Research queue — line up your next projects in advance and keep researching the moment one finishes, with no downtime.
  • Parallel research channels — research from mods like the Anomaly DLC and Vanilla Gravship Expanded can be progressed at the same time as your regular research.
  • Optimized rendering — zoom all the way out and view hundreds of research nodes at once with zero lag.
  • Optimized search engine — search by mod name, item, plant, research name, and more, with instant response even in a heavy modpack.
  • Customizable colors & colorblind support
  • Built for heavy modpacks — developed and tested in a heavily modded environment, just like the one I play with.

Compatibility
  • Anomaly DLC / Vanilla Gravship Expanded — Supported (provides parallel research channels)
  • World Tech Level — Supported (research beyond your world tech level is automatically hidden from the tree)
  • Semi Random Research — Supported
  • Multiplayer – Supported (provides MP adaptor)
  • Other research tree mods — Not supported (use only one research tree mod)
  • Compatible with existing save files.

Under the Hood

So how is the tree laid out?

A research tree is, at its core, a directed acyclic graph (DAG). Drawing a directed graph cleanly is a problem people have studied for decades, and it’s genuinely hard (NP-hard). YART implements the well-established Sugiyama framework, adapted specifically for RimWorld’s research tree. Here’s the gist:

  • Split into columns by era. Each research project is first grouped into an "era band" in the order Neolithic → Medieval → Industrial → Spacer…, and within each band, columns are assigned left to right by following prerequisite relationships.
  • Keep it from getting too tall. YART adaptively computes a "height budget" for each column based on the overall size of the graph, pushing research out of overcrowded columns into neighboring ones to spread everything into a pleasant aspect ratio.
  • Minimize crossing lines. The number of arrow crossings swings wildly depending on how nodes are ordered top-to-bottom within a column. YART generates several candidate layouts from different starting points and keeps the one with the fewest crossings, then refines it with adjacent-node swapping (wmedian, transpose) — and for small clusters, even brute-forces every permutation (subset DP) — to cut down on tangled lines as much as possible.
  • Bundle lines into single channels. Arrows fanning out from the same research are merged so they flow through one shared channel, with a final post-processing pass that smooths and straightens these bundles.

How is search so fast?

In an environment with hundreds of mods, scanning every research entry on each keystroke would lag on every character you type — there are mod names, research names, items, plants and more to check, which adds up to millions of characters in a large modpack. It’s the classic needle-in-a-haystack problem: searching is slow because you have to comb through the entire haystack. Surprisingly, though, there’s a way to find the needle without searching the whole haystack — a data structure called a suffix array. YART implements its own suffix array to deliver near-instant search results. On top of that, it adds quality-of-life search features for several languages: jamo decomposition for Korean, phonetic (romaji) search for Japanese, pinyin search for Chinese, umlaut-insensitive search for German, and accent-insensitive search for Vietnamese and French — so you can find exactly what you’re after.

GitHub: https://github.com/csh1668/YetAnotherResearchTree

Download
Required items:

Click the title to search on this site.


HarmonySteam Workshop