- Replace some non-const-correct char * to std::string to avoid
potential dangling pointers and manual memory management.
- oCommonData was deemed redundant, so unitcommondata.{cpp,h} have been
removed.
- There was no need to define non-default destructors or operator= for
TCarParam.
- oSideScaleMu and oSideScaleBrake were always set to 0.95f instead of
0.97f by all categories, so assume these values as defaults and remove
both TDriver::ScaleSide and these variables altogether.
- Since robots now allocated driver data dynamically i.e., without
any arbitrary limits, oExtended was deemed redundant.
Former-commit-id: 6f64dba41e036e37345bfba1d2de75bdb347a976
Former-commit-id: bd10700dae55653ef15936f3613c942a8ec753a7
Similarly to other driver implementations, simplix relied on
arbitrarily-sized buffers to store driver data, instead of allocating it
dynamically.
Furthermore, simplix relied on having per-category copies of its shared
library (e.g.: simplix_ls1, simplix_sc) to perform per-category
initializations and store them into statically allocated variables.
This has been fixed so that per-category initializations are perfomed
from the driver side, which means that one shared library can be used
for all car categories.
Since drivers are now re-indexed on every call to GfDrivers::reload,
IndexOffset is no longer needed.
Former-commit-id: f621a13850e08c9f36c90286d6548ed0c117290b
Former-commit-id: 6d93fe0a4d4130712e08a1d75336b4286bcf3039
Most of dandroid's private parameters are shared among cars and even
entire categories, and only a small fraction of such parameters are ever
changed.
Therefore, this commit suggests sane defaults so as to remove all
redundant parameters in order to greatly simplify dandroid-based driver
parameters. Also, it adds the possibility to set per-category
parameters.
Former-commit-id: a052f11ff35809692afbc17c62c62efc65e00412
Former-commit-id: e98696da43da0967a8af167540da4733754f71ce
C++ requires members to be initialised in the same order as they are
listed on the class definition. Otherwise, some compilers might throw a
warning message.
Former-commit-id: 3e05446ec7f0924384c84fe521800bac7a685cfb
Former-commit-id: 51f964c03df3bc1fd5988db2a39acae7984e5531
So far, usr would crash the game if parameters were missing for a
specific car, track or weather code. Since dynamically generated
drivers introduce a combinatory explosion, it is no longer acceptable to
crash on missing parameters, so now sane defaults are assumed.
Former-commit-id: 7975c8252737cd565fad3a1abb8b8684f8628782
Former-commit-id: ed19385aa318ffd24e86b254ebe75aac45657540
Robot clones were shared library duplicates with a different name that
the game would rely on to perform different actions based on the car
category.
Not only this was a hacky solution, but it also involved around 50
extra libraries loaded into the game, which means higher resource
consumption and slower startup time, as well as making driver management
more difficult to the much higher of directories involved in
data/drivers/.
Now, only 1 shared library per robot is defined.
Former-commit-id: 4c5141000bc9b46363a16c0928e90b14f40a430a
Former-commit-id: 773f3d6987da3f6ef8e78e0f0276e2d4bf2b07f2
Career mode was meant as an alternative championship mode with
dynamically generated drivers, but it is now redundant since dynamically
generated drivers are available to all racing modes.
Former-commit-id: 6f989742df5d35d8ac578e9e985653387585ec8a
Former-commit-id: ae91a723182e29f2ded228dfcc6da9466a950fe7
Dynamically generated drivers have introduced a few breaking changes:
- Now, all drivers, whether generated or not, are stored into
GfLocalDir.
- Driver indexes, and therefore directory names, are recalculated every
time GfDrivers::reload is called, so the in-game must find the next
available index number on a given subdirectory.
- As a consequence of this, the file-based timestamp mechanism used in
cars and tracks cannot be used for drivers, since the directory name can
(and will) change at any time. Instead, GfDrivers::self() is looked up.
Former-commit-id: 05dcbec981a449be50e8656f105481b77881508b
Former-commit-id: c965c211b9e427f37317c84c16a6746f1b817eff
shadow's LearnedGraph relied on manual memory management and non-default
copy operators, which is error-prone (in fact, m_pAxis was being leaked)
and does not provide any benefits over std::vector.
Former-commit-id: 0ade39d572f94ba718556072a2ea3da15b9aabfe
Former-commit-id: ef035240597399743265a4c17a2ee47399956976
Defining a m_pShared as a per-object pointer that always points to the
same object is redundant, and can introduce a risk for dangling
pointers.
Instead, s_shared (now, m_pShared) has been defined as a static member
in Driver.
Former-commit-id: 1f0baed4cfba1ddc47dc905d1791780164a23cc7
Former-commit-id: 7f8bdec56810b51ed8dde0d76e5aac4d462e6e87
An excessive use of operator= overloads was defined so as to copy
common parameters from Path-derived classes, such as ClothoidPath and
PitPath. However, this could be simplified since the default copy
operator would suffice.
Former-commit-id: c8954549c68036713840357c6851aec68ce713cb
Former-commit-id: bd91f618590a9f3dcc1c5cfec2ae995536840526
Even if shadow was defined with OOP in mind, for some unknown reason
Driver::Drive relied on a statically allocated array with an arbitrary
size of MAX_MOD_ITF elements (20). Because now the game supports a
virtually unlimited number of drivers (aka interfaces), it was possible
to read past the last_srslip array and cause undefined behaviour.
As hinted above, this array did not make any sense since last_srslip
should be part of each Driver object, and not a statically allocated
array.
Former-commit-id: e365060392b1d08c40a1e3d27f0e113d5a31594d
Former-commit-id: d8954641d78f83d198493e7cb36ffe3db9ef0a55
Since driver indexes are now recalculated every time GfDrivers::reload
is called, they can be no longer relied on. Instead, driver names are
now used to find a specific driver, since names are set on creation.
Former-commit-id: 7a1d950db421e3cffee05736e0c31948cf534e4c
Former-commit-id: a6e0b38cbffb89ee9a47c1da926fc5959f1b7424
Driver parameters (name, short name, code, etc.) are now stored into
GfLocalDir by GfDrivers::reload.
Former-commit-id: c02545750adda862a4c31f837dc6e710a256cdb7
Former-commit-id: a258d6510bb7da1402b3fca3e82a2d1d7a56a2f3
So far, every robot would set up an arbitrary limit on the number of
drivers that could be defined. Not only it was an inefficient approach
because of the fixed-size statically allocated buffers this would incur,
but also there is no reason why this should not be allocated
dynamically.
Now, the internal data structures for each robot are generated
dynamically depending on the number of drivers defined by its parameter
file.
Former-commit-id: 65682fb3d457e2a38fe62cd5b2f00e908bb6aca8
Former-commit-id: 10d86064d066c96f0061080b9ec817e39548277f
Since drivers can be now dynamically generated and this requires write
permissions, they are now always stored into GfLocalDir instead of
GfDataDir.
Former-commit-id: 2dac3225c4710caa2afa5da36cbbe5a9b86d3be8
Former-commit-id: 317f9d9b04b4ff7f78e3da15c82f1b77c894415c
Now, drivers from any category, robot type or car model can be generated
or deleted from the driver selection menu.
Former-commit-id: 41f2eec41a9ce23d84fe3779c496223c5a19da9b
Former-commit-id: 1957959d6bb70cc75caf980e9931c089b3d0d17c
Since cars can be now downloaded from the in-game download manager,
the internal list of cars must be updated without having to restart the
game.
Former-commit-id: 0f5f9a71ad85129e7640df853cbdf9e917c4e5a8
Former-commit-id: c9482b032444635021a00970310ccca57d49fe50
Future commits will simplify the current directory structure of
per-category robot directories (e.g.: "dandroid_ls1", "usr_mp5"),
instead only having one directory per robot (e.g.: "dandroid", "usr").
Therefore, these exceptions must be removed so that drivers can still be
looked up.
Former-commit-id: 390647d05f9d09d0976a475e836a21015a40c785
Former-commit-id: 060cde8bb168ef7a4a57420911097e6e205bcb29
This should fix some of the leaks as reported by:
https://sourceforge.net/p/speed-dreams/tickets/1297/
Former-commit-id: 5f077f2955f87078eca94048fba8093c066f3e25
Former-commit-id: ade4ccc2a849bbd45bb3e864f21fa9bafd3c3d93
Future commits will make use of this tag.
Former-commit-id: 9a47827be752dccb90f977215b366e2e728a044d
Former-commit-id: d1c9f47d0b7b19f8dfbcb9c241a16dae7969b461
While it is true that FList::unknown equals zero and therefore it is
implicitly initialised by the prior call to calloc(3), it is still
advisable to initialise it explicitly for enhanced readability.
Former-commit-id: 6ca4ae3b6e8aca4ac2bb2c3553f75f98247cfccf
Former-commit-id: 48006ca77dbe6faf4c0e41c3d3bafc0fb6f82ef2
Regular files in Windows might not only include the _A_NORMAL attribute
[1]. In fact, experiments with WINE revealed that most files would in
fact include the _A_ARCH attribute.
Otherwise, most files would default to FList::unknown and therefore
functions relying on FList::file would not work.
[1]: https://learn.microsoft.com/en-us/cpp/c-runtime-library/filename-search-functions?view=msvc-170
Former-commit-id: 4fb5d0a07fe84b67ebe6541a7e0c9bc630579b42
Former-commit-id: 6dc6253ef0a737ab1c7881adc9b02088e7722243
- Improved overtaking response to slower cars
- Greatly reduced lifting of throttle when letting faster cars past
- Improved tire selection capability for both race starts and during pit stops, depending on both track temperature *and* race length
- Shifting point is now adjustable. Use parameter "shift up point" (range: 0.01 - 1.0)
- Improved tire change strategies. Bots will now pit when their most worn tire reaches "Pit Tire Wear Threshold" (range: 0.0 - 100.0, default 25.0). If they do not reach this point when they pit, they will change tires anyway if the remaining life is less than 2x this threshold value.
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9647 30fe4595-0a0c-4342-8851-515496e4dcbd
Former-commit-id: a2cf9acfa90744298531d98e9fb4bd135fe356e2
Former-commit-id: 73064a7ada0a992c0282ef4ef3ce345f618bf541
Also roll back a change to tire pressure that caused strange behavior with very small cars, like karts.
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9629 30fe4595-0a0c-4342-8851-515496e4dcbd
Former-commit-id: 0cf90392430b237ee451169ed8e86c8f924b992e
Former-commit-id: 99fc40c6f0dcbb44c1ba4390dc32ef62b95d8146
According to the documentation, applications using SHFileOperation
should only check for zero or non-zero. Moreover, the return values for
SHFileOperation are marked as not reliable or stable. [1]
Because of this, it is not possible to achieve the same behaviour
between Win32 and POSIX for portability::rmdir_r.
[1]: https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shfileoperationa
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9627 30fe4595-0a0c-4342-8851-515496e4dcbd
Former-commit-id: 5dcfb5a9d09f1b2b1509d50f3a3d842d140161d6
Former-commit-id: a19aa1200ed65c285e9649d8050fb1a8ee0d227e
Otherwise, libraries built by the xmlversion target (namely,
portability, tgf and txml) could be built under a different
CMAKE_BUILD_TYPE.
For example, if CMAKE_BUILD_TYPE were assigned to Debug from the
top-level project, these libraries would otherwise under Release and
therefore debugging symbols would not be available.
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9626 30fe4595-0a0c-4342-8851-515496e4dcbd
Former-commit-id: be8c87017665a74a63e2bb22c45a4b23c0c6cd2b
Former-commit-id: b7ef6cacb5b137156815d12304209cbca95d4464
Windows and POSIX had different behaviours for portability::rmdir_r if
a directory did not exist. This commit therefore modifies the Windows
implementation so as to match the same behaviour as in POSIX, and
therefore recover the original implementation in main.cpp.
This reverts commit r9624.
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9625 30fe4595-0a0c-4342-8851-515496e4dcbd
Former-commit-id: c6db7c5141d4a712f7b4240664889caa83b58080
Former-commit-id: 7aac87e5335fce45d5b9b9b2c75e4429d62251b6
Whereas GNU/Linux returns 0 even if the directory does not exist,
on Windows it returns non-zero since SHFileOperation fails in such
circumstances.
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9624 30fe4595-0a0c-4342-8851-515496e4dcbd
Former-commit-id: 590a61e5e540a7684bd32fefc4624838ca38188b
Former-commit-id: 789bc137b1fc746afc0a1f136954e385c1b1a727
- Fixes for excessive tire wear when cars spawn with wheels below the ground by limiting
- Ability to tweak tire temperature gain depending on 2D axis direction ("lateral mu heat factor" or "longitudinal mu heat factor")
- Ability to tweak tire cool down rates ("tire cooling factor", "tire speed cooling factor")
- Ability to tweak tire's ability to maintain heat in wet conditions ("tread water drain speed" - defaults to 0 for dry tires, 1.5 and 3 for and inter/wet tires). Higher numbers mean tires can retain heat even when track is wet.
- Removed explicit penalties for tire grip and heating for using wet tires on dry track
In addition, "Stiffness" now changes in accordance to tire pressure. This is intended to simulate the tire becoming stiffer as tire temperature - and thus - pressure - increases.
Unfortunately this breaks the parameters for A LOT of cars in some way: cars without tire options will be undrivable in wet conditions by default, and tire compounds must be rebalanced for cars with them.
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9623 30fe4595-0a0c-4342-8851-515496e4dcbd
Former-commit-id: 8ae6c918bbfeab69ce5f3203ffcfa5b5a12fca53
Former-commit-id: e1e21b74aece3205cee9010eb9a092c3392277f1
Even if GFPARM_RMODE_REREAD was meant as an optional flag for
GfParmReadFile, it is always set by the implementation. This forced
the parameter file to be always opened for reading, which would fail if
the file did not exist. This is undesired when creating new parameter
files from scratch.
Since this behaviour is probably assumed by many parts of the code, a
new flag, namely GFPARM_RMODE_NOREREAD, has been added so as to disable
such behaviour while maintaining backwards compatibility.
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9621 30fe4595-0a0c-4342-8851-515496e4dcbd
Former-commit-id: 24339c76e7e53a70400f4e24086d5a5f2550a8d8
Former-commit-id: 5bf59aae2e4ddc4d17f95360d1e521d6d5580eda
Since the actual motivation behind GfCars::GfCars is to scan for
directories, checking against "CMakeLists.txt" is fragile since other
files could be listed as well, leading to undesired behaviour.
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9620 30fe4595-0a0c-4342-8851-515496e4dcbd
Former-commit-id: ec0e1670abc7c26b065e0225ecb8f9124515343d
Former-commit-id: 3010a5ed07c6b2f7e24f0af83318062e146198e6