DRASCULA adaptation for SCUMMVM.

Preamble:
  Basically, give this game away, share it with your friends. Don't remove this
Readme, or pretend that you wrote it. You can include it in a software
collection, like a Linux distribution or coverdisk (which may be sold), but
using it in things like commercial adventure game collections without asking is
just playing dirty. You can modify the gamedata for such purposes as compressing
audio. This preamble is not legally binding, but is to clarify the intent of
the following licence.

Licence:
 1) You may distribute "DRASCULA" for free on any medium, provided this Readme
and all associated copyright notices and disclaimers are left intact.

 2) You may charge a reasonable copying fee for this archive, and may
distribute it in aggregate as part of a larger and possibly commercial software
distribution (such as a Linux distribution or magazine coverdisk). You must
provide proper attribution and ensure that this Readme and all associated
copyright notices and disclaimers are left intact.

 3) You may not charge a fee for the game itself. This includes reselling the
game as an individual item.

 4) You may modify the game as you wish.  You may also distribute modified
versions under the terms set forth in this licence, but with the additional
requirement that the work is marked with a prominent notice which states that
it is a modified version.

 5) All game content is Copyright (C) Alcachofa Soft S.L.
    The ScummVM engine is Copyright (C) The ScummVM Team (www.scummvm.org).

 6) THE GAME DATA IN THIS ARCHIVE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING AND NOT LIMITED TO ANY IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
