Tuesday, March 10, 2009

How to Package a Scene Release?

Scene releases, particular the pirate or warez scene, publishes their releases in a certain way, which is done pretty much consistent and is done so for many years.

Back to ASCII Art Academy

File Format

The final release format is ZIP. This became the de-facto standard sometimes during the early 1990s. Back then programs were usually not that large and provided via floppy disks. Each floppy disk was usually compressed into one PkZip archive. If the program used multiple floppy disks, then the ZIP file names were numbered.

With the arrival of CD-ROM, release sizes increased. Also, a CD-ROM does not fit on a floppy disk and often the individual files on the CD-ROM were also too large to fit on a single floppy disk. ZIP did not offer the capability to break up archives into multiple files, with each file having a pre-set size to make sure that it fits on to the archive medium that you wanted to use (1.44 MB floppy disks for the most part).

To solve this problem, release groups utilized other packers like ARJ, RAR and later also ACE that were capable of splitting and then packed the individual ARJ/RAR/ACE archive files once more with ZIP.

Full CD-ROMS (ISO images) were not released at first, due to limitations in available bandwidth and HD sizes, but even the CD-RIP releases grew more and more in size over time. When a release had 10 disks, X was often used for the 10th disk to save precious characters in the file name, but it wasn't for long that number of disks for releases would be way bigger than 10 disks. 30, 40 and 50+ disks for a single release became more and more the norm than being the exception.

While release sizes grew, also the 3.5" floppy disks started to become more and more of a novelty and release groups talked with each other and agreed to allow the use of 2.88 MB size volumes for each "disk" or file of the release.

It was not for long that 2.88 MB would also not cut it anymore and the limitation of volume or file size was abolished entirely. Releases today are still split into volumes of different sizes (usually between 5 and 100 MB), but for other, practical, reasons. If for example the release would be 1 GB in size and be released as one file and you or the server where you are downloading the release from do not support "resume" in case the transfer gets interrupted, then you would probably get very mad, if the download of that 1 GB file breaks up after 990 MB, especially if you did this on dial-up or slow DSL, where it takes many hours or days to download that much data.

You would have to start the download all over again, even though only 10 MB are missing. There are also still a number of different storage media available and used that might have a smaller capacity than the full size of a release.

The practical reasons diminish more and more, but release group will probably continue splitting up releases into multiple files. This would be more out of tradition than anything else, but hey, if you have a major release, then you don't want to put it out there in one file only. Single file releases are usually only used for cracks/keygens only, trainers, patches, product updates, dox/manuals and small applications/tools. A release spanning multiple files usually indicates a full release of some sort.

File Names

Also in the early 1990s it became practice that the release filename starts with a file prefix to identify the release group that published the release. Old MS DOS file name restrictions caused the prefix used by groups to be no more than the first 2, 3 to max. 4 characters of the file name. If you had a release that spans multiple disks, with the DOS limit of 8 characters for the file name, only 3-5 characters remained to somewhat identify the name of the actual release itself. 

Some example of file name prefixes used by release groups:

cls = Class
gns = Genesis
pdx = Paradox
rzr = Razor 1911
tdu = TDU Jam
trsi = Tristar & Red Sector Inc.
x- = X-Force

NFO and File_ID.DIZ

The ZIP release file (and not the archive inside the ZIP) usually also contains two small text files. I won't say much  about the purpose of the file FILE_ID.DIZ. If you do not know what it is and what it was/is used for, see this older blog post of mine to learn more about it.

The NFO file name in the archive is usually called like the name of the group and in rare cases like the ZIP release file, with the file extension .NFO to indicate that it is an NFO file. NFO stands for Info or Information. MS Dos file name restrictions limited the length of a file extension to max. 3 characters length.

At the top of the NFO file is usually a logo with the name of the release group using ASCII art. The logo is usually made up of "block ASCII" characters in MS DOS, which some editors and text file viewers under MS Windows and other operating systems cannot display properly my default. The users only sees some garbage characters instead and unable to make out what those characters try to represent. For how to look at NFO files under Windows, see my article about the underground text art styles.

