void kmatrix_draw_names(int *sorted) { int j, x, color; if(Netgame.FairColors) selected_player_rgb = player_rgb_all_blue; else if(Netgame.BlackAndWhitePyros) selected_player_rgb = player_rgb_alt; else selected_player_rgb = player_rgb; for (j=0; j<N_players; j++) { if (Game_mode & GM_TEAM) color = get_team(sorted[j]); else color = sorted[j]; x = FSPACX (70 + CENTERING_OFFSET(N_players) + j*25); if (Players[sorted[j]].connected==CONNECT_DISCONNECTED) gr_set_fontcolor(gr_find_closest_color(31,31,31),-1); else gr_set_fontcolor(BM_XRGB(selected_player_rgb[color].r,selected_player_rgb[color].g,selected_player_rgb[color].b),-1 ); gr_printf( x, FSPACY(40), "%c", Players[sorted[j]].callsign[0] ); } x = FSPACX(72 + CENTERING_OFFSET(N_players) + N_players*25); gr_set_fontcolor( BM_XRGB(31,31,31),-1 ); gr_string( x, FSPACY(40), "K/E"); }
void draw_special_segments(void) { short seg; ubyte color; // Highlight matcens, fuelcens, etc. for (seg=0;seg<=Highest_segment_index;seg++) if (Segments[seg].segnum != -1) switch( Segments[seg].special ) { case SEGMENT_IS_FUELCEN: color = BM_XRGB( 29, 27, 13 ); gr_setcolor(color); draw_segment(&Segments[seg]); break; case SEGMENT_IS_CONTROLCEN: color = BM_XRGB( 29, 0, 0 ); gr_setcolor(color); draw_segment(&Segments[seg]); break; case SEGMENT_IS_ROBOTMAKER: color = BM_XRGB( 29, 0, 31 ); gr_setcolor(color); draw_segment(&Segments[seg]); break; } }
void player_dead_message(void) { if (Player_exploded) { if ( Players[Player_num].lives < 2 ) { int x, y, w, h, aw; gr_set_curfont( HUGE_FONT ); gr_get_string_size( TXT_GAME_OVER, &w, &h, &aw ); w += 20; h += 8; x = (grd_curcanv->cv_bitmap.bm_w - w ) / 2; y = (grd_curcanv->cv_bitmap.bm_h - h ) / 2; gr_settransblend(14, GR_BLEND_NORMAL); gr_setcolor( BM_XRGB(0,0,0) ); gr_rect( x, y, x+w, y+h ); gr_settransblend(GR_FADE_OFF, GR_BLEND_NORMAL); gr_string(0x8000, (GHEIGHT - h)/2 + h/8, TXT_GAME_OVER ); } gr_set_curfont( GAME_FONT ); if (HUD_color == -1) HUD_color = BM_XRGB(0,28,0); gr_set_fontcolor( HUD_color, -1); gr_string(0x8000, GHEIGHT-LINE_SPACING, TXT_PRESS_ANY_KEY); } }
void player_dead_message(void) { if (!(Game_mode & GM_CAPTURE)) { if (Player_exploded) { if ( Players[Player_num].lives < 2 ) { int x, y, w, h, aw; gr_set_curfont( HUGE_FONT ); gr_get_string_size( TXT_GAME_OVER, &w, &h, &aw ); w += 20; h += 8; x = (grd_curcanv->cv_bitmap.bm_w - w ) / 2; y = (grd_curcanv->cv_bitmap.bm_h - h ) / 2; gr_settransblend(14, GR_BLEND_NORMAL); gr_setcolor( BM_XRGB(0,0,0) ); gr_rect( x, y, x+w, y+h ); gr_settransblend(GR_FADE_OFF, GR_BLEND_NORMAL); gr_printf(0x8000, (GHEIGHT - h)/2 + h/8, TXT_GAME_OVER ); } gr_set_curfont( GAME_FONT ); if (HUD_color == -1) HUD_color = BM_XRGB(0,28,0); gr_set_fontcolor( HUD_color, -1); gr_printf(0x8000, GHEIGHT-LINE_SPACING, TXT_PRESS_ANY_KEY); } } extern int player_spawn_timer; if (Game_mode & GM_CAPTURE) { if (Player_exploded) { if ( Players[Player_num].lives < 2 ) { int x, y, w, h, aw; gr_set_curfont( HUGE_FONT ); gr_get_string_size( TXT_GAME_OVER, &w, &h, &aw ); w += 20; h += 8; x = (grd_curcanv->cv_bitmap.bm_w - w ) / 2; y = (grd_curcanv->cv_bitmap.bm_h - h ) / 2; gr_settransblend(14, GR_BLEND_NORMAL); gr_setcolor( BM_XRGB(0,0,0) ); gr_rect( x, y, x+w, y+h ); gr_settransblend(GR_FADE_OFF, GR_BLEND_NORMAL); gr_printf(0x8000, (GHEIGHT - h)/2 + h/8, TXT_GAME_OVER ); } gr_set_curfont( GAME_FONT ); if (HUD_color == -1) HUD_color = BM_XRGB(0,28,0); gr_set_fontcolor( HUD_color, -1); if (((player_spawn_timer + Netgame.RespawnTime*5) > f2i(Players[Player_num].time_level)) && force_respawn == 0) gr_printf(0x8000, GHEIGHT-LINE_SPACING, "You must wait %d seconds to respawn.", (player_spawn_timer + (Netgame.RespawnTime*5)) - f2i(Players[Player_num].time_level)); if (((player_spawn_timer + Netgame.RespawnTime*5) > f2i(Players[Player_num].time_level)) && force_respawn == 1) gr_printf(0x8000, GHEIGHT-LINE_SPACING, "You will respawn in %d seconds.", (player_spawn_timer + (Netgame.RespawnTime*5)) - f2i(Players[Player_num].time_level)); if ((player_spawn_timer + Netgame.RespawnTime*5) <= f2i(Players[Player_num].time_level)) gr_printf(0x8000, GHEIGHT-LINE_SPACING, "Press any key or button to respawn."); } } }
void kmatrix_draw_coop_names(int *sorted) { sorted=sorted; gr_set_fontcolor( BM_XRGB(63,31,31),-1 ); gr_string( CENTERSCREEN, FSPACY(40), "SCORE"); gr_set_fontcolor( BM_XRGB(63,31,31),-1 ); gr_string( CENTERSCREEN+FSPACX(50), FSPACY(40), "DEATHS"); }
void kmatrix_draw_coop_item( int i, int *sorted ) { int x, y; y = FSPACY(50+i*9); gr_printf( FSPACX(CENTERING_OFFSET(N_players)), y, "%s", Players[sorted[i]].callsign ); x = CENTERSCREEN; gr_set_fontcolor( BM_XRGB(60,40,10),-1 ); gr_printf( x, y, "%d", Players[sorted[i]].score ); x = CENTERSCREEN+FSPACX(50); gr_set_fontcolor( BM_XRGB(60,40,10),-1 ); gr_printf( x, y, "%d", Players[sorted[i]].net_killed_total); }
void create_name_canv() { if (Current_level_num > 0) sprintf(name_level, "%s %i: ",TXT_LEVEL, Current_level_num); else name_level[0] = 0; strcat(name_level, Current_level_name); gr_set_fontcolor(BM_XRGB(0,31,0),-1); name_canv = print_to_canvas(name_level,Gamefonts[GFONT_SMALL], BM_XRGB(0,31,0), -1); }
void kmatrix_draw_item( int i, int *sorted ) { int j, x, y; char temp[10]; y = FSPACY(50+i*9); gr_printf( FSPACX(CENTERING_OFFSET(N_players)), y, "%s", Players[sorted[i]].callsign ); for (j=0; j<N_players; j++) { x = FSPACX(70 + CENTERING_OFFSET(N_players) + j*25); if (sorted[i]==sorted[j]) { if (kill_matrix[sorted[i]][sorted[j]] == 0) { gr_set_fontcolor( BM_XRGB(10,10,10),-1 ); gr_printf( x, y, "%d", kill_matrix[sorted[i]][sorted[j]] ); } else { gr_set_fontcolor( BM_XRGB(25,25,25),-1 ); gr_printf( x, y, "-%d", kill_matrix[sorted[i]][sorted[j]] ); } } else { if (kill_matrix[sorted[i]][sorted[j]] <= 0) { gr_set_fontcolor( BM_XRGB(10,10,10),-1 ); gr_printf( x, y, "%d", kill_matrix[sorted[i]][sorted[j]] ); } else { gr_set_fontcolor( BM_XRGB(25,25,25),-1 ); gr_printf( x, y, "%d", kill_matrix[sorted[i]][sorted[j]] ); } } } if (Players[sorted[i]].net_killed_total+Players[sorted[i]].net_kills_total==0) sprintf (temp,"NA"); else sprintf (temp,"%d%%",(int)((float)((float)Players[sorted[i]].net_kills_total/((float)Players[sorted[i]].net_killed_total+(float)Players[sorted[i]].net_kills_total))*100.0)); x = FSPACX(60 + CENTERING_OFFSET(N_players) + N_players*25); gr_set_fontcolor( BM_XRGB(25,25,25),-1 ); gr_printf( x ,y,"%4d/%s",Players[sorted[i]].net_kills_total,temp); }
void game_draw_multi_message() { if ( (Game_mode&GM_MULTI) && (multi_sending_message[Player_num])) { gr_set_curfont(GAME_FONT); gr_set_fontcolor(BM_XRGB(0,63,0),-1); gr_printf(0x8000, (LINE_SPACING*5)+FSPACY(1), "%s: %s_", TXT_MESSAGE, Network_message ); } if ( (Game_mode&GM_MULTI) && (multi_defining_message)) { gr_set_curfont(GAME_FONT); gr_set_fontcolor(BM_XRGB(0,63,0),-1); gr_printf(0x8000, (LINE_SPACING*5)+FSPACY(1), "%s #%d: %s_", TXT_MACRO, multi_defining_message, Network_message ); } }
//draws the given model in the current canvas. The distance is set to //more-or-less fill the canvas. Note that this routine actually renders //into an off-screen canvas that it creates, then copies to the current //canvas. void draw_model_picture(int mn,vms_angvec *orient_angles) { vms_vector temp_pos=ZERO_VECTOR; vms_matrix temp_orient = IDENTITY_MATRIX; grs_canvas *save_canv = grd_curcanv,*temp_canv; Assert(mn>=0 && mn<N_polygon_models); temp_canv = gr_create_canvas(save_canv->cv_bitmap.bm_w,save_canv->cv_bitmap.bm_h); gr_set_current_canvas(temp_canv); gr_clear_canvas( BM_XRGB(0,0,0) ); g3_start_frame(); g3_set_view_matrix(&temp_pos,&temp_orient,0x9000); if (Polygon_models[mn].rad != 0) temp_pos.z = fixmuldiv(DEFAULT_VIEW_DIST,Polygon_models[mn].rad,BASE_MODEL_SIZE); else temp_pos.z = DEFAULT_VIEW_DIST; vm_angles_2_matrix(&temp_orient, orient_angles); PA_DFX(save_light = Lighting_on); PA_DFX(Lighting_on = 0); draw_polygon_model(&temp_pos,&temp_orient,NULL,mn,0,f1_0,NULL,NULL); PA_DFX (Lighting_on = save_light); gr_set_current_canvas(save_canv); gr_bitmap(0,0,&temp_canv->cv_bitmap); gr_free_canvas(temp_canv); }
void kmatrix_redraw_coop() { int i, color; int sorted[MAX_PLAYERS]; multi_sort_kill_list(); grd_curcanv->cv_font = MEDIUM3_FONT; gr_string( 0x8000, FSPACY(10), "COOPERATIVE SUMMARY"); grd_curcanv->cv_font = GAME_FONT; multi_get_kill_list(sorted); kmatrix_draw_coop_names(sorted); for (i=0; i<N_players; i++ ) { color = sorted[i]; if (Players[sorted[i]].connected==CONNECT_DISCONNECTED) gr_set_fontcolor(gr_find_closest_color(31,31,31),-1); else gr_set_fontcolor(BM_XRGB(player_rgb[color].r,player_rgb[color].g,player_rgb[color].b),-1 ); kmatrix_draw_coop_item( i, sorted ); } gr_palette_load(gr_palette); }
void DDKillScreen() { if (_lpDDClipper) IDirectDrawClipper_Release(_lpDDClipper); if (_lpDDPalette) IDirectDrawPalette_Release(_lpDDPalette); if (_lpDDSBack) IDirectDrawSurface_Release(_lpDDSBack); if (_lpDDSPrimary) { if (!GRMODEINFO(modex)) { DDBLTFX ddbltfx; HRESULT ddresult; memset(&ddbltfx, 0, sizeof(DDBLTFX)); ddbltfx.dwSize = sizeof( ddbltfx ); ddbltfx.dwFillColor = (WORD)(BM_XRGB(0,0,0)); ddresult = IDirectDrawSurface_Blt( _lpDDSPrimary, // dest surface NULL, // dest rect NULL, // src surface NULL, // src rect DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx); } IDirectDrawSurface_Release(_lpDDSPrimary); } _lpDDClipper = NULL; _lpDDPalette = NULL; _lpDDSBack = NULL; _lpDDSPrimary = NULL; }
void autodemo_menu_check(int nitems, newmenu_item * items, int *last_key, int citem ) { int curtime; nitems = nitems; items=items; citem = citem; //draw copyright message if ( Menu_draw_copyright ) { Menu_draw_copyright = 0; gr_set_current_canvas(NULL); gr_set_curfont(GAME_FONT); gr_set_fontcolor(BM_XRGB(6,6,6),-1); gr_printf(0x8000,grd_curcanv->cv_bitmap.bm_h-GAME_FONT->ft_h-2,TXT_COPYRIGHT); } // Don't allow them to hit ESC in the main menu. if (*last_key==KEY_ESC) *last_key = 0; if ( do_auto_demo ) { curtime = timer_get_approx_seconds(); //if ( ((keyd_time_when_last_pressed+i2f(20)) < curtime) && ((last_joy_time+i2f(20)) < curtime) && (!speedtest_on) ) { if ( ((keyd_time_when_last_pressed+i2f(45)) < curtime) && (!speedtest_on) ) { keyd_time_when_last_pressed = curtime; // Reset timer so that disk won't thrash if no demos. newdemo_start_playback(NULL); // Randomly pick a file if (Newdemo_state == ND_STATE_PLAYBACK) { Function_mode = FMODE_GAME; *last_key = -2; } } } }
void show_framerate() { static int fps_count = 0, fps_rate = 0; int y = GHEIGHT; static fix64 fps_time = 0; gr_set_curfont(GAME_FONT); gr_set_fontcolor(BM_XRGB(0,31,0),-1); if (PlayerCfg.CockpitMode[1] == CM_FULL_SCREEN) { if ((Game_mode & GM_MULTI) || (Newdemo_state == ND_STATE_PLAYBACK && Newdemo_game_mode & GM_MULTI)) y -= LINE_SPACING * 10; else y -= LINE_SPACING * 4; } else if (PlayerCfg.CockpitMode[1] == CM_STATUS_BAR) { if ((Game_mode & GM_MULTI) || (Newdemo_state == ND_STATE_PLAYBACK && Newdemo_game_mode & GM_MULTI)) y -= LINE_SPACING * 6; else y -= LINE_SPACING * 1; } else { if ((Game_mode & GM_MULTI) || (Newdemo_state == ND_STATE_PLAYBACK && Newdemo_game_mode & GM_MULTI)) y -= LINE_SPACING * 7; else y -= LINE_SPACING * 2; } fps_count++; if (timer_query() >= fps_time + F1_0) { fps_rate = fps_count; fps_count = 0; fps_time = timer_query(); } gr_printf(SWIDTH-(GameArg.SysMaxFPS>999?FSPACX(43):FSPACX(37)),y,"FPS: %i",fps_rate); }
static void con_draw(void) { int i = 0, y = 0, done = 0; if (con_size <= 0) return; gr_set_current_canvas(NULL); gr_set_curfont(GAME_FONT); gr_setcolor(BM_XRGB(0,0,0)); gr_settransblend(7, GR_BLEND_NORMAL); gr_rect(0,0,SWIDTH,(LINE_SPACING*(con_size))+FSPACY(1)); gr_settransblend(GR_FADE_OFF, GR_BLEND_NORMAL); y=FSPACY(1)+(LINE_SPACING*con_size); i+=con_scroll_offset; { cxx_con_interactive_print(&y); if (y<=0) done=1; } while (!done) { int w,h,aw; switch (con_buffer[CON_LINES_MAX-1-i].priority) { case CON_CRITICAL: gr_set_fontcolor(BM_XRGB(28,0,0),-1); break; case CON_URGENT: gr_set_fontcolor(BM_XRGB(54,54,0),-1); break; case CON_DEBUG: case CON_VERBOSE: gr_set_fontcolor(BM_XRGB(14,14,14),-1); break; case CON_HUD: gr_set_fontcolor(BM_XRGB(0,28,0),-1); break; default: gr_set_fontcolor(BM_XRGB(255,255,255),-1); break; } gr_get_string_size(con_buffer[CON_LINES_MAX-1-i].line,&w,&h,&aw); y-=h+FSPACY(1); gr_string(FSPACX(1),y,con_buffer[CON_LINES_MAX-1-i].line); i++; if (y<=0 || CON_LINES_MAX-1-i <= 0 || i < 0) done=1; } gr_setcolor(BM_XRGB(0,0,0)); gr_rect(0,0,SWIDTH,LINE_SPACING); gr_set_fontcolor(BM_XRGB(255,255,255),-1); gr_printf(FSPACX(1),FSPACY(1),"%s LOG", DESCENT_VERSION); gr_string(SWIDTH-FSPACX(110),FSPACY(1),"PAGE-UP/DOWN TO SCROLL"); }
void render_countdown_gauge() { if (!Endlevel_sequence && Control_center_destroyed && (Countdown_seconds_left>-1) && (Countdown_seconds_left<127)) { gr_set_curfont(GAME_FONT); gr_set_fontcolor(BM_XRGB(0,63,0),-1); gr_printf(0x8000, (LINE_SPACING*6)+FSPACY(1), "T-%d s", Countdown_seconds_left ); } }
void game_draw_hud_stuff() { #ifdef CROSSHAIR if ( Viewer->type == OBJ_PLAYER ) laser_do_crosshair(Viewer); #endif #ifndef NDEBUG draw_window_label(); #endif #ifdef NETWORK game_draw_multi_message(); #endif if ((Newdemo_state == ND_STATE_PLAYBACK) || (Newdemo_state == ND_STATE_RECORDING)) { char message[128]; int y; if (Newdemo_state == ND_STATE_PLAYBACK) { if (Newdemo_show_percentage) { sprintf(message, "%s (%d%%%% %s)", TXT_DEMO_PLAYBACK, newdemo_get_percent_done(), TXT_DONE); } else { sprintf (message, " "); } } else { extern int Newdemo_num_written; sprintf (message, "%s (%dK)", TXT_DEMO_RECORDING, (Newdemo_num_written / 1024)); } gr_set_curfont( GAME_FONT ); gr_set_fontcolor( BM_XRGB(27,0,0), -1 ); y = GHEIGHT-(LINE_SPACING*2); if (PlayerCfg.CockpitMode[1] == CM_FULL_COCKPIT) y = grd_curcanv->cv_bitmap.bm_h / 1.2 ; if (PlayerCfg.CockpitMode[1] != CM_REAR_VIEW) gr_string(0x8000, y, message ); } render_countdown_gauge(); if (GameCfg.FPSIndicator && PlayerCfg.CockpitMode[1] != CM_REAR_VIEW) show_framerate(); if (Newdemo_state == ND_STATE_PLAYBACK) Game_mode = Newdemo_game_mode; draw_hud(); if (Newdemo_state == ND_STATE_PLAYBACK) Game_mode = GM_NORMAL; if ( Player_is_dead ) player_dead_message(); }
static void con_draw(void) { int i = 0, y = 0; if (con_size <= 0) return; gr_set_default_canvas(); auto &canvas = *grd_curcanv; auto &game_font = *GAME_FONT; gr_set_curfont(canvas, GAME_FONT); const uint8_t color = BM_XRGB(0, 0, 0); gr_settransblend(canvas, 7, GR_BLEND_NORMAL); const auto &&fspacy1 = FSPACY(1); const auto &&line_spacing = LINE_SPACING(*canvas.cv_font, *GAME_FONT); y = fspacy1 + (line_spacing * con_size); gr_rect(canvas, 0, 0, SWIDTH, y, color); gr_settransblend(canvas, GR_FADE_OFF, GR_BLEND_NORMAL); i+=con_scroll_offset; gr_set_fontcolor(canvas, BM_XRGB(255, 255, 255), -1); y = cli_draw(y, line_spacing); const auto &&fspacx = FSPACX(); const auto &&fspacx1 = fspacx(1); for (;;) { auto &b = con_buffer[CON_LINES_MAX - 1 - i]; gr_set_fontcolor(canvas, get_console_color_by_priority(b.priority), -1); int w,h; gr_get_string_size(game_font, b.line, &w, &h, nullptr); y -= h + fspacy1; gr_string(canvas, game_font, fspacx1, y, b.line, w, h); i++; if (y<=0 || CON_LINES_MAX-1-i <= 0 || i < 0) break; } gr_rect(canvas, 0, 0, SWIDTH, line_spacing, color); gr_set_fontcolor(canvas, BM_XRGB(255, 255, 255),-1); gr_printf(canvas, game_font, fspacx1, fspacy1, "%s LOG", DESCENT_VERSION); gr_string(canvas, game_font, SWIDTH - fspacx(110), fspacy1, "PAGE-UP/DOWN TO SCROLL"); }
//print to buffer, double heights, and blit bitmap to screen void modex_printf(int x,int y,char *s,int fontnum) { grs_canvas *temp_canv; temp_canv = print_to_canvas(s,Gamefonts[fontnum], BM_XRGB(20,20,20), -1); gr_bitmapm(x,y,&temp_canv->cv_bitmap); gr_free_canvas(temp_canv); }
// ---------------------------------------------------------------------------- // Writes a message on the HUD and checks its timer. void HUD_render_message_frame() { int i,j,y; HUD_toolong = 0; if (( HUD_nmessages < 0 ) || (HUD_nmessages > HUD_MAX_NUM_STOR)) Int3(); // Get Rob! if (HUD_nmessages < 1 ) return; for (i = 0; i < HUD_nmessages; i++) { HUD_messages[i].time -= FrameTime; // message expired - remove if (HUD_messages[i].time <= 0) { for (j = i; j < HUD_nmessages; j++) { if (j+1 < HUD_nmessages) memcpy(&HUD_messages[j], &HUD_messages[j+1], sizeof(struct hudmsg)); else memset(&HUD_messages[j], 0, sizeof(struct hudmsg)); } HUD_nmessages--; } } // display last $HUD_MAX_NUM_DISP messages on the list if (HUD_nmessages > 0 ) { int startmsg = ((HUD_nmessages-HUD_MAX_NUM_DISP<0)?0:HUD_nmessages-HUD_MAX_NUM_DISP); if (HUD_color == -1) HUD_color = BM_XRGB(0,28,0); gr_set_curfont( GAME_FONT ); y = FSPACY(1); if (Guided_missile[Player_num] && Guided_missile[Player_num]->type==OBJ_WEAPON && Guided_missile[Player_num]->id==GUIDEDMISS_ID && Guided_missile[Player_num]->signature==Guided_missile_sig[Player_num] && PlayerCfg.GuidedInBigWindow) y+=LINE_SPACING; for (i=startmsg; i<HUD_nmessages; i++ ) { gr_set_fontcolor( HUD_color, -1); if (i == startmsg && strlen(HUD_messages[i].message) > 38) HUD_toolong = 1; gr_printf(0x8000,y, &HUD_messages[i].message[0] ); y += LINE_SPACING; } } gr_set_curfont( GAME_FONT ); }
render_external_scene(fix eye_offset) { Viewer_eye = Viewer->pos; if (eye_offset) vm_vec_scale_add2(&Viewer_eye,&Viewer->orient.rvec,eye_offset); g3_set_view_matrix(&Viewer->pos,&Viewer->orient,Render_zoom); //g3_draw_horizon(BM_XRGB(0,0,0),BM_XRGB(16,16,16)); //,-1); gr_clear_canvas(BM_XRGB(0,0,0)); g3_start_instance_matrix(&vmd_zero_vector,&surface_orient); draw_stars(); g3_done_instance(); { //draw satellite vms_vector delta; g3s_point p,top_pnt; g3_rotate_point(&p,&satellite_pos); g3_rotate_delta_vec(&delta,&satellite_upvec); g3_add_delta_vec(&top_pnt,&p,&delta); if (! (p.p3_codes & CC_BEHIND)) { int save_im = Interpolation_method; //p.p3_flags &= ~PF_PROJECTED; //g3_project_point(&p); if (! (p.p3_flags & PF_OVERFLOW)) { Interpolation_method = 0; //gr_bitmapm(f2i(p.p3_sx)-32,f2i(p.p3_sy)-32,satellite_bitmap); g3_draw_rod_tmap(satellite_bitmap,&p,SATELLITE_WIDTH,&top_pnt,SATELLITE_WIDTH,f1_0); Interpolation_method = save_im; } } } #ifdef STATION_ENABLED draw_polygon_model(&station_pos,&vmd_identity_matrix,NULL,station_modelnum,0,f1_0,NULL,NULL); #endif render_terrain(&mine_ground_exit_point,exit_point_bmx,exit_point_bmy); draw_exit_model(); if (ext_expl_playing) draw_fireball(&external_explosion); Lighting_on=0; render_object(ConsoleObject); Lighting_on=1; }
void gr_label_box( int i) { gr_clear_canvas(BM_XRGB(0,0,0)); draw_robot_picture(i,&objpage_view_orient, -1); // char s[20]; // sprintf( s, " %d ", i ); // gr_clear_canvas( BM_XRGB(0,15,0) ); // gr_set_fontcolor( CWHITE, BM_XRGB(0,15,0) ); // ui_string_centered( grd_curcanv->cv_bitmap.bm_w/2, grd_curcanv->cv_bitmap.bm_h/2, Description[i] ); }
void kmatrix_redraw(kmatrix_screen *km) { int i, color; int sorted[MAX_PLAYERS]; gr_set_current_canvas(NULL); show_fullscr(&km->background); if(Netgame.FairColors) selected_player_rgb = player_rgb_all_blue; else if(Netgame.BlackAndWhitePyros) selected_player_rgb = player_rgb_alt; else selected_player_rgb = player_rgb; if (Game_mode & GM_MULTI_COOP) { kmatrix_redraw_coop(); } else { multi_sort_kill_list(); grd_curcanv->cv_font = MEDIUM3_FONT; if (Game_mode & GM_CAPTURE) gr_string( 0x8000, FSPACY(10), "CAPTURE THE FLAG SUMMARY"); else if (Game_mode & GM_HOARD) gr_string( 0x8000, FSPACY(10), "HOARD SUMMARY"); else gr_string( 0x8000, FSPACY(10), TXT_KILL_MATRIX_TITLE); grd_curcanv->cv_font = GAME_FONT; multi_get_kill_list(sorted); kmatrix_draw_names(sorted); for (i=0; i<N_players; i++ ) { if (Game_mode & GM_TEAM) color = get_team(sorted[i]); else color = sorted[i]; if (Players[sorted[i]].connected==CONNECT_DISCONNECTED) gr_set_fontcolor(gr_find_closest_color(31,31,31),-1); else gr_set_fontcolor(BM_XRGB(selected_player_rgb[color].r,selected_player_rgb[color].g,selected_player_rgb[color].b),-1 ); kmatrix_draw_item( i, sorted ); } } gr_palette_load(gr_palette); }
void draw_stars() { int i; int intensity=31; g3s_point p; for (i=0;i<MAX_STARS;i++) { if ((i&63) == 0) { gr_setcolor(BM_XRGB(intensity,intensity,intensity)); intensity-=3; } //g3_rotate_point(&p,&stars[i]); g3_rotate_delta_vec(&p.p3_vec,&stars[i]); g3_code_point(&p); if (p.p3_codes == 0) { p.p3_flags &= ~PF_PROJECTED; g3_project_point(&p); #ifndef OGL gr_pixel(f2i(p.p3_sx),f2i(p.p3_sy)); #else g3_draw_sphere(&p,F1_0*3); #endif } } //@@ { //@@ vms_vector delta; //@@ g3s_point top_pnt; //@@ //@@ g3_rotate_point(&p,&satellite_pos); //@@ g3_rotate_delta_vec(&delta,&satellite_upvec); //@@ //@@ g3_add_delta_vec(&top_pnt,&p,&delta); //@@ //@@ if (! (p.p3_codes & CC_BEHIND)) { //@@ int save_im = Interpolation_method; //@@ Interpolation_method = 0; //@@ //p.p3_flags &= ~PF_PROJECTED; //@@ g3_project_point(&p); //@@ if (! (p.p3_flags & PF_OVERFLOW)) //@@ //gr_bitmapm(f2i(p.p3_sx)-32,f2i(p.p3_sy)-32,satellite_bitmap); //@@ g3_draw_rod_tmap(satellite_bitmap,&p,SATELLITE_WIDTH,&top_pnt,SATELLITE_WIDTH,f1_0); //@@ Interpolation_method = save_im; //@@ } //@@ } }
// ---------------------------------------------------------------------------- // Writes a message on the HUD and checks its timer. void HUD_render_message_frame() { int i,j,y; HUD_toolong = 0; if (( HUD_nmessages < 0 ) || (HUD_nmessages > HUD_MAX_NUM_STOR)) Int3(); // Get Rob! if (HUD_nmessages < 1 ) return; for (i = 0; i < HUD_nmessages; i++) { HUD_messages[i].time -= FrameTime; // message expired - remove if (HUD_messages[i].time <= 0) { for (j = i; j < HUD_nmessages; j++) { if (j+1 < HUD_nmessages) memcpy(&HUD_messages[j], &HUD_messages[j+1], sizeof(struct hudmsg)); else memset(&HUD_messages[j], 0, sizeof(struct hudmsg)); } HUD_nmessages--; } } // display last $HUD_MAX_NUM_DISP messages on the list if (HUD_nmessages > 0 ) { int startmsg = ((HUD_nmessages-HUD_MAX_NUM_DISP<0)?0:HUD_nmessages-HUD_MAX_NUM_DISP); if (HUD_color == -1) HUD_color = BM_XRGB(0,28,0); gr_set_curfont( GAME_FONT ); y = FSPACY(1); for (i=startmsg; i<HUD_nmessages; i++ ) { gr_set_fontcolor( HUD_color, -1); if (i == startmsg && strlen(HUD_messages[i].message) > 38) HUD_toolong = 1; gr_string(0x8000,y, &HUD_messages[i].message[0] ); y += LINE_SPACING; } } gr_set_curfont( GAME_FONT ); }
void player_dead_message(void) { if (Player_exploded) { // gr_set_curfont( Gamefonts[GFONT_SMALL] ); gr_set_curfont( GAME_FONT ); if (HUD_color == -1) HUD_color = BM_XRGB(0,28,0); gr_set_fontcolor( HUD_color, -1); gr_printf(0x8000, grd_curcanv->cv_bitmap.bm_h-(GAME_FONT->ft_h+3), TXT_PRESS_ANY_KEY);//was -8 // gr_set_curfont( GAME_FONT ); } }
static int HUD_init_message_literal_worth_showing(int class_flag, const char *message) { int i, j; // check if message is already in list and bail out if so if (HUD_nmessages > 0) { // if "normal" message, only check if it's the same at the most recent one, if marked as "may duplicate" check whole list for (i = ((class_flag & HM_MAYDUPL)?0:HUD_nmessages-1); i < HUD_nmessages; i++) { if (!d_strnicmp(message, HUD_messages[i].message, sizeof(char)*HUD_MESSAGE_LENGTH)) { HUD_messages[i].time = F1_0*2; // keep redundant message in list if (i >= HUD_nmessages-HUD_MAX_NUM_DISP) // if redundant message on display, update them all for (i = (HUD_nmessages-HUD_MAX_NUM_DISP<0?0:HUD_nmessages-HUD_MAX_NUM_DISP), j = 1; i < HUD_nmessages; i++, j++) HUD_messages[i].time = F1_0*(j*2); return 0; } } } if (HUD_nmessages >= HUD_MAX_NUM_STOR) { HUD_nmessages = HUD_MAX_NUM_STOR; // unnecessary but just in case it might be bigger... which is impossible for (i = 0; i < HUD_nmessages-1; i++) { memcpy(&HUD_messages[i], &HUD_messages[i+1], sizeof(struct hudmsg)); } } else { HUD_nmessages++; } snprintf(HUD_messages[HUD_nmessages-1].message, sizeof(char)*HUD_MESSAGE_LENGTH, "%s", message); if (HUD_nmessages-HUD_MAX_NUM_DISP < 0) HUD_messages[HUD_nmessages-1].time = F1_0*3; // one message - display 3 secs else for (i = HUD_nmessages-HUD_MAX_NUM_DISP, j = 1; i < HUD_nmessages; i++, j++) // multiple messages - display 2 seconds each HUD_messages[i].time = F1_0*(j*2); if (HUD_color == -1) HUD_color = BM_XRGB(0,28,0); con_printf(CON_HUD, "%s\n", message); if (Newdemo_state == ND_STATE_RECORDING ) newdemo_record_hud_message( message ); return 1; }
// blob_vertices has 3 vertices in it, 4th must be computed void draw_blob_outline(void) { fix v3x, v3y; v3x = blob_vertices[4] - blob_vertices[2] + blob_vertices[0]; v3y = blob_vertices[5] - blob_vertices[3] + blob_vertices[1]; gr_setcolor(BM_XRGB(63, 63, 63)); mprintf((0, "[%7.3f %7.3f] [%7.3f %7.3f] [%7.3f %7.3f]\n", f2fl(blob_vertices[0]), f2fl(blob_vertices[1]), f2fl(blob_vertices[2]), f2fl(blob_vertices[3]), f2fl(blob_vertices[4]), f2fl(blob_vertices[5]) )); gr_line(blob_vertices[0], blob_vertices[1], blob_vertices[2], blob_vertices[3]); gr_line(blob_vertices[2], blob_vertices[3], blob_vertices[4], blob_vertices[5]); gr_line(blob_vertices[4], blob_vertices[5], v3x, v3y); gr_line(v3x, v3y, blob_vertices[0], blob_vertices[1]); }
void editor_sub_status( const char *format, ... ) { int w,h,aw; va_list ap; va_start(ap, format); vsprintf(sub_status_line, format, ap); va_end(ap); GrSetCurrentCanvas( NULL ); GrSetCurFont(editor_font); GrSetFontColor( BM_XRGB(0,0,31), CGREY ); GrGetStringSize( sub_status_line, &w, &h, &aw ); GrString( 500, 583, sub_status_line ); GrSetFontColor( CBLACK, CWHITE ); GrSetColor( CGREY ); GrRect( 500+w, 583, 799, 599 ); }
void editor_sub_status( const char *format, ... ) { int w,h,aw; va_list ap; va_start(ap, format); vsprintf(sub_status_line, format, ap); va_end(ap); gr_set_current_canvas( NULL ); gr_set_curfont(editor_font); gr_set_fontcolor( BM_XRGB(0,0,31), CGREY ); gr_get_string_size( sub_status_line, &w, &h, &aw ); gr_string( 500, 583, sub_status_line ); gr_set_fontcolor( CBLACK, CWHITE ); gr_setcolor( CGREY ); gr_rect( 500+w, 583, 799, 599 ); }