npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

sci2-ts

v0.19.0

Published

An SCI2 adventure game engine in TypeScript, and the tools to make games with it

Readme

sci-ts

An engine for Sierra's SCI2 adventure games, written from scratch in TypeScript, and the tools to make new games with it: scripts in SCI's own Lisp-like language on a class library of our own, rooms written as YAML and Yarn, a live editor, and writers for every kind of resource.

A conversation in games/hello: the traveller's portrait beside his line

It runs in the browser and in Node. It was built by making one game, Quest for Glory IV: Shadows of Darkness (CD), play from its title screen on, and it now builds games that need nothing from Sierra: games/hello here, and a Sherlock Holmes teaser in progress.

No game data here. This repository contains no files, scripts, art, text or music from any Sierra game, and none are needed to build, test or use it. To play a Sierra game, point the tools at your own copy. Sierra, Quest for Glory and other names are trademarks of their owners and are used only to say what the software works with.

Make a game

mkdir night-walk && cd night-walk
npm init -y && npm install --save-dev sci2-ts
npx sci-ts new .          # a room in YAML and Yarn, a hero, placeholder art
npx sci-ts play           # build it and play it in the browser
npx sci-ts edit           # the live editor for its rooms

A game is a folder: scripts (scripts/<n>.sc), rooms as data (rooms/<n>.room.yaml and .yarn), message files, music (MIDI files), sound effects (WAV files), and art drawn in code or exported from a paint program. sci-ts build turns it into the RESOURCE.MAP and RESOURCE.000 an SCI interpreter opens. See docs/games.md.

(instance lantern of Prop
  (properties noun N_LANTERN view 100 x 160 y 172 cycleSpeed 12)

  ;; It chimes when touched, then says its line.
  (method (doVerb verb)
    (if (== verb V_DO) (sfx number: 50 play:))
    (super doVerb: verb)))

games/hello: the hero beside the lantern on the moonlit hill

| | | |---|---| | docs/games.md | a game's folder, the build, the sci-ts command and the package's imports | | docs/language.md | the script language | | docs/library.md | the class library: rooms, actors, walking, talking, conversations, flags, sound | | docs/rooms.md | rooms as YAML and Yarn: features, exits, characters, topic menus, cutscenes | | docs/art.md | art from a paint program: the manifest, the palette, the checks |

The tools

The player plays a game in the page: saved games, a link to any room (play.html#room/2), music through a SoundFont or an emulated AdLib card.

A topic menu: talking to the traveller

The live editor shows a room's YAML and Yarn, or its script, next to the running game. Saving (or a pause in typing) rebuilds the game and walks into the room again; errors are marked on their line. Outlines name the features, exits, props and walkable floor; in Move mode things are dragged into place and floors painted with a brush, as edits to the YAML.

The editor with a room written as YAML

The editor with a room written as a script

The resource viewer lists every resource with a thumbnail and the name the game's scripts give it, searchable, with a player for sounds.

The resource viewer: the hero's walking loops

The explorer maps a game's rooms and how they connect, its classes and objects, and inspects a running game.

The explorer's room map

On the command line: sci-ts build, play, edit, new, site (the game and its docs as a static site) and art (check and build exported art). The compiler warns about sends no class defines; editors/vscode highlights the language in VS Code.

Inside

| | | |---|---| | packages/sci | the engine: resources, the SCI2 virtual machine and its kernel, graphics, text, motion, sound, saves; readers and byte-exact writers for every resource; the script compiler and assembler | | packages/content | the room compiler: YAML and Yarn to scripts and messages | | lib | the class library, in the script language | | apps/viewer | the player, editor, resource viewer and explorer | | tools | the sci-ts command, the game build, the art tool, and tools for reading SCI2 games | | games/hello | the example game |

How SCI works, as far as we found out by running a game: docs/sci.

Developing sci-ts

pnpm install
pnpm check                 # typecheck and tests; no game files needed
pnpm game build games/hello
SCI_GAME=out/games/hello pnpm viewer

With an SCI2 game of your own in original/ (or SCI_GAME=<dir>), pnpm viewer opens it, and pnpm res, pnpm asm, pnpm msg and pnpm play read, disassemble and run it.

See docs/plan.md for where this is going and CONTRIBUTING.md for how to help. Changes are in CHANGELOG.md, generated from commit messages.

License

MIT. See LICENSE.