[Add] 2x speed modifier by manipulating dt modifier.
[Fix] Fixed double free on keybindings opening.
This commit is contained in:
		
							parent
							
								
									ee57228de5
								
							
						
					
					
						commit
						355ccfd65e
					
				
							
								
								
									
										14
									
								
								src/input.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/input.c
									
									
									
									
									
								
							@ -48,7 +48,7 @@ const char* keybindNames[] = {
 | 
				
			|||||||
  /* Communication. */
 | 
					  /* Communication. */
 | 
				
			||||||
  "hail",
 | 
					  "hail",
 | 
				
			||||||
  /* Misc. */
 | 
					  /* Misc. */
 | 
				
			||||||
  "mapzoomin", "mapzoomout", "screenshot", "pause", "menu", "info",
 | 
					  "mapzoomin", "mapzoomout", "screenshot", "pause", "speed", "menu", "info",
 | 
				
			||||||
  "end" /* Must terminate at the end. */
 | 
					  "end" /* Must terminate at the end. */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -79,17 +79,19 @@ const char* keybindDescription[] = {
 | 
				
			|||||||
  "Clears your escorts commands.",
 | 
					  "Clears your escorts commands.",
 | 
				
			||||||
  /* Space navigation. */
 | 
					  /* Space navigation. */
 | 
				
			||||||
  "Initializes the autonavigation system.",
 | 
					  "Initializes the autonavigation system.",
 | 
				
			||||||
  "Cycles through hyperspace targets.",
 | 
					  "Cycles through planet targets.",
 | 
				
			||||||
  "Attempt to land on your targetted planet or targets nearest landable planet. \
 | 
					  "Attempt to land on your targetted planet or targets nearest landable planet. \
 | 
				
			||||||
    Requests for landing if you don't have permission yet.",
 | 
					    Requests for landing if you don't have permission yet.",
 | 
				
			||||||
  "Cycles through hyperspace targets.",
 | 
					  "Cycles through hyperspace targets.",
 | 
				
			||||||
  "Opens the Star Map.",
 | 
					  "Opens the Star Map.",
 | 
				
			||||||
 | 
					  "Attempt to jump to your hyperspace target.",
 | 
				
			||||||
  /* Communication. */
 | 
					  /* Communication. */
 | 
				
			||||||
  "Attempts to initialize communication with your taretted ship.",
 | 
					  "Attempts to initialize communication with your taretted ship.",
 | 
				
			||||||
  /* Misc. */
 | 
					  /* Misc. */
 | 
				
			||||||
  "Zooms in on your radar.",
 | 
					  "Zooms in on your radar.",
 | 
				
			||||||
  "Zooms out on your radar.",
 | 
					  "Zooms out on your radar.",
 | 
				
			||||||
  "Takes a screenshot.",
 | 
					  "Takes a screenshot.",
 | 
				
			||||||
 | 
					  "Toggles 2x speed modifier.",
 | 
				
			||||||
  "Pauses the game.",
 | 
					  "Pauses the game.",
 | 
				
			||||||
  "Opens the small ingame menu.",
 | 
					  "Opens the small ingame menu.",
 | 
				
			||||||
  "Opens the information menu."
 | 
					  "Opens the information menu."
 | 
				
			||||||
@ -145,6 +147,7 @@ void input_setDefault(void) {
 | 
				
			|||||||
  input_setKeybind("mapzoomout",      KEYBIND_KEYBOARD, SDLK_KP_MINUS,    KMOD_NONE,  0);
 | 
					  input_setKeybind("mapzoomout",      KEYBIND_KEYBOARD, SDLK_KP_MINUS,    KMOD_NONE,  0);
 | 
				
			||||||
  input_setKeybind("screenshot",      KEYBIND_KEYBOARD, SDLK_KP_MULTIPLY, KMOD_NONE,  0);
 | 
					  input_setKeybind("screenshot",      KEYBIND_KEYBOARD, SDLK_KP_MULTIPLY, KMOD_NONE,  0);
 | 
				
			||||||
  input_setKeybind("pause",           KEYBIND_KEYBOARD, SDLK_F1,          KMOD_NONE,  0);
 | 
					  input_setKeybind("pause",           KEYBIND_KEYBOARD, SDLK_F1,          KMOD_NONE,  0);
 | 
				
			||||||
 | 
					  input_setKeybind("speed",           KEYBIND_KEYBOARD, SDLK_BACKQUOTE,   KMOD_NONE,  0);
 | 
				
			||||||
  input_setKeybind("menu",            KEYBIND_KEYBOARD, SDLK_ESCAPE,      KMOD_NONE,  0);
 | 
					  input_setKeybind("menu",            KEYBIND_KEYBOARD, SDLK_ESCAPE,      KMOD_NONE,  0);
 | 
				
			||||||
  input_setKeybind("info",            KEYBIND_KEYBOARD, SDLK_i,           KMOD_NONE,  0);
 | 
					  input_setKeybind("info",            KEYBIND_KEYBOARD, SDLK_i,           KMOD_NONE,  0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -447,6 +450,13 @@ static void input_key(int keynum, double value, int kabs) {
 | 
				
			|||||||
      } else pause_game();
 | 
					      } else pause_game();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  /* Toggle speed mode. */
 | 
				
			||||||
 | 
					  else if(KEY("speed")) {
 | 
				
			||||||
 | 
					    if(value == KEY_PRESS) {
 | 
				
			||||||
 | 
					      if(dt_mod == 1.) pause_setSpeed(2.);
 | 
				
			||||||
 | 
					      else pause_setSpeed(1.);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  /* Opens a menu. */
 | 
					  /* Opens a menu. */
 | 
				
			||||||
  else if(KEY("menu")) {
 | 
					  else if(KEY("menu")) {
 | 
				
			||||||
    if(value == KEY_PRESS) menu_small();
 | 
					    if(value == KEY_PRESS) menu_small();
 | 
				
			||||||
 | 
				
			|||||||
@ -452,9 +452,11 @@ static void fps_control(void) {
 | 
				
			|||||||
  unsigned int t;
 | 
					  unsigned int t;
 | 
				
			||||||
  double delay;
 | 
					  double delay;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* dt in ms/1000. */
 | 
					  /* dt in s. */
 | 
				
			||||||
  t = SDL_GetTicks();
 | 
					  t = SDL_GetTicks();
 | 
				
			||||||
  cur_dt = (double)(t-time)/1000.;
 | 
					  cur_dt =  (double)(t - time); /* Get the elapsed ms. */
 | 
				
			||||||
 | 
					  cur_dt *= dt_mod;             /* Apply the modifier. */
 | 
				
			||||||
 | 
					  cur_dt /= 1000.;              /* Convert to seconds. */
 | 
				
			||||||
  time = t;
 | 
					  time = t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(paused) SDL_Delay(10); /* Drop paused FPS to be nice to the CPU. */
 | 
					  if(paused) SDL_Delay(10); /* Drop paused FPS to be nice to the CPU. */
 | 
				
			||||||
@ -476,7 +478,7 @@ static const double fps_min = 1./50.0;
 | 
				
			|||||||
static void update_all(void) {
 | 
					static void update_all(void) {
 | 
				
			||||||
  double tmpdt;
 | 
					  double tmpdt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(cur_dt > 0.25) { /* Slow timers down and rerun calculations */
 | 
					  if(cur_dt > 0.25*dt_mod) { /* Slow timers down and rerun calculations */
 | 
				
			||||||
    pause_delay((unsigned int)cur_dt*1000.);
 | 
					    pause_delay((unsigned int)cur_dt*1000.);
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -578,8 +580,12 @@ static void display_fps(const double dt) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  x = 10.;
 | 
					  x = 10.;
 | 
				
			||||||
  y = (double)(gl_screen.h - 20);
 | 
					  y = (double)(gl_screen.h - 20);
 | 
				
			||||||
  if(show_fps)
 | 
					  if(show_fps) {
 | 
				
			||||||
    gl_print(NULL, x, y, NULL, "%3.2f", fps);
 | 
					    gl_print(NULL, x, y, NULL, "%3.2f", fps);
 | 
				
			||||||
 | 
					    y -= gl_defFont.h + 5.;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if(dt_mod != 1.)
 | 
				
			||||||
 | 
					    gl_print(NULL, x, y, NULL, "%3.1fx", dt_mod);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 | 
				
			|||||||
@ -51,7 +51,7 @@ void opt_menuKeybinds(void) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /* Create the list. */
 | 
					  /* Create the list. */
 | 
				
			||||||
  for(i = 0; strcmp(keybindNames[i], "end"); i++);
 | 
					  for(i = 0; strcmp(keybindNames[i], "end"); i++);
 | 
				
			||||||
  str = malloc(sizeof(char*) * (i-1));
 | 
					  str = malloc(sizeof(char*) * i);
 | 
				
			||||||
  for(j = 0; j < i; j++) {
 | 
					  for(j = 0; j < i; j++) {
 | 
				
			||||||
    str[j] = malloc(sizeof(char) * 64);
 | 
					    str[j] = malloc(sizeof(char) * 64);
 | 
				
			||||||
    key = input_getKeybind(keybindNames[j], &type, &mod, &reverse);
 | 
					    key = input_getKeybind(keybindNames[j], &type, &mod, &reverse);
 | 
				
			||||||
@ -75,7 +75,7 @@ void opt_menuKeybinds(void) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  window_addList(wid, 20, -40, 200, KEYBINDS_HEIGHT-60, "lstKeybinds",
 | 
					  window_addList(wid, 20, -40, 200, KEYBINDS_HEIGHT-60, "lstKeybinds",
 | 
				
			||||||
      str, i-1, 0, menuKeybinds_update);
 | 
					      str, i, 0, menuKeybinds_update);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* Update the list. */
 | 
					  /* Update the list. */
 | 
				
			||||||
  menuKeybinds_update(wid, NULL);
 | 
					  menuKeybinds_update(wid, NULL);
 | 
				
			||||||
 | 
				
			|||||||
@ -13,6 +13,7 @@
 | 
				
			|||||||
#include "pause.h"
 | 
					#include "pause.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int paused = 0;     /* Are we paused. */
 | 
					int paused = 0;     /* Are we paused. */
 | 
				
			||||||
 | 
					double dt_mod = 1.; /**< dt modifier. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* From pilot.c */
 | 
					/* From pilot.c */
 | 
				
			||||||
extern Pilot** pilot_stack;
 | 
					extern Pilot** pilot_stack;
 | 
				
			||||||
@ -46,6 +47,13 @@ void pause_delay(unsigned int delay) {
 | 
				
			|||||||
  pilot_delay(delay);
 | 
					  pilot_delay(delay);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief Adjust the game's dt modifier.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void pause_setSpeed(double mod) {
 | 
				
			||||||
 | 
					  dt_mod = mod;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Pilots pausing/unpausing. */
 | 
					/* Pilots pausing/unpausing. */
 | 
				
			||||||
static void pilot_pause(void) {
 | 
					static void pilot_pause(void) {
 | 
				
			||||||
  int i, j;
 | 
					  int i, j;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,9 @@
 | 
				
			|||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int paused;
 | 
					extern int paused;
 | 
				
			||||||
 | 
					extern double dt_mod;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pause_setSpeed(double mod);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void pause_game(void);
 | 
					void pause_game(void);
 | 
				
			||||||
void unpause_game(void);
 | 
					void unpause_game(void);
 | 
				
			||||||
 | 
				
			|||||||
@ -1551,6 +1551,10 @@ void player_abortAutonav(char* reason) {
 | 
				
			|||||||
    /* Get rid of acceleration. */
 | 
					    /* Get rid of acceleration. */
 | 
				
			||||||
    player_accelOver();
 | 
					    player_accelOver();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Drop out of possible different speed modes. */
 | 
				
			||||||
 | 
					    if(dt_mod != 1.)
 | 
				
			||||||
 | 
					      pause_setSpeed(1.);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Break possible hyperspacing. */
 | 
					    /* Break possible hyperspacing. */
 | 
				
			||||||
    if(pilot_isFlag(player, PILOT_HYP_PREP)) {
 | 
					    if(pilot_isFlag(player, PILOT_HYP_PREP)) {
 | 
				
			||||||
      pilot_hyperspaceAbort(player);
 | 
					      pilot_hyperspaceAbort(player);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user