This commit is contained in:
Miloslav Ciz 2025-06-20 18:25:04 +02:00
parent 09031d209d
commit 5522f03daf
6 changed files with 57 additions and 29 deletions

View file

@ -2,21 +2,12 @@ fuck issue trackers :D
=========== GENERAL ============== =========== GENERAL ==============
- LCR_SETTING_TEXTURE_SUBSAMPLE = 0 should turn off texturing completely
- frontends:
- auto test frontend, with no I/O, that will just internally run a series of
inputs and check if the output is as expected
- X11
- ncurses? yes or no?
- try Pokitto
- Nibble, should hopefully be powerful enough.
- ESPboy?
- linux framebuffer?
- make some kinda repo for world record runs? how will they submit it?
- final tests: - final tests:
- run the test frontend through all the shit (valgrind, different compilers
etc.) KINDA DID
- check every single setting individually DID 1x - check every single setting individually DID 1x
- very long replay DID 1x - very long replay DID 1x
- absence of music file - absence of music file DID
- different resolutions KINDA DID 1x - different resolutions KINDA DID 1x
- different settings (332, POTATO, ...) - different settings (332, POTATO, ...)
- crazy shit with physics KINDA DID - crazy shit with physics KINDA DID
@ -39,6 +30,9 @@ fuck issue trackers :D
=========== BUGS ================= =========== BUGS =================
- camera bugs in TCC build, also the auto test fails on checking rendered
pixels -- this may be TCC not supporting C99 fully? but dig up what's going
on
- camera follow speed depends on FPS, it's slower with low FPS, but this is no - camera follow speed depends on FPS, it's slower with low FPS, but this is no
big deal, it's only noticable with extremely high/low FPS -- fix or not? big deal, it's only noticable with extremely high/low FPS -- fix or not?
- replay loading BUG! somehow map2 replay was saves with hash 05ef0ab1 instead - replay loading BUG! somehow map2 replay was saves with hash 05ef0ab1 instead
@ -48,16 +42,22 @@ fuck issue trackers :D
- mods: - mods:
- bouncy car body with inertia, not affecting physics ofc, just eye candy - bouncy car body with inertia, not affecting physics ofc, just eye candy
- TAS mod? ideas: - advanced replay analyzer, showing e.g.: distance travelled, speed over time,
- step by single frames, the mod will literally keep all inputs in RAM, will crashes, input stats (number of presses, quickest tap, ...)
be able to rewind back (quickly replay the inputs) - TAS mod(s)? ideas:
- Just make it so that restarting takes player only N physics ticks back
(N can be a setting). Then the player can just drive and attempt sections
one by one, possibly in slow motion (using the existing setting).
Implement by literally storing exact inputs in RAM, then upon restart
quickly replaying everything up to current frame minus N.
- kinda bruteforce solver? - kinda bruteforce solver?
- export maps as 3D models in OBJ format (just print to console?) - export maps as 3D models in OBJ format (just print to console?)
- mod allowing to view two replays at once (one normal replay, one ghost), - mod allowing to view two replays at once (one normal replay, one ghost?),
would be cool for run comparison would be cool for run comparisons
- some extra graphic consoomer goodies? like: - some extra graphic consoomer goodies? like:
- leave light trail behind the car (particles?) - leave light trail behind the car (particles?)
- postproc effects? render to a buffer in renderer, then draw it again - postproc effects? render to a buffer in renderer, then draw it again
- something like a motion blur by kinda "frameless" rendering?
- analog controller support, would just tap arrows in frequency according to - analog controller support, would just tap arrows in frequency according to
analog the analog value; create a new frontend function to implement, analog the analog value; create a new frontend function to implement,
something like LCR_getAnalogInput(type) or smt something like LCR_getAnalogInput(type) or smt
@ -68,14 +68,34 @@ fuck issue trackers :D
them swing, maybe even add delay to inputs them swing, maybe even add delay to inputs
- weather mods? like lightning (invert colors quickly), rain, snow, sand, ... - weather mods? like lightning (invert colors quickly), rain, snow, sand, ...
- "AI" driver? - "AI" driver?
- could work like this:
- make a function that estimated "how well we are doing", i.e. how close
we are to finishing, taking into account number of taken CPs, distance
to closest CP, current speed etc.
- approx algorithm: maintain N "currently best drivers", in each iteration
let each of them drive N times randomly, i.e. we get N * N new drivers,
then pick N best of them (by the function) and repeat; if not making
any progress for some time we can recursively get back or something
- 2D renderer? like isometric or top-down or something, could enable the game - 2D renderer? like isometric or top-down or something, could enable the game
literally on very weak devices? top down might be nice, the car could be literally on very weak devices? top down might be nice, the car could be
drawn out of circles, getting bigger closer to camera, camera could rotate drawn out of circles, getting bigger closer to camera, camera could rotate
along with car etc. along with car etc.
- kinda fancy OpenGL renderer? - kinda fancy OpenGL renderer?
- literal network multiplayer? could even be easy bcz no collisions - literal network multiplayer? could even be easy bcz no collisions
- map restarts should be synchronized to make the players start
simultaneously, this can be done by having a global shared timer ticking and
releasing all cars waiting for start every 3 seconds let's say
- "user friendly" map editor? - "user friendly" map editor?
- procedural map generator? - procedural map generator?
- frontends:
- auto test frontend, with no I/O, that will just internally run a series of
inputs and check if the output is as expected
- X11
- ncurses? yes or no?
- try Pokitto
- Nibble, should hopefully be powerful enough.
- ESPboy?
- linux framebuffer?
=========== HANDLED ============== =========== HANDLED ==============
@ -84,6 +104,10 @@ fuck issue trackers :D
settings on PC and see if the maps load or what. IT'S BCS BUILDING THE MAP settings on PC and see if the maps load or what. IT'S BCS BUILDING THE MAP
TEMPORARILY REQUIRES MORE BLOCKS TEMPORARILY REQUIRES MORE BLOCKS
- maybe address the jerky rotations? or not? - maybe address the jerky rotations? or not?
- make some kinda repo for world record runs? how will they submit it?
- LCR_SETTING_TEXTURE_SUBSAMPLE = 0 should turn off texturing completely
NO, 0 is normal texturing, 1 skips one pixel etc., very high value will
actually turn it off
- stop playing engine sound when replay finishes - stop playing engine sound when replay finishes
- add (digital) controller support to SDL and CSFML? NOT NOW, doesn't wanna - add (digital) controller support to SDL and CSFML? NOT NOW, doesn't wanna
detect it or something (or either PC) detect it or something (or either PC)

