Skip to content

Releases: blankiekun/CONscripter

v0.33.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 16:37
15f6279

For players

  • Web: big games start without downloading everything first. The page reads a packed build (arc.nsa, .ns2, .sar), a zip of a loose build, or an archive stored in a zip (zip -0) by HTTP Range, fetching only the parts a scene opens (Full Metal Daemon Muramasa, 3.2 GB: about 35-70 MB to the title). A server without Range support gets whole files, as before. Layouts, the cons_index.json "zip" form and the cache sizes: PLATFORMS.md, "Web".
  • Web: lazily loaded games (cons_index.json with lazyload) no longer break on folders.

Internal

  • tests/web/range.py plays a small game in seven layouts; web_run.py serves Range (--no-range), counts bytes per file and times the run to a label (--until-label).

v0.32.1

Choose a tag to compare

@github-actions github-actions released this 23 Oct 02:13
01278b1

Patch release on 0.32.0; no new commands, saves unchanged.

For players

  • Web: text tables no longer overflow the 64 KB web stack (the text-table read buffer is on the heap); the web stack is 1 MB with an overflow check, and builds enforce a 16 KB frame limit.

Internal

  • The web smoke test plays a text table; web_run.py mutes audio. update_site opens a PR on the site (its main is protected).

v0.32.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 01:05
14da6e5

