From: Holger Schemel Date: Fri, 12 Sep 2003 23:35:09 +0000 (+0200) Subject: rocksndiamonds-3.0.4 X-Git-Tag: 3.0.4^2 X-Git-Url: https://git.artsoft.org/?a=commitdiff_plain;h=9a1ccc76e3542f3974103e505b27fc1879f0f777;p=rocksndiamonds.git rocksndiamonds-3.0.4 --- diff --git a/CHANGES b/CHANGES index 182a8b2e..2939326e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,7 @@ -Release Version 3.0.4 [?? ??? ????] +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 graphic Release Version 3.0.3 [08 SEP 2003] ----------------------------------- diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index c8b50dc2..00000000 --- a/ChangeLog +++ /dev/null @@ -1,338 +0,0 @@ -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 595f5996..ff288776 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 19f8bc0d..a5d63c85 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2003-09-12 00:01]" +#define COMPILE_DATE_STRING "[2003-09-13 01:34]" diff --git a/src/game.c b/src/game.c index f554e659..750c70a9 100644 --- a/src/game.c +++ b/src/game.c @@ -2285,6 +2285,22 @@ void Explode(int ex, int ey, int phase, int mode) ExplodePhase[x][y] = (phase < last_phase ? phase + 1 : 0); +#ifdef DEBUG + + /* activate this even in non-DEBUG version until cause for crash in + getGraphicAnimationFrame() (see below) is found and eliminated */ +#endif +#if 1 + + if (GfxElement[x][y] == EL_UNDEFINED) + { + printf("Explode(): x = %d, y = %d: GfxElement == EL_UNDEFINED\n", x, y); + printf("Explode(): This should never happen!\n"); + + GfxElement[x][y] = EL_EMPTY; + } +#endif + if (phase == first_phase_after_start) { int element = Store2[x][y]; diff --git a/src/screens.c b/src/screens.c index 0965eb9e..c119ff7c 100644 --- a/src/screens.c +++ b/src/screens.c @@ -1812,7 +1812,6 @@ static struct TokenInfo setup_info_editor[] = { TYPE_SWITCH, &setup.editor.el_chars, "Characters:" }, { TYPE_SWITCH, &setup.editor.el_custom, "Custom:" }, { TYPE_SWITCH, &setup.editor.el_custom_more, "More Custom:" }, - { TYPE_EMPTY, NULL, "" }, { TYPE_SWITCH, &setup.editor.el_headlines, "Headlines:" }, { TYPE_EMPTY, NULL, "" }, { TYPE_LEAVE_MENU, execSetupMain, "Back" }, diff --git a/src/tools.c b/src/tools.c index 1f0856dc..f8f37ea0 100644 --- a/src/tools.c +++ b/src/tools.c @@ -35,6 +35,7 @@ static void UnmapToolButtons(); static void HandleToolButtons(struct GadgetInfo *); static int el_act_dir2crm(int, int, int); +static int el_act2crm(int, int); static struct GadgetInfo *tool_gadget[NUM_TOOL_BUTTONS]; static int request_gadget_id = -1; @@ -1217,6 +1218,12 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) { 0, +1 } }; +#if 0 + if (x == 0 && y == 7) + printf("::: %d, %d [%d]\n", GfxElement[x][y], Feld[x][y], + crumbled_border_size); +#endif + if (!IN_LEV_FIELD(x, y)) return; @@ -1272,7 +1279,9 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) } else /* crumble neighbour fields */ { +#if 0 getGraphicSource(graphic, frame, &src_bitmap, &src_x, &src_y); +#endif for(i=0; i<4; i++) { @@ -1287,6 +1296,12 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) IS_MOVING(xx, yy)) continue; +#if 1 + graphic = el_act2crm(Feld[xx][yy], ACTION_DEFAULT); + + getGraphicSource(graphic, frame, &src_bitmap, &src_x, &src_y); +#endif + if (i == 1 || i == 2) { width = crumbled_border_size; @@ -1312,7 +1327,18 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) void DrawLevelFieldCrumbledSand(int x, int y) { +#if 1 + int graphic; + + if (!IN_LEV_FIELD(x, y)) + return; + + graphic = el_act2crm(Feld[x][y], ACTION_DEFAULT); + + DrawLevelFieldCrumbledSandExt(x, y, graphic, 0); +#else DrawLevelFieldCrumbledSandExt(x, y, IMG_SAND_CRUMBLED, 0); +#endif } void DrawLevelFieldCrumbledSandDigging(int x, int y, int direction, @@ -2780,6 +2806,13 @@ int el_act2img(int element, int action) return element_info[element].graphic[action]; } +int el_act2crm(int element, int action) +{ + element = GFX_ELEMENT(element); + + return element_info[element].crumbled[action]; +} + int el_dir2img(int element, int direction) { element = GFX_ELEMENT(element);