View file

@ -115,7 +115,7 @@ int main(int argc, char *argv[])
musicFile = fopen("assets/music","rb"); musicFile = fopen("assets/music","rb");
if (!musicFile) if (!musicFile)
fputs("could not open music file",stderr); fputs("could not open music file\n",stderr);
puts("initializing game"); puts("initializing game");
LCR_gameInit(argc,(const char **) argv); LCR_gameInit(argc,(const char **) argv);

View file

@ -176,7 +176,7 @@ int main(int argc, char *argv[])
musicFile = fopen("assets/music","rb"); musicFile = fopen("assets/music","rb");
if (!musicFile) if (!musicFile)
fputs("could not open music file",stderr); fputs("could not open music file\n",stderr);
#endif #endif
puts("initializing game"); puts("initializing game");
@ -204,7 +204,7 @@ int main(int argc, char *argv[])
#endif #endif
if (SDL_OpenAudio(&audioSpec,NULL) < 0) if (SDL_OpenAudio(&audioSpec,NULL) < 0)
fputs("could not initialize audio",stderr); fputs("could not initialize audio\n",stderr);
SDL_PauseAudio(0); SDL_PauseAudio(0);
@ -215,7 +215,7 @@ int main(int argc, char *argv[])
if (!window) if (!window)
{ {
fputs("ERROR: couldn't create window",stderr); fputs("ERROR: couldn't create window\n",stderr);
return 1; return 1;
} }
@ -226,7 +226,7 @@ int main(int argc, char *argv[])
if (!renderer) if (!renderer)
{ {
fputs("ERROR: couldn't create renderer",stderr); fputs("ERROR: couldn't create renderer\n",stderr);
return 1; return 1;
} }
@ -242,7 +242,7 @@ int main(int argc, char *argv[])
if (!texture) if (!texture)
{ {
fputs("ERROR: couldn't create texture",stderr); fputs("ERROR: couldn't create texture\n",stderr);
return 1; return 1;
} }

2
game.h
View file

