Improve TAS mod
This commit is contained in:
parent
57df4750be
commit
0231cd25c5
1 changed files with 362 additions and 11 deletions
373
mods/tas.diff
373
mods/tas.diff
|
@ -3,13 +3,14 @@ mainly adds one feature: instead of completely restarting a map, the restart key
|
||||||
rather rewinds time a little back. This allows to retry any part of a map as
|
rather rewinds time a little back. This allows to retry any part of a map as
|
||||||
many times as one desires. Loading a replay for viewing also loads the inputs
|
many times as one desires. Loading a replay for viewing also loads the inputs
|
||||||
from the replay so that it's possible to reuse a start portion of another run.
|
from the replay so that it's possible to reuse a start portion of another run.
|
||||||
It helps to slow down time in the settings and drive in slow motion.
|
Additionally there is more information shown in HUD and the possibility to set
|
||||||
|
slow motion levels in main menu.
|
||||||
|
|
||||||
diff --git a/assets.h b/assets.h
|
diff --git a/assets.h b/assets.h
|
||||||
index 4629aaa..c9449f5 100644
|
index 06b853c..a8edf18 100644
|
||||||
--- a/assets.h
|
--- a/assets.h
|
||||||
+++ b/assets.h
|
+++ b/assets.h
|
||||||
@@ -36,7 +36,7 @@
|
@@ -36,23 +36,24 @@
|
||||||
static const char *LCR_texts[] =
|
static const char *LCR_texts[] =
|
||||||
{
|
{
|
||||||
#define LCR_TEXTS_VERSION 0
|
#define LCR_TEXTS_VERSION 0
|
||||||
|
@ -18,11 +19,32 @@ index 4629aaa..c9449f5 100644
|
||||||
#define LCR_TEXTS_TABS 1
|
#define LCR_TEXTS_TABS 1
|
||||||
"main menu",
|
"main menu",
|
||||||
"play map",
|
"play map",
|
||||||
|
- "view repl",
|
||||||
|
+ "load repl",
|
||||||
|
"race repl",
|
||||||
|
#define LCR_TEXTS_MAIN_MENU 5
|
||||||
|
"camera",
|
||||||
|
"music",
|
||||||
|
"sound",
|
||||||
|
"save repl",
|
||||||
|
+ "slowmo",
|
||||||
|
"exit",
|
||||||
|
-#define LCR_TEXTS_LOADING 10
|
||||||
|
+#define LCR_TEXTS_LOADING 11
|
||||||
|
"loading",
|
||||||
|
-#define LCR_TEXTS_SAVED 11
|
||||||
|
+#define LCR_TEXTS_SAVED 12
|
||||||
|
"saved",
|
||||||
|
-#define LCR_TEXTS_FAIL 12
|
||||||
|
+#define LCR_TEXTS_FAIL 13
|
||||||
|
"failed"
|
||||||
|
};
|
||||||
|
|
||||||
diff --git a/game.h b/game.h
|
diff --git a/game.h b/game.h
|
||||||
index b1db32c..1743707 100644
|
index 1ad5131..f407ef4 100644
|
||||||
--- a/game.h
|
--- a/game.h
|
||||||
+++ b/game.h
|
+++ b/game.h
|
||||||
@@ -344,6 +344,9 @@ struct
|
@@ -344,9 +344,16 @@ struct
|
||||||
uint32_t runTime; ///< Current time of the run, in ticks.
|
uint32_t runTime; ///< Current time of the run, in ticks.
|
||||||
uint8_t mapBeaten;
|
uint8_t mapBeaten;
|
||||||
|
|
||||||
|
@ -32,7 +54,37 @@ index b1db32c..1743707 100644
|
||||||
char popupStr[LCR_POPUP_STR_SIZE];
|
char popupStr[LCR_POPUP_STR_SIZE];
|
||||||
uint8_t popupCountdown;
|
uint8_t popupCountdown;
|
||||||
|
|
||||||
@@ -504,8 +507,36 @@ void LCR_gameResetRun(uint8_t replay, uint8_t ghost)
|
+ uint16_t racingTickRT;
|
||||||
|
+
|
||||||
|
+ int carSpeeds[2]; ///< Current and previous tick speed.
|
||||||
|
+
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t selectedTab;
|
||||||
|
@@ -441,8 +448,10 @@ void LCR_gamePopupMessage(const char *str)
|
||||||
|
|
||||||
|
void LCR_gamePopupNumber(uint8_t num)
|
||||||
|
{
|
||||||
|
- LCR_game.popupStr[0] = '0' + num;
|
||||||
|
- LCR_game.popupStr[1] = 0;
|
||||||
|
+ LCR_game.popupStr[3] = 0;
|
||||||
|
+ LCR_game.popupStr[2] = '0' + num % 10;
|
||||||
|
+ LCR_game.popupStr[1] = num > 9 ? '0' + (num / 10) % 10 : ' ';
|
||||||
|
+ LCR_game.popupStr[0] = num > 99 ? '0' + num / 100 : ' ';
|
||||||
|
LCR_gamePopupMessage(LCR_game.popupStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -489,6 +498,9 @@ void LCR_gameResetRun(uint8_t replay, uint8_t ghost)
|
||||||
|
LCR_LOG0("resetting run");
|
||||||
|
LCR_mapReset();
|
||||||
|
|
||||||
|
+ LCR_game.carSpeeds[0] = 0;
|
||||||
|
+ LCR_game.carSpeeds[1] = 0;
|
||||||
|
+
|
||||||
|
LCR_racingRestart(replay);
|
||||||
|
LCR_rendererUnmarkCPs();
|
||||||
|
LCR_racingGetCarTransform(carTransform,carTransform + 3,0);
|
||||||
|
@@ -504,8 +516,36 @@ void LCR_gameResetRun(uint8_t replay, uint8_t ghost)
|
||||||
LCR_game.ghost.active = ghost;
|
LCR_game.ghost.active = ghost;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -63,14 +115,14 @@ index b1db32c..1743707 100644
|
||||||
+ LCR_rendererCameraReset();
|
+ LCR_rendererCameraReset();
|
||||||
+ LCR_rendererLoadMapChunks();
|
+ LCR_rendererLoadMapChunks();
|
||||||
+ LCR_game.nextRenderFrameTime = LCR_game.time + 1000 / LCR_SETTING_FPS;
|
+ LCR_game.nextRenderFrameTime = LCR_game.time + 1000 / LCR_SETTING_FPS;
|
||||||
+ LCR_game.nextRacingTickTime = LCR_game.time + LCR_RACING_TICK_MS_RT;
|
+ LCR_game.nextRacingTickTime = LCR_game.time + LCR_game.racingTickRT;
|
||||||
+ }
|
+ }
|
||||||
+ else
|
+ else
|
||||||
+ LCR_gameSetState(LCR_GAME_STATE_RUN_STARTING);
|
+ LCR_gameSetState(LCR_GAME_STATE_RUN_STARTING);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LCR_gameGetNthGhostSample(unsigned int n,
|
void LCR_gameGetNthGhostSample(unsigned int n,
|
||||||
@@ -867,6 +898,7 @@ uint8_t LCR_gameLoadMap(unsigned int mapIndex)
|
@@ -872,6 +912,7 @@ uint8_t LCR_gameLoadMap(unsigned int mapIndex)
|
||||||
|
|
||||||
result = LCR_mapLoadFromStr(LCR_gameGetNextDataStrChar,name);
|
result = LCR_mapLoadFromStr(LCR_gameGetNextDataStrChar,name);
|
||||||
LCR_game.mapBeaten = LCR_mapIsBeaten(LCR_currentMap.name);
|
LCR_game.mapBeaten = LCR_mapIsBeaten(LCR_currentMap.name);
|
||||||
|
@ -78,7 +130,212 @@ index b1db32c..1743707 100644
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1708,6 +1740,23 @@ void LCR_gameHandleInput(void)
|
@@ -967,14 +1008,14 @@ void LCR_gameEraseMenuItemNames(void)
|
||||||
|
|
||||||
|
void LCR_gameLoadMainMenuItems(void)
|
||||||
|
{
|
||||||
|
- for (int j = 0; j < 5; ++j)
|
||||||
|
+ for (int j = 0; j < 6; ++j)
|
||||||
|
for (int i = 0; i < LCR_MENU_STRING_SIZE - 1; ++i)
|
||||||
|
{
|
||||||
|
LCR_game.menu.itemNames[j][i] = LCR_texts[LCR_TEXTS_MAIN_MENU + j][i];
|
||||||
|
LCR_game.menu.itemNames[j][i + 1] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- LCR_game.menu.itemCount = 5;
|
||||||
|
+ LCR_game.menu.itemCount = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LCR_GAME_DATA_FILE_BUFFER_SIZE 32
|
||||||
|
@@ -1094,6 +1135,8 @@ void LCR_gameInit(int argc, const char **argv)
|
||||||
|
|
||||||
|
LCR_game.dataFile.state = 0;
|
||||||
|
|
||||||
|
+ LCR_game.racingTickRT = LCR_RACING_TICK_MS_RT;
|
||||||
|
+
|
||||||
|
for (int i = 0; i < LCR_MENU_MAX_ITEMS; ++i)
|
||||||
|
LCR_game.menu.itemNamePtrs[i] = LCR_game.menu.itemNames[i];
|
||||||
|
|
||||||
|
@@ -1231,22 +1274,30 @@ void LCR_gameEnd(void)
|
||||||
|
|
||||||
|
void LCR_gameTimeToStr(uint32_t timeMS, char *str)
|
||||||
|
{
|
||||||
|
- str[9] = 0;
|
||||||
|
- str[8] = '0' + timeMS % 10; // milliseconds
|
||||||
|
+ uint32_t ticks = timeMS / LCR_RACING_TICK_MS;
|
||||||
|
+
|
||||||
|
+ str[12] = 0;
|
||||||
|
+ str[11] = '0' + timeMS % 10; // milliseconds
|
||||||
|
timeMS /= 10;
|
||||||
|
- str[7] = '0' + timeMS % 10;
|
||||||
|
+ str[10] = '0' + timeMS % 10;
|
||||||
|
timeMS /= 10;
|
||||||
|
- str[6] = '0' + timeMS % 10;
|
||||||
|
+ str[9] = '0' + timeMS % 10;
|
||||||
|
timeMS /= 10;
|
||||||
|
- str[5] = '\'';
|
||||||
|
- str[4] = '0' + timeMS % 10; // seconds
|
||||||
|
+ str[8] = '0' + timeMS % 10; // seconds
|
||||||
|
timeMS /= 10;
|
||||||
|
- str[3] = '0' + timeMS % 6;
|
||||||
|
- str[2] = '\'';
|
||||||
|
- timeMS /= 6;
|
||||||
|
- str[1] = '0' + timeMS % 10; // minutes
|
||||||
|
+ str[7] = '0' + timeMS % 10;
|
||||||
|
timeMS /= 10;
|
||||||
|
- str[0] = '0' + timeMS % 10;
|
||||||
|
+ str[6] = '0' + timeMS % 10;
|
||||||
|
+ str[5] = '\'';
|
||||||
|
+ str[4] = '0' + ticks % 10;
|
||||||
|
+ ticks /= 10;
|
||||||
|
+ str[3] = '0' + ticks % 10;
|
||||||
|
+ ticks /= 10;
|
||||||
|
+ str[2] = '0' + ticks % 10;
|
||||||
|
+ ticks /= 10;
|
||||||
|
+ str[1] = '0' + ticks % 10;
|
||||||
|
+ ticks /= 10;
|
||||||
|
+ str[0] = '0' + ticks % 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LCR_gameDrawPopupMessage(void)
|
||||||
|
@@ -1280,7 +1331,7 @@ void LCR_gameDraw3DView(void)
|
||||||
|
#endif
|
||||||
|
? LCR_GAME_UNIT -
|
||||||
|
(((int) (LCR_game.nextRacingTickTime - LCR_game.time)) * LCR_GAME_UNIT)
|
||||||
|
- / LCR_RACING_TICK_MS_RT // 32: magic constant
|
||||||
|
+ / LCR_game.racingTickRT // 32: magic constant
|
||||||
|
: _LCR_min(LCR_GAME_UNIT,32 * ((int) (LCR_game.time -
|
||||||
|
LCR_game.stateStartTime)));
|
||||||
|
|
||||||
|
@@ -1331,25 +1382,67 @@ void LCR_gameDraw3DView(void)
|
||||||
|
|
||||||
|
#if LCR_SETTING_DISPLAY_HUD
|
||||||
|
// GUI/HUD:
|
||||||
|
+
|
||||||
|
+ char str[16];
|
||||||
|
|
||||||
|
- char str[10];
|
||||||
|
- int val = LCR_carSpeedKMH();
|
||||||
|
+ for (int i = 0; i < 3; ++i)
|
||||||
|
+ {
|
||||||
|
+ int val = i == 2 ? (100 * LCR_racing.driftFriction) /
|
||||||
|
+ LCR_CAR_DRIFT_THRESHOLD_1 : LCR_game.carSpeeds[0];
|
||||||
|
|
||||||
|
- if (val < 5) // don't show tiny oscillations when still
|
||||||
|
- val = 0;
|
||||||
|
+ if (i == 1)
|
||||||
|
+ val -= LCR_game.carSpeeds[1];
|
||||||
|
+ else if (i == 0 && val < 5) // don't show tiny speed oscillations when still
|
||||||
|
+ val = 0;
|
||||||
|
|
||||||
|
- str[0] = val >= 100 ? '0' + (val / 100) % 10 : ' ';
|
||||||
|
- str[1] = val >= 10 ? '0' + (val / 10) % 10 : ' ';
|
||||||
|
- str[2] = '0' + val % 10;
|
||||||
|
- str[3] = 0;
|
||||||
|
+ str[0] = ' ';
|
||||||
|
|
||||||
|
- #define _FONT_SIZE (1 + (LCR_EFFECTIVE_RESOLUTION_Y > 96))
|
||||||
|
+ if (val < 0)
|
||||||
|
+ {
|
||||||
|
+ str[0] = '-';
|
||||||
|
+ val *= -1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- LCR_rendererDrawText(str,LCR_EFFECTIVE_RESOLUTION_X - // speed (bot., right)
|
||||||
|
- LCR_rendererComputeTextWidth(str,_FONT_SIZE) - LCR_GUI_GAP,
|
||||||
|
- LCR_EFFECTIVE_RESOLUTION_Y - LCR_rendererComputeTextHeight(_FONT_SIZE) -
|
||||||
|
- LCR_GUI_GAP,0,_FONT_SIZE);
|
||||||
|
+ str[1] = val >= 100 ? '0' + (val / 100) % 10 : ' ';
|
||||||
|
+ str[2] = val >= 10 ? '0' + (val / 10) % 10 : ' ';
|
||||||
|
+ str[3] = '0' + val % 10;
|
||||||
|
+ str[4] = 0;
|
||||||
|
+
|
||||||
|
+ #define _FONT_SIZE (1 + (LCR_EFFECTIVE_RESOLUTION_Y > 96))
|
||||||
|
+
|
||||||
|
+ LCR_rendererDrawText(str,LCR_EFFECTIVE_RESOLUTION_X -
|
||||||
|
+ LCR_rendererComputeTextWidth(str,_FONT_SIZE) - LCR_GUI_GAP,
|
||||||
|
+ LCR_EFFECTIVE_RESOLUTION_Y - (i + 1) *
|
||||||
|
+ (LCR_rendererComputeTextHeight(_FONT_SIZE) + LCR_GUI_GAP),
|
||||||
|
+ (i == 2 && LCR_racing.carDrifting) ? 0xf800 : 0,_FONT_SIZE);
|
||||||
|
|
||||||
|
+ if (i == 0)
|
||||||
|
+ {
|
||||||
|
+ str[0] = (LCR_racing.currentInputs & LCR_RACING_INPUT_LEFT) ? 'L' : '.';
|
||||||
|
+ str[1] = (LCR_racing.currentInputs & LCR_RACING_INPUT_BACK) ? 'D' : '.';
|
||||||
|
+ str[2] = (LCR_racing.currentInputs & LCR_RACING_INPUT_FORW) ? 'U' : '.';
|
||||||
|
+ str[3] = (LCR_racing.currentInputs & LCR_RACING_INPUT_RIGHT) ? 'R' : '.';
|
||||||
|
+ str[4] = 0;
|
||||||
|
+ }
|
||||||
|
+ else if (i == 1)
|
||||||
|
+ {
|
||||||
|
+ str[0] = '0' + LCR_racingCurrentGroundMaterial();
|
||||||
|
+ str[1] = (LCR_racing.wheelCollisions & 0x02) ? 'f' : '.';
|
||||||
|
+ str[2] = (LCR_racing.wheelCollisions & 0x01) ? 'f' : '.';
|
||||||
|
+ str[3] = (LCR_racing.wheelCollisions & 0x08) ? 'r' : '.';
|
||||||
|
+ str[4] = (LCR_racing.wheelCollisions & 0x04) ? 'r' : '.';
|
||||||
|
+ str[5] = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (i < 2)
|
||||||
|
+ LCR_rendererDrawText(str,LCR_EFFECTIVE_RESOLUTION_X -
|
||||||
|
+ LCR_rendererComputeTextWidth(str,_FONT_SIZE) - LCR_GUI_GAP,
|
||||||
|
+ LCR_EFFECTIVE_RESOLUTION_Y - (4 + i) *
|
||||||
|
+ (LCR_rendererComputeTextHeight(_FONT_SIZE) + LCR_GUI_GAP),0,_FONT_SIZE);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
str[0] = (LCR_racing.currentInputs & LCR_RACING_INPUT_LEFT) ? 'L' : '.';
|
||||||
|
str[1] = (LCR_racing.currentInputs & LCR_RACING_INPUT_BACK) ? 'D' : '.';
|
||||||
|
str[2] = (LCR_racing.currentInputs & LCR_RACING_INPUT_FORW) ? 'U' : '.';
|
||||||
|
@@ -1358,8 +1451,9 @@ void LCR_gameDraw3DView(void)
|
||||||
|
|
||||||
|
LCR_rendererDrawText(str,LCR_EFFECTIVE_RESOLUTION_X -
|
||||||
|
LCR_rendererComputeTextWidth(str,_FONT_SIZE) - LCR_GUI_GAP,
|
||||||
|
- LCR_EFFECTIVE_RESOLUTION_Y - 2 *
|
||||||
|
+ LCR_EFFECTIVE_RESOLUTION_Y - 3 *
|
||||||
|
(LCR_rendererComputeTextHeight(_FONT_SIZE) + LCR_GUI_GAP),0,_FONT_SIZE);
|
||||||
|
+*/
|
||||||
|
|
||||||
|
LCR_gameTimeToStr(LCR_game.runTime * LCR_RACING_TICK_MS,str);
|
||||||
|
|
||||||
|
@@ -1384,7 +1478,7 @@ void LCR_gameDraw3DView(void)
|
||||||
|
|
||||||
|
void LCR_gameSaveReplay(void)
|
||||||
|
{
|
||||||
|
- char str[10];
|
||||||
|
+ char str[16];
|
||||||
|
|
||||||
|
LCR_LOG0("saving replay");
|
||||||
|
|
||||||
|
@@ -1581,7 +1675,7 @@ void LCR_gameHandleInput(void)
|
||||||
|
|
||||||
|
if (LCR_game.menu.selectedTab == 0)
|
||||||
|
{
|
||||||
|
- if (LCR_game.menu.selectedItem < 4)
|
||||||
|
+ if (LCR_game.menu.selectedItem < 5)
|
||||||
|
{
|
||||||
|
LCR_game.menu.selectedItem++;
|
||||||
|
LCR_audioPlaySound(LCR_SOUND_CLICK);
|
||||||
|
@@ -1647,6 +1741,17 @@ void LCR_gameHandleInput(void)
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
+ LCR_game.racingTickRT += LCR_RACING_TICK_MS / 2;
|
||||||
|
+
|
||||||
|
+ if (LCR_game.racingTickRT > LCR_RACING_TICK_MS * 10)
|
||||||
|
+ LCR_game.racingTickRT = LCR_RACING_TICK_MS;
|
||||||
|
+
|
||||||
|
+ LCR_gamePopupNumber(
|
||||||
|
+ (100 * LCR_RACING_TICK_MS ) / LCR_game.racingTickRT);
|
||||||
|
+
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 5:
|
||||||
|
LCR_gameSetState(LCR_GAME_STATE_END);
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -1713,6 +1818,23 @@ void LCR_gameHandleInput(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +359,7 @@ index b1db32c..1743707 100644
|
||||||
uint8_t LCR_gameStep(uint32_t time)
|
uint8_t LCR_gameStep(uint32_t time)
|
||||||
{
|
{
|
||||||
LCR_LOG2("game step (start)");
|
LCR_LOG2("game step (start)");
|
||||||
@@ -1742,9 +1791,21 @@ uint8_t LCR_gameStep(uint32_t time)
|
@@ -1747,9 +1869,21 @@ uint8_t LCR_gameStep(uint32_t time)
|
||||||
LCR_gameSetState(LCR_GAME_STATE_LOADED);
|
LCR_gameSetState(LCR_GAME_STATE_LOADED);
|
||||||
}
|
}
|
||||||
else if (LCR_game.state == LCR_GAME_STATE_LOADED)
|
else if (LCR_game.state == LCR_GAME_STATE_LOADED)
|
||||||
|
@ -127,7 +384,7 @@ index b1db32c..1743707 100644
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LCR_gameHandleInput();
|
LCR_gameHandleInput();
|
||||||
@@ -1765,6 +1826,9 @@ uint8_t LCR_gameStep(uint32_t time)
|
@@ -1770,12 +1904,19 @@ uint8_t LCR_gameStep(uint32_t time)
|
||||||
(LCR_game.keyStates[LCR_KEY_DOWN] ? LCR_RACING_INPUT_BACK : 0) |
|
(LCR_game.keyStates[LCR_KEY_DOWN] ? LCR_RACING_INPUT_BACK : 0) |
|
||||||
(LCR_game.keyStates[LCR_KEY_LEFT] ? LCR_RACING_INPUT_LEFT : 0));
|
(LCR_game.keyStates[LCR_KEY_LEFT] ? LCR_RACING_INPUT_LEFT : 0));
|
||||||
|
|
||||||
|
@ -137,6 +394,100 @@ index b1db32c..1743707 100644
|
||||||
#ifdef LCR_FPS_GET_MS
|
#ifdef LCR_FPS_GET_MS
|
||||||
frameTime = LCR_FPS_GET_MS;
|
frameTime = LCR_FPS_GET_MS;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
+ LCR_game.carSpeeds[1] = LCR_game.carSpeeds[0];
|
||||||
|
+
|
||||||
|
uint32_t events = paused ? 0 : LCR_racingStep(input);
|
||||||
|
|
||||||
|
+ LCR_game.carSpeeds[0] = LCR_carSpeedKMH();
|
||||||
|
+
|
||||||
|
#if LCR_SETTING_PARTICLES
|
||||||
|
LCR_rendererSetParticles(0);
|
||||||
|
|
||||||
|
@@ -1801,7 +1942,7 @@ uint8_t LCR_gameStep(uint32_t time)
|
||||||
|
if (events & LCR_RACING_EVENT_CP_TAKEN)
|
||||||
|
{
|
||||||
|
int carBlock[3];
|
||||||
|
- char str[10];
|
||||||
|
+ char str[16];
|
||||||
|
|
||||||
|
LCR_LOG1("CP taken");
|
||||||
|
LCR_racingGetCarBlockCoords(carBlock);
|
||||||
|
@@ -1890,7 +2031,7 @@ uint8_t LCR_gameStep(uint32_t time)
|
||||||
|
LCR_game.state == LCR_GAME_STATE_RUN_STARTING)
|
||||||
|
LCR_game.runTime = LCR_racing.tick;
|
||||||
|
|
||||||
|
- LCR_game.nextRacingTickTime += LCR_RACING_TICK_MS_RT;
|
||||||
|
+ LCR_game.nextRacingTickTime += LCR_game.racingTickRT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle rendering:
|
||||||
|
diff --git a/racing.h b/racing.h
|
||||||
|
index 0824354..cee1c23 100644
|
||||||
|
--- a/racing.h
|
||||||
|
+++ b/racing.h
|
||||||
|
@@ -174,6 +174,8 @@ struct
|
||||||
|
|
||||||
|
uint16_t crashState;
|
||||||
|
|
||||||
|
+ TPE_Unit driftFriction;
|
||||||
|
+
|
||||||
|
#if LCR_SETTING_REPLAY_MAX_SIZE != 0
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
@@ -1022,6 +1024,7 @@ void LCR_racingRestart(uint8_t replay)
|
||||||
|
|
||||||
|
LCR_racing.tick = 0;
|
||||||
|
LCR_racing.fanForce = 0;
|
||||||
|
+ LCR_racing.driftFriction = 0;
|
||||||
|
|
||||||
|
#if LCR_SETTING_REPLAY_MAX_SIZE > 0
|
||||||
|
LCR_racing.replay.on = replay;
|
||||||
|
@@ -1258,7 +1261,7 @@ uint32_t LCR_racingStep(unsigned int input)
|
||||||
|
TPE_Vec3 carForw, carRight, carUp, carVel;
|
||||||
|
uint8_t onAccel = 0; // standing on accelerator?
|
||||||
|
int groundBlockIndex = -1;
|
||||||
|
- TPE_Unit driftFriction = 0; // average wheel friction (absolute value)
|
||||||
|
+ LCR_racing.driftFriction = 0; // average wheel friction (absolute value)
|
||||||
|
|
||||||
|
LCR_racing.groundMaterial = LCR_BLOCK_MATERIAL_CONCRETE;
|
||||||
|
|
||||||
|
@@ -1484,7 +1487,7 @@ uint32_t LCR_racingStep(unsigned int input)
|
||||||
|
(LCR_CAR_STEER_FRICTION * LCR_CAR_DRIFT_FACTOR) / 8 :
|
||||||
|
LCR_CAR_STEER_FRICTION,LCR_racing.groundMaterial)) / TPE_F);
|
||||||
|
|
||||||
|
- driftFriction += TPE_vec3Len(fric);
|
||||||
|
+ LCR_racing.driftFriction += TPE_vec3Len(fric);
|
||||||
|
|
||||||
|
jv = TPE_vec3Minus(jv,fric); // subtract the friction
|
||||||
|
|
||||||
|
@@ -1493,7 +1496,7 @@ uint32_t LCR_racingStep(unsigned int input)
|
||||||
|
LCR_racing.carBody.joints[i].velocity[2] = jv.z;
|
||||||
|
}
|
||||||
|
|
||||||
|
- driftFriction /= 4; // divide by 4 wheels
|
||||||
|
+ LCR_racing.driftFriction /= 4; // divide by 4 wheels
|
||||||
|
|
||||||
|
if (steering &&
|
||||||
|
(input & (LCR_RACING_INPUT_FORW | LCR_RACING_INPUT_BACK)) &&
|
||||||
|
@@ -1510,7 +1513,7 @@ uint32_t LCR_racingStep(unsigned int input)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!LCR_racing.carDrifting) &&
|
||||||
|
- driftFriction >
|
||||||
|
+ LCR_racing.driftFriction >
|
||||||
|
(LCR_CAR_DRIFT_THRESHOLD_1 >> (( // back key initiates drift easily
|
||||||
|
((input & (LCR_RACING_INPUT_FORW | LCR_RACING_INPUT_BACK))
|
||||||
|
== (LCR_RACING_INPUT_FORW | LCR_RACING_INPUT_BACK))) << 2)))
|
||||||
|
@@ -1519,7 +1522,7 @@ uint32_t LCR_racingStep(unsigned int input)
|
||||||
|
LCR_racing.carDrifting = 1;
|
||||||
|
}
|
||||||
|
else if (LCR_racing.carDrifting &&
|
||||||
|
- (driftFriction < LCR_CAR_DRIFT_THRESHOLD_0 ||
|
||||||
|
+ (LCR_racing.driftFriction < LCR_CAR_DRIFT_THRESHOLD_0 ||
|
||||||
|
LCR_racingGetCarSpeedUnsigned() < 5))
|
||||||
|
{
|
||||||
|
LCR_LOG1("drift end");
|
||||||
diff --git a/settings.h b/settings.h
|
diff --git a/settings.h b/settings.h
|
||||||
index 332df45..b9b3aba 100644
|
index 332df45..b9b3aba 100644
|
||||||
--- a/settings.h
|
--- a/settings.h
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue