Changelog

Die letzten Änderungen an "Return to the Roots"
77372c5 s25client 04.12.2024 10:45 Flamefire GHA: Update latest Clang & GCC versions
b357b16 s25client 04.12.2024 10:45 Flamefire GHA: Use macos-14 image

macos-12 is no longer available
99294d5 s25client 27.11.2024 11:12 Flamefire Factor out walk frame index calculation for figures

To have a single place to describe and handle the expected layout of the
walk animation sprite set factor it out into `calcWalkFrameIndex`.
Also translate related comments.
65271ea s25client 27.11.2024 11:11 Flamefire Add missing override
c51d62b s25client 26.11.2024 21:40 Sunrise Repack wine_bobs.lst for vintner and temple servant
They have no a range of 48 entries for each animation for going in/out with wares
We do not need strange offsets anymore but can go with the start index only
Animation steps never used are empty in the lst archive
aa5ca22 s25client 22.11.2024 23:01 Sunrise Fix wrong offset for vintner and templeservant walking in/out with ware
aa11dc5 s25client 11.11.2024 08:21 FloSoft Merge pull request #1710 from Flamefire/fix-campaign-load-dsk

Load campaign data only once
14c63f8 s25client 11.11.2024 08:20 FloSoft Merge pull request #1714 from Flamefire/fix-autosave

Fix autosave interval setting
1450205 s25client 10.11.2024 13:50 Flamefire Refactor iwSave

- Use enum as named IDs
- Move more into the base class, like adding the edit and button
- Show the savegame path for both save & load window
- Update and translate comments
8c3cd2e s25client 10.11.2024 13:12 Flamefire Fix autosave interval setting

There is an off-by-one error when selecting the auto save interval:
- Entry 0 is "disabled"
- Entry 1 corresponds to index 0 in the interval array
- Hence the maximum valid value is size()

The code checked for >= size() and applied the "every GF" setting that
is the last entry.

Fix is to simply use `> size()` as the check.

Fixes #1713
4713b77 s25client 28.10.2024 11:13 FloSoft Merge pull request #1708 from Farmer-Markus/master

Fix inverted cursor is not saved in global settings
460f124 s25client 22.10.2024 17:03 Flamefire Disable Start button until mission is selected.

The mission selection map starts with nothing selected so the "Start"
button does nothing on click.
Disable it until something gets selected for better UX.
a51f67f s25client 21.10.2024 15:52 Flamefire Actually allow maps and lua files to be placed within the campaign folder.

Although this is documented it was not implemented.
Make both folders optional defaulting to the campaign folder.
fcc984a s25client 21.10.2024 15:30 Flamefire Use raw strings in testCampaignLuaFile

Makes the LUA code easier to read
6d090b9 s25client 21.10.2024 14:33 Flamefire Make missionsPerPage_ & lastPage_ constant
6c4ee6f s25client 21.10.2024 14:24 Flamefire Prefix ctrl IDs with their type

Allow to easily identify the expected type for `GetCtrl` calls.
80d500c s25client 21.10.2024 13:59 Flamefire Merge `dskCampaignMissionMapSelection` and `dskCampaignMissionSelection`

The classes share some code and essentially the same functionality.
Especially problematic is the reliance on the "mission map" in the
campagin description which may lead to an empty screen if
`dskCampaignMissionMapSelection` is instantiated in absence of that.

Additionally the difference in naming doesn't make it clear which is which.
5f90a04 s25client 21.10.2024 13:56 Flamefire Return optional from ctrlMapSelection::getSelection

Avoid use of sentinel values in presence of C++17 `std::optional`.
Makes it more obvious what is returned.

Also rename from `getCurrentSelection` for consistency with e.g.
`ctrlList` and similar and `setSelection`.
844d157 s25client 20.10.2024 18:01 Flamefire Load campaign data only once

Load data for all campaigns when opening the capaign selection window.
We don't rescan the folders while the window is open so there is no need
to load the lua files multiple times.
Especially the draw code for the map image loads the current campaign
on every draw call to determine what is to be drawn. This also spams the
log with messages such as missing languages.

If we pass the parsed campaign to the mission selection screen we can
also get rid of the invisible column for the filepath.
Finally we can load all ressources (images) in one go.

Fixes #1705
c41342f s25client 20.10.2024 15:07 Flamefire Allow omitting the campaign image completely.

Now the image is either a non-empty string or `nullopt`
c1a88ed s25client 20.10.2024 14:50 Flamefire Fix dependencies of test for libGamedata

The test doesn't contain on s25Main so we can reduce the amount of
compilation required.
Also move the campaign test out of the s25Main tests.
28de8bb s25client 20.10.2024 11:33 Farmer_Markus rttr formatting fix
93a9de0 s25client 19.10.2024 05:35 FarmerMarkus fixed invertedCursor is not saved
a9eb1ca s25client 17.10.2024 21:37 Flamefire Update submodule for nowide
d2a6e73 libutil 17.10.2024 21:37 Flamefire Update Nowide to 11.2
48dfd6f s25client 13.10.2024 21:01 Flamefire Add jump-to-position to Map-Debug window

For debugging we often want to view a specific position.
Make this easy by specifying the position as X-Y and Go-To with RETURN.
TAB can be used to change between the edits which also clears the newly
activated one such that new coordinates can be entered.
a3adcfa s25client 13.10.2024 21:00 Flamefire Disable FoW when Map-Debug window is shown in replay mode

