OpenTTD is an open source simulation game based upon Transport Tycoon Deluxe
This report summarizes scanner evidence for OpenTTD/OpenTTD, a C++ project with 8,445 GitHub stars. SynthScan examined 876,494 lines of code across 1633 source files, recording 1195 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.1 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 1191 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 8 finding(s).
Which changes need focused human review? 1195 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1195 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | os/emscripten/ports/liblzma.py | 41 | COMMENT | |
| LOW | os/emscripten/ports/liblzma.py | 61 | #define HAVE_DECODER_SPARC 1 | COMMENT |
| LOW | os/emscripten/ports/liblzma.py | 81 | #define HAVE_LIMITS_H 1 | COMMENT |
| LOW | os/emscripten/ports/liblzma.py | 101 | #define HAVE_SYS_TIME_H 1 | COMMENT |
| LOW | os/emscripten/ports/liblzma.py | 121 | #define TUKLIB_FAST_UNALIGNED_ACCESS 1 | COMMENT |
| LOW | os/macosx/notarize.sh | 1 | #!/bin/bash | COMMENT |
| LOW | src/spritecache.cpp | 1 | /* | COMMENT |
| LOW | src/misc_cmd.cpp | 1 | /* | COMMENT |
| LOW | src/depot_gui.cpp | 1 | /* | COMMENT |
| LOW | src/depot_gui.cpp | 21 | #include "strings_func.h" | COMMENT |
| LOW | src/widget.cpp | 1 | /* | COMMENT |
| LOW | src/signs_gui.cpp | 1 | /* | COMMENT |
| LOW | src/signs_gui.cpp | 21 | #include "querystring_gui.h" | COMMENT |
| LOW | src/ship_cmd.cpp | 1 | /* | COMMENT |
| LOW | src/ship_cmd.cpp | 21 | #include "newgrf_sound.h" | COMMENT |
| LOW | src/league_gui.cpp | 1 | /* | COMMENT |
| LOW | src/rail_cmd.cpp | 1 | /* | COMMENT |
| LOW | src/rail_cmd.cpp | 21 | #include "water.h" | COMMENT |
| LOW | src/terraform_cmd.cpp | 1 | /* | COMMENT |
| LOW | src/error_gui.cpp | 1 | /* | COMMENT |
| LOW | src/newgrf_roadstop.cpp | 1 | /* | COMMENT |
| LOW | src/newgrf_engine.cpp | 1 | /* | COMMENT |
| LOW | src/safeguards.h | 21 | COMMENT | |
| LOW | src/safeguards.h | 41 | COMMENT | |
| LOW | src/safeguards.h | 61 | /* Use fgets instead. */ | COMMENT |
| LOW | src/safeguards.h | 81 | #define stoull SAFEGUARD_DO_NOT_USE_THIS_METHOD | COMMENT |
| LOW | src/safeguards.h | 101 | #ifdef max | COMMENT |
| LOW | src/safeguards.h | 121 | #endif /* defined(NETWORK_CORE_OS_ABSTRACTION_H) && defined(_WIN32) */ | COMMENT |
| LOW | src/tunnelbridge_cmd.cpp | 21 | #include "pathfinder/yapf/yapf_cache.h" | COMMENT |
| LOW | src/console_cmds.cpp | 1 | /* | COMMENT |
| LOW | src/console_cmds.cpp | 21 | #include "network/network_admin.h" | COMMENT |
| LOW | src/console_cmds.cpp | 41 | #include "console_func.h" | COMMENT |
| LOW | src/stdafx.h | 21 | # define _CRT_SECURE_NO_DEPRECATE | COMMENT |
| LOW | src/stdafx.h | 41 | #endif | COMMENT |
| LOW | src/stdafx.h | 61 | #include <list> | COMMENT |
| LOW | src/stdafx.h | 81 | COMMENT | |
| LOW | src/stdafx.h | 101 | # define NOMINMAX // Disable min/max macros in windows.h. | COMMENT |
| LOW | src/stdafx.h | 121 | # endif | COMMENT |
| LOW | src/stdafx.h | 141 | # define FT_EXPORT( x ) extern "C" x CDECL | COMMENT |
| LOW | src/stdafx.h | 161 | std::wstring OTTD2FS(std::string_view name); | COMMENT |
| LOW | src/stdafx.h | 261 | #define lengthof(array) (sizeof(ArraySizeHelper(array))) | COMMENT |
| LOW | src/stdafx.h | 281 | #if defined(NDEBUG) && defined(WITH_ASSERT) | COMMENT |
| LOW | src/airport_gui.cpp | 1 | /* | COMMENT |
| LOW | src/airport_gui.cpp | 21 | #include "company_base.h" | COMMENT |
| LOW | src/main_gui.cpp | 1 | /* | COMMENT |
| LOW | src/main_gui.cpp | 21 | #include "transparency.h" | COMMENT |
| LOW | src/object_gui.cpp | 1 | /* | COMMENT |
| LOW | src/object_gui.cpp | 21 | #include "sound_func.h" | COMMENT |
| LOW | src/cheat_gui.cpp | 1 | /* | COMMENT |
| LOW | src/cheat_gui.cpp | 21 | #include "rail_gui.h" | COMMENT |
| LOW | src/music_gui.cpp | 1 | /* | COMMENT |
| LOW | src/crashlog.cpp | 1 | /* | COMMENT |
| LOW | src/story.cpp | 1 | /* | COMMENT |
| LOW | src/autoreplace_cmd.cpp | 1 | /* | COMMENT |
| LOW | src/autoreplace_cmd.cpp | 21 | #include "core/random_func.hpp" | COMMENT |
| LOW | src/vehicle.cpp | 1 | /* | COMMENT |
| LOW | src/vehicle.cpp | 21 | #include "aircraft.h" | COMMENT |
| LOW | src/vehicle.cpp | 41 | #include "core/random_func.hpp" | COMMENT |
| LOW | src/station.cpp | 1 | /* | COMMENT |
| LOW | src/station.cpp | 21 | #include "station_base.h" | COMMENT |
| 1099 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/releasing_openttd.md | 5 | ## Step 0: Branch or Backport | COMMENT |
| LOW⚡ | docs/releasing_openttd.md | 21 | ## Step 1: Prepare changelog documentation | COMMENT |
| LOW⚡ | docs/releasing_openttd.md | 30 | ## Step 2: Prepare website release announcement | COMMENT |
| LOW⚡ | docs/releasing_openttd.md | 39 | ## Step 3: Make the actual OpenTTD release | COMMENT |
| LOW | docs/releasing_openttd.md | 53 | ## Step 4: Tell the world | COMMENT |
| LOW | src/3rdparty/fmt/format-inl.h | 1260 | // Step 1: integer promotion & Schubfach multiplier calculation. | COMMENT |
| LOW | src/3rdparty/fmt/format-inl.h | 1315 | // Step 2: Try larger divisor; remove trailing zeros if necessary. | COMMENT |
| LOW | src/3rdparty/fmt/format-inl.h | 1347 | // Step 3: Find the significand with the smaller divisor. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | os/emscripten/shell.html | 138 | // application robust, you may want to override this behavior before shipping! | COMMENT |
| MEDIUM | src/smallmap_gui.cpp | 1228 | cur_index = - 1; // Definitely different from new_index. | CODE |
| MEDIUM | src/saveload/saveload.h | 263 | RobustEnginePreview, ///< Saveload version: 179, SVN revision: 24810\n Make engine preview offers robust when company r | CODE |
| MEDIUM | src/3rdparty/fmt/format.h | 3207 | // Compilers are not aware of how to leverage the maximum value of | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/os/unix/crashlog_unix.cpp | 87 | fmt::print("Something went wrong when attempting to fill {} section of the crash log.\n", section_name); | CODE |
| MEDIUM | src/os/macosx/crashlog_osx.cpp | 94 | fmt::print("Something went wrong when attempting to fill {} section of the crash log.\n", section_name); | CODE |
| MEDIUM | src/os/windows/crashlog_win.cpp | 126 | fmt::print("Something went wrong when attempting to fill {} section of the crash log.\n", section_name); | CODE |
| MEDIUM | src/os/windows/crashlog_win.cpp | 140 | fmt::print("Something went wrong when attempting to fill {} section of the crash log.\n", section_name); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/road_cmd.cpp | 443 | /* flooding tile with road works, don't forget to remove the effect vehicle too */ | COMMENT |
| LOW | src/town_cmd.cpp | 660 | /* If we are multi-tile houses, make sure to replace the house | COMMENT |
| LOW | src/transparency.h | 20 | * If you add or remove an option don't forget to change the transparency 'hot keys' in main_gui.cpp. | COMMENT |
| LOW | src/vehicle_cmd.cpp | 581 | * @param veh_id vehicle to start/stop, don't forget to change CcStartStopVehicle if you modify this! | COMMENT |
| LOW | src/3rdparty/monocypher/monocypher.h | 255 | // Don't forget to add authentication. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | .github/workflows/release-source.yml | 64 | # Check if we are a tag. | COMMENT |
| LOW⚡ | .github/workflows/release-source.yml | 69 | # Check if the checkout caused the branch to be named. | COMMENT |
| LOW⚡ | .github/workflows/release-source.yml | 74 | # Check if this was a pull request. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/3rdparty/fmt/format-inl.h | 1260 | // Step 1: integer promotion & Schubfach multiplier calculation. | COMMENT |
| LOW | src/3rdparty/fmt/format-inl.h | 1315 | // Step 2: Try larger divisor; remove trailing zeros if necessary. | COMMENT |
| LOW | src/3rdparty/fmt/format-inl.h | 1347 | // Step 3: Find the significand with the smaller divisor. | COMMENT |
| LOW | src/3rdparty/catch2/catch.hpp | 12659 | // No children have started. We need to check if they _can_ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/file-descriptions.py | 19 | def read_files_list_from_file(file_path): | CODE |
| LOW | src/network/network_crypto.h | 87 | class NetworkAuthenticationPasswordRequestHandler : public NetworkAuthenticationPasswordRequest { | CODE |
| LOW | src/network/network_client.cpp | 711 | class ClientGamePasswordRequestHandler : public NetworkAuthenticationPasswordRequestHandler { | CODE |
| LOW | src/tests/test_network_crypto.cpp | 56 | class TestPasswordRequestHandler : public NetworkAuthenticationPasswordRequestHandler { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/unused-strings.py | 36 | CODE | |
| LOW | .github/file-descriptions.py | 31 | CODE | |
| LOW | .github/changelog.py | 9 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/script/api/doxygen_filter.sh | 3 | # This file is part of OpenTTD. | COMMENT |