The Ren'Py Visual Novel Engine
This report presents the forensic synthetic code analysis of renpy/renpy, a Ren'Py project with 6,632 GitHub stars. SynthScan v2.0 examined 169,399 lines of code across 334 source files, recording 4206 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 21.9 places this repository in the Moderate AI signal 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
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 4206 distinct pattern matches across 16 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 | distribute.py | 4 | CODE | |
| LOW | distribute.py | 4 | CODE | |
| LOW | distribute.py | 4 | CODE | |
| LOW | distribute.py | 4 | CODE | |
| LOW | distribute.py | 4 | CODE | |
| LOW | distribute.py | 18 | CODE | |
| LOW | add.py | 2 | CODE | |
| LOW | add.py | 9 | CODE | |
| LOW | renpy.py | 27 | CODE | |
| LOW | renpy.py | 27 | CODE | |
| LOW | setup.py | 35 | CODE | |
| LOW | main.py | 27 | CODE | |
| LOW | main.py | 27 | CODE | |
| LOW | launcher/game/webserver.py | 1 | CODE | |
| LOW | launcher/game/webserver.py | 11 | CODE | |
| LOW | launcher/game/change_icon.py | 25 | CODE | |
| LOW | launcher/game/change_icon.py | 26 | CODE | |
| LOW | launcher/game/gui7/code.py | 22 | CODE | |
| LOW | launcher/game/gui7/__init__.py | 22 | CODE | |
| LOW | launcher/game/gui7/__init__.py | 22 | CODE | |
| LOW | launcher/game/gui7/__init__.py | 22 | CODE | |
| LOW | launcher/game/gui7/images.py | 26 | CODE | |
| LOW | renpy/bootstrap.py | 323 | CODE | |
| LOW | renpy/scriptedit.py | 25 | CODE | |
| LOW | renpy/scriptedit.py | 25 | CODE | |
| LOW | renpy/scriptedit.py | 25 | CODE | |
| LOW | renpy/scriptedit.py | 25 | CODE | |
| LOW | renpy/scriptedit.py | 25 | CODE | |
| LOW | renpy/scriptedit.py | 26 | CODE | |
| LOW | renpy/scriptedit.py | 26 | CODE | |
| LOW | renpy/scriptedit.py | 26 | CODE | |
| LOW | renpy/scriptedit.py | 26 | CODE | |
| LOW | renpy/scriptedit.py | 26 | CODE | |
| LOW | renpy/scriptedit.py | 26 | CODE | |
| LOW | renpy/scriptedit.py | 26 | CODE | |
| LOW | renpy/scriptedit.py | 26 | CODE | |
| LOW | renpy/scriptedit.py | 26 | CODE | |
| LOW | renpy/scriptedit.py | 26 | CODE | |
| LOW | renpy/scriptedit.py | 31 | CODE | |
| LOW | renpy/execution.py | 29 | CODE | |
| LOW | renpy/config.py | 26 | CODE | |
| LOW | renpy/config.py | 26 | CODE | |
| LOW | renpy/config.py | 26 | CODE | |
| LOW | renpy/config.py | 26 | CODE | |
| LOW | renpy/config.py | 26 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 27 | CODE | |
| LOW | renpy/config.py | 29 | CODE | |
| LOW | renpy/config.py | 29 | CODE | |
| LOW | renpy/savelocation.py | 27 | CODE | |
| LOW | renpy/savelocation.py | 27 | CODE | |
| 3026 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | distribute.py | 135 | except Exception: | CODE |
| LOW | renpy.py | 121 | except Exception: | CODE |
| LOW | renpy.py | 158 | except Exception: | CODE |
| MEDIUM | renpy.py | 114 | def test_writable(d): | CODE |
| LOW | main.py | 121 | except Exception: | CODE |
| LOW | main.py | 158 | except Exception: | CODE |
| MEDIUM | main.py | 114 | def test_writable(d): | CODE |
| LOW | launcher/Visual Studio Code.edit.py | 99 | except Exception: | CODE |
| LOW | launcher/Visual Studio Code (System).edit.py | 99 | except Exception: | CODE |
| LOW | launcher/VSCodium (System).edit.py | 99 | except Exception: | CODE |
| LOW | launcher/game/webserver.py | 135 | except Exception: | CODE |
| LOW | launcher/game/installer.py | 58 | except Exception: | CODE |
| LOW | launcher/game/installer.py | 126 | except Exception: | CODE |
| LOW | launcher/game/installer.py | 132 | except Exception: | CODE |
| LOW | launcher/game/installer.py | 163 | except Exception: | CODE |
| LOW | launcher/game/installer.py | 368 | except Exception: | CODE |
| LOW | launcher/game/installer.py | 373 | except Exception: | CODE |
| LOW | launcher/game/installer.py | 436 | except Exception as e: | CODE |
| LOW | launcher/game/gui7/images.py | 54 | except Exception: | CODE |
| LOW | launcher/game/gui7/images.py | 122 | except Exception: | CODE |
| LOW | renpy/bootstrap.py | 53 | except Exception: | CODE |
| LOW | renpy/bootstrap.py | 134 | except Exception: | CODE |
| LOW | renpy/bootstrap.py | 299 | except Exception as e: | CODE |
| LOW | renpy/bootstrap.py | 324 | except Exception as e: | STRING |
| LOW | renpy/bootstrap.py | 360 | except Exception: | STRING |
| LOW | renpy/bootstrap.py | 400 | except Exception as e: | STRING |
| MEDIUM | renpy/bootstrap.py | 46 | def null_files(): | CODE |
| LOW | renpy/scriptedit.py | 529 | except Exception: | CODE |
| LOW | renpy/color.py | 373 | except Exception: | CODE |
| LOW⚡ | renpy/color.py | 385 | except Exception: | CODE |
| LOW⚡ | renpy/color.py | 395 | except Exception: | CODE |
| LOW⚡ | renpy/color.py | 405 | except Exception: | CODE |
| LOW | renpy/execution.py | 207 | except Exception: | CODE |
| LOW | renpy/execution.py | 559 | except Exception: | CODE |
| LOW | renpy/execution.py | 566 | except Exception: | CODE |
| LOW | renpy/execution.py | 690 | except Exception: | CODE |
| LOW | renpy/execution.py | 957 | except Exception: | CODE |
| LOW | renpy/execution.py | 1080 | except Exception: | CODE |
| MEDIUM | renpy/execution.py | 196 | def __repr__(self): | CODE |
| LOW⚡ | renpy/savelocation.py | 280 | except Exception: | CODE |
| LOW⚡ | renpy/savelocation.py | 286 | except Exception: | CODE |
| LOW⚡ | renpy/savelocation.py | 290 | except Exception: | CODE |
| LOW | renpy/savelocation.py | 115 | except Exception: | CODE |
| LOW | renpy/savelocation.py | 130 | except Exception: | CODE |
| LOW | renpy/savelocation.py | 182 | except Exception: | CODE |
| LOW | renpy/savelocation.py | 262 | except Exception: | CODE |
| LOW | renpy/savelocation.py | 312 | except Exception: | CODE |
| LOW | renpy/savelocation.py | 315 | except Exception: | CODE |
| LOW | renpy/savelocation.py | 448 | except Exception: | CODE |
| LOW | renpy/savelocation.py | 661 | except Exception: | CODE |
| LOW | renpy/importer.py | 330 | except Exception as e: | CODE |
| MEDIUM | renpy/error.py | 208 | def getvalue(self): | CODE |
| LOW⚡ | renpy/error.py | 439 | except Exception: | CODE |
| LOW⚡ | renpy/error.py | 441 | except Exception: | CODE |
| LOW | renpy/error.py | 398 | except Exception: | CODE |
| LOW | renpy/error.py | 464 | except Exception: | CODE |
| LOW | renpy/error.py | 809 | except Exception: | CODE |
| LOW | renpy/error.py | 938 | except Exception: | CODE |
| LOW | renpy/error.py | 981 | except Exception: | CODE |
| LOW | renpy/error.py | 1201 | except Exception: | CODE |
| 309 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | renpy.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | setup.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | main.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | launcher/game/change_icon.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | launcher/game/change_icon.py | 361 | # | COMMENT |
| LOW | launcher/game/installer.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | launcher/game/gui7/code.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | launcher/game/gui7/__init__.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | launcher/game/gui7/images.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | launcher/game/gui7/parameters.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/bootstrap.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/scriptedit.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/color.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/execution.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/config.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/config.py | 101 | COMMENT | |
| LOW | renpy/config.py | 241 | # choice from a menu. This can be used for making a demo version of a | COMMENT |
| LOW | renpy/savelocation.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/importer.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/error.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/error.py | 541 | # Binary ops, subscripts, and calls are expressions, so | COMMENT |
| LOW | renpy/screenlang.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/savetoken.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/memory.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/object.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/log.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/pyanalysis.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/revertable.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/util.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/ui.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/game.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/arguments.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/preferences.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/__init__.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/rollback.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/types.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/substitutions.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/loadsave.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/webloader.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/dump.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/easy.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/parser.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/atl.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/atl.py | 541 | if (old_widget_param is not None) and ( | COMMENT |
| LOW | renpy/atl.py | 781 | class Statement(renpy.object.Object): | COMMENT |
| LOW | renpy/atl.py | 801 | # and control to head up to the event handler. | COMMENT |
| LOW | renpy/add_from.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/loader.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/curry.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/debug.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/lexer.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/python.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/character.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/persistent.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/ast.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/warp.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/versions.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/defaultstore.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/editor.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| LOW | renpy/statements.py | 1 | # Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us> | COMMENT |
| 155 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | distribute.py | 51 | CODE | |
| LOW | renpy.py | 232 | CODE | |
| LOW | main.py | 232 | CODE | |
| LOW | launcher/Visual Studio Code.edit.py | 14 | CODE | |
| LOW | launcher/Visual Studio Code.edit.py | 79 | CODE | |
| LOW | launcher/Visual Studio Code (System).edit.py | 14 | CODE | |
| LOW | launcher/Visual Studio Code (System).edit.py | 79 | CODE | |
| LOW | launcher/VSCodium (System).edit.py | 14 | CODE | |
| LOW | launcher/VSCodium (System).edit.py | 79 | CODE | |
| LOW | launcher/game/installer.py | 112 | CODE | |
| LOW | launcher/game/installer.py | 144 | CODE | |
| LOW | launcher/game/installer.py | 174 | CODE | |
| LOW | launcher/game/installer.py | 349 | CODE | |
| LOW | launcher/game/gui7/code.py | 293 | CODE | |
| LOW | renpy/bootstrap.py | 197 | CODE | |
| LOW | renpy/scriptedit.py | 74 | CODE | |
| LOW | renpy/color.py | 174 | CODE | |
| LOW | renpy/execution.py | 1036 | CODE | |
| LOW | renpy/execution.py | 591 | CODE | |
| LOW | renpy/execution.py | 784 | CODE | |
| LOW | renpy/execution.py | 887 | CODE | |
| LOW | renpy/savelocation.py | 737 | CODE | |
| LOW | renpy/savelocation.py | 159 | CODE | |
| LOW | renpy/savelocation.py | 265 | CODE | |
| LOW | renpy/savelocation.py | 293 | CODE | |
| LOW | renpy/error.py | 451 | CODE | |
| LOW | renpy/error.py | 817 | CODE | |
| LOW | renpy/error.py | 862 | CODE | |
| LOW | renpy/error.py | 887 | CODE | |
| LOW | renpy/error.py | 1314 | CODE | |
| LOW | renpy/error.py | 1458 | CODE | |
| LOW | renpy/error.py | 1517 | CODE | |
| LOW | renpy/savetoken.py | 259 | CODE | |
| LOW | renpy/savetoken.py | 285 | CODE | |
| LOW | renpy/memory.py | 91 | CODE | |
| LOW | renpy/memory.py | 430 | CODE | |
| LOW | renpy/memory.py | 500 | CODE | |
| LOW | renpy/memory.py | 97 | CODE | |
| LOW | renpy/memory.py | 510 | CODE | |
| LOW | renpy/pyanalysis.py | 258 | CODE | |
| LOW | renpy/pyanalysis.py | 551 | CODE | |
| LOW | renpy/ui.py | 1111 | CODE | |
| LOW | renpy/rollback.py | 111 | CODE | |
| LOW | renpy/rollback.py | 399 | CODE | |
| LOW | renpy/rollback.py | 515 | CODE | |
| LOW | renpy/rollback.py | 542 | CODE | |
| LOW | renpy/rollback.py | 614 | CODE | |
| LOW | renpy/rollback.py | 736 | CODE | |
| LOW | renpy/rollback.py | 939 | CODE | |
| LOW | renpy/substitutions.py | 43 | CODE | |
| LOW | renpy/substitutions.py | 105 | CODE | |
| LOW | renpy/webloader.py | 178 | CODE | |
| LOW | renpy/webloader.py | 204 | CODE | |
| LOW | renpy/dump.py | 63 | CODE | |
| LOW | renpy/easy.py | 56 | CODE | |
| LOW | renpy/easy.py | 100 | CODE | |
| LOW | renpy/easy.py | 146 | CODE | |
| LOW | renpy/parser.py | 122 | CODE | |
| LOW | renpy/parser.py | 208 | CODE | |
| LOW | renpy/parser.py | 333 | CODE | |
| 221 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | renpy.py | 3 | # This file is part of Ren'Py. The license below applies to Ren'Py only. | COMMENT |
| MEDIUM | main.py | 3 | # This file is part of Ren'Py. The license below applies to Ren'Py only. | COMMENT |
| MEDIUM | renpy/scriptedit.py | 22 | # This file contains code to add and remove statements from the AST | COMMENT |
| MEDIUM | renpy/execution.py | 22 | # This file contains code responsible for managing the execution of a | COMMENT |
| MEDIUM | renpy/error.py | 22 | # This file contains code for formatting tracebacks. | COMMENT |
| MEDIUM | renpy/memory.py | 22 | # This file contains functions used to help debug memory leaks. They aren't | COMMENT |
| MEDIUM | renpy/log.py | 22 | # This module handles the logging of messages to a file. | COMMENT |
| MEDIUM | renpy/revertable.py | 22 | # This file contains code that handles the execution of python code | COMMENT |
| MEDIUM | renpy/ui.py | 22 | # This file contains functions that can be used to display a UI on the | COMMENT |
| MEDIUM | renpy/game.py | 22 | # This module is intended to be used as a singleton object. | COMMENT |
| MEDIUM | renpy/arguments.py | 22 | # This file handles argument parsing. Argument parsing takes place in | COMMENT |
| MEDIUM | renpy/__init__.py | 591 | # Create the store. | COMMENT |
| MEDIUM | renpy/rollback.py | 22 | # This file contains code that handles the execution of python code | COMMENT |
| MEDIUM | renpy/types.py | 22 | # This file contains the various types that Ren'Py uses. | COMMENT |
| MEDIUM | renpy/substitutions.py | 22 | # This file contains support for string translation and string formatting | COMMENT |
| MEDIUM | renpy/loadsave.py | 22 | # This file contains functions that load and save the game state. | COMMENT |
| MEDIUM | renpy/dump.py | 22 | # This file contains code to write the reflect.json file. This file contains | COMMENT |
| MEDIUM | renpy/parser.py | 22 | # This module contains the parser for the Ren'Py script language. It's | COMMENT |
| MEDIUM | renpy/atl.py | 1410 | # Create a new transform state, and apply the property | COMMENT |
| MEDIUM | renpy/debug.py | 22 | # This file contains debugging code that isn't enabled in normal Ren'Py | COMMENT |
| MEDIUM | renpy/python.py | 22 | # This file contains code that handles the execution of python code | COMMENT |
| MEDIUM | renpy/python.py | 231 | # Create the dict. | COMMENT |
| MEDIUM | renpy/character.py | 715 | # Create a callback object specific to this pause. | COMMENT |
| MEDIUM | renpy/character.py | 769 | # Create the callback that is called when the slow text is done. | COMMENT |
| MEDIUM | renpy/persistent.py | 278 | # Create the backup of the persistent data. | COMMENT |
| MEDIUM | renpy/ast.py | 22 | # This file contains the AST for the Ren'Py script language. Each class | COMMENT |
| MEDIUM | renpy/statements.py | 22 | # This module contains code to support user-defined statements. | COMMENT |
| MEDIUM | renpy/main.py | 470 | # Initialize persistent variables. | COMMENT |
| MEDIUM | renpy/script.py | 22 | # This file contains code that is responsible for storing and executing a | COMMENT |
| MEDIUM | renpy/update/generate.py | 146 | # Create a list of files by reverse mtime. The idea is that the newer | COMMENT |
| MEDIUM | renpy/sl2/slast.py | 56 | # This file contains the abstract syntax tree for a screen language | COMMENT |
| MEDIUM | renpy/sl2/slast.py | 928 | # Create the context. | COMMENT |
| MEDIUM | renpy/sl2/slast.py | 2035 | # Create an old-style displayable name for this call site. | COMMENT |
| MEDIUM | renpy/exports/__init__.py | 22 | # This file contains functions that are exported to the script namespace as | COMMENT |
| MEDIUM | renpy/common/00sshtransition_ren.py | 22 | # This file contains support for a transition after a sequence of | COMMENT |
| MEDIUM | renpy/display/anim.py | 22 | # This file contains support for state-machine controlled animations. | COMMENT |
| MEDIUM | renpy/display/error.py | 22 | # This file contains code to handle GUI-based error reporting. | COMMENT |
| MEDIUM | renpy/display/behavior.py | 1910 | # This class contains information about an adjustment that can change the | COMMENT |
| MEDIUM | renpy/display/emulator.py | 22 | # This file contains code to emulate various other devices on the PC. | COMMENT |
| MEDIUM | renpy/display/layout.py | 22 | # This file contains classes that handle layout of displayables on | COMMENT |
| MEDIUM | renpy/display/predict.py | 22 | # This file contains the routines that manage image prediction. | COMMENT |
| MEDIUM | renpy/display/core.py | 971 | # Create a cache of the mouse information. | COMMENT |
| MEDIUM | renpy/display/imagemap.py | 22 | # This file handles imagemap caching. | COMMENT |
| MEDIUM | renpy/display/pgrender.py | 53 | # Create a sample surface. | COMMENT |
| MEDIUM | renpy/display/pgrender.py | 67 | # Create the sample surface. | COMMENT |
| MEDIUM | renpy/display/viewport.py | 22 | # This file contains classes that handle layout of displayables on | COMMENT |
| MEDIUM | renpy/display/im.py | 22 | # This file contains the new image code, which includes provisions for | COMMENT |
| MEDIUM | renpy/display/motion.py | 22 | # This file contains displayables that move, zoom, rotate, or otherwise | COMMENT |
| MEDIUM | renpy/display/transform.py | 22 | # This file contains displayables that move, zoom, rotate, or otherwise | COMMENT |
| MEDIUM | renpy/display/imagelike.py | 22 | # This file contains displayables that are image-like, because they take | COMMENT |
| MEDIUM | renpy/display/image.py | 22 | # This file contains some miscellaneous displayables that involve images. | COMMENT |
| MEDIUM | renpy/display/focus.py | 22 | # This file contains code to manage focus on the display. | COMMENT |
| MEDIUM | renpy/text/emoji_trie.py | 3 | # This file is generated by module/emoji/make_emoji_trie.py. Do not | COMMENT |
| MEDIUM | renpy/text/text.py | 1041 | # Create the texture. | COMMENT |
| MEDIUM | sphinx/source/conf.py | 6 | # This file is execfile()d with the current directory set to its containing dir. | COMMENT |
| MEDIUM | sphinx/source/fill-translator-credits.py | 4 | # This file is part of Ren'Py. The license below applies to Ren'Py only. | COMMENT |
| MEDIUM | scripts/generate_styles.py | 638 | g.write("# This file is generated by generate_styles.py.") | CODE |
| MEDIUM | scripts/unicode/make_emoji_trie.py | 174 | # This file is generated by module/emoji/make_emoji_trie.py. Do not | STRING |
| MEDIUM | scripts/sdl3/main.py | 67 | # This file is automatically generated by scripts/sdl3/main.py. Do not edit manually. | STRING |
| MEDIUM | scripts/sdl3/main.py | 107 | # This file is automatically generated by scripts/sdl3/main.py. Do not edit manually. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | renpy/webloader.py | 63 | if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) { | CODE |
| HIGH | renpy/webloader.py | 63 | if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) { | CODE |
| HIGH | renpy/atl.py | 1352 | if (old_child is not None) and (old_child is not renpy.display.motion.null) and (self.transition is not None): | CODE |
| HIGH | renpy/main.py | 251 | || (navigator.userAgent.indexOf("Mac") != -1 && navigator.maxTouchPoints > 1)""" | CODE |
| HIGH | renpy/exports/fetchexports.py | 234 | command = """fetchFile("{method}", "{url}", null, "{fn}", null, "{headers}")""".format( | CODE |
| HIGH⚡ | renpy/audio/webaudio.py | 41 | emscripten.run_script("renpyAudio.{}.apply(null, {});".format(function, dumps(args))) | CODE |
| HIGH⚡ | renpy/audio/webaudio.py | 49 | return emscripten.run_script_int("renpyAudio.{}.apply(null, {});".format(function, dumps(args))) | CODE |
| HIGH⚡ | renpy/audio/webaudio.py | 57 | rv = emscripten.run_script_string("renpyAudio.{}.apply(null, {});".format(function, dumps(args))) | CODE |
| HIGH | renpy/display/behavior.py | 2706 | return render(self.null, width, height, st, at) | CODE |
| HIGH | renpy/display/layout.py | 569 | self.add(null) | CODE |
| HIGH | renpy/display/tts.py | 194 | language = locale.toString().replace("_", "-") | CODE |
| HIGH | renpy/display/core.py | 2728 | ld.add(null) | CODE |
| HIGH | renpy/display/viewport.py | 777 | self.add(null) | CODE |
| HIGH | renpy/gl2/live2d.py | 126 | window.live2d_csm.ccall("csmInitializeAmountOfMemory", null, ["number"], [{renpy.config.live2d_max_memory}]); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | renpy/scriptedit.py | 414 | def nodes_on_line_at_or_after(filename, linenumber): | CODE |
| LOW | renpy/config.py | 1037 | def say_attribute_transition_callback(*args): | CODE |
| LOW⚡ | renpy/error.py | 451 | def normalize_renpy_line_offset(filename: str, linenumber: int, offset: int, line: str): | CODE |
| LOW | renpy/rollback.py | 1166 | def get_identifier_checkpoints(self, identifier): | CODE |
| LOW | renpy/webloader.py | 204 | def process_downloaded_resources(): | CODE |
| LOW | renpy/easy.py | 38 | def lookup_displayable_prefix(d: str) -> Displayable | None: | CODE |
| LOW | renpy/parser.py | 99 | def parse_simple_expression_list(l, image=False): | CODE |
| LOW | renpy/loader.py | 402 | def scandirfiles_from_remote_file(add, seen): | CODE |
| LOW | renpy/loader.py | 432 | def scandirfiles_from_filesystem(add, seen): | CODE |
| LOW | renpy/loader.py | 461 | def scandirfiles_from_archives(add, seen): | CODE |
| LOW | renpy/loader.py | 546 | def load_from_file_open_callback(name): | CODE |
| LOW | renpy/python.py | 452 | def find_starred_match_patterns(node): | CODE |
| LOW | renpy/character.py | 289 | def compute_widget_properties(who_args, what_args, window_args, properties, variant=None, multiple=None): | CODE |
| LOW | renpy/ast.py | 560 | def probably_side_effect_free(expr: str) -> bool: | CODE |
| LOW | renpy/parameter.py | 231 | def with_pos_only_as_pos_or_kw(self): | CODE |
| LOW | renpy/lint.py | 681 | def check_style_property_displayable(name, property, d): | CODE |
| LOW | renpy/lint.py | 1035 | def check_orphan_translations(none_lang_identifiers, translation_identifiers): | CODE |
| LOW | renpy/test/testexecution.py | 255 | def link_top_level_testcase_to_parent(node: TestCase) -> None: | CODE |
| LOW | renpy/test/testexecution.py | 404 | def update_suite_enabled_flag(node: TestSuite) -> None: | CODE |
| LOW | renpy/test/testexecution.py | 519 | def dispatch_exception_to_control_frame(self, exc: Exception) -> bool: | CODE |
| LOW | renpy/test/testexecution.py | 526 | def move_to_next_node_if_possible(self) -> None: | CODE |
| LOW | renpy/test/testparser.py | 628 | def one_line_python_statement(l: Lexer, loc: NodeLocation) -> testast.Python: | CODE |
| LOW | renpy/test/testparser.py | 711 | def parse_testcase_parameters(l: Lexer, loc: NodeLocation) -> list[dict[str, Any]]: | CODE |
| LOW | renpy/test/testreporter.py | 333 | def get_outcome_by_test_block(self, test_block: BaseTestBlock) -> BaseOutcome: | CODE |
| LOW | renpy/test/testreporter.py | 398 | def get_assertion_error_string(epc: renpy.error.ExceptionPrintContext, assert_node: Assert, node_name: str) -> str: | CODE |
| LOW | renpy/test/testreporter.py | 524 | def _format_with_status_color(self, msg: str, status: OutcomeStatus | None) -> str: | CODE |
| LOW | renpy/test/testreporter.py | 592 | def _print_summarized_outcomes(self, outcome: OutcomeManager) -> None: | CODE |
| LOW | renpy/test/testast.py | 239 | def current_parameterized_name(self) -> str: | CODE |
| LOW | renpy/test/testast.py | 244 | def current_full_parameterized_path(self) -> str: | CODE |
| LOW | renpy/test/testast.py | 308 | def generate_parameter_combinations(self, parameters: list[list[dict[str, Any]]] | None) -> list[dict[str, Any]]: | CODE |
| LOW | renpy/test/testast.py | 326 | def advance_to_next_parameter_set(self): | CODE |
| LOW | renpy/test/testast.py | 355 | def has_all_parameters_been_processed(self) -> bool: | CODE |
| LOW | renpy/test/testast.py | 454 | def advance_to_next_parameter_set(self): | CODE |
| LOW | renpy/test/testast.py | 506 | def has_completed_all_subtests(self) -> bool: | CODE |
| LOW | renpy/test/testast.py | 516 | def current_full_parameterized_path(self) -> str: | CODE |
| LOW | renpy/test/testast.py | 572 | def element_not_found_during_perform(self) -> None: | CODE |
| LOW | renpy/test/testast.py | 681 | def element_not_found_during_perform(self) -> None: | CODE |
| LOW | renpy/test/testast.py | 745 | def element_not_found_during_perform(self) -> None: | CODE |
| LOW | renpy/translation/__init__.py | 895 | def get_translation_identifier(): | CODE |
| LOW | renpy/sl2/slparser.py | 130 | def update_incompatible_props(prefix, prop): | CODE |
| LOW | renpy/sl2/slparser.py | 460 | def add_prefix_style_property(self, prefix, name): | CODE |
| LOW | renpy/exports/fetchexports.py | 133 | def get_fetch_requests_progress() -> float: | CODE |
| LOW | renpy/exports/fetchexports.py | 274 | def get_fetch_emscripten_progress() -> float: | CODE |
| LOW | renpy/exports/sayexports.py | 240 | def count_seen_dialogue_blocks(): | CODE |
| LOW | renpy/exports/sayexports.py | 251 | def count_newly_seen_dialogue_blocks(): | CODE |
| LOW | renpy/exports/statementexports.py | 356 | def execute_default_statement(start=False): | CODE |
| LOW | renpy/exports/rollbackexports.py | 242 | def get_identifier_checkpoints(identifier): | CODE |
| LOW | renpy/exports/displayexports.py | 34 | def count_displayables_in_layer(layer): | CODE |
| LOW | renpy/common/00sshtransition_ren.py | 47 | def _scene_show_hide_transition_callback(statement): | CODE |
| LOW | renpy/display/screen.py | 1578 | def get_displayable_properties(id, screen=None, layer=None): | CODE |
| LOW | renpy/display/behavior.py | 1859 | def get_caret_above_below_pos(self): | CODE |
| LOW | renpy/display/layout.py | 1522 | def dynamic_displayable_compat(st, at, expr): | CODE |
| LOW | renpy/display/core.py | 1374 | def check_background_screenshot(self): | CODE |
| LOW | renpy/display/im.py | 558 | def _preload_thread_pass_serial(self): | CODE |
| LOW⚡ | renpy/display/im.py | 584 | def _preload_thread_pass_parallel(self, pool: ThreadPoolExecutor): | CODE |
| LOW | renpy/display/im.py | 1146 | def ensure_bounds_divide_evenly(bounds: tuple[int, int, int, int], n: int) -> tuple[int, int, int, int]: | CODE |
| LOW | renpy/display/transform.py | 368 | def set_pos_from_angle_and_radius(self, angle, radius): | CODE |
| LOW | renpy/display/transform.py | 522 | def set_anchor_from_anchorangle_and_anchorradius( | CODE |
| LOW | renpy/display/video.py | 295 | def find_oversampled_filename(filename): | CODE |
| LOW | renpy/display/scenelists.py | 530 | def get_all_layer_tag_displayable( | CODE |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | renpy/revertable.py | 348 | CODE | |
| LOW | renpy/ui.py | 836 | CODE | |
| LOW | renpy/ui.py | 924 | CODE | |
| LOW | renpy/ui.py | 1242 | CODE | |
| LOW | renpy/preferences.py | 374 | CODE | |
| LOW | renpy/parser.py | 847 | CODE | |
| LOW | renpy/parser.py | 871 | CODE | |
| LOW | renpy/parser.py | 1237 | CODE | |
| LOW | renpy/parser.py | 1246 | CODE | |
| LOW | renpy/lexer.py | 1751 | CODE | |
| LOW | renpy/lexer.py | 1332 | CODE | |
| LOW | renpy/character.py | 342 | CODE | |
| LOW | renpy/character.py | 1406 | CODE | |
| LOW | renpy/statements.py | 37 | CODE | |
| LOW | renpy/test/testparser.py | 534 | CODE | |
| LOW | renpy/test/testparser.py | 567 | CODE | |
| LOW | renpy/test/testast.py | 382 | CODE | |
| LOW | renpy/test/testast.py | 743 | CODE | |
| LOW | renpy/update/common.py | 100 | CODE | |
| LOW | renpy/update/common.py | 117 | CODE | |
| LOW | renpy/update/common.py | 152 | CODE | |
| LOW | renpy/translation/generation.py | 419 | CODE | |
| LOW | renpy/sl2/slast.py | 687 | CODE | |
| LOW | renpy/sl2/slast.py | 1833 | CODE | |
| LOW | renpy/sl2/slast.py | 1849 | CODE | |
| LOW | renpy/sl2/slast.py | 1893 | CODE | |
| LOW | renpy/sl2/slparser.py | 656 | CODE | |
| LOW | renpy/exports/fetchexports.py | 284 | CODE | |
| LOW | renpy/exports/displayexports.py | 371 | CODE | |
| LOW | renpy/exports/displayexports.py | 1336 | CODE | |
| LOW | renpy/exports/menuexports.py | 202 | CODE | |
| LOW | renpy/exports/inputexports.py | 68 | CODE | |
| LOW | renpy/audio/webaudio.py | 59 | CODE | |
| LOW | renpy/audio/music.py | 36 | CODE | |
| LOW | renpy/audio/audio.py | 911 | CODE | |
| LOW | renpy/display/screen.py | 226 | CODE | |
| LOW | renpy/display/anim.py | 409 | CODE | |
| LOW | renpy/display/behavior.py | 860 | CODE | |
| LOW | renpy/display/behavior.py | 918 | CODE | |
| LOW | renpy/display/behavior.py | 1230 | CODE | |
| LOW | renpy/display/behavior.py | 1418 | CODE | |
| LOW | renpy/display/behavior.py | 1953 | CODE | |
| LOW | renpy/display/behavior.py | 2274 | CODE | |
| LOW | renpy/display/displayable.py | 655 | CODE | |
| LOW | renpy/display/movetransition.py | 457 | CODE | |
| LOW | renpy/display/transition.py | 466 | CODE | |
| LOW | renpy/display/transition.py | 812 | CODE | |
| LOW | renpy/display/dragdrop.py | 327 | CODE | |
| LOW | renpy/display/core.py | 2366 | CODE | |
| LOW | renpy/display/pgrender.py | 200 | CODE | |
| LOW | renpy/display/pgrender.py | 91 | CODE | |
| LOW | renpy/display/viewport.py | 77 | CODE | |
| LOW | renpy/display/motion.py | 61 | CODE | |
| LOW | renpy/display/motion.py | 439 | CODE | |
| LOW | renpy/display/motion.py | 603 | CODE | |
| LOW | renpy/display/particle.py | 665 | CODE | |
| LOW | renpy/display/module.py | 215 | CODE | |
| LOW | renpy/display/video.py | 616 | CODE | |
| LOW | renpy/display/imagelike.py | 202 | CODE | |
| LOW | renpy/display/scenelists.py | 350 | CODE | |
| 10 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | renpy/translation/__init__.py | 1222 | # Step 2: language subtag must be 2 or 3 alphabetic characters (ISO 639-1/2/3). | COMMENT |
| LOW⚡ | renpy/translation/__init__.py | 1227 | # Step 3: walk remaining subtags. Identify by shape, not position, so we're | COMMENT |
| LOW⚡ | renpy/translation/__init__.py | 1244 | # Step 4: infer region if missing. | COMMENT |
| LOW⚡ | renpy/translation/__init__.py | 1248 | # Step 5: handle script. Only Chinese commonly carries a script in practice, | COMMENT |
| LOW | renpy/translation/__init__.py | 1207 | # Step 1: strip BCP 47 extensions. Everything from "-u-", "-t-", or "-x-" | COMMENT |
| LOW⚡ | renpy/display/core.py | 2276 | # Step 1: Run gc. | COMMENT |
| LOW⚡ | renpy/display/core.py | 2281 | # Step 2: Push textures to GPU. | COMMENT |
| LOW⚡ | renpy/display/core.py | 2288 | # Step 3: Predict more images. | COMMENT |
| LOW⚡ | renpy/display/core.py | 2331 | # Step 5: Autosave. | COMMENT |
| LOW⚡ | renpy/display/core.py | 2339 | # Step 6: Persistent data. | COMMENT |
| LOW | renpy/display/core.py | 2309 | # Step 4: Preload images (on emscripten) | COMMENT |
| LOW | renpy/display/transform.py | 1050 | # NOTE: This function is duplicated (more or less) in ATLTransform. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | renpy/translation/__init__.py | 1222 | # Step 2: language subtag must be 2 or 3 alphabetic characters (ISO 639-1/2/3). | COMMENT |
| LOW⚡ | renpy/translation/__init__.py | 1227 | # Step 3: walk remaining subtags. Identify by shape, not position, so we're | COMMENT |
| LOW⚡ | renpy/translation/__init__.py | 1244 | # Step 4: infer region if missing. | COMMENT |
| LOW⚡ | renpy/translation/__init__.py | 1248 | # Step 5: handle script. Only Chinese commonly carries a script in practice, | COMMENT |
| LOW | renpy/translation/__init__.py | 1207 | # Step 1: strip BCP 47 extensions. Everything from "-u-", "-t-", or "-x-" | COMMENT |
| LOW⚡ | renpy/display/core.py | 2276 | # Step 1: Run gc. | COMMENT |
| LOW⚡ | renpy/display/core.py | 2281 | # Step 2: Push textures to GPU. | COMMENT |
| LOW⚡ | renpy/display/core.py | 2288 | # Step 3: Predict more images. | COMMENT |
| LOW⚡ | renpy/display/core.py | 2331 | # Step 5: Autosave. | COMMENT |
| LOW⚡ | renpy/display/core.py | 2339 | # Step 6: Persistent data. | COMMENT |
| LOW | renpy/display/core.py | 2309 | # Step 4: Preload images (on emscripten) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | launcher/game/change_icon.py | 391 | # There's already a header size, and this isn't changing headers, so just add. | COMMENT |
| MEDIUM | renpy/error.py | 98 | # TODO: Make it more robust by is_relative_to check. | COMMENT |
| MEDIUM⚡ | renpy/translation/__init__.py | 1228 | # robust against minor ordering oddities. First valid match per slot wins, | COMMENT |
| LOW | renpy/sl2/slast.py | 873 | # We do not want to pass keywords to our parents, so just return. | COMMENT |
| LOW | renpy/display/behavior.py | 622 | # If we have been drawn since the timeout, simply return | COMMENT |
| LOW | renpy/display/swdraw.py | 62 | # allows us to just return without having to do any cleanup | COMMENT |
| MEDIUM | renpy/gl2/live2d.py | 962 | # Handle seamless. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | renpy/config.py | 1495 | # Set this to true to log events to log.txt. | COMMENT |
| LOW | renpy/main.py | 496 | # Check if we should simulate android. | COMMENT |
| LOW | renpy/script.py | 516 | # Assign names to statements that don't have one already. | COMMENT |
| LOW | renpy/test/testparser.py | 882 | ## Check if we have another condition after this one | COMMENT |
| LOW | renpy/update/generate.py | 167 | # Write the filelist to a file. | COMMENT |
| LOW | renpy/display/layout.py | 666 | # Set this to true to force the box to adjust its children's times. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | renpy/minstore.py | 179 | __all__ = [ | CODE |
| LOW | renpy/compat/__init__.py | 132 | __all__ = [ | CODE |
| LOW | renpy/test/testexecution.py | 196 | def set_next_execution_node(next_node: Node | None) -> None: | CODE |
| LOW | renpy/test/testexecution.py | 404 | def update_suite_enabled_flag(node: TestSuite) -> None: | CODE |
| LOW | renpy/test/testexecution.py | 466 | def set_next_node(self, next: Node | None) -> None: | CODE |
| LOW | renpy/test/testexecution.py | 469 | def set_end_callback(self, callback: Callable | list[Callable]) -> None: | CODE |
| LOW | renpy/test/testreporter.py | 902 | def _update_assert_counters(self, outcome: BaseOutcome, status: OutcomeStatus) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | renpy/text/extras.py | 334 | # ============================================== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/unicode/LineBreak.txt | 1927 | B77D..B797 ; H3 # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | renpy/gl2/live2d.py | 655 | # Note: When adding new parameters, make sure to add them to _duplicate, too. | STRING |