Commit Graph

30752 Commits

Author SHA1 Message Date
Gustas
413aa00ce6 Don't play chat sounds when loading games 2026-02-22 17:17:59 +00:00
Gustas
0a9b493c14 Moved game save notification to StartGameNotification 2026-02-22 17:17:59 +00:00
N.N
3a86c035b3 Rework D2k campaign scripts:
- Add InitialProductionDelay
- Different attacksDelays for early game and late game
- Adjust T3 unit production for selected missions
- Implement InitialAttackDelay, TimeBetweenAttacks
- Implement routines for idle units
- Emergency mode
- Airstrike rework
2026-02-22 17:04:04 +02:00
Vapre
0a933ba09c CellLayer, use span. 2026-02-17 18:16:49 +02:00
Matthias Mailänder
6b04dbc210 Point to the log for long stack traces. 2026-02-17 18:11:26 +02:00
Matthias Mailänder
c651f733a7 Write to error output stream. 2026-02-17 18:11:26 +02:00
xan2622
4a04f8df83 Add command history to single-player and multiplayer
The last 50 valid commands starting with / are saved to memory.
Regular chat messages are not saved to prevent spam.
The command history persists across single-player and multiplayer games.
Press arrow up/down to show the previously typed commands within the current OpenRA session.
2026-02-15 22:32:45 +02:00
atlimit8
096ad0c413 add handing ±∞ to PerfGraphWidget.SixCharacterFormatFloat() 2026-02-15 22:20:04 +02:00
atlimit8
74c4bcc072 add unit tests for PerfGraphWidget.SixCharacterFormatFloat() 2026-02-15 22:20:04 +02:00
atlimit8
2516c5a798 Collect and show perf sample totals in widget
Both the rolling and cumulative active (not paused) means are shown.
2026-02-15 22:20:04 +02:00
Paul Chote
ef5541cce4 Add registered player tooltip to lobby chat names. 2026-02-07 18:21:18 +02:00
xan2622
efe7bce08a Shift Color Picker panel left if it would extend beyond the right edge of the screen 2026-02-07 18:02:01 +02:00
xan2622
a6f5002a84 Removed the "(Esc)" hotkey from the Options button in Spectator mode.
Made the button slightly smaller (130 pixels) but enough for most translations.
2026-02-07 17:51:51 +02:00
michaeldgg2
05250933e7 Fix typo (UtiliyHelpers) 2026-02-07 17:10:38 +02:00
Matthias Mailänder
f827421b37 Deduplicate ingame player strings. 2026-01-26 20:54:37 +02:00
Matthias Mailänder
ac162936ca These strings are already shared. 2026-01-26 20:54:37 +02:00
Gustas
2164700a7a Fix field saver tests not ignoring culture 2026-01-26 19:02:11 +01:00
Matthias Mailänder
d6af55bc04 Display the complete SDL version. 2026-01-26 18:50:21 +02:00
Matthias Mailänder
f8c20a0f8d Update to SDL 2.32.10 2026-01-26 18:50:21 +02:00
Matthias Mailänder
d6e2257158 Use oldest supported macOS. 2026-01-25 18:49:57 +00:00
Gustas
a0a0d832f9 Rerendered UI 2026-01-25 13:08:24 +01:00
Matthias Mailänder
c063e16c51 Display the line where a mismatch occurred. 2026-01-22 16:02:10 +02:00
Paul Chote
dd14d72ed3 Update TD map African Gambit. 2026-01-22 15:59:24 +02:00
Paul Chote
6743904372 Fix custom map loading from relative Engine.SupportDir paths. 2026-01-19 17:38:56 +02:00
michaeldgg2
a20ab8a33a PerfDebugLogic: show world tick in addition to local tick 2026-01-19 16:31:15 +02:00
Paul Chote
85e16032c2 Add Server.EnableMapGeneration setting. 2026-01-19 15:56:08 +02:00
Paul Chote
924c79b0ad Persist generated map across skirmish settings. 2026-01-19 15:56:08 +02:00
Paul Chote
ed1ebd536b Remove requirement for server to explicitly generate maps. 2026-01-19 15:56:08 +02:00
xan2622
156122f9e3 Improves observer camera focus fallback when the player's (or bot's) Construction Yard is destroyed
Currently, when an observer clicks on a player's name in the stats panel, the camera centers on that player's Construction Yard. However, if the Construction Yard has been destroyed, the click does nothing.

This commit searches for the Construction Yard, then a MCV, then any remaining building.
2026-01-19 15:47:23 +02:00
Matthias Mailänder
a6c58c0f68 Check if the minelayer is destroyed. 2026-01-19 15:36:10 +02:00
Gustas
ea07cb2cb1 Rewrite PNG parsing for minimal allocations 2026-01-19 15:26:21 +02:00
Gustas
bea698b2f1 Don't parse UTF 2026-01-19 15:26:21 +02:00
Gustas
9528f19845 Move to faster ZLibStream 2026-01-19 15:26:21 +02:00
Gustas
d0ca1af555 Use OpenRA CRC32 2026-01-19 15:26:21 +02:00
xan2622
78873b8e00 Replace labels on Map Editor (copy, paste, undo, redo) buttons by glyphs
Icons are from https://github.com/twbs/icons
2026-01-19 15:14:42 +02:00
RoosterDragon
e48a77b67a Fix a desync in HierarchicalPathFinder.
In a multiplayer game with bots running, only the host client runs bot logic. This logic must not alter the world state, or the host will desync from the other clients which do not run the bot logic.

