From 76cc3227bb18833979d495466b09cc5192c485ba Mon Sep 17 00:00:00 2001 From: Miloslav Ciz Date: Sun, 20 Apr 2025 21:51:11 +0200 Subject: [PATCH] Add air slowdown --- TODO.txt | 11 +++++------ media/manual.txt | 46 ++++++++++++++++++++++++++++------------------ racing.h | 8 ++++++++ 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/TODO.txt b/TODO.txt index f777fc7..813113a 100644 --- a/TODO.txt +++ b/TODO.txt @@ -19,7 +19,6 @@ data file, try to somehow hack around it (maybe just convert it to an array in the end?) Maybe this: make a standalone C file with the string in it that when compiled and run outputs the array. -- some kinda easteregg in menu or smt - culling is very slow now, it showed that distance bailout can accelerate it a lot, try to make a more accurate bailaout and see if it's faster (watch out for bugs due to false positives) @@ -56,11 +55,6 @@ - replay stretching works - replay with input not occuring for more that LCR_SETTING_GHOST_STEP - replay validation -- make the racing module usable by itself, e.g. to allow making tools for - verifying replays etc., i.e. make the module measure time, count checkpoints - etc. DONE? -- allow slowing down in air like in TM? - lower memory) - at the end check error handling, make sure the game handles garbage data in resource file etc. @@ -76,6 +70,11 @@ =========== HANDLED ============== - MAP4: one triangle in top section is missing! +- allow slowing down in air like in TM? +- some kinda easteregg in menu or smt +- make the racing module usable by itself, e.g. to allow making tools for + verifying replays etc., i.e. make the module measure time, count checkpoints + etc. DONE? - add simple particle effects for grass/dirt/drift? Can be just a few squares animated from the projected backwheels. - FPS logging for optim diff --git a/media/manual.txt b/media/manual.txt index af33c58..0273797 100644 --- a/media/manual.txt +++ b/media/manual.txt @@ -8,15 +8,17 @@ WORK IN PROGRESS ~~~~~ GENERAL ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Licar is a relatively simple 3D stunt racing game inspired by other popular -games of the genre such as Trackmania and Stunts. Unlike mainstream video games, -Licar is completely libre, i.e. free as in freedom (meaning its source code is -available for any use whatsoever), gratis (free of cost) and its focus lies on -being well programmed by utilizing minimalism and rejecting harmful "modern" -programming practice. The game aims to seflessly bring joy and entertainment to -all people who might enjoy it, even those who have no money, own only very old -and weak computers and so on. It is not a commercial product and has been made -purely out of love by a single man. Licar is also more than a game, for example -it can be used for educational purposes or as a basis for new projects. +games of the genre, such as Trackmania and Stunts. Unlike mainstream video +games, Licar is completely libre, i.e. free as in freedom (meaning its source +code and art assets are available for any use whatsoever), gratis (free of cost) +and its focus lies in being well programmed by adhering to minimalism and +rejecting harmful "modern" programming practices. The game aims to seflessly +bring joy and entertainment to all the people that might enjoy it, even those +who aren't able or willing to pay and/or watch ads, those owning very old and +weak computers and so on. It was made in whole by a single man as a completely +non-commercial product, the development was driven purely by love of the craft +and other living beings. Licar is also more than a game, for example it may +serve educational purposes or become a basis for new projects. The game runs on many platforms and comes in different versions depending on what the platforms allow. Some versions may have more features or visual @@ -71,13 +73,20 @@ speed, times at checkpoints etc. ~~~~~ CONTROLS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Controls are extremely simple. The car is only controlled by 4 directional -keys: up (accelerate), down (deccelerate, reverse), left (steer left) and -right (steer right). There are two additional keys, A and B (depending on your -platform these may be e.g. the K and L letter or RETURN and ESCAPE keys), for -restarting runs and handling menu. +Controls are more than simple: the car is driven with only 4 directional keys: +up (accelerate), down (brake, reverse), left (steer left) and right (steer +right). There are two additional keys, A and B (depending on your platform these +may be e.g. K and L keys, RETURN and ESCAPE etc.), for restarting runs and +handling menu. -PRO TIP: pressing brake while in air stops the car's horizontal rotation! +Here are some driving tips: + +- Tapping brake while steering triggers drifting (if this doesn't work, you may + be experiencing keyboard ghosting: the inability of some keyboards to detect + certain simultaneous key presses). +- It's possible to stop the car from rotating mid-air by pressing brake. +- Similarly, holding down brake in air will slow down the car's horizontal + velocity. ~~~~~ DATA FILE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -275,9 +284,10 @@ that's meant to help the people. Q: Can I still voluntarily donate money? -A: Currently it is possible, donation info is on my website (www.tastyfish.cz), -but I am not dependant on donations and don't even encourage them too much, but -if you still insist, I'll be very grateful, thank you very much. +A: Currently it is possible, donation info is somewhere on my website, but I am +not dependant on donations and am sometimes doubting if it's a good thing to +accept them, but if you still insist, I'll be very grateful, thank you very +much. Q: Why is the physics so buggy? diff --git a/racing.h b/racing.h index 947546f..6d253b9 100644 --- a/racing.h +++ b/racing.h @@ -1279,6 +1279,14 @@ uint32_t LCR_racingStep(unsigned int input) for (int j = 0; j < 3; ++j) LCR_racing.carBody.joints[i].velocity[j] = LCR_racing.carBody.joints[LCR_CAR_JOINTS - 1].velocity[j]; + + // gradual slowing down mid-air: + + LCR_racing.carBody.joints[4].velocity[0] = + 15 * (LCR_racing.carBody.joints[4].velocity[0] / 16); + + LCR_racing.carBody.joints[4].velocity[2] = + 15 * (LCR_racing.carBody.joints[4].velocity[2] / 16); } if (input & (LCR_RACING_INPUT_FORW | LCR_RACING_INPUT_BACK))