The NFO file contains information about the release itself, instructions for how to install it, information about the use and purpose of the software/application/program (something were release groups typically do a poor job or not include anything at all), latest news about the release group, greetings to other groups and people in the scene, a member list that shows who is currently part of the group and who is not and a  list of "sites" or "boards", in the pre-Internet past Bulletin Board Systems (BBS) and then FTP Servers on the Internet. Contact information might or might not be included in the NFO file as well, such as Email, a web address or an Internet Relay Chat (IRC) channel where members of the group can be found.

Cracktros, Installers, KeyGens and Cracks

In many cases are those the only files in the release, but depending on the release itself and the group that released it, other files might be included as well. Software Key Generators (KeyGens) and Cracks.


KeyGens are simple programs to generate valid software registration information that you enter within the software itself to unlock any limitation that the unregistered version of the tool has. Those information are typically provided to users who actually paid for a license of the software. KeyGens provide the same, but without paying anything.


Cracks are either a program that modifies the installed program to remove any copy protection, or modified files of the original software that the user has to replace after installing the original program on his machine (with the protection still being intact).


Installers were especially popular during the time when stripped down versions of CD-ROM releases were published by release groups. Those CD-RIPS did not include any original install or setup program that was part of the original software release. Also, archive tools like RAR, ARJ and ACE are not part of the operating system and many users do not have it installed on their computers. To this day, many users do not know and never heard about WinRAR or WinACE, let alone installed it on their system.

The Installer is a tool written by the release group to extract the split archives to the program files folder and might also adds any registry entries required by the software to run, if it was needed.

The installer interface never uses the standard Windows Installer SDK that you are used to from installing "normal" software. The scene installers are completely custom build, often using a flashy and colorful designed user interface with a logo of the group and more noticeable with background music, which can be surprising, if you never used a scene installer before.


Cracktro stands for Crack-Intro, the introduction for a cracked piece of software. A Cracktro does not serve any practical purpose that is required in order to distribute, install and use the release by the warez release group.

The sole purpose of a Cracktro is to showcase the release group itself. You can find a large number of video captures of crack intros at my YouTube channel "SACReleases".

The only reference to the release in a Cracktro is one or two lines of some sort of text within the Cracktro with the name and maybe credits for the supplier, cracker and/or packager. In some cases the Cracktro is used to transmit special messages and information to other people in the scene, but for the most part a cracktros purpose is purely promotional.

A cool Cracktro can be watched and enjoyed independently from the release itself. The Cracktro concept and idea dates back to the earliest widely used home computers like the Commodore 64, Atari 800 or Apple II.

Not surprisingly, cracktros evolved to larger productions, called demos, which spun off to become a huge scene by itself without having ties to the warez scene anymore. To learn more about the history of the demo scene, check out this article of mine.

Beyond All This

That's pretty much all that you can find in scene release files. Wait, there is more. It is more the exception today than it is the norm, but that used to be the other way around in the past.

Release ZIP archives can contain text files and executables (.EXE or .COM files) that are not related to the released software nor the release group itself. Those extra files in the ZIP are advertisements for Bulletin Board Systems, FTP Servers, Trading Groups or individuals that got in contact with the ZIP file before you downloaded it to your machine. BBS and FTP servers used to add to every file uploaded to them such an advertisement for themselves. By looking at those ads, you could tell, which board was among the best and fastest around, because if an ad for that board was in a release file when you downloaded it, then it meant that it passed through that other board before it got to where you downloaded it from.

Preparing a Scene Release

Preparing a scene release without any special tools or scripts is a pain in the neck. You first have to pack the to be released software itself with RAR (which is typically used today) and create multiple volumes, if the release is larger.

After that, you have to use WinZIP to pack each of the volumes ones more. You also have to include the NFO file and file_ID.diz in each of the ZIP archives as well.

