{"id":23138779,"url":"https://github.com/triptych/sadako","last_synced_at":"2026-01-19T16:31:41.117Z","repository":{"id":66487627,"uuid":"280047615","full_name":"triptych/sadako","owner":"triptych","description":"Sadako is a javascript library for creating web based interactive fiction. The library uses its own scripting language based on concepts pioneered by Twine and Ink.","archived":false,"fork":false,"pushed_at":"2020-05-30T01:57:15.000Z","size":69920,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-04T10:11:08.495Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/triptych.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-16T03:54:34.000Z","updated_at":"2021-08-22T23:30:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"e2247963-6b7a-472a-b0b0-8755972455ae","html_url":"https://github.com/triptych/sadako","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/triptych/sadako","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/triptych%2Fsadako","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/triptych%2Fsadako/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/triptych%2Fsadako/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/triptych%2Fsadako/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/triptych","download_url":"https://codeload.github.com/triptych/sadako/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/triptych%2Fsadako/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28574303,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T16:29:19.148Z","status":"ssl_error","status_checked_at":"2026-01-19T16:29:17.772Z","response_time":67,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-17T13:11:43.052Z","updated_at":"2026-01-19T16:31:41.101Z","avatar_url":"https://github.com/triptych.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sadako\r\n\r\n## Engine Description\r\n\r\nSadako is a JavaScript library for creating hyperlink-based interactive fiction similar to [Twine](https://twinery.org/), [ChoiceScript](https://www.choiceofgames.com/make-your-own-games/choicescript-intro/), and [Ink](https://www.inklestudios.com/ink/). Sadako is my attempt at merging Twine-like markup and Ink-like choice trees into a cohesive scripting language that I call *Sadako script*. \r\n\r\nThe engine itself is designed to be customizable enough that it can produce anything from a standard Twine-like game, to a visual novel, to a dialogue system to be placed inside another game framework\r\n\r\n## Name Origin\r\n\r\nThe engine is named after one of my favorite things, which is japanese horror. I love Ringu and Juon, so I chose Sadako as the main engine, and I thought it'd be humorous to have Kayako as the compiler. Sadako vs Kayako. Yes, I'm a dork.\r\n\r\n## Documentation\r\n\r\n* [Getting Started](getting-started.md): A guide on how to setup an HTML page for use with Sadako.\r\n\r\n* [Sadako Script Reference](reference.md): A reference and guide on how to use Sadako script, the scripting language developed for Sadako.\r\n\r\n* [JavaScript Reference](javascript_reference.md): The reference for Sadako specific JavaScript functions and variables.\r\n\r\n## Game Demos\r\n\r\n### [Rainy Day](https://tayruh.github.io/rainy_day/)\r\nA simple demo of Sadako in action. You can find its commented source code [here](https://github.com/Tayruh/tayruh.github.io/tree/master/rainy_day).\r\n\r\n### [Monster](https://tayruh.github.io/monster/)\r\nThis is the first chapter of my game project and serves as a more complex demo. Its source code is [here](https://github.com/Tayruh/tayruh.github.io/tree/master/monster).\r\n\r\n[![monster screenshot](https://github.com/Tayruh/sadako/blob/master/screenshot.png \"View monster demo\")](https://tayruh.github.io/monster/)\r\n\r\n### [Visual Novel Demo](https://tayruh.github.io/visual_novel)\r\nFor an example of how customizable Sadako is, I have written a simple visual novel example. The source for it is [here](https://github.com/Tayruh/tayruh.github.io/tree/master/visual_novel).\r\n\r\n[![visual novel screenshot](https://github.com/Tayruh/sadako/blob/master/vn.jpg \"View visual novel demo\")](https://tayruh.github.io/visual_novel)\r\n\r\nThe demo currently uses images from [Higurashi no Naku Koro ni](https://store.steampowered.com/app/310360/Higurashi_When_They_Cry_Hou__Ch1_Onikakushi/) as placeholders. (Please buy the series because it's amazing.)\r\n\r\n## Script Example\r\n\r\nThe following is a short example written in Sadako script.\r\n\r\n```\r\n## start\r\n    [:\u0026 $.on_floor = true:]\r\n    \u003e\u003e #main_room\r\n\r\n    \r\n## main_room\r\n    You're in a dimly lit room.\r\n    It's really dark in here. You can see that the windows are covered in cardboard with light just barely seeping out from the corners; not enough to light the room. \u003c\u003e\r\n    In the corner of the room seems to be a [:% body @: large mass:] of some sort.\r\n    Now that your eyes have adjusted to the darkness, you spot what appears to be a [:mop:] laying barely within reach. :: #.main_room \u003e 1 \u0026\u0026 $.on_floor\r\n    \u003c\u003c END\r\n    \r\n    = body\r\n    ~ if $.on_floor\r\n        The mass is on the other side of the room. You'll have to get up in order to reach it.\r\n        ++ {get_up} [Get up]\r\n            ~~~ if %.main_room.get_up === 1\r\n                You struggle to stand but your legs are incredibly weak and battered. When did this happen? What happened? You can't remember anything.\r\n                Either way, you're going to need assistance to stand.\r\n            ~~~ else\r\n                You're not getting up on your own. Maybe there's something around in the darkness that can help support your weight.\r\n            --- \u003e\u003e go_back\r\n        ++ {body_ret} [Back];; \u003c\u003c RETURN\r\n    ~ else\r\n        As you hobble your way to lump on the floor, it becomes increasingly clear that what you're looking at is a body. Are they dead, or just unconscious?\r\n        \r\n        ++ [Poke it]\r\n            You gently poke the body with the end of the mop. It stirs slightly.\r\n            +++ [Poke again]\r\n                The person rolls over and reveals itself to be a young woman. She groans.\r\n                \u003e\u003e chat\r\n    - \u003c\u003c END\r\n    \r\n    = chat\r\n    + \"Are you alright?\"\r\n        It takes her a moment to respond. \"I think so..?\" \u003c\u003e\r\n    + \"Hey. Get up.\"\r\n        \"Ugh. Hold on,\" she groans back at you.\r\n    - She pushes herself up just enough to rest on her elbow and surveys her surroundings. \"Where are we?\"\r\n    + \"I don't know. What do you remember?\"\r\n    + \"I can't remember anything.\"\r\n    - \"I remember.. falling.\"\r\n    \u003cb\u003e\u003ci\u003eEnd of Demo\u003c/i\u003e\u003c/b\u003e\r\n    \u003c\u003c END\r\n    \r\n    = go_back\r\n    + {gb} [Back];; \u003c\u003c RETURN\r\n\r\n    \r\n## mop\r\n    It's no wonder you didn't see the mop at first. Only the head of it manages to escape the darkness thanks to the smallest ray of light escaping the masked windows.\r\n    + {take_mop} [Take]\r\n        [:\u0026 $.on_floor = false:]\r\n        Laying on your side, you reach out as far as you can and manage to grab the head of the mop. You pull it towards yourself. \r\n        You remove the mop head the handle and brace the handle against the floor. You pull and then push down on the handle as you unsteadily rise to your feet. You continue to rest against it as a makeshift cane.        \r\n        ++ {take_ret} [Back];; \u003e\u003e #main_room\r\n    + {mop_ret} [Back]\r\n        \u003e\u003e #main_room\r\n```\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftriptych%2Fsadako","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftriptych%2Fsadako","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftriptych%2Fsadako/lists"}