From: Holger Schemel Date: Fri, 17 Feb 2023 20:15:00 +0000 (+0100) Subject: added option to rotate newly created gray ball content for MM engine X-Git-Tag: 4.3.5.1~9 X-Git-Url: https://git.artsoft.org/?a=commitdiff_plain;h=a1658d14b0ff3ddb46cc075aba1dddf7d01c6442;p=rocksndiamonds.git added option to rotate newly created gray ball content for MM engine --- diff --git a/src/editor.c b/src/editor.c index 23fb6db2..c0fc0446 100644 --- a/src/editor.c +++ b/src/editor.c @@ -687,6 +687,7 @@ enum GADGET_ID_DF_LASER_RED, GADGET_ID_DF_LASER_GREEN, GADGET_ID_DF_LASER_BLUE, + GADGET_ID_ROTATE_MM_BALL_CONTENT, GADGET_ID_CUSTOM_INDESTRUCTIBLE, GADGET_ID_CUSTOM_CAN_EXPLODE, GADGET_ID_CUSTOM_EXPLODE_FIRE, @@ -1000,6 +1001,7 @@ enum ED_CHECKBUTTON_ID_DF_LASER_RED, ED_CHECKBUTTON_ID_DF_LASER_GREEN, ED_CHECKBUTTON_ID_DF_LASER_BLUE, + ED_CHECKBUTTON_ID_ROTATE_MM_BALL_CONTENT, ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC, ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_1, ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE, @@ -3378,6 +3380,13 @@ static struct NULL, NULL, "blue", "use blue color components in laser" }, + { + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5), + GADGET_ID_ROTATE_MM_BALL_CONTENT, GADGET_ID_NONE, + &level.rotate_mm_ball_content, + NULL, NULL, + "randomly rotate created content", "randomly rotate newly created content" + }, // ---------- element settings: configure 1 (custom elements) --------------- @@ -10137,6 +10146,7 @@ static void DrawPropertiesConfig(void) { MapCounterButtons(ED_COUNTER_ID_MM_BALL_CONTENT); MapSelectboxGadget(ED_SELECTBOX_ID_MM_BALL_CHOICE_MODE); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_ROTATE_MM_BALL_CONTENT); DrawMMBallContentArea(); } diff --git a/src/files.c b/src/files.c index 5439ca15..bd631a46 100644 --- a/src/files.c +++ b/src/files.c @@ -921,6 +921,11 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = &li.mm_ball_content, EL_EMPTY, NULL, &li.num_mm_ball_contents, 8, MAX_MM_BALL_CONTENTS }, + { + EL_MM_GRAY_BALL, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(1), + &li.rotate_mm_ball_content, TRUE + }, { EL_MM_STEEL_BLOCK, -1, @@ -4186,6 +4191,7 @@ static void CopyNativeLevel_RND_to_MM(struct LevelInfo *level) level_mm->num_ball_contents = level->num_mm_ball_contents; level_mm->ball_choice_mode = level->mm_ball_choice_mode; + level_mm->rotate_ball_content = level->rotate_mm_ball_content; for (i = 0; i < level->num_mm_ball_contents; i++) level_mm->ball_content[i] = @@ -4237,6 +4243,7 @@ static void CopyNativeLevel_MM_to_RND(struct LevelInfo *level) level->num_mm_ball_contents = level_mm->num_ball_contents; level->mm_ball_choice_mode = level_mm->ball_choice_mode; + level->rotate_mm_ball_content = level_mm->rotate_ball_content; for (i = 0; i < level->num_mm_ball_contents; i++) level->mm_ball_content[i] = diff --git a/src/game_mm/export.h b/src/game_mm/export.h index 8b92ab0a..7f31d68c 100644 --- a/src/game_mm/export.h +++ b/src/game_mm/export.h @@ -179,6 +179,7 @@ struct LevelInfo_MM int num_ball_contents; int ball_choice_mode; int ball_content[MM_MAX_BALL_CONTENTS]; + boolean rotate_ball_content; short field[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT]; }; diff --git a/src/game_mm/mm_game.c b/src/game_mm/mm_game.c index 63d7690b..267f4c5e 100644 --- a/src/game_mm/mm_game.c +++ b/src/game_mm/mm_game.c @@ -3493,7 +3493,11 @@ static void GameActions_MM_Ext(void) int new_element = native_mm_level.ball_content[element_pos]; - Store[ELX][ELY] = get_rotated_element(new_element, RND(16)); + // randomly rotate newly created game element, if needed + if (native_mm_level.rotate_ball_content) + new_element = get_rotated_element(new_element, RND(16)); + + Store[ELX][ELY] = new_element; Store2[ELX][ELY] = TRUE; } diff --git a/src/main.h b/src/main.h index 4a81627a..188f00b3 100644 --- a/src/main.h +++ b/src/main.h @@ -3308,6 +3308,7 @@ struct LevelInfo int num_mm_ball_contents; int mm_ball_choice_mode; int mm_ball_content[MAX_MM_BALL_CONTENTS]; + boolean rotate_mm_ball_content; // ('int' instead of 'boolean' because used as selectbox value in editor) int use_step_counter; // count steps instead of seconds for level