Split game.c into game.c, gamecntl.c and gamerend.c like d2x
This commit is contained in:
parent
78d9b8f15f
commit
af0c2db749
|
@ -1,5 +1,9 @@
|
|||
D1X-Rebirth Changelog
|
||||
|
||||
20090607
|
||||
--------
|
||||
d1x-rebirth.xcodeproj/project.pbxproj, main/game.c, main/game.h, main/gamecntl.c, main/gamerend.c, SConstruct: Split game.c into game.c, gamecntl.c and gamerend.c like d2x
|
||||
|
||||
20090531
|
||||
--------
|
||||
include/u_mem.h, main/inferno.c, main/menu.c, main/titles.c: Make inferno.c more similar between D1X and D2X, better handling of ordering/commercial software screen
|
||||
|
|
|
@ -107,8 +107,10 @@ common_sources = [
|
|||
'main/fuelcen.c',
|
||||
'main/fvi.c',
|
||||
'main/game.c',
|
||||
'main/gamecntl.c',
|
||||
'main/gamefont.c',
|
||||
'main/gamemine.c',
|
||||
'main/gamerend.c',
|
||||
'main/gamesave.c',
|
||||
'main/gameseg.c',
|
||||
'main/gameseq.c',
|
||||
|
|
|
@ -319,6 +319,10 @@
|
|||
EBC6525D0890F79B004FCAA3 /* nocfile.h in Headers */ = {isa = PBXBuildFile; fileRef = EBC6525B0890F79B004FCAA3 /* nocfile.h */; };
|
||||
EBCE794D0DE59565008D8F82 /* rbaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = EBCE794C0DE59565008D8F82 /* rbaudio.c */; };
|
||||
EBCE794E0DE59565008D8F82 /* rbaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = EBCE794C0DE59565008D8F82 /* rbaudio.c */; };
|
||||
EBE8D7D10FD385E1009D181F /* gamecntl.c in Sources */ = {isa = PBXBuildFile; fileRef = EBE8D7D00FD385E1009D181F /* gamecntl.c */; };
|
||||
EBE8D7D20FD385E1009D181F /* gamecntl.c in Sources */ = {isa = PBXBuildFile; fileRef = EBE8D7D00FD385E1009D181F /* gamecntl.c */; };
|
||||
EBE8D8900FDA76D1009D181F /* gamerend.c in Sources */ = {isa = PBXBuildFile; fileRef = EBE8D88F0FDA76D1009D181F /* gamerend.c */; };
|
||||
EBE8D8910FDA76D1009D181F /* gamerend.c in Sources */ = {isa = PBXBuildFile; fileRef = EBE8D88F0FDA76D1009D181F /* gamerend.c */; };
|
||||
EBEEB0AE0D2A2AEE00FF39B4 /* bitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEEB0AA0D2A2AEE00FF39B4 /* bitmap.h */; };
|
||||
EBEEB0AF0D2A2AEE00FF39B4 /* clip.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEEB0AB0D2A2AEE00FF39B4 /* clip.h */; };
|
||||
EBEEB0B00D2A2AEE00FF39B4 /* linear.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEEB0AC0D2A2AEE00FF39B4 /* linear.h */; };
|
||||
|
@ -657,6 +661,8 @@
|
|||
EBC6525B0890F79B004FCAA3 /* nocfile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = nocfile.h; sourceTree = "<group>"; };
|
||||
EBCE794C0DE59565008D8F82 /* rbaudio.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = rbaudio.c; sourceTree = "<group>"; };
|
||||
EBCE79500DE59587008D8F82 /* rbaudio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = rbaudio.h; sourceTree = "<group>"; };
|
||||
EBE8D7D00FD385E1009D181F /* gamecntl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gamecntl.c; sourceTree = "<group>"; };
|
||||
EBE8D88F0FDA76D1009D181F /* gamerend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gamerend.c; sourceTree = "<group>"; };
|
||||
EBEEB0AA0D2A2AEE00FF39B4 /* bitmap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = bitmap.h; sourceTree = "<group>"; };
|
||||
EBEEB0AB0D2A2AEE00FF39B4 /* clip.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = clip.h; sourceTree = "<group>"; };
|
||||
EBEEB0AC0D2A2AEE00FF39B4 /* linear.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = linear.h; sourceTree = "<group>"; };
|
||||
|
@ -987,6 +993,7 @@
|
|||
67B446FF06687CF400DF26D8 /* fuelcen.c */,
|
||||
67B4470106687CF400DF26D8 /* fvi.c */,
|
||||
67B4470406687CF400DF26D8 /* game.c */,
|
||||
EBE8D7D00FD385E1009D181F /* gamecntl.c */,
|
||||
67B4470706687CF400DF26D8 /* gamefont.c */,
|
||||
67B4470906687CF400DF26D8 /* gamemine.c */,
|
||||
67B4470E06687CF400DF26D8 /* gamesave.c */,
|
||||
|
@ -1113,6 +1120,7 @@
|
|||
EB0420C30A341042002CC961 /* vers_id.h */,
|
||||
EB0420C20A341042002CC961 /* wall.h */,
|
||||
EB0420C10A341042002CC961 /* weapon.h */,
|
||||
EBE8D88F0FDA76D1009D181F /* gamerend.c */,
|
||||
);
|
||||
path = main;
|
||||
sourceTree = SOURCE_ROOT;
|
||||
|
@ -1702,6 +1710,8 @@
|
|||
EB28D99D0ECEABD700E68E9B /* init.c in Sources */,
|
||||
EB423CE50F6273F50082C684 /* noloss.c in Sources */,
|
||||
EB35ABE40FB199B800C36930 /* window.c in Sources */,
|
||||
EBE8D7D20FD385E1009D181F /* gamecntl.c in Sources */,
|
||||
EBE8D8910FDA76D1009D181F /* gamerend.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -1831,6 +1841,8 @@
|
|||
EBCE794E0DE59565008D8F82 /* rbaudio.c in Sources */,
|
||||
EB28D99C0ECEABD700E68E9B /* init.c in Sources */,
|
||||
EB35ABE20FB199B800C36930 /* window.c in Sources */,
|
||||
EBE8D7D10FD385E1009D181F /* gamecntl.c in Sources */,
|
||||
EBE8D8900FDA76D1009D181F /* gamerend.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
1567
main/game.c
1567
main/game.c
File diff suppressed because it is too large
Load diff
|
@ -97,6 +97,8 @@ extern int Slew_on; //in slew or sim mode?
|
|||
|
||||
extern int Game_suspended; //if non-zero, nothing moves but player
|
||||
|
||||
#define SHOW_EXIT_PATH 1
|
||||
|
||||
|
||||
//from game.c
|
||||
void init_game (void);
|
||||
|
@ -187,6 +189,9 @@ extern int Game_window_w, //width and height of player's game window
|
|||
|
||||
extern int Rear_view; //if true, looking back.
|
||||
|
||||
// initalize flying
|
||||
void fly_init(object *obj);
|
||||
|
||||
//selects a given cockpit (or lack of one).
|
||||
void select_cockpit (int mode);
|
||||
|
||||
|
|
1239
main/gamecntl.c
Normal file
1239
main/gamecntl.c
Normal file
File diff suppressed because it is too large
Load diff
512
main/gamerend.c
Normal file
512
main/gamerend.c
Normal file
|
@ -0,0 +1,512 @@
|
|||
/*
|
||||
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
|
||||
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
|
||||
END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
|
||||
ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
|
||||
IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
|
||||
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
|
||||
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
|
||||
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
|
||||
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
|
||||
COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
||||
*/
|
||||
|
||||
/*
|
||||
*
|
||||
* Stuff for rendering the HUD
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "pstypes.h"
|
||||
#include "console.h"
|
||||
#include "inferno.h"
|
||||
#include "error.h"
|
||||
#include "gr.h"
|
||||
#include "palette.h"
|
||||
#include "bm.h"
|
||||
#include "player.h"
|
||||
#include "render.h"
|
||||
#include "menu.h"
|
||||
#include "newmenu.h"
|
||||
#include "screens.h"
|
||||
#include "fix.h"
|
||||
#include "robot.h"
|
||||
#include "game.h"
|
||||
#include "gauges.h"
|
||||
#include "gamefont.h"
|
||||
#include "newdemo.h"
|
||||
#include "text.h"
|
||||
#include "multi.h"
|
||||
#include "endlevel.h"
|
||||
#include "cntrlcen.h"
|
||||
#include "fuelcen.h"
|
||||
#include "powerup.h"
|
||||
#include "laser.h"
|
||||
#include "playsave.h"
|
||||
#include "automap.h"
|
||||
#include "mission.h"
|
||||
#include "gameseq.h"
|
||||
|
||||
#ifdef OGL
|
||||
#include "ogl_init.h"
|
||||
#endif
|
||||
|
||||
extern fix Cruise_speed;
|
||||
|
||||
int netplayerinfo_on=0;
|
||||
|
||||
#ifdef NETWORK
|
||||
void game_draw_multi_message()
|
||||
{
|
||||
char temp_string[MAX_MULTI_MESSAGE_LEN+25];
|
||||
|
||||
if ( (Game_mode&GM_MULTI) && (multi_sending_message)) {
|
||||
gr_set_curfont(GAME_FONT);
|
||||
gr_set_fontcolor(BM_XRGB(0,63,0),-1);
|
||||
sprintf( temp_string, "%s: %s_", TXT_MESSAGE, Network_message );
|
||||
gr_printf(0x8000, (SHEIGHT/5.555), temp_string );
|
||||
}
|
||||
|
||||
if ( (Game_mode&GM_MULTI) && (multi_defining_message)) {
|
||||
gr_set_curfont(GAME_FONT);
|
||||
gr_set_fontcolor(BM_XRGB(0,63,0),-1);
|
||||
sprintf( temp_string, "%s #%d: %s_", TXT_MACRO, multi_defining_message, Network_message );
|
||||
gr_printf(0x8000, (SHEIGHT/5.555), temp_string );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
fix frame_time_list[8] = {0,0,0,0,0,0,0,0};
|
||||
fix frame_time_total=0;
|
||||
int frame_time_cntr=0;
|
||||
|
||||
void ftoa(char *string, fix f)
|
||||
{
|
||||
int decimal, fractional;
|
||||
|
||||
decimal = f2i(f);
|
||||
fractional = ((f & 0xffff)*100)/65536;
|
||||
if (fractional < 0 )
|
||||
fractional *= -1;
|
||||
if (fractional > 99 ) fractional = 99;
|
||||
sprintf( string, "FPS: %d.%02d", decimal, fractional );
|
||||
}
|
||||
|
||||
void show_framerate()
|
||||
{
|
||||
char temp[13];
|
||||
fix rate;
|
||||
int aw,w,h;
|
||||
|
||||
frame_time_total += FrameTime - frame_time_list[frame_time_cntr];
|
||||
frame_time_list[frame_time_cntr] = FrameTime;
|
||||
frame_time_cntr = (frame_time_cntr+1)%8;
|
||||
|
||||
if (frame_time_total) {
|
||||
int y=GHEIGHT;
|
||||
if (PlayerCfg.CockpitMode==CM_FULL_SCREEN) {
|
||||
if (Game_mode & GM_MULTI)
|
||||
y -= LINE_SPACING * 10;
|
||||
else
|
||||
y -= LINE_SPACING * 4;
|
||||
} else if (PlayerCfg.CockpitMode == CM_STATUS_BAR) {
|
||||
if (Game_mode & GM_MULTI)
|
||||
y -= LINE_SPACING * 6;
|
||||
else
|
||||
y -= LINE_SPACING * 1;
|
||||
} else {
|
||||
if (Game_mode & GM_MULTI)
|
||||
y -= LINE_SPACING * 7;
|
||||
else
|
||||
y -= LINE_SPACING * 2;
|
||||
}
|
||||
|
||||
rate = fixdiv(f1_0*8,frame_time_total);
|
||||
|
||||
gr_set_curfont(GAME_FONT);
|
||||
gr_set_fontcolor(BM_XRGB(0,31,0),-1);
|
||||
|
||||
ftoa( temp, rate );
|
||||
gr_get_string_size("FPS: 000.00",&w,&h,&aw);
|
||||
gr_printf(SWIDTH-w-FSPACX(1),y,"%s", temp );
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NETWORK
|
||||
void show_netplayerinfo()
|
||||
{
|
||||
int x=0, y=0, i=0, color=0;
|
||||
char *NetworkModeNames[]={"Anarchy","Team Anarchy","Robo Anarchy","Cooperative","Capture the Flag","Hoard","Team Hoard","Unknown"};
|
||||
|
||||
gr_set_current_canvas(NULL);
|
||||
gr_set_curfont(GAME_FONT);
|
||||
gr_set_fontcolor(255,-1);
|
||||
|
||||
x=(SWIDTH/2)-FSPACX(120);
|
||||
y=(SHEIGHT/2)-FSPACY(84);
|
||||
|
||||
Gr_scanline_darkening_level = 2*7;
|
||||
gr_setcolor( BM_XRGB(0,0,0) );
|
||||
gr_rect((SWIDTH/2)-FSPACX(120),(SHEIGHT/2)-FSPACY(84),(SWIDTH/2)+FSPACX(120),(SHEIGHT/2)+FSPACY(84));
|
||||
Gr_scanline_darkening_level = GR_FADE_LEVELS;
|
||||
|
||||
// general game information
|
||||
y+=LINE_SPACING;
|
||||
gr_printf(0x8000,y,"%s by %s",Netgame.game_name,Players[multi_who_is_master()].callsign);
|
||||
#ifndef SHAREWARE
|
||||
y+=LINE_SPACING;
|
||||
gr_printf(0x8000,y,"%s - lvl: %i",Netgame.mission_title,Netgame.levelnum);
|
||||
#endif
|
||||
|
||||
x+=FSPACX(8);
|
||||
y+=LINE_SPACING*2;
|
||||
gr_printf(x,y,"game mode: %s",NetworkModeNames[Netgame.gamemode]);
|
||||
y+=LINE_SPACING;
|
||||
gr_printf(x,y,"difficulty: %s",MENU_DIFFICULTY_TEXT(Netgame.difficulty));
|
||||
y+=LINE_SPACING;
|
||||
gr_printf(x,y,"level time: %i:%02i:%02i",Players[Player_num].hours_level,f2i(Players[Player_num].time_level) / 60 % 60,f2i(Players[Player_num].time_level) % 60);
|
||||
y+=LINE_SPACING;
|
||||
gr_printf(x,y,"total time: %i:%02i:%02i",Players[Player_num].hours_total,f2i(Players[Player_num].time_total) / 60 % 60,f2i(Players[Player_num].time_total) % 60);
|
||||
y+=LINE_SPACING;
|
||||
|
||||
// player information (name, kills, ping, game efficiency)
|
||||
y+=LINE_SPACING*2;
|
||||
gr_printf(x,y,"player");
|
||||
if (Game_mode & GM_MULTI_COOP)
|
||||
gr_printf(x+FSPACX(8)*7,y,"score");
|
||||
else
|
||||
{
|
||||
gr_printf(x+FSPACX(8)*7,y,"kills");
|
||||
gr_printf(x+FSPACX(8)*12,y,"deaths");
|
||||
}
|
||||
gr_printf(x+FSPACX(8)*18,y,"ping");
|
||||
gr_printf(x+FSPACX(8)*23,y,"efficiency");
|
||||
|
||||
multi_do_ping_frame();
|
||||
|
||||
// process players table
|
||||
for (i=0; i<MAX_PLAYERS; i++)
|
||||
{
|
||||
if (!Players[i].connected)
|
||||
continue;
|
||||
|
||||
y+=LINE_SPACING;
|
||||
|
||||
if (Game_mode & GM_TEAM)
|
||||
color=get_team(i);
|
||||
else
|
||||
color=i;
|
||||
gr_set_fontcolor(BM_XRGB(player_rgb[color].r,player_rgb[color].g,player_rgb[color].b),-1 );
|
||||
gr_printf(x,y,"%s\n",Players[i].callsign);
|
||||
if (Game_mode & GM_MULTI_COOP)
|
||||
gr_printf(x+FSPACX(8)*7,y,"%-6d",Players[i].score);
|
||||
else
|
||||
{
|
||||
gr_printf(x+FSPACX(8)*7,y,"%-6d",Players[i].net_kills_total);
|
||||
gr_printf(x+FSPACX(8)*12,y,"%-6d",Players[i].net_killed_total);
|
||||
}
|
||||
|
||||
gr_printf(x+FSPACX(8)*18,y,"%-6d",Netgame.players[i].ping);
|
||||
if (i != Player_num)
|
||||
gr_printf(x+FSPACX(8)*23,y,"%d/%d",kill_matrix[Player_num][i],kill_matrix[i][Player_num]);
|
||||
}
|
||||
|
||||
y+=LINE_SPACING*2+(LINE_SPACING*(MAX_PLAYERS-N_players));
|
||||
|
||||
// printf team scores
|
||||
if (Game_mode & GM_TEAM)
|
||||
{
|
||||
gr_set_fontcolor(255,-1);
|
||||
gr_printf(x,y,"team");
|
||||
gr_printf(x+FSPACX(8)*8,y,"score");
|
||||
y+=LINE_SPACING;
|
||||
gr_set_fontcolor(BM_XRGB(player_rgb[get_team(0)].r,player_rgb[get_team(0)].g,player_rgb[get_team(0)].b),-1 );
|
||||
gr_printf(x,y,"%s:",Netgame.team_name[0]);
|
||||
gr_printf(x+FSPACX(8)*8,y,"%i",team_kills[0]);
|
||||
y+=LINE_SPACING;
|
||||
gr_set_fontcolor(BM_XRGB(player_rgb[get_team(1)].r,player_rgb[get_team(1)].g,player_rgb[get_team(1)].b),-1 );
|
||||
gr_printf(x,y,"%s:",Netgame.team_name[1]);
|
||||
gr_printf(x+FSPACX(8)*8,y,"%i",team_kills[1]);
|
||||
y+=LINE_SPACING*2;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
||||
fix Show_view_text_timer = -1;
|
||||
|
||||
void draw_window_label()
|
||||
{
|
||||
if ( Show_view_text_timer > 0 )
|
||||
{
|
||||
char *viewer_name,*control_name;
|
||||
|
||||
Show_view_text_timer -= FrameTime;
|
||||
|
||||
switch( Viewer->type )
|
||||
{
|
||||
case OBJ_FIREBALL: viewer_name = "Fireball"; break;
|
||||
case OBJ_ROBOT: viewer_name = "Robot"; break;
|
||||
case OBJ_HOSTAGE: viewer_name = "Hostage"; break;
|
||||
case OBJ_PLAYER: viewer_name = "Player"; break;
|
||||
case OBJ_WEAPON: viewer_name = "Weapon"; break;
|
||||
case OBJ_CAMERA: viewer_name = "Camera"; break;
|
||||
case OBJ_POWERUP: viewer_name = "Powerup"; break;
|
||||
case OBJ_DEBRIS: viewer_name = "Debris"; break;
|
||||
case OBJ_CNTRLCEN: viewer_name = "Control Center"; break;
|
||||
default: viewer_name = "Unknown"; break;
|
||||
}
|
||||
|
||||
switch ( Viewer->control_type) {
|
||||
case CT_NONE: control_name = "Stopped"; break;
|
||||
case CT_AI: control_name = "AI"; break;
|
||||
case CT_FLYING: control_name = "Flying"; break;
|
||||
case CT_SLEW: control_name = "Slew"; break;
|
||||
case CT_FLYTHROUGH: control_name = "Flythrough"; break;
|
||||
case CT_MORPH: control_name = "Morphing"; break;
|
||||
default: control_name = "Unknown"; break;
|
||||
}
|
||||
gr_set_curfont( GAME_FONT );
|
||||
gr_set_fontcolor( BM_XRGB(31, 0, 0), -1 );
|
||||
gr_printf( 0x8000, (SHEIGHT/10), "%s View - %s",viewer_name,control_name );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void render_countdown_gauge()
|
||||
{
|
||||
if (!Endlevel_sequence && Fuelcen_control_center_destroyed && (Fuelcen_seconds_left>-1) && (Fuelcen_seconds_left<127)) {
|
||||
gr_set_curfont(GAME_FONT);
|
||||
gr_set_fontcolor(BM_XRGB(0,63,0),-1);
|
||||
gr_printf(0x8000, (SHEIGHT/6.666), "T-%d s", Fuelcen_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 == CM_FULL_COCKPIT)
|
||||
y = grd_curcanv->cv_bitmap.bm_h / 1.2 ;
|
||||
if (PlayerCfg.CockpitMode != CM_REAR_VIEW)
|
||||
gr_printf(0x8000, y, message );
|
||||
}
|
||||
|
||||
render_countdown_gauge();
|
||||
|
||||
// this should be made part of hud code some day
|
||||
if ( Player_num > -1 && Viewer->type==OBJ_PLAYER && Viewer->id==Player_num && PlayerCfg.CockpitMode != CM_REAR_VIEW) {
|
||||
int x = FSPACX(1);
|
||||
int y = grd_curcanv->cv_bitmap.bm_h;
|
||||
|
||||
gr_set_curfont( GAME_FONT );
|
||||
gr_set_fontcolor( BM_XRGB(0, 31, 0), -1 );
|
||||
if (Cruise_speed > 0) {
|
||||
if (PlayerCfg.CockpitMode==CM_FULL_SCREEN) {
|
||||
if (Game_mode & GM_MULTI)
|
||||
y -= LINE_SPACING * 10;
|
||||
else
|
||||
y -= LINE_SPACING * 5;
|
||||
} else if (PlayerCfg.CockpitMode == CM_STATUS_BAR) {
|
||||
if (Game_mode & GM_MULTI)
|
||||
y -= LINE_SPACING * 6;
|
||||
else
|
||||
y -= LINE_SPACING * 1;
|
||||
} else {
|
||||
if (Game_mode & GM_MULTI)
|
||||
y -= LINE_SPACING * 7;
|
||||
else
|
||||
y -= LINE_SPACING * 2;
|
||||
}
|
||||
|
||||
gr_printf( x, y, "%s %2d%%", TXT_CRUISE, f2i(Cruise_speed) );
|
||||
}
|
||||
}
|
||||
|
||||
if (GameArg.SysFPSIndicator && PlayerCfg.CockpitMode != CM_REAR_VIEW)
|
||||
show_framerate();
|
||||
|
||||
draw_hud();
|
||||
|
||||
if ( Player_is_dead )
|
||||
player_dead_message();
|
||||
}
|
||||
|
||||
extern int gr_bitblt_dest_step_shift;
|
||||
extern int gr_bitblt_double;
|
||||
extern int force_cockpit_redraw;
|
||||
void update_cockpits();
|
||||
|
||||
//render a frame for the game
|
||||
void game_do_render_frame(int flip)
|
||||
{
|
||||
gr_set_current_canvas(&Screen_3d_window);
|
||||
|
||||
render_frame(0);
|
||||
|
||||
update_cockpits();
|
||||
|
||||
if (PlayerCfg.CockpitMode==CM_FULL_COCKPIT || PlayerCfg.CockpitMode==CM_STATUS_BAR)
|
||||
render_gauges();
|
||||
|
||||
gr_set_current_canvas(&Screen_3d_window);
|
||||
game_draw_hud_stuff();
|
||||
|
||||
#ifdef NETWORK
|
||||
if (netplayerinfo_on)
|
||||
show_netplayerinfo();
|
||||
#endif
|
||||
con_show();
|
||||
|
||||
if (flip)
|
||||
gr_flip();
|
||||
}
|
||||
|
||||
void toggle_cockpit()
|
||||
{
|
||||
int new_mode=CM_FULL_SCREEN;
|
||||
|
||||
if (Rear_view || Player_is_dead)
|
||||
return;
|
||||
|
||||
switch (PlayerCfg.CockpitMode)
|
||||
{
|
||||
case CM_FULL_COCKPIT:
|
||||
new_mode = CM_STATUS_BAR;
|
||||
break;
|
||||
case CM_STATUS_BAR:
|
||||
new_mode = CM_FULL_SCREEN;
|
||||
break;
|
||||
case CM_FULL_SCREEN:
|
||||
new_mode = CM_FULL_COCKPIT;
|
||||
break;
|
||||
}
|
||||
|
||||
select_cockpit(new_mode);
|
||||
HUD_clear_messages();
|
||||
write_player_file();
|
||||
}
|
||||
|
||||
int last_drawn_cockpit = -1;
|
||||
extern void ogl_loadbmtexture(grs_bitmap *bm);
|
||||
|
||||
// This actually renders the new cockpit onto the screen.
|
||||
void update_cockpits()
|
||||
{
|
||||
grs_bitmap * bm;
|
||||
PIGGY_PAGE_IN(cockpit_bitmap[PlayerCfg.CockpitMode]);
|
||||
bm = &GameBitmaps[cockpit_bitmap[PlayerCfg.CockpitMode].index];
|
||||
|
||||
//Redraw the on-screen cockpit bitmaps
|
||||
if (VR_render_mode != VR_NONE ) return;
|
||||
|
||||
switch( PlayerCfg.CockpitMode ) {
|
||||
case CM_FULL_COCKPIT:
|
||||
gr_set_current_canvas(NULL);
|
||||
#ifdef OGL
|
||||
ogl_ubitmapm_cs (0, 0, -1, grd_curcanv->cv_bitmap.bm_h, bm,255, F1_0);
|
||||
#else
|
||||
gr_ubitmapm(0,0, bm);
|
||||
#endif
|
||||
break;
|
||||
case CM_REAR_VIEW:
|
||||
gr_set_current_canvas(NULL);
|
||||
#ifdef OGL
|
||||
ogl_ubitmapm_cs (0, 0, -1, grd_curcanv->cv_bitmap.bm_h, bm,255, F1_0);
|
||||
#else
|
||||
gr_ubitmapm(0,0, bm);
|
||||
#endif
|
||||
break;
|
||||
case CM_FULL_SCREEN:
|
||||
break;
|
||||
case CM_STATUS_BAR:
|
||||
gr_set_current_canvas(NULL);
|
||||
#ifdef OGL
|
||||
ogl_ubitmapm_cs (0, (HIRESMODE?(SHEIGHT*2)/2.6:(SHEIGHT*2)/2.72), -1, ((int) ((double) (bm->bm_h) * (HIRESMODE?(double)SHEIGHT/480:(double)SHEIGHT/200) + 0.5)), bm,255, F1_0);
|
||||
#else
|
||||
gr_ubitmapm(0,SHEIGHT-bm->bm_h,bm);
|
||||
#endif
|
||||
break;
|
||||
case CM_LETTERBOX:
|
||||
gr_set_current_canvas(NULL);
|
||||
break;
|
||||
}
|
||||
|
||||
gr_set_current_canvas(NULL);
|
||||
|
||||
if (PlayerCfg.CockpitMode != last_drawn_cockpit)
|
||||
last_drawn_cockpit = PlayerCfg.CockpitMode;
|
||||
else
|
||||
return;
|
||||
|
||||
if (PlayerCfg.CockpitMode==CM_FULL_COCKPIT || PlayerCfg.CockpitMode==CM_STATUS_BAR)
|
||||
init_gauges();
|
||||
}
|
||||
|
||||
void game_render_frame()
|
||||
{
|
||||
set_screen_mode(SCREEN_GAME);
|
||||
play_homing_warning();
|
||||
game_do_render_frame(GameArg.DbgUseDoubleBuffer);
|
||||
FrameCount++;
|
||||
}
|
||||
|
||||
//show a message in a nice little box
|
||||
void show_boxed_message(char *msg, int RenderFlag)
|
||||
{
|
||||
int w,h,aw;
|
||||
int x,y;
|
||||
|
||||
if (Function_mode==FMODE_GAME && RenderFlag)
|
||||
game_do_render_frame(0);
|
||||
|
||||
gr_set_current_canvas(NULL);
|
||||
gr_set_curfont( MEDIUM1_FONT );
|
||||
gr_set_fontcolor(BM_XRGB(31, 31, 31), -1);
|
||||
gr_get_string_size(msg,&w,&h,&aw);
|
||||
|
||||
x = (SWIDTH-w)/2;
|
||||
y = (SHEIGHT-h)/2;
|
||||
|
||||
nm_draw_background(x-BORDERX,y-BORDERY,x+w+BORDERX,y+h+BORDERY);
|
||||
|
||||
gr_printf( 0x8000, y, msg );
|
||||
gr_flip();
|
||||
}
|
||||
|
Loading…
Reference in a new issue