The bot logic can interact with the pathfinder. This can eventually flow into HierarchicalPathFinder.BuildGrid which calls AbstractCellForLocalCells to determine the abstract cells within the grid.
This method chooses an abstract cell closest to the middle, but there can be multiple cells tied for this. The input comes from a local path search, whose ordering depends on current cell costs.
Previously, this ordering could would influence which of the equally close cells we would choose. In this case we'd choose the first in the ordering.

On non-host clients which don't run the bot logic, they may not build the grid until a later tick. If the cell costs have changed the the local path search would still explore the same set of cells, but the ordering may be different.
With the previous behaviour, they could choose a different abstract cell from the equally close cells. This results in a diverged state where their abstract graph differs subtly from the host abstract graph.
Eventually, a unit will path search in a manner where this state divergence causes it to take a different path, which will be detected as a desync.

To fix the issue, we ensure we pick the same abstract cell no matter the ordering of the list, by inserting an arbitrary tiebreaker rule.
This means the differing ordering of the explored cells from the local path search is still possible, but the ordering no longer influences the abstract cell we choose as a result.
This keeps the state of the abstract graph in sync across the clients, and thus prevents units from making different pathfinding decisions and desyncing.
2026-01-19 15:01:15 +02:00
Matthias Mailänder
95e698f44e Deduplicate observer stats translation strings. 2026-01-19 14:47:35 +02:00
Matthias Mailänder
a542767720 Deduplicate replay translation strings. 2026-01-19 14:47:35 +02:00
Paul Chote
c3f902ebcf Fix sequence lint checks for map-defined actors. 2026-01-19 14:32:30 +02:00
Paul Chote
34e1e05dd8 Revise several TD encyclopedia images. 2026-01-13 11:56:16 +02:00
Ashley Newson
df20709158 Rename "Experimental" map generator to "Classic"
Renames the "Experimental" map generator to "Classic" in internal
code, configuration, and user-facing text.

Additionally, replace the user-facing names for the Experimental and
D2K map generators (as seen in the map editor tools dropdown) with
"Map Generator".
2026-01-12 22:23:50 +02:00
Ashley Newson
2cf2d7eed7 Place map generator spawns more intuitively
The map generators previously placed spawns in an order that was
somewhat arbitrary and unintuitive to users.

This change provides and makes use of a Terraformer utility to reorder
spawns, based on their location, so that they typically make more
sense to users selecting spawns from a lobby.

Added to ExperimentalMapGenerator (RA, CnC), and D2kMapGenerator.

Note that as this changes the output of the map generator for a given
selection of settings. (Replays using generated maps from older
versions will lose compatibility and no longer load.)
2026-01-12 16:22:36 +02:00
Gustas
1300ecc18f Fix TS copy paste 2026-01-04 12:58:59 +00:00
Gustas
dcd4c41d81 Transition blits to CellCoordsRegion 2026-01-04 12:58:59 +00:00
Dominic Renaud
032f20b622 Fix selection cursor behaviour
Fix erroneous minimap selection cursor when not in classic mode

Fix selection cursor not showing up with units selected when not in classic mouse style
2026-01-04 12:35:35 +00:00
Dominic Renaud
4c2f52a465 Fix playing sounds when not adding new units to selection 2026-01-04 12:35:35 +00:00
Dominic Renaud
f8eefe310c Add input style to match other, non-C&C, RTS games
Uses left-click for targeted orders (attack move, guard, selecting movement types from the command bar, etc.) and right-click for contextual ones. Works like basically all non-C&C games

Removed GameSettings.UseClassicMouseStyle, as it is replaced by MouseControlStyle


Changed Minelayer and Chronotank teleport to UnitOrderGenerator

Fixes bug with Modern controls issuing a move order cancelling a mine field order

Better organizes all unit orders into a single order generator base class, rather than having their logic spread across multiple base classes, which required some hacks to get the control logic to match
2026-01-04 12:35:35 +00:00
RoosterDragon
c47ebfbb52 Fix tileset templates to appear in the map editor in their order in YAML.
Fixes regression from 649e7e8c28. When the Templates was changed from a Dictionary to a FrozenDictionary, this caused the items to be reordered. Some code was relying on the previous behaviour where the Dictionary ordering would happen to remain the same as the YAML input.

Fix this by creating a TemplatesInDefinitionOrder which can be used to iterate in the same ordering as given in YAML. Code that depends on the ordering can use this, and other code that does lookups can use the FrozenDictionary.
2026-01-04 12:13:34 +00:00
Matthias Mailänder
2c0a4f5873 Extract briefings for localisation. 2026-01-03 11:31:48 +02:00
Matthias Mailänder
81147bc3f3 Externalize briefing strings. 2026-01-03 11:31:48 +02:00