**Language / Langue :** [[fr:editeur:linter-export|FR]] | **EN** ====== Graphical editor - Linter and export ====== ===== Built-in linter ===== The linter analyses your scenario as you work and reports errors and warnings. **Running it:** the **Linter** button (🔍 icon) in the toolbar, or ''Ctrl+Shift+L''. **Kinds of messages:** * 🔴 **Error** - a blocking problem (missing variable, wrong syntax, dead end) * 🟡 **Warning** - a possible problem (unreachable room, unused variable) * 🔵 **Info** - a suggested improvement **Errors detected, among others:** * Variables used but never declared * ''trigger_event:'' identifiers that do not exist * Rooms with no exit (dead ends) * Conditions with invalid operators * Timers started but never stopped * A choice with neither ''button:'' nor ''command:'': no button appears and the player cannot type anything * A global timer declared without ''id:'', which the engine would ignore * A video link that does not point to one precise video (a channel page or a playlist) The label of a choice is written ''button:''. Written ''text:'', the choice keeps its destination but shows no button: the room looks like a dead end. The linter reports it and names the expected key. **Platform warnings.** With a Discord or Terminal profile, the report adds the incompatibilities of that platform, with their location: more than 25 options in a room, a label longer than 100 characters, or a media file Discord cannot reach publicly. Clicking an error opens the matching room in the inspector. For an undeclared variable, the click leads to the place that uses it; when it is used in several places, a window lists them with their kind of usage. ===== Test button ===== The **Test** button starts a game right inside the editor, without going through Discord. A game window opens, running the full engine. It lets you check conditions, the order of events, timers and the HUD, exactly as if you were playing in the browser. ===== Export ===== **YAML export** generates a ''.yaml'' file the engine can read. **Standalone HTML5 export** generates a ZIP ready to be hosted or uploaded to itch.io as an HTML5 game. * Self-contained JS runtime: it runs on its own, with no JDR-Bot backend * Clean slug based on the file name (a ''jdrbot-'' folder inside the ZIP) * Automatic local resume, with progress restored on the browser side * Online variables converted into persistent local variables * Assets sorted as embedded, external or missing, with automatic remapping * UTF-8 export, so accented text displays correctly **PDF gamebook export** generates a PDF with numbered chapters, cross-references, a tracking sheet and editable fields, playable on paper like a choose-your-own-adventure book. Both exports include every asset, sounds and images, referenced by URL in the scenario. A hosted video stays online instead: see [[en:yaml:medias|Sounds, images and videos]].