X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ftools.c;h=fcc82f30f17919c995a146f877de3287c0607863;hp=21f062b41cdc21fb2bfc3c257f08ffbefc87d9f7;hb=1a5c85211f0a5b74366d264260d464266afb208d;hpb=8cef7dc31f5b96c492079d59acab2cb1587b3c8c diff --git a/src/tools.c b/src/tools.c index 21f062b4..fcc82f30 100644 --- a/src/tools.c +++ b/src/tools.c @@ -358,12 +358,40 @@ static int getLevelFromScreenY_SP(int sy) return ly; } +static int getLevelFromScreenX_MM(int sx) +{ + int level_xsize = level.native_mm_level->fieldx; + int full_xsize = level_xsize * TILESIZE_VAR; + + sx -= (full_xsize < SXSIZE ? (SXSIZE - full_xsize) / 2 : 0); + + int px = sx - SX; + int lx = px / TILESIZE_VAR; + + return lx; +} + +static int getLevelFromScreenY_MM(int sy) +{ + int level_ysize = level.native_mm_level->fieldy; + int full_ysize = level_ysize * TILESIZE_VAR; + + sy -= (full_ysize < SYSIZE ? (SYSIZE - full_ysize) / 2 : 0); + + int py = sy - SY; + int ly = py / TILESIZE_VAR; + + return ly; +} + int getLevelFromScreenX(int x) { if (level.game_engine_type == GAME_ENGINE_TYPE_EM) return getLevelFromScreenX_EM(x); if (level.game_engine_type == GAME_ENGINE_TYPE_SP) return getLevelFromScreenX_SP(x); + if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + return getLevelFromScreenX_MM(x); else return getLevelFromScreenX_RND(x); } @@ -374,6 +402,8 @@ int getLevelFromScreenY(int y) return getLevelFromScreenY_EM(y); if (level.game_engine_type == GAME_ENGINE_TYPE_SP) return getLevelFromScreenY_SP(y); + if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + return getLevelFromScreenY_MM(y); else return getLevelFromScreenY_RND(y); } @@ -465,6 +495,8 @@ void RedrawPlayfield() RedrawPlayfield_EM(TRUE); else if (level.game_engine_type == GAME_ENGINE_TYPE_SP) RedrawPlayfield_SP(TRUE); + else if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + RedrawPlayfield_MM(); else if (level.game_engine_type == GAME_ENGINE_TYPE_RND) RedrawPlayfield_RND(); @@ -611,6 +643,8 @@ void BlitScreenToBitmap(Bitmap *target_bitmap) BlitScreenToBitmap_EM(target_bitmap); else if (level.game_engine_type == GAME_ENGINE_TYPE_SP) BlitScreenToBitmap_SP(target_bitmap); + else if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + BlitScreenToBitmap_MM(target_bitmap); else if (level.game_engine_type == GAME_ENGINE_TYPE_RND) BlitScreenToBitmap_RND(target_bitmap); @@ -7194,6 +7228,16 @@ int map_action_SP_to_RND(int action_sp) } } +int map_element_RND_to_MM(int element_rnd) +{ + return (element_rnd > 1000 ? element_rnd - 1000 : 0); +} + +int map_element_MM_to_RND(int element_mm) +{ + return 1000 + element_mm; +} + int get_next_element(int element) { switch (element) @@ -7438,6 +7482,8 @@ unsigned int InitRND(int seed) return InitEngineRandom_EM(seed); else if (level.game_engine_type == GAME_ENGINE_TYPE_SP) return InitEngineRandom_SP(seed); + else if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + return InitEngineRandom_MM(seed); else return InitEngineRandom_RND(seed); }