rocksndiamonds-3.3.0.0
authorHolger Schemel <info@artsoft.org>
Tue, 25 May 2010 20:43:09 +0000 (22:43 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:59:16 +0000 (10:59 +0200)
* fixed missing memory allocation in SP engine when saving engine data
  for non-SP game engine snapshots (which also stores SP engine part)

27 files changed:
CHANGES [deleted file]
CREDITS
ChangeLog
HARDWARE [deleted file]
Makefile
src/Makefile
src/conftime.h
src/files.c
src/game_sp/BugsTerminals.c
src/game_sp/BugsTerminals.h
src/game_sp/DoGameStuff.c
src/game_sp/DoGameStuff.h
src/game_sp/Explosions.c
src/game_sp/FakeDeclares.c [deleted file]
src/game_sp/FakeDeclares.h [deleted file]
src/game_sp/Globals.c
src/game_sp/Globals.h
src/game_sp/MainGameLoop.c
src/game_sp/Makefile
src/game_sp/Murphy.c
src/game_sp/file.c
src/game_sp/global.h
src/game_sp/vb_lib.c
src/game_sp/vb_lib.h
src/main.h
src/screens.c
src/tools.c

diff --git a/CHANGES b/CHANGES
deleted file mode 100644 (file)
index e7218e4..0000000
--- a/CHANGES
+++ /dev/null
@@ -1,437 +0,0 @@
-Release Version 3.1.1 [16 AUG 2005]
------------------------------------
-       - added tutorial level set created by Aaron Davidson
-       - added editor element descriptions written by Aaron Davidson
-       - added native game engine for Emerald Mine (Club) levels
-       - added level skipping functionality to main menu
-       - added support for dumping small-sized level sketches from editor
-       - added use of "editorsetup.conf" for different level sets
-       - lots of bugfixes and internal engine changes (see ChangeLog)
-
-Release Version 3.1.0 [07 JUN 2004]
------------------------------------
-       - fixed obvious bug with wrong "Murphy" graphics (when digging etc.)
-       - fixed a lot of Emerald Mine and Supaplex game engine emulation bugs
-       - re-converted Emerald Mine and Supaplex levels to apply engine fixes
-       - changed default snap/drop keys from left/right Shift to Control keys
-       - added level loader for loading native Emerald Mine levels
-       - added level loader for loading native Supaplex packed levels
-       - added group elements for multiple matches and random element creation
-       - added elements that can be digged or left behind by custom elements
-       - added element "Sokoban field with player" missing for Sokoban levels
-       - added custom element features to allow building of teleporters
-       - added option to use step limit instead of time limit for level
-       - added pressing "space" key as valid action to select menu options
-       - added clipboard (cut and paste buttons) for custom and group elements
-       - added shortcut to dump brush (type ":DB" in editor) for use in forum
-       - added network multiplayer code for Windows (still only command line)
-       - replaced old tutorial level set with far better one by Niko Böhm
-       - "contributions" levels now separate package to make base set smaller
-       - too many bugfixes and changes to list them all here (see ChangeLog)
-
-Release Version 3.0.8 [14 DEC 2003]
------------------------------------
-       - added "musicinfo.conf" for menu and level music configuration
-       - added "editorsetup.conf" for editor element list configuration
-       - added "copy" and "exchange" functions for custom elements to editor
-       - added configurable "bored" and "sleeping" animations for the player
-       - added "awakening" sound for player when waking up after sleeping
-       - added configurable element animations for info screen
-       - added configurable music credits for info screen
-       - added configurable level set information for info screen
-       - added warnings for undefined token values in artwork config files
-       - menu entries now also selectable by clicking on entry text
-       - better sniksnak turning movement (two steps instead of only one)
-       - fixed turning movement of butterflies and fireflies (no frame reset)
-       - fixed bug with wrong default impact sound for colored emeralds
-       - fixed bug with double nut cracking sound
-       - fixed a very nasty bug in dragon turning code in TurnRoundExt()
-       - finally fixed tape recording when player is created from CE change
-       - added new contributed levels from the following players:
-         + Audrius Saikunas (4 levels)
-         + Efraim Yawitz (20 levels)
-         + Krystian Abramowicz (100 levels)
-         + Paul E Collins (formerly known as Equinox Tetrachloride; 64 levels)
-         + Sebastian Simon (12 levels)
-       - amazing new level set:
-         + "BD2K3" from Alan Bond
-         + 43 levels full of BD nostalgia, action and fantastic effects
-         + overwhelming use of custom elements
-         + complete artwork set with graphics, sounds and music
-         + available as a separate download from www.artsoft.org
-       - another great level set was updated:
-         + "jue2" from Jürgen Bonhagen
-         + 15 new mind-boggling levels full of new challenges for your brain
-         + complete artwork set with graphics and sounds
-         + available for downloading from "http://www.jb-line.de/rnd.html"
-
-Release Version 3.0.7 [10 NOV 2003]
------------------------------------
-       - fixed incorrectly displayed animation for attacking dragon
-       - fixed bug with not setting initial gravity for each new game
-       - fixed bug with teleportation of player by custom element change
-       - fixed bug with player not getting smashed by rock sometimes
-       - fixed serious bug in code for delayed element pushing
-       - fixed little bug in animation frame selection for pushed elements
-       - fixed bug when pushing element that can move away to the side
-       - fixed tape recording when player is created from CE element change
-       - fixed player animation frame reset for identical animations
-       - unavailable setup options now marked as "n/a" instead of "off"
-       - prevent "extended" changed elements from delay change in same frame
-       - speed-up of reading config file for verbose output
-       - added configuration option for opening and closing Supaplex exit
-       - added configuration option for moving up/down animation for Murphy
-       - added animation for "turning" action (for elements with move delay)
-       - added turning animations for bug, spaceship and sniksnak
-
-Release Version 3.0.6 [06 OCT 2003]
------------------------------------
-       - fixed bug when initializing font graphic structure
-       - fixed bug with animation mode "pingpong" when using only 1 frame
-       - fixed bug with extended change target introduced in 3.0.5
-       - fixed bug where passing over moving element doubles player speed
-       - fixed bug with elements continuing to move into push direction
-       - fixed bug with duplicated player when dropping bomb with shield on
-       - fixed switching bug (resetting flag when not switching but not idle)
-       - fixed element tokens for certain file elements with ".active" etc.
-       - added "switching" event for custom elements ("pressing" only once)
-       - added support for MP3 music for SDL version through SMPEG library
-
-Release Version 3.0.5 [29 SEP 2003]
------------------------------------
-       - fixed bug in multiple config pages loader code that caused crashes
-       - enhanced (remaining low-resolution) Supaplex graphics
-       - active/inactive sides configurable for custom element changes
-       - new movement type "move when pushed" available for custom elements
-       - now four envelope elements available
-       - font, background, animation and sound for envelope now configurable
-       - main menu doors opening/closing animation type now configurable
-
-Release Version 3.0.4 [13 SEP 2003]
------------------------------------
-       - fixed bug in multiple config pages code that caused crashes
-       - fixed bug in custom definition of crumbled element graphics
-
-Release Version 3.0.3 [08 SEP 2003]
------------------------------------
-       - fixed bug (missing array boundary check) which could crash the game
-       - fixed problem with setting mouse cursor in SDL version in fullscreen
-       - fixed problem with flickering when drawing toon animations
-       - fixed problem with player animation when snapping and moving
-       - fixed several nasty bugs that may have caused crashes on some systems
-       - added envelope content which gets displayed when collecting envelope
-       - added multiple change event pages for custom elements
-       - added support for loading various music formats through SDL_mixer
-       - added music to Supaplex classic level set
-
-Release Version 3.0.2 [22 AUG 2003]
------------------------------------
-       - fixed bug with messing up custom element properties in 3.0.0 levels
-       - fixed bug with choosing wrong engine version when playing tapes
-       - fixed bug with creating inaccessible elements at player position
-       - fixed bug with not finding current level artwork directory
-
-Release Version 3.0.1 [18 AUG 2003]
------------------------------------
-       - fixed bug that caused a crash at startup under Solaris
-       - fixed bug that caused the DOS version not finding its files
-       - fixed bug with missing graphic for active red disk bomb
-       - added custom element property for dropping collected elements
-       - added another 128 custom elements for those who can't get enough
-       - fixed PCX files in the DOS version ("classic" graphics only)
-
-Release Version 3.0.0 [05 AUG 2003]
------------------------------------
-       - final version bumped to 3.0.0 due to the massive changes
-       - graphics and sounds now completely and dynamically customizable
-       - custom elements now have lots of configurable properties
-       - advanced custom element settings for powerful, self-created elements
-       - fixed Supaplex gravity tubes
-       - fixed very nasty bug in SDL_image (and X11) PCX loading routine
-       - fixed some very nasty bugs in bitmap zoom routine
-       - fixed very nasty bug in level/artwork loading routine
-       - added new contributed levels and artwork from the following players:
-         * in the section "Contributions - 2002":
-            + Abby King (14 levels)
-           + Alan Bond (30 levels, all solvable, BD style artwork set)
-           + David Hutchinson (25 levels, artwork set)
-           + Equinox Tetrachloride (50 levels + 100 levels, all solvable)
-           + Sylvan Hancock (39 levels)
-         * in the section "Contributions - 2003":
-           + Andreas Buschbeck (85 levels, all solvable, complete artwork set)
-           + Edward Leuf (10 levels, all solvable, artwork set)
-           + Emanuel Schmieg (22 levels, all solvable, complete artwork set)
-           + Gavin Davidson (47 levels)
-           + Jorge Jordan (17 levels)
-           + Rafael Gatti (17 levels)
-           + Randy Johannessen (17 levels)
-           + Richard Valvona (3 levels)
-           + Sam Bateman (35 levels)
-       - great new levels with full artwork are now available from:
-         + Juergen Bonhagen (with complete artwork set)
-           * download these levels from "http://www.jb-line.de/"
-         + Andreas Buschbeck (with complete artwork set)
-           * download these levels from "http://home.vr-web.de/~abuschbeck/"
-
-Pre-Release Version 2.2.0rc7 [17 JUL 2003]
-------------------------------------------
-       - fixed bug when picking element in the editor
-       - added more custom elements properties
-       - fixed bugs when smashing penguin
-
-Pre-Release Version 2.2.0rc6 [22 APR 2003]
-------------------------------------------
-       - fixed small font configuration directive bug
-       - tape recorder font slightly enhanced (now complete character set)
-       - added missing font configuration source file
-       - added updated CHANGES file ;-)
-
-Pre-Release Version 2.2.0rc5 [20 APR 2003]
-------------------------------------------
-       - added generic selectbox gadget
-       - added special mouse cursor for playfield while playing
-       - font handling now more flexible (support for ISO-Latin-1 fonts)
-       - font graphics adjusted accordingly
-
-Pre-Release Version 2.2.0rc4 [30 MAR 2003]
-------------------------------------------
-       - changes for menu configuration
-       - not officially announced pre-release version
-       - Emerald Mine text font now much better quality
-
-Pre-Release Version 2.2.0rc3 [11 FEB 2003]
-------------------------------------------
-       - first custom element properties
-       - animation configuration for dynamically defined element actions
-       - automatically downscaled graphics (small graphics not needed anymore)
-       - ".EDITOR" and ".PREVIEW" suffixes for special editor/preview graphics
-       - toon animations (and number of toons) now fully configurable
-
-Pre-Release Version 2.2.0rc2 [13 JAN 2003]
-------------------------------------------
-       - added support for stereo WAV sound files
-       - moving objects can now have arbitrary animation length
-       - new batch command for dumping level information
-       - added support for background images for all menu screens
-       - added 128 custom elements that can be decorated with own graphics
-       - added some example levels showing how to create custom artwork
-       - added new contributed levels from the following players:
-         + Emanuel Schmieg: "Into The Ice Caves" (22 levels + artwork)
-
-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)
-         by defining and using additional image files
-       - 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]
------------------------------------
-       - sound bug (causing crashes) fixed (reported by Keith Peterston)
-       - support for /dev/sound/dsp (devfs) added (thanks to Christoph Bauer)
-       - small NetBSD compilation bug fixed (thanks to Adam Ciarcinski)
-       - 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 and Timen van den Berg
-
-Release Version 2.1.0 [05 AUG 2002]
------------------------------------
-       - native Mac OS X port (finally!)
-       - graphics, sounds and music now fully configurable
-       - added support for TrueColor PCX graphics files
-       - added support for 16 bit WAV sound files
-       - enhanced sound system (especially regarding stereo and loop sounds)
-       - new structured setup menu (with sub-menues for graphics and sounds)
-       - added "quick save" and "quick load" functions with shortcut key
-       - added single-step playing mode (automatic pause after each step)
-       - behaviour of "Escape" key in level editor now more intuitive
-       - changed default slipping behaviour of gems back to 2.0.0 style;
-         this is now an element property for gems in the level editor,
-         although existing converted levels use the new EM gems behaviour
-       - bug fixed that prevented walking through tubes when gravity on
-       - added Boulder Dash style "snap-pushing" (thanks to Achim Härtel)
-       - fixed memory leak in image loading code
-       - fixed some "solid" elements that were accidentally destructible
-       - fixed some tape stuff
-       - added new contributed levels from the following players:
-         + Conor Mancone
-         + Gavin Davidson
-         + Jerome Kunegis
-         + Rüdiger Schäfer
-         + Flyboy: level group "Cops and Robbers", with own graphics set
-       - added custom graphics set "Animal Kingdom" by Flyboy
-
-Release Version 2.0.1 [19 MAR 2002]
------------------------------------
-       - bug in explosion code fixed that broke level 24 of "Baby Ghost Mine"
-       - several Supaplex emulation bugs fixed (thanks to Mihail Milushev):
-         + orange disk does not fall off from slippery elements
-         + infotrons kill electrons and snik snaks and trigger orange disks
-         + explosion chain reactions are now a bit slower than murphy
-       - behaviour of robots adjusted to make them less aggressive
-         (needed for quite some Emerald Mine Club levels)
-       - emeralds and diamonds now fall off normal, steel and growing walls,
-         as this is the correct behaviour in Emerald Mine; existing private
-         and contributed levels will still behave as before, unless saved
-         again (with or without modifications) from the level editor of the
-         current version of the game
-       - icon for Windows executable added
-       - bug when selecting default level series fixed
-       - new IFF style file format for level and tape files
-       - bug in storing amoeba content fixed
-       - nasty tape bugs fixed (completely reworked tape stuff)
-       - fullscreen mode now works with Windows (workaround for bug in SDL)
-       - /dev/dsp support for NetBSD added (thanks to Krister Walfridsson)
-       - file permissions when saving files and creating directories changed
-       - some small sound bugs fixed
-       - added new contributed levels from the following players:
-         + Arno Luppold
-         + Barak Shacked
-         + Ben Braithwaite
-         + Dominik Seichter
-         + Emilio Hemken
-         + Glenn Alexander
-         + Helge Hafting
-         + Paul Sutton
-
-Release Version 2.0.0 [01 JAN 2001]
------------------------------------
-       - major code redesign to maintain generic game functions in a separate
-         library and make it easier to port the game to new targets like SDL
-       - can be compiled with SDL library to build native Windows version
-       - DOS and Windows versions can be compiled with gcc cross-compiler
-       - trying to open already busy audio device does not block the game
-       - bug in network playing code fixed (patch from web site)
-       - SDL version can load and play music modules
-       - bug in level editor fixed for EM doors and keys element description
-       - sound sample frequency raised from 8 kHz to 22 kHz
-
-Release Version 1.4.0 [27 OCT 1999]
------------------------------------
-       - new Boulder Dash elements for better game emulation
-       - new cool medium-sized crystal font
-       - new elements and graphics for Diamond Caves II levels
-       - new elements and graphics for Emerald Mine Club levels
-       - brushed-up (higher resolution) graphics for Supaplex elements
-       - special oversized Supaplex levels included
-       - new elements for more authentic Emerald Mine elements (doors)
-       - more level editor enhancements:
-         element list scrollbar and level number selection within editor
-       - lots of new levels converted from Emerald Mine Club disks,
-         DX-Boulderdash and Supaplex
-       - new levels created and contributed by players
-       - now over 160 level series with over 14.000 levels
-       - high score list now scrollable to see all 100 entries
-       - new 16-bit elements level format to allow more than 256 elements
-       - re-introduced level handicap for more challange (levels must be
-         solved to be able to play the next one; can be disabled in setup)
-       - new setup option to disable time limit for relaxed playing :-)
-       - GAME_DIR path split into RO_GAME_DIR and RW_GAME_DIR to allow
-         distributors to separate read-only (levels, graphics, sounds)
-         from writable (hich scores) game data
-       - new personal level setup files to store level handicap and
-         last played level for each level series
-       - removed some 32-bit dependent code; should be 64-bit clean now
-       - some little bugs fixed
-
-Release Version 1.3.0 [5 FEB 1999]
-----------------------------------
-       - strongly enhanced level editor
-       - new elements, graphics and levels for Supaplex style games
-       - completely rewritten platform independent gadget code
-         (buttons, scrollbars, text and number input gadgets)
-       - nasty sound bug fixed (showed up with Linux kernel 2.2.x)
-
-Release Version 1.2.0 [5 DEC 1998]
-----------------------------------
-       - DOS/Windows version
-       - new WAV sound loader (to replace the old Amiga 8SVX files)
-       - new PCX graphics loader (to avoid GIF license problems)
-       - network multiplayer games with upto four players
-       - no separate network server needed; each client can
-         fork a network server at startup if there's no server
-         running at this moment
-       - possibility to invoke the game to act as a standalone
-         network server (on a separate machine, for example)
-       - local multiplayer games with upto four players
-       - support for upto four joysticks
-       - completely free customizable keyboard and joystick
-         for all four players individually
-       - new joystick calibration screen which can be left
-         (with Escape key) if no joystick is connected... ;-)
-       - new (working) GIF graphics loader (but still support
-         for the old XPM method)
-       - supports private colormap with extremely less flashing
-         on 8-bit (256 colors) displays
-       - soft-scrolling with 50 frames per second (which raises
-         the system requirements and makes it completely
-         unplayable on my "old reference" 486/33 (where 0.9b runs
-         smoothly) and running at 90% speed on my K6-200.
-       - completely new file format for personal setup data
-         in ASCII format which is human readable and easily
-         customizable even with a texteditor; stored in the
-         user's home directory and no longer somewhere in the
-         game's installation directory
-       - high score lists changed: now one file per level and
-         no longer one file per level series; now using readable
-         ASCII format
-       - useful command line options to specify the X11 display,
-         the game's base (installation) directory, an alternate
-         level directory, standalone server execution and verbose
-         execution
-
-Version 1.1 [???] [NOT RELEASED]
---------------------------------
-       - new (but broken) GIF graphics loader to be independent
-         from the XPM library and to replace all graphics by GIF files
-
-Version 1.0 [9 APR 1997] [NOT RELEASED]
----------------------------------------
-       - the game now contains many really playable levels,
-         not only a few levels for testing
-       - the game is now even better playable by keyboard
-         (now you have the same gameplay functionality
-         compared to playing with a joystick. Especially
-         there are diagonal directions with keyboard playing
-         and the fire buttons are mapped to the shift keys)
-       - a lot of new elements for better emulation of levels
-         from the games "Boulder Dash", "Emerald Mine" and
-         "Sokoban". New elements to build "Dynablaster" style
-         levels.
-       - enhanced functionality of the level tape recorder
-         to make it possible to go on with a game at any tape
-         position
-
-Version 0.9b2 [21 NOV 1995] [NOT RELEASED]
-------------------------------------------
-       - new game elements
-
-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
-          one step for one keystroke in some cases -- thanks to
-         Warwick Allison for the hint with "XSync()"!)
-       - new amoeba type with configurable content (like in the
-         original C64 version, when aboeba cannot grow anymore
-         and explodes to diamonds or some other elements)
-       - compile error with ONE_PER_NAME in high score function
-         removed (thanks to Dmitry Kohmanyuk)
-       - little code cleanup (to get some new bugs ;)
-       - FreeBSD sound and joystick support (thanks to Jean-Marc
-         Zucconi)
-
-Pre-Release Version 0.9 [23 OCT 1995]
--------------------------------------
-       - first (pre)release version
diff --git a/CREDITS b/CREDITS
index bb18741..601a437 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1,3 +1,55 @@
 
