Repository navigation
Releases: blankiekun/CONscripter
Releases · blankiekun/CONscripter
Release list
v0.33.0
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, thecons_index.json"zip" form and the cache sizes: PLATFORMS.md, "Web". - Web: lazily loaded games (
cons_index.jsonwithlazyload) 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
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
For games (converter output)
- Text tables:
^IDlines 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
*nametakes*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 forscreenshake,consset clickautostop/clickskipstopandselectkeepauto/selectkeepskip. setwindowin*defineholds after game and reset;textgosubgoes on with the rest of astring 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. --untiland--max-pagessave what quitting saves; trace output gains motion samples, effect times and unknown commands;--list-commandsprints the command table.
For players
- The language is remembered in
language.txt, and a language can have its own font (--fontcachenames 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:
endstarts 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
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).
spgrabcan grab the screen under a sprite (source -3);spmaskkeeps 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
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
chvolfadeandchfreqtake an optional ramp curve (#145).effectsoftform 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). Newspmotionclock, andspmotion num,2stops 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
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.
waitnow 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.
languagecommand: 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
For players
- Sprites are drawn exactly: fully opaque sprites no longer come out about 1 % darker.
lsp2now draws the last source column and row, so scaled sprites keep their edge.- Gamepad: the chosen layout, sticks and triggers work, a
padmapcommand 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
consNoTextOverlaywins), and_consResendTextresends the current text. spfilterkind 11: the grey of given weights.
Development
- CI now runs a pixel test of sprite drawing (
lsp,lsp2,spfilter, fade).
v0.28.0
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 oldcons_slide,zoom,flip,cube,meltandwaveplugins are retired, and their effects fall back to a cross-fade (#72). spwave(#76),sptraildrawn over its sprite (#83),spgrabof the screen as last shown (#100),spfilterlevels, overlay and dodge (#99), andscreenfilterslots after a sprite (#56).screenshakemode 2 with a curve (#79),effectcurve(#85), andwindowfade(#82).- A text outline tag,
!o#RRGGBB(#62). --filter: crt, pc98, gameboy, sepia, mono and vhs display filters (#68).
Saves
- Saves and
kidoku.datare 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
copysavegamenever 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_processscript stops that process, not the game (#96). gamespeednever scales a wait down to 0 (#97); skipping startsbgmfadeinmusic at full volume (#66).- An opaque WebP loaded with
:ais opaque (#55), U+2015 is drawn for SJIS 0x815C (#60), and a/after a backquoted string keeps the line open (#63).
Debug trace
v0.27.0
For games
- Motions:
spmotiontakes up to 64 keys.spmotionwaitwaits for a motion to end, fades fold into a sprite's motion (loop 3 takes inspfade), and turns go throughspzoom's angle. The new loop 4 plays once, then repeats from a chosen key: a lead-in, then a loop. - Pictures:
sptraildraws a trail behind a moving picture,spgrabcopies the screen or a sprite into a sprite, andspblendadds add, subtract, multiply and screen modes.spclipclips a picture's children. - Effects:
screenripplecan start at a chosen phase.bgm "file",mscross-fades from the track playing. - Sound:
chvolfadefades a channel's volume,chfreqchanges its pitch andchpanpans it.getbgmposgives how far through its pass the music is. - Script:
rgosub,bitandandbitor, andconsset/consgetfor the player settings. Luacons_processcoroutines 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-overlayoption, which also works inons_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 --diffcompares 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
For games
sprot num,degrees: turns anlspsprite about its centre in place among the sprites. Kept and reset likespzoom, kept bypushscreen, and stored in saves (save version 16). A loop-2spmotion2now leaves its last angle on the sprite.spfade num,-ms: fades a sprite out by itself while the script goes on, then removes it (anlspon 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;getlogrowgives 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. logrowsbreaks 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.spfadeis at once under--auto-play, which doesn't wait for the timer (fades never ended in a trace).