A complete and cross-platform game engine designed for flexibility, performance and fast iteration.
This report presents the forensic synthetic code analysis of crownengine/crown, a C++ project with 2,415 GitHub stars. SynthScan v2.0 examined 1,294,117 lines of code across 2484 source files, recording 4444 pattern matches distributed across 12 syntactic categories. The overall adjusted score of 3.0 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 4444 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/launcher/launcher.cpp | 1 | /* | COMMENT |
| LOW | …ols/level_editor/resources/theme/Adwaita/_drawing.scss | 121 | COMMENT | |
| LOW | …ols/level_editor/resources/theme/Adwaita/_drawing.scss | 161 | -gtk-icon-shadow: 0 1px $_shadow; | COMMENT |
| LOW | …ols/level_editor/resources/theme/Adwaita/_drawing.scss | 481 | @else { background: $c $gradient; } | COMMENT |
| LOW | tools/widgets/gtk/config.h | 1 | // To make gtkcolorpicker* compile. | COMMENT |
| LOW | docs/conf.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | docs/conf.py | 61 | # The version info for the project you're documenting, acts as replacement for | COMMENT |
| LOW | docs/conf.py | 121 | COMMENT | |
| LOW | docs/_extensions/sphinx_sitemap/__init__.py | 1 | # Copyright (c) 2013 Michael Dowling <mtdowling@gmail.com> | COMMENT |
| LOW | 3rdparty/md5/md5.c | 101 | #define T2 0xe8c7b756 | COMMENT |
| LOW | 3rdparty/md5/md5.c | 121 | #define T22 0x02441453 | COMMENT |
| LOW | 3rdparty/md5/md5.c | 141 | #define T42 0xeaa127fa | COMMENT |
| LOW | 3rdparty/bgfx/tools/shaderc/shaderc_hlsl.cpp | 1 | /* | COMMENT |
| LOW | 3rdparty/bgfx/tools/shaderc/shaderc.cpp | 61 | // c - compute | COMMENT |
| LOW | 3rdparty/bgfx/tools/shaderc/shaderc.cpp | 81 | // metal<MSL version>-<SPIR-V version> | COMMENT |
| LOW | 3rdparty/bgfx/tools/shaderc/shaderc.h | 21 | #include <bx/endian.h> | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 61 | * helper macros. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 81 | * Use BGFX_STATE_BLEND_EQUATION(_equation) or BGFX_STATE_BLEND_EQUATION_SEPARATE(_equationRGB, _equationA) | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 121 | #define BGFX_STATE_POINT_SIZE_SHIFT 52 //!< Point size bit shift | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 181 | #define BGFX_STENCIL_TEST_LEQUAL UINT32_C(0x00020000) //!< Enable stencil test, less or equal. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 201 | COMMENT | |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 221 | #define BGFX_STENCIL_OP_PASS_Z_SHIFT 28 //!< Stencil operation depth pass bit shift | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 261 | #define BGFX_DISCARD_NONE UINT8_C(0x00) //!< Preserve everything. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 281 | #define BGFX_BUFFER_COMPUTE_FORMAT_8X2 UINT16_C(0x0002) //!< 2 x 8-bit values | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 301 | #define BGFX_BUFFER_COMPUTE_READ UINT16_C(0x0100) //!< Buffer will be read by shader. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 321 | #define BGFX_TEXTURE_RT_MSAA_X4 UINT64_C(0x0000003000000000) //!< Render target MSAAx4 mode. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 341 | COMMENT | |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 361 | COMMENT | |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 381 | #define BGFX_SAMPLER_COMPARE_NEVER UINT32_C(0x00070000) //!< Compare when sampling depth texture: never. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 441 | #define BGFX_RESET_NONE UINT32_C(0x00000000) //!< No reset flags. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 461 | COMMENT | |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 481 | #define BGFX_CAPS_RENDERER_MULTITHREADED UINT64_C(0x0000000000010000) //!< Renderer is on separate thread. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 501 | ) | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 521 | COMMENT | |
| LOW | 3rdparty/bgfx/include/bgfx/defines.h | 541 | COMMENT | |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 141 | /// Notation: | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 481 | /// | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 501 | /// @remarks | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 521 | /// @remarks | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 541 | /// Not thread safe and it can be called from any thread. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 561 | /// | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 581 | /// found. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 601 | COMMENT | |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 721 | /// a default rendering backend will be selected appropriate to the platform. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 861 | uint32_t minResourceCbSize; //!< Minimum resource command buffer size. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 881 | /// - `BGFX_CAPS_FORMAT_TEXTURE_IMAGE_READ` - Texture format can be used as image | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 961 | uint16_t num; //!< Number of elements in array. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1101 | { | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1121 | /// - `BGFX_STATE_WRITE_*` - Enable R, G, B, A or Z write. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1161 | /// @param[in] _bstencil Back stencil state. If back is set to `BGFX_STENCIL_NONE` | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1181 | /// | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1201 | /// @param[in] _mtx Pointer to first matrix in array. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1241 | /// @param[in] _handle Uniform. | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1261 | COMMENT | |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1281 | /// | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1301 | /// | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1321 | /// | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1361 | ); | COMMENT |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1381 | COMMENT | |
| LOW | 3rdparty/bgfx/include/bgfx/bgfx.h | 1401 | /// used, vertex layout used for creation of vertex buffer will be used. | COMMENT |
| 4304 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | 3rdparty/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp | 346 | // Sanity check the iteration count to be robust against a certain class of bugs where | COMMENT |
| MEDIUM | 3rdparty/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp | 11903 | // Essentially, we can only remove one set of swizzles, since that's what we have control over ... | COMMENT |
| MEDIUM | 3rdparty/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp | 12162 | // We can look at result type which is more robust. | COMMENT |
| MEDIUM | 3rdparty/bgfx/3rdparty/spirv-cross/spirv_cross.cpp | 3965 | // Essentially a map of block -> { variables accessed in the basic block } | COMMENT |
| MEDIUM | 3rdparty/bgfx/3rdparty/spirv-cross/spirv_hlsl.cpp | 1776 | // Sort input and output variables based on, from more robust to less robust: | COMMENT |
| MEDIUM | …3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp | 765 | // Creates a graphics robust access pass. | COMMENT |
| MEDIUM | …dparty/bgfx/3rdparty/spirv-tools/source/diagnostic.cpp | 92 | case SPV_REQUESTED_TERMINATION: // Essentially success. | CODE |
| MEDIUM | …party/bgfx/3rdparty/spirv-tools/source/opt/ir_loader.h | 33 | // libspirv.h so that we can leverage the syntax checks implemented behind it. | COMMENT |
| MEDIUM | …dparty/bgfx/3rdparty/spirv-tools/source/opt/ccp_pass.h | 62 | // CCP lattice. Essentially, if all the operands in |phi| have the same | COMMENT |
| MEDIUM | 3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp | 5988 | // TODO: It would be more robust to do a full recursive verification of the types satisfying SPIR-V rules. | COMMENT |
| MEDIUM | …rty/glslang/glslang/MachineIndependent/ParseHelper.cpp | 9557 | // for the parameter to the constructor (passed to this function). Essentially, it converts | COMMENT |
| MEDIUM | …bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp | 8537 | // for the parameter to the constructor (passed to this function). Essentially, it converts | COMMENT |
| MEDIUM | …rty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp | 977 | // take precision from it. This isn't fully robust now, but oh well. | COMMENT |
| MEDIUM | 3rdparty/bimg/3rdparty/tinyexr/tinyexr.h | 1554 | // TODO(syoyo): Add more robust out-of-bounds check in `rleUncompress`. | COMMENT |
| MEDIUM | 3rdparty/stb/stb_vorbis.c | 51 | // 1.10 - 2017-03-03 - more robust seeking; fix negative ilog(); clear error in open_memory | COMMENT |
| MEDIUM | …ullet3/src/BulletSoftBody/btDeformableCorotatedForce.h | 102 | PolarDecomposition(F, R, S); // this QR is not robust, consider using implicit shift svd | CODE |
| MEDIUM | …rc/BulletCollision/NarrowPhaseCollision/btConvexCast.h | 34 | //will need to digg deeper to make the algorithm more robust | COMMENT |
| MEDIUM | …BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp | 97 | // @@@ this needs to be made more robust | COMMENT |
| MEDIUM | …cs/ConstraintSolver/btGeneric6DofSpring2Constraint.cpp | 871 | // so it is much simpler (and more robust) just to simply use inf (with the proper sign) | COMMENT |
| MEDIUM | 3rdparty/bullet3/src/LinearMath/btMatrix3x3.h | 682 | ///extractRotation is from "A robust method to extract the rotational part of deformations" | COMMENT |
| MEDIUM | 3rdparty/ufbx/ufbx.h | 5016 | // Using this and robust linear interpolation will handle stepped tangents correctly | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp | 155 | // Step 1: Create the if merge block for structured modules. | COMMENT |
| LOW | …3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp | 235 | // Step 2: Build a new preheader for |loop_|, use the old one | COMMENT |
| LOW | …3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp | 361 | // Step 3: Duplicate |loop_|. | COMMENT |
| LOW⚡ | …3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp | 373 | // Step 4: Specialize the loop. // | COMMENT |
| LOW⚡ | …3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp | 380 | // Step 5: Connect convergent edges to the landing pads. // | COMMENT |
| LOW | …y/bgfx/3rdparty/spirv-tools/source/val/validate_id.cpp | 48 | /// NOTE: This function does NOT check module scoped functions which are | COMMENT |
| LOW | …fx/3rdparty/spirv-tools/source/val/validate_layout.cpp | 427 | // NOTE: This function does not handle CFG related validation | COMMENT |
| LOW | 3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp | 4020 | // Step 2: Construct a matrix from that array. | COMMENT |
| LOW | 3rdparty/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp | 5959 | // NOTE: This function can handle any store request; if it's not special it | COMMENT |
| LOW⚡ | …bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp | 7749 | // Step 1: If there's an exact match, use it. | COMMENT |
| LOW⚡ | …bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp | 7752 | // Step 3: Re-select after type promotion is applied, to find proper candidate. | COMMENT |
| LOW⚡ | …bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp | 7754 | // Step 1: If there's an exact match, use it. | COMMENT |
| LOW | …bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp | 7810 | // Step 3: Re-select after type promotion, to find proper candidate | COMMENT |
| LOW | 3rdparty/ufbx/ufbx.h | 5574 | // NOTE: This function flips the normals if the determinant is negative. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp | 155 | // Step 1: Create the if merge block for structured modules. | COMMENT |
| LOW | …3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp | 235 | // Step 2: Build a new preheader for |loop_|, use the old one | COMMENT |
| LOW | …3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp | 361 | // Step 3: Duplicate |loop_|. | COMMENT |
| LOW⚡ | …3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp | 373 | // Step 4: Specialize the loop. // | COMMENT |
| LOW⚡ | …3rdparty/spirv-tools/source/opt/loop_unswitch_pass.cpp | 380 | // Step 5: Connect convergent edges to the landing pads. // | COMMENT |
| LOW | 3rdparty/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp | 4020 | // Step 2: Construct a matrix from that array. | COMMENT |
| LOW⚡ | …bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp | 7749 | // Step 1: If there's an exact match, use it. | COMMENT |
| LOW⚡ | …bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp | 7752 | // Step 3: Re-select after type promotion is applied, to find proper candidate. | COMMENT |
| LOW⚡ | …bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp | 7754 | // Step 1: If there's an exact match, use it. | COMMENT |
| LOW | …bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp | 7810 | // Step 3: Re-select after type promotion, to find proper candidate | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | exporters/blender/blender-2-83.py | 19 | CODE | |
| LOW | exporters/blender/blender-2-83.py | 20 | CODE | |
| LOW | exporters/blender/blender-2-83.py | 21 | CODE | |
| LOW | exporters/blender/blender-2-83.py | 277 | CODE | |
| LOW | exporters/blender/blender-2-83.py | 277 | CODE | |
| LOW | exporters/blender/blender-2-83.py | 278 | CODE | |
| LOW | exporters/blender/blender-2-83.py | 278 | CODE | |
| LOW | exporters/blender/blender-2-83.py | 313 | CODE | |
| LOW | docs/_extensions/sphinxext/opengraph/_social_cards.py | 3 | CODE | |
| LOW | docs/_extensions/sphinxext/opengraph/_meta_parser.py | 1 | CODE | |
| LOW | docs/_extensions/sphinxext/opengraph/__init__.py | 1 | CODE | |
| LOW | …_extensions/sphinxext/opengraph/_description_parser.py | 1 | CODE | |
| LOW | docs/_extensions/sphinxext/opengraph/_title_parser.py | 1 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/conf.py | 7 | # This file is execfile()d with the current directory set to its | COMMENT |
| MEDIUM | docs/_extensions/sphinxext/opengraph/_social_cards.py | 74 | # Define the file path we'll use for this image | COMMENT |
| MEDIUM | docs/_extensions/sphinxext/opengraph/_social_cards.py | 133 | # Create the figure objects and return them so that we re-use them later. | COMMENT |
| MEDIUM | 3rdparty/bx/3rdparty/ini/ini.h | 95 | #### Creating a new ini file | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rdparty/spirv-tools/source/val/validate_annotation.cpp | 331 | // TODO: Add validations for all decorations. | COMMENT |
| LOW | …rdparty/spirv-tools/source/val/validate_annotation.cpp | 368 | // TODO: Add validations for these decorations. | COMMENT |
| LOW | …rdparty/spirv-tools/source/val/validate_extensions.cpp | 3801 | // TODO: Add validation rules for remaining cases as well. | COMMENT |
| LOW | …ty/glslang/glslang/MachineIndependent/linkValidate.cpp | 233 | // TODO: implement support for geometry passthrough | COMMENT |
| LOW | …bgfx/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp | 188 | // TODO: implement. | COMMENT |
| LOW | 3rdparty/bgfx/src/renderer_mtl.h | 1593 | uint32_t m_frameNum; // TODO: implement (currently stays 0) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …y/bgfx/3rdparty/spirv-tools/source/util/small_vector.h | 40 | // TODO: I have implemented the public member functions from |std::vector| that | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | exporters/blender/blender-2-83.py | 32 | CODE | |
| LOW | exporters/blender/blender-2-83.py | 49 | CODE | |
| LOW | exporters/blender/blender-2-83.py | 86 | CODE | |
| LOW | docs/_extensions/sphinx_sitemap/__init__.py | 82 | CODE | |
| LOW | docs/_extensions/sphinxext/opengraph/__init__.py | 83 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/_extensions/sphinxext/opengraph/_social_cards.py | 171 | def create_social_card_objects( | CODE |
| LOW | docs/_extensions/sphinxext/opengraph/_social_cards.py | 315 | def _set_page_title_line_width() -> int: | CODE |
| LOW | docs/_extensions/sphinxext/opengraph/_social_cards.py | 319 | def _set_description_line_width() -> int: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | 3rdparty/bimg/3rdparty/lodepng/lodepng.cpp | 70 | lodepng source code. Don't forget to remove "static" if you copypaste them | CODE |
| LOW | …ulletDynamics/ConstraintSolver/btConeTwistConstraint.h | 319 | // note: don't forget to enableMotor() | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/_extensions/sphinxext/opengraph/_social_cards.py | 171 | CODE |