Odyc.js – A tiny JavaScript library for narrative games

219 achtaitaipai 49 6/6/2025, 1:46:01 PM odyc.dev ↗

Comments (49)

socalgal2 · 21h ago
Why is the title '...for narrative games'? The library's front page itself doesn't say anything about 'narrative' games.

For that matter, what is a "narrative game". None of the sample games would fit the definition in my head of "narrative game". If I google for "narrative game", the sample games certainly don't seem to fit.

And, assuming there is a common definition of "narrative game", what does this library do special to facility making "narrative games" that other game engines do not?

90s_dev · 20h ago
I was kind of hoping it would be for text based adventures,

since last night I had the idea for one,

where you're an adult and you have to do adult things

like file taxes and go to work and dust your house

and the less you do these things the harder life gets,

but the more you do them, the easier it gets,

and the goal of the game is to die with no debt.

hombre_fatal · 20h ago
You've got an idea. Now for the hard part: make it fun. :D Especially in a text-only medium.
90s_dev · 19h ago
My only plan for that was to add shadertoys effects to the text. Not great hence I hadn't started.
hombre_fatal · 18h ago
Speaking of, check out this shader ascii text game I saw on Steam: https://www.youtube.com/watch?v=dfe3VK7H6uI

I kind of love the look.

Maybe with a new set of ansi escapes we can get Zork to look like that. :D

nihiven · 16h ago
That is cool! I like the look of this one too: https://andreifomin.itch.io/effulgence
hombre_fatal · 14h ago
Ooh, that's actually the game I had in mind!

It's so much more impressive. Those 3D effects are just insane. Just look at that 3D globe.

NetOpWibby · 4h ago
That’s sick af
90s_dev · 17h ago
That is really cool and inspires me and makes me want to play it and make stuff like it, thanks for showing it to me. I really do live under a rock it seems.
spencerflem · 12h ago
Ink language & their IDE make it very easy to get started with choice games ! And it exports to HTML/Js where you can add further visual effects via custom JavaScript.

Highly reccomend, its so good that it takes all the fun out of designing my own janky custom system.

shakna · 11h ago
Unfortunately Inky has a showstopping bug I and a few others have hit. [0]

And it breaks the IDE until you somehow uninstall it and every dependency. And kill all its temporary files.

[0] https://github.com/inkle/inky/issues/522

spencerflem · 9h ago
Awww, rip. Hadn't hit that one while I was playing with it.
90s_dev · 11h ago
Thanks for the recommendation, I never would have guessed someone made something like this! But of course they did.

I was definitely wondering how I would do this outside of Excel, but I have so many projects going on right now that figuring this one out didn't sound fun :D

dunham · 10h ago
There is also twinery or inklewriter for simple text stories with an online authoring option. And Inform7 for full on text adventures, where you write the stories in a declarative manner as plain english.

https://twinery.org

https://inklewriter.com

https://ganelson.github.io/inform-website/

spencerflem · 8h ago
I like squiffy as well, though its not as popular or elegant. Possibly just nostalgia.

& Evennia is very cool if you want to make a multiplayer one!

One of these days I'll try out Inform7 it seems so cool but haven't had an idea for a game that could use it yet

hombre_fatal · 19h ago
I think the idea is that it gives you a declarative way to build simple adventure games with text and dialogue.

Its selling point isn't for building mechanics-first games like a more general engine (e.g. Pico-8).

But what you can do is easily make maps, a character that walks between maps, NPCs, and triggers for dialogue/text.

Consider other engines aimed at non-programmers like RPGMaker: the main games people make with it are "narrative games" where you walk around and read text/dialogue, usually with zero additional mechanics outside of the built-in map + trigger system. It's probably 90% of games built with it!

So I'd reckon they're saying "you can build those games with this tool too".

RodgerTheGreat · 13h ago
A closer comparison than Pico-8 might Bitsy or PuzzleScript, but with all the power (and complexity) of arbitrary JavaScript code underneath.
dicytea · 17h ago
From the intro[^1]:

> Odyc.js is a tiny JavaScript library designed to create narrative games by combining pixels, sounds, text, and a bit of logic.

[^1]: https://odyc.dev/doc/getting-started/intro

SamBam · 21h ago
Indeed, I was assuming it was a text adventure engine.
achtaitaipai · 20h ago
You're right, there are only two more "narrative" examples accessible via the French version of the site. I used the term because the turn-based structure and focus on messages, prompts, and dialogues felt suited to narrative or text-driven games, but maybe that’s not the best label. Happy to rethink it!
WorldMaker · 20h ago
"ZZT-like" would be the adjective/genre descriptor I'd use for this. It's a slowly forgotten genre these years (unlike "Rogue-like" and "Rogue-lite" you see being thrown around everywhere), but a classic genre of the early PC nonetheless.

https://museumofzzt.com/