For games (converter output)

  • Text tables: ^ID lines are filled from a per-language table; labels in table lines are counted; the language switches text tables and asset layers at run time.
  • Label variants: a jump to *name takes *name@<language> when it exists.
  • New: spmotionadd (a second, composing motion per sprite), spmotionclock num,-ms, spfadeto (masked fade between any two levels), a start-delay argument for screenshake, consset clickautostop/clickskipstop and selectkeepauto/selectkeepskip.
  • setwindow in *define holds after game and reset; textgosub goes on with the rest of a string after its@`.
  • Nitroplus NPA archives are read in place (cons_archives.txt: byte ranges of the game's files, XOR keys); zlib-compressed NPAs are inflated in place.
  • --until and --max-pages save what quitting saves; trace output gains motion samples, effect times and unknown commands; --list-commands prints the command table.

For players

  • The language is remembered in language.txt, and a language can have its own font (--fontcache names the cached font after its own copy).
  • Saves: the CONS block of older builds (version 18 on) is read.
  • Global data is written at waits on every platform and before a pause; on the web the page also writes it when hidden, and the engine starts once the saves are read from IndexedDB.
  • Web: end starts the game over instead of a black page; 4 GB heap, phone meta, stock page fixes.
  • Weaker devices: big pictures fail soft, SIMD, duplicate frames skipped. macOS decodes WebP with libwebp.
  • No crash at exit (parallel workers are joined before SDL_Quit).

Internal

README split into README, BUILDING and PLATFORMS; ONScripter_cons.cpp split; web smoke test mutes audio and starts the page twice in one profile.

v0.31.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 16:34
fc03eaf

CONscripter 0.31.0

Games built for earlier versions need rebuilding with converter 0.7.0 (save block version 31).

  • Characters the game font lacks are drawn from a fallback font (fallback.ttf).
  • spgrab can grab the screen under a sprite (source -3); spmask keeps a mask fixed on the screen while the sprite moves.
  • Web: the file and label logs (filelog, labellog) are kept.
  • Debug trace: wait and delay events are recorded as they end.

v0.30.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 05:16
11bc1f8

CONscripter 0.30.0

Minor release: new script behaviour. Games built for 0.29 keep working; rebuild with converter 0.6.0 to use the new effects.

For games

  • chvolfade and chfreq take an optional ramp curve (#145).
  • effectsoft form 1: Full Metal Daemon Muramasa's soft-edge wipe; a masked effect now runs as a threshold sweep with a soft band (#146).
  • spmotion: zoom and angle move in 1/100 steps between keys, so slow zooms and turns are smooth (#147). New spmotionclock, and spmotion num,2 stops where the sprite is.
  • --real-time: effects and delays run for their real time, unclicked.

For players

  • Web: no more crash on the second start (kidoku.dat was read through a 64 KB stack buffer) (#148).

Tooling

  • Trace: frames presented, --trace-perf, --dump-frames, --trace-layers (drawing order of each print or effect), a web runner; a motion's start records which spmotionclock started it.
  • Roundtrip compares spmotion keys and Lua state; the save version is in the meta.
  • Kobo CI hardened.

v0.29.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 22:48
6403c50

For players

  • Opus sounds are decoded as they play instead of whole on loading (less waiting, less memory).
  • Blur (spfilter) no longer stalls when a new filter is set, and runs row by row (much faster); filter levels are computed on sRGB-decoded values (kinds 12-14).
  • Redraws are cheaper: the whole screen is redrawn only for sprites drawn outside their place.
  • Movies shown as pictures keep playing during an effect.
  • macOS: one universal binary (static ports) for macOS 10.13+; see the README for its unsigned first start.

For game scripts

  • Click-skip: a click that ends a delay or effect also skips the next ones.
  • wait now ends in skip mode, still not by a click.
  • spclip: a feather can fade the sprite in from the rectangle's edges, or from a colour (a soft frame).
  • seldisable: choice options shown greyed and not selectable.
  • Screens: the save-slot hover picture under the thumbnail; a tab opened from a held screen keeps its thumbnail shot.
  • language command: the web page is told the text's language.
  • UTF-8 scripts are laid out like Shift-JIS ones; kinsoku works.

Ports

  • New libretro cores: 3DS (.3dsx, drawn at most 400 pixels wide), Wii U (.rpx), PS Vita (.self), Miyoo Mini (.so), Switch (.nro); the cores decode WebP pictures and pick a default encoding when the frontend does not answer.

Build and testing

  • Web smoke test: a test game is played in headless Chrome in CI.

v0.28.1

Choose a tag to compare

@github-actions github-actions released this 17 Oct 18:04
362844a

For players

  • Sprites are drawn exactly: fully opaque sprites no longer come out about 1 % darker.
  • lsp2 now draws the last source column and row, so scaled sprites keep their edge.
  • Gamepad: the chosen layout, sticks and triggers work, a padmap command remaps buttons, and held sticks and triggers are released when the pad is unplugged.

For games and web builds

  • Web text overlay can be switched at run time (the page's consNoTextOverlay wins), and _consResendText resends the current text.
  • spfilter kind 11: the grey of given weights.

Development

  • CI now runs a pixel test of sprite drawing (lsp, lsp2, spfilter, fade).

v0.28.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 16:33
1bf12cd

Converted games built after v0.27.0 need this release: their menus use screen, windowfade and the other commands below, and stay on a black screen with v0.27.0.

Screens drawn by the engine

  • screen "name" draws a whole menu from a Lua table (#70): save and load slots (#71, #87), settings with sliders, toggles, radios and pages (#74, #78, #80, #86, #98), the backlog as a list or as rows (#75, #88, #103, #107), a gallery with a viewer, item lists and tabs (#77, #91), animated images (#101), outlined text (#104), and widgets shown only while a variable holds a value (#105).
  • Fades, open and close motions, and dialogs over a screen (#81); a closed screen can stay on show until the script's next print (#93).
  • The backlog can hide the voice of a character the player switched off (logvoice, voice_off, #103).

New commands and effects

  • Variables and sprites by name: defvar, defstr, defarr, spnew, spfree (#64); saves keep text sprites on those handles (#84).
  • Transitions through warp maps (cons_warp.dll, #67, #69). The old cons_slide, zoom, flip, cube, melt and wave plugins are retired, and their effects fall back to a cross-fade (#72).
  • spwave (#76), sptrail drawn over its sprite (#83), spgrab of the screen as last shown (#100), spfilter levels, overlay and dodge (#99), and screenfilter slots after a sprite (#56).
  • screenshake mode 2 with a curve (#79), effectcurve (#85), and windowfade (#82).
  • A text outline tag, !o#RRGGBB (#62).
  • --filter: crt, pc98, gameboy, sepia, mono and vhs display filters (#68).

Saves

  • Saves and kidoku.dat are found by label, line and line hash, so they survive script edits (#65).
  • Saves are written to a temporary file and renamed over the old one (#90). A file without a save header is refused (#92), and copysavegame never deletes its target (#89).
  • Music played once before the next part (bgmlater) plays again after a load (#102).
  • CONscripter's save data is now version 28. A save from an older version loads without it (filters, screens and other CONscripter state are left out).

Fixes

  • Label lookups use a hash map, which speeds up big scripts (#94). Startup no longer crashes on bad options or long names (#95).
  • An error in a cons_process script stops that process, not the game (#96).
  • gamespeed never scales a wait down to 0 (#97); skipping starts bgmfadein music at full volume (#66).
  • An opaque WebP loaded with :a is opaque (#55), U+2015 is drawn for SJIS 0x815C (#60), and a / after a backquoted string keeps the line open (#63).

Debug trace

  • A virtual clock under dummy video, and --shot-at with an added delay (#53).
  • --audio-stats and sound records (#57, #58, #59), a stale archive warning (#52), --goto runs *start's setup first (#54), and --trace-ignore lists add up (#73).

v0.27.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 23:46
ab7d647

For games

  • Motions: spmotion takes up to 64 keys. spmotionwait waits for a motion to end, fades fold into a sprite's motion (loop 3 takes in spfade), and turns go through spzoom's angle. The new loop 4 plays once, then repeats from a chosen key: a lead-in, then a loop.
  • Pictures: sptrail draws a trail behind a moving picture, spgrab copies the screen or a sprite into a sprite, and spblend adds add, subtract, multiply and screen modes. spclip clips a picture's children.
  • Effects: screenripple can start at a chosen phase. bgm "file",ms cross-fades from the track playing.
  • Sound: chvolfade fades a channel's volume, chfreq changes its pitch and chpan pans it. getbgmpos gives how far through its pass the music is.
  • Script: rgosub, bitand and bitor, and consset/consget for the player settings. Lua cons_process coroutines run once a frame, and the Lua state is kept in saves.
  • Saves: the save version is now 21. Saves from older versions load without their CONscripter data.

For players

  • Web: the new --no-text-overlay option, which also works in ons_args, stops the page's selectable text layer.
  • Fixes: the screen is presented once before the engine waits, not at every flush. On e-ink devices (Kobo), motions end at once.

For debugging

  • The trace records motions with their keys, a start, an end and why they ended (ran out, cut short, stopped, replaced). It also records screen shakes and quakes. Sprite records carry the motion, clip and blend.
  • cons_trace_check.py --diff compares sprites by their motion, so the same motion sampled at another time is not reported as a difference.
  • Bug reports through "Fix with Claude": the session reaches the Discord channel, encrypted between jobs.

v0.26.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 03:47

For games

  • sprot num,degrees: turns an lsp sprite about its centre in place among the sprites. Kept and reset like spzoom, kept by pushscreen, and stored in saves (save version 16). A loop-2 spmotion2 now leaves its last angle on the sprite.
  • spfade num,-ms: fades a sprite out by itself while the script goes on, then removes it (an lsp on it ends the fade; saves leave it out).
  • spcut num,"mask",x,y: cuts a hole in a sprite's picture where the mask is dark (a bullet hole at the pointer).
  • logadd "text"[,"voice"]: adds a page to the text history without showing it; getlogrow gives the voice.
  • autooff: leaves auto mode.

For players

  • A click while text types shows the rest of the page up to its click wait, not only the rest of the script line (a page written over several lines took one click per line).
  • A choice or menu (btnwait) ends auto mode as it ends skip.
  • logrows breaks half-width text at the space before a word that doesn't fit, not inside the word.

Testing

  • --checkpoint-start (with --goto): one checkpoint at the label before any of it runs, so the loaded save plays the whole scene, effects and all.
  • spfade is at once under --auto-play, which doesn't wait for the timer (fades never ended in a trace).