If you have a release that spans more than a handful volumes, this job becomes somewhat tedious and time consuming, even if you are using the command line options of the packers and not their graphical interface.

Many release groups developed internally tools and scripts to prepare their releases. Depending on the sophistication of the group and the needs, release preparation tools can become quite a piece of software by itself, beyond just doing the final packaging of the release, including easy to perform updates of the content of the NFO and File_ID.DIZ files, text changes in the Cracktro and ability to recompile it with those changes included etc.

Well, I don't have any release preparation tools that I could or would give out to anybody, but I do have a script that does make the packaging at the end of the release preparation process very easy and automated.

Release Creation Script

Here is a MS DOS Batch Script called !ProcREL.bat. You can download the full script here (you have to rename the downloaded file from !ProcREL.bat.txt back to !ProcREL.bat) Script fixed and extended on March 13, 2009. See notes at the and of the post, after the code.

You require the tools WinZIP and WinRAR to be able to use this script. In the case of WinZIP do you require to have the separate command line version of the tool (WZZIP.EXE). In case of WinRAR, the command line version RAR.EXE is usually included in the general release version of the tool.

You have to make small changes to the script in any case. You can change some other settings there as well, if you like to, but that would not be necessary to make it work in general.

If you installed WinZIP and WinRAR to their typical default location on your C-Drive, changes to the lines 7 and 8 of the batch script won't be necessary. Line 9 however has to be changed in any case, unless your NFO file has the name NFOFILE.NFO, which I don't think to be the case. If you just provide the name of the file, make sure that the NFO file is located in the same directory where you execute the script itself. You could also provide the full path to the file and the file name, if you want to. Line 10 only needs to be changed, if you want to include a File_ID.DIZ file from a different location than the location where you run the batch script from.

The script only has to parameters which are both required. The first parameter is the base name of the file name for the release itself, without any extension. File numbers will be added by the script to the file name automatically. File numbers are always 2 characters, starting at 01 and supporting up to 99 files max.

The second parameter is the specification of the content that make up the release itself. This can be the name and path to an individual file or using the DOS Wildcards *, ? etc. to include multiple files. If your release contains sub folders that also have to be included, a change to line 27 of the script will be necessary.



The script would create 98 MB RAR volumes with the Name PRE-RELNXX.RAR from all files in the folder C:\RELEASE, where XX stands for 01 to 99, then create a ZIP file PRE-RELNXX.ZIP for each RAR volume where it also includes the files FILE_ID.DIZ and the specified .NFO file  to each of the ZIP archives.

You have to add the switch "-r"  to the call of RAR.EXE to include sub-folders. Also, the current setting is to create volumes of 98 MB in size, which is pretty much the maximum used by release groups today. You can change that size in line 27 as well, just change the number for "-v98078k" to -vXXk where XX stands for the desired volume size in Kilobytes. If you forget the "k" at the end, the number will be interpreted as bytes instead, creating volumes that would be a bit too small I guess.

