Commit Graph

42 Commits

Author SHA1 Message Date
Ashley Newson
c3b22c9102 Remove Inner types from various MultiBrush segments
Inner types in MultiBrush segment definitions can usually be derived
automatically from the start and end types. This is especially
important for segments with different starts and ends, where the Inner
type could be either one (e.g. beach to watercliff changers). Inner
types are now only needed in two cases:

- The Inner type doesn't match either the start or end. For example,
  road diagonals.
- The Inner type should only match one of the start or the end. For
  example, cliffs which end into clear tiles.

This commit cleans up the unneeded or unwanted Inner type definitions
in the base mods.
2025-08-22 19:20:22 +03:00
Ashley Newson
2a0e787ae7 Check for and fix non-unit MultiBrush segment steps
TilingPath's algorithms are designed on the assumption that MultiBrush
segments use unit steps in their point sequences. Non-unit
sequences can result in incorrect or suboptimal tilings.

This change ensures point sequences are validated for unit steps, and
fixes a non-compliant cliff tile across all tilesets.
2025-05-30 15:22:53 +03:00
Ashley Newson
daf36769d6 Add additional MultiBrush segments for RA and CnC
Adds MultiBrush definitions for River (RA and CnC) and WaterCliff (RA
only), allowing them to be tiled with the Path Tiling tool.

A small enhancement to the MultiBrush and TilingPathTool code is added
to allow the inner type to be derived from start and end types. This
allows segments that interface between types (such as WaterCliff to
Beach) to be usable when tiling either WaterCliffs or Beach. Whilst
this makes the inner types of many of the existing MultiBrushes
redundant, no simplification is performed as part of this change.
2025-05-19 22:01:25 +03:00
Ashley Newson
ad08045e5f Add path auto-tiling tool to map editor
Exposes the TilingPath code used by the map generator as a map editor
tool to help automate the process of tiling sequences of templates
together.

No additional template stitching definitions are added as part of this
commit. As such, the tool currently only supports the same auto tiling
as the map generator does. This includes:

- RA and CnC support.
- Beaches, land cliffs, and roads.

Support for additional mods and templates can be added in follow-ups
by adding the necessary MultiBrush definitions.

Related changes included in this commit to support this work include:

- Add support for sparse EditorBlits.
- Add support for MultiBrush to EditorBlitSource conversion.
- Add support for EditorBlitSource previewing.
- Adjust the "Road" types used in segmented MultiBrush definitions.
2025-05-15 22:41:43 +03:00
Paul Chote
90013bc6d3 Migrate tileset names to Fluent. 2025-04-28 15:41:54 +03:00
Ashley Newson
a2096b6768 Use MultiBrush as the input and output of TilingPath
This generalizes TilingPath to accept MultiBrushes instead of templates
and makes the output also a MultiBrush. As a result:

- Composite or faked templates can be used in tiling. This will (in a
  later change) be used to support CnC beaches outside of the desert
  tileset.
- The tiling result can be previewed without committing it onto the map,
  making it more viable for adoption as an editor tool.
- The full shape of the tiling result can be inspected without messily
  reading it back off of the map, simplifying some map generator logic.
- Separates map generation-specific segment definitions from the core
  template definitions.
- As MultiBrushes can be many-to-one with templates, there is no need to
  have a one-to-many template-segment relationship. Multi-segment
  templates, such as roads, now use multiple brushes instead. This
  simplifies the logic of segment consumers.

Previously, MultiBrushes which contained no offset information in their
definitions were automatically aligned such that the first tile was
under 0,0. This is no longer the case. This was previously done for use
in MultiBrush.PaintArea to improve tile packing success, but the
alignment is now handled automatically by PaintArea instead.

Due to some impure refactoring which changes the randomization of
tiling choices, map generation results may change.
2025-04-18 18:19:11 +03:00
Ashley Newson
98fe3c98ab Refine civilian building placement and multibrushes 2025-02-11 12:57:04 +02:00
Ashley Newson
cc632660eb Add decorative civilian buildings to random maps
Allows the random map generator to optionally place civilian buildings
around the map for extra decoration. Buildings are placed last with
lowest priority to avoid competing for play area and resources.

Depends on #21738
2025-02-11 12:57:04 +02:00
Ashley Newson
037326024b Remove floating points from map generation
Removes all use of floating point from the RaMapGenerator map generator
and its dependencies.

Floating point behavior is potentially non-portable across client
hardware. Removing them should make the map generation logic
consistent even across clients with different floating point hardware
or compiler behavior. This may be useful for sync-safe multiplayer map
generation where clients independently generate the map from settings.

Most previously fractional public-facing settings are now represented
as numbers out of 1000, with some exceptions using 1000000. Most
internal logic which relies on fixed-point concepts now uses 1024ths,
though some floating point mechanisms have been replaced with
alternative discrete approximations (e.g. gaussian to binomial).
2025-01-27 20:42:38 +02:00
Ashley Newson
417f787294 Add experimental RA procedural map generator
Add an experimental procedural map generator for the Red Alert mod,
along with supporting code that may assist in the development of map
generators for other mods.