@ -922,7 +922,7 @@ int LCR_gameLoadReplay(unsigned int replayIndex)
LCR_LOG2("map name hash matches"); LCR_LOG2("map name hash matches");
if (LCR_gameLoadMap(mapIndex) && mapHash == LCR_currentMap.hash) if (LCR_gameLoadMap(mapIndex) && mapHash == LCR_currentMap.hash)
return LCR_replayValidate() ? mapIndex : -3; return LCR_replayValidate() ? (int) mapIndex : -3;
else else
{ {
LCR_LOG2("bad map"); LCR_LOG2("bad map");

View file

@ -10,6 +10,7 @@ clear
echo "making Licar" echo "making Licar"
OPTIM="-O3" OPTIM="-O3"
C_FLAGS="-std=c99 -Wall -Wextra -pedantic $OPTIM -Wno-unused-parameter -Wno-missing-field-initializers -o licar" C_FLAGS="-std=c99 -Wall -Wextra -pedantic $OPTIM -Wno-unused-parameter -Wno-missing-field-initializers -o licar"
COMPILER="g++" COMPILER="g++"
PLATFORM="sdl" PLATFORM="sdl"
@ -22,8 +23,7 @@ if [ $# -gt 0 ]; then
if [ $COMPILER = "tcc" ]; then # you'll probably want to modify this if [ $COMPILER = "tcc" ]; then # you'll probably want to modify this
C_FLAGS="${C_FLAGS} -L/usr/lib/x86_64-linux-gnu/pulseaudio/ C_FLAGS="${C_FLAGS} -L/usr/lib/x86_64-linux-gnu/pulseaudio/
-I/home/tastyfish/git/tcc/tcc-0.9.27/include -I/usr/lib/x86_64-linux-gnu/tcc/include -DSDL_DISABLE_IMMINTRIN_H"
-I/usr/lib/gcc/x86_64-linux-gnu/8/include/"
fi fi
fi fi
fi fi
@ -67,4 +67,4 @@ fi
echo ${COMMAND} echo ${COMMAND}
eval ${COMMAND} eval ${COMMAND}
echo "done" return $?

View file

@ -984,10 +984,16 @@ void _LCR_racingUpdateCarPosRot(void)
{ {
TPE_Vec3 tmpVec = LCR_racing.carPositions[0]; TPE_Vec3 tmpVec = LCR_racing.carPositions[0];
TPE_Unit tccFix = tmpVec.x; /* Fix for TCC: for whatever reason the following
line nukes the x coord in tmpVec under TCC, so
here we back it up and then restore it. */
LCR_racing.carPositions[0] = _LCR_TPE_vec3DividePlain( LCR_racing.carPositions[0] = _LCR_TPE_vec3DividePlain(
TPE_vec3TimesPlain(_LCR_racingGetWheelCenterPoint(),LCR_GAME_UNIT), TPE_vec3TimesPlain(_LCR_racingGetWheelCenterPoint(),LCR_GAME_UNIT),
LCR_PHYSICS_UNIT); LCR_PHYSICS_UNIT);
tmpVec.x = tccFix;
LCR_racing.carPositions[0] = // smooth the position LCR_racing.carPositions[0] = // smooth the position
TPE_vec3KeepWithinBox(LCR_racing.carPositions[1],LCR_racing.carPositions[0], TPE_vec3KeepWithinBox(LCR_racing.carPositions[1],LCR_racing.carPositions[0],
TPE_vec3( TPE_vec3(
@ -1136,12 +1142,10 @@ void LCR_racingGetCarTransform(LCR_GameUnit position[3],
LCR_racing.carRotations[1].y,interpolationParam); LCR_racing.carRotations[1].y,interpolationParam);
rotation[2] = _LCR_racingInterpolateRot(LCR_racing.carRotations[0].z, rotation[2] = _LCR_racingInterpolateRot(LCR_racing.carRotations[0].z,
LCR_racing.carRotations[1].z,interpolationParam); LCR_racing.carRotations[1].z,interpolationParam);
#else #else
position[0] = LCR_racing.carPositions[0].x; position[0] = LCR_racing.carPositions[0].x;
position[1] = LCR_racing.carPositions[0].y; position[1] = LCR_racing.carPositions[0].y;
position[2] = LCR_racing.carPositions[0].z; position[2] = LCR_racing.carPositions[0].z;
rotation[0] = LCR_racing.carRotations[0].x; rotation[0] = LCR_racing.carRotations[0].x;
rotation[1] = LCR_racing.carRotations[0].y; rotation[1] = LCR_racing.carRotations[0].y;
rotation[2] = LCR_racing.carRotations[0].z; rotation[2] = LCR_racing.carRotations[0].z;