15#include "table/strings.h"
38 STR_NEWGRF_ERROR_VERSION_NUMBER,
39 STR_NEWGRF_ERROR_DOS_OR_WINDOWS,
40 STR_NEWGRF_ERROR_UNSET_SWITCH,
41 STR_NEWGRF_ERROR_INVALID_PARAMETER,
42 STR_NEWGRF_ERROR_LOAD_BEFORE,
43 STR_NEWGRF_ERROR_LOAD_AFTER,
44 STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER,
48 STR_NEWGRF_ERROR_MSG_INFO,
49 STR_NEWGRF_ERROR_MSG_WARNING,
50 STR_NEWGRF_ERROR_MSG_ERROR,
51 STR_NEWGRF_ERROR_MSG_FATAL
59 if (!CheckGrfLangID(lang, _cur_gps.grffile->grf_version))
return;
63 if (!
HasBit(severity, 7) && _cur_gps.stage == GLS_INIT) {
64 GrfMsg(7,
"GRFLoadError: Skipping non-fatal GRFLoadError in stage {}", _cur_gps.stage);
70 GrfMsg(7,
"GRFLoadError: Invalid severity id {}. Setting to 2 (non-fatal error).", severity);
72 }
else if (severity == 3) {
78 if (message_id >=
lengthof(msgstr) && message_id != 0xFF) {
79 GrfMsg(7,
"GRFLoadError: Invalid message id.");
83 if (buf.Remaining() <= 1) {
84 GrfMsg(7,
"GRFLoadError: No message data supplied.");
89 auto it = std::ranges::find(_cur_gps.grfconfig->errors, _cur_gps.nfo_line, &
GRFError::nfo_line);
90 if (it == std::end(_cur_gps.grfconfig->errors)) {
91 it = _cur_gps.grfconfig->errors.emplace(it, sevstr[severity], _cur_gps.nfo_line);
96 if (message_id == 0xFF) {
103 GrfMsg(7,
"GRFLoadError: No custom message supplied.");
107 error.
message = msgstr[message_id];
115 GrfMsg(7,
"GRFLoadError: No message data supplied.");
120 for (uint i = 0; i < error.
param_value.size() && buf.HasData(); i++) {
122 error.
param_value[i] = _cur_gps.grffile->GetParam(param_number);
126template <>
void GrfActionHandler<0x0B>::FileScan(
ByteReader &) { }
127template <>
void GrfActionHandler<0x0B>::SafetyScan(
ByteReader &) { }
128template <>
void GrfActionHandler<0x0B>::LabelScan(
ByteReader &) { }
129template <>
void GrfActionHandler<0x0B>::Init(
ByteReader &buf) { GRFLoadError(buf); }
130template <>
void GrfActionHandler<0x0B>::Reserve(
ByteReader &buf) { GRFLoadError(buf); }
131template <>
void GrfActionHandler<0x0B>::Activation(
ByteReader &buf) { GRFLoadError(buf); }
constexpr bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
constexpr T ClrBit(T &x, const uint8_t y)
Clears a bit in a variable.
Class to read from a NewGRF file.
std::string_view ReadString()
Read a NUL-terminated string.
uint8_t ReadByte()
Read a single byte (8 bits).
Functions related to debugging.
GRFError * DisableGrf(StringID message, GRFConfig *config)
Disable a GRF.
NewGRF buffer reader definition.
NewGRF internal processing state.
std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool allow_newlines, std::string_view str, StringControlCode byte80)
Translate TTDPatch string codes into something OpenTTD can handle (better).
A number of safeguards to prevent using unsafe methods.
Definition of base types and functions in a cross-platform compatible way.
#define lengthof(array)
Return the length of an fixed size array.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Information about why GRF had problems during initialisation.
std::array< uint32_t, 2 > param_value
Values of GRF parameters to show for message and custom_message.
uint32_t nfo_line
Line within NewGRF of error.
StringID message
Default message.
std::string custom_message
Custom message (if present).
std::string data
Additional data for message and custom_message.