Commit Graph

738 Commits (ae27ce12a755fb9685d96a237f5ef636e8318b69)

Author SHA1 Message Date
Peter Nelson 726d05b22b Fix: Don't list unavailable road types for game scripts. 1 year ago
Peter Nelson e6740046ee Codechange: Use range-for iteration. 1 year ago
Rubidium 12085d088c Cleanup: remove obsolete string_compare_type 1 year ago
Rubidium bc389a86c9 Codechange: use std::string as std::map key, instead of stredup string 1 year ago
Peter Nelson bf9caa425b Change: Units-system can convert from N to kN, don't preconvert.
This allows force to passed as is and avoid premature rounding.

The AI function "GetMaxTractiveEffort" still needs to return kN to avoid breaking the API.
1 year ago
Rubidium 68ff3fd062 Change: include fmt.h C++ headers in stdafx.h
This to prevent compilation issues between runs with and without precompiled
headers. Also remove the headers from the rest of the code base as they are
not needed there anymore, although they do relatively little harm.
1 year ago
Rubidium fb856e16c1 Codechange: replace some min/clamp constructs to ClampTo 1 year ago
PeterN b67cf7f94a
Change: Replace ScriptLog data array with std::deque. (#10770)
Due to cyclic header dependency this requires moving the data types used
by ScriptLog out of the ScriptLog class.
1 year ago
Tyler Trahan 6501f84b4a
Codechange: Move calendar date functions inside TimerGameCalendar (#10753) 1 year ago
Tyler Trahan 930f0a16d8 Codechange: Define Date/Year/Month/Day within TimerGameCalendar class 1 year ago
Patric Stout 7aa2b9ab0a
Codechange: move all date-related variables inside the timer (#10706) 1 year ago
Rubidium 8f24901843 Codechange: replace printf with PRINTF macros by fmt::format for scripts 1 year ago
SamuXarick f8b5661d28 Change: Allow GS access to ScriptGroup functions 1 year ago
SamuXarick f225f36c3d Change: Allow GS access to ScriptGameSettings.IsDisabledVehicleType 1 year ago
SamuXarick fd26a44c9e Change: Allow GS access to more ScriptCompany functions 1 year ago
Andy 8b1960a41c Change: Allow GS access to more ScriptOrder functions 1 year ago
PeterN e97bf271dc
Codechange: Make SpriteType, CargoSortType, SourceType and ScriptType enum classes. (#10663)
This avoids a (soft) namespace conflict between the four ST_* enums.
1 year ago
Charles Pigott 6fc28d649e Cleanup: Unused alloca definitions and includes 1 year ago
dP e2f1cd44dc
Change: Increase max cargo age and let min cargo payment approach zero. (#10596)
Co-authored-by: Michael Lutz <michi@icosahedron.de>
2 years ago
glx22 3a48d6e60f Fix 991a797: [Script] Allow STRINGN consumption to be different than expected 2 years ago
Peter Nelson 82c70ed3b8 Change: Expose ObjectSpec vector to simplify iteration. 2 years ago
Peter Nelson 1f46f080f0 Codechange: Store objectspecs in std::vector instead of flat array. 2 years ago
Rubidium 1e4a89177e Fix: crashes to desktop from game scripts when companies disappear
When a game script is in company mode, it pretends to be another company. When
that company disappear (bankruptcy/merger), the game script still uses that
company and it keeps calling functions as if it is that company.

For example, ScriptEngine::IsBuildable internally dereferences Company without
checks, causing a null dereference for any ScriptEngine function when called
from a company scope of a company that has disappeared.

Guard against this by extending the ScriptCompanyScope::IsValid check to also
check for the company still being active.
2 years ago
Rubidium 717f79ff22 Add: deity mode enforcement checks to functions with command or company access
Command functions are those that call ScriptObject::Command, and functions
with company access are any that call ScriptObject::GetCompany. This is a bit
over-protective, but having the check everywhere makes it easier to validate
that no check is missing automatically instead of by review.
2 years ago
Rubidium 8d443d1379 Add: company mode enforcement checks to functions with command or company access
Command functions are those that call ScriptObject::Command, and functions
with company access are any that call ScriptObject::GetCompany. This is a bit
over-protective, but having the check everywhere makes it easier to validate
that no check is missing automatically instead of by review.
2 years ago
Rubidium 534f2419ad Add: precondition checks to functions that work with both valid company and deity
These are functions that either use ScriptObject::Command or ScriptObject::GetCompany.
This is a bit over-protective, but having the check everywhere makes it easier to
validate that no check is missing automatically instead of by review.

At this moment these checks will not do anything useful, as either IsValid or
IsDeity from ScriptCompanyMode returns true, but that will change later.
2 years ago
Rubidium a79f97c022 Change: upon an invalid company mode, set ERR_PRECONDITION_INVALID_COMPANY instead of ERR_PRECONDITION_INVALID 2 years ago
Rubidium 3287acd114 Fix 13528bfcd0: bank balance command allows int64, GS was limited to int32 2 years ago
Rubidium 83946ca31d Codechange: use GSCompanyMode::IsValid, IsDeity, and the precondition helpers
Direct 1:1 replacements in the code, and comments now refer to either
GSCompanyMode::IsValid or GSCompanyMode::IsDeity instead of several variations
on "company mode active" or "no company mode active".
2 years ago
Rubidium cada2ca310 Add: GSCompanyMode::IsValid and IsDeity, and precondition enforcement helpers 2 years ago
glx22 ca149447d7 Codechange: Use SQInteger for generic numbers in script_window 2 years ago
glx22 f752d96125 Codechange: Use SQInteger for generic numbers in script_vehicle 2 years ago
glx22 4e48bf2e16 Codechange: Use SQInteger for generic numbers in script_town 2 years ago
glx22 18fe0a4046 Codechange: Use SQInteger for generic numbers in script_tilelist 2 years ago
glx22 cada18a6f8 Codechange: Use SQInteger for generic numbers in script_tile 2 years ago
glx22 07b73a8c02 Codechange: Use SQInteger for generic numbers in script_subsidy 2 years ago
glx22 cd80b31d19 Codechange: Use SQInteger for generic numbers in script_storypage 2 years ago
glx22 a9a55f2153 Codechange: Use SQInteger for generic numbers in script_station 2 years ago
glx22 446ebaa6b9 Codechange: Use SQInteger for generic numbers in script_road 2 years ago
glx22 4f6a2f31b5 Codechange: Use SQInteger for generic numbers in script_rail 2 years ago
glx22 cb2e76aae3 Codechange: Use SQInteger for generic numbers in script_priorityqueue 2 years ago
glx22 777b4d0987 Codechange: Use SQInteger for generic numbers in script_order 2 years ago
glx22 49ea69fdef Codechange: Use SQInteger for generic numbers in script_objecttype 2 years ago
glx22 0293fd41e5 Codechange: Use SQInteger for generic numbers in script_news 2 years ago
glx22 f22903ab14 Codechange: Use SQInteger for generic numbers in script_newgrf 2 years ago
glx22 ca67075397 Codechange: Use SQInteger for generic numbers in script_map 2 years ago
glx22 a225fda9fe Codechange: Use SQInteger for generic numbers in script_list 2 years ago
glx22 74ab9ee9dd Codechange: Use SQInteger for generic numbers in script_league 2 years ago
glx22 367b2ba6d1 Codechange: Use SQInteger for generic numbers in script_infrastructure 2 years ago
glx22 5eaf9d39bf Codechange: Use SQInteger for generic numbers in script_industrytype 2 years ago
glx22 6671994655 Codechange: Use SQInteger for generic numbers in script_industry 2 years ago
glx22 8eb35633ec Codechange: Use SQInteger for generic numbers in script_group 2 years ago
glx22 6ca8499e6a Codechange: Use SQInteger for generic numbers in script_goal 2 years ago
glx22 e784915b27 Codechange: Use SQInteger for generic numbers in script_gamesettings 2 years ago
glx22 6b8b4c392f Codechange: Use SQInteger for generic numbers in script_engine 2 years ago
glx22 2f40bf8097 Codechange: Use SQInteger for generic numbers in script_date 2 years ago
glx22 424ae74504 Codechange: Use SQInteger for generic numbers in script_companymode 2 years ago
glx22 89c0841d0a Codechange: Use SQInteger for generic numbers in script_company 2 years ago
glx22 7727323dbe Codechange: Use SQInteger for generic numbers in script_cargomonitor 2 years ago
glx22 40424601c6 Codechange: Use SQInteger for generic numbers in script_cargo 2 years ago
glx22 83826b1793 Codechange: Use SQInteger for generic numbers in script_bridgelist 2 years ago
glx22 58bf2f7176 Codechange: Use SQInteger for generic numbers in script_bridge 2 years ago
glx22 73561802cb Codechange: Use SQInteger for generic numbers in script_airport 2 years ago
glx22 b6f3552e4b Fix: [Script] Inconsistent precondition failure return values 2 years ago
glx22 e06a666fa2 Fix: remove ScriptController constructor from API documentation 2 years ago
glx22 67a4c5e0db Codechange: Use {fmt} for script_admin JSON generation 2 years ago
glx22 ce8cde3b8d Fix: [Script] Detect circular references in ScriptText 2 years ago
glx22 9a957f1d4b Change: [Script] Improve ScriptText validation error messages 2 years ago
glx22 991a797e09 Change: [Script] Validate ScriptText parameters type and amount 2 years ago
Rubidium 728973859d Change: [Script] Automate the ScriptObject reference counting 2 years ago
glx22 a1fc4d5c0e Codechange: [Script] Merge the 3 ScriptText param arrays 2 years ago
Rubidium 580d0a6343 Codechange: make use of Tile in for all direct map accesses 2 years ago
Jonathan G Rennison 4c1406a4b5 Add: NewGRF road stops 2 years ago
dP c73b88ddca
Fix: Don't send unused tile field over the network (#10507) 2 years ago
Michael Lutz 9b3326e3fd Codechange: [Script] Use std::vector instead of a hand-rolled alternative. 2 years ago
Michael Lutz ca3cb4d2ef Codechange: [Script] Use a class template instead of a function template for squirrel type conversion.
Class templates allow using partial template specialization, which is useful in
case one wants to have a type conversion on a type that is itself templated.
2 years ago
SamuXarick 8351b97f52 Add: [Script] Labels for negative values of a setting 2 years ago
SamuXarick 376820c0b6 Doc: [Script] Update info descriptions 2 years ago
SamuXarick 3df9321a65 Fix: Some Script::IsValidVehicle checks need to be complemented with IsPrimaryVehicle
Add: [Script] ScriptVehicle.IsPrimaryVehicle
2 years ago
glx22 3559576166 Codechange: [Script] Don't expose static buffers outside of ScriptText 2 years ago
glx22 e735370318 Change: [Script] A ScriptText with too many parameters is now a fatal error
It should never happen as adding/setting parameters already checks that anyway.
2 years ago
dP fe2c8a1240
Codechange: Decouple INDUSTRY_CTRL into separate commands (#10475) 2 years ago
SamuXarick 43ce73db86 Fix: [Script] Use Money instead of int32 for presenting the value of a company to AIs 2 years ago
Loïc Guilloux 6b99b6672e
Fix: [Script] ScriptBase::Rand() return value was between -MIN(int32) and MAX(int32) (#10443)
Also ensure the parameters for ScriptBase::RandRange() and ScriptBase::Chance() are in [0-MAX(uint32)] range
2 years ago
glx22 b080f24bd8 Codechange: move windows common to AI and GS out of ai_gui 2 years ago
SamuXarick 1f194eb94e
Fix: [Script] Incorrect value for GOAL_INVALID (#10436)
* Fix: [Script] Incorrect value for GOAL_INVALID

* Cleanup: Remove unused static variable
2 years ago
SamuXarick d0639cdc28 Fix: [Script] Incorrect subsidy SourceID value used 2 years ago
SamuXarick 4fc4874a30 Add: [Script] Let random road layout be a choice 2 years ago
SamuXarick 184ff92057
Cleanup: [Script] Pass new_rating directly to CmdTownRating (#10441) 2 years ago
Rubidium 31869501ee Fix: make script goals work with the whole range of ClientIDs 2 years ago
Rubidium 4e65ec1dc4 Codechange: do not declare functions in blocks 2 years ago
Rubidium 2fd99467ea Fix: scripts are not aware of nullptr, they only know null 2 years ago
Rubidium f9a473bef7 Fix: missing/duplicate documentation tags for scripts 2 years ago
Rubidium 3112b387e7 Fix: warnings about obsolete settings/setting values in Doxygen configurations 2 years ago
Rubidium 41fa94bc56 Fix: scripts cannot call constructors of ScriptEvents, so remove from the documentation 2 years ago
Rubidium fe2bcd2a58 Codechange: migrate size related functions to Map structure 2 years ago
Rubidium 22d3de8b67 Codechange: use ScriptMap size functions instead of global functions 2 years ago
Rubidium c5ff61c5f2 Add: script specific Randomizer instances 2 years ago
Rubidium 6abad681bd Codechange: move choice for randomizer of scripts to a single location 2 years ago
Rubidium 3373128233 Codechange: pass the randomizer directly to the town name generation 2 years ago
Rubidium b3b8c3fd2d Codechange: pass the randomizer to use directly to the company face generation 2 years ago
Rubidium 90f1768006 Codechange: add non-nullptr asserts in cases where it should never be nullptr
Though where similar calls are checked for nullptr as in those instances of
the use of that function it can actually return nullptr. In other words, write
down the assumption that the function never returns nullptr in an assert.
2 years ago
Jonathan G Rennison 10e76b2788 Fix #10032: Capacities of articulated vehicles in build window
See also: #9954
2 years ago
Tyler Trahan 5c64cdcb79
Feature: Press Ctrl to build a diagonal area of trees (#10342) 2 years ago
Rubidium 170f37d07f Codechange: silence some potentially uninitialized local variable errors
In these cases technically they are false positives, however dismissing the
alerts when the underlying code may make them true positives does not seem
like the safest solution.
2 years ago
Michael Lutz 150f05dc15
Change: Heading for 14 now. (#10302) 2 years ago
Loïc Guilloux c179c10048
Fix #10263, ccefa76: [scripts] restore tile validation for commands (#10269) 2 years ago
Michael Lutz 1c205b2cda Fix #10212: [Script] Nested ScriptAccounting scopes are not restored properly. 2 years ago
dP 5e14a20b3b
Feature: [GS] Scriptable league tables (#10001) 2 years ago
Peter Nelson f5f035a22b Codechange: Make use of Rect Width/Height helpers. 2 years ago
Joel-Milligan 59645c6733
Change: Remove scrollbar from town authority actions panel (#9928) 2 years ago
Henry Wilson 89cf0d5da8 Codechange: Factor cargotype weight conversion magic numbers 2 years ago
Loïc Guilloux 0afa6f2424
Codechange: [CMake] Auto-fill list of #include in script_window.hpp (#10103) 2 years ago
Nicolas Chappe a9a21e784d Codechange: Always set the ODATFB_NEAREST_DEPOT flag for 'any depot' orders 2 years ago
SamuXarick 8d0d45c431 Add: ScriptCargo::GetWeight to get cargo weights 2 years ago
SamuXarick 3dda8c9bad Fix: ScriptRoad::HasRoadType really check for RoadType
Script::HasRoadType was only checking if the tile had the same RoadTramType as that of the RoadType provided.
Now it really checks RoadType against RoadType.
2 years ago
Tyler Trahan db98cedb7e Fix #9883: Show cost/income float over end tile of rail or road construction 2 years ago
glx22 675cf7a8ee Fix 6fe445e: [Script] Respect joining adjacent when building an airport 2 years ago
glx22 ed1457dca3 Fix 55170ae: [Script] Building two-way signals could end up one-way 2 years ago
Loïc Guilloux 7331149dde
Codechange: [CMake] Pass API files list via a file to minimise command line length (#9874) 2 years ago
Tyler Trahan f4ca94d3f6 Codechange: Revenue is not the same as Income
Income is revenue minus costs. Let's name things correctly (without breaking the script API).
2 years ago
Niels Martin Hansen e68bf58989 Codechange: Use anonymous union for vehicle orders/old orders list 3 years ago
Andy b8a8891a86 Add: [Script] IndustryType::ResolveNewGRFID to resolve industry id from grfid and grf_local_id 3 years ago
Andy 26ac0c48f0 Add: [Script] ObjectType::ResolveNewGRFID to resolve object id from grfid and grf_local_id 3 years ago
Michael Lutz 41fa16f325 Codechange: Don't use globals for return values from vehicle command procs. 3 years ago
Michael Lutz 57b82e2e99 Codechange: Don't use globals for story/goal/sign/group command proc return values. 3 years ago
Michael Lutz 3e85e833a7 Codechange: Add support for additional command result values. 3 years ago
Michael Lutz 8503854655 Codechange: Pass unpacked command arguments to command callbacks (except Script). 3 years ago
Michael Lutz 13528bfcd0 Codechange: Un-bitstuff all remaining commands. 3 years ago
Michael Lutz 58cff7b081 Codechange: Un-bitstuff the remaining on-map commands. 3 years ago
Michael Lutz c6d7b98808 Codechange: Un-bitstuff landscape commands. 3 years ago
Michael Lutz e6e69d5289 Codechange: Un-bitstuff goal and story page commands. 3 years ago
Michael Lutz 1a42a8a5d5 Codechange: Un-bitstuff town-related commands. 3 years ago
Michael Lutz e08b3abe7f Codechange: Un-bitstuff group and autoreplace commands. 3 years ago
Michael Lutz 46bd2f1ced Codechange: Un-bitstuff remaining transport infrastructure commands. 3 years ago
Michael Lutz 55170ae703 Codechange: Un-bitstuff rail commands. 3 years ago
Michael Lutz 6fe445e6c0 Codechange: Un-bitstuff station/depot/waypoint commands. 3 years ago
Michael Lutz 21675ec7e2 Codechange: Un-bitstuff vehicle/engine commands. 3 years ago
Michael Lutz 211c630cbe Codechange: Un-bitstuff order commands. 3 years ago
Michael Lutz 4f3ea3907e Codechange: Un-bitstuff commands taking a ClientID (i.e. CMD_CLIENT_ID). 3 years ago
Michael Lutz ccefa76a46 Codechange: Template DoCommandPInternal. 3 years ago
Michael Lutz 6691ee3b96 Codechange: Template script command calls. 3 years ago
Michael Lutz eab18f06a4 Codechange: Pass additional data as byte stream to command callbacks. 3 years ago
Michael Lutz e740c24eb7 Codechange: Template DoCommand to automagically reflect the parameters of the command proc.
When finished, this will allow each command handler to take individually
different parameters, obliviating the need for bit-packing.
3 years ago
Michael Lutz b0990fcff7 Codechange: Make TileIndex a "strong" typedef to give it a distinct type.
This is accomplished by changing it to a single member struct with the
appropriate operator overloads to make it all work with not too much
source modifications.
3 years ago
Michael Lutz a38bbefe1b Codechange: Untangle command code, flags and error string for DoCommand*. 3 years ago
Michael Lutz 549caca39c Codechange: Move command arguments to the back of the networked command function calls. 3 years ago
Michael Lutz b6933a2ebd Codechange: Move command arguments to the back of the DoCommand function call. 3 years ago
Patric Stout 394c749b6b
Change: Heading for 13 now (#9573) 3 years ago
dP 39662aabef
Add: allow gamescripts to build neutral objects (#9568) 3 years ago