Here are the steps the script does perform:

  1. Calls RAR to create volumes from your input file or files.

  2. RAR automatically creates file with the name BASENAME.partXX.rar. I do not like the ".part"  in the name and prefer BASENAMEXX.RAR instead, where XX is a number between 01 and 99. So I rename all the files created by step 1. Note: The batch script is case sensitive. Make sure that the extension generated by RAR is ".rar" all lower-case. I then rename it to .RAR (all upper-case)

  3. Generate a list with all RAR files in the directory and create a ZIP file with the name BASENAMEXX.RAR.ZIP where the RAR archive is added to. Then I also add the NFO and FILE_ID.Diz to each of the new ZIP Files


  5. Clean up (delete) temporary files that were created by the batch script.

   1:  @ECHO OFF
   2:  CLS
   4:  REM =================================================
   5:  REM Please Change Name and Path for the Following Variables
   6:  REM =================================================
   7:  SET ZipExe=C:\PROGRA~1\WinZip\WZZIP.EXE
   9:  SET NFOFile=RoORS.NFO
  12:  REM =================================================
  14:  IF NOT EXIST %NFOFile% goto NONFO
  16:  IF "%1"=="" goto USAGEINFO
  17:  IF "%2"=="" goto USAGEINFO
  18:  set /a zipf=0
  19:  IF "%4"=="ABORT" (
  20:    FOR %%Z in (%1??.ZIP) DO (
  22:    )
  23:  ) ELSE (
  24:    Del /Q "%1??.zip"
  25:    Echo Delete "%1??.zip"
  26:  )
  28:  Echo Delete "%1.part??.rar" (they should not be there though)
  29:  DEL /Q "%1.part??.rar"
  31:  REM =================================================
  32:  REM use "rn" instead of "a" to move files into the archive
  33:  REM -v98078k creates volumes of a bit less than 100 MB 
  34:  REM to fit on a ZIP-100 disk
  35:  REM -m5 sets the compression level. 5 is maximum, 
  36:  REM you can also set it to 0,1 .. 4 which is faster
  38:  Echo Create RAR Archives %1.partXX.RAR for Data Selection %2
  39:  %RARExe% a -v98078k -m5 "%1" "%2"
  42:  REM =================================================
  43:  Echo Rename %1.partXX.RAR to %1xx.RAR
  44:  set /a pos=0
  45:  For /f %%x in ('dir /on /b "%1.part*.rar"') do (
  46:   set /a pos+=1
  47:  )
  48:  if %pos%==0 goto NORAR
  49:  For /L %%n in (1,1,%pos%) do (
  50:    if %%n leq 9 (call :RenRAR %1 0%%n ) else (call :RenRAR %1 %%n )
  51:  )
  53:  Echo.
  54:  Echo =================================================
  55:  Echo %pos% RAR volumes were created!
  56:  Echo Please make now the necessary adjustments to your
  57:  Echo NFO file and File_ID.DIZ files,
  58:  Echo When you are done with it and ready to create the 
  59:  Echo ZIP release files....
  60:  echo.
  61:  pause
  64:  REM =================================================
  65:  Echo Build List of RAR Archives in Folder...
  66:  dir /B /A:-D *.RAR >!RARFiles.txt
  68:  REM =================================================
  69:  Echo Process RAR Archives...
  70:  FOR /F "delims=|" %%i IN (!RARFiles.txt) DO (
  71:     Echo Processing %%i
  72:     IF EXIST "%%i.ZIP" del "%%i.ZIP"
  73:     %ZipExe% -a "%%i.ZIP" "%%i"
  74:     IF EXIST "%NFOFile%" %ZipExe% -a "%%i.ZIP" "%NFOFile%"
  75:     IF EXIST "%FILEID%" %ZipExe% -a "%%i.ZIP" "%FILEID%"
  76:     IF NOT "%3" == "KEEPRAR" (DEL /Q "%%i")
  77:  )
  78:  REM =================================================
  79:  Echo Build List of TEMP ZIP Files...
  80:  Dir /b *.RAR.ZIP>!ZIPfiles.txt
  81:  REM =================================================
  82:  Echo Rename ZIP Files...
  83:  REM =================================================
  84:  FOR /F "delims=." %%i IN (!ZIPfiles.txt) DO (
  85:     Echo Rename %%i.RAR.ZIP to %%i.ZIP
  86:     IF EXIST "%%i.ZIP" del "%%i.ZIP"
  87:     REN "%%i.RAR.ZIP" "%%i.ZIP"
  88:  )
  89:  REM =================================================
  90:  Echo Deleting TEMP Files...
  91:  IF EXIST !ZIPfiles.txt Del /Q !ZIPfiles.txt
  92:  IF EXIST !RARfiles.txt Del /Q !RARfiles.txt
  94:  ECHO =================================================
  95:  ECHO Done!
  96:  ECHO =================================================
  97:  Echo.
  98:  Pause
  99:  goto END
 101:  REM =================================================
 103:  Echo.
 104:  Echo Usage:
 106:  Echo.
 107:  Echo The parameter pairs #3: KEEPRAR / DELRAR and #4: ABORT/OVERWRITE are optional.
 108:  Echo If you want to toggle parameter #4, parameter #3 must be specified as well 
 109:  Echo The default behavior is DELRAR, which means that the RAR archives will be deleted, 
 110:  Echo once they were copied into the release ZIP archive file and OVERWRITE, which means that
 111:  Echo the script deletes any ZIP files that exist in the directory with the same name 
 112:  Echo.
 113:  Echo If you want to keep the copy of the RAR archive in addition to the release ZIP's or if you 
 114:  Echo want the script to abort, if it detects an existing ZIP file with the same name 
 115:  Echo as the script intends to create then you have to set the parameters,
 116:  Echo.
 117:  Echo They are also case sensitive! If they are misspelled, the default behavior is triggered.
 118:  Echo Example:
 119:  Echo !ProcRel.bat X-RELN C:\RELN\*.*
 120:  Echo.
 121:  Echo !ProcRel.bat X-RELN C:\RELN\*.* KEEPRAR ABORT 
 122:  goto END
 124:  REM =================================================
 125:  :NORAR
 126:  echo.
 127:  Echo Error!
 128:  echo Error! No RAR Archives with the file names
 129:  echo %1.partXX.RAR
 130:  echo were Created!
 131:  goto END
 133:  REM =================================================
 134:  :NONFO
 135:  echo.
 136:  Echo Error!
 137:  echo NFO-File %NFOFile% not found!
 138:  goto END
 140:  REM =================================================
 141:  :NODIZ
 142:  echo.
 143:  Echo Error!
 144:  echo File_ID.DIZ file at %FILEID% not found!
 145:  goto END
 147:  REM =================================================
 149:  echo.
 150:  Echo Error! (ABORT Parameter specified)
 151:  Echo Current directory contains already one or more ZIP files 
 152:  Echo with the name: %1??.ZIP 
 153:  goto END
 155:  REM =================================================
 156:  :RenRAR
 157:   IF EXIST "%1.part%2.rar" ren "%1.part%2.rar" "%1%2.RAR"
 158:   echo ren "%1.part%2.rar" "%1%2.RAR"
 160:  REM =================================================
 161:  :END
 162:  REM Finished!
 163:  Echo.
 164:  Goto :eof

