void setup_exchange_player_number(void) { struct PlayerInfo *player; struct Packet *pckt; int i,k; SYNCDBG(6,"Starting"); clear_packets(); player = get_my_player(); pckt = get_packet_direct(my_player_number); set_packet_action(pckt, PckA_InitPlayerNum, player->field_2C, settings.video_rotate_mode, 0, 0); if (LbNetwork_Exchange(pckt)) ERRORLOG("Network Exchange failed"); k = 0; for (i=0; i<NET_PLAYERS_COUNT; i++) { pckt = get_packet_direct(i); if ((net_player_info[i].active) && (pckt->action == PckA_InitPlayerNum)) { player = get_player(k); player->id_number = k; player->field_0 |= 0x01; if (pckt->field_8 < 1) player->field_4B5 = 2; else player->field_4B5 = 5; player->field_2C = pckt->field_6; init_player(player, 0); strncpy(player->field_15,net_player[i].name,sizeof(struct TbNetworkPlayerName)); k++; } } }
void redraw_creature_view(void) { SYNCDBG(6,"Starting"); TbGraphicsWindow ewnd; struct PlayerInfo *player; struct Thing *thing; //_DK_redraw_creature_view(); return; player = get_my_player(); if (player->field_45F != 2) player->field_45F = 2; update_explored_flags_for_power_sight(player); thing = thing_get(player->controlled_thing_idx); TRACE_THING(thing); if (!thing_is_invalid(thing)) draw_creature_view(thing); if (smooth_on) { store_engine_window(&ewnd,pixel_size); smooth_screen_area(lbDisplay.WScreen, ewnd.x, ewnd.y, ewnd.width, ewnd.height, lbDisplay.GraphicsScreenWidth); } remove_explored_flags_for_power_sight(player); draw_swipe_graphic(); if ((game.numfield_C & 0x20) != 0) { draw_whole_status_panel(); } draw_gui(); if ((game.numfield_C & 0x20) != 0) { draw_overlay_compass(player->minimap_pos_x, player->minimap_pos_y); } message_draw(); gui_draw_all_boxes(); draw_tooltip(); }
void gui_video_gamma_correction(struct GuiButton *gbtn) { struct PlayerInfo *player; player = get_my_player(); video_gamma_correction = (video_gamma_correction + 1) % GAMMA_LEVELS_COUNT; set_players_packet_action(player, PckA_SetGammaLevel, video_gamma_correction, 0, 0, 0); }
void setup_engine_window(long x, long y, long width, long height) { struct PlayerInfo *player; SYNCDBG(6,"Starting for size (%ld,%ld) at (%ld,%ld)",width,height,x,y); player=get_my_player(); if (game.numfield_C & 0x20) { if (x > MyScreenWidth) x = MyScreenWidth; if (x < status_panel_width) x = status_panel_width; } else { if (x > MyScreenWidth) x = MyScreenWidth; if (x < 0) x = 0; } if (y > MyScreenHeight) y = MyScreenHeight; if (y < 0) y = 0; if (x+width > MyScreenWidth) width = MyScreenWidth-x; if (width < 0) width = 0; if (y+height > MyScreenHeight) height = MyScreenHeight-y; if (height < 0) height = 0; player->engine_window_x = x; player->engine_window_y = y; player->engine_window_width = width; player->engine_window_height = height; }
void frontnet_draw_current_message(struct GuiButton *gbtn) { static TbClockMSec last_time = 0; static TbBool print_with_cursor = 1; struct PlayerInfo *player; int font_idx; char text[2048]; // Blink cursor - switch state every 100ms if (LbTimerClock() >= last_time + 100) { print_with_cursor = !print_with_cursor; last_time = LbTimerClock(); } // Get player player = get_my_player(); if (player_invalid(player)) { return; } // Prepare text buffer and font snprintf(text, sizeof(text), "%s%s", player->mp_message_text, print_with_cursor?"_":""); font_idx = frontend_button_caption_font(gbtn, 0); // And draw the message frontnet_draw_scroll_selection_box(gbtn, font_idx, text); }
long gf_change_player_instance(struct GuiBox *gbox, struct GuiBoxOption *goptn, unsigned char btn, long *tag) { struct PlayerInfo *player; player=get_my_player(); set_players_packet_action(player, PckA_CtrlCrtrSetInstnc, *tag, 0, 0, 0); return 1; }
long gf_explore_everywhere(struct GuiBox *gbox, struct GuiBoxOption *goptn, unsigned char btn, long *tag) { struct PlayerInfo *player; player = get_my_player(); // if (player->cheat_mode == 0) return false; -- there's no cheat_mode flag yet set_players_packet_action(player, PckA_CheatRevealMap, 0, 0, 0, 0); return 1; }
long gf_give_all_creatures_spells(struct GuiBox *gbox, struct GuiBoxOption *goptn, unsigned char btn, long *tag) { struct PlayerInfo *player; player = get_my_player(); // if (player->cheat_mode == 0) return false; -- there's no cheat_mode flag yet set_players_packet_action(player, PckA_CheatCrAllSpls, 0, 0, 0, 0); return 1; }
long gf_research_magic(struct GuiBox *gbox, struct GuiBoxOption *goptn, unsigned char btn, long *tag) { struct PlayerInfo *player; player = get_my_player(); // if (player->cheat_mode == 0) return false; -- there's no cheat_mode flag yet set_players_packet_action(player, PckA_CheatAllMagic, 0, 0, 0, 0); return 1; }
void load_engine_window(TbGraphicsWindow *ewnd) { struct PlayerInfo *player; player=get_my_player(); player->engine_window_x = ewnd->x; player->engine_window_y = ewnd->y; player->engine_window_width = ewnd->width; player->engine_window_height = ewnd->height; }
void init_save_menu(struct GuiMenu *gmnu) { struct PlayerInfo *player; SYNCDBG(6,"Starting"); player = get_my_player(); set_players_packet_action(player, PckA_Unknown082, 1, 1, 0, 0); load_game_save_catalogue(); update_loadsave_input_strings(save_game_catalogue); }
long gfa_can_give_controlled_creature_spells(struct GuiBox *gbox, struct GuiBoxOption *goptn, long *tag) { struct PlayerInfo *player; player = get_my_player(); // if (player->cheat_mode == 0) return false; -- there's no cheat_mode flag yet if ((player->controlled_thing_idx <= 0) || (player->controlled_thing_idx >= THINGS_COUNT)) return false; return true; }
long gfa_controlled_creature_has_instance(struct GuiBox *gbox, struct GuiBoxOption *goptn, long *tag) { struct PlayerInfo *player; struct Thing *thing; player = get_my_player(); if ((player->controlled_thing_idx <= 0) || (player->controlled_thing_idx >= THINGS_COUNT)) return false; thing = thing_get(player->controlled_thing_idx); return creature_instance_is_available(thing, *tag); }
long gf_give_controlled_creature_spells(struct GuiBox *gbox, struct GuiBoxOption *goptn, unsigned char btn, long *tag) { struct PlayerInfo *player; player = get_my_player(); // if (player->cheat_mode == 0) return false; -- there's no cheat_mode flag yet if ((player->controlled_thing_idx <= 0) || (player->controlled_thing_idx >= THINGS_COUNT)) return 0; set_players_packet_action(player, PckA_CheatCrtSpells, 0, 0, 0, 0); return 1; }
long gf_decide_victory(struct GuiBox *gbox, struct GuiBoxOption *goptn, unsigned char btn, long *tag) { //TODO PACKET we should use packets! This way is unacceptable! struct PlayerInfo *player; player = get_my_player(); if (tag[0]) set_player_as_won_level(player); else set_player_as_lost_level(player); return 1; }
void gui_load_game(struct GuiButton *gbtn) { struct PlayerInfo *player; player=get_my_player(); if (!load_game(gbtn->field_1B)) { ERRORLOG("Loading game %d failed; quitting.",(int)gbtn->field_1B); // Even on quit, we still should unpause the game set_players_packet_action(player, PckA_TogglePause, 0, 0, 0, 0); quit_game = 1; return; } set_players_packet_action(player, PckA_TogglePause, 0, 0, 0, 0); }
void gui_video_cluedo_maintain(struct GuiButton *gbtn) { struct PlayerInfo *player; player = get_my_player(); if (player->view_mode == PVM_FrontView) { gbtn->btype_value |= LbBFeF_NoTooltip; gbtn->flags &= ~LbBtnF_Enabled; } else { gbtn->btype_value &= LbBFeF_IntValueMask; gbtn->flags |= LbBtnF_Enabled; } }
void find_nearest_rooms_for_ambient_sound(void) { struct PlayerInfo *player; struct Room *room; struct MapOffset *sstep; struct Coord3d pos; long slb_x,slb_y; MapSubtlCoord stl_x,stl_y; long i,k; SYNCDBG(8,"Starting"); if ((SoundDisabled) || (GetCurrentSoundMasterVolume() <= 0)) return; player = get_my_player(); struct Camera *cam; cam = player->acamera; if (cam == NULL) { ERRORLOG("No active camera"); set_room_playing_ambient_sound(NULL, 0); return; } slb_x = subtile_slab(cam->mappos.x.stl.num); slb_y = subtile_slab(cam->mappos.y.stl.num); for (i = 0; i < 11*11; i++) { sstep = &spiral_step[i]; stl_x = slab_subtile_center(slb_x + sstep->h); stl_y = slab_subtile_center(slb_y + sstep->v); if (subtile_is_player_room(player->id_number,stl_x,stl_y)) { room = subtile_room_get(stl_x, stl_y); if (room_is_invalid(room)) continue; struct RoomConfigStats *roomst; roomst = &slab_conf.room_cfgstats[room->kind]; k = roomst->ambient_snd_smp_id; if (k > 0) { SYNCDBG(8,"Playing ambient for %s at (%d,%d)",room_code_name(room->kind),(int)stl_x,(int)stl_y); pos.x.val = subtile_coord_center(stl_x); pos.y.val = subtile_coord_center(stl_y); pos.z.val = subtile_coord(1,0); set_room_playing_ambient_sound(&pos, k); return; } } } set_room_playing_ambient_sound(NULL, 0); }
long gf_change_player_state(struct GuiBox *gbox, struct GuiBoxOption *goptn, unsigned char btn, long *tag) { // Note: reworked from beta and unchecked struct PlayerInfo *player=get_my_player(); set_players_packet_action(player, PckA_SetPlyrState, tag[0], tag[1], 0, 0); struct GuiBoxOption *guop; guop=gbox->optn_list; while (guop->label[0] != '!') { guop->active = 0; guop++; } goptn->active = 1; return 1; }
void update_light_render_area(void) { int subtile_x,subtile_y; int delta_x,delta_y; int startx,endx,starty,endy; struct PlayerInfo *player; SYNCDBG(6,"Starting"); player=get_my_player(); if (player->view_mode >= PVM_CreatureView) if ((player->view_mode <= PVM_IsometricView) || (player->view_mode == PVM_FrontView)) { game.field_14BB5D = LIGHT_MAX_RANGE; game.field_14BB59 = LIGHT_MAX_RANGE; } delta_x=abs(game.field_14BB59); delta_y=abs(game.field_14BB5D); // Prepare the area constraints if (player->acamera != NULL) { subtile_y = player->acamera->mappos.y.stl.num; subtile_x = player->acamera->mappos.x.stl.num; } else { subtile_y = 0; subtile_x = 0; } //SYNCMSG("LghtRng %d,%d CamTil %d,%d",game.field_14BB59,game.field_14BB5D,tile_x,tile_y); if (subtile_y > delta_y) { starty = subtile_y - delta_y; if (starty > map_subtiles_y) starty = map_subtiles_y; } else starty = 0; if (subtile_x > delta_x) { startx = subtile_x - delta_x; if (startx > map_subtiles_x) startx = map_subtiles_x; } else startx = 0; endy = subtile_y + delta_y; if (endy < starty) endy = starty; if (endy > map_subtiles_y) endy = map_subtiles_y; endx = subtile_x + delta_x; if (endx < startx) endx = startx; if (endx > map_subtiles_x) endx = map_subtiles_x; // Set the area light_render_area(startx, starty, endx, endy); }
void update_player_sounds(void) { int k; struct PlayerInfo *player; SYNCDBG(7,"Starting"); if ((game.operation_flags & GOF_Paused) == 0) { player = get_my_player(); process_messages(); if (!SoundDisabled) { if (game.audiotrack > 0) { PlayMusicPlayer(game.audiotrack); } update_3d_sound_receiver(player); } game.play_gameturn++; } find_nearest_rooms_for_ambient_sound(); process_3d_sounds(); k = (game.bonus_time-game.play_gameturn) / 2; if (bonus_timer_enabled()) { if ((game.bonus_time == game.play_gameturn) || ((game.bonus_time > game.play_gameturn) && (((k <= 100) && ((k % 10) == 0)) || ((k<=300) && ((k % 50) == 0)) || ((k % 250) == 0))) ) play_non_3d_sample(89); } // Rare message easter egg if ((game.play_gameturn != 0) && ((game.play_gameturn % 20000) == 0)) { if (ACTION_RANDOM(2000) == 0) { k = UNSYNC_RANDOM(10); SYNCDBG(9,"Rare message condition met, selected %d",(int)k); if (k == 7) { output_message(SMsg_PantsTooTight, 0, true); } else { output_message(SMsg_FunnyMessages+k, 0, true); } } } SYNCDBG(9,"Finished"); }
void find_nearest_rooms_for_ambient_sound(void) { struct PlayerInfo *player; struct Room *room; struct MapOffset *sstep; struct Coord3d pos; long slb_x,slb_y; long stl_x,stl_y; long i,k; SYNCDBG(8,"Starting"); //_DK_find_nearest_rooms_for_ambient_sound(); if ((SoundDisabled) || (GetCurrentSoundMasterVolume() <= 0)) return; player = get_my_player(); if (player->acamera == NULL) { ERRORLOG("No active camera"); set_room_playing_ambient_sound(NULL, 0); return; } slb_x = subtile_slab(player->acamera->mappos.x.stl.num); slb_y = subtile_slab(player->acamera->mappos.y.stl.num); for (i = 0; i < 120; i++) { sstep = &spiral_step[i]; stl_x = 3 * (slb_x + sstep->h); stl_y = 3 * (slb_y + sstep->v); if (subtile_is_player_room(player->id_number,stl_x,stl_y)) { room = subtile_room_get(stl_x, stl_y); if (room_is_invalid(room)) continue; k = room_info[room->kind].field_4; if (k > 0) { pos.x.val = (stl_x << 8); pos.y.val = (stl_y << 8); pos.z.val = (1 << 8); set_room_playing_ambient_sound(&pos, k); return; } } } set_room_playing_ambient_sound(NULL, 0); }
void draw_overlay_compass(long base_x, long base_y) { unsigned short flg_mem; flg_mem = lbDisplay.DrawFlags; LbTextSetFont(winfont); lbDisplay.DrawFlags |= Lb_SPRITE_TRANSPAR4; LbTextSetWindow(0, 0, MyScreenWidth, MyScreenHeight); int units_per_px; units_per_px = (16*status_panel_width + 140/2) / 140; int tx_units_per_px; tx_units_per_px = (22 * units_per_px) / LbTextLineHeight(); int w,h; w = (LbSprFontCharWidth(lbFontPtr,'/')*tx_units_per_px/16) / 2; h = (LbSprFontCharHeight(lbFontPtr,'/')*tx_units_per_px/16) / 2 + 2*units_per_px/16; struct PlayerInfo *player; player = get_my_player(); const struct Camera *cam; cam = player->acamera; int center_x, center_y; int shift_x, shift_y; center_x = base_x*units_per_px/16 + MapDiagonalLength/2; center_y = base_y*units_per_px/16 + MapDiagonalLength/2; shift_x = (-(MapDiagonalLength*7/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits; shift_y = (-(MapDiagonalLength*7/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits; if (LbScreenIsLocked()) { LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, get_string(GUIStr_MapN)); } shift_x = ( (MapDiagonalLength*7/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits; shift_y = ( (MapDiagonalLength*7/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits; if (LbScreenIsLocked()) { LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, get_string(GUIStr_MapS)); } shift_x = ( (MapDiagonalLength*7/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits; shift_y = (-(MapDiagonalLength*7/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits; if (LbScreenIsLocked()) { LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, get_string(GUIStr_MapE)); } shift_x = (-(MapDiagonalLength*7/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits; shift_y = ( (MapDiagonalLength*7/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits; if (LbScreenIsLocked()) { LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, get_string(GUIStr_MapW)); } lbDisplay.DrawFlags = flg_mem; }
void draw_overlay_compass(long base_x, long base_y) { unsigned short flg_mem; flg_mem = lbDisplay.DrawFlags; LbTextSetFont(winfont); lbDisplay.DrawFlags |= Lb_SPRITE_TRANSPAR4; LbTextSetWindow(0, 0, MyScreenWidth, MyScreenHeight); int units_per_px; units_per_px = (16*status_panel_width + 70) / 140; int tx_units_per_px; tx_units_per_px = (22 * units_per_px) / LbTextLineHeight(); int w,h; w = (LbSprFontCharWidth(lbFontPtr,'/')*tx_units_per_px/16) / 2; h = (LbSprFontCharHeight(lbFontPtr,'/')*tx_units_per_px/16) / 2 + 2*units_per_px/16; struct PlayerInfo *player; player = get_my_player(); struct Camera *cam; cam = player->acamera; int center_x, center_y; int shift_x, shift_y; center_x = base_x*units_per_px/16 + PANNEL_MAP_RADIUS*units_per_px/16; center_y = base_y*units_per_px/16 + PANNEL_MAP_RADIUS*units_per_px/16; shift_x = ((-(PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits; shift_y = ((-(PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits; if (LbScreenIsLocked()) { LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, gui_strings[877]); } shift_x = (( (PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits; shift_y = (( (PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits; if (LbScreenIsLocked()) { LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, gui_strings[879]); } shift_x = (( (PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits; shift_y = ((-(PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits; if (LbScreenIsLocked()) { LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, gui_strings[878]); } shift_x = ((-(PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits; shift_y = (( (PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits; if (LbScreenIsLocked()) { LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, gui_strings[880]); } lbDisplay.DrawFlags = flg_mem; }
void frontnet_select_alliance(struct GuiButton *gbtn) { struct PlayerInfo *myplyr; myplyr = get_my_player(); int plyr1_idx, plyr2_idx; plyr1_idx = (long)gbtn->content - 74; plyr2_idx = gbtn->btype_value; if ( plyr1_idx == myplyr->id_number || plyr2_idx == myplyr->id_number ) { struct ScreenPacket *nspck; nspck = &net_screen_packet[my_player_number]; if ((nspck->field_4 & 0xF8) == 0) { nspck->field_4 = (nspck->field_4 & 7) | 0x20; nspck->param1 = plyr1_idx; nspck->param2 = plyr2_idx; } } }
void store_engine_window(TbGraphicsWindow *ewnd,int divider) { struct PlayerInfo *player; player=get_my_player(); if (divider <= 1) { ewnd->x = player->engine_window_x; ewnd->y = player->engine_window_y; ewnd->width = player->engine_window_width; ewnd->height = player->engine_window_height; } else { ewnd->x = player->engine_window_x/divider; ewnd->y = player->engine_window_y/divider; ewnd->width = player->engine_window_width/divider; ewnd->height = player->engine_window_height/divider; } ewnd->ptr = NULL; }
void gui_save_game(struct GuiButton *gbtn) { struct PlayerInfo *player; long slot_num; player = get_my_player(); if (strcasecmp((char *)gbtn->content, gui_string(GUIStr_SlotUnused)) != 0) { slot_num = gbtn->field_1B%TOTAL_SAVE_SLOTS_COUNT; fill_game_catalogue_slot(slot_num,(char *)gbtn->content); if (save_game(slot_num)) { output_message(SMsg_GameSaved, 0, true); } else { ERRORLOG("Error in save!"); create_error_box(GUIStr_ErrorSaving); } } set_players_packet_action(player, PckA_TogglePause, 0, 0, 0, 0); }
void add_score_to_high_score_table(void) { struct Dungeon *dungeon; struct PlayerInfo *player; int idx; player = get_my_player(); dungeon = get_players_dungeon(player); idx = add_high_score_entry(dungeon->lvstats.player_score, get_loaded_level_number(), ""); if (idx >= 0) { // Preparing input in the new entry // Note that we're not clearing previous name - this way it may be easily kept unchanged high_score_entry_input_active = idx; high_score_entry_index = strlen(high_score_entry); } else { high_score_entry_input_active = -1; high_score_entry_index = 0; } }
void lightning_modify_palette(struct Thing *thing) { struct PlayerInfo *myplyr; // _DK_lightning_modify_palette(thing); myplyr = get_my_player(); if (thing->health == 0) { PaletteSetPlayerPalette(myplyr, engine_palette); myplyr->field_3 &= ~0x08; return; } if (myplyr->acamera == NULL) { ERRORLOG("No active camera"); return; } if (((thing->health % 8) != 7) && (thing->health != 1) && (ACTION_RANDOM(4) != 0)) { if ((myplyr->field_3 & 0x08) != 0) { if (get_2d_box_distance(&myplyr->acamera->mappos, &thing->mappos) < 11520) { PaletteSetPlayerPalette(myplyr, engine_palette); myplyr->field_3 &= ~0x08; } } return; } if ((myplyr->view_mode != PVM_ParchFadeIn) && (myplyr->view_mode != PVM_ParchFadeOut) && (myplyr->view_mode != PVM_ParchmentView)) { if ((myplyr->field_3 & 0x08) == 0) { if (get_2d_box_distance(&myplyr->acamera->mappos, &thing->mappos) < 11520) { PaletteSetPlayerPalette(myplyr, lightning_palette); myplyr->field_3 |= 0x08; } } } }
/** * Renders source and destination screens for map fading. * Stores them in given buffers. * @param fade_src * @param fade_dest * @param scanline Line width of the two given buffers. * @param height Height to be filled in given buffers. */ void prepare_map_fade_buffers(unsigned char *fade_src, unsigned char *fade_dest, int scanline, int height) { struct PlayerInfo *player; player=get_my_player(); // render the 3D screen if (player->field_4B5 == 2) redraw_isometric_view(); else redraw_frontview(); // Copy the screen to fade source temp buffer int i; int fadebuf_pos; fadebuf_pos = 0; for (i = 0; i < height; i++) { unsigned char *src; unsigned char *dst; src = lbDisplay.WScreen + lbDisplay.GraphicsScreenWidth * i; dst = &fade_src[fadebuf_pos]; fadebuf_pos += scanline; memcpy(dst, src, MyScreenWidth/pixel_size); } // create the parchment screen load_parchment_file(); redraw_minimal_overhead_view(); // Copy the screen to fade destination temp buffer fadebuf_pos = 0; for (i = 0; i < height; i++) { unsigned char *src; unsigned char *dst; src = lbDisplay.WScreen + lbDisplay.GraphicsScreenWidth * i; dst = &fade_dest[fadebuf_pos]; fadebuf_pos += scanline; memcpy(dst, src, MyScreenWidth/pixel_size); } }