-[Credits file yet to be written.]
+Rocks'n'Diamonds contains a lot of inspiration, ideas, code and contributions
+by many people and projects, which are listed here in no particular order. If
+somebody should be added to this list of credits, please let me know!
 
+-------------------------------------------------------------------------------
+
+Special thanks to Peter Liepa for creating "Boulder Dash" that started it all!
+
+Special thanks to Klaus Heinz and Volker Wertich for creating "Emerald Mine",
+which took this kind of game to a new level!
+
+Special thanks to Michael Stopp and Philip Jespersen for creating "Supaplex"!
+
+Special thanks to Hiroyuki Imabayashi for creating "Sokoban"!
+
+Special thanks to Alan Bond and Jürgen Bonhagen for the continuous creation
+of outstanding level sets!
+
+Thanks to Peter Elzner for ideas and inspiration by Diamond Caves.
+
+Thanks to Steffest for ideas and inspiration by DX-Boulderdash.
+
+Thanks to Guido Schulz for the initial MS-DOS port of the game.
+
+The native Emerald mine engine was derived from Emerald Mine for X11
+which was developed by David Tritscher as a very compatible Emerald Mine clone.
+Thanks a lot for this contribution!
+
+The native Supaplex engine is based on MegaPlex by Frank Schindler, which is
+based on the Supaplex Speed Fix by Herman Perk, which is based on the original
+Supaplex game by Michael Stopp and Philip Jespersen. Thanks a lot for this
+contribution!
+
+Thanks to Karl Hörnell for some additional toon graphics taken from "Iceblox":
+The penguin, the mole, the pig and the dragon.
+
+Thanks to the composers of the included music modules: "mod.apoplexy" by
+bee hunter/jazz, "mod.chiptune" by 4-mat/anarchy and "mod.cream_of_the_earth"
+by romeoknight.
+
+Thanks to Christopher Clark for the hash functions.
+
+The random number generator was taken from the GNU C library.
+
+The networking code was derived from xtris. Thanks!
+
+Thanks to Francesco Carta for the comprehensive Rocks'n'Diamonds manual.
+
+Thanks to Niko Böhm for the Rocks'n'Diamonds documentation wiki.
+
+Thanks to Simon Forsberg for being the moderator of the R'n'D forum.
+
+And not to forget: Many thanks to all those who contributed levels to this game
+since 1995!
index bffd8d0..9451858 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2010-05-22
+       * fixed missing memory allocation in SP engine when saving engine data
+         for non-SP game engine snapshots (which also stores SP engine part)
+
 2010-05-21
        * fixed problem with scrolling in native EM engine in multi-user mode
          (this bug was just introduced with the experimental viewport stuff)
