From e51177796149f37de339bda83558c3c49758be93 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Tue, 25 May 2010 22:43:09 +0200 Subject: [PATCH] rocksndiamonds-3.3.0.0 * fixed missing memory allocation in SP engine when saving engine data for non-SP game engine snapshots (which also stores SP engine part) --- CHANGES | 437 ------------------------------------ CREDITS | 54 ++++- ChangeLog | 5 + HARDWARE | 92 -------- Makefile | 8 +- src/Makefile | 2 +- src/conftime.h | 2 +- src/files.c | 2 +- src/game_sp/BugsTerminals.c | 5 + src/game_sp/BugsTerminals.h | 6 +- src/game_sp/DoGameStuff.c | 9 +- src/game_sp/DoGameStuff.h | 6 +- src/game_sp/Explosions.c | 4 +- src/game_sp/FakeDeclares.c | 27 --- src/game_sp/FakeDeclares.h | 29 --- src/game_sp/Globals.c | 41 ++++ src/game_sp/Globals.h | 26 +++ src/game_sp/MainGameLoop.c | 2 +- src/game_sp/Makefile | 2 - src/game_sp/Murphy.c | 2 +- src/game_sp/file.c | 29 ++- src/game_sp/global.h | 1 - src/game_sp/vb_lib.c | 2 + src/game_sp/vb_lib.h | 3 + src/main.h | 8 +- src/screens.c | 4 +- src/tools.c | 2 +- 27 files changed, 194 insertions(+), 616 deletions(-) delete mode 100644 CHANGES delete mode 100644 HARDWARE delete mode 100644 src/game_sp/FakeDeclares.c delete mode 100644 src/game_sp/FakeDeclares.h diff --git a/CHANGES b/CHANGES deleted file mode 100644 index e7218e42..00000000 --- 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 bb187417..601a4370 100644 --- 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! diff --git a/ChangeLog b/ChangeLog index bffd8d05..94518588 100644 --- 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 index 49de985a..00000000 --- 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. - diff --git a/Makefile b/Makefile index 9c0fa9dc..75fde6be 100644 --- 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 diff --git a/src/Makefile b/src/Makefile index 20b8f367..4bbbcca9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -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 diff --git a/src/conftime.h b/src/conftime.h index 22e46ecd..9be48364 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "2010-05-21 01:47" +#define COMPILE_DATE_STRING "2010-05-25 22:42" diff --git a/src/files.c b/src/files.c index 6aa2cb76..d7837486 100644 --- a/src/files.c +++ b/src/files.c @@ -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", diff --git a/src/game_sp/BugsTerminals.c b/src/game_sp/BugsTerminals.c index 9dc2c557..94850270 100644 --- a/src/game_sp/BugsTerminals.c +++ b/src/game_sp/BugsTerminals.c @@ -5,7 +5,12 @@ #include "BugsTerminals.h" +#if 1 +byte TerminalState[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE]; +#else byte *TerminalState; +#endif + int TerminalMaxCycles; diff --git a/src/game_sp/BugsTerminals.h b/src/game_sp/BugsTerminals.h index 2d3d98a2..61458526 100644 --- a/src/game_sp/BugsTerminals.h +++ b/src/game_sp/BugsTerminals.h @@ -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); diff --git a/src/game_sp/DoGameStuff.c b/src/game_sp/DoGameStuff.c index 3bef3684..5575d11a 100644 --- a/src/game_sp/DoGameStuff.c +++ b/src/game_sp/DoGameStuff.c @@ -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 diff --git a/src/game_sp/DoGameStuff.h b/src/game_sp/DoGameStuff.h index 9051e4d1..4cf98184 100644 --- a/src/game_sp/DoGameStuff.h +++ b/src/game_sp/DoGameStuff.h @@ -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(); diff --git a/src/game_sp/Explosions.c b/src/game_sp/Explosions.c index e45ce791..4eded7b3 100644 --- a/src/game_sp/Explosions.c +++ b/src/game_sp/Explosions.c @@ -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 index abb63c46..00000000 --- a/src/game_sp/FakeDeclares.c +++ /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 index a3c22a5c..00000000 --- a/src/game_sp/FakeDeclares.h +++ /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 */ diff --git a/src/game_sp/Globals.c b/src/game_sp/Globals.c index 91a5296e..e34d1962 100644 --- a/src/game_sp/Globals.c +++ b/src/game_sp/Globals.c @@ -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) { diff --git a/src/game_sp/Globals.h b/src/game_sp/Globals.h index dc5d3c96..05d4cd7c 100644 --- a/src/game_sp/Globals.h +++ b/src/game_sp/Globals.h @@ -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 */ diff --git a/src/game_sp/MainGameLoop.c b/src/game_sp/MainGameLoop.c index 65b88f2f..48a1ac48 100644 --- a/src/game_sp/MainGameLoop.c +++ b/src/game_sp/MainGameLoop.c @@ -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 diff --git a/src/game_sp/Makefile b/src/game_sp/Makefile index 9837aef7..d1d9ffc3 100644 --- a/src/game_sp/Makefile +++ b/src/game_sp/Makefile @@ -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 \ diff --git a/src/game_sp/Murphy.c b/src/game_sp/Murphy.c index 85e6e112..06cd9f7d 100644 --- a/src/game_sp/Murphy.c +++ b/src/game_sp/Murphy.c @@ -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 diff --git a/src/game_sp/file.c b/src/game_sp/file.c index 2b8a1755..f841cf20 100644 --- a/src/game_sp/file.c +++ b/src/game_sp/file.c @@ -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) */ diff --git a/src/game_sp/global.h b/src/game_sp/global.h index b459a837..91847c2c 100644 --- a/src/game_sp/global.h +++ b/src/game_sp/global.h @@ -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" diff --git a/src/game_sp/vb_lib.c b/src/game_sp/vb_lib.c index f48ca389..f71693c0 100644 --- a/src/game_sp/vb_lib.c +++ b/src/game_sp/vb_lib.c @@ -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() { diff --git a/src/game_sp/vb_lib.h b/src/game_sp/vb_lib.h index e3325749..cf8e3462 100644 --- a/src/game_sp/vb_lib.h +++ b/src/game_sp/vb_lib.h @@ -10,7 +10,10 @@ /* helper functions for constructs not supported by C */ + +#if 0 extern void *REDIM_1D(int, int, int); +#endif extern long MyGetTickCount(); diff --git a/src/main.h b/src/main.h index 97f99115..0933b064 100644 --- a/src/main.h +++ b/src/main.h @@ -2021,13 +2021,13 @@ /* 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" diff --git a/src/screens.c b/src/screens.c index 493e9984..db347cda 100644 --- a/src/screens.c +++ b/src/screens.c @@ -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 diff --git a/src/tools.c b/src/tools.c index 0875bf5d..c26996b6 100644 --- a/src/tools.c +++ b/src/tools.c @@ -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, -- 2.34.1