I hope that you find this little BATCH script useful.

NOTE March 13, 2009:

I found a bug in my script, which I fixed in my blog post and in the version for download. While I was fixing the bug I also found another small issue and also thought about some options to give you control over a few behaviors of the batch. 

The first addition is the PAUSE of the script after it created the RAR archive volumes. It will tell you how many RAR files were created that you can make the necessary modifications to your prepared File_ID.diz and NFO file.

Once you did that, simply press enter in the DOS window and the script will continue.

I also added two optional parameters to the batch. The first one lets you specify that you would like to keep the copy of the RAR archive volumes in addition to the ZIP files where the volumes are included, instead of deleting them once zipped. The second parameter lets you specify what you want the batch to do, if it detects ZIP archives with the same file name as the script intends to create. The default is delete and re-create, but if you prefer that the script aborts, you can now specifty it via a command parameter.

Back to ASCII Art Academy


Carsten aka Roy/SAC

No comments:

Post a Comment

Hi, thanks for taking the time to comment at my blog.

Due to spam issues comments are not immediately posted on the site and require my manual approval first, before they become visible.

I try to approve comments as quickly as possible and usually within 24 hours.

To be notified about follow up comments that are made after yours, use the subscribe option with your email address and you will receive an email alert, if somebody else comments at this post in the future.

Also check out the rest of the website beyond this blog, visit RoySAC.com. Also see my YouTube channels, SACReleases for intros and demos.

Carsten aka Roy/SAC

Note: Only a member of this blog may post a comment.