Commit Graph

  • f53279d065 The active tilemap layer can be renamed from the painting section, and a Show setting fades or hides the other layers in the scene view while the tilemap is selected (#138) adminandClaude Opus 5 2026-09-18 10:56:32 +02:00
  • bfbcbe604c The tile list in the tilemap section is a palette of pictures: each tile shows its lone tile (the four convex corners for floor and wall, the picture itself for none) with its name below, laid out with the image-picker grid (#139) adminandClaude Opus 5 2026-09-18 10:15:51 +02:00
  • 4c411c1ff3 Tilemaps can block movement: a tile gains a Solid switch, the solid cells of all layers are merged into rectangles and the placed tilemap takes part in the collision system as one body, reported as other in collision events (#132) adminandClaude Opus 5 2026-09-18 09:47:03 +02:00
  • 10b49fac46 Tilemap cells are stored compactly in the project file: each layer keeps a tile list, an origin and one run-length encoded string per row; older projects with a cell map still load (#134) adminandClaude Opus 5 2026-09-18 09:17:49 +02:00
  • 732f6518ae The autotile asset is renamed to tile and gains a plain None (1 × 1) kind, which is now the default; older projects load their autotiles as floor tiles (#131) adminandClaude Opus 5 2026-09-18 08:01:07 +02:00
  • a65132bb5a Scrolling content is narrowed by the scrollbar width while the scrollbar is shown, so it no longer sits under the bar adminandClaude Opus 5 2026-09-18 07:29:58 +02:00
  • 91cdaf95cc The panel frame is drawn above the content, so a hovered row no longer paints over the border adminandClaude Opus 5 2026-09-18 07:29:58 +02:00
  • 55bfa7521a The assets and scene objects panels in the left column are split by a draggable splitter that keeps its ratio when the window is resized adminandClaude Opus 5 2026-09-18 07:29:58 +02:00
  • 33a7b1b63e Tilemaps are a new placeable asset type that is painted with autotiles in the scene view, with layers, brush, eraser and rectangle, and is drawn at runtime and in the export (#128) adminandClaude Opus 5 2026-09-18 06:41:47 +02:00
  • 0607221423 Autotile floor tiles take their inner quadrants rotated by half a tile and their inner corners from the upper right block tile, matching RPG Maker MZ (#118) adminandClaude Opus 5 2026-09-17 22:28:11 +02:00
  • 1a9f07c4ac Autotiles are a new asset type with a tab that shows every tile of the floor (2x3) or wall (2x2) block and an animated sample pattern (#118) adminandClaude Opus 5 2026-09-17 21:35:29 +02:00
  • c17b2b5426 Plugins are switched on and off in a Plugins tab, the server keeps the state in data/plugins/plugins.json, and switched-off plugins are never delivered (#114) adminandClaude Opus 5 2026-09-17 20:15:51 +02:00
  • 57a97ba94f Plugins in data/plugins are loaded at startup and can add a tab with a read-only node board, and the demo plugin shows every asset as a node (#113) adminandClaude Opus 5 2026-09-17 19:00:03 +02:00
  • 2a390e52ff The scene view and the animation preview share one camera, the three form dialogs one base, and keys are found through one set of helpers (#85) adminandClaude Opus 5 2026-09-17 14:19:53 +02:00
  • bf02c9e8b3 Timeline keys can be copied and pasted at the playhead, duplicated with Ctrl+drag, and frames inserted or removed from a right-click menu (#102) adminandClaude Opus 5 2026-09-17 12:53:56 +02:00
  • 195fc94e08 Animations blend out on Stop and at the end of Once (reset), and Play can restart a running animation (#106) adminandClaude Opus 5 2026-09-17 11:50:10 +02:00
  • 8a377d9239 Play animation's blend is given in seconds, not in frames of the new animation (#106) adminandClaude Opus 5 2026-09-17 11:14:15 +02:00
  • 04dc254b3d Play animation can blend into the new animation over a number of frames (#106) adminandClaude Opus 5 2026-09-17 10:03:53 +02:00
  • beeea355d9 Animation rows can target behavior variables and shader parameters (#104) adminandClaude Opus 5 2026-09-17 09:04:29 +02:00
  • b278605c53 Keys carry an easing for the span to the next key: linear, step, ease in, ease out, ease in-out (#101) adminandClaude Opus 5 2026-09-17 07:27:44 +02:00
  • 4c92a9478f The animation tab's Fit frames the preview, and the separate Centre button is gone (#111) adminandClaude Opus 5 2026-09-17 07:12:21 +02:00
  • cc14988338 Ping-pong turns on the last key, and stepped rows hold the key they last passed (#112) adminandClaude Opus 5 2026-09-17 07:08:44 +02:00
  • f68941fa3a An animation reaches the scene's own background and objects inside placed containers (#109) adminandClaude Opus 5 2026-09-17 06:48:21 +02:00
  • 353b348c3c e2e module 25 drives the animation timeline and its preview with real gestures (#110) adminandClaude Opus 5 2026-09-17 06:16:40 +02:00
  • 89c1d6130c README: 928 editor checks, measured in CI-69 adminandClaude Fable 5.1 2026-09-16 21:31:50 +02:00
  • 35c87888b0 The list's kind check counts the animation kind, which is a row in the kind table since #97 adminandClaude Fable 5.1 2026-09-16 21:25:46 +02:00
  • 89c46c30a0 An animation is previewed above its timeline: the root at the playhead, drawn but never written (#99) adminandClaude Fable 5.1 2026-09-16 21:00:18 +02:00
  • 4ed2edd0f0 An animation is a value a graph can pick, and playing a running one makes it win again (#97) adminandClaude Opus 5 2026-09-16 20:47:31 +02:00
  • 5af0a1c83a An animation's rows are edited on a timeline: double click sets a key, keys are banded, dragged and deleted, the ruler scrubs (#98) adminandClaude Opus 5 2026-09-16 20:38:34 +02:00
  • 193378e6a9 An animation is a timeline of rows over one asset, played on an object rather than worn as a picture (#97) adminandClaude Opus 5 2026-09-16 20:02:25 +02:00
  • d3563897d8 Two compilers that walk a graph the same way walk it through one emitter (#85) adminandClaude Opus 5 2026-09-16 19:28:28 +02:00
  • bf0be66c9d A frame with borders tiles unless told to stretch adminandClaude Opus 5 2026-09-16 18:13:11 +02:00
  • 94a0a578ed A border drawn in pixels is as wide as the texture says a pixel is, so a small sheet can frame a large sprite (#96) adminandClaude Opus 5 2026-09-16 18:09:43 +02:00
  • cc6db5f350 Three stores, three importers and three pickers that differ only in their type are one of each (#85) adminandClaude Fable 5.1 2026-09-16 17:38:54 +02:00
  • 15bdfdf07a A gate that stands in front of the suite delays the news it carries, so it runs beside it (#94) adminandClaude Opus 5 2026-09-16 15:21:18 +02:00
  • 36ccc7626f A box drawn around a part of the graph is part of it, so a fit frames it and a band catches it (#95) adminandClaude Opus 5 2026-09-16 14:23:56 +02:00
  • be8f2331de A frame that keeps its corners can be stretched to any size (#41) adminandClaude Opus 5 2026-09-16 12:04:09 +02:00
  • b9f1a9d319 A graph that grew past one screen needs somewhere to say what a part of it is for (#38) adminandClaude Opus 5 2026-09-16 11:24:34 +02:00
  • 1135205d69 A machine that arrives as a value can still be commanded, so a name may name its state (#58) adminandClaude Opus 5 2026-09-16 09:08:57 +02:00
  • 7e5003b590 A test that waits for a deadline somebody guessed is waiting for the wrong thing, so it waits for the editor (#93) admin 2026-09-16 08:08:10 +02:00
  • c990dbcb26 A name that a sprite already owns cannot name a property, and a division by zero cannot answer (#63, #64) admin 2026-09-15 18:43:40 +02:00
  • 150f2e0906 A row scrolled out of its list is not on the screen, so no test may click it admin 2026-09-15 18:43:34 +02:00
  • 1e9d21cd5d A game that is more than one scene needs a way from one to the next, so the graph can load one (#39) admin 2026-09-15 13:24:26 +02:00
  • 30090fc48e A cap measured against the canvas needs a yardstick from the canvas, so the check stops carrying a number admin 2026-09-15 11:36:04 +02:00
  • 3b039384c4 A search that ignores what a thing is called is no search, so the name wins (#43) adminandClaude Opus 5 2026-09-15 10:21:20 +02:00
  • 5671a38044 A game that stays silent is only half a game, so a sound is an asset like any other (#45) admin 2026-09-15 07:54:28 +02:00
  • 7babf88636 A state change is something the graph can react to, so the machine announces it (#53, #54, #55, #57) adminandClaude Opus 5 2026-09-15 06:18:20 +02:00
  • bc57f61c91 A still editor has nothing to draw, so the frame loop wakes on change (#44) admin 2026-09-14 21:41:50 +02:00
  • 2637feb715 A square root is one node everywhere else, so the shader graph gets its own (#92) adminandClaude Opus 5 2026-09-14 19:35:00 +02:00
  • 80dd82349d The + menu holds fourteen types now, so scrolling one into view belongs to the scaffold (#91) adminandClaude Opus 5 2026-09-14 19:14:57 +02:00
  • 98fa9907fd A drop asks the area the pointer already uses, so a port at the very edge is still the node adminandClaude Opus 5 2026-09-14 19:14:57 +02:00
  • 8143130ed2 A shared value belongs to no behavior, so it becomes an asset of its own (#91) rootandClaude Opus 5 2026-09-14 18:05:36 +02:00
  • d1fcfe8b81 A shared value belongs to the run, so a declaration carries its scope (#91) rootandClaude Opus 5 2026-09-14 16:14:19 +02:00
  • 9027a86edd A behavior has rows of its own, so loading no longer drops Run in editor rootandClaude Opus 5 2026-09-14 16:13:40 +02:00
  • 68c92daaa6 A transition carries a name, so a state needs no visible port (#52) rootandClaude Opus 5 2026-09-14 14:03:09 +02:00
  • a041322a0e An edge to a vanished port needs a handle, so the port stays as a ghost (#60) root 2026-09-14 11:50:36 +02:00
  • d5e67cd80c A shader costs a source nothing, because a field was already one draw call (#88) rootandClaude Opus 5 2026-09-14 11:06:45 +02:00
  • 0e0a21dee1 One clock under everything that moves by itself (#90) rootandClaude Opus 5 2026-09-14 09:31:53 +02:00
  • 78baf0c719 A source wears an icon without becoming decoration (#89) rootandClaude Opus 5 2026-09-14 08:25:49 +02:00
  • 8ae20d044f Time is an argument, so speed scales it and a prewarm offsets it (#87) rootandClaude Opus 5 2026-09-14 07:31:07 +02:00
  • fbb2d157f0 A held preview is rebased, not paused, and it wears the asset's own rows (#86) rootandClaude Opus 5 2026-09-14 07:03:51 +02:00
  • 4feb4c2cf6 A step opens a tab the way a person has to, through the menu when it is hidden rootandClaude Opus 5 2026-09-14 07:03:40 +02:00
  • 0f9e1611d1 A particle is a function of its age, not a thing that is stepped (#73) root 2026-09-14 05:44:25 +02:00
  • f83c568999 Tab row: what does not fit goes behind a menu, the active tab always stays (#84) DeveloperandClaude Opus 5 2026-09-13 22:06:46 +02:00
  • e0c459ce92 Shader graph: Clamp is the Output's default edge, and the sheet's own mode is a constant of its own (#81) admin 2026-09-13 21:33:41 +02:00
  • 03c4323794 Image picker: tiles are containers, not graphics with children rootandClaude Opus 5 2026-09-13 21:17:26 +02:00
  • 4f240a50fd Texture tab: one masked container for everything the view moves (#82) rootandClaude Opus 5 2026-09-13 21:17:21 +02:00
  • fe036db8f2 Editor suite: 780 checks (#83) Developer 2026-09-13 20:50:52 +02:00
  • 0168d8fd7c CI shells: keep a project file that is already there Developer 2026-09-13 20:50:52 +02:00
  • 99c5d2ad78 Uploads carry the name the file came with (#83) DeveloperandClaude Opus 5 2026-09-13 20:32:45 +02:00
  • 86b5363a01 Fonts: a new asset type, picked from the server or dropped in, worn by text objects (#74) rootandClaude Opus 5 2026-09-13 20:09:59 +02:00
  • 28c0789b19 Shader graph: Abs node, the distance from 0 per channel rootandClaude Fable 5.1 2026-09-13 18:46:20 +02:00
  • a399795772 Shader graph: Pow node, base held at 0, exponent broadcast for colours (#80) rootandClaude Fable 5.1 2026-09-13 18:29:04 +02:00
  • 102a649a35 Shader library: fingerprint without node positions, a drag no longer recompiles (#65) rootandClaude Fable 5.1 2026-09-13 18:00:48 +02:00
  • 016e83c9b5 Transform: scale, rotation and mirror as properties, world transform as a matrix chain, oriented colliders (#76) rootandClaude Fable 5.1 2026-09-13 17:25:06 +02:00
  • f85606427b Shader graph: UV, Sample texture, Texture size, Time, Sin/Floor/Fract/Step; edge mode on Output (#78) rootandClaude Fable 5.1 2026-09-13 16:18:22 +02:00
  • 0e5e5ef925 Shaders draw in the sprite's own pass: a Mesh with the graph's fragment, no filter (#77) rootandClaude Fable 5.1 2026-09-13 15:31:08 +02:00
  • 82effb2c03 Shader performance: measure one filter pass per sprite (#67) rootandClaude Opus 5 2026-09-13 14:41:35 +02:00
  • 5c1c3c6fd6 Properties node: name each shader param by its shader (#66) rootandClaude Opus 5 2026-09-13 14:05:01 +02:00
  • 05f7a2745e Frames: cut each frame into its own GPU texture, no more fill matrix (#47) rootandClaude Opus 5 2026-09-13 13:25:49 +02:00
  • 06e1494f94 Textures: Linear/Nearest labels; prove the filter pass does not resample pixel art (#68) rootandClaude Fable 5.1 2026-09-13 12:53:21 +02:00
  • 3e99480b55 Actor smoke: measure the stop with two samples after key-up, not against a pre-screenshot probe rootandClaude Fable 5.1 2026-09-13 12:32:34 +02:00
  • ccc6dc5b6e Shader graph: Number node, a typed constant like Color (#72) rootandClaude Fable 5.1 2026-09-13 12:26:53 +02:00
  • 4d9c4982eb Asset panel: double-click opens the tab, single click only selects (#71) rootandClaude Fable 5.1 2026-09-13 12:10:21 +02:00
  • 3da0ef1be2 Shader graph: alpha input on Output, Texture alpha node (#70) rootandClaude Fable 5.1 2026-09-13 11:51:59 +02:00
  • b0c4b4ec5a Harness: print non-string check details as JSON rootandClaude Fable 5.1 2026-09-13 11:00:14 +02:00
  • db704105ed Remove pull-wiki.sh admin 2026-09-13 10:45:07 +02:00
  • e4f607d08a Add wiki to local repo admin 2026-09-13 10:35:16 +02:00
  • 3601cb716f README: 699 checks, measured on CI run 7 rootandClaude Fable 5.1 2026-09-13 00:05:53 +02:00
  • 69615c1f4b Tab row: fit nine tabs inside the centre column rootandClaude Fable 5.1 2026-09-12 23:09:30 +02:00
  • a32b7c6daa Adjust colors: brightness adds instead of multiplying (#62) rootandClaude Fable 5.1 2026-09-12 22:58:50 +02:00
  • 42cafa7543 Shader assets: graph-built shaders, the Shader tab and sprite rows from the graph (#62) rootandClaude Fable 5.1 2026-09-12 22:41:14 +02:00
  • 6141d07d4f Behavior lifecycle: On enable, On disable and On destroy events (#42) rootandClaude Fable 5.1 2026-09-12 21:21:35 +02:00
  • f0673d1957 Move the reference documentation into the wiki, keep the README short (#61) root 2026-09-12 20:42:20 +02:00
  • 79cd4152c8 Leave the full test run to CI rootandClaude Opus 5 2026-09-12 20:20:44 +02:00
  • 4f0908df77 Run the gate, the editor suite and the three games on the Gitea runner rootandClaude Opus 5 2026-09-12 20:01:45 +02:00
  • c47fd5e4dc Console panel: capture console.*, timestamped lines, resizable (#50) rootandClaude Opus 5 2026-09-12 19:35:40 +02:00
  • e7d82bd1a9 State machines: asset, tab, State branch and Set state nodes (#51) rootandClaude Fable 5.1 2026-09-12 18:00:23 +02:00
  • ce42d16657 Refactor round 2: fold duplicated command and inspector code rootandClaude Fable 5.1 2026-09-12 16:33:24 +02:00
  • 6471671f7d Refactor round: ship web/index.html, drop the remote browser, fix stale comments and README rootandClaude Fable 5.1 2026-09-12 15:44:05 +02:00