From 89a94915f3e61cb22e01622cd9cc3c1b6f4b36bb Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Fri, 12 Sep 2003 08:42:29 +0200 Subject: [PATCH] rnd-20030912-1-src * Version number set to 3.0.4. * Version 3.0.3 released. * added music to Supaplex classic level set --- CHANGES | 4 + ChangeLog | 338 +++++++++++++++++++++++++++++++++++++++++++++++++ src/Makefile | 2 +- src/conftime.h | 2 +- src/files.c | 2 + src/game.c | 23 +++- src/main.h | 6 +- 7 files changed, 365 insertions(+), 12 deletions(-) create mode 100644 ChangeLog diff --git a/CHANGES b/CHANGES index 6f704695..182a8b2e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +Release Version 3.0.4 [?? ??? ????] +----------------------------------- + Release Version 3.0.3 [08 SEP 2003] ----------------------------------- - fixed bug (missing array boundary check) which could crash the game @@ -8,6 +11,7 @@ Release Version 3.0.3 [08 SEP 2003] - 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] ----------------------------------- diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 00000000..c8b50dc2 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,338 @@ +2003-09-08 + * Version number set to 3.0.4. + +2003-09-08 + * Version 3.0.3 released. + +2003-09-07 + * added music to Supaplex classic level set + +2003-09-07 src/libgame/misc.c + * added support for loading various music formats through SDL_mixer + +2003-09-06 (various source files) + * 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 + +2003-08-24 src/game.c + * fixed problem with player animation when snapping and moving + +2003-08-23 src/screens.c, src/cartoons.c, src/libgame/toons.c + * fixed problem with flickering when drawing toon animations + +2003-08-23 src/libgame/sdl.c + * fixed problem with setting mouse cursor in SDL version in fullscreen + +2003-08-23 src/game.c + * fixed bug (missing array boundary check) which could crash the game + +2003-08-23 + * Version number set to 3.0.3. + +2003-08-22 + * Version 3.0.2 released. + +2003-08-21 src/game.c + * fixed bug with creating inaccessible elements at player position + +2003-08-20 src/init.c + * fixed bug with not finding current level artwork directory + +2003-08-20 src/files.c + * fixed bug with choosing wrong engine version when playing tapes + * fixed bug with messing up custom element properties in 3.0.0 levels + +2003-08-18 + * Version number set to 3.0.2. + +2003-08-18 + * Version 3.0.1 released. + +2003-08-17 (no source files affected) + * changed all "classic" PCX image files with 16 colors or less to + 256 color (8 bit) storage format, because the Allegro game library + cannot handle PCX files with less than 256 colors (contributed + graphics are not affected and might look wrong in the DOS version) + +2003-08-16 src/init.c + * fixed bug which (for example) crashed the level editor when defining + "dynamite.EDITOR: [NONE]", because graphics may not be undefined + (only set to default) -- invalid graphics now set to default graphic + +2003-08-16 src/init.c + * fixed graphical bug of player digging/collecting/snapping element + when no corresponding graphic/animation is defined for this action, + resulting in player being drawn as EL_EMPTY (which should only be + done to elements being collected, but not to the player) + +2003-08-16 src/game.c + * fixed small graphical bug of player not totally moving into exit + +2003-08-16 src/libgame/setup.c + * fixed bug with wrong MS-DOS 8.3 filename conversion + +2003-08-16 src/tools.c + * fixed bug with invisible mouse cursor when pressing ESC while playing + +2003-08-16 (various source files) + * added another 128 custom elements (disabled in editor by default) + +2003-08-16 src/editor.c + * fixed NULL string bug causing Solaris to crash in sprintf() + +2003-08-16 src/screen.c + * fixed drawing over scrollbar on level selection with custom fonts + +2003-08-15 src/game.c + * cleanup of simple sounds / loop sounds / music settings + +2003-08-08 (various source files) + * added custom element property for dropping collected elements + +2003-08-08 src/conf_gfx.c + * fixed bug with missing graphic for active red disk bomb + +2003-08-07 src/files.c, src/editor.c src/game.c, src/main.h + * Extended variable "level.gravity" to "level.initial_gravity" and + "game.current_gravity" to prevent level setting from being changed + by playing the level (keeping the runtime value after playing). + + * Fixed graphics bug when digging element that has 'crumbled' graphic + definition, but not 'diggable' graphic definition. + +2003-08-06 + * Version number set to 3.0.1. + +2003-08-05 + * Version 3.0.0 released. + +2003-08-05 + * various bug fixes; among others: + - fixed bug with pushing spring over empty space + - fixed bug with leaving tube while placing dynamite + - fixed bug with explosion of smashed penguins + - allow Murphy player graphic in levels with non-Supaplex elements + +2003-04-07 + * Various changes. + * I have forgotten to document changes for some time. + +2002-12-31 + * Pre-Release Version 2.2.0rc1 released. + +2002-08-25 + * Version number set to 2.1.2. + +2002-08-13 + * Version 2.1.1 released. + +2002-08-10 + * Version number set to 2.1.1. + +2002-08-05 + * Version 2.1.0 released. + +2002-05-19 + * Version number set to 2.1.0. + +2002-04-03 to 2002-05-19 (various source files) + * graphics, sounds and music now fully configurable + * bug fixed that prevented walking through tubes when gravity on + +2002-04-02 src/events.c, src/editor.c + * Make Escape key less aggressive when playing or when editing level. + This can be configured as an option in the setup menu. (Default is + "less aggressive" which means "ask user if something can be lost" + when pressing the Escape key.) + +2002-04-02 src/screen.c + * Added "graphics setup" screen. + +2002-04-01 src/screen.c + * Changed "choose level" setup screen stuff to be more generic (to + make it easier to add more "choose from generic tree" setup screens). + +2002-04-01 src/config.c, src/timestamp.h + * Added source files "src/config.[ch]" and "src/timestamp.h" (which + automatically gets created by "src/Makefile" and contains an actual + compile-time timestamp to identify development versions of the game). + +2002-03-31 src/tape.c, src/events.c + * Added quick game/tape save/load functions to tape stuff which can be + invoked by a keyboard shortcut. Default: "F1" saves game/tape, "F2" + loads previously recorded tape and directly goes into recording mode + from the end of the tape (therefore appending to the tape). + +2002-03-31 src/tape.c + * Added "index mark" function to tape recorder. When playing or + recording, "eject" button changes to "index" button. Setting index + mark is not yet implemented, but pressing index button when playing + allows very quick advancing to end of tape (when normal playing), + very fast forward mode (when playing with normal fast forward) or + very fast reaching of "pause before end of tape" (when playing with + "pause before end" playing mode). + +2002-03-30 src/cartoons.c + * Moved some stuff from cartoons.c to the new "src/libgame/toons.c". + +2002-03-29 src/screen.c + * Changed setup screen stuff to be more generic (to make it easier + to add more setup screens). + +2002-03-23 src/main.c, src/main.h + * Various changes due to the introduction of the new libgame files + "setup.c" and "joystick.c". + +2002-03-23 src/files.c + * Generic parts of "src/files.c" (mainly setup and level directory + stuff) moved to new libgame file "src/libgame/setup.c". + +2002-03-23 src/joystick.c + * File "src/joystick.c" moved to libgame source tree, with + correspondig changes. + +2002-03-22 src/screens.c + * "HandleChooseLevel()": Another bug in level series navigation fixed. + (Wrong level series information displayed when entering main group.) + +2002-03-22 src/editor.c + * Slight change to support new gadget event "GD_EVENT_INFO_LEAVING". + +2002-03-22 src/editor.c + * Changed behaviour of "Escape" key in level editor to be more + intuitive: When in "Element Properties" or "Level Info" mode, + return to "Drawing Mode" instead of leaving the level editor. + +2002-03-21 src/game.c, src/editor.c, src/files.c + * 2.0.1 introduced the corrected "Emerald Mine" style behaviour of + gems (emeralds, diamonds, ...) slipping down from normal wall, + steel wall and growing wall (as in E.M.C. style levels). Although + the behaviour of contributed and private levels wasn't changed (due + to the use of "level.game_version"; see previous entry), editing + those levels will (of course) change the behaviour accordingly. + + This change seems a bit too hard after thinking about it, because + the EM style behaviour is not the "expected" behaviour (gems would + normally only slip down from "rounded" walls). Therefore this was + now changed to an element property for gem style elements, with the + default setting "off" (which means: no special EM style behaviour). + To fix older converted levels, this flag is set to "on" for pre-2.0 + levels that are neither contributed nor private levels. + +2002-03-20 src/files.h + * Corrected settings for "level.game_version" depending of level type. + (Contributed and private levels always get played with game engine + version they were created with, while converted levels always get + played with the most recent version of the game engine, to let new + corrections of the emulation behaviour take effect.) + +2002-03-20 src/main.h + * Added "#include ". This seems to be needed by "tape.c" for + compiling the SDL version on some systems. + Thanks to the several people who pointed this out. + +2002-03-19 + * Version number set to 2.0.2. + +2002-03-19 + * Version 2.0.1 released. + +2002-03-18 src/screens.c + * "HandleChooseLevel()": Small bug in level series navigation fixed. + +2002-03-18 src/files.c [src/libgame/misc.c] + * Moved some common functions from src/files.c to src/libgame/misc.c. + +2002-03-18 src/files.c [src/libgame/misc.c] + * Changed permissions for new directories and saved files (especially + score files) according to suggestions of Debian users and mantainers. + Thanks to Drew Parsons for the patch. + +2002-03-17 src/files.c + * Changed "{Load|Save}{Level|Tape}()" to IFF style file format: + Replaced "cookie" header string ("ROCKSNDIAMONDS_...\n") with + real IFF style header "RND1....XXXX" (where "XXXX" is "CAVE" + for levels and "TAPE" for tapes). Old "cookie" style format is + still supported for reading. New level and tape files are written + in new format. + + * New IFF chunk "VERS" contains version numbers for file and game + (where "game version" is the version of the program that wrote the + file, and "file version" is a version number to distinguish files + with different format, for example after adding new features). + +2002-03-15 src/screen.c + * "DrawHallOfFame()": "FadeSounds()" when entering the hall of fame. + (Before, you heard a mixture of the in-game music and the + hall-of-fame music.) + +2002-03-14 src/events.c + * Function "DumpTape()" (files.c) now available by pressing 't' from + main menu (when in DEBUG mode). + +2002-03-14 src/game.c + * "GameWon()": When game was won playing a tape, now there is no delay + raising the score and no corresponding sound is played. + +2002-03-14 src/files.c + * Changed "LoadTape()" for real chunk support and also adjusted + "SaveTape()" accordingly. + +2002-03-14 src/game.c, src/tape.c, src/files.c + * Important changes to tape format: The old tape format stored all + actions with a real effect with a corresponding delay between the + stored actions. This had some major disadvantages (for example, + push delays had to be ignored, pressing a button for some seconds + mutated to several single button presses because of the non-action + delays between two action frames etc.). The new tape format just + stupidly records all device actions and replays them later. I really + don't know why I haven't solved it that way before?! Old-style tapes + (with tape file version less than 2.0) get converted to the new + format on-the-fly when loading and can therefore still be played; + only some minor parts of the old-style tape handling code was needed. + (A perfect conversion is not possible, because there is information + missing about the device actions between two action frames.) + +2002-03-14 src/files.c + * New function "DumpTape()" to dump the contents of the current tape + in a human readable format. + +2002-03-14 src/game.c + * Small tape bug fixed: When automatically advancing to next level + after a game was won, the tape from the previous level still was + loaded as a tape for the new level. + +2002-03-14 src/tape.c + * Small graphical bug fixed: When pressing ""Record" or "Play" on + tape, cartoons did not get completely removed because + StopAnimation() was not called. + +2002-03-13 src/files.c + * Changed "LoadLevel()" and "SaveLevel()" to add new chunk "CNT2". + Fixed bug of "CONT" and "BODY" (chunk size was set to 8-bit element + size even when using 16-bit elements). Added new chunk "CNT2" for + 16-bit amoeba content (previously written in 8-bit field in "HEAD" + chunk even when content was 16-bit element). "CNT2" should now be + able to store content for arbitrary elements (up to eight blocks of + 3 x 3 element arrays). All "CNT2" elements will always be stored as + 16-bit elements. "CONT" (with 8/16-bit elements) now obsolete. + +2002-03-13 src/files.c + * Changed "LoadLevel()" for real chunk support. + +2002-03-12 src/game.c + * Fixed problem (introduced after 2.0.0 release) with penguins + not getting killed by enemies + +2002-02-24 src/game.c, src/main.h + * Added "player->is_moving"; now "player->last_move_dir" does + not contain any information if the player is just moving at + the moment or not. + Before, "player->last_move_dir" was misused for this purpose + for the robot stuff (robots don't kill players when they are + moving). But setting "player->last_move_dir" to MV_NO_MOVING + broke tapes when walking through pipes! + ("IS_MOVING()" uses "MovPos[][]", but this fails when it is 0 + in a continuous movement. This fact is ignored for friends and + enemies, though.) diff --git a/src/Makefile b/src/Makefile index ff288776..595f5996 100644 --- a/src/Makefile +++ b/src/Makefile @@ -103,7 +103,7 @@ CONFIG_GAME_DIR = $(CONFIG_RO_GAME_DIR) $(CONFIG_RW_GAME_DIR) CONFIG = $(CONFIG_GAME_DIR) $(CONFIG_SCORE_ENTRIES) $(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 bd0e8187..19f8bc0d 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2003-09-08 00:04]" +#define COMPILE_DATE_STRING "[2003-09-12 00:01]" diff --git a/src/files.c b/src/files.c index 0b85e1eb..ac3f0b4b 100644 --- a/src/files.c +++ b/src/files.c @@ -689,6 +689,8 @@ static int LoadLevel_CUS4(FILE *file, int chunk_size, struct LevelInfo *level) /* read change property values */ + setElementChangePages(ei, ei->num_change_pages); + for (i=0; i < ei->num_change_pages; i++) { struct ElementChangeInfo *change = &ei->change_page[i]; diff --git a/src/game.c b/src/game.c index 91694d2d..f554e659 100644 --- a/src/game.c +++ b/src/game.c @@ -5364,10 +5364,13 @@ static void ChangeElementNowExt(int x, int y, int target_element) RelocatePlayer(x, y, target_element); } -static void ChangeElementNow(int x, int y, int element, int page) +static boolean ChangeElementNow(int x, int y, int element, int page) { struct ElementChangeInfo *change = &element_info[element].change_page[page]; + if (Changed[x][y]) /* do not change already changed elements */ + return FALSE; + Changed[x][y] = TRUE; /* no more changes in this frame */ CheckTriggeredElementChange(x, y, Feld[x][y], CE_OTHER_IS_CHANGING); @@ -5375,7 +5378,8 @@ static void ChangeElementNow(int x, int y, int element, int page) if (change->explode) { Bang(x, y); - return; + + return TRUE; } if (change->use_content) @@ -5433,7 +5437,7 @@ static void ChangeElementNow(int x, int y, int element, int page) if (change->only_complete && change->use_random_change && RND(100) < change->random) - return; + return FALSE; for (yy = 0; yy < 3; yy++) for(xx = 0; xx < 3 ; xx++) { @@ -5466,6 +5470,8 @@ static void ChangeElementNow(int x, int y, int element, int page) PlaySoundLevelElementAction(x, y, element, ACTION_CHANGING); } + + return TRUE; } static void ChangeElement(int x, int y, int page) @@ -5506,10 +5512,11 @@ static void ChangeElement(int x, int y, int page) return; } - ChangeElementNow(x, y, element, page); - - if (change->post_change_function) - change->post_change_function(x, y); + if (ChangeElementNow(x, y, element, page)) + { + if (change->post_change_function) + change->post_change_function(x, y); + } } } @@ -5566,8 +5573,10 @@ static boolean CheckTriggeredElementChange(int lx, int ly, int trigger_element, if (x == lx && y == ly) /* do not change trigger element itself */ continue; +#if 0 if (Changed[x][y]) /* do not change already changed elements */ continue; +#endif if (Feld[x][y] == element) { diff --git a/src/main.h b/src/main.h index 76be4a45..69c1c26c 100644 --- a/src/main.h +++ b/src/main.h @@ -376,7 +376,7 @@ #define MAX_ENVELOPE_YSIZE 20 #define MAX_ENVELOPE_TEXT_LEN (MAX_ENVELOPE_XSIZE * MAX_ENVELOPE_YSIZE) #define MIN_CHANGE_PAGES 1 -#define MAX_CHANGE_PAGES 10 +#define MAX_CHANGE_PAGES 16 /* values for elements with content */ #define MIN_ELEMENT_CONTENTS 1 @@ -993,9 +993,9 @@ #define PROGRAM_VERSION_MAJOR 3 #define PROGRAM_VERSION_MINOR 0 -#define PROGRAM_VERSION_PATCH 3 +#define PROGRAM_VERSION_PATCH 4 #define PROGRAM_VERSION_RELEASE 0 -#define PROGRAM_VERSION_STRING "3.0.3" +#define PROGRAM_VERSION_STRING "3.0.4" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" -- 2.34.1