制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A web-based mod generator for Diablo 2: Resurrected that shuffles all skill trees across every class to create unique, deterministic, and shareable playthroughs.
Live at d2rrandomizer.com
Enter a seed number, choose optional mutations, and download a ready-to-install ZIP mod. Every skill from every class — Amazon, Sorceress, Necromancer, Paladin, Barbarian, Druid, Assassin, and Warlock — gets redistributed across all eight classes using a seeded PRNG. The same seed always produces the same result, so you can share a run with friends.
Skeleton Mastery shares a class with at least one of Raise Skeleton or Raise Skeletal Mage. Other summons still shuffle independently. Mastery's summon bonuses stay fixed instead of becoming random synergies.
The mod is offline-safe: it only touches skill tree files and does not require going online, so it will not flag your Battle.net account.
Mutations are optional difficulty modifiers (e.g. monsters move 50% faster, all skills cost double mana) that stack on top of the shuffle. Two mutations rotate each week as the weekly challenge.
| Layer | Technology |
|---|---|
| Frontend | Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4 |
| Backend | Next.js API routes (Node.js) |
| Image processing | sharp (sprite assembly) |
| ZIP packaging | archiver / adm-zip |
| Hosting | Single-instance Node on a Hostinger VPS (PM2 + nginx) |
git clone https://github.com/<your-org>/d2r-skill-randomizer.git
cd d2r-skill-randomizer
npm install
npm run dev
Open http://localhost:3000.
The data/ directory is already included in the repository — it contains all the D2R game data TXT files the randomizer reads. You do not need a copy of the game to run the dev server or generate mods.
npm run build
npm start
src/
app/ # Next.js pages and API routes
api/randomize/ # POST — runs the full randomization pipeline
api/preview/ # GET — returns skill tree preview JSON
api/download/ # GET — returns the generated ZIP
api/counter/ # GET — total generation count
components/ # Shared UI components
challenge/ # Weekly challenge page
generate/ # Main generator page
archive/ # Past weekly challenges
lib/
randomizer/ # Core randomization engine
tree-randomizer.ts # Assigns skill trees to classes
skill-placer.ts # Places skills within trees, respects pinned skills
synergy-updater.ts # Remaps synergy references to co-located skills
prereq-assigner.ts # Rebuilds prerequisite chains
mutations/ # One file per mutation implementation
mutations/
registry.ts # Mutation definitions + 26-week rotation schedule
sprites/
icon-assembler.ts # Assembles per-class skill icon sprites
tree-stitcher.ts # Stitches full skill tree UI sprites
data-loader.ts # Parses TXT game data files into JS objects
zip-builder.ts # Packages mod files into the downloadable ZIP
data/
txt/ # D2R game data files (tab-separated)
json/ # Pre-parsed JSON cache (skills.json, skilldesc.json)
skill_tree_grid.csv # 6×3 grid layout for each class's three skill trees
public/
mutations/ # Mutation card images (.webp)
Seed — A Mulberry32 PRNG is initialized from the user's seed number. The same seed always produces the same output.
Tree assignment — Each class is assigned three skill trees drawn from the pool of 21 original trees (one from each of three index slots). Trees can be shared across classes.
Skill placement — ~45 skills are pinned to their original class (shapeshifting forms, dual-wield, etc.). The remaining ~195 skills are shuffled into the available slots, sorted by required level so low-level skills occupy the top rows.
Synergy remapping — Synergy formulas (skill('Name'.blvl)) are regex-replaced to reference skills that are actually present in the same tree.
Prerequisite rebuilding — Prerequisites are reassigned so that each skill in a row requires a skill from the row above it.
Sprite stitching — Skill icon sprites and skill tree UI sprites are assembled using sharp.
ZIP packaging — Modified TXT files and sprites are packaged as d2rr_export_[seed].zip, ready to drop into the D2R mods folder.
The generator's Randomize monsters checkbox moves eligible ordinary
monster families across acts and gives each replacement destination-appropriate
levels and drops. The game's level scaling adjusts health, damage, defense,
attack rating and XP using each donor's own stat multipliers. Separate limits
handle resistances, status duration, critical hits and pack size. Starting-area
Normal resistances are capped at 25%, so imported monsters cannot bring immunities.
Nightmare and Hell retain each donor's original resistances and immunities without caps.
It uses a separate seeded RNG, so enabling
it does not change the skill trees. Bosses, scripted encounters and unsupported
families keep their original spawns. The option defaults on for Season Beta Race
and off for Turbo. Shared links preserve the selected setting; older links without
enemyShuffle=1 keep it off. Mutation challenges enable it automatically starting
with Challenge 15 (September 21, 2026); challenges 1–14 keep it off on replay.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