For cross compiling there is a need to specify an alternative binary for
pkg-config. It's customary to use the environment variable PKG_CONFIG for
this.
Ref: #8135
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit 2b5830e82a)
Signed-off-by: Itms <itms@wildfiregames.com>
Exporting HOSTTYPE prevents cross compilation as HOSTTYPE is used to
override target host arch instead of detecting it from chosen compiler.
This then results in the wrong arch specific source files to be
included. So just don't set it by default and let it to the user to set
it if he so chooses.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit 707abee34d)
Signed-off-by: Itms <itms@wildfiregames.com>
Fixes change perspective features of multiplayer replays following cheat
protection in 023527e56e.
Fixes: #8020
(cherry picked from commit 67eaa8f1a9)
Signed-off-by: Itms <itms@wildfiregames.com>
As noted on #7979, we run into OOMs since commit af32d386b9. The reason is that the default incremental GC budget is unlimited, which actually doesn't perform incremental GCs. Our settings can lead to situation where the incremental GCs don't actually sweep, thus not freeing memory.
SM has a mechanism to avoid OOM anyways with LAST_DITCH GCs, but by default these can only occur ever 30 seconds. Turn this off.
Reported by: langbart
(cherry picked from commit e3e542b1f9)
Signed-off-by: Itms <itms@wildfiregames.com>
The renderer instance is created with new, so use delete.
Direct leak of 80 byte(s) in 1 object(s) allocated from:
#0 0x7fd3c932870b in operator new(unsigned long) (/usr/lib/gcc/x86_64-pc-linux-gnu/15/libasan.so.8+0x12870b)
#1 0x55bbedf25fb0 in InitGraphics(CmdLineArgs const&, int, std::vector<CStr8, std::allocator<CStr8> > const&, ScriptContext&, ScriptInterface&) ../../../source/ps/GameSetup/GameSetup.cpp:654
#2 0x55bbed2bb95e in RunGameOrAtlas ../../../source/main.cpp:684
#3 0x55bbed271b28 in main ../../../source/main.cpp:759
#4 0x7fd3c665f3ed in __libc_start_call_main (/lib64/libc.so.6+0x263ed)
Fixes: #7951
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit 03fd1acd5d)
Signed-off-by: Itms <itms@wildfiregames.com>
Striping is trivial, getting the debug symbols if premake just strips
them silently is a pain tho.
Stripping should optionally be done during install, as we don't have an
install target nor an install-strip target, make it a configure option
which is off by default.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit 1fac3461f9)
Signed-off-by: Itms <itms@wildfiregames.com>
This fixes the ability for users with uppercase letters in their
username to change their passwords, which wasn't possible before on
non-Windows platforms. The underlying issue for that is
https://github.com/processone/ejabberd/issues/4377 and in addition some
inconsistent normalization of usernames in password change requests
by gloox. This commit works around that by always using the local JID
part as username for password requests, which got the nodeprep string
profile already applied.
It also fixes a problem that Windows users which were able to change
their passwords, weren't able to login afterwards anymore, unless they
typed their username in all lowercase in the login form. This was caused
by using the all lowercase username as input for the password hash
function, instead of using the username in the user supplied case.
Fixes#7796
(cherry picked from commit 638391d7ab)
Signed-off-by: Itms <itms@wildfiregames.com>
The new patch-release pipeline takes a git branch originating from a
release tag, applies the changes since the tag onto the nightly build of
the release, and rebuilds the Windows binary.
All resulting changes are sent to the bundling pipeline which builds for
macOS and creates the tarballs and installers.
There will be two instances of the bundles pipeline: the main one will
keep tracking the main branch and providing biweekly bundles of the next
release, while a new patched-bundles pipeline will be manually used to
generate patch releases.
(cherry picked from commit 51ab929926)
Signed-off-by: Itms <itms@wildfiregames.com>
Shrinking GCs dump the JITted code, which leads to redundant recompilations, lowers performance, and makes profiling JS more difficult.
They may still happen if the runtime is at risk of OOM.
(cherry picked from commit af32d386b9)
Signed-off-by: Itms <itms@wildfiregames.com>
Since 0eed117e6d exceptions from the map generation script are rethrown
in the main thread but not all of them are catched.
This defect is already fixed in the engine with 82513c9104Fixes: #7620
(cherry picked from commit 56abf84da2)
Signed-off-by: Itms <itms@wildfiregames.com>
This ensures the XMPP connection gets properly terminated when leaving
the lobby.
Fixes#7504
(cherry picked from commit 312c6e8165)
Signed-off-by: Itms <itms@wildfiregames.com>
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.
(cherry picked from commit fcd3fc2aa3)
Signed-off-by: Itms <itms@wildfiregames.com>
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.
(cherry picked from commit 18d7746c84)
Signed-off-by: Itms <itms@wildfiregames.com>
This fixes the potential edge-cases of icon not showing, like in Gnome's dash for example.
(cherry picked from commit 26acb9df22)
Signed-off-by: Itms <itms@wildfiregames.com>
Fix nvtt build to support cmake-4, while at it also fix other
related outstanding cmake issues in nvtt.
Fixes: #7538Fixes: #7764
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit 263b481442)
Signed-off-by: Itms <itms@wildfiregames.com>
It seems current checks for GL 4.2 aren't enough so just disable
compute shaders for GL 4.2. Fixes#7734.
(cherry picked from commit fa3fb5d064)
Signed-off-by: Itms <itms@wildfiregames.com>
There was an out of bounds access during binding a uniform buffer on
GL. Fixes#7567, #7598.
(cherry picked from commit bce6e2c238)
Signed-off-by: Itms <itms@wildfiregames.com>
SpiderMonkey 98 introduced a size heuristic for the nursery GC region
(https://phabricator.services.mozilla.com/D136637). As this heuristic
uses a wall-clock time duration, it results in a severe performance
regression on slower systems for our use case.
This commit adds a workaround to turn off that heuristic, by telling
SpiderMonkey that a "page load" (something which doesn't have a meaning
in the context of pyrogenesis) is in progress, as that heuristic is
disabled for page loads.
Co-Authored by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Fixes#7714
(cherry picked from commit 11dd480b67)
Signed-off-by: Itms <itms@wildfiregames.com>
Users may generate key presses that don't map to a distinct SDL scancode
and will be mapped SDL_SCANCODE_UNKNOWN instead. Using the same ID for
unmapped hotkeys means any such key press will execute unset hotkeys. As
luck would have it in #7644 this leads to calling "Custom exit to
desktop" if the hotkey is unbound as is the default.
So simply use a code for unused hotkeys that doesn't map to any SDL
scancodes.
Fixes: #7644
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit f10526284f)
Signed-off-by: Itms <itms@wildfiregames.com>
The Linux agent now runs Docker in rootless mode for additional
security. Operations inside containers must be run as root to match the
underprivileged user running Docker.
(cherry picked from commit b831b1f559)
Signed-off-by: Itms <itms@wildfiregames.com>
If you run as root then created files will be owned by root, this is
expected behaviour and not messing with permissions as stated in the
error message.
Running in a container the root user may map to the user starting the
container while all other users would need mapping to be able to work
with a bind mounted a checkout.
Further Debian patches out the root check to be able to build on their
builder.
Given the above remove the check.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit 6738fdbab7)
Signed-off-by: Itms <itms@wildfiregames.com>
Premake v5.0.0-beta4 replaces the LinkTimeOptimization flag with a
function linktimeoptimization, use it if available to avoid deprecation
warning.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit df38d4e899)
Signed-off-by: Itms <itms@wildfiregames.com>
- OARS content rating have been updated to version 1.1
- Touch Screens, Keyboard, Mouse have been marked as supported
- Laptop screens and bigger are marked as required to the minimum width of 1024 required by the game
- Fixes the device compatibility page on GNOME Software.
- added a "0AD" keyword to fix an issue with Flathub search feature where searching for "0AD" instead of "0 A.D." returns no results.
(cherry picked from commit 51bbdc6537)
Signed-off-by: Itms <itms@wildfiregames.com>
This allows systems using a tar version not supporting all the required
flags to easily switch to gnu tar.
(cherry picked from commit 2338473da1)
Signed-off-by: Itms <itms@wildfiregames.com>
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.
(cherry picked from commit db35a8494c)
Signed-off-by: Itms <itms@wildfiregames.com>
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.
(cherry picked from commit 635a268dd9)
Signed-off-by: Itms <itms@wildfiregames.com>
This fixes an oversight from d655455304. During a code deduplication, a
check was removed. When looking at the lobby as a dialog (while in
gamesetup), it should be impossible to try to join a game.
(cherry picked from commit 6ac5c376ea)
Signed-off-by: Itms <itms@wildfiregames.com>
The .txt were wrongly send to a subdirectory named `.` and the files
converted to Markdown were forgotten.
(cherry picked from commit e1ecc4a743)
Signed-off-by: Itms <itms@wildfiregames.com>
This is an oversight from 415304db8a and #6660.
This forgotten template cropped up in #7525. It does not contain the
needed components to interact correctly with the player.
(cherry picked from commit 95fb0f9ed0)
Signed-off-by: Itms <itms@wildfiregames.com>
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>
(cherry picked from commit 3aa95b7a28)
Signed-off-by: Itms <itms@wildfiregames.com>
Used to prefetch all required tarballs to build pyrogenesis later
without network access as is common for Linux package build and some
other CI environments.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit f9a43c8c40)
Signed-off-by: Itms <itms@wildfiregames.com>
On low vertical resolutions when playing games with 8 players in 4
different teams, the summary will overflow the available vertical space.
This commit ensures that in such a case the buttons below the summary
are still clickable by ensuring they stay always on top of the summary.
(cherry picked from commit 4d19935f48)
Signed-off-by: Itms <itms@wildfiregames.com>
This fixes the vertical alignment of the team summarized values on the
summary screen.
Fixes#7527
(cherry picked from commit 8b40ce59ad)
Signed-off-by: Itms <itms@wildfiregames.com>
This lead to an error because `addressee` is `undefined`.
Defect introduced in dcb8ef9b52.
Fixes#7466
Reported-by: @Langbart
(cherry picked from commit 068346b502)
Signed-off-by: Itms <itms@wildfiregames.com>
If the new entity did not have Promotion, we would fail to do so.
Not doing this caused ghost units to appear when promoting inside a GarrisonHolder.
Fixes#7472, reported by Langbart.
(cherry picked from commit 1d6f7f3837)
Signed-off-by: Itms <itms@wildfiregames.com>
AI's chat messages are always received by every client. It's not
necesarry to warn about them.
Defect introduced in e04506814a.
Refs: #7466
(cherry picked from commit 8292b0c646)
Signed-off-by: Itms <itms@wildfiregames.com>
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.
(cherry picked from commit 235ea5cfb4)
Signed-off-by: Itms <itms@wildfiregames.com>
The hack uses per-vertex lighting for translucent objects. In the
future we need to use a separate shader.
(cherry picked from commit cf9bc03ee9)
Signed-off-by: Itms <itms@wildfiregames.com>
b90280855f added an additional label to the bottom of the game setup
page for indicating that a game is started from a saved state. This
reduced the space available for tooltips and looked oddly placed.
This commit changes that, by resizing the `SavedGameLabel` and
`GameSettingWarning` objects dynamically so they only take the space
necessary to display their caption. It also tweaks the vertical margins
of the tooltip to allow more lines to be shown at once.
While this still doesn't allow to show all tooltips on low resolutions,
it's now better than with Alpha 26.
(cherry picked from commit 73af7e61dd)
Signed-off-by: Itms <itms@wildfiregames.com>
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.
(cherry picked from commit e48b9ea106)
Signed-off-by: Itms <itms@wildfiregames.com>
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.
(cherry picked from commit 9f023825e0)
Signed-off-by: Itms <itms@wildfiregames.com>
We have multiple renderer backends for a while. So we can't rely on
a single CONFIG_GLES2 macro for disabling features.
(cherry picked from commit 8ee48a164a)
Signed-off-by: Itms <itms@wildfiregames.com>
With curl 8.10 [1] calling curl_multi_remove_handle retruns
CURLM_BAD_EASY_HANDLE iff the handle was removed already and no other
easy handle were registered. This resulted in ENUSRE triggering a
segfault during shutdown as reported. This was fixed upstream after
8.11.1 [2].
Do a runtime version check and for affected version allow
CURLM_BAD_EASY_HANDLE.
[1] curl ba235ab269080dc66e35835c829f7ac4290dbc1d
[2] curl 713182bd196bba014ba77f71176fea3de2236724
Fixes: #7295
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit edde9fb4ee)
Signed-off-by: Itms <itms@wildfiregames.com>
This prevents mods from mutating this value and revealing the map.
Part of this commit is written by @phosit.
(cherry picked from commit c9e76efe7b)
Signed-off-by: Itms <itms@wildfiregames.com>
Script component wrapper attempted to subscribe to messages before the
script component has been registered.
This defect existed since 7c2e9027c2 but was never noticed since there
is no script component wrapper which subscribes to messages. (Only the
script component it wrapps does.)
(cherry picked from commit f932b8b9cc)
Signed-off-by: Itms <itms@wildfiregames.com>
RPI4 returns `false` for `textureCompressionBC` because it doesn't
support formats above BC3. As the Vulkan specification requires to
support all BC formats to have `true` for `textureCompressionBC`.
(cherry picked from commit 0467d27b07)
Signed-off-by: Itms <itms@wildfiregames.com>
Introduced in d9d1f1bbeb.
This allowed draining an enemies metal resources by ordering spy-request
for that player.
Fixes#7230.
(cherry picked from commit 015aa0349b)
Signed-off-by: Itms <itms@wildfiregames.com>
Ideally the AI would try to carry on and recover gracefully but the code is setup in such a way that this seems like it would lead to a lot of different bugs down the line.
With help from @langbart on QA and code.
Fixes#7425
(cherry picked from commit c20ca02911)
Signed-off-by: Itms <itms@wildfiregames.com>
The current code could end up with savegameID being undefined, false, a filename string, or null depending on the code path taken.
Adapt C++ in consequence.
(cherry picked from commit a8fc3cf254)
Signed-off-by: Itms <itms@wildfiregames.com>
Observers have the ability to change the currently displayed player, and this broke the logic of commit f3f695b90e.
By instead storing the displayed player in CmpOverlayRenderer, we can remove the workaround to set a 'dirty' flag as well.
(cherry picked from commit 3756e12701)
Signed-off-by: Itms <itms@wildfiregames.com>
Docks are generic and have all ship entities. This comes to play notably when
they are captured. This is currently not the case for special docks (Crannog and
Cothon). For consistency they are given ship entities that are trainable by
other civilizations.
Also, the Crannog was not updated with the naval overhaul and still had the
trireme and bireme entities. They are now removed.
Fixes#7426
(cherry picked from commit 5c25b6f644)
Signed-off-by: Itms <itms@wildfiregames.com>
This increases the height StoneButtons and TabButtons, so that a
double-spaced caption does fit on them without significant overflow.
Exempt from that are the StoneButtons resembling lists in the main menu
and the in-game menu, as changing their height didn't feel right and we
don't need double-spaced captions for them anyway, as they're wide
enough.
The height of StoneButtons got increased from 28px to 32px, while the
height of TabButtons got increased from 30px to 34px.
(cherry picked from commit 33e9cd6126)
Signed-off-by: Itms <itms@wildfiregames.com>
Since 71a61d5f50, formations regularly regroup. However, units already at their correct offset should remain idle. This doesn't happen as we cannot check if we are at destination.
This exposes that and handles things properly... Unfortunately UnitAI has already left the IDLE state at this point, so we still get counted as no-longer idle for a turn.
To fix this, try and detect that particular situation without triggering infinite loops.
(cherry picked from commit 2f7ac026c1)
Signed-off-by: Itms <itms@wildfiregames.com>
Deduplicate a check by moving it to isSlotAvailable.
Based on a patch by @elexis.
(cherry picked from commit eafcb814cd)
Signed-off-by: Itms <itms@wildfiregames.com>
Failed to notice that name and controllable were sometimes changed.
(cherry picked from commit e15ffd70b7)
Signed-off-by: Itms <itms@wildfiregames.com>
Since 0eed117e6d exceptions from the map generation script are rethrown
in the main thread but not all of them are catched.
(cherry picked from commit 82513c9104)
Signed-off-by: Itms <itms@wildfiregames.com>
Include new/updated skirmish maps and brand new random maps by @real_tabasco_sauce
Revert name and description strings only
(cherry picked from commit da761ca501)
Signed-off-by: Itms <itms@wildfiregames.com>
- Apply Scale
- Rename mesh from Circle to viking_longship
- Remove useless material
- Add prop-projectile-prop point
Reported by: @Langbart
Fixes#7424
(cherry picked from commit bce3a2a170)
Signed-off-by: Itms <itms@wildfiregames.com>
based on a patch by: aeonios
`off` means that the territory visibility cannot be changed
`hidden` means that it's hidden by default but can be enabled
`visible` means it's visible by default
(cherry picked from commit fd78034885)
Signed-off-by: Itms <itms@wildfiregames.com>
This improves the alignment of the items of the top menu in-game. Icons
are now better centered and don't overflow anymore and the build label
text doesn't stack on low resolutions anymore either.
(cherry picked from commit 1aeb19b535)
Signed-off-by: Itms <itms@wildfiregames.com>
The intent of this branch was to not change the names when a saved game
is loaded. So that one can see who was where in the saved game.
It was implemented wrong: The names didn't change when no savegame was
loaded and changed when a saved game was loaded.
This commit make the soved game case and no saved game case consistent.
Defect introduced in b90280855f.
(cherry picked from commit fb9b02a9ba)
Signed-off-by: Itms <itms@wildfiregames.com>
There is no way to show the `PlayerColor` as disabled. As the player
color is vilible without this it can simble be hidden when it is
disabled.
Defect introduced in b90280855f.
(cherry picked from commit 5c860c3121)
Signed-off-by: Itms <itms@wildfiregames.com>
`PlayerData` didn't contain the playerNames when serialized because they
should not be loaded when a new game is made. This lead to the issue
that client didn't receive the initial player names of saved games.
Now `fromInitAttributes` gets as a second parameter whether the
initAttributus are from persistent settings.
Defect introduced in b90280855f.
(cherry picked from commit b52c1c137f)
Signed-off-by: Itms <itms@wildfiregames.com>
When a saved game gets loaded ai's aren't always selectable. This lead
to errors when an ai actually gets selected.
Defect introduced in b90280855f
(cherry picked from commit 199aa8ac35)
Signed-off-by: Itms <itms@wildfiregames.com>
`GameSettingsWarning` where only rendered when the settings change. When
a saved game is loaded it's possible this setting is enablet without the
setting being changed.
Defect introduced in b90280855f.
(cherry picked from commit 8636e4d0fd)
Signed-off-by: Itms <itms@wildfiregames.com>
Make it consistent with the "Browse Maps" buttow which is also
unavailable when a saved game is loaded.
Defect introduced in b90280855f.
(cherry picked from commit 4c48661b4f)
Signed-off-by: Itms <itms@wildfiregames.com>
When loading a saved game the user can't change the maps but when
receiving the initAttributes from the host the map is "changed".
Defect introduced in b90280855f.
(cherry picked from commit 96aa283e6a)
Signed-off-by: Itms <itms@wildfiregames.com>
Reload all cached phase data when switching civ.
Add missing query for the generic phase technologies to the phase idents.
(cherry picked from commit 33111dc816)
Signed-off-by: Itms <itms@wildfiregames.com>
Instead of using the file modification date, this uses the MD5 hash of
the file holding the content of the splash screen for the version check.
This ensures the splash screen isn't unintentionally shown again when
just the modification date of the file changes.
Fixes#4399
(cherry picked from commit ab0aee4cfa)
Signed-off-by: Itms <itms@wildfiregames.com>
This improves the layout of the summary screen, so text and displayed
values fit better. By doing so this also removed the need to specify a
"verticalOffset" for values, as they get vertically centered now.
(cherry picked from commit 1268854587)
Signed-off-by: Itms <itms@wildfiregames.com>
When running 0ad with a language other than English, there are various
places where text doesn't properly fit. This adjusts the UI in a bunch
of these places to better accommodate longer strings as they appear in
other languages than English and to make the UI look more uniform in
general.
(cherry picked from commit fc7e4ae69e)
Signed-off-by: Itms <itms@wildfiregames.com>
Fix normal map orientation for Terrains
- Terrains use "OpenGL" style normal maps, while 3D assets use "DirectX" style normal maps. So, fix all of the normal maps I can find with incorrect style normal maps.
- Set most terrains to angle="0" for more accurate shading. This negatively affects "tile" terrains, which we want to have a 45 degree angle, but helps all other terrains. aegean_paving_01 is an example of a permanent fix for this, which I will work on with Stan for R28.
- Adds a couple of really nice paving terrains for a new "Italy" terrain set.
- Adds a nicer "furrows" normal map for farmland terrain
- Improved persian city tile normal by @wraitii
(cherry picked from commit ba24b46693)
Signed-off-by: Itms <itms@wildfiregames.com>
New AO maps for statues by @nifa (which fixes the Discobolus ao error)
New quiver for Persian Immortal
Remove bad smoothing for Chinese rice hat
Remove some noise from a couple of structure skins
Add garrison flag prop points to Greek theaters
Make garrisoned flags unselectable. Requested by @real_tabasco_sauce
Update han_ricehat.dae
(cherry picked from commit 67bed64fd1)
Signed-off-by: Itms <itms@wildfiregames.com>
Only the sender and the recipients receive the chat messages.
This commit only has an affecto on messages where the addressee(s) are
selected through the dropdown. Addressee(s) selected with a "/" command
are still sent to evevyone and filteret by the receiver.
(cherry picked from commit e04506814a)
Signed-off-by: Itms <itms@wildfiregames.com>
`Engine.SetViewedPlayer` and `Engine.SetPlayerID` could be used to
reveal the map from GUI scripts and the in game console.
This is prevented by querying the simulation whether this player is
allowed to call thous functions.
These two vulnerabilities were introduced with their respective
features:
20e7d2224a introduced SetPlayerID to allow controlling other players
using the developer overlay.
a2f7d4d82a introduced SetViewedPlayer to allow observers to change the
perspective.
(cherry picked from commit 023527e56e)
Signed-off-by: Itms <itms@wildfiregames.com>
Also drop build version component as we never used it in earlier
releases either. This will also make replays et al be stored in a
directory 0.27.0 similar to earlier releases.
The build version component was introduced in 028ec40165
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
(cherry picked from commit fb24d75f0e)
Signed-off-by: Itms <itms@wildfiregames.com>
The font size in the error message dialog for incompatible save games
was way larger than usual. This fixes that, by removing the arbitrarily
applied font size.
(cherry picked from commit 870b356ad9)
Signed-off-by: Itms <itms@wildfiregames.com>
Fix `NetServerTurnManager` from pausing the simulation forever after a
client sent a bad hash to it and disconnects before the bad hash has
been processed.
A client that sends a wrong simulation hash to the `NetServer` and
disconnects before the server compares that hash causes a message box to
appear and the game to be paused forever.
94e5d88169 introduced the bug by missing to delete `m_ClientStateHashes
upon `UninitialiseClient.
This causes `m_ClientData[hashPair.first].isOOS = true` to insert a
client with blank values that the `NetServerTurnManager` will wait
forever and hence the message box about an OOS with no players being OOS
is shown (the playername is emptystring).
5ebf2020b0 exposed the bug by making observers able to lag behind,
providing a longe enough timeframe for this to occur.
Fix:
Deleting `m_ClientStateHashes` upon disconnect solves the broken
message box and the pausing.
(cherry picked from commit d12c015d43)
Signed-off-by: Itms <itms@wildfiregames.com>
These ship types were introduced in d51b4687e9. Danubius isn't designed
to use these ship types, as it uses ships to garrison 30 units.
(cherry picked from commit 5b33dd0143)
Signed-off-by: Itms <itms@wildfiregames.com>
-Increase default arrow firepower for buildings, decrease garrisoned firepower.
-Add a 20% building damage by by phase.
-Give the fortress a minimum range.
-Allow murder holes to be researched from the fort.
-Sentries uses a multiplicative bonus instead of adding 1 arrow.
-adds a new tech to the fort to increase its default arrows by 6.
-lets building arrows target the closest unit by default.
-adds player control of building arrows.
-adds a tooltip to explain how to control arrows.
-Uses "F" for focus fire and concurrently use "F" for force-attack, since "C" is capture.
- Fix pinyin on The Art of War technology
- Add Doric SpecificName of the Agoge
- Add SpecificNames of Town and City phases, as well as of overlooked
Village phase (the latter for Structure Tree purposes)
- Add SpecificName for the Mauryan wonder
This moves the lobby menu item to the top of the multiplayer menu to
make it easier to find for new players and as it's probably to most used
item in that menu anyway.
Grab upstream patches adding support for building premake on riscv64
[1], loongarch64 [2], and e2k [3].
[1] 82c9d90495940e2d0d574e1c7849e9698f23b090
[2] 928397f72c00979d57ec4688cb1fb26ec7f2449b
[3] 5c524b6d53307bcb4ba7b02c9dba20100df68943
Fixes: #7346
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Instead of removing units from the roster, we provide actors so they can be reskinned into more historically accuracte units.
Add an auxiliary spear cavalry actor and portrait
Improve the auxiliary javelin cavalry actor and portrait
Add a levy auxiliary spearman actor and portrait to replace triari
Add a champion "first cohort legionary" to replace the extraordinarius and its portrait
-Part one of updates to roman reforms.
-account for the use of antesignanus instead of lanciarius
-train the onager from the army camp and add non-random arrow balance.
The option --atlas is oddly different than any other feature flag,
change it to be in line with the others and enable it by default. The
new option is --without-atlas.
As the WX binaries aren't precompiled for Windows automagically disable
atlas there for users running the batchfile through filemanger if WX is
missing.
On *nix not providing a valid wx-config whith enabled atlas is
considered an error.
Fixes: #6401
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
The number of options is increasing, add a --help option to print usage
and available options.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Enable the Tips and Tricks page to show multiple images for each tip.
Add a small GUI panel below the image for switching between them.
Only show it when the current tip has more than one images.
Introduce tipfiles.json to assign images to the text files.
(And stop of relying on file naming)
Add a tip about wonders, and make some slight changes to other texts.
Improve existing tip images and add a bunch of new ones.
-Cavalry Javelineer moved to the front of the cavalry in the CC to match other civs.
-Allow the barracks to train both types of the immortal and ensure the unlock tech applies to the archer.
This account is only used for fixing technical bugs in translations and
not doing translations themselves, so let's exclude it from the credited
translators.
According to #6936 some lower devices (especially virtual ones) might
report more memory than regular ones. So we can't use the memory
amount as a score for now.
After the git migration update-workspace.sh doesn't build libraries
anymore. Remove variables and options no longer of use.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This patch addresses issues concerning a1796ed71f:
Allow for a more elegant implementation of observer flares.
And still display flares even if the sender is lagging behind:
Split off flares from simulation commands.
Remove the new, problematic 'observer commands' entirely.
Provide an engine function 'SendNetworkFlare' to the JS interface.
-> which sets off the (pretty ordinary) transmission process.
Add a new type of net messages exclusively for flares
-> contains the flare's position and its sender's GUID.
This is the version used for Windows already and contains the fix for
building against spidermonkey on all Linux distributions.
Backport patch to fix running on *BSD. Also make clang default on *BSD
as a toolset will always added to generated makefiles in beta3, so it
won't magically do what we expect when not adding --cc explicitly.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
With the removal of the premake sources all exclude directives in
.pre-commit-config.yaml are obsolete, so remove them.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Markdown linter requires a heading and the heading not ending in a dot,
make the readmes not trigger a violation.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Let the gerousia train heroes as in com mod
move the champ move speed tech to the syssiton in p1, make it cheaper as in com mod.
let the syssition provide 10 pop space to improve feasibility early in the game.
make the agoge a civ bonus.
increase the champion base attack rate from 1.0 to 0.9 so that the unit is inherently better than other champ spearmen, not just from upgrades availablity.
Currently we don't mix storage images and storage buffers in the same
shader. Also we don't sample textures when we use storage buffers.
In the future we need to avoid shifting descriptor sets.
This adds a patch for a bug in SpiderMonkey, preventing compilation of
SpiderMonkey with Python >=3.12.8 and Python >=3.13.1. The bug is
tracked upstream in https://bugzilla.mozilla.org/show_bug.cgi?id=1935621
This replaces all links pointing to trac with their corresponding links
to gitea. Also replace http with https while at it.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
We use a shader with 64 bones by default to consume less uniform memory.
But if we meet bigger skeletons we batch and handle them afterwards.
In the future we need to sort the input models to have less changes for
bound buffers. Also we might want to skin up to 4 models per a single
dispatch.
The idea is similar to the storage images but we need a separate
descriptor set in Vulkan and a program interface to gather used buffer
in GL.
For Vulkan we also need to track buffers to free used descriptor sets.
Ranged units -25% dps in the form of attack rate
Melee units decreased armor (5h5p->3h3p for CS infantry)
Melee units 50% more damage
Building and siege hack armor adjusted to compensate
Since 7d6a0c695a we use gmake2 instead of gmake, add a check in case
someone calls premake without the wrapper script update-workspace
telling them to use gmake2 instead as support for gmake was removed.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
- Reduced the MaxGatherers value for the smallest trees with 100 or
less wood from the default (8) to 6 or 4.
- The affected trees are Bush (4), Atlas Cedar Sapling (4), Cretan Date
Palm (Short) (6), and Fir Sapling (4).
- Small trees with 100 or less wood that already had a MaxGatherers
value lower than the default (8), such as Bamboo (Single) (1) and
Baobab Sapling (2), were left unchanged.
ChainPlacer.js creates a new array that it fills with the -1 value before computing its clumps. This is slow.
By simply storing values differently, we can avoid doing that altogether, leading to faster mapgen.
Hard to say in general but I think this might be about 3-4% faster on a typical map.
The migration to git broke the translation of language names in the
credits, as the translators.json, necessary for extracting the language
strings wasn't present anymore when running update_templates.py. This
commit should fix this.
- Shallow-freezing of objects is never used in our codebase, so remove
that code path.
- Deep-freeze is bugged in recent versions of SpiderMonkey (see bug
https://bugzilla.mozilla.org/show_bug.cgi?id=1930258). Until a fix
and/or a better API is provided, reimplement this feature by
recusively freezing object properties.
- Add tests for the deepfreeze function.
The shell option "set -e" has a tricky, but standard, behaviour:
Anything called on the left side of a || or && token ignores "set -e",
so failure in a command in a subshell called on the left side of "|| die"
does not prevent the execution of the following commands in the subshell.
Adding explicit "|| die" calls after each command that could fail (and
should interrupt the process) works around this behaviour, by emulating
the intuitive "set -e" behaviour.
Unless minimal cflags is set add -Og or equivalent to CXXFLAGS for debug
build configuration.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
FORTIFY_SOURCE relies on optimizations being enabled which is only the
case for the release configuration. Therefore remove it from the debug
configuration as to prevent the compiler issuing a warning on each
invocation.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
DEBUG is unused by pyrogenesis and unconditionally adding it to defines
prevents building against a non debug version of spidermonkey. This will
allow building only one copy of spidermonkey, which can be trivially be
replaced with the other depending on needs independent of pyrogenesis
debug or release build.
This also allows to build either build configuration against system
spidermonkey, which obviously is either one build type or the other.
Requires a compilecheck until the pc file gets fixed upstream.
A comment in the spidermonkey build.sh says on FreeBSD spidermonkey
debug configuration doesn't even build and so pyrogenesis debug build
wasn't possible either.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
During the removal of glooxwrapper the function GetJID was mapped to
getID. This results in NetClient querying for host jid not getting the
right value which prevents hosting a game in the lobby.
Reported-by: Dunedan
Refs: #7203
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This uses ./build/workspaces/default as location for generated build
files as well as build products. Using the name "default" to avoid the
dilemma gcc vs clang vs premake generator. Doesn't impact scripts
already using --outpath and allows running premake5 --help without a
wrapper.
Also update .gitignore to make using arbitrary workspaces cleaner.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This option doesn't handle includes, further we rely on system includes
and pkg-config to locate dependencies.
For systems where installing into local is reasonable this paths should
already be in system/ld paths. So in practice this offers no value.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This option is needed to be able to use more than 2GB on 32bit Windows
builds.
Having to explicitly enable this turns out to be a pitfall. Release
builds are done with this option enabled and when then building from
source and running out of memory it's not immediately obvious what the
reason is.
The documented intent is that this behaviour might be useful to find
memory leaks. The large-address-aware enabled build already perfectly
serves this role this days and the memory pressure is an important
reason for the ongoing Windows 64bit build efforts. Also there are
arguably better tools for this purpose.
Refs: commit a8403bd7e5
Refs: issue #1619
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This wrapper was meant to support multiple C++ ABIs with a single
pre-built gloox library wrap as a C library. A new ABI change was
rejected a few years back, so this will probably take a while for it to
be on the table again. With the bug tracker and mailing list currently
unavailable and known TLS issues we might have replaced gloox by then
anyway.
Supporting multiple ABIs with the current setup isn't an issue either
and is already done for 32bit vs 64bit ABI on Windows.
Therefore use gloox types directly in lobby code instead of wrapper
types and delete the wrapper and build-integration.
Migrate to override where applicable, as it helped avoid subtle
differences in signatures and finding missing inheritance of LogHandler.
Finally use version check instead of os check to work around Windows
using the 1.1 development branch instead of releases.
Fixes: #7198
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Querring the audio device name may fail. The name is only used for the
sake of logging it for debugging. Avoid querry failure to be fatal and
insted just log the issue.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
With version 1.24.0 alcIsExtensionPresent() has dropped case insensitive
string comparison [1], use upper case names.
The internal strings are uppercase since the first git commit importing
openal 17 years ago.
[1] upstream commit 785f794141d62a4c308db26aa4a4819e6a92525e
Report: https://wildfiregames.com/forum/topic/125203-crash-on-start-due-to-soundmanager
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Some return values can be assigned to a `const auto`, somewhere `dir` is
mutated so the whole result has to be assigned to a non `const` variable
and once only dir is used, so structured binding isn't used there.
When building a JS::Value from CParamNode, strings have been "interned"
since the conversion was written in dd501b2a5a. This means that the JS
string object could be used outside a JS realm, and also that those
strings could be compared efficiently instead of char-by-char.
This was unnecessary, and the only place in the code where we used
"interned" strings. The upgrade to SpiderMonkey 45 (64b477625d) changed
the name of related methods, and some of them are removed from the
public API in SM 102, so stop pinning and atomizing those strings.
Additionally, the switch of CParamNode to utf8 in 35ed55cfd6 missed one
of the two utf16 handlings, so fix that as well.
In `RunGameOrAtlas` only one of thous flags is used. Using a `bool` is
simpler and less error-prone.
Also reset the variable earlier, so it's easyer to reason about it.
Previously, only merchantmen were able to collect treasures on the sea.
This patch enables all types of ships to do so:
fishing boats, merchantmen, and warships (except fireships).
When a non-incremental build is needed for a PR, the current code cleans
up workspaces and retries, but this leaves the build error in the
console output. This marks the build as unstable, as if warnings were
present.
Instead, let the build fail and instead reschedule a clean build, which
will override the build status in Gitea.
This patch gives observers the possibility to see and send flares.
Players keep their color after resigning and "true" observers flare in white.
Observers render all flares; the ones sent by any player or observer.
Player continue to only see their allies' flares.
The flare notification option is converted into a dropdown.
-> adding the possibility to only receive them as observer.
Modify our cxxtest module so that it generates sources in the
configured build directory instead of the source tree. This simplifies
cleaning build output and .gitignore.
Make test_root.cpp a build target so it doesn't have to be generated on
each run. This means no more building and linking into test target
unless needed either. Unfortunately there is no source for test_root.cpp
and an update to cxxtest might require a manual make clean.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Propagation mousewheel event was introduce to have the opportunity to
parent handle this event if an only if the child doenst handle and the
parent set a handler for that event.
The error foundedd by elexis inside a game relay on the message waw
propagated outsie IGUIObjects to CGUI.cpp that shouldnt be at the
beggin. I forget to stop the propagation when all objects in the tree
was validated, because of that the message was propagate to CGUI.cpp
andd then hanle by camera.
the fix suggest to only propagate the event in the GUI tree, not outside
the GUI tree
Now that we are propagating mousewheel events to parent we need to
explicitly mark that the event was handle in JS and shouldnt be handle
by parent.
this error was informed by Elexis
This PR introduces a new ScrollPanel component with the following
capabilities:
- Scroll Orientation Support: Allows scrolling in horizontal, vertical,
or both directions, providing flexibility for different use cases.
- Partial Object Rendering: Supports partial rendering of objects that
are only partially visible within the scroll boundaries, improving
visual accuracy and performance.
- Boundary-Constrained Mouse Interaction: Handles mouse events strictly
within the panel's visible boundaries, preventing interaction with
objects outside the scrollable area.
- Minimum Internal Size (min_width, min_height): Introduces support for
virtual space management, allowing the panel to maintain a minimum
internal size independent of its actual on-screen dimensions. Even
when the panel is resized, this ensures that the content respects a
defined virtual space (with min_width and min_height), effectively
simulating a larger internal canvas. This is particularly useful for
large content or scenarios where a more extensive scrollable area is
required than the current visible panel.
Cherry-pick upstream patch adding support for -idirafter [1] which
allows us to work around the issue of some distributions bundling the
icu headers with spidermonkey resulting in a conflict.
Further add support to our premake pkgconfig module to allow using this
feature and make use of it for when building with --with-system-mozjs.
[1] premake-core baf145dc388509c953a01bcd964835e2027208bf
Fixes: #5868
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
In `Future` there is a notion of cancelation / stop-request. The task
callback doesn't have such a notion.
Some tasks (like the map-generation) are stopable. It did that in a
thread unsave way.
A task is canceled when the future is destroied or when `CancelOrWait`
is called on it.
With pch enabled WIN32 gets defined for cxxtests xmlformatter.h but not
without resulting in a build failure ctime_r not found which was only
added with C23.
Explicitly define WIN32 for Windows target, to force the intended
code path.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
After 486509d5b9 we no longer use the
bundled sources, remove them.
Also remove the build.sh for building the bundled sources and update
.gitignore.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
The script assumes glad got cloned into glad subdirectory. This is the
case if you follow the procedure outlined in the README, however if you
are using system glad or or glad installed via pip this assumption
doesn't hold.
Therefore relax the requirement on where to get glad from. While at it
add shell option errexit and make the script callable from repository root.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Use patch by Debian [1] replacing python in shebang with python3 and fixing
some warnings with recent python versions.
The reason being some use an alias of python for python3 instead of the
customary symlink. Aliases are only expanded in interactive shells
unless expansion is explicitly enabled.
[1] https://sources.debian.org/patches/cxxtest/4.4%2Bgit171022-2/python3.patch/
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This moves the nightly build to a new Windows autobuilder running a
recent Windows Server version. In this new environment, the Jenkins
agent runs as a normal user connected through SSH. This fixes#7148.
Use the opportunity to use svn directly instead of Jenkins' scm step,
which hangs for 30 min.
Tooltip shouldnt receive any mouse event direct, there is a edge case
when you have a big tooltip and the object that need that tooltip is in
the bottom left, at this moment tooltip is in the same position of the
mouse, current code was returning the tooltip, and the code hide the
tooltip, and find again there is another object that needs the tooltip
and show again. To fix this is just than simple to set a tooltip like
ghost because shouldnt receive any mouse event.
Treat premake like any other dependency and package it separately, this
makes it much easier to bump it in future by making it easier to track
modifications if any.
Moving it to libraries as it is handled the same as other packages. An
argument could be made to have it in build due to it's special nature.
The issue with that approach would be how to handle clean-workspace.sh.
If we split it out we would need a separate clean-premake.sh script and
if we have it cleaned by clean-workspace we through away the download
and already built binary.
Also bump version to 5.0.0-beta2 and backport patch for macOS fix
instead of the Makefile changes. The same fix is needed for gcc-14
(reported upstream), so add a patch injecting unistd.h for Unixes.
Fixes: #6816Fixes: #6632
Refs: #6847
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
- Switched to CMake for configuring and building the doxygen Website.
- Set the minimum requirements to CMake >=3.18.4 and Doxygen >=1.9.1.
- Rewrite the LICENSE.txt and docs README.txt to markdown.
- Add the folder which is used in the README to gitignore.
- Add a custom style to the doxygen website based on the docs webpage.
- Update CI to use the new Doxygen Build process.
Closes#7052
- Generate entity.rng as part of the nightly build, refs #6976.
- Generate docs from a checkout of the nightly build.
- Publish them to docs.wildfiregames.com.
Instead of looking up the location of spirv-reflect for every shader,
this is now being done once and cached for all shaders. This results in
shader compilation being slightly faster.
Instead of compiling SPIR-V shaders twice, once with debug info and once
without, this uses `spirv-opt` to remove the debug info from the SPIR-V
shaders with debug info. This results in notable performance gains, as
stripping the debug info from existing shaders is much faster than
compiling them.
As a result of this change the contents of the non-debug shaders change
once. That's because shaders with debug info contain much more
instructions and therefore more result ids. Stripping the debug
info from shaders results in different result ids being used as when
generating ones without debug info. While that doesn't result in a
difference in the functionality of the shaders, it's a difference in
their binary representation, causing their content hashs and therefore
file names to change. After that one-time change the result ids are
reproducible again.
Commit 4e9e950c8f increased the chicken
size by 1.5x, which made them noticeably larger than foxes and caused
their movement speed to fall out of sync.
This is a correction Langbart proposed on Phabricator after the commit
to moderate the chicken upscaling to 1.3x and adjust their speed for
better synchronization.
Authored-by: @Langbart
Original source: https://code.wildfiregames.com/rP27910#61427
"bind.hpp" was moved in boost-1.39. [1]
Placeholders were moved in boost 1.60. [2]
Since boost 1.73 placeholders defined in global namespace are
deprectared. [3]
Boost 1.76 added support for using std::placeholders with
boost::bind. [4]
This change uses the new, cough, location of the header and
std::placerholders for boost 1.76 plus to silence the deprecation
warning there.
Following commits are from https://github.com/boostorg/bind.git
[1] 8f507b9aeca643ca78e6a712b6d300720627c0ed
[2] db56733e4ed2125944b89e01cf36a9e451dd36f5
[3] 2797f0dc33caaae126a416bf613bd11267ba3353
[4] c85b31e3d200dda2a73cf0027a82c6d8e29066f8
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
The gmake action is long deprecated and subject for removal in the
future. Switch to gmake2.
A major benefit is gmake2 is much better at parallelizing, and so on a
16 core I get a speed up of over a 30%.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
After 26994b156b just removing the
libraries/source directory will delete files under version control
needed to build the packages.
Use git clean instead to get back to a clean slate.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This patch introduces phase emblems on both sides of the player's name
band in the middle panel. The emblems represent the current phase of
the selected player's civilization: I (Village), II (Town), III (City).
This information is also added to the associated tooltip and is
displayed only to mutual allies and observers.
Fixes#6849
See also: https://wildfiregames.com/forum/topic/107851-introduce-badge-to-indicate-the-phase-6849/
Instead of redefining the VkDescriptorType enum for every shader, only
define it once. This avoids unnecessary computation and slightly
increases performance.
Fixed a bug where hotkeys were not being reset properly, ensuring that
all hotkeys are now cleared when expected.
Corrected improper use of forEach with string character access,
replacing it with a valid iteration method over characters.
Removed unnecessary and dead code to improve code cleanliness and
maintainability.
- Players now receive flare chat notifications mentioning the sender's name.
- Clicking the notification moves the camera to the flare's location.
- The feature can be toggled in the game options and is enabled by default.
Fixes#6212
"-rdynamic" is a linker flag. The gcc frontend gracefully ignores it but
not clang. Remove it from CXXFLAGS and only leave it in LDFLAGS.
Fixes: #5582
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
With the migration to gitea the links in the help menu of Atlas need to
be updated to point to the new locations.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
At least on Linux this resulted in the help menu in Atlas not being
populated. This fixes the issue.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
b2cdb1e6b4 broke compiling of SPIR-V shaders on Windows, as the output
of `spirv-reflect` contains CRLF as line separators there. This commit
fixes that.
Now It's not hardcoded what is done if a button is pressed. The caller
can decide that.
Previously one had to call this function and then overwrite the on Press
attribute of each button.
Rename "Visibitily" to "Visibility" in setButtonCaptionsAndVisibility.
During the mogration to git e9d1cb6cc7 removed the
`lint-translations.sh` script which was used together with
`check_translations.py` to lint POT- and PO-files. By doing so it
removed a valuable option to find problems in translations.
This commit undos that by merging the functionality of the removed
`lint-translations.sh` and `check_translations.py` into the latter
one. The new logic is easier to maintain, produces less false-positives
and has some unit test coverage.
This drops the program name from the SPIR-V shader file name, which
allows deduplicating shaders belonging to different programs. While that
has no significant impact on compilation performance it reduces the
number of required SPIR-V shaders.
One downside this has it that it's not directly visible from the file
name of a shader anymore to which program it belongs.
The category 'Game Session' didn't have any more space for upcoming new
entries.
Changes:
-Split 'Game Session' into 'Display', 'Chat & Notifications', and
'Gameplay'.
-Move some options out of 'General'.
-Updated the option categories' and some individual options' tooltips.
For the sake of vendored cxxtest. Distributions are advised to use
system cxxtest anyways.
From the package description:
This is a convenience package which ships a symlink to point the
/usr/bin/python interpreter at the current default python3. It may
improve compatibility with other modern systems, whilst breaking some
obsolete or 3rd-party software.
As this is a Debian Buster based CI and the package is only available
from Debian Bullseye forward do the symlinking manually instead.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Add option to build-source-libs and premake to uses system provided
cxxtest.
Closes: #5792
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Update source build.sh to use upstream tarball and drop any custom
patches at the same time.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
To disable tests we carry a patch which allows disabling test by
appending DISABLED to the test function name. Instead just do as
upstream says and prepend the test function so it won't be recognized as
a test any longer.
The docs suggest to prepend x but anything will do. Continue to use
DISABLED_ but as prefix which is actually already in use in one case.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
GlCanvas currently doesn't support runtime selection of GDK backend [1].
Therefore to run Atlas under Wayland wxWidgets needs to be built with
GLCANVAS_EGL which is usually not the case to support X11 at the same
time.
Check if the EGL backend is available and if not and running under
Wayland force use of XWayland with the GLX backend.
[1] https://github.com/wxWidgets/wxWidgets/issues/22325Closes: #6939
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
It's now possible te get an exception from a function in a task.
The interface is like std::future: if you call .Get() you will get the
result (as before) or the exception will be thrown.
For each program this parallelizes the generation of shaders by program
combinations. This leads to significantly faster shader generation on
systems with multiple CPU-cores. The resulting shaders are identical to
the ones prior to this change.
This ensures the file names of SPIR-V program combinations and shaders
are reproducible. Up to now they only were if the order of program
combinations in the rules.json didn't change, as the file names
contained the position of the program combination in the rules.json.
With this change files names of program combinations will be named based
on the details of the combination used to create them and the file names
of shaders will be based on their content respectively.
Changing the file names avoids wrong shaders when partially rebuilding
them after a new combination for a program got added in between the
other combinations in rules.json and removes the need for keeping track
of identical shaders in the script. It's also a preparation for being
able to build shaders in parallel, while also keeping the result
reproducible.
- Small popup page accessible from the main menu via Learn to Play.
- Lets the player read through the tips with 'Previous' and 'Next' buttons.
- Tips continue to be shown on the loading screen.
-> but there without the scrolling ability.
- Added two new hotkeys for quicker tip changing (item.prev and item.next)
-> set to the left and right arrows respectively by default.
- Responsible scripts are placed in gui/reference/tips/.
- The tip text files have been moved to gui/reference/tips/texts/.
- Tip image files have been moved to art/textures/ui/tips/.
- Added a series of new sprites (textures in art/textures/ui/tipdisplay/)
-> comprises a title decoration, a bullet point sprite, and a new button
style.
This fixes -Wdeprecated-copy with FreeBSD's clang17.
This commit reverts a change from 8a32b0b3d4, where a private copy
assignment operator was deleted, whereas it was needed to explicitly
declare the copy constructor, refs #5294.
Added in aa44bac652, the "atomic" accumulated timer is based on a
structure that mixes atomic and non-atomic access, which is not fit to
be converted to std::atomic.
Additionally, it is only used in a single situation where benchmarking
is not essential to us.
The compare-and-switch operation in this situation does not need to be
atomic.
This class must be copyable, so the CAS'd flag cannot be adapted to use
std::atomic.
Gray out the "Cutoff distance" slider on the "Graphics (advanced)" tab
of the game settings screen when this distance is ignored because the
"Cover whole map" configuration option is ON.
This allows build-archives.sh to fall back to vendored spirv-reflect if
it can't be found in PATH.
Also update error messages to suggest additional alternatives.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Usually not available in Linux Distributions as it isn't customary to
package the SDK but only the bits needed as separate packages.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
The script build-archive.sh sets a variable SPIRV_REFLECT, even respects
it if it's set in env but without support from the compile.py script for
it there isn't much point.
This commit adds support SPIRV_REFLECT in compile.py and and adds a
fallback to use vendored spirv-reflect for when the envvar is unset and
the tool can't be found in PATH
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
build-archives.sh generates output in archives, add it as well as the
rules files for spirv shaders which might be fetched during build to
gitignore.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Due to "set -e" the script terminates when the required tools aren't
found and the arguably helpful messages later on won't be printed.
Make the initial check for tools non fatal and allow for the later check
to take care of missing tools.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Currently you have to fetch translations first so they can be filtered
by build-archives.sh without the script failing.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
A total of 16 possible AI names are added to four civilizations.
Athenians: Callias, Chabrias, Conon, Ephialtes, Nicias, Phocion, and
Pisistratus
Britons: Cassivellaunus, Imanuentius, and Mandubracius
Iberians: Litennon
Spartans: Anaxandridas, Cleomenes, Eurybiades, Gylippus, and
Leotychidas
The lists are sorted alphabetically.
As compile.py only creates shaders for program combinations which don't
have already existing shaders on disk, this removes all SPIR-V shaders
prior to rebuilding them to ensure they actually do get recreated.
This refactors the script for cleaning the translations to get the
same result by doing less. This is achieved by the following changes:
- Use glob-patterns for finding the files to clean more efficiently,
without the need to exclude collected files again.
- Only write files which are supposed to be modified (previously all
portable object files did get rewritten by this script, no matter if
it did change something or not).
- Stop searching for sections in files to clean up, once they are
already passed.
This commit enables a bunch of unrelated ruff rules, which only require
minimal changes to the code base to enable them.
The rules enabled by this commit are:
- check the use of datetime objects without timezone (DTZ005)
- check the performance of try-except in loops (PERF203)
- check the number of function arguments (PLR0913)
- check for mutable class defaults (RUF012)
- check for the use of secure hashing algorithms (S324)
- check for raising base exceptions (TRY002)
- check for raising other exceptions where TypeErrors should be raised
(TRY004)
This ensures the same Python target version used for `ruff format`
is used for `ruff check` as well. It also allows ruff, even if it's not
run through pre-commit, to use the correct target Python version.
Previously when checking if two SPIR-V shaders are identical the
hashs of their file content would be compared and afterwards their
(unhashed) file contents as well. Comparing the file contents isn't
necessary, as the hash function used is a cryptographic one, which
guarantees the hash can be used as a representative of the hashed data.
The icon/portrait of the middle panel when a single entity was selected
was very subtly (4 px) overflowing its lane and invading that of the
entity's name. This change fixes that by:
- Raising the top of the middle panel by 4 px to leave room for the
portrait/icon. This avoids having to shrink it and lose quality.
- Distributing the 4 px of difference in height in the statistics area
by lowering 1 px the top bar, 1 px the middle bar (if any), and 3 px
the bottom bar (if any). The rest of the elements are lowered 4 px,
and therefore remain in the same place.
- Increasing the height of the minimap panel by 4 px so that it remains
aligned with the middle panel, vertically centering the minimap, and
making the necessary adjustments to the position of its buttons.
Additionally, a couple of minor changes are applied:
- The separators between the statistics area and the attack/resistance
and resources area, and between the attack/resistance and resources
area and the entity name area, which had different heights, are set
to the same height/thickness.
- The attack/resistance icon, which was very close to the entity
icon/portrait, is moved 1 px to the right, and the
resourceCarryingText (in the same area), which was very far from the
resourceCarryingIcon, is also moved 3 px to the right.
Fixes#7029
- Left-clicking the portrait of a unit will make the camera follow that
unit (before: no action). A tooltip informs the player of this
possibility.
- Left-clicking the portrait of a structure will make the camera focus on
that structure (before: no action). A tooltip informs the player of
this possibility.
- Double-clicking a hero/treasure icon will make the camera follow that
hero/treasure (before: just focus on that hero/treasure).
- Some minor related changes.
Fixes#6879
While the desired options for indent size and style are Python's
defaults, let's make it explicit by specifying it in the EditorConfig.
As part of this, this also removes unnecessary inline formatting options
for Python files.
This simplifies the XML parsing, by iterating over the DOM tree only
once. Curiously this doesn't result in significant performance gains.
As the keywords are now found in the order they appear in the
document instead of the order they are mentioned in messages.json, the
order of a few strings in the PO-templates changes caused by the changes
in this commit.
This simplifies the code structure, by removing the extractors package,
which only contained a single module, the extractors module. This module
is now located in the i18n_helper package.
The ini-file extractor has been broken since the transition to Python 3
and nobody noticed, because it isn't used nowadays. Therefore, let's
remove it.
This increases the performance of updating the PO-templates
significantly by adding a cache for the building of mask patterns. In
non-representative tests it increased the performance of updating the
PO-templates by >25%.
This increases the number of workers to use when fetching translations
from Transifex from 5 (the default) to 12. While the Transifex CLI
allows up to 20 workers, using more workers results in frequent request
throttling, which hurts performance more than it improves it.
Instead of fetching the whole svn repo containing all current
dependencies into source, fetch them individually into subdirectories of
source.
Adds a wrapper script to each package to place the build output where
it's currently expected.
This allows adding and removing dependencies as well as changing origin
of those packages on a case by case basis.
It's recommended to run "git clean -dxf libraries/source" to free up
extra space and remove untracked files no longer covered by changes in
.gitignore.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Instead of using Perl to get the absolute path due to readlink -f
implementations differing behaviour use realpath. Since the inclusion
into coreutils this should be a valid alternative.
Also check for [[:space:]] instead of only \s as if that one is an issue
the others are as well.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
During the migration it apparently looked possibly useful at some point,
in the end it remained unused.
Further the clean-source-libs.sh doesn't handle the case where
build-source-libs.sh was invoked with --source-libs-dir.
Finally, when switching to support individual package this becomes very
complex to support.
For all the above reason remove the option.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Adding a hook to pre-commit to enforce a consistent style and remove the
hook check-yaml which only checks if a document is parsable and so
become redundant.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
The schema at https://json.schemastore.org/gitea-issue-forms.json
doesn't like empty titles, so just remove the key to the same effect as
a zero length string.
Add document start markers where they are missing.
Use a max line length of 100 as discussed with Dunedan.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Respecting the format of the tooltips of the other panels, include
a short name in bold on the first line of the tooltip to facilitate
a quick understanding of the action, and below, in normal font, a
description with relevant details.
The description of the patrol action is rewritten to make it more
understandable.
Fixes#7016
- Silence a MSVC warning in vulkan.cpp, refs #6987
- Document the patching of gl.h for macOS, from r26094
- Fix shellcheck warnings in the generation script
Currently all files adhere to the same formatting, let's codify it so it
stays like this in the future.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
The new script merges existing scripts for downloading translations and
SPIR-V shaders, and also exports game binaries from the latest nightly
build into the git repo.
This allows contributors, especially artists, to obtain a working build
of the game without learning how to build the game for Windows, refs #1814.
The fontbuilder2 README file was already partially formatted with
Markdown, but didn't indicate that via its file extension. This commit
changes that and improves the formatting of the README itself.
This removes the remaining bashisms and changes the shebang.
Also remove command chaining in subshells as this allows for comments
to go where they belong and shellcheck directives to be more specific.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This entirely reverts ee3318309b and removes the [CLEANBUILD] feature,
which needed to be used without omission to be efficient.
Instead, in case of build failure, the CI automatically starts a
non-incremental second build by running `make clean` (or the MSBuild
equivalent) before retrying the build.
This enables some ruff rules for docstrings and comments. The idea is to
not enforce the presence of docstrings, but to ensure they are properly
formatted if they're present.
For comments this adds checks that they don't contain code and verify
the formatting of comments with "TODO" tags.
As part of this, some commented out code which hasn't been touch in the
past 10 years gets removed as well.
The rules enabled enabled by this are:
- check formatting of existing docstrings (D200-)
- check comments for code (ERA)
- check formatting of TODO tags (TD001, TD004-)
Change all non posix constructs except for stacked pushd/popd for the
sake of reviewability.
The reminder will be done in a separate commit.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This explicitly uses UTF-8 encoding when reading or writing files with
Python. This is necessary as the default locale varies between
operating systems.
This enables ruff rules which check for code which can be simplified to
improve readability.
The additionally rules getting enabled by this are:
- remove unnecessary nesting of if-statements (SIM102)
- use contextlib.suppress() for no-op exception handling (SIM105)
- use enumerate() for counting in loops (SIM113)
- use context managers for opening files (SIM115)
This should speed up installation of pre-commit as part of the Gitea
Action a bit, as it caches the Python packages required for it.
The cache functionality of actions/setup-python is unsuitable for this
use case, as we don't have a file with requirements we want to use as
key. Instead, we just want to cache whatever is downloaded via pip from
PyPI and keep it for further invocations. This commit achieves that by
using the same cache key for every workflow run. The cache is being
updated even if pre-commit fails so we always keep the the Python
packages used for installing pre-commit cached.
The Windows autobuilder contains two built versions of wxWidgets. One
corresponds to the oldest supported version of the library, and is used
for CI. However, the nightly build should use a recent version of the
library, compiled with the same toolset as the main game.
This commit adapts the nightly-build pipeline to use the rebuilt recent
copy of wxWidgets.
This enables some ruff rules to check for ambiguous and dead Python
code, which might cause unintended side-effects.
The enabled rules are:
- a bunch of rules related to shadowing of builtin structures (A)
- a bunch of rules checking for unused arguments (ARG)
- a rule checking for useless expressions (B018)
- a rule checking for unbound loop variables (B023)
- a rule checking redefined function parameters (PLR1704)
In all the builds using precompiled headers, an update to libraries will
crash the CI, as those headers will become outdated. It is then
necessary to force a full rebuild of the game by cleaning up the
workspaces.
This commit allows this CI behavior to be triggered by specifying
[CLEANBUILD] in the first line of the commit message.
This will constitute an opportunity to inform users that they need to
clean their workspaces when pulling the update.
This sets some reasonable defaults for all files.
Adds settings for *.sh files, doubles as configuration for shfmt.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This updates shell scripts to use a consistent style that can be enforced
via pre-commit hook.
As for choosing tabs over spaces, some arguments are:
- tabs can help people with visual impairment
- tabs allow for indenting heredocs in bash
- tabs are the default for the tool shfmt
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
This removes the executable bits from files which aren't supposed to
have them.
Also removes shebangs for files which aren't supposed to be executable.
In the ruff config file added in #6954 explicitly selecting the ruff
rules to check was missed, resulting in ruff only checking a very small
subset of its available rules. That hasn't been desired, so this is the
first of a series of commits enabling more rules. In this PR all rules
whose violations can be either automatically fixed by ruff or are
trivial to fix manually get enabled. For the follow up PRs it's intended
to focus on one area of rules per PR to gradually improve the Python
code quality.
This updates CODEOWNERS to remove owners for the lobby bot code, which
isn't included in this repository anymore. It also adds me for some
areas where I can help with PR reviews.
This replaces the existing arclint linter to ensure the project name
does only include a non-breaking space with a pre-commit hook. The regex
to check is slightly different to account for escaped non-breaking
spaces in JavaScript files and to avoid some false-positives.
When running clang-format which reorders headers, those are the ones
that came up as missing.
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Getting and building libraries is now clearly separated from preparing
workspaces.
Some disk space is automatically reclaimed and cleanup is streamlined.
Up to now Pyrogenesis didn't check if lobby related XMPP stanzas were
sent by the lobby bots. This meant that every user could send forged
data, like the list of games, to be displayed by another user. This
change fixes that by checking such stanzas come from the expected lobby
bots.
Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5216
This was SVN commit r28197.
72f0fdb41b broke the deferred sending of XMPP stanzas for changes to the
game settings during game setup. This change fixes it and decreases the
interval to send game setting updates from 2000ms to 500ms to have
updates faster visible in the multiplayer lobby.
One reason why this bug might have been gone unnoticed so far is that
the traffic shaping employed by ejabberd results in a similar behavior
when just looking at the multiplayer lobby through Pyrogenesis:
After exhausting a certain amount of traffic, clients are only allowed
to send a defined amount of bytes per second. This results in game
setting changes taking a moment before they show up in the multiplayer
lobby. Contrary to the desired behavior, this however leads to all
updates being received and processed by XpartaMuPP resulting in
unnecessary load on the server. With this fix Pyrogenesis doesn't
trigger the traffic shaping on ejabberd side anymore, as there is now
much less traffic being sent by Pyrogenesis.
Patch by: @Dunedan
Accepted by: @Stan
Fixes: #6740
Differential Revision: https://code.wildfiregames.com/D5217
This was SVN commit r28196.
Ofthen the `messageBox` is only used for confirmation like: "Do you
really want to overwrite the savegame?"
With this patch the code paths of "overwrite savegame" and "make new
savegame" can be combined.
In some cases there is nothing done when one button is pressed. That is
changed to an early return.
Comments by: @Stan
Differential Revision: https://code.wildfiregames.com/D5274
This was SVN commit r28191.
Fix an issue on newer GNU/Linux and macOS where the build would fail due
to missing unistd includes.
Fixes: #6847
Accepted by: @vv221
Comments by: @sera
Differential Revision: https://code.wildfiregames.com/D4894
This was SVN commit r28187.
Previously private messages and announcements got handled the same way.
This adds a distinct handling for server announcements, which allows
formatting them in a different way. They are now not prefixed with
"Private" anymore and show the announcement subject as well, if one was
set.
Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5268
This was SVN commit r28186.
As log messages aren't supposed to be translatable, this removes the
internationalization of all log messages, which had it enabled.
Patch by: @Dunedan
Accepted by: @Itms
Differential Revision: https://code.wildfiregames.com/D5314
This was SVN commit r28179.
dd65a4e32e had some unintended consequences. Some specific names
apparently
are indeed supposed to be translated. Also using the message context
the translator hint isn't the right place and changes the primary key
used for these strings on Transifex. Instead comments should be used.
To avoid more interruption to translators, we revert the changes for
now and come up with a better patch.
This was SVN commit r28162.
Make it clear that strings for specific names usually don't have to be
translated.
Patch by: @Dunedan
Accepted by: @Stan
Fixes#5563
Differential Revision: https://code.wildfiregames.com/D5310
This was SVN commit r28160.
Up to now the references (lines starting with `#:`) in the portable
object templates generated by `updateTemplates.py` didn't comply with
the PO file format specification. They violated the specification in two
ways:
- White spaces in file names got replaced by non-breaking spaces
(U+00A0), instead of the file names being enclosed by First Strong
Isolate (U+2068) and Pop Directional Isolate (U+2069)
- the references didn't just include the filename and optionally the
line number of the string, as defined in the specification, but also a
non-standard "breadcrumb" component, which made them unnecessary
hard to read in certain cases and difficult to use with tools
expecting properly formatted references
This commit fixes both of these issues by properly encoding white
spaces and removing the breadcrumb component.
Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5309
This was SVN commit r28159.
Up to now the languages and their names shown in the credits came from a
static mapping in `creditTranslators.py`. The language names noted in
there weren't consistent: some where present just in English, some in
their native language and some in both. This also required adjusting the
mapping manually, whenever a new language got added on Transifex,
otherwise its translators wouldn't be credited properly.
This commit resolves both issues, by making the language names
translatable and removing the need for the static mapping in
`creditTranslators.py`.
There is one minor nuisance with this implementation: As the languages
get listed in the credits in the same order as in `translators.json` and
they are ordered by there English name in there, the order might not be
alphabetical in other languages.
Running `creditTranslators.py` for the first time with these changes
will produce a rather large diff for `translators.json`, as not just the
language names will be changed to the English name of the language in
many cases, but the order of languages in the file as well. The first
run of `updateTemplates.py` after that will then add the languages as
new translatable strings.
Patch by: @Dunedan
Accepted by: @Itms
Differential Revision: https://code.wildfiregames.com/D5300
This was SVN commit r28158.
Extracting translatable strings source files did also extract strings
which only consisted of spaces and line breaks. As that doesn't make
much sense, added noise in the portable object templates, for
translators and when linting the translations, this commit omits such
strings when generating the portable object templates.
Patch by: @Dunedan
Accepted by: @Stan, @Itms
Differential Revision: https://code.wildfiregames.com/D5308
This was SVN commit r28157.
While `creditTranslators.py` did already contain logic to remove
duplicate translator names, that logic didn't remove translator names
which only differed in their casing. As the removal was implemented
using an (unordered) `set`, the order of such duplicate names wasn't
deterministic and oscilated between the possible orders with different
invocations of `creditTranslators.py`, creating unnecessary changes to
`translators.json`.
This commit fixes that so that duplicate names are also removed when
they just differ in their casing and prefers the variant with has the
names starting with a capitalized letter.
Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5304
This was SVN commit r28152.
Up to now the "debug" and "long" translations got generated without the
comments present in the portable object files. This lead to the problem
that "dennis-ignore" directives in the comments weren't present in these
translations anymore, causing dennis to report false-positives for the
debug translations. This commit fixes that by keeping the comments in
the debug translations.
Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5303
This was SVN commit r28150.
This moves the check whether a player is the host out of
`LobbyGameRegistrationController` and only creates an instance of it in
`SetupWindow` if the player is the host.
This solves a problem with
`LobbyGameRegistrationController.onGameStart()` getting triggered by
players not being the host and sending unnecessary and invalid
changestate stanzas to XpartaMuPP.
Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5270
This was SVN commit r28148.
When calling `Engine.PushGuiPage` a promise is returned. The promise is
settled when the "child" page is closed. That allows to `await` it
inside `async` functions.
Previously the callback was run right inside the call to
`Engine.PopGuiPage`. Now the continuation of the promise is called at
the end of the "tick".
This won't help performance. It will more likely make things worse.
Since gui pages aren't opened or closed that frequently, it doesn't
matter that much.
Refs: 86c151ebaa
For the engine side:
The promise is stored in the `CGUIManager::SGUIPage` (like previously
the callback). When the promise is fulfilled it enqueues a callback in
the `JobQueue` of the `JSContext`.
Original patch by: @wraitii
Comments by: @wraitii, @Stan, @Polakrity, @lyv, @elexis, @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D3807
This was SVN commit r28145.
This adds updating the translator credits automatically when updating
translations. This has two benefits:
1. Translator credits are up-to-date in SVN-builds, so potential
problems will already show up there.
2. One manual step less during a release.
Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5299
This was SVN commit r28143.
The changes from D5290 broke the script to credit translators, as the
lines with the translators might now include additional information,
like the years of contribution, after the usernames, that would've
been included by `creditTranslators.py` as well.
This commit also slighly hardens the removal of deleted users to from
the credited translators to reduce the likelihood to remove still
existing users.
Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5298
This was SVN commit r28142.
Use the same `CLogger` constructor.
Never take ownership of the streams.
Comments by: @Stan
Differential Revision: https://code.wildfiregames.com/D5203
This was SVN commit r28140.
`CSimulationImpl` doesn't has to be a friend anymore.
Comments by: @Stan
Differential Revision: https://code.wildfiregames.com/D5296
This was SVN commit r28138.
`std::shared_ptr` is intrusive. When a function expects a
`std::shared_ptr` the caller has to use it too and can't store the
element on the stack for example.
Comments by: @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D5221
This was SVN commit r28131.
The regex for removing the email address of the last translator from
PO-files contained two bugs causing it not to match:
1. It didn't account for text after the email address and PO-files
from Transifex contain the year of the last translation there.
2. It expected a second `\\n"` at the end of the line, instead of `\n"`.
This commit fixes both of these issues and simplifies the regexes. It
also ensures that the text after the email address is kept as well.
Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5290
This was SVN commit r28130.
Summary:
Most of the times the callback stores a reference to a variable in scope
where the `Future` is in. When the scope is left the reference get's
dangling. `CancelOrWait` is called in multiple places (mostly
destructors) to ensure the callback isn't executed anymore.
This patch deduplicates thous calls to `CancelOrWait`.
Refs: #5874
Comments by: @Stan, @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D5208
This was SVN commit r28128.
As we depend on Babel for i18n tooling nowadays, we can also use its
maintained JavaScript-lexer, instead of the one forked from an old
version of Babel.
Doing so reduces the amount of code we have to maintain, adds new
functionality (like properly handling hexadecimal unicode notations) and
fixes some regex related incompatibilities which makes generating
portable object templates possible with recent Python versions.
The use of `tokenize(…, dotted=False)` is necessary, as we use this
lexer for C++ code as well and detection of most strings in C++ code
fails otherwise. As dotted names weren't supported by version of the
lexer we used until now, this isn't a regression.
Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5293
This was SVN commit r28124.
When the `RL::Interface` is destroied but the engine isn't completely
shoutdown there was a dangling pointer. The time the dangling pointer is
accessable got expanded with 968e55704a.
Whith this patch there no dangling pointer (in that regard).
Accepted by: @vladislavbelov
Comments by: @Stan, @sera
Trac Tickets: #5989
Differential Revision: https://code.wildfiregames.com/D5254
This was SVN commit r28123.
The code didn't call `this.isCircularMap` but checks if it's defined.
The function returned the wrong values for square maps.
Broken in 480228f964
Comments by: @Stan
Differential Revision: https://code.wildfiregames.com/D5288
This was SVN commit r28122.
- Adding the function signature
- Changing `g_Map.ExportMap()` to `return g_Map`
- Changing `Engine.SetProgress(NN)` to `yield NN`
- Changing `const g_Map = ...` to `globalThis.g_Map = ...`
- On some maps using the argument `mapSettings`
Comments By: @asterix, @sera, @Stan
Differential Revision: https://code.wildfiregames.com/D5258
This was SVN commit r28119.
Summary:
Preparation to use the generator based interface.
Removes many globals. (but doesn't reduce their scope by much)
Refs: #4964
Comments By: @sera @elexis
Differential Revision: https://code.wildfiregames.com/D5285
This was SVN commit r28117.
Arabian Oases: Added "new" keyword
Sporades Islands: Added "new" keyword, gave both players a free starting
Scout Ship. Added a capturable CC on the unoccupied north island. Added
2 Gaia Treasure Ships.
Syria: Added some Ruins and Shrines.
Watering Holes: Minor tweaks to grass placement.
Zagros Mountains: Added some Shrines and swapped out the Gaia fields and
farmsteads for capturable Mill_Fields and Mills.
This was SVN commit r28113.
- Put the actual functions in `unknownMapFunctions` instead of just the
names
- Inline some functions
Comments by: elexis
Differential Revision: https://code.wildfiregames.com/D5280
This was SVN commit r28105.
- whitespace changes
- functions were called in a way that they always used the default
arguments
- deduplicate code in initialization of `heighLimits`
- new structure in `myBiome`, so that the painting can be reduced much.
- also initialization instead of push
- use algorithm to calculate the `areas` and the "midpoints" of the
slope.
Comments by: @elexis
Differential Revision: https://code.wildfiregames.com/D5279
This was SVN commit r28104.
The "biomes" where duplicated between alpine_lakes and alpine_valley.
The biomes can now be selected by the game setup page.
This also remove many `var`'s.
Comments by: @Stan, @elexis
Differential Revision: https://code.wildfiregames.com/D5277
This was SVN commit r28099.
- The heights are now a constant array. Instead of pushing the heights
to an array.
- The terrain are now always constructed in one expression. Instead of
calling `.concat` repeatedly.
- The actors and the probability thereof are now also part of the
object. Separation of data and code.
- Player placement is now a iife.
Comments by: @Stan, @sera
Accepted by: @elexis
Differential Revision: https://code.wildfiregames.com/D5272
This was SVN commit r28098.
This way it's clear what's the input and what's the output of the
computation.
All map generation scripts should reman working. They are adopted in a
future commit.
`Engine.SetProgress` and `Engine.ExportMap` can be removed in a future
commit.
Comments by: @marder, @sera, @Stan
Differential Revision: https://code.wildfiregames.com/D5220
This was SVN commit r28093.
Also move the "origin-handling" in to the loop.
Comments by: @sera, @vladislavbelov, @Stan
Differential Revision: https://code.wildfiregames.com/D5189
This was SVN commit r28087.
- Add a new CI docker file
- Fix a typo for checkrefs (Refs https://code.wildfiregames.com/D5266)
- Switch to Clang8
- Unify pipeline reset in a function
- Update the image building pipeline
This was SVN commit r28086.
To avoid the appearance of two Roman numerals at the end of bot names
(e.g. "Artaxshasha II II -> here "Artaxshasha II" was the name itself
and the second "II" was added when the name was chosen for the second
time), remove the addition of Roman numerals entirely.
Instead, if possible, a new name is chosen for each bot. If not, the
suffix "(n)" is added counting the duplicates and warning is displayed.
AINames are added to the Iberians, Gauls, and Mauryas bringing their
totel to at least 8 each in order avoid any duplicates in regular
8-player games.
Credit to Norse_Harold for changing the condition for reusing names to
not use a hardcoded assumption about the maximum number of player slots
Patch by @Vantha
Accepted by @phosit, @wowgetoffyourcellphone
Differential Revision: https://code.wildfiregames.com/D5256
This was SVN commit r28082.
In the Han CC I changed `0.8 * 0.75` to `0.8 - 0.2` so it could also be
described the same way.
Accepted By: @Freagarach
Comments By: @sera, @Stan
Trac Tickets: #6755
Differential Revision: https://code.wildfiregames.com/D5031
This was SVN commit r28065.
The user doesn't have to fiddle with `std::shared_ptr`.
And two (more unrelated) things: use `std::unordered_map`, use a
`std::find_if` in the callback.
Comments By: @vladislavbelov, @Stan
Differential Revision: https://code.wildfiregames.com/D5239
This was SVN commit r28048.
Since 1bccfef6fb the `CSimulation2` uses the `std::shared_ptr` only in
the constructor and stores a `ScriptContext&` (inside it's members).
That's a bit dangerous: A caller might think `CSimulation2` takes
ownership of the `ScriptContext`.
With this commit the caller has to pass an `ScriptContext&` to the
constructor.
Comments By: @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D5223
This was SVN commit r28046.
Noticed and patch proposed by @Feldfeld in 480228f964
Doesn't have any consequences as the function is only called via
"scaleByMapAreaAbsolute" in the codebase.
accepted by @Feldfeld @marder
Differential revision: https://code.wildfiregames.com/D5248
This was SVN commit r28042.
The `StateSet` is only used to check if a state is valid. That's useless
since it wouldn't be found in the `TransitionMap` - With the same
outcome.
Accepted By: @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D5236
This was SVN commit r28039.
One should always use the variable declaration with the least possible
scope.
This patch cleans up many (but not all) of the `var` in rmgen and
replaces them with `let` or `const`.
The same is done for `let` -> `const`.
comments by: @sera @Stan
Differential revision: https://code.wildfiregames.com/D5214
This was SVN commit r28036.
The hash function introduced in 6faf704731 doesn't work on 32 bit
systems. This one should.
Accepted By: @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D5237
This was SVN commit r28033.
Without the "pair" attribute API3..GameState.prototype.canResearch
doesn't check if the other tech is already researched (or is being
researched).
Patch by: @phosit
Accepted by: @wowgetoffyourcellphone
Differential Revision: https://code.wildfiregames.com/D5238
This was SVN commit r28026.
When a wild animal was in a defenseArmy and it was killed, its resource
got into the army as well. This caused a call to GetUnitAIOrder data
which was undefined for the resource.
Fixed by checking for UnitAI-ness and also for attack-ability whilst at
it.
Reported by @seregadushka at the forums:
https://wildfiregames.com/forum/topic/110098-petra-error-winter-is-coming5/.
Investigated and MWE by @Norse_Harold.
Fixes#6899
This was SVN commit r28025.
Warships now use the Unit AI instead of the Building AI. This allows
players to specifically target fire onto desired targets.
Warship combat now revamped with completely new Warship classes, which
soft counter each other, and new behavior for Fire Ships. With an
all-new ship tech tree at the Dock.
Commit includes fixing maps to switch from the old to the new ship
templates. Also includes revamped Cycladic Archipelago skirmish maps and
some other special surprises. And improved/additional ship UI portraits.
New Warship classes:
Scout Ship
Arrow Ship
Ramming Ship
Siege Ship
Forum discussion:
https://wildfiregames.com/forum/topic/104332-naval-overhaul-alpha-27/#comment-539713
Patch by: @wowgetoffyourcellphone
Accepted by: @real_tabasco_sauce
Comments and suggestions by: @borg-, @phosit (more comments and
discussion at the forum link)
Differential Revision: https://code.wildfiregames.com/D5213
Refs #4000 for a sound issue for actors without an attack animation.
This was SVN commit r27996.
In addition to the existing "Shallow" water level two water levels are
added:
- Deep: Only ships can reach other islands
- Rising: The water level changes from Shallow to Deep to a level where
the home islands are flooded.
Accepted By: @real_tabasco_sauce
Comments By: @marder, @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D5139
This was SVN commit r27992.
libxml2 v2.12.1 includes less header indirectly. Also `xmlError*` has to
be changed to `const xmlError*`.
Original Patch By: Riesi
Accepted By: @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D5219
This was SVN commit r27980.
The territory decay of these structures didn't make much sense (gameplay
wise) and made those structures a pain to use.
Patch by: @wowgetoffyourcellphone
Accepted by: @real_tabasco_sauce
Differential Revision: https://code.wildfiregames.com/D5215
This was SVN commit r27978.
RandomMap only takes two arguments (baseHeight, baseTerrain) not three.
Originally introduced in 5fe58d80fd.
Noticed by & accepted by @phosit
Differential revision: https://code.wildfiregames.com/D5212
This was SVN commit r27967.
The Function is not restricted to std::function anymore. Move only
function become possible.
Differential Revision: https://code.wildfiregames.com/D4840
This was SVN commit r27962.
This adds an upgrade option for the Persian "Apadana" (will be renamed
later to "Tachara"), where the player can choose to receive a trickle of
a desired resource, like taxes or tribute from their subject peoples.
Call this the "Satrapy Tribute" feature.
Patch by: @wowgetoffyourcellphone
Accepted by: @real_tabasco_sauce
Comments by: @chrstgtr, @borg-
Differential Revision: https://code.wildfiregames.com/D5192
This was SVN commit r27954.
56f15f0869 broke those maps in atlas where g_MapSettings.TeamPlacement
is never initialized.
Bug found by @elexis
Fix not objected by @elexis (comments: committable if 56f15f0869 should
not be reverted and developer time is limited)
Differential revision: https://code.wildfiregames.com/D5200
This was SVN commit r27952.
Needed until / if D5082 lands.
Until then we also still need: `g_PlayerbaseTypes`.
Differential revision: https://code.wildfiregames.com/D5196
This was SVN commit r27946.
The return-slot provided by the `Future` is used for synchronisation.
Refs: #5874
Comments By: @Stan, @vladislavbelov, @wraitii
Differential Revision: https://code.wildfiregames.com/D5001
This was SVN commit r27944.
This means deprecate `createBasesByPattern` in rmgen2 and add new
function `playerPlacementByPattern` in common
Differential revision: https://code.wildfiregames.com/D5194
This was SVN commit r27943.
Move the placement functions and the getTeamArray from rmgen2 to
rmgen-common, so that those maps can use the placement options as well,
without having to load the whole rmgen2 library.
Differential revision: https://code.wildfiregames.com/D4948
This was SVN commit r27941.
After they had been broken in 21e866fcf0
Author / patch by: @lairkers
Troubleshooting / comments by @elexis @Freagarach
Fixes#6831
This was SVN commit r27937.
This fixes an issue revealed by 7350b9042e that affected deserialized
games.
Adding tests further highlighted a bug in the calculations, which is
fixed.
Reviewed By: phosit
Fixes#6883
Differential Revision: https://code.wildfiregames.com/D5181
This was SVN commit r27928.
Makes all farming techs at the Farmstead available in the Village Phase
(I) for the Ptolemies.
Patch by: @borg-
Accepted by: @real_tabasco_sauce, @wowgetoffyourcellphone
Differential revision: https://code.wildfiregames.com/D5180
This was SVN commit r27915.
This creates a slightly larger chicken model, which helps with visual
identification at the start of the match. I have seen multiple let's
plays where finding the initial chickens took too long (in my opinion),
because I believe they are too small for the game world.
Patch by: @wowgetoffyourcellphone
Original model by: @LangBart
Accepted by: @chrstgtr, @real_tabasco_sauce
Differential revision: https://code.wildfiregames.com/D5177
This was SVN commit r27910.
This is a very unique technology that trades in melee citizen-soldier
infantry in exchange for unlocking Legionaries. Legionaries are similar
to Skiritai except they are cheaper.The idea is that these units can
form the bulk of the Roman army, so they should be cheap, but powerful.
Additional champions remain to supplement these units. And for improved
engagement with Centurions, they gain a special second aura just for
Legionaries, called 'Century Maneuvers"
Patch by: @real_tabasco_sauce
Accepted by: @borg-, @wowgetoffyourcellphone
Comments by: @chrstgtr, @Freagarach,
This was SVN commit r27900.
Back by popular demand; patch requested by @borg-. This gives the "War
Dog" Kennel building back to the Britons. Previously removed in Alpha
24. Its removal widely lamented since then.
War Dogs removed from the Briton Stable as a consequence.
Patch by: @wowgetoffyourcellphone
Accepted by: @borg-, @real_tabasco_sauce
Differential revision: https://code.wildfiregames.com/D5153
This was SVN commit r27890.
Ptol bolt shooters have their own prepare time and fire rate, so
following 13c169025c, the ptol bolts were unchanged. This patch brings
this prepare time change to the faster firing bolt shooters.
Patch by: @real_tabasco_sauce
Accepted by: @wowgetoffyourcellphone
Differential revision: https://code.wildfiregames.com/D5150
This was SVN commit r27875.
This mixin is genericized in order to be useful for other units if
desired. It adds a splash attack, but removes some regular attack to
balance. With this, a champion or other unit can be easily
differentiated. In this instance, it is applied to the Macedonians'
champion swordsman, the Thracian Black Cloak. These guys use the very
long Rhomphaia and Sika swords of Thraco-Dacian origin.
Patch by: @wowgetoffyourcellphone
Accepted by: @real_tabasco_sauce, @borg-
Differential revision: https://code.wildfiregames.com/D5145
This was SVN commit r27871.
Celtic women were famous for their ferocity and aggressiveness against
enemies and it was common for them to fight alongside men in battles,
especially if the battle had been lost, the women being a strong last
line of defense.
Patch by: @borg-
Accepted by: @chrstgtr, @real_tabasco_sauce
Differential revision: https://code.wildfiregames.com/D5125
This was SVN commit r27870.
Reduce prepare time for catapults and bolt shooters. Catapults have
recently been nerfed and buffed with a small splash attack. Bolt
shooters are a little underutilized. Both of these units share a
'clunkiness' which is due to their pack/unpack time, minimum range, and
long prepare time. This patch hopes to address part of this clunkiness
by decreasing the prepare time for catas and bolt shooters. This makes
the unit seem more responsive to new commands to attack a different
unit/structure.
Patch by: @real_tabasco_sauce
Accepted by: @wowgetoffyourcellphone
Comments by: @chrstgtr, @Freagarach
Differential revision: https://code.wildfiregames.com/D5131
This was SVN commit r27865.
Adds 1/1/1 armor, but +10 metal cost and -5% speed and slightly slower
acceleration and turning
Patch by: @wowgetoffyourcellphone
Accepted by: real_tabasco_sauce
Comments by: @borg- & @chrstgtr
Differential revision: https://code.wildfiregames.com/D5141
This was SVN commit r27864.
This makes some adjustments to Hippocrates by renaming his auras and
tweaking their effects.
Patch by: @wowgetoffyourcellphone
Accepted by: @borg-, @real_tabasco_sauce
Differential revision: https://code.wildfiregames.com/D5138
This was SVN commit r27857.
Druids increase attack rates of soldiers near them slightly. This
fulfills a decade+ design element in the old Celtic civ design profiles.
Patch by: @borg-
Positive Comments by: @chrstgtr
Accepted by: @real_tabasco_sauce, @wowgetoffyourcellphone
Differential revision: https://code.wildfiregames.com/D5116
This was SVN commit r27836.
Attempts to address Invalid warning messages for capturable farmsteads
and creates a mixin as suggested by @Langbart
Renames the "farmsteads_" template files to "mill_" to eliminate
confusion with standard buildable farmsteads and changes the refs in the
skirmish maps to suit.
Genericizes the name to Rotary Mill instead of Farmstead, again to
eliminate confusion between the two (the former is a capturable map
object, while the latter is a player-buildable structure).
Fixes#6818
Differential revision: https://code.wildfiregames.com/D5113
This was SVN commit r27835.
Catapults and heavy warships received a nerf to their range, which was
also designed to stop infinite targeting of structures outside of vision
range. This was a substantial nerf, from 100 range to 85. This change
compensates for this range reduction by slightly improving their
versatility.
This is not the same splash we have seen in previous alphas, as it is
only a radius of one meter. It also makes them exciting as you could
land some epic shots if your enemy is very tightly bunched.
Patch by: @real_tabasco_sauce
Differential revision: https://code.wildfiregames.com/D5053
Accepted by: @borg-
Comments by: @chrstgtr, @wowgetoffyourcellphone
This was SVN commit r27831.
With the change to the Spartan bonus, it is interesting to add +10%
health to the hoplite tradition tech.
The hoplites dominated warfare for a long time, and it is fair to keep
this bonus somehow.
Patch by: @borg-
Differential revision: https://code.wildfiregames.com/D5098
Accepted by: @real_tabasco_sauce, @wowgetoffyourcellphone
This was SVN commit r27804.
When playing a network game with at least one AI, and an AI dies, after
a while there will be an increasing lag on the system, eventually
freezing the screen for e.g. 4 seconds every 5 seconds.
It turned out that once the AI is dead, the savedEvents grew endlessly.
Causing issues down the line (hashing).
That is now fixed by discarding savedEvents when the AI is defeated.
Patch by: @lairkers
Differential revision: https://code.wildfiregames.com/D5042
Comments by: @phosit, @wraitii
This was SVN commit r27800.
Avoid cases of filenames
Update years in terms and other legal(ish) documents
Don't update years in license headers, since change is not meaningful
Will add linter rule in seperate commit
Happy recompiling everyone!
Original Patch By: Nescio
Comment By: Gallaecio
Differential Revision: D2620
This was SVN commit r27786.
This gives them a new hero (Hippocrates; recruitable from the tempel)
and some unique Naval bonuses.
Patch by: @borg-
Differential revision: https://code.wildfiregames.com/D3727
Accepted by: @real_tabasco_sauce
Comments by: @chrstgtr, @ValihrAnt, @wowgetoffyourcellphone
This was SVN commit r27779.
This differentiates Sparta by giving them P1 champions, a Hero-oriented
team bonus and a new unit.
Sparta should rely heavily on their extremely powerful melee infantry,
hence the focus is on that with choice and upgrade.
Patch by: @borg-
Differential revision: https://code.wildfiregames.com/D4736
Accepted by: @chrstgtr, @real_tabasco_sauce
Comments by: @Langbart, @marder, @wowgetoffyourcellphone
This was SVN commit r27775.
Now a range-based for loop is used to iterate.
Accepted By: @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D4953
This was SVN commit r27757.
swprintf_s expected an argument of type char (due to %c). Given an
argument of type wchar.
This fixes N7 and N8 from #5288
Refs #5288
Patch By: @animus
Accepted By: @phosit, @vladislavbelov
Differential Revision: https://code.wildfiregames.com/D4993
This was SVN commit r27751.
We were incorrectly comparing an object to a number.
I don't think this will drastically change the AI behaviour as it's
rather an edge case.
Reviewed By: Freagarach
Differential Revision: https://code.wildfiregames.com/D5030
This was SVN commit r27732.
Since 281bb0b2ec, opening the 'Options' menu in-game will show that
there are pending changes, even if the user has done nothing.
Unfortunately the cinematic logic to hide silhouettes, which comes from
cfd08bbf28, is broken following those changes. We use the configuration
to hide them, which results in us, indeed, changing the configuration.
There isn't really a good short term fix. This change only attemps to
reset the setting if we changed it for a cinematic, which fixes the
issue, but has drawbacks.
Ideally, we would use a superior config level, but we need to be careful
about exposing that to JS.
Reported by: langbart
Fixes#6821
Differential Revision: https://code.wildfiregames.com/D5040
This was SVN commit r27730.
The previous code was constructing un-necessary ScriptRequest objects.
Minor optimisation from not entering/leaving realms.
Differential Revision: https://code.wildfiregames.com/D5026
This was SVN commit r27728.
ScriptFunction::Call_ checks HasProperty, but then JS_CallFunctionName
calls GetProperty. This is redundant and can be simplified.
Reviewed By: phosit
Differential Revision: https://code.wildfiregames.com/D5000
This was SVN commit r27726.
Two changes to the vertex pathfinder that should generally improve
performance:
- Sort unaligned edges by distance like we did aligned edges. This
isn't very scientific, but the idea is generally sound, and empirically
it seems to do OK.
- Relax the optimality by using a weighted heuristic, with weight 4/3
or 5/3 depending on the number of obstacles around. In the worst cases,
A* will return paths that are this many times less optimal, but search
should be faster in general (and sometimes much faster).
Both of these optimisations might increase the constant-cost slightly,
but should decrease the worst-case runtimes.
Differential Revision: https://code.wildfiregames.com/D5034
This was SVN commit r27724.
Who says only players should be able to conduct diplomacy?
Also separation of concerns, more maintainable files.
Differential revision: https://code.wildfiregames.com/D4921
Comments by: @elexis, @Stan
Refs. #5894
This was SVN commit r27722.
- remove `SDL_Delay(100)`
- the progress is now an `std::atomic` (not protected by the mutex
anymore)
Based On Patch By: @vladislavbelov
Accepted By: @wraitii
Differential Revision: https://code.wildfiregames.com/D3676
This was SVN commit r27717.
- Add explicit variables for magic values.
- `let`s to `const`.
- Don't start the regen timer when not needed.
Differential revision: https://code.wildfiregames.com/D4965
Comments by: @Stan
This was SVN commit r27707.
FSM conditions aren't used. So this removes dead code.
Accepted By: @wraitii
Differential Revision: https://code.wildfiregames.com/D4959
This was SVN commit r27702.
Similar trick to D3446 / c87229aa48 - we can short-circuit if we find
units that match our best possible preference.
This is, in particular, almost a 40% wall time improvement on Combat
Demo Huge, but it should apply in a number of more normal cases.
Differential Revision: https://code.wildfiregames.com/D5020
This was SVN commit r27701.
SPECTRE attacks mitigations were added to SpiderMonkey's JIT output in
version 57. Turning these off is a very large speedup, around 10-20%
wall time (on my computer) depending on the map and the situation.
For the most part, from profiling on my machine, this is from memory
fences after JIT -> C++ calls. 0 A.D. does a lot of these.
The SPECTRE class of attack is a timing attack based on speculative
execution to leak sensitive information, and it seems extraordinarily
unlikely that something like this could be successfully mounted using 0
A.D.
Differential Revision: https://code.wildfiregames.com/D5014
This was SVN commit r27699.
Following the AI unthreading in 4df03ed2d2 / D3769, structured clones
are no longer needed to pass the gamestate around.
This is much faster, about 10-15% wall time on an AI 1v1 profile.
This also potentially reduces memory fragmentation and GC needs, as
writing clones allocated a lot of data.
Differential Revision: https://code.wildfiregames.com/D5019
This was SVN commit r27698.
This is unused and makes the function twice as slow as it needs to be.
Differential Revision: https://code.wildfiregames.com/D5015
This was SVN commit r27697.
This functions is amongst the most called in JS, so it's important to
make it speedy.
- Bugfix: if 'originalValue' is falsy, the result was never cached. This
in particular affected the minRange of archers, which is 0. It's a large
optimisation on combatDemoHuge, but the effect elsewhere is less likely
to be noticeable.
- Don't go through the helper to get the player Entity ID, in this case
it's slower.
- Concat is slower than Flat() in this case according to my profiling.
- Some micro-optimisation by strict equality.
Differential Revision: https://code.wildfiregames.com/D5012
This was SVN commit r27696.
FaceTowardsTarget is called quite often by UnitAI, and we can skip some
un-necessary messages as an optimisation.
Differential Revision: https://code.wildfiregames.com/D5005
This was SVN commit r27695.
Mediterranean Bush (dry)
Stone and Rock fences by @Wow
New props for Briton and Gallic formation standards
New Kushite Shields by @Stan
Saharan capturable farmstead
Celtic Shrine (with improved textures)
Royal Palm tree
This was SVN commit r27677.
According to JIT profiling on SM 115, using ForEach is faster than
iterating.
This is a micro optimisation, maybe 2% faster for OnUpdate, which means
we might see an overall improvement < 0.4%.
The reason this is faster here is that Iterating needs to construct an
array to store the result, whereas ForEach just uses the values
directly. This means this probably doesn't apply to iterating if we
don't need both the key/value pair.
Differential Revision: https://code.wildfiregames.com/D5010
This was SVN commit r27674.
CmpPosition::TurnStart checks whether the territory changed underneath
each entityevery turn. The only user of this is TerritoryDecay
(structures, for the most part). It is rather inefficient to have this
done for all entities.
The simplest solution is to listen to position-changed messages in
TerritoryDecay instead. This should hardly ever happen in vanilla 0
A.D., except in Atlas, so it's basically free.
This sort of reverts 19965ce37a (original implementation) and
c44b48bd59.
Accepted By: Freagarach (concept only)
Differential Revision: https://code.wildfiregames.com/D5009
This was SVN commit r27673.
Right now usernames for the lobby can consist solely of numbers and
special characters. This can result in nonsensical usernames and is
prone to be abused. While we can't entirely prevent nonsensical
usernames, we can at least do a bit better.
Therefore, this adjusts the rules for the validation of new lobby
usernames in pyrogenesis. Previously these rules were:
- length: between 1 and 20 characters
- valid characters: lower- and uppercase letters, numbers, ".", "_", "-"
The new rules are:
- length: between 3 and 20 characters
- valid characters: lower- and uppercase letters, numbers, ".", "_", "-"
- must contain at least one letter
These validation changes are relevant for new user registrations only
and don't affect existing users. As this also just adjusts the
client-side validation, users will also still be able to register
usernames according to the old rules, e.g. when using an older version
of 0 A.D., until the same change gets rolled out at a later point in
time server-side as well.
This was SVN commit r27670.
- Move the Crush damage from Splash to direct hit.
- Reduce overall damage slightly
Accepted By: Feldfeld
Differential Revision: https://code.wildfiregames.com/D5008
This was SVN commit r27668.
Summary:
On macOS Ventura (at least version 13.2.1 and above), the game crashes
instantly when clicking on buttons communicating with the lobby.
This issue is solved by upgrading nettle to 3.9 and GNUTLS to 3.8.
Patch by: froissant
Accepted By: wraitii
Trac Tickets: #6807
Differential Revision: https://code.wildfiregames.com/D5018
This was SVN commit r27667.
gcc-13 less often includes cstdint so one might need to include it
manually if needed.
The headers already included in Message.h are included within namespace
AtlasMessage which didn't break by chance, move them out and add
cstdint.
Patch by: @sera
Reviewed by: @phosit
Fixes: #6800
Differential Revision: https://code.wildfiregames.com/D4997
This was SVN commit r27644.
Avoid duplication by moving the function to Transform.js.
Add tests to Transform.js
Add tests to TurretHolder.js
Optimize slightly Trainer.js by removing some useless
Engine.QueryInterface calls.
Refs #6784 (symptoms in TriggerHelper.js are fixed underlying cause not)
`SkirmishReplacer` is called before the Modifier Manager so it does not
suffer the same fate.
Entities using `ChangeEntityTemplate` function are still affected.
Maps calling Engine.AddEntity directly are still affected.
Ideally this should be handled by hotloading components instead of
creating new entities each time. See =>
https://code.wildfiregames.com/D4991
Tested using:
https://github.com/0ADMods/trailer_tools/commit/908dd631d950b5050d1784530c65f29ccfc67913
Differential Revision: https://code.wildfiregames.com/D4984
This was SVN commit r27636.
"fruitBush": "gaia/fauna_deer" was an oversight/ hack and is just bad
practice.
patch by: @real_tabasco_sauce
comments by: @phosit
Differential revision: https://code.wildfiregames.com/D4990
This was SVN commit r27635.
Most of the shaders are explicitely interned by the engine except for
the one called "Model" which is not required (you can have maps with
just terrain for visualization)
The rng files are called by the engine to validate structure.
The game has two overrides for high quality and normal water to be
"ocean" and "default" respectively
The minimap flare folder is hardcoded see #6795
The default material now calls the dummy shader instead of the model one
when in modmod
Move the default skybox, it will be required by _default.xml
The terrain materials are moved as well, for completeness, although they
are currently not referenced.
This commit does not include atlas needed files as it cannot run without
the public mod anyway for now. It will be done in a separate commit when
we have the ingame editor that will require _default.xml for instance.
This commit is also needed to generate the spir-v shaders in the correct
mods, in order to be able to launch the game with mod mod only.
Refs: #6636#5366Fixes: #6294
Differential Revision: https://code.wildfiregames.com/D4906
This was SVN commit r27629.
- Fix Jenkins warnings about leaked credentials.
- Fix one script not loading utf-8 on windows.
- Fix command line arguments not working when inlined on Linux.
This was SVN commit r27621.
Print a warning in the debug output for now, as the logger is not
available at this point.
Tested By: Langbart
Differential Revision: https://code.wildfiregames.com/D4743
This was SVN commit r27612.
As of the `beta2` version of `premake5`, `sysincludedirs` has been
deprecated
and replaced with/renamed to `externalincludedirs`, and continuing to
use it
causes warnings to be emitted.
With this change, we now use `externalincludedirs` when available so as
to
prevent the warnings, falling back to `sysincludedirs` when it's not to
prevent
breakage with pre-`beta2` versions of `premake5`.
Accepted By: sera
Fixes: #6785
Differential Revision: https://code.wildfiregames.com/D4980
This was SVN commit r27606.
This fixes packet loss issues on some VPN solutions.
Patch By: sera
Differential Revision: https://code.wildfiregames.com/D4967
This was SVN commit r27599.
They can't dance either way and this improves their pathfinding behavior
as well as their visual movement.
Comments from @Stan @Freagarach @wraitii @real_tabasco_sauce
Differential Revision: https://code.wildfiregames.com/D4971
This was SVN commit r27587.
Fixes: #6708
Reported by @borg- @andy5995, ticket creation & suggested solutions by
@Langbart
Previous version of the batch accepted by @real_tabasco_sauce, positive
comments from @chrstgtr
Differential Revision: https://code.wildfiregames.com/D4962
This was SVN commit r27585.
Also some cleaning in the statistics tracker.
(`total` is used by the lobby bots and hence not removed.)
References 215a102c27 and #3948.
Differential revision: Don't subtract lifestock from used/gathered
resources.
Tested by: @Langbart
Fixes#6744
This was SVN commit r27562.
Instead of merely walking (totally unwanted in the middle of a fight,
hence I call this a bugfix).
Differential revision: https://code.wildfiregames.com/D4955
This was SVN commit r27561.
When unable to garrison and that is the first rally point, the rest of
the rally point queue is not handled.
The check was introduced in df1d5d2260 because UnitAI didn't guard
garrisoning properly.
Patch by: @Langbart
Differential revision: https://code.wildfiregames.com/D4954Fixes#6746
This was SVN commit r27560.
Reported by: @Langbart
Differential revision: https://code.wildfiregames.com/D4936
Refs. #6385 by fixing a part of it (the attack plan).
This was SVN commit r27551.
Causing units to not show the gathering animation when close to a
dropsite.
We might want to move this stuff to their respective components.
Differential revision: https://code.wildfiregames.com/D4937
Comments by: @Stan
Fixes#6566
This was SVN commit r27550.
As it was too tedious to use and hence unused.
Also nerf it a bit since it may be too strong otherwise.
Patch by: @real_tabasco_sauce
Differential revision: https://code.wildfiregames.com/D4943
Reviewed by: @chrstgtr, @wowgetoffyourcellphone
This was SVN commit r27547.
There is some unit-motion/unitAI bug that makes them not reach the
center and hence idleness.
Refs. #6735 by fixing the specific PetraAI <> catafalque case.
Reported and solution by: @Langbart
This was SVN commit r27544.
Introduced when changing the default behaviour to capturing
(82e2619ece).
Also fixes confusing the AI with catafalques (etc.), noticed by
@Langbart at D4933.
Differential revision: https://code.wildfiregames.com/D4934
Tested by: @Langbart, @phosit
This was SVN commit r27532.
Since it is not nice to make the game unusable (citation needed) we'll
emit a warning, which is less not nice.
Reported by: @Langbart
Differential revision: https://code.wildfiregames.com/D4930
Reviewed by: @Langbart
Fixes#6724
This was SVN commit r27531.
Walls should be more helpful as a defensive feature, currently they only
serve to limit movement.
Wall garrisoning is the primary defensive benefit of walls, but only
allowing eight to garrison in a long wall section means these eight
units are quickly dealt with, especially since they are stationary.
Doubling the wall garrison (by adding another row, not by cramming them
side-to-side) not only looks cooler, but also allows a more sizable army
to occupy walls.
Refs.
https://wildfiregames.com/forum/topic/105534-ai-and-the-walls-dilemma/.
Patch by: @real_tabasco_sauce
Differential revision: https://code.wildfiregames.com/D4914
Comments by: @Stan, @wowgetoffyourcellphone
This was SVN commit r27527.
- They had vertexes groups without weights.
- Both of them were unused one incorrectly so.
- Also fix the material while at it.
Refs #6714
This was SVN commit r27515.
Conflicted with garrisoning, which is used more often.
Reported by @minohaka at D4697, after 82e2619ece.
Differential revision: https://code.wildfiregames.com/D4908
Accepted by: @real_tabasco_sauce
This was SVN commit r27506.
Use tokens for required technologies, allowing `-tech` and easier
replacements.
Fixes requiring `replace=""` when replacing techs.
Also a minor fix in the TemplateParser.js for upgrade requirements.
Refs. 9bb9ff8b16.
Differential revision: https://code.wildfiregames.com/D4912
Comments by: @Stan
This was SVN commit r27505.
This fixes#4705: the TLS connection now works on Windows, also tested
with certificate verification and with TLSv1.2 (so TLSv1.0 can now be
disabled server-side).
Ideally we should have waited for the release of version 1.0.25, but the
development seems to have mostly stopped upstream.
Tested By: maroder
Differential Revision: https://code.wildfiregames.com/D4910
This was SVN commit r27490.
Reduces unnecessary text.
The corral defines the interval and the animal auras define the amount.
Patch by: @Grapjas
Differential revision: https://code.wildfiregames.com/D4896
Comments by: @Langbart, @Stan
Fixes#6687
This was SVN commit r27487.
Done by creating a function for 'objections' and using that for any
unmet requirements.
Patch by: @abian
Differential revision: https://code.wildfiregames.com/D4899
Comments by: @Langbart
Fixes#6694
This was SVN commit r27484.
Also fix an incorrect code comment, and prevent Atlas from being started
with `-dumpSchema`.
Reviewed By: phosit
Differential Revision: https://code.wildfiregames.com/D4903
This was SVN commit r27470.
Add a new patch written by s0600204, replacing the use of `distutils`
with `sysconfig` in the setup of the bundled virtualenv in SpiderMonkey.
Add a patch which is a portion of
https://phabricator.services.mozilla.com/D130410, fixing upstream's bug
1739486 on Fedora.
This fixes build issues on recent Debian and Fedora. This is consistent
with upstream's upcoming changes in ESR102 following the deprecation of
`distutils`.
This cleans up some old SM patches; renames the [[SVN:27442]] unicode
patch; moves a Python-related environment variable inside `build.sh`;
fixes indentation and EOL properties.
Differential Revision: https://code.wildfiregames.com/D4893
This was SVN commit r27460.
It still won't link if the user has a more recent issue than whatever
was vendored with Spidermonkey. Refs:
https://code.wildfiregames.com/D3127.
Fix option --with-system-spidermonkey info oversight when updating in
d8332a2938 and d92a2118b0 and d5db03c303
Reported by @sera, @linkmauve
This was SVN commit r27440.
- Remove crossbow_training.json from the Han academy
- Adjust the cost of poison arrows and poison blades so that the ranged
upgrade should be the one to cost metal, since ranged units currently
dominate most battles.
- Reduce the obstruction area of rice paddies so that they are easier to
place.
Patch by: @real_tabasco_sauce
Accepted by: @chrstgtr, @wowgetoffyourcellphone
Differential Revision: https://code.wildfiregames.com/D4873
This was SVN commit r27406.
Patch by: @real_tabasco_sauce and @vv221
Differential Revision: https://code.wildfiregames.com/D4872
Accepted by: @wowgetoffyourcellphone based on forum discussions
This was SVN commit r27400.
Discussed countless times on the forum.
We try this out this release.
Patch by: @marder
Differential revision: https://code.wildfiregames.com/D4697
Idea accepted by: @asterix, @wowgetoffyourcellphone, @chrstgtr
Comments by: ^ + @Stan
This was SVN commit r27399.
Makes elephants more effective against units and less of a siege weapon.
Animals should not be used as mechanical siege weapons.
Based on a patch by: @Kate
Differential revision: https://code.wildfiregames.com/D4137
Comments by: @marder, @wraitii
This was SVN commit r27391.
- Use reinterpret_cast.
- Use using instead of typedef.
- Use PascalCase for CONDITION and ACTION.
- Use constexpr instead of #define.
Patch by: @phosit
Differential Revision: https://code.wildfiregames.com/D4868
This was SVN commit r27385.
- Move the comments to the header file
- Add a dot at the end of a comment
- Remove some trivial comments
- Improve spelling.
Patch by: @phosit
Differential Revision: https://code.wildfiregames.com/D4861
This was SVN commit r27376.
remove nullptr check before delete. They are redundant.
remove nullptr check after new. They will never be null.
two whitespaces changes forgotten in
https://code.wildfiregames.com/D4800.
Patch by: @phosit
Differential Revision: https://code.wildfiregames.com/D4853
This was SVN commit r27351.
Complex requirements were not properly handled by the parsing code.
This makes it a bit more explicit while also handling multiple techs as
requirements.
Reported by: @wowgetoffyourcellphone
Differential revision: https://code.wildfiregames.com/D4833
This was SVN commit r27350.
These give vision to parts of the map to specified players.
Placed some on the skirmish map Miletus Peninsula as an example.
This was SVN commit r27347.
Improves behaviour after 856e876148 by counting in the capture strength
of garrisoned entities.
Differential revision: https://code.wildfiregames.com/D4799
Comment by: @Silier
This was SVN commit r27322.
Replacing `target` by `position` where applicable.
It gave errors when following a player who flared.
Reported by: @Langbart
Differential revision: https://code.wildfiregames.com/D4824
Comment by: @Silier
Fixes#6303
This was SVN commit r27315.
Summary:
The persistent settings have historically often led to bugs (see A26,
but that's far from the only example).
The trouble is that this usually leads to the game setup being
completely unusable, often requiring clearing the MatchSettings.json
file (or de-activating it in the settings if one knows that is there).
Furthermore, mods can make the persistentSettings take 'bad' values, and
in general this behaviour is prone to unexpected breakage and difficult
to defend against.
This wraps it in a try-catch block to ensure the game remains usable. It
still relays the error with a more useful error message.
Differential Revision: https://code.wildfiregames.com/D4794
This was SVN commit r27314.
If the pathfinding tasks are running, they might reference now-deleted
variables. CancelOrWait prevents this.
Remove `Future::Cancel()` altogether as that was its only use and the
functions seems dangerous.
Introduced with 0ebc08b13c
Patch by: phosit
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D4831
This was SVN commit r27310.
std::optional was not usable when our Future class was introduced, but
it is now, so we can replace SharedStateResult with it, reducing custom
code.
Note that Apple Clang has some incompatibilites with part of the
optional interface, but it isn't used here.
Patch by: phosit
Comments by: vladislavbelov
Accepted by: wraitii
Differential Revision: https://code.wildfiregames.com/D4803
This was SVN commit r27309.
Allows more flexibility in e.g. the Identity requirements and unifies
the checking of requirements.
One can use the script at https://code.wildfiregames.com/P265 to fix
templates.
Differential revision: https://code.wildfiregames.com/D4514
Comments by: @elexis, @Stan
Fixes#6421
This was SVN commit r27245.
Use `mul_round`, refs. 2078abdcc4. (Resources in cost and loot need to
be integers.)
Reported by: @Langbart
Differential revision: D4832
Suggestion by: @Stan
Fixes#6659
This was SVN commit r27243.
- Adjust "Rhinelands (Fall)" biome file to the new Temperate_Autumn
terrains.
- Rename temperate_europe to temperate_summer.
- "Savanna" biome adjustments to the new African Savanna terrains
forthcoming.
- Some Skirmish map adjustments and improvements.
This was SVN commit r27212.
For security reasons planing to restrict access for ReadFile,
ReadFileLines, WriteJSONFile, ReadJSONFile, ListDirectoryFiles,
FileExists to the following folders/files:
"gui, simulation, maps, campaigns, saves/campaigns,
config/matchsettings.json, config/matchsettings.mp.json"
adding "moddata" if some mods need to access and ship custom files that
don't fit into other locations mentioned above
Differential revision: D4617
Reviewed by: @phosit
Comments by: @Stan @vladislavbelov
Fixes: #5850
This was SVN commit r27202.
L10 falls back to language code, that means if "pt_x" is not available
it falls back to "pt", but we do not provide "pt", same for "en" or
after uninstalling and removing language pack and leaving language
selected.
Adding warning.
Related post:
https://wildfiregames.com/forum/topic/96800-terms-display-error
This was SVN commit r27201.
Differential revision: D4818
Reduce how many times configuration is written into the file pointed out
by @nani and @Freagarach in D4616
Also fix bug in 281bb0b2ec
This was SVN commit r27194.
remove path from javascript
path is defined by the configuration scope
combine some calls
remove not needed calls
Differential revision: D4616
Accepted by: @Freagarach, @nani
Comments by: @phosit
This was SVN commit r27192.
Only 4 new textures, as the biome extensively uses the flexibility of
the terrain system to pull assets from other biomes and form a coherent
new biome.
This was SVN commit r27177.
Actual colors will be another commit.
Discussed with: @wowgetoffyourcellphone.
Differential Revision: https://code.wildfiregames.com/D4811
This was SVN commit r27172.
We only use relaxng and that confuses other linters like xmllint.
Patch by: @Langbart
Differential Revision: https://code.wildfiregames.com/D4748
This was SVN commit r27170.
Rebased from a
Patch by: @elexis
Accepted by: @asterix
Comments by: @smiley
Differential Revision: https://code.wildfiregames.com/D1664
This was SVN commit r27163.
It doesn't properly handle mixins / special templates
On python 3.8+, XML elements are no longer sorted and this fails
validation against entity.rng
mixins are not properly applied because the | split is incorrect (3
max items instead of 2)
merge="" is not supported
Parents aren't always passed when they should be.
on windows it is incorrectly assumed that the encoding is 1252
Patch by: @baco
Tweaks by: @Stan
Based on a patch by: @wraitii
Differential Revision: https://code.wildfiregames.com/D4698
This was SVN commit r27161.
It is unused at this point and causes their farming upgrades to be
non-functional
Accepted by: @Silier @wowgetoffyourcellphone
Differential revision: https://code.wildfiregames.com/D4791
This was SVN commit r27144.
Only entities which have capture attack themselves will contribute to
the regen-rate of a structure.
The `garrisonRegenRate` is now a multiplier how much each unit
contributes their strength.
Quite some gameplay change, but we can experiment with this.
Differential revision: https://code.wildfiregames.com/D4679
Comments by: @chrstgtr, @marder, @wraitii
This was SVN commit r27142.
First patch for an emergency mode. This implements a rudimentary
detection strategy.
The current effect is a shout-out for help.
Patch by: @JCWasmx86
Differential revision: https://code.wildfiregames.com/D4645
Refs. #2195
This was SVN commit r27141.
VictoryConditions.js gamesetting sends multiple updates to 'active' and
'disabled', instead of just one single update at the end. This is
listened to by amongst others the regicide 'hero garrison' setting, thus
`HeroGarrison` is deactivated, and then tries to be reactivated from the
init attributes, and then disabled again later.
This implements a simple fix, VictoryConditions only sends a single
update in FromInitAttributes with the end-state.
Differential Revision: https://code.wildfiregames.com/D4793
This was SVN commit r27135.
Windows now builds the actor editor for autobuilds, and stores the test
results.
All bundle now has an option to only build the macOS bundle and uses the
number of cores available to build.
docker-translations now builds the long string locale. Fixes#5009.
New script that is run periodically to check if the nopch build still
works.
Docker docs now builds the template analyser data and uploads it to the
server.
Add the design docs script.
Add a new script to build the game using linux with custom flags, such
as gles, clang, special linker etc.
This was SVN commit r27096.
Patch by @s0600204.
This lets all technologies show up correctly in-game and in the
structure tree again.
accepted by: @marder @Freagarach
Fixes: #6587
Differential Revision: https://code.wildfiregames.com/D4755
This was SVN commit r27042.
Brute forcing the right arrangement, which is unnecessary but accepted
since it has only a negligible performance impact overall.
accepted by: @lyv @andy5995
Fixes: #6390
Differential revision: https://code.wildfiregames.com/D4747
This was SVN commit r27039.
After feedback on the first RC's :
https://wildfiregames.com/forum/topic/83323-balancing-the-han/
This version of the roster seems to have a minimal concensus.
This removes some units from the very big roster of the Han,
restructures it and changes the cavalry crossbow champion for an
infantry one due to histrorical issues.
It furthermore reverts the changes to the champion infantry crossbow
template introduced in 9411d8c98e as that nerf wasn't necesarry.
This means that the Han and the Macedonians now have a champion crossbow
unit with the same stats.
Also:
Fixes#6560 by only keeping the "academy" templates, so that the Han can
now only train champions from the academy. Therefore, this reverts parts
of c4bdbe4dd9 and all of 2c9a6704e0.
Discussion with : @borg- @real_tabasco_sauce @wowgetoffyourcellphone
AIEND @Stan and other people on the forums and the Diff.
Differential revision: https://code.wildfiregames.com/D4713
This was SVN commit r27009.
- Allows the immortals to be "upgraded" between sword and bow yielding.
- Reduces batch training time per progressing phase.
- Don't kill the immortals partly when reducing their training time.
- More units from the CC.
- Enable the Ice House.
Patch by: @borg-
Differential revision: https://code.wildfiregames.com/D4724
Accepted by: @chrstgtr, @real_tabasco_sauce
Comments by: @marder, @Stan
This was SVN commit r26996.
The motion parameters were calculated even without members, which caused
us to try set a undefined passclass.
Also were members added to previously merged twin-formations. Once
merged (i.e. disbanded), they are moved out of world now.
Some cleanups/deduplication whilst at it.
Reported by: @andy5995 at the forums
(https://wildfiregames.com/forum/topic/71578-feedbacks-from-a26-svn-tests/page/8/#comment-505078)
Differential revision: https://code.wildfiregames.com/D4727
Comments by: @Langbart, @marder
Tested by: @Langbart
Fixes#6580
This was SVN commit r26993.
Similar dps as a slinger now, but with higher repat time. Normal citizen
soilder cost.
Nerf the crossbow training technology a bit.
Make the archer & crossbow technology availabe in the stable as well, as
it they also affect cavalry units.
accepted by : @real_tabasco_sauce
positive comment from: @borg-
Differential revision: https://code.wildfiregames.com/D4721
This was SVN commit r26988.
Misscommunication if this was the right move or not.
Leave the size as it was until someone has time to fix all buttons at
once.
This was SVN commit r26987.
ON large screens like 5120x1440 calculated shadow map was 32768. That
was 16x more than high setting, 32x more than medium setting and 64x
more than low setting.
After this change shadow map sizes using very high setting by resolution
will be following:
1920x1080 - 4096
2560x1440 - 4096
3840x1440 - 4096
5120x1440 - 8192
3840x2160 - 4096
7680x4320 - 8192
Patch by: @karmux
Reviewed by: @vladislavbelov, @Stan
Differential Revision: https://code.wildfiregames.com/D4723
This was SVN commit r26983.
Seemed a bit strong, especially with the hero.
accepted by : @borg-
Differential revision: https://code.wildfiregames.com/D4714
This was SVN commit r26982.
Add a little bit of food cost. Not enough to hugely change stuff, but
just an addition to make it a little bit harder to mass them.
Conceptual agreement from @chrstgtr @real_tabasco_sauce
Differential revision: https://code.wildfiregames.com/D4710
This was SVN commit r26974.
192 worked as well but the error spam isn't really nice going above 256
is madness anyway.
Reported by: @Langbart
Fixes: #6578
This was SVN commit r26969.
The bottom deco on the right is 2 pixels wider than the one on the left.
Patch by @Langbart
Differential revision: https://code.wildfiregames.com/D4717
This was SVN commit r26968.
Which had the Trainer component, but not the user-required
ProductionQueue.
Differential revision: https://code.wildfiregames.com/D4695
Reviewed by: @Stan
Comments by: @jprahman
Fixes#6570
This was SVN commit r26958.
Improves their functioning significantly.
Based on a patch by @lyv
Differential revision: https://code.wildfiregames.com/D4666
Reviewed by: @marder
Comments by: @Stan
This was SVN commit r26956.
They make problems on several maps where they either float (e.g.
harbor.js) as they are placed to close to a cliff/ on a hill or they
cover way too much (e.g. D4699 / wild_lake.js).
Related: https://code.wildfiregames.com/D4699#199688
one could adjust all maps, but it is so much easier to just change the
actors here.
accepted by: @wowgetoffyourcellphone
Differential revision: https://code.wildfiregames.com/D4701
This was SVN commit r26943.
Without shadow filtering, artifacts may appear at some angle (shadow
bias issue). This change ssome settings so that these are less common.
Reported by: langbart
Accepted by: marder
Refs #6552
Differential Revision: https://code.wildfiregames.com/D4681
This was SVN commit r26934.
Follows f8d2927748.
There is an issue with text-wrapping and word separators (aka spaces).
Because 0 A.D. collates the space after a word to the same TextCall, we
occasionally need to ignore it when considering line-wrapping, because
we don't want empty spaces on the right-side of right-aligned text.
However, the logic to handle this is currently broken and inconsistent.
The method introduced here uses the SFeedback structure to properly
report it and generalises the checks.
Note that multiples spaces are not collapsed in 0 A.D., and for
consistency the word-separator-collapsing behaviour is ignored.
Comments by: phosit, vlasdislavbelov
Fixes#6551
Differential Revision: https://code.wildfiregames.com/D4662
This was SVN commit r26915.
Follows d86148defc.
Resetting the wonder time when an ally to the wonder-owner is defeated
seems like double-punishment, and should not happen.
Resetting on explicit diplomacy change remains in Allied victory mode.
Fixes#6527
Reported by: Langbart
Differential Revision: https://code.wildfiregames.com/D4661
This was SVN commit r26914.
Rename the file to be consistent with its title.
Also `centre` -> `center` as per the style guide. Reported by @nwtour at
https://code.wildfiregames.com/D3530#171291.
Reported by: @Langbart
Essentially a patch by: @Langbart
Fixes#6548
This was SVN commit r26913.
and also patch the AI by partly reverting 87ec9457c3
based on a patch by @Langbart
Fixes#6309
accepted by : @Freagarach
conceptual agreement from @chrstgtr @borg- @Stan
Differential revision: https://code.wildfiregames.com/D4249
This was SVN commit r26898.
reported by @Langbart ; Fixes#6503 , also adjusts the footprint to fit
better to the actor
comments by: @Stan
accepted by : @phosit
Differential revision: https://code.wildfiregames.com/D4655
This was SVN commit r26897.
While it may be historically correct, it arguably can lead to very
broken looking behavior where siege towers try to get out of the min
range, but fail since the are attacked and end up shifting and turning
around uselessly, which just looks broken.
And since the min distance for siege towers is very small, I doubt that
it will actually change anything about the gamplay.
accepted by : @chrstgtr
Differential revision: https://code.wildfiregames.com/D4657
This was SVN commit r26894.
Fixes 08e7efc76a.
The SM build script worked on its own, but the mac OS libraries script
passes it an unexpected value.
This also fixes cross-compilation arm -> x86.
Harfbuzz is explicitly not used when compiling freetype to avoid
pkgconfig using it.
Reorganize the logic a little bit around architecture handling.
Differential Revision: https://code.wildfiregames.com/D4647
This was SVN commit r26882.
- Update GMP to a version that supports arm64 darwin
- Patch spidermonkey 78 to build and run on arm64 darwin
- Choose the correct architecture dynamically in build scripts
- Include python workaround that fixes python related errors on
spidermonkey build
Based on a patch by: kumikumi
Based on a patch by: Langbart
Fixes#6474
Differential Revision: https://code.wildfiregames.com/D4607
This was SVN commit r26881.
Follows 8eecc39e71.
Piping the autostart through a GUI page is easy but requires using the
GUI in non-visual mode, which is problematic since it's not initialized.
The GUI is not needed, only its ability to load scripts, so this diff
fixes the problem by adding an 'entrypoint' script in the new
`autostart` folder that gets called with this unique ability, setting
things up properly. The mod mod gets a placeholder.
Other changes:
- Fix some issues with networked autostart:
- Players were not assigned slots.
- The host didn't actually wait for other players.
- Move gamesettings from `gui/gamesettings/` to `gamesettings/`. This
moves attributes as well.
- Move autostart files from `gui/autostart/` to ` autostart/`. Note that
`gui/autostart/` still exists as it's used in the tutorial button from
the main menu.
- Rename the JSI_VFS functions to be explicitly about their function:
the ability to write and the potential restricted folders.
- Don't require `autostart` when using `--autostart-client` in
non-visual mode.
Starting the autostart client/host has poor UX in some situations, but
improving that feature is beyond the scope of this diff.
Suggestions for future work:
- Some files in gui/common should probably be moved elsewhere
- Template loading code is duplicated
- The gamesetup code still needs work for proper UI/logic separation.
Help & comments by: smiley
Reported by: vladislav / Langbart
Fixes#6513
Differential Revision: https://code.wildfiregames.com/D4628
This was SVN commit r26879.
The function that is calculating the difference between the two angles
is missing some parentheses.
Didn't notice it sooner as it works in 95% of all cases without them,
but sometimes you can see the formation doing a wrong turn.
reviewed by : @Freagarach
Differential revision: https://code.wildfiregames.com/D4626
This was SVN commit r26874.
Improves pathfinding for the general case (no large entities in a
formation).
Differential revision: https://code.wildfiregames.com/D4605
Comments by: @marder, @Stan, @wraitii
This was SVN commit r26873.
Correctly fetch the civ from the player's Identity.
Also remove the notions of the CivChanged message, since it was
effectively deleted already.
Differential revision: https://code.wildfiregames.com/D4486
Reviewed by: @wraitii
Comments by: @bb, @Silier, @smiley, @Stan, @vladislavbelov
Fixes#6444
This was SVN commit r26872.
Follows ea72437739. Fixes it by providing a convenience function in the
component Manager that matches the API in the GUI / AI
Refs #6444
Differential Revision: https://code.wildfiregames.com/D4630
This was SVN commit r26867.
Fixes 5de50c447c
Changing the passability class at runtime breaks some UnitMotion
assumptions in unrecoverable ways and will lead to units getting into
impassable terrain.
Formation controllers can tolerate it since units still check their own
obstruction.
Until some code is added to recover from the above bad case,
de-activated changing passability class for non-formation controllers.
This also fixes serialization issues related to clearance & passability
classes following that diff.
Reviewed By: Freagarach
Differential Revision: https://code.wildfiregames.com/D4629
This was SVN commit r26865.
Having a small instant turn angle apparently makes units (not only
formations) lag when spamclicking.
Patch by: @marder
Differential revision: https://code.wildfiregames.com/D4593Fixes#6440
This was SVN commit r26855.
Allow to modify pixel distance when mouse input is detected as drag e.g.
for selection box.
Differential revision: D4624
Refs: #6506
Comments by: @vladislavbelow @Freagarach
Tested by: @psypherium
This was SVN commit r26843.
People shouldn't be punished in a competitive setting for having high
graphic settings.
Patch by: @marder
Differential revision: https://code.wildfiregames.com/D4596
Reviewed by: @wowgetoffyourcellphone
This was SVN commit r26838.
Number groups from 1 - 10 replacing group 0 with group 10 for default
hotkey 0.
Differential revision: D4615
Reviewed by: @Langbart
Fixes: #6509
This was SVN commit r26837.
Also improve the terrain for Cycladic Archipelago 2p.
Fix naming conventions for Acropolis Bay, Chang Jiang, and Tarim Basin.
Add these new and updated maps to the "New Maps" campaign.
This was SVN commit r26818.
60befbd1cf added the exact same implementation to the rmgen tool,
469d0fe5c5 removed the rmgen tool along with the original implementation
of noise.
Patch By: smiley
Differential Revision: https://code.wildfiregames.com/D4611
This was SVN commit r26810.
- Better fitting decals
- Player color
- Warships use the larger, easier to see projectile like buildings do
- Upgrading variants
- Standardized decals for Stables
- Fix a few death variants
- Some better tree props
- Fixed sheath position for the Roman Centurion
- Add Cavalry variants for Gallic heroes (templates will come later)
- A more "British" shield for the Brit fanatic
- Add a new Atlas building for the Spartans, the "Persian Stoa"
- Add distinct actors between lit and non-lit Fireships
This was SVN commit r26764.
- Different dirt decals for 3 Iberian structures
- Variations for the trees on the Kushite wonder
- Spec maps for a couple Athenian units
- Changed textures for Gallic elite javelineer
- New textures for the Ptolemy war elephant driver
- Peytral for the Elite Seleucid jav cav
- More helmet variants for the Elite Seleucid spear cav
This was SVN commit r26757.
Since formations have `cmpIdentity` now (b778caf146), they were
incorrectly selected when cycling through idle entities.
Reported and tested by: @Langbart
Differential revision: https://code.wildfiregames.com/D4588Fixes#6490
This was SVN commit r26756.
It was overlayed with the FPS overlay which rendered it unreadable.
Introduced in 7c3aed5f36
Reported by: @Langbart
Patch by: @phosit
Differential revision: https://code.wildfiregames.com/D4585
Comments by: @elexis
Fixes#6484
This was SVN commit r26755.
- Gymnasium to the second phase.
- Allow training the marines and cretan archers there.
- Move the above mentioned tech to that structure and the dock.
Patch by: @marder
Differential revision: https://code.wildfiregames.com/D4537
Comments (implied acceptence) by: @chrstgtr, @ValihrAnt
This was SVN commit r26754.
Currently garrisoned ships easily kill organic units that dare to get to
close to them. A garrisoned ship is a killing machine like nothing else
in the game.
This patch solves their absurd deadliness against organic units. Ships
get 12 pierce attack and a 3x multiplier against other ships so they can
sink enemy ships at comparable rate as in A24 and A25.
Differential revision: D4507
Patch by: @LetswaveaBook
Reviewed by: @wowgetoffyourcellphone
Comments by: @marder @wraitii @Freagarach
This was SVN commit r26753.
As well as patrolling.
Formations kept moving, finding targets and instructing their members to
attack (thereby resetting their attacking state every time).
We now move into `MEMBER` upon finding a target.
Differential revision: https://code.wildfiregames.com/D4550
Comments by: @Stan
Fixes#6461
This was SVN commit r26741.
Introduced in 20bb3ea4a3.
We assume at many places that an entity has cmpIdentity and as such we
add it here as well.
Patch by: @Langbart
Differential revision: https://code.wildfiregames.com/D4583Fixes#6416
This was SVN commit r26740.
- Date Palm actor variations for use on structures and elsewhere
- Fixed missing player color on the Celtic battering ram
- Unit actor fixes and updates
- Updated a Spartan unit texture and added a spec map for weapons
This was SVN commit r26709.
So decrease their attack spread to 3, increase their crush damage and
also increase their vision range slightly, so you can actually see what
they attack.
This still means they are primarily useful against buildings, and not
unit killer as in a23.
Patch by: @marder
Differential revision: https://code.wildfiregames.com/D4511
Accepted by: @chrstgtr, @ValihrAnt, @wowgetoffyourcellphone
Comments by: @Langbart, @Stan
This was SVN commit r26703.
As opposed to the Starting Economy Walkthrough, which is less
beginner-friendly.
Patch by: @azayrahmad
Differential revision: https://code.wildfiregames.com/D4194Fixes#6347
This was SVN commit r26702.
Lowers default terrain grid height, which helps with shadow
sharpness on old shadows and allows for more vertical height
A nicer Skybox as default
One of the new higher-quality Terrain Textures by default
Patch by: @wowgetoffyourcellphone
Accepted by: @marder
Differential Revision: https://code.wildfiregames.com/D4446
This was SVN commit r26700.
Add a normal variant.
Patch by: @marder
Accepted by: @wowgetoffyourcellphone
Differential Revision: https://code.wildfiregames.com/D4555
This was SVN commit r26698.
World pop was added with edb956424e, words (no preposition & articles)
for the title heading in the game setup are all capitalized except
population.
Patch By: @Langbart
Accepted by: @wowgetoffyourcellphone, @marder
Differential Revision: https://code.wildfiregames.com/D4564
This was SVN commit r26674.
Move the Han head textures to the proper folder and delete the bad
folder. Adjust the head actors to the correct texture folder.
Improve the han_fem_c.png face texture and the Han female citizen
portrait.
Improve the Han fisherman actor to use better textures.
This was SVN commit r26670.
Requested by @Silier at 93b22c5f86.
This notifies players when using a non-numeric value and guards the
simulation against such cases.
Previous behaviour was that a cheat was executed with its default value.
Now the cheat is not used.
Differential revision: https://code.wildfiregames.com/D4485
Comments by: @bb, @Silier
This was SVN commit r26657.
The function was redundant for a long time, but made an error in
73f741d266.
Reported by: @marder
Differential revision: https://code.wildfiregames.com/D4541
Tested by: @marder
Fixes#6458
This was SVN commit r26656.
This increases their damage slightly from 10 to 11
Differential revision: D4510
Patch by: @marder
Reviewed by: @wowgetoffyourcellphone
Comments by: @chrstgtr
This was SVN commit r26640.
Discussion:
https://wildfiregames.com/forum/topic/71582-fixing-chinese-han/
This removes the Champion training aspect and reduces the GarrisonHolder
from 2x to a 1.5x bonus, the same as the health and capture points
bonus. 2x garrisoning caused there to be a prohibitive number of arrows.
Replaces the champions with faster batch training speed. Unlocked heroes
still remain.
This was SVN commit r26634.
Discussion:
https://wildfiregames.com/forum/topic/71582-fixing-chinese-han/
Previously, one could capture an enemy Barracks or Stable and train Han
champions there without researching the champion unlocking techs. This
rectifies this (in an admittedly hacky way) by creating duplicate Han
champion templates with suffix "_academy" and putting those in the Han
Academy with the RequiredTechnology of City Phase.
The original Han champion templates, which are what can be trained in
captured Barracks and Stables, are given the unlocking
RequiredTechnology respective to their class (as most of civs'
champions).
Both Templates have the same SelectionGroupName, so should be selectable
together with a double-click with no problem.
Please report problems in the above linked thread.
This was SVN commit r26632.
- Make his capture attack be 20% less than heroes, but 40% more than
champions (previously his capture attack was a whopping 20)
- Add an attack-move soundgroup
- Discussion:
https://wildfiregames.com/forum/topic/71582-fixing-chinese-han/
This was SVN commit r26631.
They fled whilst healing and not when idle. That is the other way around
than expected.
Introduced in healing introduction (c56f96040e); #999 specifically made
them flee, but it left quite undefined behaviour.
Reported by @BreakfastBurrito_007 on the forums somewhere.
Differential revision: https://code.wildfiregames.com/D4532
This was SVN commit r26618.
- Remove GarrisonHolder from the Han Dock, as it messed up the trade
route waypoint feature.
- Maybe investigate a way to get around this.
This was SVN commit r26591.
- Fixing Thespian Melanochitones and Theban Sacred Band errors
introduced in 8c8d765c06
- Fixing some shield errors introduced in f2346b6796
This was SVN commit r26589.
Add deepCompare function to utilities to easy and reliably compare js
variables.
Comments By: Langbart, Stan, asterix
Differential Revision: D4521
This was SVN commit r26583.
- Attempt to fix all instances where there caused a problem. Still on
the lookout for anymore gremlins.
- Will hunt down and remove unused meshes in a later commit.
This was SVN commit r26566.
Implement a threshold between "turning" the formation and "rearranging"
it.
Patch By: marder
Based on Patch By: alre
Comments By: Freagarach, Stan, Silier
Glanced good By: Freagarach
Differential Revision: D4294
Forum Topic:
https://wildfiregames.com/forum/topic/44848-proposals-for-formations/#comment-452917
This was SVN commit r26520.
Attempt at making Crossbow teching less OP:
- Remove "Repeating Crossbows" as it was historically problematic and
was also OP for crossbows.
- Reduce the RepeatTime bonus in "Crossbow Training" from -33% to -20%.
This was SVN commit r26519.
Removed the ability of the Han to research 'Will to Fight' from a
captured Fortress. Reported by @faction_02 here:
https://wildfiregames.com/forum/topic/71578-feedbacks-from-a26-svn-tests/?do=findComment&comment=482636
Increased the cost and research time of 'Art of War' to match the other
two Han special Fortress techs.
On the backend moved the Han techs to the Fortress parent template.
Seemed cleaner.
This was SVN commit r26516.
This allows for more accurate textures for female units with intricate
patterns on their long skirts. Boudicca is the first example, provided
here.
This was SVN commit r26508.
Chariot Crossbowman -> Chariot Archer
- Adjusted Actors and template
Champion Cavalry
- Took away shield and gave cataphract animations
Champion Swordsman -> Champion Spearman
Liu Bang
- Gave him a different base animation variant
This was SVN commit r26507.
- Major thing is added the Chinese Chariot as a champion, trainable at
the Academy.
- Replaced Crossbowman with Archer as the starting ranged infantry. This
is still open for changing as there is a poll on the forum about it.
This was SVN commit r26482.
Remove obseleted function RemoveAllPlayers in 354bd8b088.
Linter stuff.
Don't initialise undefined world population value.
Differential revision: https://code.wildfiregames.com/D4494
This was SVN commit r26477.
Reduces duplication across components.
Allows to provide specific names and history for formations.
Differential revision: https://code.wildfiregames.com/D4476
Comments by: @bb, @Stan
Fixes#6400
This was SVN commit r26476.
Deep discussion here:
https://wildfiregames.com/forum/topic/71582-fixing-chinese-han/
Participants: @Yakaterina @BreakfastBurrito_007 @Lionkanzen @chrstgtr
Changes:
- New Starting units (Spearman, Crossbowman, Cavalry Swordsman)
- Farms 60 wood, 30 seconds
- Practice Range disabled (may be re-enabled in a future alpha)
- Infantry and Cavalry Crossbowmen rebalance
- New technology for the Han at the Forge: "Repeating Crossbows";
"Crossbow Training" at barracks tweaked to allow crossbows to fire
faster
This was SVN commit r26469.
Fix displaying unknow civilisation when civilisation defined by map is
not selectable but exists by switching two lists based on if selection
is locked or not.
Differential revision: D4429
Fixes: #6145
Reviewed by: @bb
This was SVN commit r26438.
This also creates a player_trans_norm.xml material, which was
conspicuously missing. Changed the material for the headband from a
parallax material to this new normal map material.
This was SVN commit r26427.
While at it fix the messages.json from ea72437739 (missing excludeMask
and make the keywords objects not arrays)
Comments By: Freagarach
Differential Revision: D4483
This was SVN commit r26422.
- Removed obsolete C++-side `addPlayer`, introduced in 4fed9b8242, moved
out of Atlas in 1c0536bf08, unused after 9ee44bd9b8.
- Get the player settings from a local function (avoids passing
arguments).
- Removed setting the standard diplomacy (done in cmpPlayerManager since
132020f88e).
- Create entity when adding a player instead of creating it and
instructing the playermanager to add it.
- Changed/Removed some comments.
Differential revision: https://code.wildfiregames.com/D4482
Comments by: @Stan
This was SVN commit r26404.
- Add support for mul_round
- Correct table
- BUGFIX: correct roster table via the mixin Civ fix
- avoid long lines for PEP8 compliance
- for mod development outside .svn repo, create symlink
- replace all TAB indents to 4 spaces for PEP8
- TAB to 4 spaces to be PEP8 compliant
- refactor complex inline logic to compute and formatting
- beautify and avoid long lines to be PEP8 compliant
- beautify and simplify JS table format code
- Using more accessible color scheme
- Better color scheme
- main analysis file
- Rename the new version back to keep consistancy
- dependency JS library
- Unit analysis result
- Rewrite specilized table logic to only show changed
- Prefer numeric flag over string flag to refactor
- Re-format HTML templates into readable source code
- Civ specific table now renders non-empty
- Update computeCivTemplate to parse A25 template dir
- Cleanup debugging flags
- Update copyright notice to 2022
- Explain how the code works for future development
- Initial README
- Refactor: put HTML IO code in a single function
- Refactor: include JavaScript as verbatim str
- Refactor: separate computation from IO
- Refactor: compute templates before HTML IO
- Refactor: compute CivTemplates before HTML IO
- Refactor: compute separate from IO code
- Fixed melee and ranged attack damage parsing
- Fixed Resistance parsing
- Implement the undefined function complain
- Rename Armour -> Resistance
- Simplify NumericStatProcess logic
Patch by: @hyiltiz
Differential Revision: https://code.wildfiregames.com/D4445
This was SVN commit r26403.
Fixing issues in dc18d94030
Everyone make sure to delete savegames, saved campaigns an most
importantly your matchsettings.json's (regular alpha players won't
notice since there is a version check, but if you already have your
stuff at A26/svn, you will have some issues)
Reported By: elexis
Comments By: wraitii, Freagarach
Differential Revision: D4240
This was SVN commit r26393.
- Actor texture refs updated to reflect the move.
- A couple of Atlas-only hero units.
- Maurya Sandbox scenario changed up.
This was SVN commit r26385.
When the victory conditions dictate that someone loses when e.g. losing
their CC, the message that the other player(s) had won was sent before
the former player was actually defeated.
When the victory conditions dictate that someone wins when e.g.
capturing all relics, the message that they have won was sent after the
message that the rest has lost.
This changes those.
Differential revision: https://code.wildfiregames.com/D4478
Comments by: @bb, @Silier
This was SVN commit r26382.
Which is more generic. It means we don't have `chicken = oPeacock` and
the like anymore.
It adds a default scaling function such that people replacing the
animals are puzzled by the different number of starting animals./To keep
the amount of food roughly equal to the amount standard provide by
chicken.
Patch by: @marder
Differential revision: https://code.wildfiregames.com/D4472
Comments by: @smiley, @Stan
This was SVN commit r26381.
- Actor texture refs updated to reflect the move.
- A new Roman champion unit added for fun, "Praetorian."
- An "infantry" version of Scipio Africanus to match the other 2 Roman
heroes.
- New Roman helmet models and actors.
- A bunch of unused textures deleted.
This was SVN commit r26371.
- Renamed many textures to the new texture naming standards.
- Adjust many unit actor refs for these textures (and improve the look
of the actors while I'm at it).
- A bunch of unused texture deleted.
This was SVN commit r26357.
- Renamed many textures to the new texture naming standards.
- Adjust many unit actor refs for these textures (and improve the look
of the actors while I'm at it).
- A bunch of unused texture deleted.
This was SVN commit r26355.
- Use stencils by Lion.Kanzen for Ptol and Sele
- Use the lotus pattern from the Maurya civ emblem to better match
visually
- Tweak the Macedonian star a little
This was SVN commit r26351.
- Add support for tips
- Fix other scripts not writing to the correct output (they were writing
info messages to stderr)
Based on a patch by: @mammadori and @cyrille
Differential Revision: https://code.wildfiregames.com/D3213
This was SVN commit r26350.
Use the class for the chat to accomodate size issues in some languages.
Chat size issue reported by: Zeldt on forums
Initial solution by: Nescio
Comments By: elexis, nwtour, Freagarach, vladislav, wraitii
Differential Revision: D2623
fixes#4252
This was SVN commit r26349.
- Renamed many textures to the new texture naming standards.
- Adjust many unit actor refs for these textures (and improve the look
of the actors where applicable).
- A bunch of unused texture deleted.
This was SVN commit r26347.
- Renamed some textures to the new texture naming standards.
- Adjust unit actor refs for these textures (and improve the look of the
actors where applicable).
- A bunch of unused texture deleted.
This was SVN commit r26337.
- Renamed some textures to the new texture naming standards.
- Adjust unit actor refs for these textures (and improve the look of the
actors where applicable).
- Fix some file refs in some previously committed actors and variant
files noticed by silier and stan.
- Delete an old, unused elephant prop.
This was SVN commit r26336.
- Delete old and (now) unused examples.
- Renamed textures to the new texture naming standards.
- Adjust unit actor refs for these textures (and improve the look of the
actors where applicable).
- Attempt to set all txt/xml files to EOL-native
This was SVN commit r26329.
This allows the "wololo" cheat to switch units to an arbitrarily defined
player. If no player is specified, it defaults to the player entering
the cheat.
The player manager will warn when using a wrong player number.
Patch by: @Nullus
Differential revision: https://code.wildfiregames.com/D4479
Comments by: @Stan
This was SVN commit r26328.
(Not with dragging, since that would be hard to use, UX-wise.)
It allows easier debugging; less switching between players.
Differential revision: https://code.wildfiregames.com/D4477
Comments by: @asterix, @Silier, @Stan
This was SVN commit r26327.
- Delete old and (now) unused examples.
- Renamed textures to the new texture naming standards.
- Adjust unit actor refs for these textures (and improve the look of the
actors where applicable).
- Attempt to set all txt/xml files to EOL-native
This was SVN commit r26318.
- Renamed them to the new texture naming standards.
- Adjust unit actor refs for these textures (and improve the look of the
actors while I'm at it).
- Fix texture refs for some spart textures noticed by @Stan.
This was SVN commit r26314.
- Renamed them to the new texture naming standards.
- Adjust unit actor refs for these textures (and improve the look of the
actors while I'm at it).
- Attempting to use the correct SVN move commands this time.
This was SVN commit r26313.
- Boeotian cavalry helmet with "plume" as seen in many references.
Bronze, Gold, and Silver variants. Silver crested Boeotian helmet with
laurel wreath.
- Custom pelte shield for the Spartan Phalangite.
- Special helmet for the '300' Leonidas.
This was SVN commit r26311.
- Renamed them to the new texture naming standards.
- Adjust unit actor refs for these textures.
- Accidentally used the wrong svn move option this time. Will use
correct one moving forward.
- Thanks be to @Stan for his assistance.
This was SVN commit r26310.
Introduced in b4fbbed379
Use Date.now() to calculate passed time.
Rewrite to class.
Also actually pass timeout from json.
Differential revision: D4318
Comments by: @vladislavbelov, @Stan
This was SVN commit r26306.
Patch by: @nwtour
Differential revision: D4340
Reviewed by: @Silier
The patch adds a description from the technology file to tooltip when
hovering over rank icon.
This was SVN commit r26300.
Since the players/civs already have cmpIdentity, use it.
This forces civs to have corresponding XML in the `special/players/`
folder.
Also moves the files from `special/player/` to `special/players/`
consistent with other folders. And moves the generic `player.xml` one
level up.
Differential revision: https://code.wildfiregames.com/D4473
Help and comments by: @Stan, @wraitii
This was SVN commit r26298.
Reduced resolution of a bunch of unit textures to the consistent 256x256
(and some animals from 1024 to 512)
Introduce some new textures and texture improvements
Begin to introduce some civ folders (that reorganization is coming
later)
Adjust some unit actors to look nicer
This was SVN commit r26295.
This makes it possible to make units heavier, which both push more & get
pushed less by other units.
In particular, the diff does it for siege units & elephants.
This improves movement for these units in crowd situation, since they
will now basically not move when other regular units push into them.
Supported By: asterix, marder
Refs #6127
Differential Revision: https://code.wildfiregames.com/D4452
This was SVN commit r26275.
This is a paradigm change for AI computation.
Historically, the AI was intended to be run in a separate thread from
the simulation. The idea was that slow AI wouldn't stop the renderer
from being smooth.
In that original design, the AI received a copy of the game world and
used that to run its logic. This meant the simulation could safely do
whatever it wanted in the meantime. This copy was done via AIProxy &
AIInterface.
This design ended up having significant flaws:
- The copying impacts the simulation negatively, particularly because
AIProxy subscribes to a lot of messages (sometimes sent exclusively to
it). This time cannot be threaded, and impacts MP games without AIs.
- Copying the data is increasingly difficult. Modifiers are a headache,
LOS is not implemented. Lots of logic is duplicated.
The intended benefits of the design also failed to realise somewhat:
- The AI was never threaded, and in fact, it is probably better to try
and thread Sim + AI from the renderer than just the AI, at which point
threading the AI specifically brings little benefit.
The new design is much simpler and straighforward, but this has some
side-effects:
- The AI can now change the simulation. This can be used for cheating,
or possibly for a tutorial AI.
- The AI runs in the same GC zone as the simulation, which may lead to
more frequent Sim GCs (but overall we might expect a reduction in
temporary objects).
- The AI state was essentially cached, so replacing some functions with
Engine.QueryInterface might be slower. The tradeoff should be balanced
by lower AIProxy computation times.
Future work:
- Threading some specific AI tasks could still be worthwhile, but should
be done in specific worker threads, allowed to run over several turns if
needed.
Technical note: the AI 'global' is in its own Realm, which means name
collisions with the same are not possible.
Other notes:
- The RL Interface uses the AI Interface and thus will gradually lose
some data there. Given that the RL Interface can now request data
however, this should be dine.
Refs #5962, #2370
Differential Revision: https://code.wildfiregames.com/D3769
This was SVN commit r26274.
Users sometimes ended up with bad (wrong version) XMB files in the user
mod. This resulted in A25 loading a black screen.
There is a combination of unfortunate code paths that lead to this. The
core issue is that:
- cdd75deafb changed the XMB loading code that if there is an error in
Init from a cached XMB, it reports an error. This error happens to be
silent, because the GUI expects CXeromyces to do its own error reporting
(a pretty poor decision, all in all, but whatever). This explained why
the black screen showed no errors.
- The code flow attemps to load an 'archive' XMB first, then only a
loose cache. _But_ if the XMB that fails to load is an archive (which
generally never happens except when using incompatible mods, which is
generally less easy in A25 since we added code to stop that), then the
game will try to recreate the XMB as an 'archived' path, not a 'loose
cache' path as it would usually do.
- Because the 'archived' path already exists in the VFS, the game will
attempt to overwrite that. It so happens that in non-dev copies, this
writes to the user mod.
- Because the user-mod is always loaded, this was unexpected for users.
Fixing this is rather simple: the game should never attempt to write
'archive' XMBs in that function. Added explicit barrier, which shouldn't
matter performance-wise but fixes the issue by writing in the proper
place, and also properly recovering in case of read failure.
I will note that the game will still try to load the archived file, and
recreate it every time, but I don't think that's a particularly big
deal, in general having engine-incompatible mods in the future should be
harder because of A25 changes there.
(NB: users that have used both A24 and A25 should perhaps still be
advised to check their user mod folder, otherwise they'll end up
recreating those files forever).
Reported by: dave_k
Fixes#6320
Differential Revision: https://code.wildfiregames.com/D4275
This was SVN commit r26272.
The UnitManager already lists all units, so we do not need to go through
the visual actor of entities to update them. This is faster and
decouples simulation & graphics code slightly.
Further, the simulation does not need to know about texture changes (see
also 410d2e883a), so remove those calls in Atlas.
Differential Revision: https://code.wildfiregames.com/D4455
This was SVN commit r26270.
6581796103 removed the ability for terrain to affect movement speed. The
JPS pathfinder cannot support it, and the approach was poor anyways,
coupling rendering data with simulation data.
This lets us remove the dependency on CTerrainTextureManager everywhere.
Tested by: langbart
Differential Revision: https://code.wildfiregames.com/D4459
This was SVN commit r26269.
The new values in 158cf8ea8d were too high, units would push each other
too much when building. This lower value should fix that, though further
adjustements may be necessary.
Reported by: Freagarach.
Differential Revision: https://code.wildfiregames.com/D4461
This was SVN commit r26261.
There is no need to have BuildAnimation in CModel when everything is
done in CObjectEntry anyways.
This removes a pointer in every CModel object, which is nice.
Accepted By: vladislavbelov
Differential Revision: https://code.wildfiregames.com/D4454
This was SVN commit r26254.
Moves the work done from cmpResearcher to cmpTechnologyManager.
No functional changes.
It allows fancy stuff in the future (#6364).
Differential revision: https://code.wildfiregames.com/D4438
This was SVN commit r26252.
RENDERDATA_UPDATE_COLOR was used to precompute lightEnv-dependent data
on the CPU. This is no longer done following engine upgrades, and in
particular d7d02a4740 which explictly always did this on the GPU.
ModelAbstract had a 'SetDirtyRec' hack for it because of decals, which
can also be removed. The 'dirty' bit of CRenderableObject is renderdata
for the specific item, never its props, so it never actually needs to be
recursive.
CheckLightEnv is also useless as a result, and removed.
Differential Revision: https://code.wildfiregames.com/D4453
This was SVN commit r26249.
The main change is the introduction of a 'pushing pressure' counter on
units. This counter increases when units get pushed around, and
decreases over time. In essence, units under high pressure move slower &
are harder to push around.
The major effect is that units can now get bogged down when very dense
groups start colliding. This makes movement more realistic, makes unit
movement more 'chokepointy', and generally improves the mathematical
soundness of the system (lower values are easier to handle for our 200ms
turns).
Other changes:
- The logic to detect units crossing each other's path has been
reworked. Units that run towards each other should not more obviously
avoid each other.
- New parameters: 'Spread' is a measure of how strong the pushing effect
is based on distance. With the current settings, static-pushing is
rather 'on/off', whereas moving-pushing is more gradual (and thus the
max influence distance was increased when moving).
- Default values have been tweaked for lower overlap.
- Units only looked at other units within their grid region. This led to
overlap near grid-borders. Units now look at neighboring grid elements,
which largely removes this issue. While this may be slower, the
performance of pushing was largely negligible before, so it is unlikely
to become a main cause of lag (and overlap was generally disliked by
players).
- Units no longer orient in the direction of pushing, but instead keep
facing their target. This can look slightly odd under very heavy pushing
forces, but vastly improves behaviour of very slow units such as rams
(since they spend much less time turning around). As a side-effect,
clean up angle code following acc780bcbb .
Engine changes:
- Add a debug rendering mode at compile-time to help understand what is
happening.
- Make it possible to constexpr initialise fractional fixed numbers by
using FromFraction
The 'pressure' change was inspired by alre's suggestion at
https://wildfiregames.com/forum/topic/56436-for-a-better-unit-movement/#comment-461987
Refs #6127
Differential Revision: https://code.wildfiregames.com/D4439
This was SVN commit r26245.
dropsiteSupplies kept a list of resources and did not remove exhausted
resources, leading to possibly buggy resource-management in the AI code
(and needless computations).
Differential Revision: https://code.wildfiregames.com/D4442
This was SVN commit r26244.
One needs UnitAI to be able to use a formation, so include the spec
therein (to keep information close to where it is used).
Modders can change their templates with the following script:
https://code.wildfiregames.com/P261.
Differential revision: https://code.wildfiregames.com/D4443
Comments by: @Stan
Idea accepted by: @wraitii
Fixes: #6399
This was SVN commit r26235.
The ResourceTrickle component has been changed to a global aura instead.
It increases the trickle slightly, but catafalques are unbalanced
anyway.
Patch by: @Grapjas
Differential revision: https://code.wildfiregames.com/D4383
Refs. #6032 by fixing the Macedonian specific case, but not showing the
tooltips, as requested.
This was SVN commit r26234.
As requested by @wowgetoffyourcellphone to be more in line with
afc77e20a4.
Differential revision: https://code.wildfiregames.com/D4433
Tested by: @astrix, @wowgetoffyourcellphone
This was SVN commit r26221.
In GL3.0 alpha test mode was deprecated and removed in GL3.3. We should
use discard/kill in shaders instead.
In shaders alpha test was removed in d3a24c26ba, in FFP it was removed
with FFP in b7e6811ea6.
Differential Revision: https://code.wildfiregames.com/D4434
This was SVN commit r26211.
This allows cross-compiling for x86_64 on mac ARM machines, and sets
things up for a switch later.
SDL upgrade is necessary for compilation with the GLES headers in
different SDKs.
Tested by: langbart, minohaka
Differential Revision: https://code.wildfiregames.com/D4424
This was SVN commit r26208.
8d80a2186e removed the values for the tech cost multipliers from the
templates, since the component uses those default values, but failed to
account for modifications thereof.
Those weren't applied since the template value didn't exist.
This changes that to iterating over all resources.
Reported by: @Langbart
Differential revision: https://code.wildfiregames.com/D4409
Tested by: @Langbart
Fixes: #6408
This was SVN commit r26192.
Issue noticed by Exodarion.
After researching technology for resourcetrickle modifiers were
returning old cached value because modifiers were not cleared for
structure when it was build and changed owner from invalid_owner to the
player so old values were kept.
Cause:
global cache depends on originalvalue.
Health and other modifiers use also player-wide modifiers and result
from that is used as the key, what means global cache is never used
because originalvalue will differ in that case.
That does not look to be case for resourcetrickle and possibly for
another scenarios.
Modifiers that get cached on init and do not get changed by player-wide
modifiers in combination with ownership being changed afterwards will
bug.
Since we dont reset cache for ownership going from invalid_player, the
old global cache is kept and used.
Another solution would be to not cache on init, but thats workaround to
hide the issue.
Differential revision: D4395
This was SVN commit r26134.
To catch e.g. typos.
- Use the same structure in the ProductionQueue item (de)serialisation
as in Trainer and Researcher.
- Also iterate over the serialisable attributes on deserialize, as
proposed by @elexis (on IRC), for its symmetry.
Proposed by: @Stan
Differential revision: D4388
This was SVN commit r26133.
For it was not really clear.
Patch by: @nwtour
Differential revision: https://code.wildfiregames.com/D4362
Accepted by: @asterix
This was SVN commit r26130.
When signature is invalid, it does not comunicate the reason clearly.
Fix this.
Also remove silent failure in case of signature is not valid.
Differential revision: D3478
Reviewed by: @bb
This was SVN commit r26111.
This patch attempts a more systematic approach, by standardizing the
<Loot/xp> to 20% of <Health/Max>.
Differential revision: D3681
Patch by: @Nescio
Reviewed by: @borg- @wowgetoffyourcellphone
Comments by: @Palaxin
This was SVN commit r26110.
A typo in the serialisation function.
Also just serialise the properties that are assigned in cmpResearcher
and cmpTrainer.
Introduced in e4925e02d0
Reported by: @nwtour
Differential revision: https://code.wildfiregames.com/D4386
Tested by: @nwtour
This was SVN commit r26105.
Some languages use singular form for another counts than 1, what makes
singular strings in english with hardcoded number causing incorrect
string to be displayed.
Adding special branch for english singular string since it looks nicer.
Differential revision: D4377
Patch by: @nwtour
This was SVN commit r26096.
Comments by: @nwtour, @Langbart, @bb
Based on patch by: @echotangoecho
Tested on Windows 7 & 10, Ubuntu and macos.
Differential Revision: https://code.wildfiregames.com/D721
This was SVN commit r26093.
Reported by @nani:
Sorting by "has password" in lobby game list does nothing
Add sorting value.
Differential revision: D4382
Reviewed by: @Freagarach
Fixes: #6392
Introduced in: c2155e31c0
This was SVN commit r26090.
-Standardize naming convention (sample_01_01, where first 01 = type and
following, 01 = subtype)
-Add new variants
-Minor update to previous textures
This was SVN commit r26086.
Since it needs a better UX. (Introduced in a70a20fd42.)
Users can choose to still use it.
Differential revision: https://code.wildfiregames.com/D4360
Comment by: @wowgetoffyourcellphone
This was SVN commit r26076.
It was deemed unintuitive to select the whole formation when clicking an
icon.
Differential revision: https://code.wildfiregames.com/D4295
Comments by: @alre, @Langbart, @marder, @wowgetoffyourcellphone
This was SVN commit r26075.
`ElevationBonus` is vague, as discussions proved. Therefore it is
renamed to `Origin`, which, describes better what the value stands for.
`Delay` is also quite vague, so renamed to `EffectDelay`.
Differential revision: https://code.wildfiregames.com/D2016
Comments by: @bb, @nani, @Nescio, @Silier, @Stan, @wraitii
This was SVN commit r26074.
And define it (the attack_move sound) in the templates, such that
modders can change it at will.
Patch by: @wowgetoffyourcellphone
Differential revision: https://code.wildfiregames.com/D4364
This was SVN commit r26073.
- Use the correct material, as texture has no alpha, therefore no player
color
- Add missing textures where necessary
- Use null_white for hele_blacksmith_bucket_water instead of loading
useless textures.
Refs: #6326
This was SVN commit r26054.
In 2f24006afb, the siege state for no trainer was not assigned to
variable but used in condition.
Making use of that state actually.
Differential revision: D4367
Patch by: @JCWasmx86
This was SVN commit r26053.
There was an infinite loop:
Order.Gather -> MustKill (L497) -> PushOrderFront(Attack) (L526) ->
NotInRange (L410) -> NotAbleToMove, thus finish order (L426/427) ->
Restart from Order.Gather.
We do two things here:
- Assume we don't have vision when garrisoned, which is not a bad
assumption.
- Check the range and if we are not able to move and not in range,
finish the order.
Introduced in: d3c3072c83
Reported by: @Langbart
Differential revision: https://code.wildfiregames.com/D4349Fixes: #6377
Tested by: @Langbart
Comments by: @Silier, @Stan
This was SVN commit r26044.
It was explicitly allowed in 0c4f59d0a7, but not all references to
`this.template` were properly checked.
Noticed by: @nwtour
Differential revision: https://code.wildfiregames.com/D4357
Tested by: @nwtour
Comments by: @Stan
This was SVN commit r26043.
In 5d3902498f there was a wrong substitution.
`AttackManager` -> `AttackPlan` for the attack types.
Patch by: @JCWasmx86
Differential revision: https://code.wildfiregames.com/D4369
Reviewed by: @Silier
Tested by: @nwtour
This was SVN commit r26041.
-Sword sheath position switch
-Make heroes look more historically accurate
-New hero textures (Caradoc and Boudicca)
Reviewed by: Genava55, wowgetoffyourcellphone and other community
members
This was SVN commit r26037.
This would cause fishes to be spawned on land under a specific set of
conditions. Cases where the concerned land is not painted clPlayer for
example (which fish also avoids).
Added by @marder: spacing of the forest and wood amount was corrected as
the above ^ pushed the wood away from the player.
Original patch by: @smiley
Additional changes by: @marder
Differential revision: https://code.wildfiregames.com/D1729
Comments by: @elexis
Tested by: @Freagarach
Fixes: #5797
Refs. #3746
This was SVN commit r26003.
The task of the production queue should first and foremost be that; a
queue for production items.
Hence, the specifics of training/researching are delegated to specific
components.
As a side effect, this improves the test coverage and fixes:
- Resource not refunding when hitting the entity limit. Introduced in
b8758c8941.
- Autoqueue changing when unable to spawn. Introduced in 956b3f96db.
Modders can change their templates using
https://code.wildfiregames.com/P256.
Differential revision: https://code.wildfiregames.com/D4333Fixes: #6363
Comments by: @Silier
Refs. #6364
This was SVN commit r26000.
344d1cc837 introduced a tech that percentually increased the required XP
for archers, showing a decimal value.
This rounds that up, for 150/150 without being promoted looks bad as
well.
Patch by: @Langbart
Differential revision: https://code.wildfiregames.com/D4322
Reviewed by: @Angen
This was SVN commit r25984.
Allows devs (and players) to skip the summary page when they don't need
them.
Patch by: @Schweini
Differential revision: https://code.wildfiregames.com/D3958
Reviewed by: @Langbart
Fixes: #4300
Comments by: @nwtour, @Stan
This was SVN commit r25978.
Triple click should have been an <Alt>+DoubleClick.
While at it, removed the unneeded brackets at the hotkey translations.
Patch by: @Langbart
Differential revision: https://code.wildfiregames.com/D4314Fixes: #5409
This was SVN commit r25977.
Cursor should not blink in read-only.
The path was too similar to the list and thus easy to miss, it has been
changed to a 'golden' colour.
A tooltip was added to the path.
The border colour of input fields was changed from white to gold.
The buttons at the bottom of the page are spread evenly.
Patch by: @Langbart
Differential revision: https://code.wildfiregames.com/D4296
Refs: #6350
This was SVN commit r25976.
Required experience can be set to 0 initially and because entity is
upgrated after simulation starts, there was division by 0 in atlas for
such entities causing experience bar going to infinity.
Differential revision: D4317
Fixes: #6362
Patch by: @Langbart
Reviewed by: @Angen
This was SVN commit r25974.
Our bridges are nothing more than actors, so using one is correct.
We also delete the template files to prevent others from making the same
mistake (if someone encountered and fixed the bug in a mod they have
modified templates anyway).
Patch by: @Langbart
Differential revision: https://code.wildfiregames.com/D4297
Reviewed by: @bb
Comments by: @Angen
Fixes#6352
This was SVN commit r25972.
Use dropdown with values. Implement confirmation box with countdown to
revert scale change because buttons can get unable to click.
Differential revision: D3037
Comments by: @vladislavbelov, @Stan, @wraitii, @pieq, @sera
Tested by: @Langbart
This was SVN commit r25966.
If someone would try to copy petra and use it as base of own ai, one
would not be able to run both ais at the same time and had to fix that
global constant anyway.
Differential revision: D4301
Reviewed by: @Freagarach
This was SVN commit r25957.
It was reported that the word farm in the Introductory Tutorial is
incorrect and it should be replaced with Field.
Game refers to them as 'Field' so change is correct.
Differential revision: D4299
Patch by: @Langbart
Fixes: #6345
This was SVN commit r25955.
Deselecting a part of a formation didn't deselect the whole formation,
since the logic was done quite weirdly.
This clarifies and fixes that.
Reported by: @Langbart on D4282.
Differential revision: https://code.wildfiregames.com/D4285
Comments by: @Angen, @Langbart
Tested by: @Langbart
This was SVN commit r25948.
FinishOrder called SetWaitingOnController, although the order
(constructing) had pushed another order (gather).
This is done now by telling we finished the order only when really idle.
This seems to boil down to the question: If we issued an order to a
formation, and its members have wandered off (imagine attacking an
entity and our members have finished the initial target but attack
nearby ones) do we want the whole formation to continue attacking or
execute the next order.
Also fixes reforming whilst attacking when an attack order was issued by
the player.
Reported by: @Langbart at https://code.wildfiregames.com/D2175#182343
Differential revision: https://code.wildfiregames.com/D4282
Tested by: @Langbart
This was SVN commit r25947.
Fixes an infinite loop when the next treasure is outside LOS.
Differential revision: https://code.wildfiregames.com/D4286
Comments by: @Angen, @bb
Fixes: #6329
This was SVN commit r25946.
This adds minor regeneration to fish (when not gathered) and fruit
(always) as a nice extra for casual players.
The values are chosen to be low, as to not affect competitive play much.
Patch by: @Nescio
Differential revision: https://code.wildfiregames.com/D3868
Comments by: @chrstgtr, @marder, @Stan, @wraitii
This was SVN commit r25940.
One can override this behaviour by using a hotkey when (de)selecting
entities.
The aim of this system is to reduce micromanagement a bit.
Differential revision: https://code.wildfiregames.com/D2175
Comments by: @Angen, @azayrahmad, @Langbart, @marder, @Stan,
@submariner, @wowgetoffyourcellphone, @wraitii
Refs. #4545
This was SVN commit r25939.
We now make use of `pkg-config` on Linux, BSD, and macOS systems to find
the headers and libs for the following dependencies, where we weren't
previously:
* `enet`
* `fmt` (on macOS only)
* `gloox`'s dependencies on macOS:
* `gnutls`
* `gmp`
* `nettle`
* `libcurl`
* `libogg`
* `libsodium`
* `miniupnpc` (on macOS only)
* `openAL`
* `openGL`
* `vorbis`
* `zlib`
Please see revision (https://code.wildfiregames.com/D3611) for details.
NOTE: All those building on macOS will need to rebuild their libraries
(`build-osx-libs.sh --force-rebuild`)
Tested by: Langbart (macOS), Freagarach (Ubuntu 18.04), Jenkins CI
(Debian Buster)
Comments by: Stan, wraitii, Freagarach
Differential Revision: https://code.wildfiregames.com/D3611
This was SVN commit r25938.
It removes the software implementation intentionally. Because it
duplicates SDL functionality. But it might be added in future on demand.
Tested By: bb, Langbart
Differential Revision: https://code.wildfiregames.com/D4278
This was SVN commit r25936.
If a *nix user wishes to build `pyrogenesis` with support for Valgrind
(such as
it is), then can do so by passing `--with-valgrind` to
`update-workspaces.sh`.
(They will need Valgrind installed and locateable via `pkg-config`.)
Reviewed By: sera, Stan
Fixes: #2904
Differential Revision: https://code.wildfiregames.com/D3646
This was SVN commit r25933.
Since f1acd22455, mods are checked for compatibility. However, they can
incorrectly be checked & added to inompatible mods several time, leading
to a potential crash.
The new code can also be simplified slightly.
Reviewed By: Angen
Differential Revision: https://code.wildfiregames.com/D4276
This was SVN commit r25926.
Don't try to research some techs which are useless when we have no ally.
Ideally we don't put these techs in the config as well, but check the
usefulness and/or dependencies.
Differential revision: https://code.wildfiregames.com/D4218
Reviewed by: @Angen
Comments by: @Stan
This was SVN commit r25923.
With the addition of the new resource icons for stone and metal, the
text was too close to the icon so the distance between the text and the
icon is increased.
Also, synchronises the colour of the number of gatherers in the top
panel with the colour in the tooltip explanation.
Patch by: @Langbart
Differential revision: https://code.wildfiregames.com/D4032
Comments by: @Stan, @wraitii
This was SVN commit r25922.
Message is translated correctly.
Issue was sprintf replaced %(unit)s before message was going to be
translated so string was never found in dictionary.
Introduced in b97d251322
Differential revision: D4254
Patch by: @Ceres
Based on code by: @nwtour
Reviewer: @Angen
This was SVN commit r25916.
After 738b200dda, where the mirage should be queried in the
Start/StopAttacking functions.
Reported by: @bb
Differential revision: https://code.wildfiregames.com/D4267
Reviewed by: @bb
This was SVN commit r25914.
Introduced in c888844b3a.
The problem was trying to set the amount to Infinity by substracting
Infinity from it.
Differential revision: https://code.wildfiregames.com/D4263
Tested by: @Langbart
Fixes: #6317
This was SVN commit r25912.
Introduced in 4e664dd712.
The basesManager assumed at least one base (as was the case earlier).
`this` was used in a passed function, which therefore was undefined.
Differential revision: https://code.wildfiregames.com/D4253
Tested by: @marder
Comments by: @Langbart, @Stan
This was SVN commit r25911.
Not done in afd1eaee0d.
Also remove references to `queued` and `pushFront` in the `setStance`
functions, since they (currently) have no meaning.
Reported by: @bb
Differential revision: https://code.wildfiregames.com/D4261
Reviewed by: @bb
This was SVN commit r25902.
Put passability values to prototype variables.
Code looks more readable.
Differential revision: D4236
Refs: #6256
Comments by: @Freagarach, @Stan
This was SVN commit r25883.
public mod does not have to be activated, moving compatibilityColor to
mod
Differential revision: D4237
Refs: #6294
Comments by: @bb
This was SVN commit r25881.
Tell user about help command, when requested command is not supported
Differential revision: D4229
Reviewed by: @Langbart, @Freagarach
Comments by: @bb
This was SVN commit r25880.
The HQ should only care about high-level stuff, hence something like
managing/looping individual bases is now done in a `BasesManager`,
similar to the `AttackManager`.
Differential revision: https://code.wildfiregames.com/D4192
Comments by: @Angen
Fixes: #6185
This was SVN commit r25876.
Removes the manual hotkey tooltips from summary and gamesetup in favor
of the general one.
Based on patch By: ffffffff
Reviewed By: Freagarach
Comments By: elexis, Stan
Differential Revision: D1264
This was SVN commit r25872.
At some point make clean should take care of this.
Proposed By: elexis in D256
Approach suggested by: leper
Reviewed By: Freagarach
Differential Revision: D4219
This was SVN commit r25871.
This allows a player to task entities to drop off their resources and
subsequently attack-move to a specified location with one button.
Patch by: @JCWasmx86
Icon by: @Stan
Differential revision: https://code.wildfiregames.com/D4149Fixes: #1364
Comments by: @Langbart
Based on a patch by: @Freagarach (https://code.wildfiregames.com/D1868)
This was SVN commit r25868.
Background pause does require a game restart to take effect.
Adding function to update it on runtime since only place where it is
used is in main.cpp.
Differential revision: D4181
Fixes: #6236
Tested by: @Langbart
This was SVN commit r25866.
Currently script checks only singular translations
Add branch to check plural strings as well
Differential revision: D4199
Refs: #4250
Comments by: @Stan
This was SVN commit r25865.
Metadata are stored in an object {} making check for key in the object
irrelevant, since not existing key will result in returning undefined
value.
On top of that, merging metadata existance if condition into returning
statement.
Differential revision: D4195
Reviewed by: @Freagarach
This was SVN commit r25862.
Replace wrename, that fails when mod exists already with RenameFile by
@Stan
Check if mod was actually installed when downloading it
error if mod cannot be coppied into modTemp
Differential revision: D4222
This was SVN commit r25854.
since 498f0d420b
While at it, remove not used variable after 6400a4a0c5
also fix non visual replay broken in 6400a4a0c5
Differential revision: D4220
Tested by: @Stan, @Langbart
Fixes: #6288
This was SVN commit r25853.
Differential revision: D4211
Since 498f0d420b available mods where cached and not updated when new
where installed.
Fixing above.
This was SVN commit r25850.
Differential revision: D4209
Since some revision wraitii will probbaly know, I am not going to look
for it, guiobjects require exact data type so casting does not work when
it is not done beforehand.
Error reported by Stan.
Now installing pyromod should not trigger errors.
This was SVN commit r25849.
Introduced in c87229aa48, FindWalkAndFightTargets returns after the
first UnitAI finds a target, instead of also querying the rest of the
members.
Differential revision: https://code.wildfiregames.com/D4208
Comments by: @Stan, @wraitii
Fixes: #6260
This was SVN commit r25847.
Attack orders can be and looks like are pushed in front of formationwalk
order.
That is generally also logic in single entity behaviour.
In case formation gets destroyed and then target dies, attacker is
supposed to stop attacking target immediately.
That essentially leads to getting to old formationwalk command, what was
not issue for packable units until 674cdae166, that introduced
formationcompoennt into the order.
Hovewer abandoning this order without being in formation makes more
sense. Probably this one and FormationLeave should be FORMATIONMEMBER
specific commands and error out in INDIVIDUAL state, but thats too much
refactoring and potential rabbit hole.
Differential revision: D4206
Reviewed by: @wraitii
Accepted by: @asterix
Fixes: #6263
This was SVN commit r25845.
Bug introduced in 76acc4e146.
The previous CUnit code had logic to select random aesthetic variants
once initially. The new code removed that, as I completely missed its
purpose, assuming that the random selection, being based on a seed,
would pick the same variants every time. This is incorrect because
entity selections can change the RNG calls, thus the variants, and thus
entity appearance can change when the animation changes (typically, a
horse will change color when walking and running).
The solution is to re-introduce the choice of actor selections on CUnit
creation. This makes sure that units don't change their purely-aesthetic
selections when e.g. animations change.
Reported by: Wowgetoffyourcellphone
Tested By: Stan
Differential Revision: https://code.wildfiregames.com/D4205
This was SVN commit r25844.
d2948937a0 introduced code to read Heightmap images into RM terrain
data. However, the original diff contained a bug where it read
Out-of-bounds array data for grayscale images. This bug was hidden by
another issue until D1816 / cbc04ba83b, which changed the code and made
the OOB read actually relevant. The effect was twofold:
- The height chosen was not the max of the 3 color channels, but the max
of the 3 neighboring pixel (thus slightly lowering the quality of
generated maps)
- The height for the bottom-right coordinates were random memory values,
thus garbage.
This random height ended up resulting in non-deterministic map
generation, which was reported on Ngorongoro.
The cause of this silent failure is that the transformation to BGRA is
not applied for grayscale images, as the alpha transformation is
processed first and exits. This is not per-se buggy, so it is not
changed here.
The fixed behaviour is specialized for the common grayscale case, and
retains the max-of-3-color-channel intended behaviour otherwise.
Fixes#6261.
Reported by: Feldfeld
Differential Revision: https://code.wildfiregames.com/D4203
This was SVN commit r25843.
- Restore original language names, and keep an English fallback in case
the font is missing for some languages.
Fixes: #6023Fixes: #6255
This was SVN commit r25839.
Since 3d7af82328 PetraAI constructed many ships (and cavalry) because
they have the "Ranged" class and we didn't check for "Infantry" anymore
when training workers.
Basically a patch by: @Angen
Differential revision: https://code.wildfiregames.com/D4193
Reviewed by: @Angen
Refs. #6250 by fixing the ships case.
Fixes the concern on 3d7af82328.
This was SVN commit r25828.
PetraAI can't cope with that and it may be a suprise for other players
as well, when a captures production entity has autoqueue enabled.
Differential revision: https://code.wildfiregames.com/D4185
Refs: #6213
This was SVN commit r25819.
Fix map not generating with nubia and steppe biomes (Missing farmsteads
and mercenaries)
Fix an oak being placed no matter the biome and use a biome tree instead
Use the goat instead of a sheep for the alpine biome.
Refs: 4de9c4c164, #6180
This was SVN commit r25816.
std::array leave the values in an undefined state which can very well be
'true'.
Tested By: Freagarach
Fixes#6205
Differential Revision: https://code.wildfiregames.com/D4170
This was SVN commit r25802.
I had used a debug image which I left in and which looks broken.
Removing it defaults to the normal 'missing preview' 0 A.D. image which
looks more correct.
Differential Revision: https://code.wildfiregames.com/D4172
This was SVN commit r25801.
Settings like Landscape, Daytime & team placement are map dependent. If
"random" map is chosen, we first must select the map before selecting
these.
This wasn't done correctly and so starting "random" map that picked e.g.
Unknown could fail.
Biomes were already correctly handled.
Reported by: langbart
Fixes#6227
Differential Revision: https://code.wildfiregames.com/D4173
This was SVN commit r25800.
e0800bc092 introduced a `repairable` toggle, but did not mirage that
function, meaning one could not repair an allied miraged structure.
Reported by: Langbart
Patch by: Freagarach
Refs #6226
Differential Revision: https://code.wildfiregames.com/D4171
This was SVN commit r25799.
Prevents overflow in some translations, and aligns it better with the
tip image.
Patch by: Langbart
Fixes#4754
Differential Revision: https://code.wildfiregames.com/D4167
This was SVN commit r25793.
Updates the map previews of all the Best for MP maps & Empire
This removes the fancy mainland biome switch because it was the only map
to do that and we lack the tools to automate it.
Differential Revision: https://code.wildfiregames.com/D4159
This was SVN commit r25789.
- Actually win at the end, thus advancing the campaign
- Count rams properly
- Show the ready button for the city-phase when cheating.
Reported by: langbart
Fixes#6188
Differential Revision: https://code.wildfiregames.com/D4161
This was SVN commit r25788.
Too similar to either Nearestern Badlands or Mainland.
It seems better to remove it from the filter for this release.
Differential Revision: https://code.wildfiregames.com/D4160
This was SVN commit r25787.
I think there is a small mismatch between CheckMovement & the vertex
pathfinder when computing passability because one is ray-based and the
other just uses edges. However, it's out of my reach to fix it for now.
This can lead to units being stuck near building edges occasionally.
This introduces an un-intrusive recovery strategy (aka a hack) in
HandleObstructedMove that should get the units unstuck.
Should fix#6114 (to a sufficient extent anyways)
Differential Revision: https://code.wildfiregames.com/D4162
This was SVN commit r25786.
Link to the forums instead of solely the known issues. We have an FAQ
button already, and there are fewer known issues than in the past.
Remove the bit about formations, which isn't really relevant anymore,
and instead add a request for contributions.
Differential Revision: https://code.wildfiregames.com/D4156
This was SVN commit r25785.
The pathfinders are not aware about turn time, and pathing becomes quite
poor with such low turn rates, leading to units that take much longer to
move than they used to.
Until the pathfinders are updated, we should refrain from using very low
turn rates on actual units.
Refs #6142
Differential Revision: https://code.wildfiregames.com/D4163
This was SVN commit r25784.
The campaign screen currently shows both the name of the run (selected
by the user) and the name of the campaign. This is, by default, the
same, and thus looks weird.
Reported by: langbart, marder
Tested by: marder
Differential Revision: https://code.wildfiregames.com/D4158
This was SVN commit r25780.
The graphical interface will show autoqueued units as 'ghost' units so
the player gets immediate feedback on what's happening.
The autoqueue disengages if it runs out of resources or entity limits:
this reflects that the autoqueue cannot resume on its own.
By changing the spot where the autoqueue pushes items, the autoqueue no
longer 'buffers' one unit in advance, but remains very slightly less
efficient than manual queuing. This also prevents cheats from leading to
a ton of units accidentally being created.
Accepted By: Freagarach
Refs #6213
Differential Revision: https://code.wildfiregames.com/D4144
This was SVN commit r25779.
There was an issue in 07e44a75a1 that made the game details mostly red
with incompatible mods.
This fixes that: now only the 'Mods' title is red, and I added specific
text to highlight why it's colored that way.
Based on a patch by: Langbart
Differential Revision: https://code.wildfiregames.com/D4153
This was SVN commit r25778.
When tasked to gather, entities looked for resources close to their
current location when the target was invalid (e.g. full).
Now on forced orders the entities will look for resources close to that
order's location, when possible.
Differential revision: https://code.wildfiregames.com/D4146Fixes: #6085
Reviewed by: @Imarok
Tested by: @Langbart
Comments by: @marder, @Stan, @wraitii
This was SVN commit r25776.
Introduces a new helper to place mines. use it on 'Best for MP' maps for
stone and metal.
The amount of metal will scale with the # of players, and will place
slightly more mines overall for fairer distribution.
This should make 1v1 and 4v4 more playable on these maps.
Differential Revision: https://code.wildfiregames.com/D4148
This was SVN commit r25772.
Both maps were using extremely high smoothness setting, that did nothing
but lag extremely.
Differential Revision: https://code.wildfiregames.com/D4150
This was SVN commit r25770.
New loading screen tips. Update for the pictures and the text.
Patch by: marder
Reviewed by: Freagarach
Some based on work of: wowgetoffyourcellphone
Fix#6191
Differential Revision: https://code.wildfiregames.com/D4107
This was SVN commit r25767.
- Hellas_biome isn't a RM but as a JSON script it does load, and then
silently fails on mapgen. Explicitly fail.
- Fix player.js when a valid position cannot exist.
- Fix unknown.js when landscape isn't set in the settings.
Reported by: vladislavbelov
Refs #6180
Differential Revision: https://code.wildfiregames.com/D4147
This was SVN commit r25765.
- Arctic biome was much too bright with postprocess (error in
717a9d0252)
- Change sun angle in Nubia to make the grass less yellow at default
camera angle
- Change sun angle in Steppe to make the game look less flat at default
camera angle.
Patch by: marder
Differential Revision: https://code.wildfiregames.com/D4145
This was SVN commit r25764.
There appears to be an SDL issue with linux and X11 that causes Keydown
events to be sent immediately when 0 A.D. gains focus. This can loead to
Alt-F4 quitting 0 A.D. immediately upon focus gain, such as when another
application was quit via Alt-F4.
The typical bug case was:
- Open 0 A.D.
- Open another app
- Alt-F4 other app
- 0 A.D. immediately receives alt-F4 as well and exits.
Since SLD handles this hotkey natively via SDL_QUIT, it seems easier to
default to "no hotkey", as that fixes the problem.
Reported by: Imarok
Fixes#6092
Differential Revision: https://code.wildfiregames.com/D4132
This was SVN commit r25762.
And slightly reduce the desaturation since it now looks better.
Patch by: marder
Differential Revision: https://code.wildfiregames.com/D4139
This was SVN commit r25758.
- Make Savanna and Nubia have a .25 Forest probability.
- Remove brightness changes from HDR, this made postproc look too
different, particularly on Savanna
- Lower postproc impact on constrast/saturation for the same reasons.
- Lighten up Aegean, Alpine, Savanna, Nubia, slightly darken Arctic
- Make Aegean water a bit bluer. Likewise lightwen Savanna water.
- Fix the sun elevation/rotation on Nubia, Sahara and Savanna
- Remove the HDR settings of Cantabrian Highlands
- Remove the water/HDR settings of Corinthian Isthmus RM
Comments by: marder
Differential Revision: https://code.wildfiregames.com/D4124
This was SVN commit r25757.
- Max garrison reduced to 20, like fortresses (caps the capture regen
rate)
- Can construct rams
- Cost an additional 100S/100M
The capture stats have been tweaked but there's no fundamental change.
See also D4080
Differential Revision: https://code.wildfiregames.com/D4109
This was SVN commit r25756.
This is intended to make a deathball of elephant archer less OP, as the
units are difficult to mass but really strong once that is done.
See D3599 for larger changes.
This was SVN commit r25755.
Autoqueue can ignore entity limits like Heroes, because AddItem does not
check for them, only commands.js. This changes that, fixing the
autoqueue.
Reported by: Player of 0AD
Tested by: langbart
Refs #6213
Differential Revision: https://code.wildfiregames.com/D4133
This was SVN commit r25753.
The Reference Suite (Structure Tree, Civ Info, Viewer) wasn't taking
into
account civilization- or team-bonus auras when calculating entity stats.
This wasn't really a problem (for Vanilla 0AD) prior to a18d97b047, as
civ-bonus auras don't exist in Vanilla 0AD, and our team-bonus auras
didn't
apply to the owning civ before that change. Now they do, the Suite needs
to
take them into consideration.
Differential Revision: https://code.wildfiregames.com/D4093
This was SVN commit r25751.
They were all set to hidden-by-default as part of b7ff371d00, only there
wasn't anything to tell them to unhide when we actually want them. This
commit
fixes that.
Differential Revision: https://code.wildfiregames.com/D4114
This was SVN commit r25750.
Following 40cbde1925, the minimum pushing force is 0.2. This also
happens to be the maximum pushing force any pair of units can exert on
each other, so they can freely overlap instead of being pushed.
This tweaks settings slightly to fix that problem.
Reported by: marder
Differential Revision: https://code.wildfiregames.com/D4129
This was SVN commit r25748.
Introduced in 40cbde1925
MoveToFormationOffset may be called after the formation controller is
reset, leading to issues. It seems best to trust only
SetMemberOfFormation.
This causes the speed glitch experienced by wow & Valihrant.
Differential Revision: https://code.wildfiregames.com/D4128
This was SVN commit r25747.
The structTree, in case of errors, could have enough items to draw to
trigger an OOM failure in the Arena allocator.
This fixes that by hiding elements by default and some c++ memory
optimisation (mostly, this should make all platforms take the same
memory footprint for VisibleObject).
Discussed with vladislavbelov and s0600204
Differential Revision: https://code.wildfiregames.com/D4114
This was SVN commit r25746.
Redo 09a33b6626.
When the host set te 'best for mp' mapfilter and a non-default maps,
ordering issues bugged things out.
This handles things slightly better.
Fixes#6208
Differential Revision: https://code.wildfiregames.com/D4121
This was SVN commit r25741.
The .png get converted to .dds and they failed to load. Use a custom
CacheLoader since that's lightweight enough and avoids having to hack
into the texture manager.
Thanks Stan for testing
Differential Revision: https://code.wildfiregames.com/D4119
This was SVN commit r25738.
The game is slightly over 3G now.
This doesn't affect the actual DMG size, just the maximum size we can
write into it.
Differential Revision: https://code.wildfiregames.com/D4118
This was SVN commit r25737.
As no default values got set, some game settings became NaN, which
triggered exceptions.
This sets sane default.
This also includes better debugging logic in case of exception, so it's
easier to know what happens.
Fixes#6200
Reported by: langbart
Differential Revision: https://code.wildfiregames.com/D4113
This was SVN commit r25736.
This is unexpected and does not seem particularly useful/sensical.
Patch by: pszemsza
Fixes#5214
Differential Revision: https://code.wildfiregames.com/D3929
This was SVN commit r25733.
- Settings weren't sent to the server when mapfilters change.
- Because of ordering issues, the 'multiplayer' mapfilter would be
activated at the wrong time and things would go haywire.
- Likewise, selecting a non-default map with a non-default filter
wouldn't work well.
Fixes#6208
Differential Revision: https://code.wildfiregames.com/D4111
This was SVN commit r25731.
Formation controllers that were about to be destroyed could bug out.
It's plausible this bug would also happen with regular units, but
couldn't reproduce.
Differential Revision: https://code.wildfiregames.com/D4110
This was SVN commit r25730.
Follows 9a3da390b9 / b5bbed4690.
Forge technologies are cheaper in A24, but still too expensive to use
directly, making the forge not immediately useful.
This changes the technologies from 2 levels to 3, and further decreases
costs.
Instead of 600/400 then 900/600, costs are 200/100, 350/250 then
500/400. This makes the Town Phase techs immediately accessible, and
lengthens impact of City Phase with stronger late techs.
Iberians and Mauryas had a special "wootz steel" tech that gave
swordsmen +20% damage, this is folded into the 3rd level. I have not
changed the effect because the tech was cheap, but we shall see.
Patch by: Nescio
Comments by: borg-, Valihrant
Differential Revision: https://code.wildfiregames.com/D3679
This was SVN commit r25726.
Increases consistency, unlikely to be overpowered. Temple and Fortress
were considered but found risky of being too strong.
Patch by: langbart
Differential Revision: https://code.wildfiregames.com/D3994
This was SVN commit r25725.
Their lowered prepare time (since c78ead79e6) makes them too good at
hit-and-run, they should be slower since a crossbow is encumbering.
Accepted By: ValihrAnt
Differential Revision: https://code.wildfiregames.com/D4096
This was SVN commit r25724.
When switching scenarios, teams should always be reset.
Do nothing in skirmish mode.
Reported by: Stan
Differential Revision: https://code.wildfiregames.com/D4104
This was SVN commit r25723.
Elephants go from 2150 real HP to 2100 against Hack and 1700 against
Pierce.
The intention is to make them more vulnerable to range (and somewhat
spearmen as well).
Suggested by: Valihrant
Differential Revision: https://code.wildfiregames.com/D4058
This was SVN commit r25721.
This overall decreases the deathball effect from units walking to each
other a bit.
- Fix formations - this cleans up a UnitMotion hack for formations,
making it possible to increase pushing ranges without breaking closely
knit formations like testudo.
- Make MINIMAL_PUSHING and the MOVE_EXTENSION configurable, and add a
STATIC_EXTENSION as well.
- Increase the pushing range significantly, making units sparser.
Differential Revision: https://code.wildfiregames.com/D4098
This was SVN commit r25708.
- Rename to subalpine to fit the theme better & tweak tooltip
- improve the shore textures
- remove the snow dir texture which contrasted too heavily.
Differential Revision: https://code.wildfiregames.com/D4027
This was SVN commit r25701.
- Change the grass actor, which was too lighting dependent and heavy on
performance
- Change the main terrain texture which was quite noisy
- Change shore textures to be more seamless.
Based on a patch by: marder
Differential Revision: https://code.wildfiregames.com/D4025
This was SVN commit r25700.
Switch some logic from C++ to JS in PREGAME for player assignments. Refs
#3049Fixes#6204
Reported by: Imarok
Tested By: Imarok
Differential Revision: https://code.wildfiregames.com/D4092
This was SVN commit r25699.
A GUI sprite can have e.g. "color:" and "stretched:", but 'sprite' was
moved from after the first call.
Refs #6206
Differential Revision: https://code.wildfiregames.com/D4094
This was SVN commit r25698.
Reverts D1762 / 014c2922f2.
Because any territory connected to a root does not decay, this made it
possible to anchor CC territories by adding a fortress somewhere, thus
making it much, much harder to push against an enemy territory.
This led to a much more turtley gameplay and overall made the game
worse.
For now, I do not reintroduce the larger territory range (which was
reduced in 014c2922f2).
Differential Revision: https://code.wildfiregames.com/D3989
This was SVN commit r25697.
Add flaring on the map and resize the minimap buttons.
Target marker and button by Stan.
Reviewed/Commented by wraitii, elexis, vladislavbelov
Refs: #3491
Refs: #57
Differential Revision: https://code.wildfiregames.com/D1751
This was SVN commit r25691.
As a side effect of 6b7a80b260, this is now trivial to do.
We don't (currently) have any aura-based civ bonuses in Vanilla 0A.D.,
but hopefully modders will find it useful.
This was SVN commit r25690.
(The `civ` key (in the team bonus aura templates) was added in
190d6e7cf5 for the
purpose of identifying which aura belongs to which civ. It's no longer
used.)
Proposed by: @Nescio
Comments by: @Freagarach
Refs: 190d6e7cf5
Differential Revision: https://code.wildfiregames.com/D3864
This was SVN commit r25689.
std::atomic<bool> does not value-initialise the boolean.
This caused windows tests to use way too much CPU and fail.
Differential Revision: https://code.wildfiregames.com/D4089
This was SVN commit r25687.
Fixes 592453c62f
wasObstructed and wentStraight are not reset when Move() isn't called,
but PostMove may still be called (if the unit was pushed). This will
OOS.
Differential Revision: https://code.wildfiregames.com/D4088
This was SVN commit r25686.
This shows off the new maps, and shows off campaigns in a straighforward
manner.
Differential Revision: https://code.wildfiregames.com/D4020
This was SVN commit r25684.
Forgotten in c012888e2a. This is useful for campaigns that would want to
use the full gamesetup, and in general makes the gamesetup slightly more
flexible.
Differential Revision: https://code.wildfiregames.com/D4082
This was SVN commit r25683.
Food/Wood techs now cost Wood and metal (with food techs being slightly
less expensive as they provide less bonus). Metal/Stone techs now cost
Food and Stone instead of Wood and Metal, reducing the load on those
resources, and making Stone slightly more critical.
Initial work by: Nescio
Accepted By: chrstgtr, Valihrant
Differential Revision: https://code.wildfiregames.com/D3704
This was SVN commit r25682.
- Support biomes
- Hills, forests, food & metal mines won't spawn on the isthmus anymore,
to avoid obstructions and make things a little fairer
- Stone mines spawn only on the isthmus and players start only with
small stones
- Tidier forests
- The central passageway is sometimes slightly offset left/right
- The central passageway is surrounded by a walkable shallow, which
prevents effectively walling the actual passageway.
- Widen the river slightly.
Overall the intention is to make the map less of a turtle-fest, though
it remains chokepointy by nature.
Differential Revision: https://code.wildfiregames.com/D4062
This was SVN commit r25681.
- Denser forests
- frozen lake biome gets some watery holes in there, just to make it
slightly more mazey.
- Tweak the lighting of the specific biomes to avoid overexposing the
ground textures.
Differential Revision: https://code.wildfiregames.com/D4073
This was SVN commit r25680.
- Slightly denser forests with the new helper
- good default biome for African Plains in Atlas.
Differential Revision: https://code.wildfiregames.com/D4072
This was SVN commit r25679.
- reuse settings from the temperate biome
- More wood / slightly denser
- replace the aleppo pine with the Fir, looks better
- Rework the terrain textures
Differential Revision: https://code.wildfiregames.com/D4061
This was SVN commit r25674.
- Support the 3 african biomes.
- Bigger forests (same # of trees overall)
- More hills/watering holes, more animals there.
Differential Revision: https://code.wildfiregames.com/D4060
This was SVN commit r25673.
The new texture is less visually intrusive thus a better general fit.
Patch by: marder
Differential Revision: https://code.wildfiregames.com/D4026
This was SVN commit r25671.
It looks bad on the summary graph, and might need further adjustments in
general.
Discussed with: @Langbart, @Imarok, @wraitii
cc @wowgetoffyourcellphone
This was SVN commit r25658.
The pathfinder computations are run asynchronously (and potentially on
the main thread) in-between simulation turns, thus reducing
pathfinder-related lag considerably in common cases.
To make this most efficient, the number of paths computed during a turn
via MaxSameTurnMoves is reduced from 64 to 20.
This has a hard dependency on the obstruction manager (via the vertex
pathfinder) not being modified in-between simulation turn (or to put it
more generally on the simulation state not changing outside of turn
computation), otherwise results will be non-deterministic and go OOS.
This is currently entirely safe (as in, it indeed does not happen that
the simulation state changes in-between turn), but future work towards
improving simulation sandboxing would be good.
Thanks to Kuba386 for maintaining & improving the patch in 2020
Thanks to everyone who tested the various iterations of this patch.
Fixes#4324
Differential Revision: https://code.wildfiregames.com/D14
This was SVN commit r25657.
Tasks are simple callables (e.g. lambdas), and can be pushed with 2
priority levels. Pushing a task returns a future.
Futures can be waited on, can return results, and can be cancelled
deterministically. Futures can also not be waited on.
This gives 'hardware concurrency - 1' threads to maximize CPU usage in a
work-stealing workflow.
Reviewed by: vladislavbelov
Refs #5874
Differential Revision: https://code.wildfiregames.com/D3848
This was SVN commit r25656.
Prepare time is the time between an attack order and the arrows actually
flying.
Archers go from 500ms to 800ms standard, making them slower to fire than
other ranged units, and making them slightly harder to micro against
e.g. raids.
Javelineers go from 750ms to 400ms, for the opposite effect.
Crossbowmen, as a 'special' feature, get 200ms, meaning they fire their
first volley really fast despite their long repeat rate.
This also standardizes all javelineer units to have 1250ms repeat time.
Differential Revision: https://code.wildfiregames.com/D4050
This was SVN commit r25655.
The terrain update introduced large actors for both small and large
stone and metal actors. This replaces the small ones by the appropriate
small actors.
Patch by: marder
Differential Revision: https://code.wildfiregames.com/D4057
This was SVN commit r25654.
This makes it easier to have more forests with fewer trees, or fewer
larger forests.
Differential Revision: https://code.wildfiregames.com/D4059
This was SVN commit r25653.
Add some retro-compatibility to avoid issues.
First reported by: gameboy
Differential Revision: https://code.wildfiregames.com/D4066
This was SVN commit r25651.
Issue spotted by kalimaps
Reviewed by: wraitii
Code parts by: wraitii
Differential Revision: https://code.wildfiregames.com/D4043
This was SVN commit r25646.
In case mod is missing some required field, for example label or version
for some reason, mod page would stop functioning.
Adding default to empty string in list and filter.
Differential revision: D4028
This was SVN commit r25639.
This allows switching to the gamesetup, with a harcoded map, from the
campaign screen. Lets player sets up a few things (e.g. their civ &
favorite AI), which can be convenient for some simple campaigns that
lack options.
Differential Revision: https://code.wildfiregames.com/D4039
This was SVN commit r25636.
Since it is very non-trivial to determine which mods change checksums
and which don't, this relies on modder goodwill (and on verification on
our end for signed mods).
The declaration is an optional "ignoreInCompatibilityChecks" boolean in
mod.json
Also rework slightly the MP lobby mod display to always show the host
mods in a clear manner.
Differential Revision: https://code.wildfiregames.com/D3968
This was SVN commit r25634.
Fix some language elements, add some details, and update to SVN specs.
Make the window wider to have the first phrase take a single line in
English/most languages hopefully.
Differential Revision: https://code.wildfiregames.com/D4049
This was SVN commit r25633.
The champions these structures built were not very usable in practice
because of their limited build rate.
Apadanas are a special case since they grant resources, their limit is
increased to 2 and their resource rate divided by two (this reduces
their economic impact early on, but increases their potential military
impact).
The preferred solution would be giving apadanas a pop count, but that
does not work very well right now given that they grant resources and
can still be built.
Patch by: Valihrant
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D3897
This was SVN commit r25627.
Refs 42c70cd508, be286d4345, refs #5106
The introduction of "turn time" in A24 has been pointed out as a
gameplay change that made rushing less viable, and made the game more
turtley overall. Combined with other changes in the same direction, this
was seen by several top MP players as a step back.
Increasing turn times to 14 for infantry makes them somewhat irrelevant,
and a value of 10 for cavalry makes them noticeably more reactive while
keeping a little speed debuff.
Champions have a lower value, and heroes keep their lower values still
to prevent a reintroduction of 'dancing'.
Patch by: Valihrant
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D3971
This was SVN commit r25626.
It was underpowered and too costly.
Patch by: borg`
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D3698
This was SVN commit r25625.
The intention is that while mercenaries are still difficult and costly
to train, they are more effective in their particular niche.
Patch by: Nescio
Differential Revision: https://code.wildfiregames.com/D3699
This was SVN commit r25624.
The significant slowdown in train times, particularly for infantry
resulted in an increase in the # of barracks and overall contributed to
shifting towards a defensive, turtley gameplay.
Cavalry was already reverted in 8bd7a4f4b5.
Reverts parts of D2866/8726a2abbf.
Patch by: ValihrAnt
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D4033
This was SVN commit r25623.
Use a more memory-efficient layout, reducing memory usage and speeding
things up considerably.
Patch by: smiley
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D4021
This was SVN commit r25622.
This allows picking 'random' on a bunch of maps known to be playable in
MP, with the hope of increasing variety in actual maps played.
Discussed with players on the balancing forums.
Differential Revision: https://code.wildfiregames.com/D4012
This was SVN commit r25617.
Because the page stack is a vector, if during PushPage, a new page is
pushed, the vector may re-allocate. This 'pulls the rug out' from
underneath the code stack that originally pushed, which then crashes.
To fix this, use a deque, since push/pop won't invalidate references.
Reported by: Imarok.
Based on a patch by: Imarok (tests are his)
Differential Revision: https://code.wildfiregames.com/D4037
This was SVN commit r25616.
Variants can now have limited or no diversity. This can occasionally
speed rendering slightly (5-10% FPS increase was reported on Combat Demo
Huge, which is very variant-heavy).
Reported by: bb
Based on a patch by: bb
Fixes#5831
Differential Revision: https://code.wildfiregames.com/D3035
This was SVN commit r25613.
As the available biome was a Set, pickRandom didn't work.
Reported by: Langbart
Refs #6190
Differential Revision: https://code.wildfiregames.com/D4036
This was SVN commit r25611.
Kushites should not have a bolt accuracy upgrade in arsenal, as they do
not have the ability to produce bolts.
Fixes#6167
Patch By: Langbart
Differential Revision: https://code.wildfiregames.com/D4035
This was SVN commit r25609.
This patch decreases the popScaling so that the easy AI difficulties
have lower targeted population.
And it also decreases the size & priority of the attacks from the easy
an very easy AI.
Refs: #6149
Differential revision: D3997
Patch by: @marder
Tested by: @Langbart
Comments by: @wraitii, @Freagarach
This was SVN commit r25600.
Let PetraAI use MatchesClassList more.
Differential revision: https://code.wildfiregames.com/D2150
Reviewed by: Angen
Comments by: Stan
This was SVN commit r25584.
To allow incorporating more options, this splits the graphics settings
into two tabs, one containing general options (such as
silhouettes/windowed), and one with more advanced settings.
Accepted by: asterix
Differential Revision: https://code.wildfiregames.com/D3985
This was SVN commit r25581.
Disable AO on quarried objects as its arguably broken.
Adds a second uv in case it's enabled again to prevent crashes in Atlas.
Use normal instead of parallax for the texture that do not have height
information.
This was SVN commit r25576.
Summary: Ran into this when testing things in the lobby - I'm not sure
it can happen if everything is working correctly, but I've had it
repeatedly when testing broken stuff. Feels safer.
Test Plan: ^
Differential Revision: https://code.wildfiregames.com/D4018
This was SVN commit r25574.
Bit operations can be done via std::bitset. The current implementation
is too specific to have it just for a future. Refs 479f59e386,
5ca66fc757.
This was SVN commit r25569.
For modern standards base64 costs a bit less space and might be
implemented on demand. base32 usage was introduced in e0dfbe719d and
removed in 93cffe9deb.
Refs a34b759720, 317f98a6c0.
This was SVN commit r25568.
We already have a single place to access arguments, so we don't need
a platform dependent place for that.
Refs 3f58951808, 8c1bd05ab9.
This was SVN commit r25567.
Defence towers were removed from the requirements in 29ab4b5af3, but
PetraAI was not made aware of this.
Differential revision: https://code.wildfiregames.com/D4015
Reviewed by: @Angen, @wraitii
Comment by: @Imarok
This was SVN commit r25564.
- Update the stone and metal mine meshes and
textures/skins/gaia/decal_quarry_sahara_a.png
- Slight tweak to the steppe grass
- Add some ptol eyecandy
Templates will come in a following commit.
This was SVN commit r25556.
Following D3108 / 876f6d5e50, sounds are attenuated by their actual
distance. However, as noted by players on A24, the dropoff is stark and,
when zoomed out, can easily result in not hearing things that are
happening in the middle of the screen.
The new default settings almost double the max-range, change the minimum
range to have greater dynamic range, and reduce the stereo depth
slightly to better match the default camera FOV.
These are stored per sound-grounp, possibly allowing future tweaks on a
per-soundgroup basis, and are configurable.
Tested by: Imarok
Discussed over mail with: Samulis, Porru
Differential Revision: https://code.wildfiregames.com/D3612
This was SVN commit r25547.
Parses mod.json data not only in temporary JS values, but in a proper
C++ struct.
This will ultimately make it more convenient to pass more than just the
version to JS in D3968, and it enforces the schema a bit more.
Differential Revision: https://code.wildfiregames.com/D3988
This was SVN commit r25546.
Structures now decay in the same time span, including walls/palisades.
This buffs houses/storehouses against capture slightly.
Exceptions:
- Fortresses decay 4 times slower (but, as of now, they are also
territory roots).
- Wonders decay 4 times slower.
Differential Revision: https://code.wildfiregames.com/D3993
This was SVN commit r25539.
Supersedes D1674 and D3520.
This still generates some false positives (particularly the
singular-plural check), but in general it will suffice to better check
bundled languages.
Refs #4250
Differential Revision: https://code.wildfiregames.com/D3926
This was SVN commit r25538.
CanAttack queries the miraged Resistance which did not exist, thus
failing.
This mirages Resistance explicitly (fixing parts of #5883)
Fixes 88549e77e1, reverts the mirage.xml change in 738b200dda
Refs #5883
Reported by: Asger_Spear
Differential Revision: https://code.wildfiregames.com/D4001
This was SVN commit r25517.
Loops buildable templates to find the best.
Differential revision: https://code.wildfiregames.com/D3876
Comments by: @Angen, @Stan, @wraitii
This was SVN commit r25514.
So an joined observer can see that information.
Patch by: @Langbart
Differential revision: https://code.wildfiregames.com/D3964
Comment by: @wraitii
Idea accepted by: @asterix
This was SVN commit r25512.
Also moves the function to the shared_script, since that is the
prototype it uses and the function doesn't use anything of the
terrain_analysis (as per @Angen's request).
Differential revision: https://code.wildfiregames.com/D3906
Comments by: @Angen, @wraitii
This was SVN commit r25511.
As noted by Angen in a26535d023, refs 3bcf360107
When starting with incompatible mods, the non-incompatible mods were no
longer shown. This fixes that.
I think the code looks cleaner from this new control flow that
explicitly only mounts "mod".
Tested by: Angen
Differential Revision: https://code.wildfiregames.com/D3996
This was SVN commit r25510.
This leaves them with 'Structure', undifferentiated. This avoids the
issue reported in #6096 that rams can try to hit unreachable buildings
indefinitely.
Based on a patch by: Nescio
Differential Revision: https://code.wildfiregames.com/D3684
This was SVN commit r25481.
Reduces the 'clumpiness' of units, particularly when ordered to move to
a single point. The minimum pushing force was increased to compensate.
Differential Revision: https://code.wildfiregames.com/D3978
This was SVN commit r25479.
I didn't quite understand what was supposed to happen here. This makes
things work as before.
While at it, fix a conversion bug & do some more tweaks.
Differential Revision: https://code.wildfiregames.com/D3990
This was SVN commit r25475.
- Non-visual replays now automatically try to load the replay mods. This
removes the annoyance that -mod=public usually had to be passed.
- MountMods is no longer called in InitVfs but later, making it possible
to load the game in one pass & simplifying things considerably.
- Explicitly ignore duplicates when loading mods
- Interface cleanup: failed mods and incompatible mods were redundant,
only incompatible mods is kept.
- Interface cleanup: `AreModsCompatible`becomes
`CheckForIncompatibleMods`, which becomes a private pure function,
simplifying the control flow somewhat.
- Interface cleanup: `CheckAndEnableMods` is just `EnableMods`, which
explicitly updates loaded & incompatible mods.
- `CacheEnabledModVersions` becomes private and is called on behalf of
the user, removing the need to be careful about updating that (fixes my
concern at 44ec2e324e)
Overall, the logic around mounting & enabled mods should be easier to
understand.
Differential Revision: https://code.wildfiregames.com/D3982
This was SVN commit r25474.
- Abbreviate large numbers (fixes#6063).
- Added popMax to the population counter.
- Also show `0` gatherers, highlights and changes the font.
Patch by: @Langbart
Differential revision: https://code.wildfiregames.com/D3911
Reviewed by: @Angen, @Freagarach
Comments by: @asterix, @nwtour, @s0600204, @wraitii
This was SVN commit r25470.
`Mod` currently modifies 4 global arrays, including some that are
'public'.
The logic flow is easier to understand if this becomes a real class with
const-correctness and public/private methods.
Differential Revision: https://code.wildfiregames.com/D3981
This was SVN commit r25469.
Sometimes PetraAI relies on UnitAI state of an entity, but those were
not changed after modifying UnitAI.
Introduced in ea96e81098 and 3579097d95.
Differential revision: https://code.wildfiregames.com/D3976
This was SVN commit r25468.
Refs c0157d613d / D3913 which removed the 'actions' suffix. The reason
for this suffix was probably avoiding this type of conflict, but this
new solution does a better job.
Fixes (at least) Survival of the Fittest, which used an
OnOnwershipChanged trigger.
Differential Revision: https://code.wildfiregames.com/D3979
This was SVN commit r25467.
This was already effectively the case, so this change increases
coherence.
Accepted By: Freagarach
Differential Revision: https://code.wildfiregames.com/D3980
This was SVN commit r25465.
Ranged cavalry goes from a base 0.89 walkspeed multiplier to:
- 0.8 for crossbowmen
- 0.85 for archers
- 0.9 for javelineers
The intention is to nerf archers slightly.
Patch By: Nescio
Accepted By: ValihrAnt, chrstgtr
Differential Revision: https://code.wildfiregames.com/D3758
This was SVN commit r25464.
Reverts D2986 / f9f7b4d49f.
Outposts have 90 base vision, increasing to 120 with the 'Carrier
pigeon' technology.
Outposts no longer decay in neutral territory, thus not needing
garrisoning. To compensate, they decay 10x faster in enemy territory.
Differential Revision: https://code.wildfiregames.com/D3898
This was SVN commit r25463.
Avoids recreating an object and frequent casting.
Allows some optimisations.
Simplifies some calls.
Differential revision: https://code.wildfiregames.com/D3934
Comment by: @Stan
This was SVN commit r25460.
The purpose of our client-side hashing for lobby game passwords is to
prevent malicious hosts from getting valuable passwords from clients
(e.g. accidentally typing their lobby password instead of the game, or
even their email password, etc).
However, the hashing was deterministic (and rather simple), making it
possible to compute rainbow tables and recover user passwords anyways.
By adding more variation, including some that cannot so easily be
controlled by the host (the client name), this becomes impractical. The
password hashing function used is rather fast, but given the base low
probability of mistypes, this seems fine.
Differential Revision: https://code.wildfiregames.com/D3459
This was SVN commit r25459.
This makes incremental recompilation faster when changing static
interned strings.
Differential Revision: https://code.wildfiregames.com/D3975
This was SVN commit r25457.
If a default difficulty is given by the map, use that. Else use the
default of the game.
Patch by: @JCWasmx86
Differential revision: https://code.wildfiregames.com/D3951
This was SVN commit r25455.
Instead of using platform-specific sockets, use enet_socket* functions
(which ends up doing the same).
Clean up some confusing APIs, removing the distinction between finding
the public IP for the host/join.
Fix endianness support & use simpler code.
Refs D364 / 61261d14fc (and some subsequent fixing diffs).
Differential Revision: https://code.wildfiregames.com/D3970
This was SVN commit r25453.
This allows joining a lobby game hosted on the same network (behind the
same NAT gateway).
This is relatively primitive to keep things simple: if the server and
the client have the same public IP, it is assumed that they are on the
same network and the client instead requests the local IP.
Differential Revision: https://code.wildfiregames.com/D3944
This was SVN commit r25448.
ScriptComponent does not use ComponentManager, and its derived classes
(most ICMP*.cpp files) do not either. Therefore, we can skip a lot of
transitive inclusions and speed up recompiling by not including it
there.
Differential Revision: https://code.wildfiregames.com/D3962
This was SVN commit r25447.
Refs 64bfa089af and 44ec2e324e
When a .zip file is encountered by the VFS population, it reads the info
for all files in the archives. This is quite slow for the public archive
(400-500ms on my computer), which means calling GetEngineInfo()
repeatedly is impossible.
By only opening the external mod.json, we skip most of the work. The
archive can still be opened if needed as fallback.
Differential Revision: https://code.wildfiregames.com/D3216
This was SVN commit r25446.
This removes usage of CmptPrivate outside of ScriptInterface.
ScriptRequest can now be used to safely recover the scriptInterface from
a JSContext instead of going through ScriptInterface, which allows more
code cleanup.
Follows 34b1920e7b
Differential Revision: https://code.wildfiregames.com/D3963
This was SVN commit r25442.
The entity received a value modif. message while promoting, triggering a
second promotion.
Differential revision: https://code.wildfiregames.com/D3918Fixes: #6162
Comments by: @Angen, @Stan
This was SVN commit r25439.
Patch by: @nani
Liked by: @ffffffff
Tested by: me and @Langbart
Differential Revision: https://code.wildfiregames.com/D3957
This was SVN commit r25436.
Follows 34b1920e7b.
JSON functions and ToString are movec to their own headers.
Also clean out a few PersistentRooted usage to use the 2-phase init to
clean up scriptInterface usage.
With these functions split off, we can finally clean out headers and
remove ScriptInterface.h from most of them, in favour of smaller and
more precise headers.
Take the opportunity to clarify some comments regarding Mutability.
Differential Revision: https://code.wildfiregames.com/D3961
This was SVN commit r25434.
The one in ScriptInterface_Impl is actually used.
Introduced in e9e05f4efc and from what I can tell never actually used.
Differential Revision: https://code.wildfiregames.com/D3960
This was SVN commit r25433.
Follows 34b1920e7b.
This splits off the object-related functions, such as
[Set/Get/Has]Property, CreateObject, CreateArray, FreezeObject.
It also puts the definitions in the header itself, which might end up
with faster code here & there, though perhaps slower compilation time
(somewhat doubtful since we already included most things anyways).
Differential Revision: https://code.wildfiregames.com/D3956
This was SVN commit r25430.
All ToJSVal/FromJSVal definitions are put in a separate header.
Remove AssignOr[To/From]JSVal duplication.
The functions were already static so this is rather straightforward.
Follows 34b1920e7b and 2bae30c454
Differential Revision: https://code.wildfiregames.com/D3953
This was SVN commit r25428.
Also refactors the order a bit to be more equal to other orders.
Removes the `autocontinue` because it was not useful (since that is more
about doing other tasks than the one ordered).
Follows ea96e8109897addf2aa7.
Differential revision: https://code.wildfiregames.com/D3942
Tested by: @Langbart
Fixes: #6175
This was SVN commit r25421.
Follows 34b1920e7b.
This separates StructuredClone & DeepCopy logic into its own header,
reducing the size of the monolithic ScriptInterface header.
Differential Revision: https://code.wildfiregames.com/D3922
This was SVN commit r25419.
sizeof(const char*) returns the pointer size and not the string size,
and 'texture:' happend to be 8 characters long, which is the same as a
64-bit pointer but not a 32-bit pointer.
Reported by: Stan
Differential Revision: https://code.wildfiregames.com/D3947
This was SVN commit r25415.
make linter happy
add missing break to loop if correct comparator has been found, reported
by @Langbart
Differential revision: D3945
Tested by: @Langbart
This was SVN commit r25414.
This allows easier handling of e.g. range triggers calling into the same
function.
The original trigger data is also forwarded for convenience.
Differential Revision: https://code.wildfiregames.com/D3904
This was SVN commit r25413.
Fixing following problems:
Issue number one:
Enable mod with a23 compatibility in a23b.
Save configuration.
Start a24.
Better result:
Mod will be enabled and invisible in mod selection screen producing
various errors.
Worse result:
Game will crash and refuse to start.
Issue number two:
Mods can silently set loaded mods without restarting the engine, so mods
can unlist themselves from compatibility detection.
Solution:
Enable necessary mods instead if running with gui and open mod page.
Open information window on top of mod page to infom why mod page is
showing up.
On mod page show mods which failed in compatibility check and color the
resposnible ones.
Disable start button without enabled mods.
Show non existed mods if they failed in compatibility check.
Else just log to mainlog and close.
Another fixes:
Display in enabled mods really enabled mods as current logic confuses
players about which mods they have enabled and is not helpful (ref
#4881)
Note:
this will not solve issue with mods claiming being compatible with
engine version while in fact being incompatible.
Comments by: @vladislavbelov, @Stan, @Imarok
Tested by: @wraitii
Differential revision: D3592
Fixes: #6044#4881
This was SVN commit r25410.
This allows GUI elements to use a texture as their "mouse event mask",
making it possible to have arbitrarily-shaped GUI elements with regards
to mouse interactions.
Used for the minimap idle worker button as a proof-of-concept.
Differential Revision: https://code.wildfiregames.com/D3814
This was SVN commit r25408.
XMPP JID has a concept of 'resources', which can be used to
differentiate multiple clients of the same account.
We currently hardcode this 'resource' to '0ad' in two places:
- The 0 A.D. client always uses '0ad'
- The network code expects a host resource to be '0ad' when connecting.
As noted in 0fd8aa2a77#31215, it is less effort to store the JI
D directly. This patch does that. It also makes 0 A.D. use a different
resource each time.
Note that resources ought not contain particular information, as the
XMPP server is free to
clobber it. I keep '0ad-' here for debug purposes.
This allows:
- multiple 0 A.D. instances to log on the lobby at the same time (not
massively useful, but good for debugging sometimes)
- hosting a game with a custom resource, which will potentially make it
easier to have dedi
cated servers on one account.
Note that hosting multiple games on one account is currently not
supported and will have weird behaviour on the lobbybots side. They
should be upgraded independently of this.
Refs #3556
Differential Revision: https://code.wildfiregames.com/D3500
This was SVN commit r25407.
GCC < 5 used to reserve the ebx register for PIC (position-independent
code) metadata. This meant that we needed to save the state of ebx
before calling cpuid (fixed in #2675)
However, the original patch from 03eaf9b461 did not force a particular
register to store this value in. Following the GCC 5 upgrade, GCC
stopped reserving ebx, and that register silently got used instead. The
code became non-sensical, and our ASM __cpuidex started returning random
garbage in edx.
Since we now only support GCC7 and above, the PIC-specific branch is no
longer necessary and is removed.
Fixes#6028. The assertion was a result of random data in ebx.
Refs #2675 / reverts 6334ee3f8b and reverts 03eaf9b461.
Patch by: nwtour
Comments by: vladislavbelov
Differential Revision: https://code.wildfiregames.com/D3575
This was SVN commit r25405.
The 'map name' dropdown filter did not work in localised interfaces.
Patch by: nwtour
Differential Revision: https://code.wildfiregames.com/D3883
This was SVN commit r25404.
The line altered here was returning an Array of Objects. This array
would
eventually passed to code that expected it to be an Array of Strings.
This was
causing an error to thrown that could be replicated by going to the
Multiplayer
GameSetup, entering text (e.g. "Winter", "Dry", "lol") into the chat
field, and
pressing `Tab` to trigger the auto-complete.
This line now returns an Array containing the user-facing names of the
Biomes
available to the selected map (if it has them), which is what this
method was
returning prior to dc18d94030.
Related: dc18d94030, dc18d94030
This was SVN commit r25403.
Strength was floored, resulting in possibility for `0`, which was not
handled gracefully by the map.
Since the strength is multiplied by something that can be non-integer in
the map, the floor is not needed.
Differential revision: https://code.wildfiregames.com/D3884
Comments by: @Angen, @smiley
This was SVN commit r25400.
Requested in D3810 (and other places).
It was weird that e.g. the Romans gave their allies a training bonus but
lacked that themselves.
Differential revision: https://code.wildfiregames.com/D3899
Reviewed by: @ValihrAnt
Comment by: @darkcity
Idea approved by: @wraitii
This was SVN commit r25399.
51ab4315ff
Fix using the hotkey on entities that don't have a Production Queue.
Fix showing the icon on entities that don't produce entities.
Differential revision: https://code.wildfiregames.com/D3932Fixes: #6172
Comment by: @wraitii
Tested by: @Langbart
This was SVN commit r25396.
Completes work starting in D2313 / a33fd55e81:
- Make C++ mistakes where values can be changed without messages being
sent easier to notice / harder to do.
- Make the IGUISetting interface more flexible, allowing custom settings
implementing their own logic. This is used to clean up hotkey code
introduced in 33af6da5e1.
Side effects:
- FromJSVal_Vector clears the vector being passed in. I have some vague
memory of not doing that in D24 / 2bae30c454 as an optimisation, but it
seems more like a footgun to me.
- Most usage of SetSettingFromString is replaced by direct method calls,
as we can generally cast to the proper GUI object type. Where we can't,
it is kept as a poor's man virtual dispatch.
- It moves a few member variables elsewhere, e.g. TextOwner now gets its
own member variable settings.
Differential Revision: https://code.wildfiregames.com/D3892
This was SVN commit r25392.
I last-minuted a "X = X * Y" into a "X *= Y" but that turns out to map
to "X = Y * X" with our matrix overloads.
Reported by: langbart
This was SVN commit r25391.
This adds a new command button that enables training of units
automatically.
Use:
- Enable auto-queue.
- Train an entity.
This adds a new item to the queue whenever the previous item starts,
such that good micro is more resource-efficient.
Patch by: @azayrahmad
Differential revision: https://code.wildfiregames.com/D3865
Comments by: @Langbart, @nani, @Stan, @wraitii
This was SVN commit r25381.
- 'Random' map is filtered correctly
- When in 'fallback to all' mode, selecting something works (#6165).
- Fix hotkeys being broken (fixes map browser following 0406c4dfde)
- Clear filters when reopening the map browser (seems natural).
Based on a patch by: nani
Refs #6045.
Fixes#6165.
Differential Revision: https://code.wildfiregames.com/D3833
This was SVN commit r25379.
- We only need an XMBFile, not a CXeromyces to parse GUI
objects/scripts/... This makes the interface more consistent with other
usage, notably ParamNode.
- Rename IGUIObject::AddChild to RegisterChild and flesh out the
interface a little.
Differential Revision: https://code.wildfiregames.com/D3908
This was SVN commit r25378.
The dropdown converted the numbers to string, and the code expected
numbers.
Differential Revision: https://code.wildfiregames.com/D3924
This was SVN commit r25376.
XMB format is bumped to 4, invalidating all cached files. The
differences are:
- element/attribute names are stored after the elements themselves, and
not before. This allows writing XMB data in one pass instead of two.
- names themselves becomes offsets (instead of arbitrary integers),
making getting the string from the int name much more efficient.
XMBFile is renamed to XMBData to clarify that it does not, in fact,
refer to a file on disk.
XMBData::GetElementString is also changed to return a const char*, thus
not creating an std::string. A string_view version is added where
convenient.
The XML->XMB and JS->XMB conversion functions and the corresponding
storage are moved to `ps/XMB`, since that format doesn't particularly
relate to XML. CXeromyces becomes lighter and more focused as a result.
The XML->XMB conversion also benefits from the above streamlining.
Note that in a few cases, string_view gets printed to CLogger via
data(), which is generally not legal, but we know that the strings are
null-terminated here. Our libfmt (version 4) doesn't support
string_view, that would be v5.
Differential Revision: https://code.wildfiregames.com/D3909
This was SVN commit r25375.
Trigger functions/actions were tied to the trigger 'identifier'. This is
inconvenient if several triggers should call the same function, e.g. for
range triggers.
By setting an 'action' in the trigger data, one can now specify the
function to call independently of the trigger name.
For clarity, the 'action' parameter in RegisterTrigger is changed to
'name'. By default, the action still matches the trigger name for
compatibility and convenience.
Differential Revision: https://code.wildfiregames.com/D3903
This was SVN commit r25374.
Revealed by 0406c4dfde. The fix also avoids sending a redundant
lobbyregistration message.
Reported by: langbart
Differential Revision: https://code.wildfiregames.com/D3923
This was SVN commit r25369.
Don't let entities waste a repeat time when they've killed their target.
Done by storing a list of attackers in cmpResistance (since that cmp is
obligatory anyway).
Differential revision: https://code.wildfiregames.com/D2129
Comments by: @Angen, @wraitii
This was SVN commit r25368.
We often only need to include ScriptRequest.h and not the full
ScriptInterface.h
Differential Revision: https://code.wildfiregames.com/D3920
This was SVN commit r25366.
This prints out a stack trace, which is quite helpful when debugging.
Also fixes an issue with stack trace not always being reported.
Differential Revision: https://code.wildfiregames.com/D3210
This was SVN commit r25365.
@mysticjim and @Sundiata manage the community, but were not named in
those credits yet.
@Langbart does a lot of valuable work (amongst which is writing patches)
and was not credited at their first patch (my fault).
Differential revision: https://code.wildfiregames.com/D3880
This was SVN commit r25364.
TERRAIN_TILE_SIZE is now only used in relevant places in the simulation.
This also makes it mostly possible to use CFixed in constexpr contexts.
Refs #5566
Differential Revision: https://code.wildfiregames.com/D3078
This was SVN commit r25360.
- 25332f9b86 added 'override' to a method in ShaderProgram.cpp. This
adds it to the rest.
- BinarySerializer.cpp had custom JS includes, because putting those in
ScriptExtraHeaders failed. The cause is that gloox leaves "#define
lookup" up. This has been reported upstream, and fixed here.
- VS17 complains about an uninitialised variable, though the usage is
safe.
Differential Revision: https://code.wildfiregames.com/D3916
This was SVN commit r25359.
ChangeEntityTemplate used by Promotion is transfering xp from old unit
to new one, but also Promotion component itself does the same thing.
Introduced in cc1ea7cca0
Differential revision: D3915
This was SVN commit r25356.
Finishes work started in f3aedf88a6.
This removes the boost-CPP function wrappers entirely, in favour of pure
templated code in FunctionWrapper.h
The Call* functions were already heavily templated, so there is nothing
really new here. I just use tag dispatch to reduce the number of
overloads slightly.
The new functions do not need the script interface, only the script
request.
Differential Revision: https://code.wildfiregames.com/D3912
This was SVN commit r25354.
We can currently specify a custom tooltip for an icon. This extends that
to a generic tag `[tooltip='something']...[/tooltip]` for any particular
piece of text, and removes the iconTooltip hardcoding by instead using a
virtual `GetTooltipText` call since all IGUIObject descendants have a
tooltip. This is both cleaner & more efficient.
Removes the ability to set a custom tooltip style (that doesn't seem
particularly useful), it'll reuse the style of the CText itself.
Differential Revision: https://code.wildfiregames.com/D3895
This was SVN commit r25353.
The main benefits are more convenient code in the component interfaces
TU and no limit on the # of arguments that can be passed.
Differential Revision: https://code.wildfiregames.com/D3910
This was SVN commit r25350.
By making all GUI proxy objects share the same class, we can easily
confirm if a given JS object is one, and from there convert to the
appropriate types.
Differential Revision: https://code.wildfiregames.com/D3907
This was SVN commit r25347.
Followup on 1e0a6f66f0.
This gives a better image of the amount of units which are gathering.
By decision, entities are _not_ accounted from when the player tasks
them to return their resources.
Refs. #643
Differential revision: https://code.wildfiregames.com/D3226
Comments by: @wraitii
This was SVN commit r25345.
Usage of GL_VERTEX_ARRAY client state apparently prevented OpenGL from
using hardware acceleration on my computer (Macos 10.14 with an Intel
GPU).
It is unclear how many people would be affected by this issue, but on my
end it makes GLSL performance competitive with ARB again.
Reviewed By: vladislavbelov
Differential Revision: https://code.wildfiregames.com/D3900
This was SVN commit r25343.
Defensive buildings now have 25H/35P/3C resistance.
Patch by: Nescio
Differential Revision: https://code.wildfiregames.com/D3757
This was SVN commit r25342.
- Prevents lag
- Prevents abuse by using animals to break pathfinding.
Patch by: Nescio
Differential Revision: https://code.wildfiregames.com/D3777
This was SVN commit r25340.
Similar to the archer tradition tech.
Intended to boost usage of melee units.
Patch by: borg-
Differential Revision: https://code.wildfiregames.com/D3688
This was SVN commit r25338.
This new value was last changed in 4a2cc3273e. The new value sits
halfway.
The technology is available at the forge for all civilizations with
archers and independent of the already existing “Archery Tradition”
technology.
Patch by: Nescio
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D3736
This was SVN commit r25337.
- EOL native and xml mime type
- Add player_trans_norm_spec.xml
- Disable cast shadow for manes.
- Use norm instead of parallax
Reported by @Freagarach
This was SVN commit r25333.
- Fix in tooltip context for healing 'Health'
- Fix in tooltip for splash shape.
- Translate locale_advanced
- Translate specific name in the structure truee
- Translate player name in gamesetup.
Patch by: nwtour
Differential Revision: https://code.wildfiregames.com/D3889
This was SVN commit r25332.
CConfigDB is no longer a singleton, and its members are no longer
static.
This makes it possible to have several instances of it, useful for
testing of if we ever want to have different config profiles.
Also updates hooks to delete themselves on destruction, to fit a more
natural RAII pattern. Long-lived objects must take care to destroy hooks
before ConfigDB is reset.
Differential Revision: https://code.wildfiregames.com/D3866
This was SVN commit r25326.
It's currently possible to trigger ENSUREs in the code if loading empty
groups, which is easy enough with LOD and shouldn't happen.
Recover gracefully from these errors instead.
Differential Revision: https://code.wildfiregames.com/D3888
This was SVN commit r25320.
This patch is increasing contrast of player colours used on minimap in
minimap component instead of changing player colours themselves to not
mess with other cases, when they are used.
Differential revision: D3242
Comments by: @vladislavbelov, @ValihrAnt, @Freagarach
This was SVN commit r25312.
Colour for away status, makes it hard to spot among busy statuses.
Setting more orange colour for this.
Differential revision: D3856
Ref: #6055
Accepted by: @asterix
Comments by: @Langbart
This was SVN commit r25311.
- Arrow shooting structures (towers, CC, fortress, camps...) now deal 10
pierce data per arrow, one arrow every 2 second (i.e. 5 pierce DPS).
- Adjust the count of arrows per building accordingly.
This makes these buildings easier to compare.
Accepted By: #balancing, borg-, wraitii
Differential Revision: https://code.wildfiregames.com/D3668
This was SVN commit r25309.
Emplace does not replace existing element, insert_or_assign does.
While at it:
- Clean up the 'outdated' logic and reuse it for actors
- When an actor fails to load, return a placeholder. This improves
hotloading of broken actors, and makes Cunit behaviour more predictable.
- Some minor cleanup
Reported by: Stan
Fixes#6157
Differential Revision: https://code.wildfiregames.com/D3882
This was SVN commit r25308.
To render models, we need to know the maximum bounds it takes over the
course of an animation. This depends only on the ModelDef and the
AnimationDef (and thus the SkeletonDef).
Currently, we recompute this data for each model, which is inefficient.
Caching it in ModelDef is faster, particularly avoiding lag spikes at
game start on some maps.
The animations are referred by a unique ID to avoid pointer-related
issues. I would have preferred weak_ptr, but that cannot be stably
hashed for now.
While at it, switch to unique_ptr/vectors.
Differential Revision: https://code.wildfiregames.com/D2967
This was SVN commit r25306.
Instead of hardcoding it in the component.
Allows modders to easily change the value.
Differential revision: https://code.wildfiregames.com/D3792
Comments by: @Angen, @Nescio, @Stan
This was SVN commit r25299.
We have a FAQ, that is now pretty up-to-date, so use it.
Also add note that people may want to be more patient when chatting with
us on IRC.
Patch by: @Langbart
Differential revision: D3499
Comment by: @Stan
This was SVN commit r25298.
* Disable "castshadow" as they are never much larger than the shields
* Disable them on medium because they are part of the texture
* Disable them on low for performance.
* EOL & Mime Type
* Add a new materials/basic_trans_norm_spec.xml to disable parallax
(while keeping normal and transparency) when not needed and use it for
the handgrips with transparency.
This was SVN commit r25297.
- Disable "castshadow" as they are never much larger than the legs
- Disable them on medium because they are part of the texture
- Disable them on low for performance.
- Add a missing mesh reported by @wowgetoffyourcellphone the r variant
was used for the l actor
- EOL & Mime Type
- Add a new materials/no_trans_norm_spec.xml to disable parallax (while
keeping normal) when not needed and use it for the greaves.
This was SVN commit r25296.
59d0885d68 made formation take "formation", not "name". This broke
TriggerHelper.
Reported by: Angen
Reviewed By: Angen
Differential Revision: https://code.wildfiregames.com/D3873
This was SVN commit r25293.
Called the member instead of the function.
Introduced in ea96e81098. Noticed by @Angen.
Differential revision: https://code.wildfiregames.com/D3870
Reviewed by: @Angen
This was SVN commit r25291.
These don't depend on the simulation and can be useful for e.g. the GUI
(the FSM) or map scripts.
Confer also the vector implementation.
Differential revision: D3863
Comment by: @wraitii (agreed with concept)
This was SVN commit r25288.
If there are no idle units and the idle-unit hotkey is pressed there is
now a sound played.
Beneficial when there are already units selected since selection doesn't
change.
Sound courtesy of @Samualis.
Refs. #5360
Based on a patch by: @cpc
Differential revision: https://code.wildfiregames.com/D1692
Comments by: @asterix, @smiley, @Stan, @vladislavbelov
This was SVN commit r25287.
Infinite loop will instead trigger JS exceptions, which will make error
reports much nicer.
Differential Revision: https://code.wildfiregames.com/D3851
This was SVN commit r25280.
Less object creations at addition time, more intuitive handling.
Differential revision: https://code.wildfiregames.com/D3854
Comments by: @Stan, @wraitii
This was SVN commit r25276.
Replaces a house by a stable.
Since c4eeb82d83 cavalry cannot be trained at the barracks anymore.
Patch by: @Nescio
Differential revision: D3691
This was SVN commit r25274.
Chanakya was the teacher and minister of Chandragupta Maurya, whereas
Kautilya is the author of the Arthashshastra. While the two are often
equated (out of ignorance or for ideological reasons), they are
different persons, and the first versions of the Arthashshastra were
composed only a few centuries after the Mauryas were gone. See
https://wildfiregames.com/forum/topic/27113-bibliography-and-references-about-ancient-times-book-reviews/?tab=comments#comment-402302
for a more detailed explanation.
This patch therefore:
- changes the author from Chanakya to Kautilya;
- lists the quotes at the correct location in the file (under K instead
of C);
- removes the chapter titles (which depend on the text edition or
translation) and give a more precise location, to make it easier for
people to look up.
For those interested, the Sanskrit is:
KAZ01.4.07 na-iti kauṭilyaḥ | 7 |
KAZ01.4.08 tīkṣṇa.daṇḍo hi bhūtānām udvejanīyo bhavati | 8 |
KAZ01.4.09 mṛdu.daṇḍaḥ paribhūyate | 9 |
KAZ01.4.10 yathā.arha.daṇḍaḥ pūjyate | 10 |
and:
KAZ01.19.01 rājānam utthitam anūttiṣṭhante bhṛtyāḥ | 1 |
KAZ01.19.02 pramādyantam anupramādyanti | 2 |
And the translations in Patrick Olivelle King, Governance, and Law in
Ancient India / Kauṭilya’s Arthaśāstra / A New Annotated Translation
(Oxford 2013) are on p. 69:
7 “No,” says Kauṭilya;
8 “for one who punishes severely terrifies the people,
9 and one who punishes lightly is treated with contempt,
10 whereas one who dispenses appropriate punishment is treated with
respect.
and on p. 92:
1 When the king is energetic, people in his service, in turn, become
energetic;
2 and when he is lethargic, they, in turn, become lethargic.
Patch (and description above) by: @Nescio
Differential revision: https://code.wildfiregames.com/D3598
This was SVN commit r25273.
Summary screen and mainly its statistics can be influenced by mod as
much as replay itself with mod removing or adding classes and trackers
to the game.
Summary screen allows to replay the match without checking
compatibility, that is fine I think if it is prevented to see summary of
incompatible replay in a first place.
Therefore this is adding compatibility check for opening summary of
replay.
Differential revision: D3799
Fixes: #6119
Tested by: @Langbart
This was SVN commit r25268.
Broken in d28a91b83d.
Due to not checking for `template_helpers` in the game's files.
Patch by: @nwtour
Differential revision: https://code.wildfiregames.com/D3850
This was SVN commit r25265.
("Variant" in this case means a template that is functionally the same
as its
base template - but is a different promotion level, requires a
technology to
unlock (that the base template doesn't), is an upgrade of its base, or
is a
trainable version.)
Should fix concern raised on b2842e8021.
Accepted by: Angen
Differential Revision: https://code.wildfiregames.com/D3347
This was SVN commit r25260.
(Follows 76acc4e146 where I deleted actor.rnc)
This deletes the .rnc validation files, upgrading the .rng files to
being the source of truth.
- The engine uses, via LibXML2, .rng files to validate XML schemas, to
the .rnc files are redundant.
- The RelaxNG "Compact" format is a DSL for the RelaxNG XML format. Its
syntax is unique, unlike .rng files which are XML.
- Some errors are likely - I'm not sure anyone has converted the compact
files in years.
- The tool to generate .rng from .rnc files is trang
(https://github.com/relaxng/jing-trang), which runs on the JVM and is
quite annoying to install compared to "your usual text editor".
- The JS components use the full .rng format in XML, so editing this
format is already familiar to most people that mod the game.
The .rnc files were added in 2c9939ac74 along the .rng files.
Refs #413, #245
Differential Revision: https://code.wildfiregames.com/D3824
This was SVN commit r25258.
- Random lanscape option now works properly.
- Non-host clients now see the game attributes correctly in the loading
screen, including in particular the map name.
- AI bots are again translated.
- 'Cheat' setting is persisted correctly in MP gamesetup.
Reported by: myself, Freagarach, nwtour
Differential Revision: https://code.wildfiregames.com/D3841
This was SVN commit r25257.
Essentially reverts D1918 / d592bf9cb6.
Instead of copying path requests to workers, setup the result vector,
then setup an index, and compute 'in-place'.
To send messages, the result vectors are read in order. This makes the
order trivially constant no matter how many workers there are, and the
architecture overall makes it much easier to efficiently paralellise.
Tested by: Langbart, Stan
Differential Revision: https://code.wildfiregames.com/D3849
This was SVN commit r25256.
Components have some initialisation-order dependency. They could also
have destroy-order dependency, and from a RAII-like point of view, it
makes sense to do this.
Differential Revision: https://code.wildfiregames.com/D3843
This was SVN commit r25251.
While gathering resources entities may be tasked to gather near a
position. The range check for that is 10 m. However, the relaxed range
check for the walking state is this.DefaultRelaxedMaxRange, which is 12
meter, currently. Meaning it would lead to a slow infinite loop.
Differential revision: D3839
Comments by: @wraitii
Tested by: @gameboy
(https://wildfiregames.com/forum/topic/38131-tutorial-bug/)
This was SVN commit r25249.
- `initPos` was used wrong.
- There were two `CanGather` functions in `cmpResourceGatherer`.
- Reduced some duplication in the ReturnResource order.
Differential revision: D3838.
This was SVN commit r25243.
Caused by not checking the attack type while performing an attack.
Closes: #5511
Differential revision: D3840
References #3484
This was SVN commit r25242.
Following 21e866fcf0.
Also support leaving a turret by using a hotkey.
Currently the hotkeys are by default bound to the same ones as
garrisoning.
Differential revision: D3773
Icons by: @wowgetoffyourcellphone and @Stan.
This was SVN commit r25240.
Puts the athen-specific data in the mixin `civ/athen`. Deduplicates.
Differential Revision: https://code.wildfiregames.com/D3831
This was SVN commit r25239.
Keep responsibilities separated, allow easier modding of attacking
behaviour.
Ideally the BuildingAI attacking routine would be merged in here as
well, but not done for now.
Part of #5810
Differential revision: D3816
Comments by: @smiley, @Stan
This was SVN commit r25235.
Reduces duplication, allows all attack types to cause splash damage.
While at it, makes delay and minimal range optional (for obvious
defaults are available).
Split from D368, so basically a patch by @bb.
Note that it may seem like one can arbitrarily name an attack now, but
that is not true.
Differential revision: D2002
Comments by: @bb, @Nescio, @Stan, @wraitii
This was SVN commit r25233.
This changes ParamNode to use UTF8 values internally (XMB files are UTF8
since cb9d0733ef).
This removes the need for a lot of conversions, speeding things up and
allows cleaning up the validator interface & a few other callsites.
ConstructJSVal could be a tad slower because of UTF8->16 conversions
within Spidermonkey; but the difference is unlikely to be noticeable in
practica.
Also:
- Changes `ToXML` to `ToXMLString` for clarity.
- Add a simple "op" test & show a particular behaviour of merge nodes
that I intend to change somewhat in D3830.
- Remove Component.h from simulation2 PCH - brought in too much.
Tested by: langbart
Differential Revision: https://code.wildfiregames.com/D3834
This was SVN commit r25228.
Two issues:
- The wstring_view was created on a temporary string - the data got
overwritten sometimes.
- there was some weird UTF16->UTF8 conversion going on.
Reported by: langbart
Differential Revision: https://code.wildfiregames.com/D3828
This was SVN commit r25226.
This finishes 7c04ea0211 and 1b67a079fb.
GUI Proxy objects are now easier to specialize, code duplication is
reduced, code is made safer.
In details:
- the proxy private is always the IGUIObject* pointer
- the private data is accessed through a safer wrapper
- CreateJSObject returns an opaque type to allow easier extension &
prevent errors.
- The implementation of CreateJSObject is moved near the GUI Proxy
template instantiation, and both are wrapped in a convenient macro (this
makes it so that if you use the macro, you can't forget to overload the
method, and vice-versa).
- The common IGUIObject JS interface no longer needs to be repeated.
- All specialisations are again put in the same file, for improved
compile-time & clarity, given there are so few lines now.
- While at it, implement toSource which makes it possible to `uneval`
components (does the same as toString though).
Differential Revision: https://code.wildfiregames.com/D3826
This was SVN commit r25225.
This allows empty actor files -> they map to a dummy object that renders
nothing.
The use case is automatically hiding objects at lower quality levels &
LOD settings.
Differential Revision: https://code.wildfiregames.com/D3819
This was SVN commit r25224.
- Allows compositing any two templates in TemplateLoader, and not just
filters: 'A|B|C' is now valid for any template A, B and C.
- Allows parents to be composited paths 'A|B|C'. In such a schema, if A
or B themselves specify a parent, the actual composition becomes
A|pA|B|pB|C and so on.
This allows, by leveraging the common schema of our entities, to reduce
duplication.
For convenience, templates in "special/filters/" and "mixins/" can be
included by their direct name. Others have to be completely specified.
See the two provided cases for examples:
- 'hoplite' becomes a mixin that can be used to apply the Phalanx
formation
- 'builder' becomes a mixin that can be give a template the ability to
build the standard structures, and gives the 'Builder' identity class.
This also allows deduplicating that list of tokens.
Update checkrefs & swap std::map for std::unordered_map in
TemplateLoader.
Differential Revision: https://code.wildfiregames.com/D3801
This was SVN commit r25223.
Fixes 76acc4e146 (and some 2007-2010 commit).
ObjectManager needs the Simulation to be initialised, thus needs to come
after it in the class.
Tested by: langbart
Differential Revision: https://code.wildfiregames.com/D3827
This was SVN commit r25222.
Introduced in 93d22ef16b.
Brings back the less intrusive bug of transforming while garrisoned of
turreted and unloading results in the default stance. That needs to be
fixed again.
Differential revision: D3822
This was SVN commit r25221.
Instead of relying on the assumption that an entity which transforms
only has one of the two (and the same) before and after.
Fixes 5b3bdf3647.
Differential revision: D3821
Comment by: @Stan
This was SVN commit r25220.
Don't pretend it to be a callable function, while it is certainly part
of the FSM.
(Also makes it easier for us to implement a duration for the trading in
the future, might we ever want to.)
Differential revision: D3813
Comment from: @Angen
Closes: #6135
This was SVN commit r25216.
Allows for non-moving entities to drop resources. (When someone checks
those cases in the order.)
(Also makes it easier for us to implement a duration for the dropping in
the future, might we ever want to.)
Differential revision: D3817
This was SVN commit r25215.
Introduced in 2ef3fd7a77.
Fixed by switching the order of task of the barracks and outpost.
Patch by: @nwtour
Differential revision: D3820
This was SVN commit r25214.
An actor file, as referenced by the VisualActor, can now define
different actors for different "quality level" setting.
In this initial version, the quality is handled directly by the object
manager.
Actor format impact:
- '<qualitylevels>' may be used as the root node, containing actor nodes
as children.
- such actor nodes can refer to a file, or to an inline actor, or
simply be inlined.
- such actor nodes may have a 'quality' attribute, specifying the
maximum quality level of this actor. By default, 255 (the maximum) is
implied.
- The actor format remains valid, but 'groups', 'variants', 'material',
'castshadow' and 'float' can be given a [minquality, maxquality[ range
via XML attributes. Outside of this range, the XML node is ignored
(making it possible to define, in a single actor file, several quality
levels).
Quality is a 0-255 value, with:
- Range 0-99 intended for lower level-of-detail actors (billboards,
etc.)
- Range 100-200 the 'normal' range for models. 100 is "low", 150
"medium", and 200 "high".
- Range 201-255 used for higher quality actors that might be used for
e.g. cinematics.
The range is wide to make it easier to add intermediate levels in the
future and it seemed easier given that an integer value of some kind was
required anyways.
Engine impacts:
- A new CActorDef class is introduced, wrapping an art/actors XML file
and its different quality levels. ObjectBase remains the definition of a
given 'actor', now at a given quality level.
- CActorDef imposes a maximal # of quality level for a particular actor
definition (5 currently).
- CUnit is made to refer to an Actor Definition explicitly, not a
particular ObjectBase.
- As a minor optimisation, variation keys are calculated on
pointer-to-sets-of-selections, instead of raw sets-of-selections, as
this reduces copying.
- some refactoring, including better const-correctness and hotloading
support via std::shared_ptr.
Differential Revision: https://code.wildfiregames.com/D3787
This was SVN commit r25210.
Moves the building logic from UnitAI to Builder.
Makes it easier for modders to change building behaviour, e.g. letting
structures build.
Differential revision: D3812
Comment by: @Angen
This was SVN commit r25208.
Moves the healing logic from UnitAI to Heal.
Makes it easier for modders to change healing behaviour, e.g. letting
structures heal (instead of using an aura).
Differential revision: D2680
Comments by: @Stan, @wraitii
This was SVN commit r25207.
Moves the gathering logic from UnitAI to ResourceGatherer.
Makes it easier for modders to change gathering behaviour, e.g. letting
structures gather.
Refs. #4293 by optimising a bit.
Differential revision: D2662
Comments by: @bb, @Stan, @wraitii
This was SVN commit r25206.
Including third party libraries to the cppcheck include path is annoying
and the unknownMacro errors are generally not useful.
This was SVN commit r25200.
It is wasteful to do and seems not needed anymore.
Differential revision: D3802
Comments by: @Angen, @Stan
Reverts b478b9742a, b478b9742a
Refs. #3410
This was SVN commit r25198.
592453c62f added a flag to "GetBlockMovementFlag" to return either the
current or the template value, and by default it returns the template
value.
Foundation logic needed it to return the current value.
Gates are also updated to avoid changing behaviour in unpredictable
ways.
Differential Revision: https://code.wildfiregames.com/D3796
This was SVN commit r25196.
Swap an std::set for an std::vector, the set was useful only in an
earlier iteration of the diff. This fixes nopch.
Differential Revision: https://code.wildfiregames.com/D3790
This was SVN commit r25195.
This basically does two things:
- Allow turrets on moving entities (fixes serialisation in cmpPos).
- Allow an entity to be present on another when the other is created.
That makes it basically a boiled down version of a prior patch, omitting
the part where orders could be passed on.
This does allow e.g. ranged units on chariots that fire while the
chariot moves.
Original diff by: @sanderd17
Redone by: @Stan
Differential revision: D1958
Comments by: @Alexandermb, @Angen, @bb, @Langbart, @Nescio, @Stan,
@wraitii
Refs. #2577 by implementing the entity on platform case.
This was SVN commit r25192.
Adds a new component effectively handling negative resource trickles.
Prevents resources from going negative and provides an effect for not
being able to pay.
The effect chosen for 0 A.D. is having the entity not being
controllable.
Not used in the public mod itself, but it is in quite some mods.
Based on an idea of @Nescio
Differential revision: D1323
Comments by: @Angen, (@smiley,) @Stan
This was SVN commit r25191.
Revealed by f884848745. Noticed by @Langbart.
The holder was deleted after being tasked to garrison the new target,
but with still a holder we were not allowed to garrison.
Differential revision: D3794
Closes: #6128
Tested by: @Lanbart
This was SVN commit r25188.
This is necessary following 2d53308e1b, which now handles key-up in
input to prevent hotkeys from firing then.
Hotkeys are a global system, which means opening e.g. the chat window or
the summary does't reset things. If you press "S" to scroll the in-game
camera down, then press 'return' to open the chat, the camera keeps
scrolling down. Following 2d53308e1b, it never released since it never
got the keyup.
To handle this nicely, we need to explicitly clear hotkeys when input
boxes get focus (respectively the console).
Differential Revision: https://code.wildfiregames.com/D3797
This was SVN commit r25186.
The motion manager introduced in bae258f9a1 makes 'chasing' (e.g. an
entity targeting another entity, which also applies to fleeing)
behaviour symmetrical: both units see the initial state instead of it
being ID-dependent.
This allows removing hacks introduced in 6a66fb8205 (and refined in
7b88b1a0f9).
Differential Revision: https://code.wildfiregames.com/D3785
This was SVN commit r25185.
After 21e866fcf0.
AllertRaiser replaced the order instead of just calling the required
function.
While at it, check for the garrisonable size when looking for buildings.
Differential revision: D3789
Tested by: @Langbart
This was SVN commit r25183.
This implements a form of crowd movement that I've generally called
'unit pushing' in the last few years.
Essentially, any two units will push each other away when they're too
close. This makes it possible to ignore unit-unit obstructions, and thus
makes movement much smoother in crowds.
This first iteration of this system only allows pushing between idle
units and between moving units (i.e. a moving unit does not affect an
idle one).
This is because the unitMotion logic to detect it is stuck & needs to
use the pathfinders starts breaking: units can fail to move because they
are pushed away from their intended movement, and the current logic
fails to handle this gracefully.
Thankfully, the most value of this patch in terms of player experience
is found in the improvements to group movements and shuttling.
Other impacts:
- As the short pathfinder is called less often, we can increase the
starting search range & reduce the # of max turns, both improving
collision recovery.
- The performance of idle units is slightly worsened, as they must be
checked for idle-idle collisions. If needed a 'sleeping' system, as used
in physics engine, could be implemented.
- In general, however, expect slight performance improvements, as fewer
short paths are computed.
- Gathering efficiency should increase slightly, since shuttling times
are likely reduced slightly.
- As a sanity change to improve some edge cases (units that say they're
moving, i.e. pushable, but don't actually move), the 'going straight'
logic is turned off if a short path has been computed. This requires a
few cascading changes to work correctly.
Technical notes:
- To reduce the cost of the n^2 comparisons that pushing requires, units
are only compared within a small square on a grid which is lazily
reconstructed each turn. The overhead seems rather small, and this is
much simpler than keeping an up-to-date grid.
- The design is intended to be parallelisable if needed someday.
- The pathfinder's CheckMovement ignores moving units in UnitMotion, as
that is now the spec. Idle units are not ignored, which is required for
the 'collision' detection to work correctly (see above).
Refs #3442 (not fixed - idle units are not pushed by moving units).
Fixes#5084 (the overlap can still happen, but units will push each
other away).
Differential Revision: https://code.wildfiregames.com/D1490
This was SVN commit r25182.
- Fix mistake in 4b46c09222 (similar to one in a4852c4c01) that allowed
hotkeys to fire while typing in the console.
- Prevent Alt+key to fire hotkeys in input boxes & console as that is
often text input.
- Split the hotkey triggering logic in two: a preparatory phase & an
actual firing phase.
This allows the GUI code to check which hotkeys are about to fire and
selectively allow them to go through. This makes it easier to change
hardcoded hotkeys, such as the console toggling one.
Differential Revision: https://code.wildfiregames.com/D3786
This was SVN commit r25180.
Mouse wheel hotkeys behave differently from other hotkeys (mouse
button/keys) in that they are transient: they're always pressed/released
in one go.
As such:
- They shouldn't be added to the stored pressedHotkeys
- They shouldn't be added to active scancodes.
This fixes these issues from 4b46c09222 & also skips un-necessary
processing in those cases.
Reported by: Imarok.
Differential Revision: https://code.wildfiregames.com/D3782
This was SVN commit r25176.
This makes sure all hotkeys from hotkeys/spec/*.json files are displayed
in the editor, even if they are not found in configuration files.
Differential Revision: https://code.wildfiregames.com/D3767
This was SVN commit r25175.
Some information & resources were outdated, preventing progress.
Patch by: nwtour
Differential Revision: https://code.wildfiregames.com/D3764
This was SVN commit r25171.
Change the OOS notification logic to remember the OOS-ness of each
client. Reset it on client leave.
The server will thus continue checking for OOS if the OOS-client leaves.
This is convenient to ignore observer OOS, or wait for an OOS player
without restarting the game.
Also add the turn number to the OOS dump, to fix#3348: particularly
following d4c2cf4430 the turn is likely to not be the same between
different clients.
Agree by: asterix
Differential Revision: https://code.wildfiregames.com/D3753
This was SVN commit r25170.
Follows d0a42f2f00.
Because only the most specific hotkeys can be active at any time,
releasing a key may require re-activating less specific hotkeys.
There were two issues with this behaviour:
- It was buggy, as it only checked one active key, when any still active
key can trigger hotkeys.
- "HotkeyPress" and "HotkeyDown" events where sent, as if the hotkey was
pressed, which was unexpected for most code/users (it is unusual to have
a "Press" event on key release).
This fixes these issues by "silently" re-triggering the hotkeys in such
a case. It also makes it easier for JS code to use "hotkeyPress" instead
of "hotkeyDown" for non-continuous behaviour.
Accepted By: nani
Fixes#6123
Refs #6064 (fixes the problem, but not the code weirdness)
Differential Revision: https://code.wildfiregames.com/D3766
This was SVN commit r25169.
Fixes dc18d94030.
Using down/up to change the map in the map selection dropdown in the
gamesetup has a one-element lag. The reason is that on dropdown up/down,
two events are sent:
- first the current highlighted item is selected (it's usually the
selected one).
- then the new item is selected.
Because of faulty timer logic, only the first update went through.
Differential Revision: https://code.wildfiregames.com/D3774
This was SVN commit r25168.
Not all orders were checked, which would cause problems when receiving
an order that needed moving and that did not handle not being able to
move properly.
Differential revision: D3771
This was SVN commit r25164.
21e866fcf0
Crossbowmen should be able to turret (noted by @Nescio).
TurretHolders should be able to pick entities up.
Differential revision: D3744
This was SVN commit r25163.
d8ea401a95 replaced the ExploreTerritories logic, but I did not account
for the territory grid being N cells wide when the LOS is N+1.
Therefore, we could get out of bounds.
Reported by: Vladislavbelov
Differential Revision: https://code.wildfiregames.com/D3765
This was SVN commit r25161.
This allows modifiers without "affects", or with empty "affects" lists,
to do something.
This makes it possible to force a modifier on an entity without classes
(e.g. trees) or with unknown classes.
Accepted By: asterix
Differential Revision: https://code.wildfiregames.com/D3761
This was SVN commit r25157.
Observers no longer lag the game for players. There is still some time
to serialise the game when sending it to a joining observer, and
depending on the chosen 'max lag' the game may stop while observers
sufficiently catch up, but this impact too is reduced.
- Make the NetServerTurnManager ignore players marked as 'observers' for
the purpose of ending a turn, effectively making it possible for
observers to lag without it affecting the players in any way.
- Add a config option (network.observermaxlag) that specifies how many
turns behind the live game observers are allowed to be. Default to 10
turns, or 2 seconds, to keep them 'largely live'.
- The controller is not treated as an observer.
- Implement a simple UI to show this delay & allow the game to speed up
automatically to try and catch up. This can be deactivated via
network.autocatchup.
- Move network options to the renamed 'Network / Lobby' options page.
- Do not debug_warn/crash when receiving commands from the past -
instead warn and carry on, to avoid DOS and "coop play" issues.
Refs #5903, Refs #4210
Differential Revision: https://code.wildfiregames.com/D3737
This was SVN commit r25156.
NaN values could not be serialised safely because of the multiple
possible NaN numbers.
Since NaN values are usually the result of bugs or dangerous code, it
seems simpler to refuse to serialise them.
(D3205 was a safe-serialization alternative, should the need arise).
Fixes#1879
Differential Revision: https://code.wildfiregames.com/D3729
This was SVN commit r25151.
9d82ae15af introduced logic to extend the search range of the short
pathfinder in some situations. This extension was unbounded, resulting
occasionally in search domains several hundred meters wide, and path
computation that can take several seconds.
Reported by: Vico (on the forums).
Differential Revision: https://code.wildfiregames.com/D3760
This was SVN commit r25150.
Makes for less duplicated logic, easier modding and better split
responsibilities.
Differential revision: D3638
Closes: #5884
This was SVN commit r25139.
Wall turrets/towers have more HP & are cheaper than free-standing
towers, and have no build restriction distance. Their attack, while
limited, is still high when garrisoned, and this makes them awkward to
balance and is poor design in general.
This removes their attack capability entirely, and standardizes the rest
of their statistics.
Patch by: Nescio
Accepted By: borg-, wowgetoffyourcellphone, wraitii
Differential Revision: https://code.wildfiregames.com/D3706
This was SVN commit r25135.
Reverts D3404 / 3731886e2c, thus making economic technologies more
effective.
The lower values led to resource shortages in the late game.
Patch by: Nescio
Accepted By: borg-, chrstgtr, wowgetoffyourcellphone
Differential Revision: https://code.wildfiregames.com/D3703
This was SVN commit r25134.
Towers, unlike walls, palisades, and outposts, counted towards the
required Town Phase structures for City Phase. Given the requirement to
build 4 structures, this pushed players into making them.
This removes that, and lowers the requirement to 3.
Patch by: Nescio
Accepted By: ValihrAnt, borg-, wowgetoffyourcellphone, wraitii
Differential Revision: https://code.wildfiregames.com/D3686
This was SVN commit r25133.
This can give Iberian an edge at defensive play earlier, fitting their
civ theme.
Approved by: borg-, wowgetoffyourcellphone, berhudar
Differential Revision: https://code.wildfiregames.com/D3685
This was SVN commit r25132.
This new bonus makes the tech more predictable.
Cost has been reduced slightly.
Patch by: Nescio
Differential Revision: https://code.wildfiregames.com/D3671
This was SVN commit r25131.
All foundations now have a resistance of 1 Hack, 1 Crush, 10 pierce.
Patch by: Nescio
Differential Revision: https://code.wildfiregames.com/D3600
This was SVN commit r25130.
The early-game cavalry rush was overly nerfed in A24 with longer train
time, slower speed, and the need for stables.
This rolls that back slightly by reducing train tim from 16 to 15, and
increasing the movement speed of ranged cavalry from 15 to 16.
Patch by: borg-
Differential Revision: https://code.wildfiregames.com/D3664
This was SVN commit r25129.
Was previsouly bumped to 3 in A24.
Patch by: borg-
Approved By: ValihrAnt, chrstgtr, wraitii
Differential Revision: https://code.wildfiregames.com/D3666
This was SVN commit r25128.
Fixes:
- A logic issue in the attack name tooltip.
- A missing context in the status effects tooltip
Patch by: nwtour
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D3745
This was SVN commit r25127.
Following bae258f9a1, all units moved, then all messages were sent. This
could result in units overlapping, which cannot be resolved without unit
pushing. Fixing this makes for a fairer comparison with the pushing
diff, so it seems worthwhile.
Differential Revision: https://code.wildfiregames.com/D3746
This was SVN commit r25126.
bae258f9a1 implemented CCmpUnitMotionManager, which handles motion for
CCmpUnitMotion (as distinct from ICmpUnitMotion, the interface).
The tight coupling between these two components was awkward at the
interface level, leaking underlying implementation details.
This diff makes CmpUnitMotionManager explicitly manage CmpUnitMotion,
instead of any implementation of ICmpUnitMotion, and moves files around
as requir
ed.
This:
- Makes it impossible to accidentally try to have the wrong
IID_UnitMotion managed by the UnitMotionManager.
- Allows devirtualising the calls from the manager to UnitMotion itself
(and inlining, as they are compiled in the same TU).
- Cleans up the manager interface - MotionState is now part of
CCmpUnitMotionManager.
- Cleans up ICmpUnitMotion interface - no need to provide a private
interface for the manager.
Differential Revision: https://code.wildfiregames.com/D3732
This was SVN commit r25125.
Since siege engines are not capturable anymore, since d583048690.
Fixes: d583048690.
Differential revision: D3742
Reviewed by: @Nescio
This was SVN commit r25124.
While they often look alike, their behaviour is totally different.
This split has some implications:
- There are now separate auras for garrisoning and turrets.
- Entities can now have both turret points and garrison slots,
independent of eachother.
In general previous behaviour is maintained as much as possible.
Differential revision: D3150
Comments by: @Nescio, @wraitii
Tested by: @v32itas
This was SVN commit r25123.
Allows for easier differentiation. No values were changed in this patch.
Differential revision: D2886
Comments by: @Angen, @borg-, @Stan, @ValihrAnt, @wraitii
This was SVN commit r25122.
- Removed some useless comments.
- Don't assume an item only has either a tech or a unit in
ProgressTimeout.
- Don't initialise boolean values (refs. #5979).
Differential revision: D3739
Comment by: @wraitii
This was SVN commit r25119.
The CPPCheck linter outputs 'char: null', which trips the
phabricator-jenkins-plugin, and fails to lint on CI.
To avoid this, filter out null values, since e.g. char is optional
anyways. We do want to fail if non-optional values are missing.
Differential Revision: https://code.wildfiregames.com/D3730
This was SVN commit r25112.
Fixes issues on Big Sur with the development 0 A.D. (bundles were
working correctly because they are Low-DPI).
Thanks to @wik for investigations on High-DPI in WxWidgets.
Differential Revision: https://code.wildfiregames.com/D3326
This was SVN commit r25111.
Previously this was only done for technologies.
The Viewer tries to determine an appropriate civcode from a passed
template,
however trainable gaia-animals have a template-assigned civ of `gaia`
(and
technologies don't have one at all).
The behaviour of the Viewer isn't changed by this commit: it will still
prefer
whatever civ is set within a template before falling back to the passed
civcode.
However, trained gaia-animals now have something to fall back to,
permitting the
appropriate build list (the list of buildings that train the animal) to
be
displayed.
This was SVN commit r25110.
Previously, atlas would save the default value when the 'civilisation'
checkbox was unset.
Patch by: nwtour
Differential Revision: https://code.wildfiregames.com/D3725
This was SVN commit r25108.
This is the same commit as 4bb31f084e, reverted in 5d1899785a. Noted
issues were fixed.
Partial revert/fix of 2f19cf86d3 and 2567fee329.
Before this diff, it was possible for a mod containing a cache/ or a
config/ folder to get written to incorrectly.
The issue is VFS can map multiple directories to one 'virtual' path, for
reading mods. However, writing data is problematic: which path to
choose?
The only viable solution is to use a path relative to the highest
priority directory encountered in the VFS path, or write paths could be
'hijacked' by lower-priority mods.
This fixes these issues by:
- Adding a new lookup mode ('Real-path') that explicitly picks the real
path relative to the highest-priority subdirectory in the VFS Path.
- Preventing overwriting a real directory with a lower priority one in
general.
- Revert c0c8132dd4's GetRealPath change, re-introducing the function as
GetOriginalPath.
This also cleans up some duplication that led to empty mod folders in
the user mod path, and cleans up loading the 'user' mod.
It also makes it explicit that a directory must be passed to Mount().
Note that the new 'realpath' lookup can still be somewhat complex with
many mount points at various hierarchy levels, but it is at least
predictable/deterministic without having to be careful about populating
order.
Fixes#2553
Differential Revision: https://code.wildfiregames.com/D3728
This was SVN commit r25107.
Partial revert/fix of 2f19cf86d3 and 2567fee329.
Before this diff, it was possible for a mod containing a cache/ or a
config/ folder to get written to incorrectly.
The issue is VFS can map multiple directories to one 'virtual' path, for
reading mods. However, writing data is problematic: which path to
choose?
The only viable solution is to use a path relative to the highest
priority directory encountered in the VFS path, or write paths could be
'hijacked' by lower-priority mods.
This fixes these issues by:
- Adding a new lookup mode ('Real-path') that explicitly picks the real
path relative to the highest-priority subdirectory in the VFS Path.
- Preventing overwriting a real directory with a lower priority one in
general.
- Revert c0c8132dd4's GetRealPath change, re-introducing the function as
GetOriginalPath.
This also cleans up some duplication that led to empty mod folders in
the user mod path, and cleans up loading the 'user' mod.
Note that the new 'realpath' lookup can still be somewhat complex with
many mount points at various hierarchy levels, but it is at least
predictable/deterministic without having to be careful about populating
order.
Fixes#2553
Differential Revision: https://code.wildfiregames.com/D3217
This was SVN commit r25104.
Reintroduced in fa3b341b57, as I changed the execution order of onLoad.
This fixes the problem by explicitly handling this case, which should
avoid accidentally reintroducing the problem.
Differential Revision: https://code.wildfiregames.com/D3724
This was SVN commit r25103.
FindWalkAndFightTargets is used during attack-walk (and a few other
situations) to find new entities to attack. This function can be a bit
slow, taking large chunks of time during battles.
This optimises it by assuming that one of the surrounding unit will
match preferred criteria (which, for most soldiers, are 'Human'), thus
returning the first attackable entity. In the worst case, it should
still be slightly faster than the current code.
Differential Revision: https://code.wildfiregames.com/D3446
This was SVN commit r25102.
- rename 'Controls' class to 'Controllers' to avoid ambiguity and mimic
MVC lingo.
- rename GameRegisterStanza into LobbyGameRegistration, and make it
explicitly a controller.
- rename GameSettingsFile to PersistentMatchSettings & move it to its
own folder (since it could be reused independently of the controllers)
- remove the StartGameController & move `launchGame` to the
GameSettingsController (simplifies the control flow)
- the GUI Object "setupWindow" was actually the GameSettingsPage, this
is corrected.
- the LoadingPage was showing the GameSettingsPage -> in the current
code, it makes more sense to have both handle their own visibility.
- make the NetMessages class independent of other gamesetup logic, so
that it can be reused by other code. Remove the custom XML object.
Differential Revision: https://code.wildfiregames.com/D3719
This was SVN commit r25101.
The NetServer stored a complete copy of the game Init Attributes, which
it sent to new clients on updates from the controller. This worked well,
but prevents incremental updates and other unrelated messages from being
sent.
This changes the system so that:
- in PREGAME state, the server does not update its copy of the game init
attributes
- the server forwards game setup messages from the controller to all
clients
- Joining clients get a full copy of the Settings, when joining, from
the controller (this is a js-driven behaviour - other situations might
not need do it).
- Make the StartNetworkGame message take a copy of the final init
attributes, to ensure synchronization (and simplify some logic).
In practice, this:
- makes it possible to send different types of gamesetup messages (this
introduces two: a regular update and the full 'initial-update' for new
clients).
- moves some C++ hardcoding into JS - here in essence the PREGAME server
state is now init-attributes-agnostic.
- does not change much for readiness control - the server already needed
to force a change at game start to set random elements.
Note that the loading page is currently still receiving the 'local' game
attributes, which assumes that all clients are correctly synchronized
(they should be).
Refs #3806, #3049
Differential Revision: https://code.wildfiregames.com/D3714
This was SVN commit r25099.
Improve the hotkey translations. This adds them to messages.json for
translation, closing the work from 09ad8bfbe5
Refs #5867, refs #5996
Differential Revision: https://code.wildfiregames.com/D3641
This was SVN commit r25097.
Fixes dc18d94030
- Player assignment still had some trouble. This cleans things up by
moving a little more logic in the controller & fixing other usage.
- As a consequence, in MP, if the host swaps two player, the change
will take a few frames to register. It shouldn't be too much of a
problem in practice.
- Fix issues with AI being assigned to player slots for joiners.
- Fix issues with similar color not being correctly picked when swapping
a map.
- Fix issues with rating & locked team settings.
Reported by: langbart
Differential Revision: https://code.wildfiregames.com/D3723
This was SVN commit r25096.
This helps to see compatible mods in the list, which can get a bit long.
For incompatible mods in disabled section use gray colour.
For incompatible mods in enabled section use red colour (what can happen
when using arguments to start the game or they can be in config file).
Add option to filter compatible mods, this does not affect enabled
section, because if there is incompatible mod, it is error and it needs
to be always visible.
Add function recomputeCompatibility and g_ModsCompatibility to avoid
recomputing aredependenciesmet when coloring mods, because every column
is colored separately.
Disable enable mod button if mod is incompatible.
Remove all dependencies met messages as they are now replaced by this
mechanism.
fix getSelectedModUrl in process
Differential revision: D3687
Fixes: #6053
Tested by: @Freagarach
Comments by: @vladislavbelov
This was SVN commit r25095.
All functionality in applyFilters is handled by displayModLists and
modSelected functions.
This is also fixing issue of triggering selected event on the same list
multiple times and not updating mod description and buttons when
applying filters.
Differential revision: D3722
This was SVN commit r25094.
Do not check for undefined when result is returning undefined or the
variable and nothing else is done.
Dont create variables when might not be used or are returned without
other usage after.
Dont call get with same parameter more than necessary.
Differential revision: D3652
Comments by: @Freagarach
This was SVN commit r25093.
Players could not be assigned beyond the first N slots.
Reported by: langbart
Differential Revision: https://code.wildfiregames.com/D3721
This was SVN commit r25091.
Allows modders (and us) to just add an IID to the array and ensure the
`Mirage()`-function to exist in the respective component.
Differential revision: D3713
Comment by: @wraitii
This was SVN commit r25090.
Moves the functions that define the properties/functions to mirage to
their respective components, making it easier for modders to know their
existence and to modify.
Closes: #5985
Differential revision: D3695
Comments by: @wraitii
This was SVN commit r25089.
Disabled technologies & templates are not really gamesetting concerns,
since they are map-specific and de-activating these generally does not
make sense.
Starting technologies is unused and not the correct granularity level
for game setup.
Triggers do a better job of specifying these things on a per-map basis
(in fact, some maps already use triggers for that).
Changes:
- StartingTechnologies was used by the cart sandbox and is simply
removed.
- DisabledTechnologies was used by Polar Sea RM, which already had
triggers -> into triggers.
- DisabledTemplates was used for the Ptol Lighthouse on a few maps ->
since we changed the ability to "a lot of range", it's no longer OP on
these maps and the restriction is simply lifted.
- DisabledTemplates was used on Death Canyon Invasion Force -> into
triggers.
Differential Revision: https://code.wildfiregames.com/D3712
This was SVN commit r25088.
Which were autofixable, with slight modifications.
Not done are the slightly more complex changes.
Refs. #5524
Patch by: @Krinkle
Differential revision: D2279
Comments by: @elexis, @Stan
Reviewed by: @wraitii
This was SVN commit r25087.
Issues from dc18d94030 fixed:
- The AI config page does not work
- Player Color/Civ/Team did not reset when switching out of Scenario,
which locked the setting
- Player color had weird issues with resetting when changing map too.
- Pop Cap could not be changed.
- Explored/Revealed were swapped in the game description (this was
actually fixed at some point in the original diff then reverted).
Reported by: Submariner and langbart
Differential Revision: https://code.wildfiregames.com/D3715
This was SVN commit r25084.
The initial settings for a game, used to create the map in RM & tosetup
the simulation, are named InitAttributes in the C++, but generally
referred to as GameAttributes in the JS GUI. This renames the latter to
the former to avoid confusion, since these settings are immutable once
the map starts, so InitAttributes is more accurate.
Differential Revision: https://code.wildfiregames.com/D3705
This was SVN commit r25083.
The CI wasn't properly reporting linting, as it turns out the output of
`arc lint --output json` is not what the Jenkins plugin expects.
This adds a custom lint printer that is compatible with the plugin
expectations.
Also delete the coala/ folder forgotten in the original diff.
Differential Revision: https://code.wildfiregames.com/D3709
This was SVN commit r25082.
Redo 9f27f0eed8. Now! with not broken serialisation :D
Use a map that stores the functions, instead of them being part of the
Mirage component.
Doesn't need to initialise the variables anymore (refs. #5979).
Saves the mirages in a global to allow (de)serialisation.
Only assign values on Init, not on Construction (to allow
deserialisation).
Refs: #5985
Differential revision: D3702
Comments by: @wraitii
This was SVN commit r25079.
Fixes bae258f9a1.
As reported by Freagarach, garrisoned units trigger error messages.
As reported by Vladislavbelov, noPCH was broken & there were some style
issues.
Differential Revision: https://code.wildfiregames.com/D3707
This was SVN commit r25078.
Split the gamesetup in two: the 'GameAttributes' part into gamesettings/
and the GUI/Presentation part in gamesetup/. This makes it easier to
separate the presentation from the data.
The immediate benefit is that campaigns & autostart scripts don't need
to load the gamesetup folder at all. This also makes it much easier for
any modder that would want to to change the GameSetup itself.
Each 'game attribute' is given a unique class extending GameSetting
(with a few exceptions), in charge of:
- 'Serializing' to the JSON-compatible 'InitAttributes' format, which is
used for persisted settings, network synchronization, map script
settings, hotloading.
- Deserializing from the same format.
- Watching for settings it depends on (such that e.g. unexploring the
map also unreveals it).
The GUI controls remain in charge of presenting the state accurately,
however they now directly subscribe to changes of the GameSettings for
update. The updating logic in general has been lightened on the GUI
side, making it more straightforward to know when something will update,
and reducing un-necessary computations (in theory - in practice, I
believe the gamesetup was already fairly good about this).
The 'Controller' class of the gamesetup have also been lightened, since
more responsibility now lies with GameSettings. In particular, this
include code to actually launch a game.
In general the GameSettings class is permissive - the GUI gamesetup has
tighter restriction for what the player can/cannot modify. This is
intended to give flexibility for campaign maps, which may want to change
arbitrary settings.
Further work would be useful, non-exhaustively:
- the setting of default values remains messy. They currently exist
somethings in GameSettings, sometimes in the GUI gamesetup, and in the
simulation itself (in case attributes are not set).
- the availability and 'lockedness' of settings remains a
work-in-progress.
- some attributes, like disabled technologies, should probably be
removed and triggers used instead.
- the Handling of AI and player-specific data could be improved.
- settings Persistence should follow its own path - not all settings are
worth persisting.
- GAIA settings are added simulation-side but not in the GUI, which is
confusing.
Thanks langbart & Freagarach for testing.
Follows the gamesetup rewrite in 34138a7764.
Refs #3049
Differential Revision: https://code.wildfiregames.com/D3243
This was SVN commit r25077.
HEAL can infinite loop: if the HEAL.APPROACHING:MoveTo call fails, the
unit will fallback to FINDINGNEWTARGET, which looks for new targets to
heal, which can loop around.
In #6106, the cause was that the target was not visible despite the
order being given (presumably a rangemanager/los incompatibility issue).
When MoveTo() fail, orders usually call FinishOrder as that's
irrecoverable.
Further, GATHERING/COLLECTINGTREASURE also did not FinishOrder - there,
we do want to consider new resources if the target is e.g. unreachable,
so add an explicit check for AbleToMove.
Reported by: moiman
Reviewed By: Freagarach
Fixes#6106
Differential Revision: https://code.wildfiregames.com/D3689
This was SVN commit r25075.
This new MotionManager handles movement for UnitMotion components (not
UnitMotionFlying).
This is a first step towards unit pushing, by giving a central place for
the relevant units to collide.
One important side-effect is that movement is effectively synchronous -
the positions are not actually updated until all units have moved for a
turn (refs 6a66fb8205).
As a side-effect, it's an optimisation: fewer messages are being sent
overall, which leads to a slight speedup (negligible without a lot of
units though).
This is a first step - ideally, the movement functions called from
UnitMotionManager would actually be moved there.
Differential Revision: https://code.wildfiregames.com/D3509
This was SVN commit r25071.
The "GARRISONED"-state was quite strange, for entities being garrisoned
can just as well perform other tasks (see e.g. turrets).
Also, the need for keeping a "garrison" order on the stack is removed.
Fixes: #6022
Differential revision: D3656
Refs. #6081
This was SVN commit r25069.
Use a map that stores the functions instead of them being part of the
Mirage component.
Means that a lot doesn't need to be inited now (refs. #5979).
Ticket: #5985
Differential revision: D3694
Comments by: @wraitii
This was SVN commit r25068.
- Remove LevelID harcoding
- Forward the initial data to the endgame script.
- Update the currentRun logic to make it behave more expectedly.
Differential Revision: https://code.wildfiregames.com/D3649
This was SVN commit r25065.
Have an entity cache per item (refs. #6104) (which means it doesn't need
to be created at init; refs. #5979).
Cache the PQ-position instead of querying it for every spawned entity.
One could use any arbitrary player for spawning entities now, increasing
mod support.
Differential revision: D3669
Comment by: @wraitii
This was SVN commit r25064.
Removes indentation.
Adds return value.
Cache owner instead of querying often.
This function can be cleaned even more later.
Differential revision: D3670
Comments by: @wraitii
This was SVN commit r25063.
Structures have them since ad1ab0c3d3, but units were excluded there due
to their mobility and amounts.
Artillery is not that easily massed and also not very mobile, but has a
high range and damage with a low reload time, making it nice to know
their approximate range.
Patch by: @Nescio
Differential revision: D3606
Comments by: @Angen, @borg-, @wraitii
This was SVN commit r25061.
There is no fruit on the map, therefore much like wood techs, the fruit
tech is disabled.
Patch by: Nescio
Differential Revision: https://code.wildfiregames.com/D3595
This was SVN commit r25059.
- Fishing boat build time from 20 to 15 (5 less than bireme/merchant).
- Quinquereme population from 3 to 5 (biremes have 2, triremes 3)
- Warships get a 2:1 wood to metal cost
- Loot is standardized to 20% of costs, XP to 10% of health, similar to
siege engines and structures.
- Fishing boath & Merchant ship have the same resistance as warships but
accordingly lower HP, for easier stat comparison.
Patch by: Nescio
Accepted By: borg-, wraitii
Differential Revision: https://code.wildfiregames.com/D2956
This was SVN commit r25058.
D3482/5701ffccf8 raised the melee attack range to 6 to compensate for
movement over a turn with 500ms MP turns.
Following D3275/d4c2cf4430, this is no longer necessary. Revert to 4
(half the footprint length + 1 & their capture range).
Patch by: Nescio
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D3673
This was SVN commit r25057.
This runs linting using the "arc lint" command of arcanist, which
notably gets run automatically as part of the arc diff workflow.
Changes:
- The major change is that arc lint reports, by default, only issues on
changed lines instead of changed files (--lintall changes that).
- JSHint is largely redundant with eslint and does not support some of
the new Javascript functionality that we are able to use in 0 A.D., such
as conditional chaining, thus it is removed (of course, users can still
run it manually).
- Eslint 7 is supported out of the box and updated to ES 2020
- cppcheck and eslint are optional - if the executable is not found
(e.g. in PATH), it will fallback to a 'dummy' PHP script that does
nothing. This has been tested on windows, mac and Debian (CI).
- The licence year linter now suggests replacement, and has been
rewritten as an arcanist linter.
- Add a JSON error linter.
The intention is to have non-intrusive external linting, and largely the
same text linting.
Coala has largely gone unmaintained in the past few years (more so than
arcanist anyways) and installing it on modern Python is convoluted.
Differential Revision: https://code.wildfiregames.com/D3639
This was SVN commit r25056.
- Renames the elephant_stables.xml templates to elephant_stable.xml
(without plural s), as well as their generic template_*.xml parent,
consistent with e.g the stable.
- Corrects all occurrences in simulation and map files accordingly.
- Renames the stable and elephant stable audio files.
- Drops pers_ from the barrack.png and stable.png icons.
Patch by: @Nescio
Differential revision: D3343
This was SVN commit r25053.
getEntityById calls .has before actually getting the entity by .get and
otherwise returns undefined.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get
The element associated with the specified key, or undefined if the key
can't be found in the Map object.
So calling has is redundant causing performance loss.
Differential revision: D3653
Reviewed by: @Freagarach
This was SVN commit r25048.
Teach her to build advanced houses available for cart players as they
provide more population.
Reviewed by: @Freagarach
Differential revision: D3654
This was SVN commit r25047.
- Rename `RemoveBatch` to `RemoveItem`.
- Refactor that function. (Don't clear the cached entities when *any*
item is removed.)
Fixes the bug that the training is still blocked when a tech is the next
in the queue and the blocking item is removed.
Based on a patch by: @Polakrity
Differential revision: D1843
Comments by: @Angen, @bb
This was SVN commit r25040.
- Use an interval instead of requesting a timeout every timeout.
- Integrate the lateness-parameter.
- Some other cleanup.
- Don't create objects for null values in messages.
- Don't create this.timer on init.
Based on a patch by: @Polakrity
Differential revision: D1906
Comments by: @Angen, @Stan
This was SVN commit r25038.
- Combines multi-spaces into one.
- `\u000a` -> `\n`.
- Proper quotation marks instead of programmers quotes.
- A few typos.
- Capitalise classes.
Scenarios and skirmishes are excluded due to checkrefs.pl not being able
to handle proper quotes in XML.
Patch by: @Nescio
Differential revision: D3493
Comments by: @Stan
This was SVN commit r25037.
- Listing all damage types everywhere is not needed anymore, therefore
0-damage lines are purged.
- Trailing zeros are removed from <Attack> node lines (e.g. <MaxRange>,
<Spread>), per @bb.
- Attack nodes in templates that were effectively replaced by all their
children are deleted too.
- Clean up the confusing and haphazard attack situation in the fauna
templates.
- The now obsolete template_unit_fauna_wild_defensive_fox.xml is
deleted.
- All animals got an attack range that's at half their footprint length
+ 1 and an attack <PrepareTime> that's half their <RepeatTime>, for
consistency.
Patch by: @Nescio
Differential revision: D3342
This was SVN commit r25036.
Makes sure GarrisonHolders don't need to needlessly listen to global
ownership changes anymore.
Also fixes dying entities on turret points.
Refs. #6081
Differential revision: D3648
This was SVN commit r25031.
Since the only way of garrisoning is using `cmpGarrisonable`.
025a00340e introduced the `this.isGarrisoned`-flag, its meaning was
discussed in https://code.wildfiregames.com/D1403.
Refs. #5979, #6081
Differential revision: D2379
Comments by: @elexis, @Stan, @wraitii
This was SVN commit r25030.
Meaning GarrisonHolders won't listen for GlobalEntityRenamed messages
uselessly for the rest of the match after init.
Refs. #6081
Differential revision: D3627
This was SVN commit r25029.
It is better to do case-insensitive search.
Improves on a4852c4c01, though the sensitivity is only an issue since
09ad8bfbe5
Tested by: nwtour
Reported by: nwtour
Differential Revision: https://code.wildfiregames.com/D3647
This was SVN commit r25027.
This makes the cache work consistently if replays are changed
externally.
Patch by: nwtour
Differential Revision: https://code.wildfiregames.com/D3615
This was SVN commit r25026.
POF introduced in afd1eaee0d.
Placing foundations takes another route, for which was warned in the
original ticket but not done nonetheless.
This fixes that route.
Differential revision: D3642
Comments by: @wraitii
Fixes#6090
This was SVN commit r25024.
- adds JSON files to specify the human-readable categorization, name and
description of hotkeys.
- clean up code
Translation support via messages.json not yet added - the strings need
another pass and that avoids translators doing redundant work. See D3641
Refs #5867, Refs #5996
Differential Revision: https://code.wildfiregames.com/D3596
This was SVN commit r25023.
Fixes D11 / 1c9efa6fb5.
The problem is that some GUI pages were simply named "page.xml" which
the regex didn't like.
Accepted By: Nescio
Differential Revision: https://code.wildfiregames.com/D3644
This was SVN commit r25022.
Follow-up to e18001e897.
This moves responsibilities even further to the garrisoning entity.
Fixes the garrison flag when renaming entities cannot garrison (#5906).
Allows easy fixing of #6087.
Ticket: #6081
Differential revision: D3628
Comments by: @Stan, @wraitii (also in length on IRC)
This was SVN commit r25019.
Allowing for easier introduction of new parameters.
Split from D781, (D368).
Differential revision: D2269
Comments by: @Angen, @Stan, @wraitii
Idea accepted by: @wraitii
This was SVN commit r25013.
Fixes a1dc9cadd8: if the speed doesn't change, UnitMotion doesn't update
the visual actor. Unfortunately, if another component has in the
meantime reset the animation to 'Idle', the unit will now move while
Idle. This can happen when leaving formation to do something else,
though it'srare.
This fixes that by instead always calling VisualActor, which does its
own checking to avoid redundancy. It's a bit less efficient, but not too
much.
Note that this relies on UnitMotion::UpdateMovementState being called
after any UnitAI code that could reset the animation to IDLE.
Differential Revision: https://code.wildfiregames.com/D3619
This was SVN commit r25011.
Map previews are broken in the lobby game list, except for maps with
specific previews (such as biome RMs). Descriptions were broken in
general. The error lies in 1ae4f497e8, which forgot to add the xml
extension.
Differential Revision: https://code.wildfiregames.com/D3632
This was SVN commit r25010.
To hide network latency, MP turns send commands not for the next turn
but N turns after that (introduced in c684c211a2).
Further, MP turn length was increased to 500ms compared to 200ms SP
turns (introduced in 6a15b78c98).
Unfortunately, increasing MP turn length has negative consequences:
- makes pathfinding/unit motion much worse & unit behaviour worse in
general.
- makes the game more 'lag-spikey', since computations are done less
often, but thus then can take more time.
This diff essentially reverts 6a15b78c98, instead increasing
COMMAND_DELAY from 2 to 4 in MP. This:
- Reduces the 'inherent command lag' in MP from 1000ms to 800ms
- Increases the lag range at which MP will run smoothtly from 500ms to
600ms
- makes SP and MP turns behave identically again, removing the
hindrances described above.
As a side effect, single-player was not actually using COMMAND_DELAY,
this is now done (can be used to simulate MP command lag).
Refs #3752
Differential Revision: https://code.wildfiregames.com/D3275
This was SVN commit r25001.
This should bring the behaviour back to pre-A24 and means entities will
stray a lot less when gathering.
The entity will search close to the current position, which is mostly
next to a dropsite.
When there is nothing found there, the entity searches nigh the initPos.
Differential revision: D3607
Comments by: @wraitii
Tested by: @Nescio
This was SVN commit r25000.
Follow-up to ea96e81098.
Also adds the ability to gather near a position (e.g. when ungarrisoning
with a rally point set on a treasure that is gone).
Gathering treasures should now behave exactly the same as prior to the
split.
Differential revision: D3580
Comments by: @wraitii
This was SVN commit r24999.
Should hopefully resolve an issue raised on IRC by @spcman and @Xavi92
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D3610
This was SVN commit r24998.
Removes some hardcoding and allows for easier modding of treasures.
Refs.: #5888
Differential revision: D3303
Comments by: @Imarok, @Nescio, @Stan, @wraitii
This was SVN commit r24989.
- Replace ScriptInterface::RegisterFunction with
ScriptFunction::Register
- Mostly removing unused cmpPrivate*
- Some usage introduces specific getters (mapgenerator, AIWorker,
XmppClient,...)
- Several passthrough functions are simply removed in favour of calling
the original, reducing duplication
- Make use of ScriptRequest/ScriptInterface capabilities where
relevant.
- Make JSI_* headers only expose necessary functions, lightening them
considerably and reducing duplication
- Reuse namespaces in JSI_* implementations directly, reducing visual
noise there
Follows f3aedf88a6
Differential Revision: https://code.wildfiregames.com/D3626
This was SVN commit r24983.
- HandleValue needed to explicitly pass UndefinedHandleValue for
'default' arguments.
- Allow passing ScriptInterface as first argument.
- Statically check that a getter is provided for object methods instead
of crashing at runtime
- A few stylistic improvements
Differential Revision: https://code.wildfiregames.com/D3625
This was SVN commit r24981.
Introduce a LOS_TILE_SIZE, to replace usage of TERRITORY_TILE_SIZE in
the LOS code.
This makes it possible to change the resolution of LOS/Terrain without
affecting the other component.
Additional refactoring:
- LosTile has been renamed LosRegion (it's more comparable to the
hierarchical pathfinder regions/spatial subdivisions)
- LosState explicitly refers to "los vertices" instead of terrain
vertices.
Refs #5566
Differential Revision: https://code.wildfiregames.com/D3076
This was SVN commit r24980.
This implements necessary tooling to create a simple SP campaign.
The architecture is intended to be easily extensible in the future.
'Campaign Run' contains the metadata of a campaign, e.g. maps
played/won. It's saved in the user folder under
saves/campaigns/*.0adcampaign
Campaign templates are JSON files in campaigns/
Campaigns can specify which Menu interface they will use. This is
intended to allow more complex layouts/presentation.
For now, a simple list interface is provided. This allows making
campaigns without any fancy art required (and effectively mimics AoE1's
campaign interface).
The behaviour on game end is also intended to be extensible, supporting
things such as carrying over units between scenarios - for now, it
simply records won games.
GameSetup is not available for now - scenarios are triggered with the
settings defined in the map/default settings. Improving on this requires
refactoring the gamesetup further.
The load/save game page has been extended slightly to support
showing/hiding campaign games (campaign gamed are saved under saves/
directly, there is no strong motivation to do otherwise at this point)
Closes#4387
Differential Revision: https://code.wildfiregames.com/D11
This was SVN commit r24979.
Fixes d038b3c4f2, by partially reverting it.
If the new order is rejected, PushOrder() will call FinishOrder. If
there are no more orders on the queue, this calls SetNextState("idle"),
with the intention os switching the unit to IDLE. However, this only
works from within an FSM call, and thus does nothing if a new command
gets rejected.
The problem is that this.order/this.orderQueue is already replaced by
the point the order is rejected when called via ReplaceOrder. Ideally,
this would not happen (but doing so isn't trivial).
The current code avoids having 2 different ways to reject an order, thus
isn't a complete revert of d038b3c4f2. It triggers an IDLE re-entry that
wasn't there before if the unit is IDLE when it receives the rejected
order, which at the moment basically never happens.
Refs #5771 (reopened)
Reported by: gameboy
Comments by: Freagarach, Angen
Differential Revision: https://code.wildfiregames.com/D3618
This was SVN commit r24978.
All modern browsers block ajax request to local file.
This changes extract.pl to generate a single HTML file with data
embedded.
This is now the default behaviour, --to-json to export, --from-json to
load exported.
Patch by: nwtour
Reviewed By: wraitii
Differential Revision: https://code.wildfiregames.com/D3621
This was SVN commit r24975.
Since slaughter kills animals in one strike since 3d61c227f3, domestic
animals can now be set to flee when attacked by anything else than
slaughter, like area damage or stray missiles.
Original patch by: @elexis
Differential revision: D193
Comments by: @mimo, @wraitii
This was SVN commit r24973.
The new methods:
- aren't included in ScriptInterface.h directly, lightening that header
- don't use boost CPP
- don't need argument types or number or constness to be specified
- can work with object methods somewhat transparently
- support optional cmptPrivate (allowing removal of many UNUSED macro)
- support optional const ScriptRequest&, which is safer.
This first diff changes only some of the JSI files & the component
manager. Further diffs will update other files and finally delete the
current code.
Differential Revision: https://code.wildfiregames.com/D2818
This was SVN commit r24969.
Improve the explicitedness of the following error.
Reviewed By: Freagarach
Differential Revision: https://code.wildfiregames.com/D3614
This was SVN commit r24967.
- Adds a function to generate a 'debug' catalog. This prepends 'X_X '
to strings, to make it obvious in-game which are translated and which
aren't, while still remaining usable.
- cleans up the code and formats to PEP8 properly (except for line
lengths).
Differential Revision: https://code.wildfiregames.com/D3617
This was SVN commit r24966.
Allows entities to change their resource amount over time, possibly with
some constraint.
This is a not-so-bare minimum, but can certainly be improved and/or
extended later.
Part of: #1973
Original patch by: @smiley
Redone by: @Stan
Standing on the shoulders of giants: @Freagarach
(Revisions: 59; Inlines: 209)
Differential revision: D1718
Comments by: @Angen, @elexis, @Imarok, @Langbart, @nani, @Nescio,
@smiley, @Stan, @wraitii
This was SVN commit r24963.
This adds a new endpoint to the RL interface for evaluating custom
JavaScript. When combined with the ability to create arbitrary
modifiers, this provides the required functionality for exploring
quantitative game balancing.
Patch By: irishninja
Fixes#5981
Differential Revision: https://code.wildfiregames.com/D3479
This was SVN commit r24962.
- PushOrderFront could lead to an infinite loop if walking fails.
- Move units in formation before issuing the move order (or the
formation may not exist).
Differential Revision: https://code.wildfiregames.com/D3411
This was SVN commit r24961.
Basically removed in 3521c8f51e, now brought back :) (But split from the
population space.)
Differential revision: D2056
Comments by: @Angen, @Nescio, @Stan, @wraitii
This was SVN commit r24960.
Since its introduction in b2f4b0f494 garrisoned entities were not
allowed to upgrade (b2f4b0f494#inline-4821) but that is not needed (at
least since 4fadd75ace).
Changing templates to anything not being able to garrison will still
fail (#5906) but that can also be done with this code.
Differential revision: D3251
Comment by: @bb
This was SVN commit r24958.
Take some responsibility from GarrisonHolder to where it belongs
(Garrisonable).
Differential revision: D3223
Comments by: @Stan, @wraitii
This was SVN commit r24957.
In our current UnitAI implementation, the states are responsible for
whether we are moving or not. If a request to stop moving is made from
outside the state that initiated the moving order that is (mostly)
wrong. This fixes that.
Differential revision: D3289
Comment by: @wraitii
This was SVN commit r24954.
18b317bc19 (#563) introduced an ANIMAL-state from a separate
AnimalAI-component (introduced in e19146cf25).
This patch merges that separate state and brings the ROAMING and FEEDING
(renamed to LINGERING) under the INDIVIDUAL.IDLE-state.
This enables e.g. city-building mods to have human units that linger and
roam or animals that behave like humans.
The specific values for animals might need tweaking after this.
Differential revision: D2646
Fixes: #1832, #5593
Comments by: @Angen, @Langbart, @Nescio, @Stan, @wraitii
Refs.: #3919
This was SVN commit r24953.
The 'controller' of an MP game (the host in general, though dedicated
servers would change that) is currently whoever first tells the server
that it is. This can be abused since it relies on trusting the clients.
This changes that logic: the server defines a 'controller secret', and
the first client to sent the correct controller secret is the
controller. This is safe assuming the secret is unknowable enough (the
current solution wouldn't pass strict cryptography tests, but it's
likely good enough).
Reverts 1a3fb29ff3, which introduced the 'trust the clients' mechanic,
as a change over 'the first local IP is controller'.
Necessary step towards dedicated server, if we want to use the regular
gamesetup (Refs #3556)
Differential Revision: https://code.wildfiregames.com/D3075
This was SVN commit r24952.
Ports 1-1023 are privileged and shouldn't be accepted by the GUI.
Patch by: DynamoFox
Differential Revision: https://code.wildfiregames.com/D3574
This was SVN commit r24949.
The spawn code should not assume that obstructions will never be
0-sized.
Reported by: Zack
Fixes#6039
Differential Revision: https://code.wildfiregames.com/D3583
This was SVN commit r24945.
Also incorporate retry improvements by Stan
Reported by: madPilot
Differential Revision: https://code.wildfiregames.com/D3585
This was SVN commit r24944.
Last alpha 24 commit was [[SVN:24937]]. [[SVN:24938]] was because the CI
wasn't turned off.
Comments by: @wraitii, @Freagarach, @Nescio,
Differential Revision: https://code.wildfiregames.com/D3571
This was SVN commit r24939.
2021-02-27 08:48:30 +00:00
17011 changed files with 281282 additions and 649781 deletions
about: "This is a special issue template for planning Alpha releases. DO NOT USE it for normal issue reports."
title: "[RELEASE PROCESS] Alpha XX"
labels:
- "Type/Task"
- "Theme/Build & Packages"
---
*Please fill out relevant information in the next line, set Milestone to the relevant Alpha and Branch/Tag to the relevant release branch when it's created. Then delete this line.*
# Alpha XX Release Process
This task tracks the progress of the next Alpha release. **Please do not report issues with the nightly build or with release candidates here:** instead create a new issue and set its Milestone to the relevant Alpha.
All details about each step are documented in [ReleaseProcess](wiki/ReleaseProcess).
**Release Manager:** @
**Translations Officer:** @
## Outstanding Issues
**All the following issues must be fixed in `main` (which closes the issue) and then cherry-picked to the release branch (after that, you can tick the checkbox below).**
Here are the Release Blocking issues currently delaying the release:
- [x] None currently
## Progress Tracking
### Release Branching
- [ ] [Test the tutorials](wiki/ReleaseProcess#test-the-tutorials)
- [ ] [Organize a first staff match](wiki/ReleaseProcess#organize-a-first-staff-match)
- [ ] [Prepare for branching](wiki/ReleaseProcess#prepare-for-branching)
- [ ] [Create a `release-aXX` branch](wiki/ReleaseProcess#create-a-release-axx-branch)
- [ ] [Adapt Jenkins for the release](wiki/ReleaseProcess#adapt-jenkins-for-the-release)
- [ ] [Prepare next multiplayer lobby in `main`](wiki/ReleaseProcess#prepare-next-multiplayer-lobby-in-main)
- [ ] [Generate next signing key for mods in `main`](wiki/ReleaseProcess#generate-next-signing-key-for-mods-in-main)
progressdescription=false ; Whether to display the progress percent or a textual description
[gui.session]
dragdelta=4 ; Number of pixels the mouse can move before the action is considered a drag
camerajump.threshold=40 ; How close do we have to be to the actual location in order to jump back to the previous one?
timeelapsedcounter=false ; Show the game duration in the top right corner
ceasefirecounter=false ; Show the remaining ceasefire time in the top right corner
batchtrainingsize=5 ; Number of units to be trained per batch by default (when pressing the hotkey)
scrollbatchratio=1 ; Number of times you have to scroll to increase/decrease the batchsize by 1
flarelifetime=6 ; How long the flare markers on the minimap are displayed in seconds
woundedunithotkeythreshold=33 ; The wounded unit hotkey considers the selected units as wounded if their health percentage falls below this number
attackrange=true ; Display attack range overlays of selected defensive structures
aurasrange=true ; Display aura range overlays of selected units and structures
@@ -405,8 +462,14 @@ snaptoedgesdistancethreshold = 15 ; On which distance we don't snap to edges
disjointcontrolgroups="true" ; Whether control groups are disjoint sets or entities can be in multiple control groups at the same time.
defaultformation="special/formations/box" ; For walking orders, automatically put units into this formation if they don't have one already.
formationwalkonly="true" ; Formations are disabled when giving gather/attack/... orders.
howtoshownames=0 ; Whether the specific names are show as default, as opposed to the generic names. And whether the secondary names are shown. (0 - show both; specific names primary, 1 - show both; generic names primary, 2 - show only specific names, 3 - show only generic names)
selectformationasone="true" ; Whether to select formations as a whole by default.
[gui.session.minimap]
; Icons that are displayed for some entities on a minimap.
icons.enabled="true"
icons.opacity=1.0
icons.sizescale=1.0
blinkduration=1.7 ; The blink duration while pinging
pingduration=50.0 ; The duration for which an entity will be pinged after an attack notification
@@ -414,11 +477,12 @@ pingduration = 50.0 ; The duration for which an entity will be pin
attack=true ; Show a chat notification if you are attacked by another player
tribute=true ; Show a chat notification if an ally tributes resources to another team member if teams are locked, and all tributes in observer mode
barter=true ; Show a chat notification to observers when a player bartered resources
flare=always ; Show a chat notification when a player sends a flare. Possible values: never, observer, always.
phase=completed ; Show a chat notification if you or an ally have started, aborted or completed a new phase, and phases of all players in observer mode. Possible values: none, completed, all.
[gui.splashscreen]
enable=true ; Enable/disable the splashscreen
version=0 ; Splashscreen version (date of last modification). By default, 0 to force splashscreen to appear at first launch
version=0 ; Splashscreen version (MD5 hash of file content). By default, 0 to force splashscreen to appear at first launch
[gui.session.diplomacycolors]
self="21 55 149" ; Color of your units when diplomacy colors are enabled
@@ -429,13 +493,6 @@ enemy = "150 20 20" ; Color of enemies when diplomacy colors are e
timestamp=true ; Show at which time chat messages have been sent
@@ -445,16 +502,16 @@ extended = true ; Whether to display the chat history
[lobby]
history=0 ; Number of past messages to display on join
room="arena24" ; Default MUC room to join
room="arena27" ; Default MUC room to join
server="lobby.wildfiregames.com" ; Address of lobby server
tls=true ; Whether to use TLS encryption when connecting to the server.
verify_certificate=false ; Whether to reject connecting to the lobby if the TLS certificate is invalid (TODO: wait for Gloox GnuTLS trust implementation to be fixed)
terms_url="https://trac.wildfiregames.com/browser/ps/trunk/binaries/data/mods/public/gui/prelobby/common/terms/"; Allows the user to save the text and print the terms
terms_url="https://gitea.wildfiregames.com/0ad/0ad/src/branch/main/binaries/data/mods/public/gui/prelobby/common/terms/"; Allows the user to save the text and print the terms
terms_of_service="0" ; Version (hash) of the Terms of Service that the user has accepted
terms_of_use="0" ; Version (hash) of the Terms of Use that the user has accepted
privacy_policy="0" ; Version (hash) of the Privacy Policy that the user has accepted
xpartamupp="wfgbot24" ; Name of the server-side XMPP-account that manage games
echelon="echelon24" ; Name of the server-side XMPP-account that manages ratings
xpartamupp="wfgbot27" ; Name of the server-side XMPP-account that manage games
echelon="echelon27" ; Name of the server-side XMPP-account that manages ratings
buddies="," ; Comma separated list of playernames that the current user has marked as buddies
rememberpassword=true ; Whether to store the encrypted password in the user config
@@ -466,18 +523,24 @@ enabled = true ; The STUN protocol allows hosting games wi
; If STUN is disabled, the game relies on direct connection, UPnP and port forwarding.
server="lobby.wildfiregames.com" ; Address of the STUN server.
port=3478 ; Port of the STUN server.
delay=200 ; Duration in milliseconds that is waited between STUN messages.
; Smaller numbers speed up joins but also become less stable.
delay=10 ; Duration in milliseconds that is waited between checking for retrieved STUN responses.
; Smaller numbers speed up joins but may make them less stable, if max_tries isn't increased proportionally as well.
max_tries=100 ; Maximum number of tries for receiving STUN responses.
[lobby.fw_punch]
delay=200 ; Duration in milliseconds between sending hole punching messages.
num_msg=3 ; Number of hole punching messages to send.
[mod]
enabledmods="mod public"
[modio]
public_key="RWRcbM/EwV7bucTiQVCcRBhCkYkXmJEO7s4ktyufkB+gW/NxHhOZ38xh" ; Public key corresponding to the private key valid mods are signed with
public_key="RWQv2alKl8D0zMDJR766jpYvPy4u3y77HL/iKb/lsT1Fnf6ezoMb2x8+" ; Public key corresponding to the private key valid mods are signed with
disclaimer="0" ; Version (hash) of the Disclaimer that the user has accepted
[modio.v1]
baseurl="https://api.mod.io/v1"
baseurl="https://g-5.modapi.io/v1"
api_key="23df258a71711ea6e4b50893acc1ba55"
name_id="0ad"
@@ -485,6 +548,9 @@ name_id = "0ad"
duplicateplayernames=false ; Rename joining player to "User (2)" if "User" is already connected, otherwise prohibit join.
lateobservers=everyone ; Allow observers to join the game after it started. Possible values: everyone, buddies, disabled.
observerlimit=8 ; Prevent further observer joins in running games if this limit is reached
observermaxlag=-1 ; Make clients wait for observers if they lag more than X turns behind. -1 means "never wait for observers".
autocatchup=true ; Auto-accelerate the sim rate if lagging behind (as an observer).
enetmtu=1372 ; Lower ENet protocol MTU in case packets get further fragmented on the UDP layer which may cause drops.
[overlay]
fps="false" ; Show frames per second in top right corner
@@ -493,9 +559,7 @@ netwarnings = "true" ; Show warnings if the network connection is b
[profiler2]
autoenable=false ; Enable HTTP server output at startup (default off for security/performance)
gpu.arb.enable=true ; Allow GL_ARB_timer_query timing mode when available
gpu.ext.enable=true ; Allow GL_EXT_timer_query timing mode when available
gpu.intel.enable=true ; Allow GL_INTEL_performance_queries timing mode when available
gpu.arb.enable=true ; Allow GL_ARB_timer_query timing mode when available.
[rlinterface]
address="127.0.0.1:6000"
@@ -506,6 +570,9 @@ musicgain = 0.2
ambientgain=0.6
actiongain=0.7
uigain=0.7
mindistance=1
maxdistance=350
maxstereoangle=0.62 ; About PI/5 radians
[sound.notify]
nick=true ; Play a sound when someone mentions your name in the lobby or game
@@ -517,12 +584,13 @@ debug = false ; Print error messages each time a translation
[userreport] ; Opt-in online user reporting system
url_upload="https://feedback.wildfiregames.com/report/upload/v1/" ; URL where UserReports are uploaded to
url_publication="https://feedback.wildfiregames.com/" ; URL where UserReports were analyzed and published
url_terms="https://trac.wildfiregames.com/browser/ps/trunk/binaries/data/mods/public/gui/userreport/Terms_and_Conditions.txt"; Allows the user to save the text and print the terms
url_terms="https://gitea.wildfiregames.com/0ad/0ad/src/branch/main/binaries/data/mods/public/gui/userreport/Terms_and_Conditions.txt"; Allows the user to save the text and print the terms
terms="0" ; Version (hash) of the UserReporter Terms that the user has accepted
[view] ; Camera control settings
scroll.speed=120.0
scroll.speed.modifier=1.05 ; Multiplier for changing scroll speed
<a:help>Minimum quality - this is inclusive.</a:help>
<ref name="qualityLevels"/>
</attribute>
</optional>
<optional>
<attribute name="maxquality">
<a:help>Maximum quality - this is exclusive.</a:help>
<ref name="qualityLevels"/>
</attribute>
</optional>
</define>
<define name="group">
<element name="group">
<ref name="qualitySettings"/>
<zeroOrMore>
<element name="variant">
<ref name="qualitySettings"/>
<interleave>
<optional>
<attribute name="name"/>
</optional>
<optional>
<attribute name="file"/>
</optional>
<optional>
<attribute name="frequency">
<data type="nonNegativeInteger"/>
</attribute>
</optional>
<optional>
<element name="mesh">
<text/>
</element>
</optional>
<optional>
<element name="textures">
<zeroOrMore>
<element name="texture">
<interleave>
<optional>
<attribute name="file"/>
</optional>
<attribute name="name"/>
</interleave>
</element>
</zeroOrMore>
</element>
</optional>
<optional>
<element name="decal">
<interleave>
<attribute name="width">
<data type="float"/>
</attribute>
<!-- X -->
<attribute name="depth">
<data type="float"/>
</attribute>
<!-- Z -->
<attribute name="angle">
<data type="float"/>
</attribute>
<attribute name="offsetx">
<data type="float"/>
</attribute>
<attribute name="offsetz">
<data type="float"/>
</attribute>
</interleave>
</element>
</optional>
<optional>
<element name="particles">
<attribute name="file"/>
</element>
</optional>
<optional>
<element name="color">
<list>
<group>
<data type="nonNegativeInteger"/>
<!-- R -->
<data type="nonNegativeInteger"/>
<!-- G -->
<data type="nonNegativeInteger"/>
</group>
<!-- B -->
</list>
</element>
</optional>
<optional>
<element name="animations">
<zeroOrMore>
<element name="animation">
<interleave>
<attribute name="name"/>
<optional>
<attribute name="id"/>
</optional>
<optional>
<attribute name="frequency">
<data type="nonNegativeInteger"/>
</attribute>
</optional>
<optional>
<attribute name="file"/>
</optional>
<attribute name="speed">
<data type="nonNegativeInteger"/>
</attribute>
<optional>
<attribute name="event">
<data type="decimal">
<param name="minInclusive">0</param>
<param name="maxInclusive">1</param>
</data>
</attribute>
</optional>
<optional>
<attribute name="load">
<data type="decimal">
<param name="minInclusive">0</param>
<param name="maxInclusive">1</param>
</data>
</attribute>
</optional>
<optional>
<attribute name="sound">
<data type="decimal">
<param name="minInclusive">0</param>
<param name="maxInclusive">1</param>
</data>
</attribute>
</optional>
</interleave>
</element>
</zeroOrMore>
</element>
</optional>
<optional>
<element name="props">
<zeroOrMore>
<element name="prop">
<interleave>
<optional>
<attribute name="actor"/>
</optional>
<attribute name="attachpoint"/>
<optional>
<attribute name="minheight">
<data type="float"/>
</attribute>
</optional>
<optional>
<attribute name="maxheight">
<data type="float"/>
</attribute>
</optional>
<optional>
<attribute name="selectable">
<choice>
<value>true</value>
<value>false</value>
</choice>
</attribute>
</optional>
</interleave>
</element>
</zeroOrMore>
</element>
</optional>
</interleave>
</element>
</zeroOrMore>
</element>
</define>
<define name="actorDef">
<interleave>
<attribute name="version">
<data type="positiveInteger"/>
</attribute>
<zeroOrMore>
<ref name="group"/>
</zeroOrMore>
<optional>
<element name="castshadow">
<ref name="qualitySettings"/>
<!-- flag; true if present -->
<empty/>
</element>
</optional>
<optional>
<element name="float">
<ref name="qualitySettings"/>
<!-- flag; true if present -->
<empty/>
</element>
</optional>
<optional>
<element name="material">
<ref name="qualitySettings"/>
<text/>
</element>
</optional>
</interleave>
</define>
<start>
<choice>
<element name="actor">
<ref name="actorDef"/>
</element>
<element name="qualitylevels">
<interleave>
<attribute name="version">
<data type="positiveInteger"/>
</attribute>
<oneOrMore>
<element name="actor">
<optional>
<attribute name="quality">
<a:help>The quality level to use for this actor. This is the maximum value at which this version of the actor will be used. If not specified, the maximum possible value is assumed.</a:help>
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.