Commit graph

8747 commits

Author SHA1 Message Date
phosit
df5fee6103 Rename PushGuiPage to OpenChildPage
There is no `PopGuiPage` anymore. For symmetry there should also be no
`PushGuiPage`.
2025-03-09 10:39:20 +01:00
phosit
d0ab2cb783 Remove Engine.PopGuiPage
Remove the old now unused interface.
2025-03-09 10:39:20 +01:00
phosit
4f62e9f6f0 Change the GuiManager tests to use promises
Adopt the new interface by the tests: as an example and to show that
it's sound.
2025-03-09 10:39:20 +01:00
phosit
d3bc5bc802 Enable page-inits to return a Promise
Allows to return the page-completion-value instead of passing it to an
`Engine` function.

Closes: #7000
2025-03-09 10:39:20 +01:00
Dunedan
c448973398
Remove a bunch of unused scripts
Some of them were simply unused, while others got replaced by Python
scripts.
2025-03-03 20:57:49 +01:00
Dunedan
03cb24d400
Move xmlvalidator code to entity directory
The xmlvalidator logic is only used by the checkrefs.py script, so this
moves it to the same directory to have it co-located and avoid having to
modify sys.path to import it.
2025-03-03 17:45:08 +01:00
Dunedan
118ea18a58
Enable a few more ruff rules 2025-03-03 14:18:40 +01:00
Dunedan
3c57fdb4a9
Fix ruff linting for scripts in source/tools/dist/
By default ruff excludes all files in directories named "dist" from
linting (https://docs.astral.sh/ruff/settings/#exclude). This caused the
Python scripts in `source/tools/dist/` to not get linted. This commit
fixes that and adjusts their style to fit our ruff rules.
2025-03-03 12:45:33 +01:00
Vantha
0177b97c69 Complete the GUI XML checks in checkrefs.py
Add checks for sprites, styles, scrollbars, tooltips, and colors.
And too for entire objects referenced by the "use_object" attribute.
(even though that is currently unused)
2025-02-26 16:20:27 +01:00
Dunedan
18d7746c84
Fix adding port forwardings using UPnP
The UPnP implementation included a combination of two subtle bugs, which
resulted in failure to create port forwardings every time after the
first one.

When using UPnP, the internet gateway to create the port forwardings at
needs to discovered. As that takes a while, the its root descriptor URL
was supposed to be cached after successful discovery in the user config
in "network.upnprootdescurl". However, instead of caching the root
descriptor URL, the control URL got cached. That caused following
requests to the root descriptor URL to fail, as they ended up at the
control URL instead. As such requests might also fail when the network
topology changed, the code was supposed to fall back to discovering the
internet gateway again when the cached one didn't work. However, due to
the inner workings of miniupnpc the request using the cached root
descriptor URL didn't result in an error, so the new discovery was never
triggered. As the wrong value was persisted in the user config there was
also no way to get out of this situation again.

This commit fixes both of these bugs.

As far as I can tell these bugs existed since the introduction of the
caching of the root descriptor URL in 0ba25e9968, which means creating
port forwardings using UPnP has been broken since Alpha 15.
2025-02-24 08:23:07 +01:00
Dunedan
5696f063f5
Reduce time to discover the internet gateway
When adding a port forwarding via UPnP, pyrogenesis first needs to
discover the internet gateway to create the forwarding at. To do so, it
utilizes miniupnpc to send an SSDP request and waits 10 seconds until it
processes the responses and continues to add the port forwarding.
As that happens asynchronously it means if players hosting games rely on
UPnP for port forwarding and if their pyrogenesis instance doesn't have
the address of their internet gateway cached, it takes more than 10
seconds after starting to host a game, before players can join. However,
waiting for 10 seconds is completely unnecessary, because the internet
gateway responds immediately to the SSDP request. Therefore, this commit
reduces the time to wait for responses from 10 seconds to 2 seconds,
which is the timeout miniupnpc uses internally as well, when discovering
internet gateways.
2025-02-23 04:41:43 +01:00
Dunedan
fcd3fc2aa3
Create port forwarding for correct port with UPnP
Up to know the UPnP logic ignored the port a user was hosting a game on
and always added a port forwarding for the default port UDP 20595. This
commit fixes that, so a port forwarding is added for the actual port a
game is hosted on.
2025-02-22 20:26:30 +01:00
Dunedan
75d343293f
Remove "useLongStrings" logic
As it turns out we don't need that special logic for handling the "long"
locale properly and everything continues to work as before without it.

The only difference is that the number format not being the one from
en_us anymore when using the "long" locale, but the one of the
system-wide configured language, which should be an even better user
experience than before.
2025-02-22 18:18:42 +01:00
Lancelot de Ferrière
c475cc2265 Cleaner debug serializer output
The debug serializer currently outputs data even for components where `Serialize = null`.
This leads to useless data being output, especially in OOS debug states which makes diffing more annoying.

Noted in #7634
2025-02-21 18:20:56 +01:00
Ralph Sennhauser
9a43c43a33
Avoid gcc warning in json_spirit
Gcc-14 triggers a warning for substitute_esc_chars in
json_spirit_reader_template.h if optimizations are enabled.

../../../source/third_party/jsonspirit/json_spirit_reader_template.h:138:62:
/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/bits/char_traits.h:427:56: warning: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ accessing 9223372036854775808 or more bytes at offsets 0 and 0 may overlap up to 9223372036854775809 bytes at offset -1 [-Wrestrict]
  427 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));

