diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 4227fe166..3e9469111 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D1X-Rebirth Changelog +20101211 +-------- +arch/include/key.h, arch/include/mouse.h, arch/sdl/event.c, arch/sdl/joy.c, arch/sdl/key.c, arch/sdl/mouse.c, arch/sdl/rbaudio.c, arch/sdl/timer.c, editor/ehostage.c, editor/medrobot.c, editor/medwall.c, include/maths.h, include/timer.h, include/ui.h, main/automap.c, main/console.c, main/digiobj.c, main/fireball.c, main/game.c, main/inferno.c, main/kmatrix.c, main/laser.c, main/laser.h, main/lighting.c, main/menu.c, main/multi.c, main/multi.h, main/multibot.c, main/net_ipx.c, main/net_ipx.h, main/net_udp.c, main/net_udp.h, main/newmenu.c, main/scores.c, main/titles.c, ui/listbox.c, ui/mouse.c, ui/scroll.c, ui/window.c: Introduced new data type fix64 to be used for new timers which can last 4462756 years instead of 9 hours; Introduced new timer functions to update and query program time; Used new timer all over the program except GameTime (which comes next) + 20101205 -------- arch/carbon/messagebox.c, arch/include/window.h, arch/linux/messagebox.c, arch/sdl/key.c, arch/sdl/mouse.c, arch/sdl/window.c, arch/win32/messagebox.c: Add CON_DEBUG level con_printf's for basic events (not EVENT_IDLE or EVENT_DRAW though) diff --git a/arch/include/key.h b/arch/include/key.h index 54c0616e5..ac4a9ecf3 100644 --- a/arch/include/key.h +++ b/arch/include/key.h @@ -49,7 +49,7 @@ extern unsigned char keyd_buffer_type; extern unsigned char keyd_editor_mode; // Time in seconds when last key was pressed... -extern volatile int keyd_time_when_last_pressed; +extern fix64 keyd_time_when_last_pressed; // Stores Unicode values registered in one event_loop call unsigned char unicode_frame_buffer[KEY_BUFFER_SIZE]; @@ -63,7 +63,6 @@ extern void key_flush(); // Clears the 256 char buffer extern int key_checkch(); // Returns 1 if a char is waiting extern int key_getch(); // Gets key if one waiting other waits for one. extern int key_inkey(); // Gets key if one, other returns 0. -extern int key_inkey_time(fix *time); // Same as inkey, but returns the time the key was pressed down. extern int key_peekkey(); // Same as inkey, but doesn't remove key from buffer. extern unsigned char key_ascii(); @@ -79,7 +78,7 @@ extern volatile unsigned char keyd_last_pressed; extern volatile unsigned char keyd_last_released; // Returns the seconds this key has been down since last call. -extern fix key_down_time(int scancode); +extern fix64 key_down_time(int scancode); // Returns number of times key has went from up to down since last call. extern unsigned int key_down_count(int scancode); diff --git a/arch/include/mouse.h b/arch/include/mouse.h index adb0e0e28..9301fc33f 100644 --- a/arch/include/mouse.h +++ b/arch/include/mouse.h @@ -43,7 +43,7 @@ extern void mouse_get_pos( int *x, int *y, int *z ); extern void mouse_get_delta( int *dx, int *dy, int *dz ); extern int mouse_get_btns(); extern void mouse_set_pos( int x, int y); -extern fix mouse_button_down_time(int button); +extern fix64 mouse_button_down_time(int button); extern int mouse_button_down_count(int button); extern int mouse_button_state(int button); extern void mouse_toggle_cursor(int activate); diff --git a/arch/sdl/event.c b/arch/sdl/event.c index 82ce7ea8e..87777960b 100644 --- a/arch/sdl/event.c +++ b/arch/sdl/event.c @@ -15,13 +15,13 @@ #include -extern void key_handler(SDL_KeyboardEvent *event, fix time); -extern void mouse_button_handler(SDL_MouseButtonEvent *mbe, fix time); -extern void mouse_motion_handler(SDL_MouseMotionEvent *mme, fix time); -extern void joy_button_handler(SDL_JoyButtonEvent *jbe, fix time); -extern void joy_hat_handler(SDL_JoyHatEvent *jhe, fix time); -extern void joy_axis_handler(SDL_JoyAxisEvent *jae, fix time); -extern void mouse_update_cursor_and_grab(fix time); +extern void key_handler(SDL_KeyboardEvent *event); +extern void mouse_button_handler(SDL_MouseButtonEvent *mbe); +extern void mouse_motion_handler(SDL_MouseMotionEvent *mme); +extern void joy_button_handler(SDL_JoyButtonEvent *jbe); +extern void joy_hat_handler(SDL_JoyHatEvent *jhe); +extern void joy_axis_handler(SDL_JoyAxisEvent *jae); +extern void mouse_update_cursor_and_grab(); static int initialised=0; @@ -29,7 +29,6 @@ void event_poll() { SDL_Event event; int clean_uniframe=1; - fix time = timer_get_fixed_seconds(); window *wind = window_get_front(); // If the front window changes, exit this loop, otherwise unintended behavior can occur @@ -42,24 +41,24 @@ void event_poll() if (clean_uniframe) memset(unicode_frame_buffer,'\0',sizeof(unsigned char)*KEY_BUFFER_SIZE); clean_uniframe=0; - key_handler((SDL_KeyboardEvent *)&event, time); + key_handler((SDL_KeyboardEvent *)&event); break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: - mouse_button_handler((SDL_MouseButtonEvent *)&event, time); + mouse_button_handler((SDL_MouseButtonEvent *)&event); break; case SDL_MOUSEMOTION: - mouse_motion_handler((SDL_MouseMotionEvent *)&event, time); + mouse_motion_handler((SDL_MouseMotionEvent *)&event); break; case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: - joy_button_handler((SDL_JoyButtonEvent *)&event, time); + joy_button_handler((SDL_JoyButtonEvent *)&event); break; case SDL_JOYAXISMOTION: - joy_axis_handler((SDL_JoyAxisEvent *)&event, time); + joy_axis_handler((SDL_JoyAxisEvent *)&event); break; case SDL_JOYHATMOTION: - joy_hat_handler((SDL_JoyHatEvent *)&event, time); + joy_hat_handler((SDL_JoyHatEvent *)&event); break; case SDL_JOYBALLMOTION: break; @@ -70,7 +69,7 @@ void event_poll() } } - mouse_update_cursor_and_grab(time); + mouse_update_cursor_and_grab(); } void event_flush() diff --git a/arch/sdl/joy.c b/arch/sdl/joy.c index 8b011a96a..50fe20bd2 100644 --- a/arch/sdl/joy.c +++ b/arch/sdl/joy.c @@ -23,11 +23,11 @@ int num_joysticks = 0; int joy_num_axes = 0; struct joybutton { - int state; - int last_state; - fix time_went_down; - int num_downs; - int num_ups; + int state; + int last_state; + fix64 time_went_down; + int num_downs; + int num_ups; }; struct joyaxis { @@ -60,7 +60,7 @@ static struct { int button_map[MAX_BUTTONS_PER_JOYSTICK]; } SDL_Joysticks[MAX_JOYSTICKS]; -void joy_button_handler(SDL_JoyButtonEvent *jbe, fix time) +void joy_button_handler(SDL_JoyButtonEvent *jbe) { int button; @@ -70,7 +70,7 @@ void joy_button_handler(SDL_JoyButtonEvent *jbe, fix time) switch (jbe->type) { case SDL_JOYBUTTONDOWN: - Joystick.buttons[button].time_went_down = time; + Joystick.buttons[button].time_went_down = timer_query(); Joystick.buttons[button].num_downs++; break; case SDL_JOYBUTTONUP: @@ -79,7 +79,7 @@ void joy_button_handler(SDL_JoyButtonEvent *jbe, fix time) } } -void joy_hat_handler(SDL_JoyHatEvent *jhe, fix time) +void joy_hat_handler(SDL_JoyHatEvent *jhe) { int hat = SDL_Joysticks[jhe->which].hat_map[jhe->hat]; int hbi; @@ -102,7 +102,7 @@ void joy_hat_handler(SDL_JoyHatEvent *jhe, fix time) if( !Joystick.buttons[hat+hbi].last_state && Joystick.buttons[hat+hbi].state) //last_state up, current state down { Joystick.buttons[hat+hbi].time_went_down - = time; + = timer_query(); Joystick.buttons[hat+hbi].num_downs++; } else if(Joystick.buttons[hat+hbi].last_state && !Joystick.buttons[hat+hbi].state) //last_state down, current state up @@ -112,7 +112,7 @@ void joy_hat_handler(SDL_JoyHatEvent *jhe, fix time) } } -void joy_axis_handler(SDL_JoyAxisEvent *jae, fix time) +void joy_axis_handler(SDL_JoyAxisEvent *jae) { int axis; @@ -249,8 +249,8 @@ fix joy_get_button_down_time(int btn) switch (Joystick.buttons[btn].state) { case SDL_PRESSED: - time = timer_get_fixed_seconds() - Joystick.buttons[btn].time_went_down; - Joystick.buttons[btn].time_went_down = timer_get_fixed_seconds(); + time = timer_query() - Joystick.buttons[btn].time_went_down; + Joystick.buttons[btn].time_went_down = timer_query(); break; case SDL_RELEASED: time = 0; diff --git a/arch/sdl/key.c b/arch/sdl/key.c index 8db535859..abcca2430 100644 --- a/arch/sdl/key.c +++ b/arch/sdl/key.c @@ -26,15 +26,15 @@ unsigned char keyd_editor_mode; volatile unsigned char keyd_last_pressed; volatile unsigned char keyd_last_released; volatile unsigned char keyd_pressed[256]; -volatile int keyd_time_when_last_pressed; +fix64 keyd_time_when_last_pressed; unsigned char unicode_frame_buffer[KEY_BUFFER_SIZE] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' }; typedef struct Key_info { ubyte state; // state of key 1 == down, 0 == up ubyte last_state; // previous state of key int counter; // incremented each time key is down in handler - fix timewentdown; // simple counter incremented each time in interrupt and key is down - fix timehelddown; // counter to tell how long key is down -- gets reset to 0 by key routines + fix64 timewentdown; // simple counter incremented each time in interrupt and key is down + fix64 timehelddown; // counter to tell how long key is down -- gets reset to 0 by key routines ubyte downcount; // number of key counts key was down ubyte upcount; // number of times key was released } Key_info; @@ -42,7 +42,7 @@ typedef struct Key_info { typedef struct keyboard { unsigned short keybuffer[KEY_BUFFER_SIZE]; Key_info keys[256]; - fix time_pressed[KEY_BUFFER_SIZE]; + fix64 time_pressed[KEY_BUFFER_SIZE]; unsigned int keyhead, keytail; } keyboard; @@ -345,7 +345,7 @@ unsigned char key_ascii() return 255; } -void key_handler(SDL_KeyboardEvent *event, fix time) +void key_handler(SDL_KeyboardEvent *event) { ubyte state; int i, keycode, event_keysym=-1, key_state; @@ -381,7 +381,7 @@ void key_handler(SDL_KeyboardEvent *event, fix time) if (state) { key->counter++; keyd_last_pressed = keycode; - keyd_time_when_last_pressed = time; + keyd_time_when_last_pressed = timer_query(); } } else { if (state) { @@ -389,7 +389,7 @@ void key_handler(SDL_KeyboardEvent *event, fix time) keyd_pressed[keycode] = 1; key->downcount += state; key->state = 1; - key->timewentdown = keyd_time_when_last_pressed = time; + key->timewentdown = keyd_time_when_last_pressed = timer_query(); key->counter++; } else { keyd_pressed[keycode] = 0; @@ -397,7 +397,7 @@ void key_handler(SDL_KeyboardEvent *event, fix time) key->upcount += key->state; key->state = 0; key->counter = 0; - key->timehelddown += time - key->timewentdown; + key->timehelddown += timer_query() - key->timewentdown; } } if ( (state && !key->last_state) || (state && key->last_state && (key->counter > 30) && (key->counter & 0x01)) ) { @@ -466,7 +466,7 @@ void key_init() Installed=1; SDL_EnableUNICODE(1); - keyd_time_when_last_pressed = timer_get_fixed_seconds(); + keyd_time_when_last_pressed = timer_query(); keyd_buffer_type = 1; for(i=0; i<256; i++) @@ -479,7 +479,6 @@ void key_init() void key_flush() { int i; - fix curtime; if (!Installed) key_init(); @@ -493,14 +492,11 @@ void key_flush() unicode_frame_buffer[i] = '\0'; } -//use gettimeofday here: - curtime = timer_get_fixed_seconds(); - for (i=0; i<256; i++ ) { keyd_pressed[i] = 0; key_data.keys[i].state = 1; key_data.keys[i].last_state = 0; - key_data.keys[i].timewentdown = curtime; + key_data.keys[i].timewentdown = timer_query(); key_data.keys[i].downcount=0; key_data.keys[i].upcount=0; key_data.keys[i].timehelddown = 0; @@ -539,21 +535,6 @@ int key_inkey() return key; } -int key_inkey_time(fix * time) -{ - int key = 0; - - if (!Installed) - key_init(); -// event_poll(); - if (key_data.keytail!=key_data.keyhead) { - key = key_data.keybuffer[key_data.keyhead]; - *time = key_data.time_pressed[key_data.keyhead]; - key_data.keyhead = add_one(key_data.keyhead); - } - return key; -} - int key_peekkey() { int key = 0; @@ -599,9 +580,9 @@ unsigned int key_get_shift_status() } // Returns the number of seconds this key has been down since last call. -fix key_down_time(int scancode) +fix64 key_down_time(int scancode) { - fix time_down, time; + fix64 time_down, time; // event_poll(); if ((scancode<0)|| (scancode>255)) return 0; @@ -610,7 +591,7 @@ fix key_down_time(int scancode) time_down = key_data.keys[scancode].timehelddown; key_data.keys[scancode].timehelddown = 0; } else { - time = timer_get_fixed_seconds(); + time = timer_query(); time_down = time - key_data.keys[scancode].timewentdown; key_data.keys[scancode].timewentdown = time; } diff --git a/arch/sdl/mouse.c b/arch/sdl/mouse.c index c22a70d75..166e46cbc 100644 --- a/arch/sdl/mouse.c +++ b/arch/sdl/mouse.c @@ -15,18 +15,18 @@ struct mousebutton { ubyte pressed; - fix time_went_down; - fix time_held_down; - uint num_downs; - uint num_ups; + fix64 time_went_down; + fix64 time_held_down; + uint num_downs; + uint num_ups; }; static struct mouseinfo { struct mousebutton buttons[MOUSE_MAX_BUTTONS]; - int delta_x, delta_y, delta_z, old_delta_x, old_delta_y; - int x,y,z; - int cursor_enabled; - fix cursor_time; + int delta_x, delta_y, delta_z, old_delta_x, old_delta_y; + int x,y,z; + int cursor_enabled; + fix64 cursor_time; } Mouse; typedef struct d_event_mousebutton @@ -47,7 +47,7 @@ void mouse_close(void) SDL_WM_GrabInput(SDL_GRAB_OFF); } -void mouse_button_handler(SDL_MouseButtonEvent *mbe, fix time) +void mouse_button_handler(SDL_MouseButtonEvent *mbe) { // to bad, SDL buttons use a different mapping as descent expects, // this is at least true and tested for the first three buttons @@ -78,11 +78,11 @@ void mouse_button_handler(SDL_MouseButtonEvent *mbe, fix time) if (GameArg.CtlNoMouse) return; - Mouse.cursor_time = time; + Mouse.cursor_time = timer_query(); if (mbe->state == SDL_PRESSED) { Mouse.buttons[button].pressed = 1; - Mouse.buttons[button].time_went_down = time; + Mouse.buttons[button].time_went_down = timer_query(); Mouse.buttons[button].num_downs++; if (button == MBTN_Z_UP) { @@ -94,7 +94,7 @@ void mouse_button_handler(SDL_MouseButtonEvent *mbe, fix time) } } else { Mouse.buttons[button].pressed = 0; - Mouse.buttons[button].time_held_down += time - Mouse.buttons[button].time_went_down; + Mouse.buttons[button].time_held_down += timer_query() - Mouse.buttons[button].time_went_down; Mouse.buttons[button].num_ups++; } @@ -112,12 +112,12 @@ void mouse_button_handler(SDL_MouseButtonEvent *mbe, fix time) call_default_handler((d_event *)&event); } -void mouse_motion_handler(SDL_MouseMotionEvent *mme, fix time) +void mouse_motion_handler(SDL_MouseMotionEvent *mme) { if (GameArg.CtlNoMouse) return; - Mouse.cursor_time = time; + Mouse.cursor_time = timer_query(); Mouse.x += mme->xrel; Mouse.y += mme->yrel; } @@ -125,14 +125,12 @@ void mouse_motion_handler(SDL_MouseMotionEvent *mme, fix time) void mouse_flush() // clears all mice events... { int i; - fix current_time; // event_poll(); - current_time = timer_get_fixed_seconds(); for (i=0; i= time && !show) + if ( (Mouse.cursor_time + (F1_0*2)) >= timer_query() && !show) SDL_ShowCursor(SDL_ENABLE); - else if ( (Mouse.cursor_time + (F1_0*2)) < time && show) + else if ( (Mouse.cursor_time + (F1_0*2)) < timer_query() && show) SDL_ShowCursor(SDL_DISABLE); if (grab) diff --git a/arch/sdl/rbaudio.c b/arch/sdl/rbaudio.c index 46a52182e..e86038194 100644 --- a/arch/sdl/rbaudio.c +++ b/arch/sdl/rbaudio.c @@ -200,17 +200,15 @@ int RBAGetNumberOfTracks() // a real hook would be ideal, but is currently unsupported by SDL Audio CD void RBACheckFinishedHook() { - static fix last_check_time; - fix current_time; + static fix64 last_check_time; if (!s_cd) return; - current_time = timer_get_fixed_seconds(); - if (current_time < last_check_time || (current_time - last_check_time) >= F2_0) + if ((timer_query() - last_check_time) >= F2_0) { if ((SDL_CDStatus(s_cd) == CD_STOPPED) && redbook_finished_hook) redbook_finished_hook(); - last_check_time = current_time; + last_check_time = timer_query(); } } diff --git a/arch/sdl/timer.c b/arch/sdl/timer.c index cef0fd7b0..a0984ff35 100644 --- a/arch/sdl/timer.c +++ b/arch/sdl/timer.c @@ -10,12 +10,28 @@ #include "timer.h" #include "config.h" -fix timer_get_fixed_seconds(void) +static fix64 F64_RunTime = 0; + +void timer_update(void) { - fix x; - unsigned long tv_now = SDL_GetTicks(); - x=i2f(tv_now/1000) | fixdiv(i2f(tv_now % 1000),i2f(1000)); - return x; + static ubyte init = 1; + static u_int32_t last_tv = 0; + u_int32_t cur_tv = SDL_GetTicks(); + + if (init) + { + last_tv = cur_tv; + init = 0; + } + + if (last_tv < cur_tv) // in case SDL_GetTicks wraps, don't update and have a little hickup + F64_RunTime += (cur_tv - last_tv)*F1_0/1000; // increment! this value will overflow long after we are all dead... so why bother checking? + last_tv = cur_tv; +} + +fix64 timer_query(void) +{ + return (F64_RunTime); } void timer_delay(fix seconds) diff --git a/editor/ehostage.c b/editor/ehostage.c index fc9270aa9..1e55e20bb 100644 --- a/editor/ehostage.c +++ b/editor/ehostage.c @@ -106,7 +106,7 @@ void vclip_play( vclip * vc, fix frame_time ) static char HostageMessage[] = " "; -static fix Time; +static fix64 Time; int SelectPrevHostage() { int start=0; @@ -374,7 +374,7 @@ int do_hostage_dialog() ui_add_gadget_button( MainWindow,155,i,140, 26, "Delete", ObjectDelete ); i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Create New", PlaceHostage ); i += 29; - Time = timer_get_fixed_seconds(); + Time = timer_query(); LastHostageIndex = -2; // Set to some dummy value so everything works ok on the first frame. @@ -395,7 +395,8 @@ void hostage_close_window() void do_hostage_window() { - fix DeltaTime, Temp; + fix DeltaTime; + fix64 Temp; if ( MainWindow == NULL ) return; @@ -436,7 +437,7 @@ void do_hostage_window() //------------------------------------------------------------ // A simple frame time counter for spinning the objects... //------------------------------------------------------------ - Temp = timer_get_fixed_seconds(); + Temp = timer_query(); DeltaTime = Temp - Time; Time = Temp; diff --git a/editor/medrobot.c b/editor/medrobot.c index ff3228fb3..36a3fa140 100644 --- a/editor/medrobot.c +++ b/editor/medrobot.c @@ -64,7 +64,7 @@ static UI_GADGET_BUTTON *QuitButton; static UI_GADGET_RADIO *InitialMode[NUM_BOXES]; static int old_object; -static fix Time; +static fix64 Time; static vms_angvec angles={0,0,0}, goody_angles={0,0,0}; //------------------------------------------------------------------------- @@ -536,7 +536,7 @@ int do_robot_dialog() ui_add_gadget_button( MainWindow,190,i,110, 26, "Create New", LocalObjectPlaceObject ); i += 29; ui_add_gadget_button( MainWindow,190,i,110, 26, "Set Path", med_set_ai_path ); - Time = timer_get_fixed_seconds(); + Time = timer_query(); old_object = -2; // Set to some dummy value so everything works ok on the first frame. @@ -561,7 +561,8 @@ void robot_close_window() void do_robot_window() { int i; - fix DeltaTime, Temp; + fix DeltaTime; + fix64 Temp; int first_object_index; if ( MainWindow == NULL ) return; @@ -615,7 +616,7 @@ void do_robot_window() //------------------------------------------------------------ // A simple frame time counter for spinning the objects... //------------------------------------------------------------ - Temp = timer_get_fixed_seconds(); + Temp = timer_query(); DeltaTime = Temp - Time; Time = Temp; diff --git a/editor/medwall.c b/editor/medwall.c index 0d0299f98..91d0485bd 100644 --- a/editor/medwall.c +++ b/editor/medwall.c @@ -54,7 +54,7 @@ static UI_GADGET_CHECKBOX *DoorFlag[4]; static UI_GADGET_RADIO *KeyFlag[4]; static int old_wall_num; -static fix Time; +static fix64 Time; static int framenum=0; static int Current_door_type=1; @@ -400,7 +400,8 @@ void do_wall_window() { int i; sbyte type; - fix DeltaTime, Temp; + fix DeltaTime; + fix64 Temp; if ( MainWindow == NULL ) return; @@ -496,7 +497,7 @@ void do_wall_window() //------------------------------------------------------------ // A simple frame time counter for animating the walls... //------------------------------------------------------------ - Temp = timer_get_fixed_seconds(); + Temp = timer_query(); DeltaTime = Temp - Time; //------------------------------------------------------------ diff --git a/include/maths.h b/include/maths.h index 13317858b..9582fde22 100644 --- a/include/maths.h +++ b/include/maths.h @@ -18,6 +18,7 @@ int d_rand (); // Random number function which returns in the range 0-0x7FFF //=============================== FIXED POINT =============================== +typedef int64_t fix64; //64 bits int, for timers typedef int32_t fix; //16 bits int, 16 bits frac typedef int16_t fixang; //angles @@ -29,10 +30,8 @@ typedef struct quad quad; -//Convert an int to a fix +//Convert an int to a fix/fix64 and back #define i2f(i) ((i)<<16) - -//Get the int part of a fix #define f2i(f) ((f)>>16) //Get the int part of a fix, with rounding diff --git a/include/timer.h b/include/timer.h index 04950deb8..742d2f79f 100644 --- a/include/timer.h +++ b/include/timer.h @@ -24,7 +24,8 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "pstypes.h" #include "fix.h" -extern fix timer_get_fixed_seconds(); // Rolls about every 9 hours... +void timer_update(); +fix64 timer_query(); void timer_delay(fix seconds); void timer_delay2(int fps); diff --git a/include/ui.h b/include/ui.h index 39a294e8b..ee295ccc1 100644 --- a/include/ui.h +++ b/include/ui.h @@ -157,7 +157,7 @@ typedef struct { int fake_size; UI_GADGET_BUTTON * up_button; UI_GADGET_BUTTON * down_button; - unsigned int last_scrolled; + fix64 last_scrolled; short drag_x, drag_y; int drag_starting; int dragging; @@ -176,7 +176,7 @@ typedef struct { int current_item; int selected_item; int old_current_item; - unsigned int last_scrolled; + fix64 last_scrolled; int dragging; int textheight; UI_GADGET_SCROLLBAR * scrollbar; @@ -215,7 +215,7 @@ typedef struct { grs_bitmap * background; grs_bitmap * pointer; #endif - unsigned int time_lastpressed; + fix64 time_lastpressed; short moved; } UI_MOUSE; diff --git a/main/automap.c b/main/automap.c index 571fe2505..d62caddd3 100644 --- a/main/automap.c +++ b/main/automap.c @@ -90,8 +90,8 @@ typedef struct Edge_info { typedef struct automap { - fix entry_time; - fix t1, t2; + fix64 entry_time; + fix64 t1, t2; int leave_mode; int pause_game; vms_angvec tangles; @@ -424,7 +424,7 @@ int automap_idle(window *wind, d_event *event, automap *am) Controls = am->saved_control_info; // Restore controls } - if ( am->leave_mode==0 && Controls.automap_state && (timer_get_fixed_seconds()-am->entry_time)>LEAVE_TIME) + if ( am->leave_mode==0 && Controls.automap_state && (timer_query()-am->entry_time)>LEAVE_TIME) am->leave_mode = 1; if ( !Controls.automap_state && (am->leave_mode==1) ) @@ -478,12 +478,13 @@ int automap_idle(window *wind, d_event *event, automap *am) if ( am->viewDist < ZOOM_MIN_VALUE ) am->viewDist = ZOOM_MIN_VALUE; if ( am->viewDist > ZOOM_MAX_VALUE ) am->viewDist = ZOOM_MAX_VALUE; - am->t2 = timer_get_fixed_seconds(); + am->t2 = timer_query(); while (am->t2 - am->t1 < F1_0 / (GameCfg.VSync?MAXIMUM_FPS:GameArg.SysMaxFPS)) // ogl is fast enough that the automap can read the input too fast and you start to turn really slow. So delay a bit (and free up some cpu :) { if (GameArg.SysUseNiceFPS && !GameCfg.VSync) timer_delay(f1_0 / GameArg.SysMaxFPS - (am->t2 - am->t1)); - am->t2 = timer_get_fixed_seconds(); + timer_update(); + am->t2 = timer_query(); } if (am->pause_game) { @@ -619,7 +620,7 @@ void do_automap( int key_code ) am->view_target = Objects[Players[Player_num].objnum].pos; - am->t1 = am->entry_time = timer_get_fixed_seconds(); + am->t1 = am->entry_time = timer_query(); am->t2 = am->t1; //Fill in Automap_visited from Objects[Players[Player_num].objnum].segnum diff --git a/main/console.c b/main/console.c index 52d3450ae..80bb73c16 100644 --- a/main/console.c +++ b/main/console.c @@ -17,7 +17,7 @@ #include "gamefont.h" #include "key.h" #include "vers_id.h" -#include "game.h" +#include "timer.h" PHYSFS_file *gamelog_fp=NULL; struct console_buffer con_buffer[CON_LINES_MAX]; @@ -107,20 +107,23 @@ void con_printf(int priority, char *fmt, ...) void con_show(void) { int i=0, y; - static float con_size=0; + static int con_size=0; + static fix64 last_scroll_time = 0; int done=0; if (con_render) { - if (con_size < CON_LINES_ONSCREEN && FixedStep & EPS30) + if (con_size < CON_LINES_ONSCREEN && timer_query() >= last_scroll_time+(F1_0/30)) { + last_scroll_time = timer_query(); con_size++; } } else { - if (con_size > 0 && FixedStep & EPS30) + if (con_size > 0 && timer_query() >= last_scroll_time+(F1_0/30)) { + last_scroll_time = timer_query(); con_size--; } } diff --git a/main/digiobj.c b/main/digiobj.c index 53081eb41..ff49a6c4c 100644 --- a/main/digiobj.c +++ b/main/digiobj.c @@ -770,7 +770,7 @@ void digi_sound_debug() #endif typedef struct sound_q { - fix time_added; + fix64 time_added; int soundnum; } sound_q; @@ -803,8 +803,6 @@ void SoundQ_end() void SoundQ_process() { - fix curtime = timer_get_fixed_seconds(); - if ( SoundQ_channel > -1 ) { if ( digi_is_channel_playing(SoundQ_channel) ) return; @@ -814,7 +812,7 @@ void SoundQ_process() while ( SoundQ_head != SoundQ_tail ) { sound_q * q = &SoundQ[SoundQ_head]; - if ( q->time_added+MAX_LIFE > curtime ) { + if ( q->time_added+MAX_LIFE > timer_query() ) { SoundQ_channel = digi_start_sound(q->soundnum, F1_0+1, 0xFFFF/2, 0, -1, -1, -1 ); return; } else { @@ -841,7 +839,7 @@ void digi_start_sound_queued( short soundnum, fix volume ) volume = F1_0 + 1; if ( i != SoundQ_head ) { - SoundQ[SoundQ_tail].time_added = timer_get_fixed_seconds(); + SoundQ[SoundQ_tail].time_added = timer_query(); SoundQ[SoundQ_tail].soundnum = soundnum; SoundQ_num++; SoundQ_tail = i; diff --git a/main/fireball.c b/main/fireball.c index 71e0d07a0..ad67742c9 100644 --- a/main/fireball.c +++ b/main/fireball.c @@ -406,7 +406,7 @@ int choose_drop_segment(void) int cur_drop_depth = initial_drop_depth; int count; - d_srand(timer_get_fixed_seconds()); + d_srand((fix)timer_query()); while ((segnum == -1) && (cur_drop_depth > BASE_NET_DROP_DEPTH/2)) { pnum = (d_rand() * N_players) >> 15; diff --git a/main/game.c b/main/game.c index 214d515e8..af9ca4ae6 100644 --- a/main/game.c +++ b/main/game.c @@ -104,7 +104,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. int Mark_count = 0; // number of debugging marks set #endif -static fix last_timer_value=0; +static fix64 last_timer_value=0; fix VR_eye_width = F1_0; int VR_render_mode = VR_NONE; @@ -360,8 +360,8 @@ static int time_paused=0; void stop_time() { if (time_paused==0) { - fix time; - time = timer_get_fixed_seconds(); + fix64 time; + time = timer_query(); last_timer_value = time - last_timer_value; if (last_timer_value < 0) { last_timer_value = 0; @@ -375,8 +375,8 @@ void start_time() time_paused--; Assert(time_paused >= 0); if (time_paused==0) { - fix time; - time = timer_get_fixed_seconds(); + fix64 time; + time = timer_query(); last_timer_value = time - last_timer_value; } } @@ -426,21 +426,23 @@ void FixedStepCalc() void reset_time() { - last_timer_value = timer_get_fixed_seconds(); + last_timer_value = timer_query(); } void calc_frame_time() { - fix timer_value,last_frametime = FrameTime; + fix64 timer_value; + fix last_frametime = FrameTime; - timer_value = timer_get_fixed_seconds(); + timer_value = timer_query(); FrameTime = timer_value - last_timer_value; while (FrameTime < f1_0 / (GameCfg.VSync?MAXIMUM_FPS:GameArg.SysMaxFPS)) { if (GameArg.SysUseNiceFPS && !GameCfg.VSync) timer_delay(f1_0 / GameArg.SysMaxFPS - FrameTime); - timer_value = timer_get_fixed_seconds(); + timer_update(); + timer_value = timer_query(); FrameTime = timer_value - last_timer_value; } @@ -841,7 +843,7 @@ extern void temp_reset_stuff_on_level(); void check_rear_view() { static int leave_mode; - static fix entry_time; + static fix64 entry_time; if (Newdemo_state == ND_STATE_PLAYBACK) return; @@ -859,7 +861,7 @@ void check_rear_view() else { Rear_view = 1; leave_mode = 0; //means wait for another key - entry_time = timer_get_fixed_seconds(); + entry_time = timer_query(); if (PlayerCfg.CockpitMode[1] == CM_FULL_COCKPIT) { select_cockpit(CM_REAR_VIEW); } @@ -870,7 +872,7 @@ 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_query() - entry_time) > LEAVE_TIME) leave_mode = 1; } else diff --git a/main/inferno.c b/main/inferno.c index 3c26faf3e..ff9c1a803 100644 --- a/main/inferno.c +++ b/main/inferno.c @@ -188,6 +188,8 @@ int standard_handler(d_event *event) { int key; + timer_update(); + if (Quitting) { window *wind = window_get_front(); diff --git a/main/kmatrix.c b/main/kmatrix.c index 84020064a..f9c5ed1cd 100644 --- a/main/kmatrix.c +++ b/main/kmatrix.c @@ -59,7 +59,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. /* IPX CODE - START */ #define MAX_VIEW_TIME F1_0*60 -fix StartAbortMenuTime; +fix64 StartAbortMenuTime; void kmatrix_ipx_draw_item( int i, int *sorted ) { @@ -149,7 +149,7 @@ void kmatrix_ipx_draw_deaths(int *sorted) typedef struct kmatrix_ipx_screen { grs_bitmap background; - fix entry_time; + fix64 entry_time; int network; } kmatrix_ipx_screen; @@ -211,7 +211,7 @@ int kmatrix_ipx_handler(window *wind, d_event *event, kmatrix_ipx_screen *km) case EVENT_IDLE: timer_delay2(50); - if (timer_get_fixed_seconds() >= (km->entry_time+MAX_VIEW_TIME)) + if (timer_query() >= (km->entry_time+MAX_VIEW_TIME)) window_close(wind); if (km->network && (Game_mode & GM_NETWORK)) @@ -252,7 +252,7 @@ void kmatrix_ipx_view(int network) } gr_palette_load(gr_palette); - km->entry_time = timer_get_fixed_seconds(); + km->entry_time = timer_query(); km->network = network; set_screen_mode( SCREEN_MENU ); @@ -392,7 +392,7 @@ typedef struct kmatrix_screen { grs_bitmap background; int network; - fix end_time; + fix64 end_time; int playing; } kmatrix_screen; @@ -468,7 +468,6 @@ void kmatrix_redraw_coop() int kmatrix_handler(window *wind, d_event *event, kmatrix_screen *km) { int i = 0, k = 0, choice = 0; - fix time = timer_get_fixed_seconds(); switch (event->type) { @@ -479,7 +478,7 @@ int kmatrix_handler(window *wind, d_event *event, kmatrix_screen *km) case KEY_ESC: if (km->network) { - StartAbortMenuTime=timer_get_fixed_seconds(); + StartAbortMenuTime=timer_query(); choice=nm_messagebox1( NULL,multi_endlevel_poll2, NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_GAME ); } else @@ -525,10 +524,10 @@ int kmatrix_handler(window *wind, d_event *event, kmatrix_screen *km) // If Reactor is finished and end_time not inited, set the time when we will exit this loop if (km->end_time == -1 && Countdown_seconds_left < 0 && !km->playing) - km->end_time = time + (KMATRIX_VIEW_SEC * F1_0); + km->end_time = timer_query() + (KMATRIX_VIEW_SEC * F1_0); // Check if end_time has been reached and exit loop - if (time >= km->end_time && km->end_time != -1) + if (timer_query() >= km->end_time && km->end_time != -1) { if (km->network) multi_send_endlevel_packet(); // make sure @@ -543,7 +542,7 @@ int kmatrix_handler(window *wind, d_event *event, kmatrix_screen *km) if (km->playing) kmatrix_status_msg(Countdown_seconds_left, 1); else - kmatrix_status_msg(f2i(time-km->end_time), 0); + kmatrix_status_msg(f2i(timer_query()-km->end_time), 0); break; case EVENT_WINDOW_CLOSE: diff --git a/main/laser.c b/main/laser.c index 3c504384d..2180ef415 100644 --- a/main/laser.c +++ b/main/laser.c @@ -174,7 +174,7 @@ int Laser_offset=0; void do_muzzle_stuff(int segnum, vms_vector *pos) { - Muzzle_data[Muzzle_queue_index].create_time = timer_get_fixed_seconds(); + Muzzle_data[Muzzle_queue_index].create_time = timer_query(); Muzzle_data[Muzzle_queue_index].segnum = segnum; Muzzle_data[Muzzle_queue_index].pos = *pos; Muzzle_queue_index++; diff --git a/main/laser.h b/main/laser.h index b7f89262b..e317256a6 100644 --- a/main/laser.h +++ b/main/laser.h @@ -93,8 +93,8 @@ extern int object_to_object_visibility(struct object *obj1, struct object *obj2, extern int Muzzle_queue_index; typedef struct muzzle_info { - fix create_time; - short segnum; + fix64 create_time; + short segnum; vms_vector pos; } muzzle_info; diff --git a/main/lighting.c b/main/lighting.c index 0a6df210d..2ec5b4dcf 100644 --- a/main/lighting.c +++ b/main/lighting.c @@ -213,11 +213,11 @@ void apply_light(fix obj_intensity, int obj_seg, vms_vector *obj_pos, int n_rend // ---------------------------------------------------------------------------------------------- void cast_muzzle_flash_light(int n_render_vertices, short *render_vertices) { - fix current_time; + fix64 current_time; int i; short time_since_flash; - current_time = timer_get_fixed_seconds(); + current_time = timer_query(); for (i=0; itype) @@ -403,7 +402,7 @@ int main_menu_handler(newmenu *menu, d_event *event, int *menu_choice ) if ( Players[Player_num].callsign[0]==0 ) RegisterPlayer(); else - keyd_time_when_last_pressed = timer_get_fixed_seconds(); // .. 20 seconds from now! + keyd_time_when_last_pressed = timer_query(); // .. 20 seconds from now! break; case EVENT_KEY_COMMAND: @@ -413,11 +412,9 @@ int main_menu_handler(newmenu *menu, d_event *event, int *menu_choice ) break; case EVENT_IDLE: - curtime = timer_get_fixed_seconds(); - if ( keyd_time_when_last_pressed+i2f(45) < curtime || GameArg.SysAutoDemo ) + if ( keyd_time_when_last_pressed+i2f(45) < timer_query() || GameArg.SysAutoDemo ) { - if (curtime < 0) curtime = 0; - keyd_time_when_last_pressed = curtime; // Reset timer so that disk won't thrash if no demos. + keyd_time_when_last_pressed = timer_query(); // Reset timer so that disk won't thrash if no demos. newdemo_start_playback(NULL); // Randomly pick a file } break; diff --git a/main/multi.c b/main/multi.c index 953cdb8be..b2904a184 100644 --- a/main/multi.c +++ b/main/multi.c @@ -144,7 +144,7 @@ bitmap_index multi_player_textures[MAX_NUM_NET_PLAYERS][N_PLAYER_SHIP_TEXTURES]; // Globals for protocol-bound Refuse-functions char RefuseThisPlayer=0,WaitForRefuseAnswer=0,RefuseTeam,RefusePlayerName[12]; -fix RefuseTimeLimit=0; +fix64 RefuseTimeLimit=0; typedef struct netplayer_stats { ubyte message_type; diff --git a/main/multi.h b/main/multi.h index f423d00fc..98f1537b4 100644 --- a/main/multi.h +++ b/main/multi.h @@ -318,7 +318,7 @@ void change_playernum_to(int new_pnum); // Globals for protocol-bound Refuse-functions extern char RefuseThisPlayer,WaitForRefuseAnswer,RefuseTeam,RefusePlayerName[12]; -extern fix RefuseTimeLimit; +extern fix64 RefuseTimeLimit; #define REFUSE_INTERVAL (F1_0*8) extern uint multi_allow_powerup; @@ -359,7 +359,7 @@ typedef struct netplayer_info sbyte connected; ubyte rank; fix ping; - fix LastPacketTime; + fix64 LastPacketTime; } __pack__ netplayer_info; /* diff --git a/main/multibot.c b/main/multibot.c index 74d8945d3..af5fdd9de 100644 --- a/main/multibot.c +++ b/main/multibot.c @@ -1109,7 +1109,7 @@ multi_drop_robot_powerups(int objnum) return; else if (robptr->contains_count) { - d_srand(timer_get_fixed_seconds()); + d_srand((fix)timer_query()); if (((d_rand() * 16) >> 15) < robptr->contains_prob) { del_obj->contains_count = ((d_rand() * robptr->contains_count) >> 15) + 1; del_obj->contains_type = robptr->contains_type; diff --git a/main/net_ipx.c b/main/net_ipx.c index 602451928..22fc3e64c 100644 --- a/main/net_ipx.c +++ b/main/net_ipx.c @@ -71,9 +71,6 @@ void net_ipx_read_object_packet( ubyte *data ); void net_ipx_read_sync_packet( ubyte * sp ); void net_ipx_flush(); void net_ipx_listen(); -void net_ipx_ping_all(fix time); -void net_ipx_ping(ubyte flag, int pnum); -void net_ipx_handle_ping_return(ubyte pnum); void net_ipx_process_pdata(char *data); void net_ipx_more_game_options(); void net_ipx_read_pdata_packet(IPX_frame_info *pd); @@ -612,7 +609,7 @@ int net_ipx_endlevel_poll( newmenu *menu, d_event *event, int *secret ) { // Polling loop for End-of-level menu - static fix t1 = 0; + static fix64 t1 = 0; int i = 0; int num_ready = 0; int num_escaped = 0; @@ -650,10 +647,10 @@ int net_ipx_endlevel_poll( newmenu *menu, d_event *event, int *secret ) case EVENT_IDLE: // Send our endlevel packet at regular intervals - if (timer_get_fixed_seconds() > t1+ENDLEVEL_SEND_INTERVAL) + if (timer_query() > t1+ENDLEVEL_SEND_INTERVAL) { net_ipx_send_endlevel_packet(); - t1 = timer_get_fixed_seconds(); + t1 = timer_query(); } for (i = 0; i < N_players; i++) @@ -672,7 +669,7 @@ int net_ipx_endlevel_poll( newmenu *menu, d_event *event, int *secret ) if (Players[i].connected == CONNECT_PLAYING) { // Check timeout for idle players - if (timer_get_fixed_seconds() > Netgame.players[i].LastPacketTime+ENDLEVEL_IDLE_TIME) + if (timer_query() > Netgame.players[i].LastPacketTime+ENDLEVEL_IDLE_TIME) { Players[i].connected = CONNECT_DISCONNECTED; net_ipx_send_endlevel_sub(i); @@ -735,7 +732,7 @@ int net_ipx_endlevel_poll2( newmenu *menu, d_event *event, int *secret ) { // Polling loop for End-of-level menu - static fix t1 = 0; + static fix64 t1 = 0; int i = 0; int num_ready = 0; int goto_secret = 0; @@ -747,10 +744,10 @@ int net_ipx_endlevel_poll2( newmenu *menu, d_event *event, int *secret ) // Send our endlevel packet at regular intervals - if (timer_get_fixed_seconds() > t1+ENDLEVEL_SEND_INTERVAL) + if (timer_query() > t1+ENDLEVEL_SEND_INTERVAL) { net_ipx_send_endlevel_packet(); - t1 = timer_get_fixed_seconds(); + t1 = timer_query(); } net_ipx_listen(); @@ -778,7 +775,7 @@ int net_ipx_kmatrix_poll1( newmenu *menu, d_event *event, void *userdata ) { // Polling loop for End-of-level menu - static fix t1 = 0; + static fix64 t1 = 0; int i = 0; int num_ready = 0; int goto_secret = 0; @@ -791,10 +788,10 @@ int net_ipx_kmatrix_poll1( newmenu *menu, d_event *event, void *userdata ) // Send our endlevel packet at regular intervals - if (timer_get_fixed_seconds() > t1+ENDLEVEL_SEND_INTERVAL) + if (timer_query() > t1+ENDLEVEL_SEND_INTERVAL) { net_ipx_send_endlevel_packet(); - t1 = timer_get_fixed_seconds(); + t1 = timer_query(); } net_ipx_listen(); @@ -853,7 +850,7 @@ int net_ipx_endlevel(int *secret) m[i].type = NM_TYPE_TEXT; m[i].text = menu_text + i*80; sprintf(m[i].text, "%s %s", Players[i].callsign, CONNECT_STATES(Players[i].connected)); - Netgame.players[i].LastPacketTime = timer_get_fixed_seconds(); + Netgame.players[i].LastPacketTime = timer_query(); } m[N_players].type = NM_TYPE_TEXT; m[N_players].text = menu_text + N_players*80; @@ -1081,7 +1078,7 @@ void net_ipx_welcome_player(IPX_sequence_packet *their) // disconnected and replace the oldest player with this new one int oldest_player = -1; - fix oldest_time = timer_get_fixed_seconds(); + fix64 oldest_time = timer_query(); int activeplayers = 0; Assert(N_players == MaxNumNetPlayers); @@ -1563,7 +1560,7 @@ void net_ipx_send_rejoin_sync(int player_num) int i, j; Players[player_num].connected = CONNECT_PLAYING; // connect the new guy - Netgame.players[player_num].LastPacketTime = timer_get_fixed_seconds(); + Netgame.players[player_num].LastPacketTime = timer_query(); if (Endlevel_sequence || Control_center_destroyed) { @@ -1645,7 +1642,7 @@ void net_ipx_add_player(IPX_sequence_packet *p) memcpy( Netgame.players[N_players].protocol.ipx.server, p->player.protocol.ipx.server, 4 ); Netgame.players[N_players].connected = CONNECT_PLAYING; Players[N_players].connected = CONNECT_PLAYING; - Netgame.players[N_players].LastPacketTime = timer_get_fixed_seconds(); + Netgame.players[N_players].LastPacketTime = timer_query(); N_players++; Netgame.numplayers = N_players; @@ -2005,12 +2002,6 @@ void net_ipx_process_packet(ubyte *data, int length ) if ((Network_status == NETSTAT_ENDLEVEL) || (Network_status == NETSTAT_PLAYING)) net_ipx_read_endlevel_packet(data); break; - case PID_PING_SEND: - net_ipx_ping (PID_PING_RETURN,data[1]); - break; - case PID_PING_RETURN: - net_ipx_handle_ping_return(data[1]); // data[1] is player who told us of their ping time - break; default: Int3(); // Invalid network packet type, see ROB } @@ -2060,7 +2051,7 @@ net_ipx_read_endlevel_packet( ubyte *data ) if ((Players[playernum].connected == CONNECT_PLAYING) && (end->seconds_left < Countdown_seconds_left)) Countdown_seconds_left = end->seconds_left; - Netgame.players[playernum].LastPacketTime = timer_get_fixed_seconds(); + Netgame.players[playernum].LastPacketTime = timer_query(); } void @@ -2203,7 +2194,7 @@ net_ipx_read_object_packet( ubyte *data ) */ int net_ipx_sync_poll( newmenu *menu, d_event *event, void *userdata ) { - static fix t1 = 0; + static fix64 t1 = 0; int rval = 0; menu = menu; @@ -2217,13 +2208,13 @@ int net_ipx_sync_poll( newmenu *menu, d_event *event, void *userdata ) if (Network_status != NETSTAT_WAITING) // Status changed to playing, exit the menu rval = -2; - if (Network_status != NETSTAT_MENU && !Network_rejoined && (timer_get_fixed_seconds() > t1+F1_0*2)) + if (Network_status != NETSTAT_MENU && !Network_rejoined && (timer_query() > t1+F1_0*2)) { int i; // Poll time expired, re-send request - t1 = timer_get_fixed_seconds(); + t1 = timer_query(); i = net_ipx_send_request(); if (i < 0) @@ -2589,7 +2580,7 @@ net_ipx_find_game(void) { // Find out whether or not there is space left on this socket - fix t1; + fix64 t1; Network_status = NETSTAT_BROWSING; @@ -2598,10 +2589,13 @@ net_ipx_find_game(void) show_boxed_message(TXT_WAIT, 0); net_ipx_send_game_list_request(); - t1 = timer_get_fixed_seconds() + F1_0*2; + t1 = timer_query() + F1_0*2; - while (timer_get_fixed_seconds() < t1) // Wait 3 seconds for replies + while (timer_query() < t1) // Wait 3 seconds for replies + { + timer_update(); net_ipx_listen(); + } if (num_active_ipx_games < IPX_MAX_NETGAMES) return 0; @@ -2763,7 +2757,7 @@ net_ipx_send_sync(void) } //added/changed on 9/13/98 by adb to remove TICKER - d_srand( timer_get_fixed_seconds() ); + d_srand( (fix)timer_query() ); //end change - adb for (i=0; i t1+F1_0*3) { - t1 = timer_get_fixed_seconds(); + if (timer_query() > t1+F1_0*3) { + t1 = timer_query(); net_ipx_send_game_list_request(); } @@ -3320,14 +3314,6 @@ int net_ipx_request_poll( newmenu *menu, d_event *event, void *userdata ) menu = menu; userdata = userdata; - // Send our endlevel packet at regular intervals - -// if (timer_get_fixed_seconds() > t1+ENDLEVEL_SEND_INTERVAL) -// { -// net_ipx_send_endlevel_packet(); -// t1 = timer_get_fixed_seconds(); -// } - net_ipx_listen(); for (i = 0; i < N_players; i++) @@ -3637,12 +3623,10 @@ void net_ipx_do_frame(int force, int listen) if (!(Game_mode&GM_NETWORK)) return; - net_ipx_ping_all(timer_get_fixed_seconds()); - if ((Network_status != NETSTAT_PLAYING) || (Endlevel_sequence)) // Don't send postion during escape sequence... goto listen; - if (WaitForRefuseAnswer && timer_get_fixed_seconds()>(RefuseTimeLimit+(F1_0*12))) + if (WaitForRefuseAnswer && timer_query()>(RefuseTimeLimit+(F1_0*12))) WaitForRefuseAnswer=0; last_send_time += FrameTime; @@ -3700,18 +3684,17 @@ void net_ipx_do_frame(int force, int listen) if ((last_timeout_check > F1_0) && !(Control_center_destroyed)) { - fix approx_time = timer_get_fixed_seconds(); // Check for player timeouts for (i = 0; i < N_players; i++) { if ((i != Player_num) && (Players[i].connected == CONNECT_PLAYING)) { - if ((Netgame.players[i].LastPacketTime == 0) || (Netgame.players[i].LastPacketTime > approx_time)) + if ((Netgame.players[i].LastPacketTime == 0) || (Netgame.players[i].LastPacketTime > timer_query())) { - Netgame.players[i].LastPacketTime = approx_time; + Netgame.players[i].LastPacketTime = timer_query(); continue; } - if ((approx_time - Netgame.players[i].LastPacketTime) > IPX_TIMEOUT) + if ((timer_query() - Netgame.players[i].LastPacketTime) > IPX_TIMEOUT) net_ipx_timeout_player(i); } @@ -3793,7 +3776,7 @@ void net_ipx_read_pdata_packet(IPX_frame_info *pd) //------------- Keep track of missed packets ----------------- Players[TheirPlayernum].n_packets_got++; - Netgame.players[TheirPlayernum].LastPacketTime = timer_get_fixed_seconds(); + Netgame.players[TheirPlayernum].LastPacketTime = timer_query(); if ( pd->numpackets != Players[TheirPlayernum].n_packets_got ) { Players[TheirPlayernum].n_packets_got = pd->numpackets; } @@ -3900,52 +3883,6 @@ int net_ipx_more_options_handler( newmenu *menu, d_event *event, void *userdata return 0; } -void net_ipx_ping (ubyte flag,int pnum) -{ - ubyte mybuf[2]; - - mybuf[0]=flag; - mybuf[1]=Player_num; - *(u_int32_t*)(multibuf+2)=INTEL_INT(GameTime); - ipxdrv_send_packet_data( (ubyte *)mybuf, 7, Netgame.players[pnum].protocol.ipx.server, Netgame.players[pnum].protocol.ipx.node,Players[pnum].net_address ); -} - -static fix PingLaunchTime[MAX_PLAYERS],PingReturnTime[MAX_PLAYERS]; - -void net_ipx_handle_ping_return (ubyte pnum) -{ - if (PingLaunchTime[pnum]==0 || pnum>=N_players) - { - return; - } - - PingReturnTime[pnum]=GameTime; - Netgame.players[pnum].ping=f2i(fixmul(PingReturnTime[pnum]-PingLaunchTime[pnum],i2f(1000))); - PingLaunchTime[pnum]=0; -} - -// ping all connected players (except yourself) in 3sec interval and update ping_table -void net_ipx_ping_all(fix time) -{ - int i; - static fix PingTime=0; - - Netgame.players[Player_num].ping = -1; // Set mine to fancy -1 because I am super fast! Weeee - - if (PingTime+(F1_0*3)