@@ -6,6 +10,7 @@
        * fixed (implemented) single step mode in native EM and SP engines
        * fixed "latest_engine" flag in classic levels (moved to single sets)
        * updated SDL library DLLs for Windows to the latest release versions
+         (this fixed some mysterious crashes of the game on Windows systems)
        * replaced EM and SP set in classic level set with native level files
        * finally added a newly written "CREDITS" file to the game package
        * removed sampled music loops from classic music set
diff --git a/HARDWARE b/HARDWARE
deleted file mode 100644 (file)
index 49de985..0000000
--- a/HARDWARE
+++ /dev/null
@@ -1,92 +0,0 @@
-
-[Very outdated -- should be rewritten...]
-
-
-Some recommendations for more fun playing Rocks'n'Diamonds:
-===========================================================
-
-About sound
------------
-It is highly recommended to have a decent sound interface for playing
-this game (although it only comes with bad-quality 8000-Hz-samples to
-save memory and to be compatible with /dev/audio).
-
-The best sound platform is an actual Linux system with (at least) kernel
-1.2.x, because it offers some nice real-time sound features which are
-needed to have background music loops in the game.
-
-On all other systems you don't have music loops, but you still have all
-the other sounds.
-
-
-About game speed
-----------------
-You should have a relatively fast hardware.
-
-The game was developed on a i486/33 (which is three years old now),
-and you should probably better not try to run it on a slower system.
-
-You should have an accelerated graphic card; I have found out that it
-starts being playable on my 486/33 with an old ISA cirrus logic 5426
-graphic card, which has a blitter that is supported by XFree86[tm],
-but that it was nearly unplayable on a 486/66 with old, unaccelerated
-ET4000.
-
-If all works fine, you should have something around 30 frames per second.
-
-If you think that the game is to slow to play, you should try out the
-following things:
-
-- Set "Buffered Gfx" to "off" in the setup menu. Normally (on a fast
-  enough system) you should use buffered graphics, which means that
-  all graphics is drawn into an invisible Pixmap and is then copied
-  to the X11 window to avoid flickering. If you disable this double
-  buffering, the graphic is directly drawn into the window. This can
-  cause some slight flickering, but makes graphic operations roughly
-  twice as fast compared to double buffering.
-
-- Set "Game Music" to "off" in the setup menu (and maybe "sound loops"
-  too). Where disabling buffered graphics may be required with slow
-  graphics hardware, disabling sound is especially recommended on slow
-  CPU systems (486/33 and slower), because the sound server eats up a
-  significant amount of CPU time when playing long sounds.
-
-You might also notice that bigger levels tend to be slower on slow
-systems.
-
-About the option "Fading" in the setup menu: It gives a nice looking
-fading when switching to a new screen, but you should really only try
-this out if you think that you have a very fast graphics hardware.
-
-
-About music
------------
-The background music loops are ripped out from several nice music albums.
-Just have a look at the info screen to find out from which album each
-sound loop came from -- they are all very well done pieces of music, but
-unfortunately they don't sound better after converting them to 8 kHz
-samples (to conform to standard SUN /dev/audio). Maybe I change this to
-a better quality in the future, but at the moment, where the sounds
-directory has a size of nearly a megabyte, I'll stay with 8 kHz samples.
-
-So, if you have a non-Linux system (which cannot play sound loops) or
-don't like the "telephone quality" of the music loops, just get some of
-these CDs and play them while your playing the game! ;-)
-
-
-About game-play
----------------
-It is *strongly recommended* to play this game with a high-quality joystick.
-That means, throw your $10 joystick out of the window and buy a decent
-Competition-Pro Digital PC joystick or a high-quality CH Products Analog
-joystick. Believe me, it doubles the fun of playing the game.
-
-If you only have a normal Unix system (and no fine Linux system), you
-are forced to play with the keyboard. It works, but is not only less fun,
-but also more difficult with some levels, because you cannot move in
-diagonal directions with keyboard control at the moment. Another bad thing
-is that you will have some problems when pressing many keys at the same
-time. This might change in the future, when I implement a better keyboard
-handling which not only solves these problems but allows diagonal directions,
-too.
-
index 9c0fa9d..75fde6b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -46,7 +46,7 @@ CROSS_PATH_MSDOS = /usr/local/cross-msdos/i386-msdosdjgpp
 CROSS_PATH_WIN32 = /usr/local/cross-tools/i386-mingw32msvc
 
 # compile special edition of R'n'D instead of the normal (classic) version