for with lto enabled

/usr/lib/gcc/x86_64-pc-linux-gnu/14/include/g++-v14/bits/char_traits.h:427:56: warning: ‘__builtin_memcpy’ specified bound between 9223372036854775808 and 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Wstringop-overflow=]
  427 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));

This looks like another incarnation of bugs like:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105329
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100366

Add quirk to avoid the warning

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-02-19 21:52:50 +01:00
Ralph Sennhauser
77256c8d32
Fix profiler2 webui html
Cleanup some bogus tags and outdated css attribute.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-02-17 21:22:30 +01:00
Ralph Sennhauser
4b59d6b739
Update jquery used by profiler2 webui
jquery 1 is for support of old version of browsers not even maintained
this days.

Updating prevents occasional hangs for me.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-02-17 21:22:30 +01:00
Ralph Sennhauser
82ff0ea90b
Remove CONFIG_ENABLE_BOOST
Code within CONFIG_ENABLE_BOOST is required to compile pyrogenesis.

As boost is required in many other places, making it truly optional in
the one case where there is currently a guard is meaningless.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-02-14 20:35:04 +01:00
scuti
a9819e9865 Created hotkey to grab and release mouse.
Addresses #6790
2025-02-14 20:18:49 +01:00
phosit
a786a1f3d8 Use std::variant in Future
Either a return value or an exception has to be stored. With
`std::variant` it's more explicit.
Also the return value is never empty, so there is no need for
`std::optional` anymore.
2025-02-10 18:11:02 +01:00
scuti
7d616763a4 Fix /kick or /ban segfaulting in singleplayer
Addresses #7467
2025-02-09 18:50:15 +01:00
Langbart
dffa892c60 fix: rlclient update resource gathering and map name
fix: #7540
2025-02-09 14:38:55 +01:00
Lancelot de Ferrière
5f117532a4 Map generation: speed up ParseEntities
When marking a tag dirty, the obstruction manager checks it has not already done so. This is un-necessary when the global state is marked dirty, and this check is rather slow since we do it once per entity, effectively leading to an o(n^2) runtime.
2025-02-09 11:30:35 +01:00
Ralph Sennhauser
bccd3db231
Add missing header in KeyName
Reported-by: @svenstaro
Ref: #7564
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-01-30 21:15:28 +01:00
drh
03ceb27e90 Add camera pan inversion option
Fixes: #6539
2025-01-30 18:42:59 +01:00
phosit
b41ca5ad78 Replace FALLTHROUGH by the standard attribute 2025-01-29 19:34:12 +01:00
phosit
473f8ca72e Remove FALLTHROUGH on empty cases
`#include "lib/code_annotation.h"` can be removed in some places.
2025-01-29 19:34:12 +01:00
Dunedan
db35a8494c
Update supported languages for the NSI installer
235ea5cfb4 updated the languages supported by 0 A.D., but missed
updating them for the installer. This commit makes up for that and
updates the languages for the installer as well.
2025-01-28 19:14:16 +01:00
Vladislav Belov
a7ead4cf4c
Disables compute shaders for GL ARB backend. 2025-01-28 18:56:15 +01:00
Vladislav Belov
635a268dd9
Disables GL storage buffers on Mesa.
This is a workaround to avoid disabling GL storage buffers completely.
Because they might not work or might lead to a decreased performance.
We need to investigate that further when we have a local reproduce.
2025-01-28 01:40:47 +01:00
phosit
ec6ed7f224 Remove deprecated functions in map generator
Map generation scripts should use the new interface introduced in
6ce2fc53ea.
2025-01-27 17:50:39 +01:00
Paul Robinson
5b98a647dc Adding Engine Version and Mod name/version checks to multiplayer handshake.
Incrementing protocol version as handshake messages have changed.
2025-01-25 07:39:32 +01:00
Dunedan
2ea183d744
Allow to check multiple locales at once 2025-01-21 11:01:42 +01:00
Dunedan
bcdbe2e580
Add the ability to specify which rules to check 2025-01-21 11:01:40 +01:00
Dunedan
25e83d603f
Check for wrong whitespaces in project name
This adds checks to check for missing non-breaking space in "0 A.D.".
2025-01-21 11:01:37 +01:00
Itms
e1ecc4a743
Fix unix-build tarball inclusion of text files
The .txt were wrongly send to a subdirectory named `.` and the files
converted to Markdown were forgotten.
2025-01-20 22:03:07 +01:00
Ralph Sennhauser
3aa95b7a28
Prefetch tarballs in bundle pipline
Fetch third party tarballs for source packages so they will be bundled
in source release tarballs.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-01-20 16:58:37 +01:00
Daniel Roschka
274500eb37
Always use STUN for hosting games using the lobby
This makes using STUN mandatory for games hosted using the multiplayer
lobby. The motivation for that is a reduction in complexity, because
right now if STUN is disabled we use a home-grown STUN-like logic, which
got implemented before Pyrogenesis got STUN support.

