Skip to content

Downloads & unzips all cncnet maps for a given command and conquer game (i.e. Yuri's Revenge)

Notifications You must be signed in to change notification settings

danmindru/cncnet-map-downloader.js

Repository files navigation

npm

cncnet-map-downloader.js ⬇️💻

Downloads all maps from cncnet.org into a directory of your choice.

Usage

Grab the latest binary release on the release page 💽.

Double-click your favorite executable or run the executable through the command line. You will be guided through the options (see demo).

  • By default, it only downloads Yuri (yr) maps, but can be configured to download other types. See config below.
  • If the process is somehow killed, it will resume downloading maps that haven't been downloaded yet (skips previously downlaoded maps).
  • It sorts maps in directories by name (alpha numeric).
  • It checks for duplicate maps (size, id, sha).

Demo

cncnet-map-downloader linux

Windows preview Mac preview

Build it yourself

Clone the repo, then run npm install.
You can start a download with npm run download. Downloads can be configured in package.json under scripts.

Configuration

You can configure the downloader through enviornment variables.

  • MAP_AGE - the age of the map in months (default: not specified - will get all). Example: 12 will get maps that are 1 year old and newer.
  • GAME_TYPE - the type of maps to download (default: yr). Available: ts, ra, d2, td, dta.
  • DESTINATION_DIR - the location to download files (default: cncnet-maps).

Configuration examples

  • Get all Yuri's Revenge / Red Alert 2 maps in a custom directory
DESTINATION_DIR=my-yuri-maps ./cncnet-map-downloader-js-x-x-x-macos
  • Get all Red alert maps
GAME_TYPE=ra ./cncnet-map-downloader-js-x-x-x-macos
  • Get all Tiberian Sun maps, not older than 1 year
GAME_TYPE=ts MAP_AGE=12 ./cncnet-map-downloader-js-x-x-x-macos
Dev config
  • RUN_UNPACKAGED - run the script in unpacked mode[1] (default: false; see npm run download in package.json for an example).
  • DEBUG - print additional debug info.

[1] essentially, run the non-binary script. Requires node v12.9+ & npm install

About the method

Uses the cncnet search endpoint to retrieve all existing maps, then requests each map zip individually with a delay to be nice on the server.

Previously, scarping was considered, but not necessary at this point in time.

Debugging

Run

DEBUG=true MAX_NUMBER_OF_MAPS=5 REQUEST_DELAY=5000 MAP_AGE=1 RUN_UNPACKAGED=true GAME_TYPE=yr DESTINATION_DIR=./cncnet-yuri-maps node --inspect-brk ./scripts/main.js

And open chrome://inspect to debug the node process.

Other art

Check out the cncnet search, where you can search and download maps.