Fix a few bugs
This commit is contained in:
parent
ab70d727b8
commit
bc55e84d5b
6 changed files with 48 additions and 32 deletions
|
@ -12,6 +12,8 @@ The following is a draft of readme that will eventually be published, it may con
|
||||||
|
|
||||||
For more detail see also the [game manual](media/manual.txt).
|
For more detail see also the [game manual](media/manual.txt).
|
||||||
|
|
||||||
|
TODO: link to licar-content
|
||||||
|
|
||||||
## What Is This
|
## What Is This
|
||||||
|
|
||||||
This is a libre (free as in freedom) 3D racing game very much inspired by the proprietary game Trackmania (but different enough to be legally safe). It is written in a selfless way (it won't try to exploit you in any way, not even indirectly) following a philosophy of high minimalism, excluding any poison and bullshit of so called "modern technology" and self interest. It was made completely from scratch by a single man who is too different (for better or worse) from all other humans.
|
This is a libre (free as in freedom) 3D racing game very much inspired by the proprietary game Trackmania (but different enough to be legally safe). It is written in a selfless way (it won't try to exploit you in any way, not even indirectly) following a philosophy of high minimalism, excluding any poison and bullshit of so called "modern technology" and self interest. It was made completely from scratch by a single man who is too different (for better or worse) from all other humans.
|
||||||
|
|
6
TODO.txt
6
TODO.txt
|
@ -2,6 +2,7 @@ fuck issue trackers :D
|
||||||
|
|
||||||
=========== GENERAL ==============
|
=========== GENERAL ==============
|
||||||
|
|
||||||
|
- use other libs than glibc (musl, ...)
|
||||||
- final tests:
|
- final tests:
|
||||||
- run the test frontend through all the shit (valgrind, different compilers
|
- run the test frontend through all the shit (valgrind, different compilers
|
||||||
etc.) KINDA DID
|
etc.) KINDA DID
|
||||||
|
@ -30,8 +31,7 @@ fuck issue trackers :D
|
||||||
|
|
||||||
=========== BUGS =================
|
=========== BUGS =================
|
||||||
|
|
||||||
- TCC: physics on some maps (tiny2, tiny3, ...) behaves wrong, some replays
|
- another TCC bug: tiny map 4 replay fails
|
||||||
don't work
|
|
||||||
- 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
|
||||||
|
@ -103,6 +103,8 @@ fuck issue trackers :D
|
||||||
theory they should (enough block space to load): try to set the exact same
|
theory they should (enough block space to load): try to set the exact same
|
||||||
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
|
||||||
|
- TCC: physics on some maps (tiny2, tiny3, ...) behaves wrong, some replays
|
||||||
|
don't work
|
||||||
- camera bugs in TCC build, also the auto test fails on checking rendered
|
- 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
|
pixels -- this may be TCC not supporting C99 fully? but dig up what's going
|
||||||
on
|
on
|
||||||
|
|
9
game.h
9
game.h
|
@ -1274,9 +1274,10 @@ void LCR_gameDraw3DView(void)
|
||||||
1
|
1
|
||||||
#endif
|
#endif
|
||||||
? LCR_GAME_UNIT -
|
? LCR_GAME_UNIT -
|
||||||
((LCR_game.nextRacingTickTime - LCR_game.time) * LCR_GAME_UNIT)
|
(((int) (LCR_game.nextRacingTickTime - LCR_game.time)) * LCR_GAME_UNIT)
|
||||||
/ LCR_RACING_TICK_MS_RT // 32: magic constant
|
/ LCR_RACING_TICK_MS_RT // 32: magic constant
|
||||||
: _LCR_min(LCR_GAME_UNIT,32 * (LCR_game.time - LCR_game.stateStartTime));
|
: _LCR_min(LCR_GAME_UNIT,32 * ((int) (LCR_game.time -
|
||||||
|
LCR_game.stateStartTime)));
|
||||||
|
|
||||||
LCR_racingGetCarTransform(carTransform,carTransform + 3,
|
LCR_racingGetCarTransform(carTransform,carTransform + 3,
|
||||||
physicsInterpolationParam);
|
physicsInterpolationParam);
|
||||||
|
@ -1672,11 +1673,15 @@ void LCR_gameHandleInput(void)
|
||||||
{
|
{
|
||||||
LCR_LOG1("couldn't load replay");
|
LCR_LOG1("couldn't load replay");
|
||||||
LCR_gamePopupMessage(LCR_texts[LCR_TEXTS_FAIL]);
|
LCR_gamePopupMessage(LCR_texts[LCR_TEXTS_FAIL]);
|
||||||
|
LCR_currentMap.blockCount = 0;
|
||||||
|
LCR_gameSetState(LCR_GAME_STATE_MENU);
|
||||||
}
|
}
|
||||||
else if (mapIndex == -1)
|
else if (mapIndex == -1)
|
||||||
{
|
{
|
||||||
LCR_LOG1("couldn't load replay map");
|
LCR_LOG1("couldn't load replay map");
|
||||||
LCR_gamePopupMessage(LCR_texts[LCR_TEXTS_FAIL]);
|
LCR_gamePopupMessage(LCR_texts[LCR_TEXTS_FAIL]);
|
||||||
|
LCR_currentMap.blockCount = 0;
|
||||||
|
LCR_gameSetState(LCR_GAME_STATE_MENU);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LCR_gameSetState(LCR_GAME_STATE_LOADING);
|
LCR_gameSetState(LCR_GAME_STATE_LOADING);
|
||||||
|
|
3
make.sh
3
make.sh
|
@ -22,8 +22,7 @@ if [ $# -gt 0 ]; then
|
||||||
COMPILER="$2"
|
COMPILER="$2"
|
||||||
|
|
||||||
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/ -DSDL_DISABLE_IMMINTRIN_H"
|
||||||
-I/usr/lib/x86_64-linux-gnu/tcc/include -DSDL_DISABLE_IMMINTRIN_H"
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -103,12 +103,11 @@ Here are some tips for playing:
|
||||||
speed.
|
speed.
|
||||||
- For a more serious grinding it may be good to reduce the initial countdown
|
- For a more serious grinding it may be good to reduce the initial countdown
|
||||||
(in settings.h), it will save a lot of time over many runs.
|
(in settings.h), it will save a lot of time over many runs.
|
||||||
- Don't try to drive a perfect run from the start -- to drive a good time you
|
- Don't try to drive a perfect time right away -- to drive a good time you
|
||||||
first have to drive a bad one. It's best to quickly drive a somewhat decent
|
first have to drive a bad one. It's best to quickly drive a somewhat decent
|
||||||
run and then race against it as a ghost, beating it and repeating then
|
run and then race against its ghost, beating it and then repeating the process
|
||||||
repeating this process over and over. This allows for gradual but steady
|
over and over. This allows for a gradual but steady, steap-by-step improvement
|
||||||
improvement by spotting exact places where one can gain more speed against
|
by discovering exact places where one can improve against the ghost.
|
||||||
the ghost.
|
|
||||||
|
|
||||||
~~~~~ DATA FILE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~ DATA FILE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -123,19 +122,20 @@ with any plain text editor. If you just want to casually play the game, you may
|
||||||
safely ignore the file. You will need to edit the file if you want to add new
|
safely ignore the file. You will need to edit the file if you want to add new
|
||||||
maps and replays, or if you want to share your replays and maps with others.
|
maps and replays, or if you want to share your replays and maps with others.
|
||||||
|
|
||||||
The file consists of data items -- an item represents a map, replay, and
|
The file consists of data items -- an item represents a map, replay and possibly
|
||||||
possibly other types of data. The items are separated by the '#' (hash)
|
other types of data. The items are separated by the '#' (hash) character. Each
|
||||||
character. Each item is stored in plaintext format, there are no binary data.
|
item is stored in plaintext ASCII format, there are no binary data. Each item
|
||||||
Each item starts with a magic number, which is a single character ('M' for a
|
starts with a magic number, which is a single character ('M' for a map, 'R' for
|
||||||
map, 'R' for a replay), then its name follows immediately, terminated by the
|
a replay), then its name follows immediately, terminated by the ';' (semicolon)
|
||||||
';' (semicolon) character, and then the item's data follow. Format of this data
|
character, and then the item's data follow. Format of this data depends on what
|
||||||
depends on what data it is, so map data of course have a different format than
|
kind of data it is, so map data of course have a different format than replay
|
||||||
replay data. For example a map named "mymap" will start with "Mmymap;".
|
data. For example a map named "mymap" will start with "Mmymap;". Unknown data
|
||||||
|
items are ignored, so comments can be added in the file.
|
||||||
|
|
||||||
~~~~~ CONFIGURATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~ CONFIGURATION ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The game offers a very high level of configuration and customization, and those
|
The game offers a very high level of configuration and customization, and those
|
||||||
with at least basic programming skill will be able to implement any changes
|
with at least basic programming skills will be able to implement any changes
|
||||||
imaginable. Very basic settings (such as turning the music off or switching
|
imaginable. Very basic settings (such as turning the music off or switching
|
||||||
between windowed and fullscreen mode) are accessible either in the game menu,
|
between windowed and fullscreen mode) are accessible either in the game menu,
|
||||||
or as a commandline flag (run the game with -h flag to see the options). All
|
or as a commandline flag (run the game with -h flag to see the options). All
|
||||||
|
@ -154,7 +154,7 @@ space). Replays can also be used to spawn a ghost car to race against. There
|
||||||
are special tabs in the menu to view a replay or race against a replay ghost.
|
are special tabs in the menu to view a replay or race against a replay ghost.
|
||||||
|
|
||||||
Replays are saved in the data file (see the section about data file for
|
Replays are saved in the data file (see the section about data file for
|
||||||
details).
|
details). The exact format of replay data is described in the source code.
|
||||||
|
|
||||||
Whenever a map's target time is beaten, replay is automatically saved. It's also
|
Whenever a map's target time is beaten, replay is automatically saved. It's also
|
||||||
possible to save a replay manually by opening the menu and selecting
|
possible to save a replay manually by opening the menu and selecting
|
||||||
|
@ -165,7 +165,7 @@ replay you just delete it in the data file.
|
||||||
~~~~~ GHOSTS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~ GHOSTS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The game supports ghost cars to race against (note that this may be unsupported
|
The game supports ghost cars to race against (note that this may be unsupported
|
||||||
on some weaker platforms). A ghost car is created from a replay and will race in
|
on some weaker platforms). A ghost car is spawned from a replay and will race in
|
||||||
real time against the player, without being able to collide with him. This is
|
real time against the player, without being able to collide with him. This is
|
||||||
very useful when attacking someone else's (or one's own) achieved time, to see
|
very useful when attacking someone else's (or one's own) achieved time, to see
|
||||||
where exactly time losses against the opponent occur.
|
where exactly time losses against the opponent occur.
|
||||||
|
@ -173,17 +173,18 @@ where exactly time losses against the opponent occur.
|
||||||
~~~~~ MAKING CUSTOM MAPS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~ MAKING CUSTOM MAPS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Maps are stored in the data file. For its simplicity the original game doesn't
|
Maps are stored in the data file. For its simplicity the original game doesn't
|
||||||
come with a user-friendly map editor (perhaps some will be made over time), the
|
come with a "user-friendly" GUI map editor (perhaps some will be made over
|
||||||
maps are hand-written directly in the text format that's stored in the data
|
time), the maps are hand-written directly in the text format that's stored in
|
||||||
file, however there is a helper file for Blender that facilitates this process.
|
the data file, however there is a helper file for Blender that facilitates the
|
||||||
|
process of designing a map.
|
||||||
|
|
||||||
In the game a map is represented as a 64x64x64 grid, with each cell one unit in
|
In the game a map is represented as a 64x64x64 grid of cells, each of which is
|
||||||
width, one unit in depth and HALF a unit in height. In the cell blocks can be
|
one unit in width, one unit in depth and HALF a unit in height. Each cell can
|
||||||
placed. There are several types of blocks such as ramps, walls, corners etc. The
|
hold a map block. There are several types of blocks such as ramps, walls,
|
||||||
map will be made of these blocks.
|
corners etc. The whole map is composed of these blocks.
|
||||||
|
|
||||||
Each placed block can additionally be transformed: rotated by multiples of 90
|
Each placed block can additionally be transformed: rotated by multiples of 90
|
||||||
degrees along vertical axis and/or flipped horizontally/vertically. Additionally
|
degrees about vertical axis and/or flipped horizontally/vertically. Additionally
|
||||||
each block also has a material (concrete, grass, ...). Special kinds of blocks
|
each block also has a material (concrete, grass, ...). Special kinds of blocks
|
||||||
are accelerators and fans. The finish, checkpoints and car start position can
|
are accelerators and fans. The finish, checkpoints and car start position can
|
||||||
also be seen as a special kind of block. And still, there are yet "more special"
|
also be seen as a special kind of block. And still, there are yet "more special"
|
||||||
|
@ -193,7 +194,9 @@ times in a row) -- these only appear in the map's text format; they are not
|
||||||
necessary, but greatly help making maps faster and also keep their code smaller.
|
necessary, but greatly help making maps faster and also keep their code smaller.
|
||||||
|
|
||||||
The text format of the map is described in the map.h file, refer to it for
|
The text format of the map is described in the map.h file, refer to it for
|
||||||
details you won't find here. In summary:
|
details you won't find here. To start with map making it may be useful to check
|
||||||
|
out some of the existing small maps, for example the LCtiny ones. In summary the
|
||||||
|
map format is following:
|
||||||
|
|
||||||
First, if the map is preceded by another data string in the data file, remember
|
First, if the map is preceded by another data string in the data file, remember
|
||||||
to start it with the `#` character (to separate it from the previous string).
|
to start it with the `#` character (to separate it from the previous string).
|
||||||
|
|
|
@ -3280,8 +3280,13 @@ TPE_Vec3 TPE_envCone(TPE_Vec3 point, TPE_Vec3 center, TPE_Vec3 direction,
|
||||||
TPE_Vec3 helper = TPE_vec3Project(point,direction);
|
TPE_Vec3 helper = TPE_vec3Project(point,direction);
|
||||||
TPE_Unit y = TPE_LENGTH(helper);
|
TPE_Unit y = TPE_LENGTH(helper);
|
||||||
|
|
||||||
|
// Licar change: the following fixes a TCC bug
|
||||||
|
TPE_Unit tccFix = y;
|
||||||
|
|
||||||
helper = TPE_vec3Minus(point,helper);
|
helper = TPE_vec3Minus(point,helper);
|
||||||
|
|
||||||
|
y = tccFix; // for some reason the above line nukes y in TCC, so restore it
|
||||||
|
|
||||||
TPE_Unit x = TPE_LENGTH(helper);
|
TPE_Unit x = TPE_LENGTH(helper);
|
||||||
|
|
||||||
if (x < 20)
|
if (x < 20)
|
||||||
|
|
Loading…
Reference in a new issue