Peter Nelson
64782cf005
Fix #10627 : Houses subsitute specs should only be copied on first definition.
...
Before #10627 , substitue specs were always copied despite redefinition.
1 year ago
PeterN
7535eb65e2
Codechange: Use vector instead of mallloc/free for Action 6 data. ( #10713 )
1 year ago
Rubidium
f74e26ca7e
Codechange: replace error/usererror printf variant with fmt variant and rename
1 year ago
Patric Stout
31ad990831
Codechange: move tick-counter into TimerGameTick ( #10712 )
1 year ago
Patric Stout
7aa2b9ab0a
Codechange: move all date-related variables inside the timer ( #10706 )
1 year ago
Rubidium
7b539fa7c9
Fix: fmt's {:#04X} yields '0X00', not '0x0000'
...
Technically the 0X vs 0x is not a big problem, just not pretty. However, the
length also including the 0x results in unexpected behaviour, so it probably
better to not use it.
1 year ago
PeterN
27b4b5d0a0
Codechange: Make GRF temporary engine data a vector. ( #10685 )
...
This replaces manual C-style realloc/memset/free.
1 year ago
Rubidium
7088f5b7c7
Codechange: use string/fmt instead of printf for grfmsg
1 year ago
PeterN
d949cfab24
Codechange: Use std:: features for NewGRF town names ( #10631 )
...
This removes manual memory (de-)allocation and list counting.
1 year ago
Peter Nelson
7b0797d1cd
Codechange: Use unique ptrs for NewGRF specs.
1 year ago
Peter Nelson
ef6b307465
Change: Use std::vector for NewGRF spec tables.
...
Pointer space is allocated only for the number of IDs used, instead of
the max number of IDs for each feature.
1 year ago
Peter Nelson
15e6fc4eeb
Codechange: Use iterator when mapping sprite groups.
1 year ago
Charles Pigott
b282664242
Codechange: Replace all usages of alloca/AllocaM with more modern/less discouraged alternatives
1 year ago
PeterN
246ba6f00a
Fix 8361cf5a73: Missing bounds check for house specs. ( #10625 )
1 year ago
Peter Nelson
08977828cc
Fix: Check ID for name is within bounds.
1 year ago
Peter Nelson
cd6c04a663
Fix: Check station ID is within bounds when copying layouts.
1 year ago
Peter Nelson
8361cf5a73
Fix: Check sprite group mapping ID is within bounds of feature.
1 year ago
Peter Nelson
96f4eb3681
Codechange: Check NewGRF feature is defined before processing any sprite group mapping.
...
Previously this was checked after loading ids, or repeatedly checked for
each item.
1 year ago
Peter Nelson
04215afe3f
Codechange: Replace roadstop spec limit magic number with constant.
1 year ago
Peter Nelson
93197f58b7
Codechange: Bind objectspecs to classes once all finalised.
1 year ago
Joan Josep
d80f193e74
Fix: Improve grfmessage for ShipVehicleChangeInfo. ( #10558 )
1 year ago
Jonathan G Rennison
5d0ad5625b
Fix : [NewGRF] Object and road stop ignore property handlers ( #10525 )
...
* Fix: IgnoreObjectProperty did not handle object property 0x18
* Fix: IgnoreRoadStopProperty did not handle properties 0x0E - 0x12, 0x15
1 year ago
Jonathan G Rennison
4c1406a4b5
Add: NewGRF road stops
1 year ago
Michael Lutz
2d73076056
Add: [NewGRF] Second vehicle property for additional callback flags.
1 year ago
Michael Lutz
f5394ed2ef
Change: [NewGRF] Extend the D8xx (DCxx) string area up to FFFF.
...
This adds the Exxx and Fxxx blocks to the usable range for NewGRF
local strings. TTDPatch uses these ranges for internal strings, but as
we don't support any of them anyway, it is "free" real estate for us.
1 year ago
rubidium42
6ba55e663e
Codechange: do not hide variables with other variables
1 year ago
Rubidium
fe2bcd2a58
Codechange: migrate size related functions to Map structure
1 year ago
Francis Herne
01be423237
Fix #10362 : NewGRF bridges without speed limits.
...
For bridges, a max speed of 0xFFFF (i.e. no effective limit)
is no longer displayed as a limit in the UI.
A max speed of 0 is also considered unlimited, for similarity to the
roadtype and railtype interface.
1 year ago
PeterN
2355882ec1
Codechange: Remove object `enabled` flag and shuffle members. ( #10358 )
...
`enabled` flag is replaced with IsEnabled() which checks if views is
non-zero.
ObjectSpec is shuffled to reduce its memory footprint.
1 year ago
PeterN
6a0d1c7c19
Fix: Link variants to parents when finalising engines. ( #10346 )
...
This ensures that definition-order of engines within the NewGRF does not matter.
1 year ago
PeterN
1b1aa682a6
Fix: Don't assume engclass 2 should be elrail. ( #10315 )
...
When disabling/enabling elrail, there is an assumption that `engclass` of 2
means the engine will run on elrail. While this holds for default engines,
NewGRFs can do other things.
To resolve this we store the intended railtype so that toggling elrail will
restore to the correct type.
2 years ago
Francis Herne
6caed5f15e
Add: Slope-aware and roadtype-specific one-way sprites. ( #10282 )
2 years ago
PeterN
4f26f6b8aa
Cleanup: Simplify GRFLabel linked-list with std::vector. ( #10284 )
2 years ago
Peter Nelson
3485709f53
Add: Additional vehicle flags to control variants.
2 years ago
Peter Nelson
85814b29d4
Feature: Vehicle add-ons can now group engines in purchase list.
...
Grouped engines are collapsed by default but can be expanded. This allows
similar engines to be grouped together to avoid cluttering the list.
Suggested uses for this are e.g.:
* Liveries; same stats but different paint job.
* Re-gearing; engine design is mostly the same but different stats.
... but avoiding complex hidden cargo subtype refit systems.
Grouped engines are otherwise separate, so can be independently
autoreplaced, even between variants.
2 years ago
peter1138
d7f561a400
Change: Add variant property to engines.
2 years ago
PeterN
7b5edba76c
Change: Support flipping shorter engines without NewGRF support. ( #10262 )
...
* Change: Support flipping shorter engines without NewGRF support.
* Cleanup: Remove write-only prop27_set temporary flag.
2 years ago
PeterN
f24286a1ae
Fix: Ensure 31-bit shifts are unsigned. ( #10128 )
...
Shifting a signed 32-bit integer by 31 bits is undefined behaviour.
A few more than necessary are switched to unsigned for consistentency.
2 years ago
Michael Lutz
bd357656ba
Codechange: [NewGRF] Replace magic number for default object size by a constant.
2 years ago
frosch
f4e2a462fe
Cleanup: Remove unused flag sprites.
2 years ago
dP
548f0496a9
Change: Make _tick_counter 64bit to avoid wrapping ( #10035 )
2 years ago
frosch
e2c46fda3f
Fix: [NewGRF] Ensure that stations always have an even number of sprite layouts.
...
The drawing code has a special fallbacks for zero layouts, but fails hard for one layout.
(odd numbers >= 3 are weird, but do not fail as badly as 1)
2 years ago
Jonathan G Rennison
4acccc232a
Fix #9925 : Industry tile layout validation for layouts of only one tile
2 years ago
Niels Martin Hansen
5587e439a9
Fix: Industry layouts with zero regular tiles should be invalid
2 years ago
Michael Lutz
08a5478a93
Add: [NewGRF] Map seed as global variable.
...
This is useful to provide a feature-agnostic, stable random value that differs between games.
One of the possible uses is to e.g. use it to create pseudo-random regions for towns or industries.
2 years ago
Jonathan G Rennison
fc58ed9987
Codechange: Remove CargoSpec::multipliertowngrowth which is unused ( #9701 )
...
This is set by cargo property 19.
This property is only implemented in TTDPatch.
3 years ago
Michael Lutz
95c8467670
Fix 65cbde4b: Writing to uninitialized string when loading a currency NewGRF.
3 years ago
PeterN
7e70ead396
Fix #9562 : Handle case of invalid action2 with zero results. ( #9564 )
3 years ago
Charles Pigott
16dca0d7bc
Codechange: Object non-zero dimension check was not logically correct
3 years ago
Vít Šefl
2183fd4dab
Feature: [NewGRF] Maximum curve speed modifier for rail vehicles ( #9346 )
3 years ago
Rubidium
178ea3196b
Remove: includes to network/core/config.h from headers when only three cpp files need it
3 years ago
Patric Stout
6f0c6fb2ae
Fix a4987233: NewGRFs could no longer be loaded from the NewGRF folder.
...
This statement was removed by accident, as it felt it could be removed.
But it is used to know if the NewGRF is from the baseset folder or
from the NewGRF folder.
3 years ago
rubidium42
a498723345
Remove: arbitrary limit on number of statically loaded NewGRFs ( #9431 )
3 years ago
glx22
a543a4b7bb
Codechange: Remove FOR_EACH_SET_CARGO_ID
3 years ago
glx22
89ab8b79a5
Codechange: Remove FOR_EACH_SET_BIT
3 years ago
rubidium42
55a11710a6
Codechange: convert printf DEBUG statements to fmt Debug statements
3 years ago
Peter Nelson
40cec34836
Change: Skip creating a RealSpriteGroup when there is only one result.
...
This avoids checking RSG for empty sets every time they are evaluated.
This might alter behaviour in cases of a malformed NewGRF file.
3 years ago
Patric Stout
ca9a7df752
Codechange: rename str_validate to StrMakeValid(InPlace) ( #9304 )
...
This to be more explicit the function changes the value, and not
returns yes/no.
3 years ago
rubidium42
ae85af98eb
Codechange: Use std::string GetString where convenient
3 years ago
rubidium42
44ca7d9377
Change: Use gender-neutral pronouns
3 years ago
Rubidium
e6f0d63e25
Codechange: comparison result is always the same due to earlier check
...
Practically the length of the handlers not being equal to the number of
features is the problem as it means something was forgotten when adding
a new feature, so static assert to that and let the existing check on
the feature number take care of invalid data from the NewGRFs.
3 years ago
frosch
1da0ba95b2
Feature: Define refittability of default vehicles using cargo classes.
...
This ensures that default vehicles can transport any NewGRF defined cargos, albeit with weird graphics and vehicle names.
This also changes the refittability of default vehicles with default industries.
3 years ago
frosch
9f8d0b1bee
Fix: Resolve cargo-types of default vehicles via their cargo label.
...
Default vehicles now behave as if they had a cargo translation table. This fixes default vehicles carrying seemingly random cargos, if NewGRF industry sets are present.
This behavior is disabled, when a NewGRF touches any of the cargo-type or refitting properties. In that case it's up to the NewGRF to define its own cargo translation table.
3 years ago
rubidium42
65cbde4b30
Codechange: move currency settings to std::string
3 years ago
Rubidium
296194ad36
Fix: memory leak due to assigning result of strdup to a std::string
3 years ago
Rubidium
10e35ca8e4
Codechange: let NewGRF make use of SpriteFile instead of most of the FIO slot functions
3 years ago
Rubidium
fdc11a9f94
Codechange: introduce SpriteFile to be used by the sprite loader instead of the global FIO slot functionality
3 years ago
Rubidium
c097bc9d7d
Codechange: let NewGRF sounds make use of RandomAccessFile instead of the FIO slot functions
3 years ago
Peter Nelson
756034fa27
Codechange: Validate custom station platform layout tiles are permitted values only.
3 years ago
Peter Nelson
a3e49178d1
Codechange: Use std::vector for NewGRF station tile sprite layouts.
3 years ago
Peter Nelson
bd1a20f6ee
Codechange: Use std::vector for NewGRF station platform layouts.
...
This avoids the need to custom memory management and additional members.
This also resolves use-after-free if modifying copied layouts, so presumably nobody has ever done that.
3 years ago
Peter Nelson
18fb1c3866
Codechange: Warn if randomaction2 group count is not a power of 2.
...
Previously noted by a comment, this does not need to be guarded against as non-powers of 2 will not cause issues beyond the choice of results being reduced.
3 years ago
Peter Nelson
913d8a7f28
Cleanup: Use std::vector in RandomSpriteGroup.
3 years ago
Peter Nelson
1aeaf39954
Cleanup: Use std::vector in DeterministicSpriteGroup.
3 years ago
Peter Nelson
f785a70a2b
Cleanup: Use std::vector in RealSpriteGroup.
3 years ago
glx22
9a8756d7ed
Codechange: Replace FOR_ALL_CARGOSPECS with range-based for loops
3 years ago
Jonathan G Rennison
83ac5aa27a
Fix: Memory leak of airport tile layout in AirportChangeInfo (prop 0A) ( #8928 )
3 years ago
Patric Stout
1a1049bc0d
Change: rename setting "max_heightlevel" to "map_height_limit"
...
This better reflects what it is, and hopefully removes a bit of
the confusion people are having what this setting actually does.
Additionally, update the text on the setting to better inform
users what it is doing exactly, so they can make an educated
decision on how to change it.
Next commit will introduce an "auto" value, which should be the
new default. The rename has as added benefit that everyone will
start out on the "auto" value.
3 years ago
Charles Pigott
8157af6d68
Fix #8276 : Crash when a NewGRF object's size was not set
3 years ago
Charles Pigott
9b800a96ed
Codechange: Remove min/max functions in favour of STL variants ( #8502 )
4 years ago
Charles Pigott
860c270c73
Codechange: Replace assert_compile macro with static_assert
4 years ago
Michael Lutz
1478fa93b3
Add: [NewGRF] Patch flag to test if inflation is on or off.
4 years ago
frosch
d5f05fb781
Fix: [NewGRF] Action 7/9 conditions 0x0F to 0x12 failed, if 'param' was 0x88. ( #8382 )
...
Fix: [NewGRF] Action 7/9 conditions 0x0B to 0x12 failed, if 'param' was 0x85.
These conditions are supposed to ignore 'param' entirely.
4 years ago
Michael Lutz
79240eab1e
Codechange: Make use of the improved C++17 emplace_back function.
4 years ago
Yexo
1507902d00
Codechange: remove has_newindustries global
4 years ago
Yexo
a82572d0f5
Codechange: remove has_newhouses global
4 years ago
Yexo
f827bc8c1a
Fix #8166 : don't crash on loading an invalid roadtype newgrf
...
Initialization code for GRFFile::roadtype_map was copied from
railtype_map. But while RailType is a byte-sized enum and could thus
be initialized via memset, RoadType doesn't have a defined size.
4 years ago
Michael Lutz
9c2e47d03c
Codechange: Use std::string for storing GRF error messages.
4 years ago
Michael Lutz
c082f570ce
Codechange: Use std::string when translating TTDP NewGRF string codes.
4 years ago
Michael Lutz
43cd892e0c
Codechange: Replace custom linked list for GRF texts with STL vectors and strings.
4 years ago
Michael Lutz
f2b40f40aa
Codechange: Replace SmallPair with std::pair.
...
std::pair is already the smallest possible pair, and it already handles non-POD types correctly.
4 years ago
Niels Martin Hansen
c8779fb311
Feature: NewGRF callback profiling ( #7868 )
...
Adds a console command newgrf_profile to collect some profiling data about NewGRF action 2 callbacks and produce a CSV file.
5 years ago
frosch
7f351fd7c1
Fix: Action7/9 conditions 0F..12 reported roadtypes as valid tramtypes and vice versa.
5 years ago
frosch
e5dd19b0de
Cleanup: Properties 12 and 15 do not exist for road/tramtypes.
5 years ago
glx
1f6b3a37f9
Codechange: Replace FOR_ALL_ENGINES with range-based for loops
5 years ago
glx22
d865916a07
Fix #7836 : Check coherency of NewGRF parameter min/max ( #7840 )
5 years ago
S. D. Cloudt
13cc8a0cee
Cleanup: Removed SVN headers
5 years ago
Niels Martin Hansen
53f8d0b815
Codechange: Use std::vector for industry tile layouts
5 years ago
JMcKiern
04f659e768
Fix: Some typos found using codespell
5 years ago
peter1138
c02ef3e456
Feature: Add NotRoadTypes (NRT)
5 years ago