-SPECIAL_EDITION = rnd_jue
+SPECIAL_EDITION = rnd_jue
 
 
 # -----------------------------------------------------------------------------
@@ -155,8 +155,10 @@ backup_gfx:
 #      ./Scripts/make_prerelease.sh
 
 jue:
-       sed -e 's/# SPECIAL_EDITION/SPECIAL_EDITION/' Makefile > Makefile.jue
-       $(MAKE) -f Makefile.jue cross-win32
+       @$(MAKE) SPECIAL_EDITION=rnd_jue all
+
+jue-win:
+       @$(MAKE) SPECIAL_EDITION=rnd_jue cross-win32
 
 dist-clean:
        @$(MAKE_CMD) dist-clean
index 20b8f36..4bbbcca 100644 (file)
@@ -144,7 +144,7 @@ CONFIG_GAME_DIR = $(CONFIG_RO_GAME_DIR) $(CONFIG_RW_GAME_DIR)
 CONFIG_GAME = $(CONFIG_GAME_DIR) $(CONFIG_SCORE_ENTRIES) $(CONFIG_SPECIAL)
 
 CONFIG = $(CONFIG_GAME) $(JOYSTICK)
-DEBUG = -DDEBUG -g
+DEBUG = -DDEBUG -g
 # PROFILING = $(PROFILING_FLAGS)
 
 # OPTIONS = $(DEBUG) -Wall                     # only for debugging purposes