Map generation may be accessed as a tool in the Map Editor. This change
does not presently introduce direct lobby options for generated maps.

Features:

- Terrain with land, water, beaches, cliffs, roads, debris, and trees.
- Placement of mpspawns, neutral buildings, and resources.
- Rotational and mirror symmetry options.
- Various configurable parameters with presets.
- Deterministic with configurable seed.
- Performant.
2025-01-09 16:47:10 +02:00
Matthias Mailänder
6056568182 Remove unused terrain type. 2020-03-24 19:48:54 +01:00
Paul Chote
4f0aa89c01 Remove TileSet.Palette and PaletteFromCurrentTileset. 2018-04-08 21:14:29 +02:00
reaperrr
9107ca3bc1 Remove unused legacy IsWater flag
This was planned anyway, we had just forgotten about it when the last blocker was removed.
2018-02-22 11:51:10 +01:00
Matthias Mailänder
3af0b1a7a0 Remove PlayerPaletteFromCurrentTileset. 2017-09-17 16:20:38 +02:00
Matthias Mailänder
c63620e979 Remove trailing spaces. 2017-09-02 15:10:35 +02:00
abc013
c4d2fdbd83 Fix ground units can stay on water (tile 409) 2017-08-08 12:32:43 +02:00
GSonderling
7a2d2cfd5f Reorganised desert beach templates.
Deleted spurious tabs and spaces

As requested by @reaperrr

Removed more spaces.

One last space deleted.
2017-07-18 00:02:24 +02:00
reaperrr
9a7778e55d Fix black tile on template 438 of RA desert tileset 2017-07-12 15:57:19 +02:00
rob-v
03cfd5b880 RA - Rename Template.Category to Template.Categories 2017-07-05 22:46:59 +02:00
Mustafa Alperen Seki
ab6b7c8551 Add Nooze's 1 Tile Cliffs to RA 2017-03-13 17:19:46 +02:00
Oliver Brakmann
085e599f5d Fix tile templates 79 and 80 being swapped in RA's desert tileset 2016-08-20 13:27:08 +02:00
Paul Chote
68e176c531 Load C&C desert assets from content dir. 2016-07-30 09:49:28 +01:00
Hanzik
52c8d165f8 Changed grid to darker red 2016-03-15 22:40:55 +01:00
Paul Chote
dd963b75f5 Per-terrain color validation. 2016-01-27 21:43:55 +00:00
Paul Chote
4f1d8b7ac9 Remove spurious final newline from mod files. 2016-01-02 20:06:53 +00:00
atlimit8
949994f10b Convert MiniYaml colors to hex 2015-10-27 16:10:33 -05:00
reaperrr
ca055eb7bb Refactored WaterPaletteRotation
Moved RotationBase from tileset definition to WaterPaletteRotation effect.
Unhardcoded rotation range and rotation rate.
Added possibility to exclude Tilesets from effect.

Fixed RA water palette rotation for actors on desert maps (#8872).
2015-09-06 19:25:10 +02:00
Paul Chote
84e85d8a5d Rename Image -> Images. 2015-03-30 20:20:36 +01:00
Paul Chote
b2458fc614 Remove GlobalFilesystem.OpenWithExts. Closes #5272. 2015-03-28 12:38:48 +00:00
Paul Chote
08aa1e86a9 Disable legacy sequence parsing in RA. 2015-03-27 17:35:15 +00:00
Paul Chote
6e1307d08d Fix RA tilesets. 2015-03-23 20:32:28 +00:00
Matthias Mailänder
3cc8c31d36 remove tile templates for non-existing sprites 2014-05-25 21:36:41 +02:00
Matthias Mailänder
3de1516747 allow invalid terrain targets for Air/Water bound weapons
made terrain targeting consistent with actors
2014-01-04 09:57:09 +01:00
Matthias Mailänder
e3a2addca0 new Bridge terrain type with grey minimap color 2014-01-04 09:39:43 +01:00
Matthias Mailänder
c6d9574d52 automatically fix open areas
and don't hard-code the tiles no more
2014-01-03 16:46:38 +01:00
Matthias Mailänder
8358597fd2 render crystals in a different color on the mini-map 2013-03-01 21:06:09 +01:00
Curtis Shmyr
ac301b22e2 Editor - Template categories are now ordered by whats specified in the tileset yaml 2013-01-08 20:11:22 +13:00
Curtis Shmyr
5f2aa810b1 Add terrain category types to RA desert tileset 2013-01-08 20:11:22 +13:00
Curtis Shmyr
189a6c337e Fix Water Cliff terrain types in temperate / desert tilesets 2013-01-08 20:11:22 +13:00
Curtis Shmyr
4dacd3be26 Fix up shoreline pieces to have beach terrain types (for water transport use) 2012-11-20 21:21:31 -07:00
Matthias Mailänder
5ecc6224b0 add bridges to DESERT 2012-11-17 13:15:16 +01:00
Matthias Mailänder
f3dc31be40 add PlayerPaletteFromCurrentTileset and desert tileset for RA
some things left to do:
ore, walls and silo/hbox need some work
2012-11-17 13:15:06 +01:00