X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=6529d447a61ecad013805180c6b6f7160d062450;hb=9f7cd608c28ded86b2c2e649c776220ae27df038;hp=62965af09d2df0e90ce0f15107f6e4c2d9453fe6;hpb=e2f44b4cef0a3a0441a8c031181a543751ef9cb3;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index 62965af0..6529d447 100644 --- a/src/tools.c +++ b/src/tools.c @@ -242,8 +242,7 @@ void DrawMaskedBorder_ALL() void DrawMaskedBorder(int redraw_mask) { /* do not draw masked screen borders when displaying title screens */ - if (effectiveGameStatus() == GAME_MODE_TITLE || - effectiveGameStatus() == GAME_MODE_MESSAGE) + if (effectiveGameStatus() == GAME_MODE_TITLE) return; if (redraw_mask & REDRAW_ALL) @@ -1766,7 +1765,7 @@ static void DrawPreviewLevelExt(int from_x, int from_y) int real_preview_xsize = MIN(level_xsize, preview.xsize); int real_preview_ysize = MIN(level_ysize, preview.ysize); int dst_x = SX + ALIGNED_XPOS(preview.x, preview_width, preview.align); - int dst_y = SY + preview.y; + int dst_y = SY + ALIGNED_YPOS(preview.y, preview_height, preview.valign); int x, y; DrawBackground(dst_x, dst_y, preview_width, preview_height); @@ -1820,6 +1819,15 @@ static void DrawPreviewLevelLabelExt(int mode) struct TextPosInfo *pos = &menu.main.text.level_info_2; char label_text[MAX_OUTPUT_LINESIZE + 1]; int max_len_label_text; +#if 1 + int font_nr = pos->font; + int i; + + if (mode == MICROLABEL_LEVEL_AUTHOR_HEAD || + mode == MICROLABEL_IMPORTED_FROM_HEAD || + mode == MICROLABEL_IMPORTED_BY_HEAD) + font_nr = pos->font_alt; +#else int font_nr = FONT_TEXT_2; int i; @@ -1827,6 +1835,7 @@ static void DrawPreviewLevelLabelExt(int mode) mode == MICROLABEL_IMPORTED_FROM_HEAD || mode == MICROLABEL_IMPORTED_BY_HEAD) font_nr = FONT_TEXT_3; +#endif #if 1 max_len_label_text = getMaxTextLength(pos, font_nr); @@ -1893,8 +1902,10 @@ void DrawPreviewLevel(boolean restart) int level_ysize = lev_fieldy + (show_level_border ? 2 : 0); int last_game_status = game_status; /* save current game status */ +#if 0 /* force PREVIEW font on preview level */ game_status = GAME_MODE_PSEUDO_PREVIEW; +#endif if (restart) { @@ -1927,7 +1938,11 @@ void DrawPreviewLevel(boolean restart) { struct TextPosInfo *pos = &menu.main.text.level_info_1; char label_text[MAX_OUTPUT_LINESIZE + 1]; +#if 1 + int font_nr = pos->font; +#else int font_nr = FONT_TEXT_1; +#endif #if 1 int max_len_label_text = getMaxTextLength(pos, font_nr); #else @@ -2610,7 +2625,7 @@ boolean Request(char *text, unsigned int req_state) /* clear door drawing field */ DrawBackground(DX, DY, DXSIZE, DYSIZE); - /* force DOOR font on preview level */ + /* force DOOR font inside door area */ game_status = GAME_MODE_PSEUDO_DOOR; /* write text for request */ @@ -5725,10 +5740,94 @@ unsigned int InitRND(long seed) return InitEngineRandom_RND(seed); } +#if 1 +static struct Mapping_EM_to_RND_object object_mapping[TILE_MAX]; +static struct Mapping_EM_to_RND_player player_mapping[MAX_PLAYERS][SPR_MAX]; +#endif + +void ResetGfxAnimation_EM(int x, int y, int tile) +{ + GfxFrame[x][y] = 0; +} + +void getGraphicSourceObjectExt_EM(int tile, int frame_em, + Bitmap **src_bitmap, int *src_x, int *src_y, + int x, int y) +{ + int element = object_mapping[tile].element_rnd; + int action = object_mapping[tile].action; + int direction = object_mapping[tile].direction; + boolean is_backside = object_mapping[tile].is_backside; + boolean action_removing = (action == ACTION_DIGGING || + action == ACTION_SNAPPING || + action == ACTION_COLLECTING); + int effective_element = (frame_em > 0 ? element : + is_backside ? EL_EMPTY : + action_removing ? EL_EMPTY : + element); + int graphic = (direction == MV_NONE ? + el_act2img(effective_element, action) : + el_act_dir2img(effective_element, action, direction)); + struct GraphicInfo *g = &graphic_info[graphic]; + int sync_frame; + + if (graphic_info[graphic].anim_global_sync) + sync_frame = FrameCounter; + else + sync_frame = 7 - frame_em; + + SetRandomAnimationValue(x, y); + + int frame = getAnimationFrame(g->anim_frames, + g->anim_delay, + g->anim_mode, + g->anim_start_frame, + sync_frame); + + getGraphicSourceExt(graphic, frame, src_bitmap, src_x, src_y, FALSE); +} + +void getGraphicSourcePlayerExt_EM(int player_nr, int anim, int frame_em, + Bitmap **src_bitmap, int *src_x, int *src_y) +{ + int element = player_mapping[player_nr][anim].element_rnd; + int action = player_mapping[player_nr][anim].action; + int direction = player_mapping[player_nr][anim].direction; + int graphic = (direction == MV_NONE ? + el_act2img(element, action) : + el_act_dir2img(element, action, direction)); + struct GraphicInfo *g = &graphic_info[graphic]; + int sync_frame; + + InitPlayerGfxAnimation(&stored_player[player_nr], action, direction); + + stored_player[player_nr].StepFrame = 7 - frame_em; + + sync_frame = stored_player[player_nr].Frame; + +#if 0 + printf("::: %d: %d, %d [%d]\n", + player_nr, + stored_player[player_nr].Frame, + stored_player[player_nr].StepFrame, + FrameCounter); +#endif + + int frame = getAnimationFrame(g->anim_frames, + g->anim_delay, + g->anim_mode, + g->anim_start_frame, + sync_frame); + + getGraphicSourceExt(graphic, frame, src_bitmap, src_x, src_y, FALSE); +} + void InitGraphicInfo_EM(void) { +#if 0 struct Mapping_EM_to_RND_object object_mapping[TILE_MAX]; struct Mapping_EM_to_RND_player player_mapping[MAX_PLAYERS][SPR_MAX]; +#endif int i, j, p; #if DEBUG_EM_GFX @@ -6275,7 +6374,7 @@ void InitGraphicInfo_EM(void) g->anim_start_frame, sync_frame); - getGraphicSourceExt(graphic, frame, &src_bitmap, &src_x,&src_y, FALSE); + getGraphicSourceExt(graphic, frame, &src_bitmap, &src_x, &src_y, FALSE); g_em->bitmap = src_bitmap; g_em->src_x = src_x;