index 22e46ec..9be4836 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2010-05-21 01:47"
+#define COMPILE_DATE_STRING "2010-05-25 22:42"
index 6aa2cb7..d783748 100644 (file)
@@ -6551,7 +6551,7 @@ static void LoadLevelFromFileInfo_SB(struct LevelInfo *level,
   boolean load_xsb_to_ces = check_special_flags("load_xsb_to_ces");
   int file_level_nr = 0;
   int line_nr = 0;
-  int x, y;
+  int x = 0, y = 0;            /* initialized to make compilers happy */
 
 #if 0
   printf("::: looking for level number %d [%d]\n",
index 9dc2c55..9485027 100644 (file)
@@ -5,7 +5,12 @@
 #include "BugsTerminals.h"
 
 
+#if 1
+byte TerminalState[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+#else
 byte *TerminalState;
+#endif
+
 int TerminalMaxCycles;
 
 
index 2d3d98a..6145852 100644 (file)
@@ -7,8 +7,12 @@
 
 #include "global.h"
 
-
+#if 1
+extern byte TerminalState[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+#else
 extern byte *TerminalState;
+#endif
+
 extern int TerminalMaxCycles;
 
 extern void subAnimateBugs(int si);
index 3bef368..5575d11 100644 (file)
@@ -8,8 +8,13 @@
 static void CallAnimation(int si, byte bl);
 static boolean IsToBeAnimated(int bl);
 
+#if 1
+int AnimationPosTable[SP_MAX_PLAYFIELD_SIZE];
+byte AnimationSubTable[SP_MAX_PLAYFIELD_SIZE];
+#else
 int *AnimationPosTable;
 byte *AnimationSubTable;
+#endif
 
 
 // ==========================================================================
@@ -70,7 +75,7 @@ void subDoGameStuff()
        !game_sp.LevelSolved &&
        !game_sp.GameOver)
     {
-#if 1
+#if 0
       printf("::: DoGameStuff.c: killing murphy [%d] ...\n", KillMurphyFlag);
 #endif
 
@@ -78,7 +83,7 @@ void subDoGameStuff()
       ExplodeFieldSP(MurphyExplodePos);                // Explode
       LeadOutCounter = 0x40;                   // quit: start lead-out
 
-#if 1
+#if 0
       printf("::: DoGameStuff.c: !!!!!!!!!! GAME OVER !!!!!!!!!!\n");
       printf("::: [KillMurphyFlag == %d]\n", KillMurphyFlag);
 #endif
index 9051e4d..4cf9818 100644 (file)
@@ -7,9 +7,13 @@
 
 #include "global.h"
 
-
+#if 1
+extern int AnimationPosTable[SP_MAX_PLAYFIELD_SIZE];
+extern byte AnimationSubTable[SP_MAX_PLAYFIELD_SIZE];
+#else
 extern byte *AnimationSubTable;
 extern int *AnimationPosTable;
+#endif
 
 extern void subDoGameStuff();
 
index e45ce79..4eded7b 100644 (file)
@@ -94,7 +94,7 @@ void ExplodeFieldSP(int si)
 
   if (ax == fiMurphy)
   {
-#if 1
+#if 0
     printf("::: Explosions.c: ExplodeFieldSP(): killing murphy\n");
 #endif
 
@@ -168,7 +168,7 @@ static void LetExplodeFieldSP(int tsi, int cx, int dh)
       break;
 
     case fiMurphy:
-#if 1
+#if 0
       printf("::: Explosions.c: LetExplodeFieldSP(): killing murphy [%d]\n",
             tsi);
 #endif
diff --git a/src/game_sp/FakeDeclares.c b/src/game_sp/FakeDeclares.c
deleted file mode 100644 (file)
index abb63c4..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-// ----------------------------------------------------------------------------
-// FakeDeclares.c
-// ----------------------------------------------------------------------------
-
-#include "FakeDeclares.h"
-
-
-int MurphyPosIndex, MurphyXPos, MurphyYPos;
-int MurphyScreenXPos, MurphyScreenYPos;
-int MurphyExplodePos, SplitMoveFlag, RedDiskReleaseMurphyPos;
-int KillMurphyFlag, MurphyMoveCounter;
-long YawnSleepCounter;
-int MurphyVarFaceLeft;
-int ScratchGravity, GravityFlag;
-int RedDiskReleaseFlag, MovingPictureSequencePhase;
-
-int YellowDisksExploded;
-int AllowRedDiskCheat, AllowEatRightRedDiskBug;
-
-int GameBusyFlag;
-int InfotronsNeeded, TotalInfotronsNeeded;
-int RedDiskCount;
-int SnikSnaksElectronsFrozen;
-
-int DemoKeyCode;
-
-int RedDiskReleasePhase;
diff --git a/src/game_sp/FakeDeclares.h b/src/game_sp/FakeDeclares.h
deleted file mode 100644 (file)
index a3c22a5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-// ----------------------------------------------------------------------------
-// FakeDeclares.h
-// ----------------------------------------------------------------------------
-
-#ifndef FAKEDECLARES_H
-#define FAKEDECLARES_H
-
-#include "global.h"
-
-
-extern int AllowRedDiskCheat, AllowEatRightRedDiskBug;
-extern int Data_SubRest, Data_SubRstFlg;
-extern int DemoKeyCode;
-extern int GameBusyFlag;
-extern int InfotronsNeeded, TotalInfotronsNeeded;
-extern int KillMurphyFlag, MurphyMoveCounter;
-extern int MurphyExplodePos, SplitMoveFlag, RedDiskReleaseMurphyPos;
-extern int MurphyPosIndex, MurphyXPos, MurphyYPos;
-extern int MurphyScreenXPos, MurphyScreenYPos;
-extern int MurphyVarFaceLeft;
-extern int RedDiskCount;
-extern int RedDiskReleaseFlag, MovingPictureSequencePhase;
-extern int RedDiskReleasePhase;
-extern int ScratchGravity, GravityFlag;
-extern int SnikSnaksElectronsFrozen;
-extern int YellowDisksExploded;
-extern long YawnSleepCounter;
-
-#endif /* FAKEDECLARES_H */
index 91a5296..e34d196 100644 (file)
@@ -15,9 +15,16 @@ int FieldHeight;     // standard size = 24
 int HeaderSize;                // standard size = 96
 int FieldMax, LevelMax;
 long FileMax;
+
+#if 1
+int PlayField16[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+byte PlayField8[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+byte DisPlayField[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+#else
 int *PlayField16;
 byte *PlayField8;
 byte *DisPlayField;
+#endif
 
 int TimerVar;
 #if 1
@@ -33,6 +40,27 @@ LevelInfoType LInfo;
 int ScrollMinX, ScrollMaxX, ScrollMinY, ScrollMaxY;
 int ScrollX, ScrollY;
 
+int MurphyPosIndex, MurphyXPos, MurphyYPos;
+int MurphyScreenXPos, MurphyScreenYPos;
+int MurphyExplodePos, SplitMoveFlag, RedDiskReleaseMurphyPos;
+int KillMurphyFlag, MurphyMoveCounter;
+long YawnSleepCounter;
+int MurphyVarFaceLeft;
+int ScratchGravity, GravityFlag;
+int RedDiskReleaseFlag, MovingPictureSequencePhase;
+
+int YellowDisksExploded;
+int AllowRedDiskCheat, AllowEatRightRedDiskBug;
+
+int GameBusyFlag;
+int InfotronsNeeded, TotalInfotronsNeeded;
+int RedDiskCount;
+int SnikSnaksElectronsFrozen;
+
+int DemoKeyCode;
+
+int RedDiskReleasePhase;
+
 int fiGraphic[] =
 {
   aniSpace,
@@ -146,6 +174,17 @@ void InitGlobals()
   LevelMax = (FieldWidth * FieldHeight) - 1;
   bPlaying = False;
   menBorder = False;
+
+#if 0
+  /* these defaults will be changed after reading a Supaplex level file */
+  PlayField8 = REDIM_1D(sizeof(byte), 0, FieldMax);
+  DisPlayField = REDIM_1D(sizeof(byte), 0, FieldMax);
+  PlayField16 = REDIM_1D(sizeof(int), 0, FieldMax);
+
+  AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax);
+  AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax);
+  TerminalState = REDIM_1D(sizeof(byte), 0, FieldMax);
+#endif
 }
 
 int GetSI(int X, int Y)
@@ -185,6 +224,7 @@ void PrepareLevel()
   LevelLoaded = True;
 }
 
+#if 0
 void Trace(char *Source, char *Message)
 {
   printf("::: Trace: Source == '%s', Message == '%s'\n", Source, Message);
@@ -194,6 +234,7 @@ void ReportError(char *Source, char *Message)
 {
   printf("::: ReportError: Source == '%s', Message == '%s'\n", Source, Message);
 }
+#endif
 
 int Min(int A, int B)
 {
index dc5d3c9..05d4cd7 100644 (file)
@@ -277,8 +277,10 @@ extern void PrepareLevel();
 extern int getSequenceLength(int sequence);
 extern boolean isSnappingSequence(int sequence);
 
+#if 0
 extern void Trace(char *Source, char *Message);
 extern void ReportError(char *Source, char *Message);
+#endif
 
 extern int Min(int A, int B);
 extern int Max(int A, int B);
@@ -292,9 +294,15 @@ extern boolean LevelLoaded;
 extern boolean DemoAvailable;
 extern boolean menBorder;
 
+#if 1
+extern int PlayField16[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+extern byte PlayField8[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+extern byte DisPlayField[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+#else
 extern int *PlayField16;
 extern byte *PlayField8;
 extern byte *DisPlayField;
+#endif
 
 extern int FieldHeight;
 extern int FieldMax, LevelMax;
@@ -310,4 +318,22 @@ extern LevelInfoType LInfo;
 extern int ScrollMinX, ScrollMaxX, ScrollMinY, ScrollMaxY;
 extern int ScrollX, ScrollY;
 
+extern int AllowRedDiskCheat, AllowEatRightRedDiskBug;
+extern int Data_SubRest, Data_SubRstFlg;
+extern int DemoKeyCode;
+extern int GameBusyFlag;
+extern int InfotronsNeeded, TotalInfotronsNeeded;
+extern int KillMurphyFlag, MurphyMoveCounter;
+extern int MurphyExplodePos, SplitMoveFlag, RedDiskReleaseMurphyPos;
+extern int MurphyPosIndex, MurphyXPos, MurphyYPos;
+extern int MurphyScreenXPos, MurphyScreenYPos;
+extern int MurphyVarFaceLeft;
+extern int RedDiskCount;
+extern int RedDiskReleaseFlag, MovingPictureSequencePhase;
+extern int RedDiskReleasePhase;
+extern int ScratchGravity, GravityFlag;
+extern int SnikSnaksElectronsFrozen;
+extern int YellowDisksExploded;
+extern long YawnSleepCounter;
+
 #endif /* GLOBALS_H */
index 65b88f2..48a1ac4 100644 (file)
@@ -89,7 +89,7 @@ void subMainGameLoop_Main(byte action, boolean warp_mode)
 locExitMainGameLoop:
 #endif
 
-#if 1
+#if 0
   printf("::: locExitMainGameLoop reached [%d]\n", LeadOutCounter);
   printf("::: [KillMurphyFlag == %d]\n", KillMurphyFlag);
 #endif
index 9837aef..d1d9ffc 100644 (file)
@@ -25,7 +25,6 @@ SRCS =        init.c                  \
        DoGameStuff.c           \
        Electrons.c             \
        Explosions.c            \
-       FakeDeclares.c          \
        Globals.c               \
        Infotrons.c             \
        InitGameConditions.c    \
@@ -51,7 +50,6 @@ OBJS =        init.o                  \
        DoGameStuff.o           \
        Electrons.o             \
        Explosions.o            \
-       FakeDeclares.o          \
        Globals.o               \
        Infotrons.o             \
        InitGameConditions.o    \
index 85e6e11..06cd9f7 100644 (file)
@@ -1046,7 +1046,7 @@ loc_g_6756:
   if (LowByte(InfotronsNeeded) != 0)
     return;
 
-#if 1
+#if 0
   if (!game_sp.LevelSolved)
     printf("::: Murphy.c: !!!!!!!!!! LEVEL %d SOLVED !!!!!!!!!!\n", level_nr);
 #endif
index 2b8a175..f841cf2 100644 (file)
@@ -130,9 +130,11 @@ void copyInternalEngineVars_SP()
   /* (add one byte for the level number stored as first byte of demo data) */
   FileMax = FieldMax + native_sp_level.demo.length + 1;
 
+#if 0
   PlayField8 = REDIM_1D(sizeof(byte), 0, FileMax);
   DisPlayField = REDIM_1D(sizeof(byte), 0, FieldMax);
   PlayField16 = REDIM_1D(sizeof(int), -preceding_buffer_size, FieldMax);
+#endif
 
   count = 0;
   for (i = 0; preceding_playfield_memory[i] != NULL; i++)
@@ -183,15 +185,21 @@ void copyInternalEngineVars_SP()
   {
     DemoAvailable = True;
 
+#if 0
+    /* !!! NEVER USED !!! */
     PlayField8[FieldMax + 1] = native_sp_level.demo.level_nr;
 
+    /* !!! NEVER USED !!! */
     for (i = 0; i < native_sp_level.demo.length; i++)
       PlayField8[FieldMax + 2 + i] = native_sp_level.demo.data[i];
+#endif
   }
 
+#if 0
   AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax - 2 * FieldWidth);
   AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax - 2 * FieldWidth);
-  TerminalState = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
+  TerminalState = REDIM_1D(sizeof(byte), 0, FieldMax);
+#endif
 
   GravityFlag = LInfo.InitialGravity;
   FreezeZonks = LInfo.InitialFreezeZonks;
@@ -214,13 +222,22 @@ static void LoadNativeLevelFromFileStream_SP(FILE *file, int width, int height,
   /* for details of the Supaplex level format, see Herman Perk's Supaplex
      documentation file "SPFIX63.DOC" from his Supaplex "SpeedFix" package */
 
-  native_sp_level.width  = width;
-  native_sp_level.height = height;
+  native_sp_level.width  = MIN(width,  SP_MAX_PLAYFIELD_WIDTH);
+  native_sp_level.height = MIN(height, SP_MAX_PLAYFIELD_HEIGHT);
 
   /* read level playfield (width * height == 60 * 24 tiles == 1440 bytes) */
-  for (y = 0; y < native_sp_level.height; y++)
-    for (x = 0; x < native_sp_level.width; x++)
-      native_sp_level.playfield[x][y] = getFile8Bit(file);
+  /* (MPX levels may have non-standard playfield size -- check max. size) */
+  for (y = 0; y < height; y++)
+  {
+    for (x = 0; x < width; x++)
+    {
+      byte element = getFile8Bit(file);
+
+      if (x < SP_MAX_PLAYFIELD_WIDTH &&
+         y < SP_MAX_PLAYFIELD_HEIGHT)
+       native_sp_level.playfield[x][y] = element;
+    }
+  }
 
   /* read level header (96 bytes) */
 
index b459a83..91847c2 100644 (file)
@@ -17,7 +17,6 @@
 #include "DoGameStuff.h"
 #include "Electrons.h"
 #include "Explosions.h"
-#include "FakeDeclares.h"
 #include "Globals.h"
 #include "Infotrons.h"
 #include "InitGameConditions.h"
index f48ca38..f71693c 100644 (file)
@@ -9,6 +9,7 @@
 
 /* helper functions for constructs not supported by C */
 
+#if 0
 void *REDIM_1D(int data_size, int first_data_pos, int last_data_pos)
 {
   /* for a buffer of n elements, first_data_pos is 0 and last_data_pos is n-1 */
@@ -20,6 +21,7 @@ void *REDIM_1D(int data_size, int first_data_pos, int last_data_pos)
 
   return (checked_calloc(buffer_size) - buffer_start);
 }
+#endif
 
 long MyGetTickCount()
 {
index e332574..cf8e346 100644 (file)
 
 
 /* helper functions for constructs not supported by C */
+
+#if 0
 extern void *REDIM_1D(int, int, int);
+#endif
 
 extern long MyGetTickCount();
 
index 97f9911..0933b06 100644 (file)
 
 /* program information and versioning definitions */
 #define PROGRAM_VERSION_MAJOR          3
-#define PROGRAM_VERSION_MINOR          2
-#define PROGRAM_VERSION_PATCH          6
-#define PROGRAM_VERSION_BUILD          2
+#define PROGRAM_VERSION_MINOR          3
+#define PROGRAM_VERSION_PATCH          0
+#define PROGRAM_VERSION_BUILD          0
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"
-#define PROGRAM_COPYRIGHT_STRING       "Copyright ©1995-2009 by Holger Schemel"
+#define PROGRAM_COPYRIGHT_STRING       "Copyright ©1995-2010 by Holger Schemel"
 #define PROGRAM_EMAIL_STRING           "info@artsoft.org"
 #define PROGRAM_WEBSITE_STRING         "http://www.artsoft.org/"
 #define PROGRAM_GAME_BY_STRING         "A Game by Artsoft Entertainment"
index 493e998..db347cd 100644 (file)
@@ -1391,7 +1391,7 @@ void DrawMainMenu()
   DrawMainMenuExt(REDRAW_ALL, FALSE);
 }
 
-#if 0
+#if defined(CREATE_SPECIAL_EDITION_RND_JUE)
 static void gotoTopLevelDir()
 {
   /* move upwards to top level directory */
@@ -1758,7 +1758,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
          SaveLevelSetup_LastSeries();
          SaveLevelSetup_SeriesInfo();
 
-#if 0
+#if defined(CREATE_SPECIAL_EDITION_RND_JUE)
          gotoTopLevelDir();
 #endif
 
index 0875bf5..c26996b 100644 (file)
@@ -7473,7 +7473,7 @@ void getGraphicSourceObjectExt_EM(struct GraphicInfo_EM *g_em,
 #endif
 
 
-#if 1
+#if 0
   if (tile == Ydiamond_stone)
     printf("::: stone smashing diamond... %d: %d, %d, %d, %d, %d -> %d [%d, %d, %d, %d, %d, %d] [%d]\n",
           frame_em,