-Release Version 2.2.0 [?? ??? ????]
------------------------------------
+Pre-Release Version 2.2.0rc1 [31 DEC 2002]
+------------------------------------------
- level series artwork now configurable via level series config file
- single graphics and animations can now be replaced with different
ones (independantly from default image files which may be larger)
- element animation length, speed and mode now freely configurable
- automatic tape playing function for game engine and level testing
- missing steel wall graphic added (thanks to Equinox Tetrachloride)
+ - added new contributed levels from the following players:
+ + Abby King (14 levels)
+ + Andreas Buschbeck (80 levels with complete artwork set)
+ + David Hutchinson (25 levels with graphics set)
+ + Equinox Tetrachloride (150 levels guaranteed to be solvable)
+ + Sylvan Hancock (39 levels)
Release Version 2.1.1 [13 AUG 2002]
-----------------------------------
- default keys for "snap field" and "place bomb" fixed for Mac OS X
- added new contributed levels from the following players:
+ Alan Bond
- + Gerrit Holl
+ + Gerrit Holl and Timen van den Berg
Release Version 2.1.0 [05 AUG 2002]
-----------------------------------
------------------------------------------
- new game elements
-Prerelease Version 0.9b [4 NOV 1995]
-------------------------------------
+Pre-Release Version 0.9b [4 NOV 1995]
+-------------------------------------
- the game is now completely Freeware
- the game is now better playable by keyboard
(in the last version, the player was making more than
- FreeBSD sound and joystick support (thanks to Jean-Marc
Zucconi)
-Prerelease Version 0.9 [23 OCT 1995]
-------------------------------------
+Pre-Release Version 0.9 [23 OCT 1995]
+-------------------------------------
- first (pre)release version
{ "conveyor_belt2_right.active.ypos", "5" },
{ "conveyor_belt2_right.active.frames", "8" },
{ "conveyor_belt2_right.active.delay", "2" },
- { "conveyor_belt2_right.active.delay", "2" },
{ "conveyor_belt2_switch_left", "RocksDC.pcx" },
{ "conveyor_belt2_switch_left.xpos", "1" },
{ "conveyor_belt2_switch_left.ypos", "12" },
{ "conveyor_belt3_right.active.ypos", "8" },
{ "conveyor_belt3_right.active.frames", "8" },
{ "conveyor_belt3_right.active.delay", "2" },
- { "conveyor_belt3_right.active.delay", "2" },
{ "conveyor_belt3_switch_left", "RocksDC.pcx" },
{ "conveyor_belt3_switch_left.xpos", "2" },
{ "conveyor_belt3_switch_left.ypos", "12" },
{ "conveyor_belt4_right.active.ypos", "11" },
{ "conveyor_belt4_right.active.frames", "8" },
{ "conveyor_belt4_right.active.delay", "2" },
- { "conveyor_belt4_right.active.delay", "2" },
{ "conveyor_belt4_switch_left", "RocksDC.pcx" },
{ "conveyor_belt4_switch_left.xpos", "3" },
{ "conveyor_belt4_switch_left.ypos", "12" },
-#define COMPILE_DATE_STRING "[2002-12-30 03:03]"
+#define COMPILE_DATE_STRING "[2003-01-02 01:11]"
if (src_x < 0 || src_y < 0 ||
src_x + TILEX > src_bitmap->width ||
src_y + TILEY > src_bitmap->height)
- Error(ERR_EXIT, "InitGraphicInfo: first frame of graphic animation object %d outside of image bitmap file '%s' (%d,%d)",
- i, src_bitmap->source_filename, src_x, src_y);
+ {
+ Error(ERR_RETURN, "custom artwork configuration error:");
+ Error(ERR_RETURN, "- config file: '%s'",
+ getImageConfigFilename());
+ Error(ERR_RETURN, "- config token: '%s'",
+ getTokenFromImageID(i));
+ Error(ERR_RETURN, "- image file: '%s'",
+ src_bitmap->source_filename);
+ Error(ERR_EXIT, "error: first animation frame out of bounds (%d,%d)",
+ src_x, src_y);
+ }
last_frame = new_graphic_info[i].anim_frames - 1;
getGraphicSource(i, last_frame, &src_bitmap, &src_x, &src_y);
if (src_x < 0 || src_y < 0 ||
src_x + TILEX > src_bitmap->width ||
src_y + TILEY > src_bitmap->height)
- Error(ERR_EXIT, "InitGraphicInfo: last frame of graphic animation object %d outside of image bitmap file '%s' (%d,%d)",
- i, src_bitmap->source_filename, src_x, src_y);
+ {
+ Error(ERR_RETURN, "custom artwork configuration error:");
+ Error(ERR_RETURN, "- config file: '%s'",
+ getImageConfigFilename());
+ Error(ERR_RETURN, "- config token: '%s'",
+ getTokenFromImageID(i));
+ Error(ERR_RETURN, "- image file: '%s'",
+ src_bitmap->source_filename);
+ Error(ERR_EXIT, "error: last animation frame out of bounds (%d,%d)",
+ src_x, src_y);
+ }
}
}
#include "image.h"
#include "pcx.h"
#include "misc.h"
+#include "setup.h"
/* ========================================================================= */
return img_info[graphic]->bitmap;
}
+char *getTokenFromImageID(int graphic)
+{
+ struct FileInfo *file_list = (struct FileInfo *)image_info->file_list;
+
+ return file_list[graphic].token;
+}
+
+char *getImageConfigFilename()
+{
+ return getCustomArtworkConfigFilename(image_info->type);
+}
+
void InitImageList(struct ConfigInfo *config_list,
struct ConfigInfo *config_suffix_list,
int num_file_list_entries)
struct FileInfo *getCurrentImageList();
Bitmap *getBitmapFromImageID(int);
+char *getTokenFromImageID(int);
+char *getImageConfigFilename();
void InitImageList(struct ConfigInfo *, struct ConfigInfo *, int);
void ReloadCustomImages();
void FreeAllImages();
unsigned long playing_current = Counter();
int longest = 0, longest_nr = audio.first_sound_channel;
+#if 0
+#if DEBUG
+ /* print some debugging information about audio channel usage */
for (i=audio.first_sound_channel; i<audio.num_channels; i++)
{
Error(ERR_RETURN, "Mixer_InsertSound: %d [%d]: %ld (%ld)",
i, mixer[i].active, mixer[i].data_len, (long)mixer[i].data_ptr);
}
+#endif
+#endif
for (i=audio.first_sound_channel; i<audio.num_channels; i++)
{
return NULL;
}
- if (header.num_channels != 1)
+ if (header.num_channels != 1 &&
+ header.num_channels != 2)
{
Error(ERR_WARN, "sound file '%s': number of %d channels not supported",
filename, header.num_channels);
#define PROGRAM_VERSION_MAJOR 2
#define PROGRAM_VERSION_MINOR 2
#define PROGRAM_VERSION_PATCH 0
-#define PROGRAM_VERSION_STRING "2.2.0-rc1"
+#define PROGRAM_VERSION_STRING "2.2.0rc1"
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
#define PROGRAM_AUTHOR_STRING "Holger Schemel"