achtaitaipai · 15h ago
I didn’t know about ZZT, but that makes a lot of sense now that I’ve looked into it. The format, simplicity, and screen-by-screen feel do seem closely related. Thanks for the reference. That museum is a great find!
WorldMaker · 13h ago
I recall Anna Anthropy's book on ZZT doing a great job of capturing the feel of the early PC ZZT scene and some of its AOL/CompuServe/Prodigy communities in the early 90s. Might serve as other bits of inspiration, if you like short history books: https://www.amazon.com/Boss-Fight-Books-Anna-Anthropy/dp/194...
socalgal2 · 14h ago
Was just curious if I was missing something that facilitated "narrative games" more than other engines.

It's a cool project. I like that your examples use ASCII maps. So simple to prototype. No need to break out a map editor.

kevinsync · 21h ago
chrisweekly · 21h ago
TheGoodBarn · 7h ago
reminds me of braid, very satisfying
mNovak · 19h ago
John Wick is an accurate summary of the recent movie

https://achtaitaipai.github.io/odyc-exemples/games/john-wick...

c0nfused · 21h ago
I really enjoy the way this is put together. I have written a number of javascript game engines, to play with over the years, and this hit a really nice spot between, I need to throw this whole thing to gether in the next 2 hours to entertain the kids, and the subsequent I really want to do a deep dive into the nitty gritty of this thing.

Looking forward to slapping a few quick games into this and distract the kids in a low bandwidth type style.

NotAnOtter · 20h ago
Neat little thing. Feels like a great learning tool for kids, like a new age pygame.

Scratch and the others in that style always felt like it went one step too far. It's designed for 5 yearolds, and 5 yearolds don't need to be learning about code.

This is a good sweetspot for a ~10 year old. Reasonably simple string manipulation , a couple of syntax tricks to learn, and not much else. Just to get a basic side scroller with some NPC's. Then they can incorporate control flow when they are ready.

Consider releasing a class for kids on this tool & investing in the playground. You could get some real sales.

A different angle, you could do some basic procgen game assets with this tool.

fudged71 · 21h ago
game.prompt("Dude, you ran out of eggs!|Would you like to buy|an 80 pack of eggs?", "Yes", "No");
achtaitaipai · 20h ago
await game.openDialog("Dude, you ran out of eggs!|Would you like to buy|an 80 pack of eggs?") game.prompt( "Yes", "No")
gatopingado · 17h ago
That one egg was forty eggs?
matkurianski · 12h ago
That's a truly inspiring project, thanks for sharing!

I noticed it's open source but is missing a license. Could you add one so developers can understand to what extent they can modify and publish their forks?

For example, it occurred to me that I could translate it into my native language and publish a fork of it (with credits, of course), since less than 5% of my country speaks English. Would that be okay with you?

achtaitaipai · 6h ago
Ohh thank you, I’d be thrilled! I’ll add an MIT-style license a bit later today. What’s your native language? Right now it’s fairly easy to add translations to the site for left-to-right languages.

In any case, feel free to fork, send a pull request, or reach out if you'd like to help make it more accessible!

sciolizer · 18h ago
Reminds me of [puzzlescript][1].

[1]: https://www.puzzlescript.net/editor.html

achtaitaipai · 6h ago
PuzzleScript is super cool! I also really like crisp-game-lib, in the same family of tiny engines
hahahacorn · 21h ago
This is amazing and exactly what I needed as of ~12 hours ago.

The coincidence is kinda insane though - quick personal story I think is worth a readers time. I was just working on assets to develop a very quick (3-levels, built for one person) narrative romance game until I fell asleep last night. I’ve never developed any game of any kind.

I then wake up to a JS library for narrative games at the #1 spot on HN.

FTR the game is a simp game I’m using it to ask someone I’ve been seeing to make things official.

janoelze · 12h ago
its a thoughtful idea – and been there too, just recently did a faithful html recreation of the 2005 MSN chat interface to surprise someone with teenage nostalgia. it was sweet.
achtaitaipai · 20h ago
Love the idea! Wish I could’ve helped out sounds like the perfect use case :) Hope it works out!
nartho · 21h ago
If it's worth anything, this sounds very sweet and thoughtful, I don't think enjoying someone's company makes you a "simp" neither does showing attention.
hahahacorn · 20h ago
Text doesn’t translate it well but that’s just my sarcastic sense of humor :)

I love trying and going a bit overboard because life is short and sweet and it’s your responsibility as a human to make it fun.

I do appreciate this comment though. I personally know a lot of my peers would be made better by internalizing your belief - I’m just not one of them :)

navs · 13h ago
Not related to the library at all, but I'm curious how that canvas video recorder works in the playground. Love to implement something similar.
janoelze · 12h ago
I recently looked into that for a project and was surprised that it's a built-in feature! :) https://medium.com/@amatewasu/how-to-record-a-canvas-element...
eldog_ · 21h ago
Great use of typing in the editor, e.g., I like how it knows the references to template sprites so it can highlight the errors when calling functions with incorrect arguments.
achtaitaipai · 21h ago
Thanks! I put a lot of effort into the typing and getting the editor autocomplete to feel right. Happy to hear it shows :)
ryoshu · 19h ago
I love this. Fits with a side project perfectly!
wdiamond · 13h ago
awesome product. scratch like business.