That home-grown logic relies on a custom ejabberd module (mod_ipstamp),
which inserts the external IP-address of a host in the response messages
when a host registers a game. Originally mod_ipstamp was also used to
inform all potential players of a hosts IP-address, however that has
already been removed to let hosts to only share their IP-address with
players actually joining their game.

Removing the home-grown logic and instead always relying on STUN removes
complexity in Pyrogenesis and the lobby server and also eases hosting
games for players, as they don't have to figure out anymore whether they
need to enable STUN or not.

These changes shouldn't negatively impact the ability of Pyrogenesis to
handle different types of NAT or broken networks. There is one
difference though: While the custom logic using mod_ipstamp utilized TCP
as transport protocol, the STUN implementation in Pyrogenesis currently
uses UDP. That doesn't allow hosts with UDP-connectivity issues to
resolve their external IP-address anymore, however without
UDP-connectivity they aren't able to successfully host games anyway, as
the actual game updates are transferred using UDP as well.
2025-01-20 06:52:14 +01:00
Vantha
7485b37ba3 Fix alignment issue with 'imgleft' and 'imgright'
Bug was introduced by f8d2927748.

Fixes #7397
2025-01-19 17:50:16 +01:00
Lancelot de Ferrière
1b1e00d6c4 Remove profiler 2 spike/aggregated regions
This code is unused and was never actually useful.
Fixes #6620.
2025-01-18 12:36:20 +01:00
Lancelot de Ferrière
34844ca9a4 Speedup StartProcessingMoves when mostly idle and many threads 2025-01-18 12:32:28 +01:00
phosit
3a94cb0bfe Fix maybe-uninitialized warning in EntityMap test
Reading `second` on the end of the range is undefined behavior. Invoking
`test.find` in the test never evaluates to the past the end iterator.
GCC doesn't know that and issues a "maybe-uninitialized" warning.
2025-01-16 21:12:28 +01:00
phosit
4be8e0bcfb Tell GCC the maximum value of m_BufLen
GCC thinks `m_Buf + m_BufLen` can be outside the bound of `m_Buf`.
That is because `m_BufLen + len < CHUNK_SIZE` can evaluate to `true`
even if `m_BufLen` is bigger than `CHUNK_SIZE` due to wrapping. Tell GCC
that it's not possible.
2025-01-13 20:05:43 +01:00
Itms
dc830ccf55
Switch main branch to Release 28 2025-01-12 01:27:02 +01:00
Dunedan
60c469bb64
Improve variable naming in check_diff.py 2025-01-11 21:44:52 +01:00
Dunedan
a92a4ff45c
Update the pre-commit hooks 2025-01-11 21:44:52 +01:00
Dunedan
235ea5cfb4
Update supported languages for Alpha 27
This removes Catalan and Scottish Gaelic as supported languages, as they
now both have a coverage of less than 80% and adds Galician and
Portugese which both have 100% coverage right now.
2025-01-10 05:52:02 +01:00
Itms
3727c9dd3d
Small improvement to JS props iteration
Based on a suggestion by phosit on #7404.
2025-01-08 17:55:56 +01:00
Itms
e48b9ea106
Only freeze once the cached JS values of templates
CParamNodes can be quite large, thus we usually cache the JS::Value when
converting them. The AIInterface makes heavy use of it as detected in #7404.

However, the cached values are re-frozen everytime, which is a
significant waste of time on a large number of templates.
2025-01-08 11:39:17 +01:00
Itms
9f023825e0
Export a 10-char commit hash in the build version
This avoids collisions in the user report, fixes #7174.
Update the user report version to account for the new build version
format, fixes #7173.

The build version displayed in the GUI is kept at 5 characters for
main menu clutter concerns.
2025-01-07 13:51:45 +01:00