Make game.c more similar between D1X and D2X, making related changes to other files (\!)

This commit is contained in:
kreatordxx 2009-07-01 11:35:33 +00:00
parent af0c2db749
commit 16f615c6ff
19 changed files with 179 additions and 204 deletions

View file

@ -1,5 +1,9 @@
D1X-Rebirth Changelog
20090701
--------
main/cntrlcen.c, main/collide.c, main/effects.c, main/fireball.c, main/fuelcen.c, main/fuelcen.h, main/game.c, main/game.h, main/gamecntl.c, main/gamerend.c, main/gameseq.c, main/multi.c, main/net_ipx.c, main/newdemo.c, main/render.c, main/songs.c, main/state.c, main/switch.c: Make game.c more similar between D1X and D2X, making related changes to other files (!)
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

View file

@ -127,7 +127,7 @@ void do_controlcen_destroyed_stuff(object *objp)
wall_toggle(&Segments[ControlCenterTriggers.seg[i]], ControlCenterTriggers.side[i]);
// And start the countdown stuff.
Fuelcen_control_center_destroyed = 1;
Control_center_destroyed = 1;
if (!Control_center_present)

View file

@ -685,7 +685,7 @@ void collide_robot_and_player( object * robot, object * player, vms_vector *coll
// was actually in another object.
void net_destroy_controlcen(object *controlcen)
{
if (Fuelcen_control_center_destroyed != 1) {
if (Control_center_destroyed != 1) {
do_controlcen_destroyed_stuff(controlcen);
if ((controlcen != NULL) && !(controlcen->flags&(OF_EXPLODING|OF_DESTROYED))) {

View file

@ -101,7 +101,7 @@ void do_special_effects()
if (ec->flags & EF_CRITICAL)
continue;
if (ec->crit_clip!=-1 && Fuelcen_control_center_destroyed) {
if (ec->crit_clip!=-1 && Control_center_destroyed) {
int n = ec->crit_clip;
//*ec->bm_ptr = &GameBitmaps[Effects[n].vc.frames[Effects[n].frame_count].index];

View file

@ -440,7 +440,7 @@ void maybe_drop_net_powerup(int powerup_type)
int segnum, objnum;
vms_vector new_pos;
if (Fuelcen_control_center_destroyed || Endlevel_sequence ||
if (Control_center_destroyed || Endlevel_sequence ||
!may_create_powerup(powerup_type))
return;

View file

@ -60,7 +60,7 @@ fix Fuelcen_max_amount = i2f(100);
// by this amount... when capacity gets to 0, no more morphers...
fix EnergyToCreateOneRobot = i2f(1);
int Fuelcen_control_center_destroyed = 0;
int Control_center_destroyed = 0;
int Fuelcen_seconds_left = 0;
#define MATCEN_HP_DEFAULT F1_0*500; // Hitpoints
@ -94,7 +94,7 @@ void fuelcen_reset()
for(i=0; i<MAX_SEGMENTS; i++ )
Segments[i].special = SEGMENT_IS_NOTHING;
Fuelcen_control_center_destroyed = 0;
Control_center_destroyed = 0;
Num_robot_centers = 0;
}
@ -543,7 +543,7 @@ void controlcen_proc( FuelCenter * controlcen )
fix old_time;
int fc;
if (!Fuelcen_control_center_destroyed) return;
if (!Control_center_destroyed) return;
// Control center destroyed, rock the player's ship.
fc = Fuelcen_seconds_left;

View file

@ -186,7 +186,7 @@ extern char Special_names[MAX_CENTER_TYPES][11];
// Set to 1 after control center is destroyed.
// Clear by calling fuelcen_reset();
extern int Fuelcen_control_center_destroyed;
extern int Control_center_destroyed;
extern int Fuelcen_seconds_left;
//--repair-- //do the repair center for this frame

View file

@ -22,9 +22,14 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#include <string.h>
#include <stdarg.h>
#include <SDL/SDL.h>
#ifdef OGL
#include "ogl_init.h"
#endif
#include "pstypes.h"
#include "console.h"
#include "gr.h"
#include "inferno.h"
#include "game.h"
#include "key.h"
@ -48,19 +53,14 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#include "gameseg.h"
#include "wall.h"
#include "ai.h"
#include "rbaudio.h"
#include "hostage.h"
#include "fuelcen.h"
#include "switch.h"
#include "digi.h"
#include "gamesave.h"
#include "scores.h"
#include "u_mem.h"
#include "palette.h"
#include "morph.h"
#include "lighting.h"
#include "newdemo.h"
#include "titles.h"
#include "collide.h"
#include "weapon.h"
#include "sounds.h"
@ -70,14 +70,16 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#include "text.h"
#include "powerup.h"
#include "fireball.h"
#include "controls.h"
#include "songs.h"
#include "config.h"
#include "newmenu.h"
#include "gamefont.h"
#include "endlevel.h"
#include "kconfig.h"
#include "config.h"
#include "mouse.h"
#include "switch.h"
#include "controls.h"
#include "songs.h"
#include "rbaudio.h"
#include "multi.h"
#include "desc_id.h"
#include "cntrlcen.h"
@ -85,21 +87,19 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#include "state.h"
#include "piggy.h"
#include "multibot.h"
#include "gr.h"
#include "hudmsg.h"
#include "timer.h"
#include "vers_id.h"
#include "fvi.h"
#include "console.h"
#include "playsave.h"
#include "config.h"
#include "hudmsg.h"
#include "vers_id.h"
extern void ReadControls(void); // located in gamecntl.c
#ifdef EDITOR
#include "editor/editor.h"
#endif
void game_init_render_sub_buffers( int x, int y, int w, int h );
void GameLoop(int RenderFlag, int ReadControlsFlag );
void FireLaser(void);
void powerup_grab_cheat_all(void);
#ifndef NDEBUG
int Mark_count = 0; // number of debugging marks set
#endif
static fix last_timer_value=0;
@ -107,54 +107,49 @@ int VR_render_mode = VR_NONE;
int VR_low_res = 3; // Default to low res
int VR_show_hud = 1;
int VR_sensitivity = 1; // 0 - 2
grs_canvas Screen_3d_window; // The rectangle for rendering the mine to
grs_canvas *VR_offscreen_buffer = NULL; // The offscreen data buffer
grs_canvas VR_render_buffer[2]; // Two offscreen buffers for left/right eyes.
grs_canvas VR_render_sub_buffer[2]; // Two sub buffers for left/right eyes.
grs_canvas VR_editor_canvas; // The canvas that the editor writes to.
//added 07/11/99 by adb:
//added buffer pointer to allow different buffers for 3D game rendering and
//the 2D menus (for DX3D port)
grs_canvas *VR_offscreen_menu = NULL; // The offscreen data buffer for menus
//end additions -- adb
grs_canvas Screen_3d_window; // The rectangle for rendering the mine to
grs_canvas *VR_offscreen_buffer = NULL; // The offscreen data buffer
grs_canvas VR_render_buffer[2]; // Two offscreen buffers for left/right eyes.
grs_canvas VR_render_sub_buffer[2]; // Two sub buffers for left/right eyes.
grs_canvas VR_editor_canvas; // The canvas that the editor writes to.
static int old_cockpit_mode=-1;
int force_cockpit_redraw=0;
int PaletteRedAdd, PaletteGreenAdd, PaletteBlueAdd;
// Toggle_var points at a variable which gets !ed on del-T press.
int Dummy_var;
int *Toggle_var = &Dummy_var;
#ifdef EDITOR
//flag for whether initial fade-in has been done
char faded_in;
#endif
int Game_suspended=0; //if non-zero, nothing moves but player
int create_special_path(void);
void fill_background(int x,int y,int w,int h,int dx,int dy);
fix Auto_fire_fusion_cannon_time = 0;
fix Fusion_charge = 0;
fix Fusion_next_sound_time = 0;
fix Fusion_last_sound_time = 0;
int Debug_spew = 1;
int Game_turbo_mode = 0;
int Game_mode = GM_GAME_OVER;
int Global_laser_firing_count = 0;
int Global_missile_firing_count = 0;
grs_bitmap background_bitmap;
int Game_aborted;
void update_cockpits();
extern int HUD_nmessages;
#define BACKGROUND_NAME "statback.pcx"
// Function prototypes for GAME.C exclusively.
void GameLoop(int RenderFlag, int ReadControlsFlag);
void FireLaser(void);
void powerup_grab_cheat_all(void);
void game_init_render_sub_buffers(int x, int y, int w, int h);
extern void ReadControls(void); // located in gamecntl.c
// ==============================================================================================
//this is called once per game
void init_game()
{
ubyte pal[256*3];
int pcx_error;
init_objects();
hostage_init();
@ -163,13 +158,7 @@ void init_game()
init_exploding_walls();
gr_init_bitmap_data (&background_bitmap);
pcx_error = pcx_read_bitmap(BACKGROUND_NAME,&background_bitmap,BM_LINEAR,pal);
if (pcx_error != PCX_ERROR_NONE)
Error("File %s - PCX error: %s",BACKGROUND_NAME,pcx_errormsg(pcx_error));
gr_remap_bitmap_good( &background_bitmap, pal, -1, -1 );
Clear_window = 2; // do portal only window clear.
Clear_window = 2; // do portal only window clear.
}
@ -195,8 +184,6 @@ void game_show_warning(char *s)
u_int32_t Game_screen_mode = SM(640,480);
extern int Rear_view;
//initialize the various canvases on the game screen
//called every time the screen mode or cockpit changes
void init_cockpit()
@ -215,46 +202,44 @@ void init_cockpit()
}
#endif
#ifdef D1XD3D
PlayerCfg.CockpitMode = CM_STATUS_BAR;
#endif
gr_set_current_canvas(NULL);
switch( PlayerCfg.CockpitMode ) {
case CM_FULL_COCKPIT:
game_init_render_sub_buffers(0, 0, SWIDTH, (SHEIGHT*2)/3);
break;
switch( PlayerCfg.CockpitMode ) {
case CM_FULL_COCKPIT:
game_init_render_sub_buffers(0, 0, SWIDTH, (SHEIGHT*2)/3);
break;
case CM_REAR_VIEW:
case CM_FULL_SCREEN:
game_init_render_sub_buffers(0, 0, SWIDTH, SHEIGHT);
break;
case CM_REAR_VIEW:
case CM_FULL_SCREEN:
game_init_render_sub_buffers(0, 0, SWIDTH, SHEIGHT);
break;
case CM_STATUS_BAR:
game_init_render_sub_buffers( 0, 0, SWIDTH, (HIRESMODE?(SHEIGHT*2)/2.6:(SHEIGHT*2)/2.72) );
break;
case CM_STATUS_BAR:
game_init_render_sub_buffers( 0, 0, SWIDTH, (HIRESMODE?(SHEIGHT*2)/2.6:(SHEIGHT*2)/2.72) );
break;
case CM_LETTERBOX: {
int x,y,w,h;
case CM_LETTERBOX: {
int x,y,w,h;
x = 0; w = SM_W(Game_screen_mode);
h = (SM_H(Game_screen_mode) * 3) / 4; // true letterbox size (16:9)
y = (SM_H(Game_screen_mode)-h)/2;
x = 0; w = SM_W(Game_screen_mode);
h = (SM_H(Game_screen_mode) * 3) / 4; // true letterbox size (16:9)
y = (SM_H(Game_screen_mode)-h)/2;
gr_rect(x,0,w,SM_H(Game_screen_mode)-h);
gr_rect(x,SM_H(Game_screen_mode)-h,w,SM_H(Game_screen_mode));
gr_rect(x,0,w,SM_H(Game_screen_mode)-h);
gr_rect(x,SM_H(Game_screen_mode)-h,w,SM_H(Game_screen_mode));
game_init_render_sub_buffers( x, y, w, h );
break;
game_init_render_sub_buffers( x, y, w, h );
break;
}
}
gr_set_current_canvas(NULL);
}
//selects a given cockpit (or lack of one). See types in game.h
void select_cockpit(int mode)
{
if (mode != PlayerCfg.CockpitMode) { //new mode
if (mode != PlayerCfg.CockpitMode) { //new mode
PlayerCfg.CockpitMode=mode;
init_cockpit();
}
@ -267,8 +252,6 @@ void reset_cockpit()
last_drawn_cockpit = -1;
}
void HUD_clear_messages();
void game_init_render_sub_buffers( int x, int y, int w, int h )
{
gr_clear_canvas(0);
@ -281,8 +264,7 @@ void game_init_render_sub_buffers( int x, int y, int w, int h )
// Sets up the canvases we will be rendering to
void game_init_render_buffers(int render_w, int render_h, int render_method )
{
// if (!VR_offscreen_buffer) {
VR_render_mode = render_method;
VR_render_mode = render_method;
if (VR_offscreen_buffer) {
gr_free_canvas(VR_offscreen_buffer);
@ -301,15 +283,14 @@ void game_init_render_buffers(int render_w, int render_h, int render_method )
else
VR_offscreen_buffer = gr_create_canvas( render_w, render_h );
#ifdef OGL
VR_offscreen_buffer->cv_bitmap.bm_type=BM_OGL;
VR_offscreen_buffer->cv_bitmap.bm_type = BM_OGL;
#endif
gr_init_sub_canvas( &VR_render_buffer[0], VR_offscreen_buffer, 0, 0, render_w, render_h );
gr_init_sub_canvas( &VR_render_buffer[1], VR_offscreen_buffer, 0, 0, render_w, render_h );
}
VR_offscreen_menu = VR_offscreen_buffer;
game_init_render_sub_buffers( 0, 0, render_w, render_h );
// }
}
//called to change the screen mode. Parameter sm is the new mode, one of
@ -326,13 +307,14 @@ int set_screen_mode(int sm)
return 1;
}
Screen_mode = sm;
#ifdef EDITOR
Canv_editor = NULL;
#endif
switch( Screen_mode ) {
Screen_mode = sm;
switch( Screen_mode )
{
case SCREEN_MENU:
/* give control back to the WM */
if (GameArg.CtlGrabMouse)
@ -341,8 +323,8 @@ int set_screen_mode(int sm)
if (grd_curscreen->sc_mode != Game_screen_mode)
if (gr_set_mode(Game_screen_mode))
Error("Cannot set screen mode.");
break;
case SCREEN_GAME:
/* keep the mouse from wandering in SDL */
if (GameArg.CtlGrabMouse && (Newdemo_state != ND_STATE_PLAYBACK))
@ -552,6 +534,7 @@ void save_screen_shot(int automap_flag)
key_flush();
start_time();
}
#endif
//initialize flying
@ -625,8 +608,10 @@ void diminish_palette_towards_normal(void)
{
int dec_amount = 0;
// Diminish at DIMINISH_RATE units/second.
// For frame rates > DIMINISH_RATE Hz, use randomness to achieve this.
if (FrameTime < F1_0/DIMINISH_RATE) {
if (d_rand() < FrameTime*DIMINISH_RATE/2) // Note: d_rand() is in 0..32767, and 8 Hz means decrement every frame
if (d_rand() < FrameTime*DIMINISH_RATE/2) // Note: d_rand() is in 0..32767, and 8 Hz means decrement every frame
dec_amount = 1;
} else {
dec_amount = f2i(FrameTime*DIMINISH_RATE); // one second = DIMINISH_RATE counts
@ -839,7 +824,8 @@ void check_rear_view()
}
else
if (Controls.rear_view_down_state) {
if (leave_mode==0 && (timer_get_fixed_seconds()-entry_time)>LEAVE_TIME)
if (leave_mode == 0 && (timer_get_fixed_seconds() - entry_time) > LEAVE_TIME)
leave_mode = 1;
}
else
@ -864,8 +850,11 @@ void reset_rear_view(void)
Rear_view = 0;
if (PlayerCfg.CockpitMode == CM_REAR_VIEW)
if (!(PlayerCfg.CockpitMode == CM_FULL_COCKPIT || PlayerCfg.CockpitMode == CM_STATUS_BAR || PlayerCfg.CockpitMode == CM_FULL_SCREEN)) {
if (!(old_cockpit_mode == CM_FULL_COCKPIT || old_cockpit_mode == CM_STATUS_BAR || old_cockpit_mode == CM_FULL_SCREEN))
old_cockpit_mode = CM_FULL_COCKPIT;
select_cockpit(old_cockpit_mode);
}
}
@ -962,11 +951,11 @@ void game()
Automap_flag = 0;
Config_menu_flag = 0;
GameLoop( 1, 1 ); // Do game loop with rendering and reading controls.
GameLoop( 1, 1 ); // Do game loop with rendering and reading controls.
//see if redbook song needs to be restarted
RBACheckFinishedHook(); // Handle RedBook Audio Repeating.
if (Config_menu_flag) {
if (!(Game_mode&GM_MULTI)) palette_save();
do_options_menu();
@ -1008,17 +997,10 @@ void game()
}
if (Function_mode != FMODE_GAME)
longjmp(LeaveGame,1);
longjmp(LeaveGame,0);
}
}
#ifdef NETWORK
if(Game_mode & GM_MULTI)
{
PlayerCfg.NetlifeKills += Players[Player_num].net_kills_total;
PlayerCfg.NetlifeKilled += Players[Player_num].net_killed_total;
}
#endif
digi_stop_all();
if ( (Newdemo_state == ND_STATE_RECORDING) || (Newdemo_state == ND_STATE_PAUSED) )
@ -1045,32 +1027,30 @@ void close_game()
close_gauges();
restore_effect_bitmap_icons();
gr_free_bitmap_data (&background_bitmap);
clear_warn_func(game_show_warning); //don't use this func anymore
}
int ostate_p=0;
int ostate_s=0;
void game_render_frame();
#ifdef EDITOR
extern void player_follow_path(object *objp);
extern void check_create_player_path(void);
extern void player_follow_path(object *objp);
extern void check_create_player_path(void);
#endif
extern int Do_appearance_effect;
void game_render_frame();
void GameLoop(int RenderFlag, int ReadControlsFlag )
{
if (RenderFlag) {
if (force_cockpit_redraw) { //screen need redrawing?
if (force_cockpit_redraw) { //screen need redrawing?
init_cockpit();
force_cockpit_redraw=0;
}
game_render_frame();
}
calc_frame_time();
if (ReadControlsFlag)
ReadControls();
else
@ -1085,6 +1065,7 @@ void GameLoop(int RenderFlag, int ReadControlsFlag )
check_create_player_path();
player_follow_path(ConsoleObject);
#endif
#ifdef NETWORK
if (Game_mode & GM_MULTI)
multi_do_frame();
@ -1100,7 +1081,7 @@ void GameLoop(int RenderFlag, int ReadControlsFlag )
do_endlevel_frame();
powerup_grab_cheat_all();
do_special_effects();
return; //skip everything else
return; //skip everything else
}
if (Newdemo_state != ND_STATE_PLAYBACK)
@ -1111,22 +1092,24 @@ void GameLoop(int RenderFlag, int ReadControlsFlag )
triggers_frame_process();
}
if (Fuelcen_control_center_destroyed) {
if (Control_center_destroyed) {
if (Newdemo_state==ND_STATE_RECORDING )
newdemo_record_control_center_destroyed();
flash_frame();
}
flash_frame();
if ( Newdemo_state == ND_STATE_PLAYBACK ) {
newdemo_playback_one_frame();
if ( Newdemo_state != ND_STATE_PLAYBACK ) {
longjmp( LeaveGame, 1 ); // Go back to menu
if ( Newdemo_state != ND_STATE_PLAYBACK ) {
longjmp( LeaveGame, 0 ); // Go back to menu
}
}
else
{ // Note the link to above!
Players[Player_num].homing_object_dist = -1; // Assume not being tracked. Laser_do_weapon_sequence modifies this.
Players[Player_num].homing_object_dist = -1; // Assume not being tracked. Laser_do_weapon_sequence modifies this.
object_move_all();
powerup_grab_cheat_all();
@ -1134,10 +1117,11 @@ void GameLoop(int RenderFlag, int ReadControlsFlag )
return;
fuelcen_update_all();
do_ai_frame_all();
if (allowed_to_fire_laser())
FireLaser();
FireLaser(); // Fire Laser!
if (Auto_fire_fusion_cannon_time) {
if (Primary_weapon != FUSION_INDEX)
@ -1170,7 +1154,8 @@ void GameLoop(int RenderFlag, int ReadControlsFlag )
}
if (Global_laser_firing_count)
Global_laser_firing_count -= do_laser_firing_player(); //do_laser_firing(Players[Player_num].objnum, Primary_weapon);
Global_laser_firing_count -= do_laser_firing_player();
if (Global_laser_firing_count < 0)
Global_laser_firing_count = 0;
}
@ -1186,7 +1171,9 @@ void GameLoop(int RenderFlag, int ReadControlsFlag )
// cannon.
void FireLaser()
{
Global_laser_firing_count = Weapon_info[Primary_weapon_to_weapon_info[Primary_weapon]].fire_count * (Controls.fire_primary_state || Controls.fire_primary_down_count);
if ((Primary_weapon == FUSION_INDEX) && (Global_laser_firing_count)) {
if ((Players[Player_num].energy < F1_0*2) && (Auto_fire_fusion_cannon_time == 0)) {
Global_laser_firing_count = 0;
@ -1199,7 +1186,7 @@ void FireLaser()
if (Players[Player_num].energy <= 0) {
Players[Player_num].energy = 0;
Auto_fire_fusion_cannon_time = GameTime -1; // Fire now!
Auto_fire_fusion_cannon_time = GameTime -1; // Fire now!
} else
Auto_fire_fusion_cannon_time = GameTime + FrameTime/2 + 1; // Fire the fusion cannon at this time in the future.
@ -1207,7 +1194,7 @@ void FireLaser()
PALETTE_FLASH_ADD(Fusion_charge >> 11, 0, Fusion_charge >> 11);
else
PALETTE_FLASH_ADD(Fusion_charge >> 11, Fusion_charge >> 11, 0);
if (GameTime < Fusion_last_sound_time) //gametime has wrapped
Fusion_next_sound_time = Fusion_last_sound_time = GameTime;
@ -1234,6 +1221,7 @@ void FireLaser()
}
}
// -------------------------------------------------------------------------------------------------------
// If player is close enough to objnum, which ought to be a powerup, pick it up!
// This could easily be made difficulty level dependent.
@ -1267,7 +1255,7 @@ void powerup_grab_cheat(object *player, int objnum)
void powerup_grab_cheat_all(void)
{
segment *segp;
int objnum;
int objnum;
segp = &Segments[ConsoleObject->segnum];
objnum = segp->objects;
@ -1290,7 +1278,7 @@ int Last_level_path_created = -1;
int mark_player_path_to_segment(int segnum)
{
int i;
object *objp = ConsoleObject;
object *objp = ConsoleObject;
short player_path_length=0;
int player_hide_index=-1;
@ -1322,7 +1310,7 @@ int mark_player_path_to_segment(int segnum)
objnum = obj_create( OBJ_POWERUP, POW_ENERGY, segnum, &seg_center, &vmd_identity_matrix, Powerup_info[POW_ENERGY].size, CT_POWERUP, MT_NONE, RT_POWERUP);
if (objnum == -1) {
Int3(); // Unable to drop energy powerup for path
Int3(); // Unable to drop energy powerup for path
return 1;
}
@ -1332,6 +1320,7 @@ int mark_player_path_to_segment(int segnum)
obj->rtype.vclip_info.framenum = 0;
obj->lifeleft = F1_0*100 + d_rand() * 4;
}
return 1;
}
@ -1349,6 +1338,7 @@ int create_special_path(void)
return 0;
}
#endif
@ -1372,49 +1362,4 @@ void show_free_objects(void)
}
}
#define FILL_VAL 0xcc // int 3 opcode value
extern void code_01s(void), code_01e(void);
extern void code_02s(void), code_02e(void);
extern void code_03s(void), code_03e(void);
extern void code_04s(void), code_04e(void);
extern void code_05s(void), code_05e(void);
extern void code_06s(void), code_06e(void);
extern void code_07s(void), code_07e(void);
extern void code_08s(void), code_08e(void);
extern void code_09s(void), code_09e(void);
extern void code_10s(void), code_10e(void);
extern void code_11s(void), code_11e(void);
extern void code_12s(void), code_12e(void);
extern void code_13s(void), code_13e(void);
extern void code_14s(void), code_14e(void);
extern void code_15s(void), code_15e(void);
extern void code_16s(void), code_16e(void);
extern void code_17s(void), code_17e(void);
extern void code_18s(void), code_18e(void);
extern void code_19s(void), code_19e(void);
extern void code_20s(void), code_20e(void);
extern void code_21s(void), code_21e(void);
int Mem_filled = 0;
void fill_func(char *start, char *end, char value)
{
char *i;
for (i=start; i<end; i++)
*i = value;
}
void check_func(char *start, char *end, char value)
{
char *i;
for (i=start; i<end; i++)
if (*i != value) {
Int3(); // The nast triple aught six bug...we can smell it...contact Mike!
Error("Oops, the nasty triple aught six bug. Address == %p\n", i);
}
}
#endif

View file

@ -231,7 +231,6 @@ extern grs_canvas VR_render_buffer[2]; // Two offscreen buffers for left/right
extern grs_canvas VR_render_sub_buffer[2]; // Two sub buffers for left/right eyes.
extern grs_canvas VR_screen_pages[2]; // Two pages of VRAM if paging is available
extern grs_canvas VR_screen_sub_pages[2]; // Two sub pages of VRAM if paging is available
extern grs_canvas *VR_offscreen_menu; // The offscreen data buffer for menus
void game_init_render_buffers (int render_max_w, int render_max_h, int render_method);
void game_do_render_frame(int flip);

View file

@ -1180,7 +1180,7 @@ void ReadControls()
check_rear_view();
// If automap key pressed, enable automap unless you are in network mode, control center destroyed and < 10 seconds left
if ( Controls.automap_down_count && !((Game_mode & GM_MULTI) && Fuelcen_control_center_destroyed && (Fuelcen_seconds_left < 10)))
if ( Controls.automap_down_count && !((Game_mode & GM_MULTI) && Control_center_destroyed && (Fuelcen_seconds_left < 10)))
Automap_flag = 1;
do_weapon_stuff();

View file

@ -280,7 +280,7 @@ void draw_window_label()
void render_countdown_gauge()
{
if (!Endlevel_sequence && Fuelcen_control_center_destroyed && (Fuelcen_seconds_left>-1) && (Fuelcen_seconds_left<127)) {
if (!Endlevel_sequence && 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 );

View file

@ -412,7 +412,7 @@ void editor_reset_stuff_on_level()
ConsoleObject->movement_type = MT_PHYSICS;
Game_suspended = 0;
verify_console_object();
Fuelcen_control_center_destroyed = 0;
Control_center_destroyed = 0;
if (Newdemo_state != ND_STATE_PLAYBACK)
gameseq_remove_unused_players();
init_cockpit();
@ -1046,7 +1046,7 @@ extern void do_end_game(void);
// Return true if game over.
int AdvanceLevel(int secret_flag)
{
Fuelcen_control_center_destroyed = 0;
Control_center_destroyed = 0;
#ifdef EDITOR
if (PLAYING_BUILTIN_MISSION)
@ -1165,7 +1165,7 @@ void DoPlayerDead()
}
}
if ( Fuelcen_control_center_destroyed ) {
if ( Control_center_destroyed ) {
int rval;
//clear out stuff so no bonus
@ -1296,7 +1296,7 @@ void StartNewLevelSub(int level_num, int page_in_textures)
Game_suspended = 0;
Fuelcen_control_center_destroyed = 0;
Control_center_destroyed = 0;
init_cockpit();
init_robots_for_level();
@ -1429,8 +1429,6 @@ void copy_defaults_to_robot_all(void)
int Do_appearance_effect=0;
extern int Rear_view;
// -----------------------------------------------------------------------------------------------------
//called when the player is starting a level (new game or new ship)
void StartLevel(int random)

View file

@ -247,6 +247,8 @@ int message_length[MULTI_MAX_TYPE+1] = {
void multi_reset_player_object(object *objp);
void multi_set_robot_ai(void);
void multi_add_lifetime_killed();
void multi_add_lifetime_kills();
void extract_netplayer_stats( netplayer_stats *ps, player * pd );
int multi_allow_powerup_mask[MAX_POWERUP_TYPES] =
@ -671,7 +673,10 @@ void multi_compute_kill(int killer, int killed)
reactor_kills[killed_pnum]++;
reactor_kills_total++;
if (killed_pnum == Player_num)
{
HUD_init_message("%s %s.", TXT_YOU_WERE, TXT_KILLED_BY_NONPLAY);
multi_add_lifetime_killed ();
}
else
HUD_init_message("%s %s %s.", killed_name, TXT_WAS, TXT_KILLED_BY_NONPLAY );
return;
@ -681,7 +686,10 @@ void multi_compute_kill(int killer, int killed)
else if ((killer_type != OBJ_PLAYER) && (killer_type != OBJ_GHOST))
{
if (killed_pnum == Player_num)
{
hud_message(MSGC_MULTI_KILL, "%s %s.", TXT_YOU_WERE, TXT_KILLED_BY_ROBOT);
multi_add_lifetime_killed();
}
else
hud_message(MSGC_MULTI_KILL, "%s %s %s.", killed_name, TXT_WAS, TXT_KILLED_BY_ROBOT );
Players[killed_pnum].net_killed_total++;
@ -725,7 +733,10 @@ void multi_compute_kill(int killer, int killed)
kill_matrix[killed_pnum][killed_pnum] += 1; // # of suicides
if (killer_pnum == Player_num)
{
HUD_init_message("%s %s %s!", TXT_YOU, TXT_KILLED, TXT_YOURSELF );
multi_add_lifetime_killed();
}
else
HUD_init_message("%s %s", killed_name, TXT_SUICIDE);
}
@ -751,11 +762,15 @@ void multi_compute_kill(int killer, int killed)
if (killer_pnum == Player_num) {
HUD_init_message("%s %s %s!", TXT_YOU, TXT_KILLED, killed_name);
multi_add_lifetime_kills();
if ((Game_mode & GM_MULTI_COOP) && (Players[Player_num].score >= 1000))
add_points_to_score(-1000);
}
else if (killed_pnum == Player_num)
{
HUD_init_message("%s %s %s!", killer_name, TXT_KILLED, TXT_YOU);
multi_add_lifetime_killed();
}
else
HUD_init_message("%s %s %s!", killer_name, TXT_KILLED, killed_name);
}
@ -929,7 +944,7 @@ multi_menu_poll(void)
fix old_shields;
int was_fuelcen_alive;
was_fuelcen_alive = Fuelcen_control_center_destroyed;
was_fuelcen_alive = Control_center_destroyed;
// Special polling function for in-game menus for multiplayer
@ -947,12 +962,12 @@ multi_menu_poll(void)
multi_in_menu--;
if (Endlevel_sequence || (Fuelcen_control_center_destroyed && !was_fuelcen_alive) || (Player_is_dead && !Player_exploded) || (Players[Player_num].shields < old_shields))
if (Endlevel_sequence || (Control_center_destroyed && !was_fuelcen_alive) || (Player_is_dead && !Player_exploded) || (Players[Player_num].shields < old_shields))
{
multi_leave_menu = 1;
return(-1);
}
if ((Fuelcen_control_center_destroyed) && (Fuelcen_seconds_left < 10))
if ((Control_center_destroyed) && (Fuelcen_seconds_left < 10))
{
multi_leave_menu = 1;
return(-1);
@ -1177,7 +1192,7 @@ void multi_send_message_end()
}
}
else if (!strnicmp (Network_message,"KillReactor",11) && (Game_mode & GM_NETWORK) && !Fuelcen_control_center_destroyed)
else if (!strnicmp (Network_message,"KillReactor",11) && (Game_mode & GM_NETWORK) && !Control_center_destroyed)
{
if (!multi_i_am_master())
HUD_init_message ("Only %s can kill the reactor this way!",Players[multi_who_is_master()].callsign);
@ -1613,7 +1628,7 @@ void multi_do_controlcen_destroy(char *buf)
objnum = GET_INTEL_SHORT(buf + 1);
who = buf[3];
if (Fuelcen_control_center_destroyed != 1)
if (Control_center_destroyed != 1)
{
if ((who < N_players) && (who != Player_num)) {
hud_message(MSGC_MULTI_INFO, "%s %s", Players[who].callsign, TXT_HAS_DEST_CONTROL);
@ -1859,7 +1874,7 @@ multi_do_create_powerup(char *buf)
vms_vector new_pos;
char powerup_type;
if (Endlevel_sequence || Fuelcen_control_center_destroyed)
if (Endlevel_sequence || Control_center_destroyed)
return;
pnum = buf[count++];
@ -3053,4 +3068,20 @@ void use_netplayer_stats( player * ps, netplayer_stats *pd )
ps->hostages_total = INTEL_SHORT(pd->hostages_total); // Total number of hostages.
ps->hostages_on_board=pd->hostages_on_board; // Number of hostages on ship.
}
void multi_add_lifetime_kills ()
{
// This function adds a kill to lifetime stats of this player
// Trivial, but syncing with D2X
PlayerCfg.NetlifeKills++;
}
void multi_add_lifetime_killed ()
{
// This function adds a "killed" to lifetime stats of this player
// Trivial, but syncing with D2X
PlayerCfg.NetlifeKilled++;
}
#endif

View file

@ -283,7 +283,7 @@ net_ipx_init(void)
Player_num = save_pnum;
multi_new_game();
Network_new_game = 1;
Fuelcen_control_center_destroyed = 0;
Control_center_destroyed = 0;
net_ipx_flush();
Netgame.PacketsPerSec = 10;
@ -658,7 +658,7 @@ void net_ipx_welcome_player(sequence_packet *their)
// Don't accept new players if we're ending this level. Its safe to
// ignore since they'll request again later
if ((Endlevel_sequence) || (Fuelcen_control_center_destroyed))
if ((Endlevel_sequence) || (Control_center_destroyed))
{
net_ipx_dump_player(their->player.protocol.ipx.server,their->player.protocol.ipx.node, DUMP_ENDLEVEL);
return;
@ -1103,7 +1103,7 @@ void net_ipx_send_objects(void)
Assert(player_num >= 0);
Assert(player_num < MaxNumNetPlayers);
if (Endlevel_sequence || Fuelcen_control_center_destroyed)
if (Endlevel_sequence || Control_center_destroyed)
{
// Endlevel started before we finished sending the goods, we'll
// have to stop and try again after the level.
@ -1215,7 +1215,7 @@ void net_ipx_send_rejoin_sync(int player_num)
Players[player_num].connected = 1; // connect the new guy
Netgame.players[player_num].LastPacketTime = timer_get_approx_seconds();
if (Endlevel_sequence || Fuelcen_control_center_destroyed)
if (Endlevel_sequence || Control_center_destroyed)
{
// Endlevel started before we finished sending the goods, we'll
// have to stop and try again after the level.
@ -1427,7 +1427,7 @@ net_ipx_send_endlevel_sub(int player_num)
if (Players[player_num].connected == 1) // Still playing
{
Assert(Fuelcen_control_center_destroyed);
Assert(Control_center_destroyed);
end.seconds_left = Fuelcen_seconds_left;
}
//added 05/18/99 Matt Mueller - similarly, its not used if we aren't connected, but checker complains.
@ -1465,7 +1465,7 @@ net_ipx_send_game_info(sequence_packet *their)
old_status = Netgame.game_status;
Netgame.protocol.ipx.Game_pkt_type = PID_GAME_INFO;
if (Endlevel_sequence || Fuelcen_control_center_destroyed)
if (Endlevel_sequence || Control_center_destroyed)
Netgame.game_status = NETSTAT_ENDLEVEL;
if (!their)
@ -3416,7 +3416,7 @@ void net_ipx_do_frame(int force, int listen)
PacketUrgent = 0;
MySyncPack.data_size = 0; // Start data over at 0 length.
if (Fuelcen_control_center_destroyed)
if (Control_center_destroyed)
net_ipx_send_endlevel_packet();
}
}
@ -3424,7 +3424,7 @@ void net_ipx_do_frame(int force, int listen)
if (!listen)
return;
if ((last_timeout_check > F1_0) && !(Fuelcen_control_center_destroyed))
if ((last_timeout_check > F1_0) && !(Control_center_destroyed))
{
fix approx_time = timer_get_approx_seconds();
// Check for player timeouts

View file

@ -1697,7 +1697,7 @@ int newdemo_read_frame_information()
case ND_EVENT_CONTROL_CENTER_DESTROYED:
nd_read_int(&Fuelcen_seconds_left);
Fuelcen_control_center_destroyed = 1;
Control_center_destroyed = 1;
if (nd_bad_read) { done = -1; break; }
if (!Newdemo_cntrlcen_destroyed) {
newdemo_pop_ctrlcen_triggers();
@ -2563,7 +2563,7 @@ void newdemo_playback_one_frame()
if (Newdemo_vcr_state == ND_STATE_PLAYBACK)
DoJasonInterpolate(nd_recorded_time);
Fuelcen_control_center_destroyed = 0;
Control_center_destroyed = 0;
Fuelcen_seconds_left = -1;
PALETTE_FLASH_SET(0,0,0); //clear flash

View file

@ -157,7 +157,7 @@ void flash_frame()
{
static fixang flash_ang=0;
if (!Fuelcen_control_center_destroyed)
if (!Control_center_destroyed)
return;
if (Endlevel_sequence)
@ -253,7 +253,7 @@ void render_face(int segnum, int sidenum, int nv, short *vp, int tmap1, int tmap
//the uvl struct has static light already in it
//scale static light for destruction effect
if (Fuelcen_control_center_destroyed) //make lights flash
if (Control_center_destroyed) //make lights flash
uvl_copy[i].l = fixmul(flash_scale,uvl_copy[i].l);
//add in dynamic light (from explosions, etc.)

View file

@ -139,13 +139,11 @@ void songs_init()
if ( Songs_initialized ) return;
// Set up External Music - ie Redbook/Jukebox
#if !defined(SHAREWARE) || ( defined(SHAREWARE) && defined(APPLE_DEMO) )
if (EXT_MUSIC_ON)
{
ext_music_load();
set_extmusic_volume(GameCfg.MusicVolume);
}
#endif // endof ifndef SHAREWARE, ie ifdef SHAREWARE
}
#define FADE_TIME (f1_0/2)

View file

@ -540,7 +540,7 @@ int state_save_all_sub(char *filename, char *desc, int between_levels)
}
// Save the fuelcen info
PHYSFS_write( fp, &Fuelcen_control_center_destroyed, sizeof(int), 1 );
PHYSFS_write( fp, &Control_center_destroyed, sizeof(int), 1 );
PHYSFS_write( fp, &Fuelcen_seconds_left, sizeof(int), 1 );
PHYSFS_write( fp, &Num_robot_centers, sizeof(int), 1 );
PHYSFS_write( fp, RobotCenters, sizeof(matcen_info), Num_robot_centers );
@ -821,7 +821,7 @@ RetryObjectLoading:
}
//Restore the fuelcen info
PHYSFS_read(fp, &Fuelcen_control_center_destroyed, sizeof(int), 1);
PHYSFS_read(fp, &Control_center_destroyed, sizeof(int), 1);
PHYSFS_read(fp, &Fuelcen_seconds_left, sizeof(int), 1);
PHYSFS_read(fp, &Num_robot_centers, sizeof(int), 1);
PHYSFS_read(fp, RobotCenters, sizeof(matcen_info), Num_robot_centers);

View file

@ -140,7 +140,7 @@ int check_trigger_sub(int trigger_num, int pnum)
if (Newdemo_state == ND_STATE_RECORDING) // stop demo recording
Newdemo_state = ND_STATE_PAUSED;
Fuelcen_control_center_destroyed = 0;
Control_center_destroyed = 0;
#ifdef NETWORK
if (Game_mode & GM_MULTI)
multi_send_endlevel_start(1);