We usually want to browse the map anyway so just combine showing the
window and revealing the map.
7699e64 s25client 13.10.2024 16:42 Flamefire Add `DescriptionVector` for type-safe access via `DescIdx`

Also use the bool operator of `DescIdx` for invalid edge-indices.
b394bd0 s25client 12.10.2024 16:17 Flamefire Flush stderr after printing crash message
37350da s25client 12.10.2024 14:40 Flamefire Fix stuck soldiers when free fight gets aborted while waiting

When one soldier involved in an upcoming free fight is waiting for the
other and that aborts the free fight for any reason, e.g. when the spot
becomes unreachable, the waiting soldier changes state but doesn't start
moving and as he isn't moving already there is no event queued that
would make it handle the new (moving) state.
This leads to it being stuck there forever and also crashes the draw
code which doesn't expect a supposedly walking soldier not having a walk
event.

Split the `AbortFreeFight` method in 2:
- virtual method to determine the next state
- base method to reset the free fight state for both soldiers and let
them continue

For the aborting soldier effectively nothing is changed.
The other soldier gets a simulated walk event if he was waiting to
handle the new state.

As the 2 soldiers might get involved in another fight with each other
both their "fight states" are cleaned up first to establish a valid
state before the other soldier gets triggered.
d5c6665 s25client 09.10.2024 14:32 Sunrise Fix wrong Y offsets for the donkey/boat carried wine/grape wares
15c795d s25client 08.10.2024 21:23 Flamefire Avoid inverted condition in nofActiveSoldier
98e46f6 s25client 08.10.2024 21:14 Flamefire Rename `FreeFightEnded` to `AbortFreeFight`

The method is called when a free fight cannot be started not after it
has ended, so reflect this in the name.
c32daac s25client 04.10.2024 22:12 Flamefire Add functions to search for terrain descriptors

In some places we need e.g. "any water" terrain or in general a single
or all descriptors matching a condition.
Add `find` and `findAll` methods to the containers and add and use the
explicit bool operator.
Both in combination avoid using the raw `value` member of the `DescIdx`
in most cases.
9e2dc06 s25client 04.10.2024 20:55 Flamefire Avoid accidental copies of GameObjects

As we store GameObject references by pointer we must not copy them.
The only exception is for soldiers where we convert a passive soldier
to an attacker or defender by copying the base attributes.

Mark any copy constructor we don't need as deleted and the others as
explicit and protected.
3fbff6e s25client 04.10.2024 15:10 Flamefire Enhance `Range` class to allow for a custom start value

In some cases we need to start at e.g. 1 not 0.
Also make use of C++17 CTAD and remove the factory method.
01e9536 s25client 03.10.2024 22:13 Flamefire Replace some pointer arguments by references

Communicate that those must not be NULL
02917bc s25client 01.10.2024 17:19 Flamefire Merge pull request #1703 from Flamefire/fix/windows-ci

Move Windows CI to GitHub Actions
e55e880 s25client 29.09.2024 22:41 Flamefire Fix compatibility for Boost 1.81+

`boost::filesystem::path` allows conversion from anything that is
convertible to a string-ish type, like C-Strings or `std::string`.
`kaguya::LuaRef` is convertible to everything (but may fail at runtime)
which makes the conversion to that ambiguous.
This becomes a problem for `ImageResource` which has an implicit
conversion from `boost::filesystem::path` so implicitely converting
`kaguya::LuaRef` to `ImageResource` will make the compiler try the
conversion to `boost::filesystem::path` causing an error.

Use the `get<T>` member function to avoid the atempted implicit conversion.
7c757bd s25client 29.09.2024 16:07 Flamefire Move Windows CI to GitHub Actions

The time limit of 1h is not enough to build the release version.
da67e6a s25client 29.09.2024 15:05 FloSoft Merge pull request #1702 from Flamefire/fix-setting-crash

Fix crash when opening map settings
6cf6368 s25client 28.09.2024 19:11 Flamefire Fix crash when opening map settings

In one instance a NULL-check for the `lua` pointer was missing as the
call should have been through a function.

Fixes #1701
5d1edef s25client 03.09.2024 23:47 FloSoft Merge pull request #1663 from Flamefire/fixplayerlua

Fix setting disabling by LUA for non-Host players
e191e83 s25client 03.09.2024 21:58 Flamefire Merge branch 'master' into fixplayerlua
2099971 s25client 02.09.2024 16:07 Flamefire Don't run updater with --verbose on Linux

The option is mostly useful for debugging so can be specified manually.
The Windows (.bat) updater doesn't set it either, so this is consistent
d1fd012 s25client 02.09.2024 16:06 Flamefire Update s25update module

Fixes #1697
ed128d5 s25update 02.09.2024 16:04 Flamefire Log filelist URL to download in --verbose mode.

Also rename from "master file" to "update filelist"
10b486c s25update 02.09.2024 15:56 Flamefire Fix download

An inverted condition resulted in confusion of downloading to file or to memory.
Avoid that by moving the related code (get argument & set options)
together.
To make it more feasible use a RAII wrapper class for `CURL*` and wrap
also the CURL calls.
87b497f s25client 02.09.2024 12:30 Flamefire Merge branch 'master' into fixplayerlua
ed50fcd s25client 02.09.2024 12:29 Flamefire Merge pull request #1684 from kubaau/set_computer_barrier

Add SetComputerBarrier