sci2-ts 0.0.0-stage → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/LICENSE +21 -0
  3. package/README.md +113 -2
  4. package/apps/viewer/editor.html +43 -0
  5. package/apps/viewer/explore.html +27 -0
  6. package/apps/viewer/index.html +26 -0
  7. package/apps/viewer/package.json +27 -0
  8. package/apps/viewer/play.html +26 -0
  9. package/apps/viewer/plugin.d.ts +18 -0
  10. package/apps/viewer/plugin.js +75 -0
  11. package/apps/viewer/plugin.ts +84 -0
  12. package/apps/viewer/src/adlib.d.ts +20 -0
  13. package/apps/viewer/src/adlib.js +55 -0
  14. package/apps/viewer/src/adlib.ts +62 -0
  15. package/apps/viewer/src/app.d.ts +5 -0
  16. package/apps/viewer/src/app.js +5 -0
  17. package/apps/viewer/src/app.ts +5 -0
  18. package/apps/viewer/src/asset-index.d.ts +22 -0
  19. package/apps/viewer/src/asset-index.js +74 -0
  20. package/apps/viewer/src/asset-index.ts +90 -0
  21. package/apps/viewer/src/audio.d.ts +28 -0
  22. package/apps/viewer/src/audio.js +102 -0
  23. package/apps/viewer/src/audio.ts +110 -0
  24. package/apps/viewer/src/editor-handles.d.ts +63 -0
  25. package/apps/viewer/src/editor-handles.js +332 -0
  26. package/apps/viewer/src/editor-handles.ts +368 -0
  27. package/apps/viewer/src/editor-languages.d.ts +23 -0
  28. package/apps/viewer/src/editor-languages.js +157 -0
  29. package/apps/viewer/src/editor-languages.ts +135 -0
  30. package/apps/viewer/src/editor.css +213 -0
  31. package/apps/viewer/src/editor.d.ts +1 -0
  32. package/apps/viewer/src/editor.js +393 -0
  33. package/apps/viewer/src/editor.ts +412 -0
  34. package/apps/viewer/src/explore/classes.d.ts +7 -0
  35. package/apps/viewer/src/explore/classes.js +63 -0
  36. package/apps/viewer/src/explore/classes.ts +61 -0
  37. package/apps/viewer/src/explore/context.d.ts +33 -0
  38. package/apps/viewer/src/explore/context.js +96 -0
  39. package/apps/viewer/src/explore/context.ts +124 -0
  40. package/apps/viewer/src/explore/explore.css +93 -0
  41. package/apps/viewer/src/explore/explore.d.ts +1 -0
  42. package/apps/viewer/src/explore/explore.js +102 -0
  43. package/apps/viewer/src/explore/explore.ts +104 -0
  44. package/apps/viewer/src/explore/inspect.d.ts +5 -0
  45. package/apps/viewer/src/explore/inspect.js +208 -0
  46. package/apps/viewer/src/explore/inspect.ts +279 -0
  47. package/apps/viewer/src/explore/live.d.ts +22 -0
  48. package/apps/viewer/src/explore/live.js +318 -0
  49. package/apps/viewer/src/explore/live.ts +365 -0
  50. package/apps/viewer/src/explore/map.d.ts +11 -0
  51. package/apps/viewer/src/explore/map.js +182 -0
  52. package/apps/viewer/src/explore/map.ts +193 -0
  53. package/apps/viewer/src/files.d.ts +21 -0
  54. package/apps/viewer/src/files.js +69 -0
  55. package/apps/viewer/src/files.ts +72 -0
  56. package/apps/viewer/src/game-profile.d.ts +19 -0
  57. package/apps/viewer/src/game-profile.js +4 -0
  58. package/apps/viewer/src/game-profile.ts +26 -0
  59. package/apps/viewer/src/main.d.ts +1 -0
  60. package/apps/viewer/src/main.js +473 -0
  61. package/apps/viewer/src/main.ts +527 -0
  62. package/apps/viewer/src/music.d.ts +14 -0
  63. package/apps/viewer/src/music.js +32 -0
  64. package/apps/viewer/src/music.ts +34 -0
  65. package/apps/viewer/src/opl-worklet.d.ts +1 -0
  66. package/apps/viewer/src/opl-worklet.js +47 -0
  67. package/apps/viewer/src/opl-worklet.ts +55 -0
  68. package/apps/viewer/src/overlay.d.ts +31 -0
  69. package/apps/viewer/src/overlay.js +103 -0
  70. package/apps/viewer/src/overlay.ts +123 -0
  71. package/apps/viewer/src/play.css +14 -0
  72. package/apps/viewer/src/play.d.ts +1 -0
  73. package/apps/viewer/src/play.js +179 -0
  74. package/apps/viewer/src/play.ts +177 -0
  75. package/apps/viewer/src/saves.d.ts +10 -0
  76. package/apps/viewer/src/saves.js +50 -0
  77. package/apps/viewer/src/saves.ts +51 -0
  78. package/apps/viewer/src/session.d.ts +91 -0
  79. package/apps/viewer/src/session.js +301 -0
  80. package/apps/viewer/src/session.ts +321 -0
  81. package/apps/viewer/src/sound-preview.d.ts +7 -0
  82. package/apps/viewer/src/sound-preview.js +214 -0
  83. package/apps/viewer/src/sound-preview.ts +228 -0
  84. package/apps/viewer/src/style.css +64 -0
  85. package/apps/viewer/vite.config.ts +25 -0
  86. package/bin/sci-ts.mjs +9 -0
  87. package/lib/994.sc +49 -0
  88. package/lib/995.sc +53 -0
  89. package/lib/996.sc +299 -0
  90. package/lib/997.sc +198 -0
  91. package/lib/998.sc +338 -0
  92. package/lib/999.sc +189 -0
  93. package/lib/resources.d.ts +2 -0
  94. package/lib/resources.js +84 -0
  95. package/lib/resources.ts +88 -0
  96. package/lib/system.sh +62 -0
  97. package/package.json +75 -4
  98. package/packages/content/room.schema.json +267 -0
  99. package/packages/content/src/index.d.ts +3 -0
  100. package/packages/content/src/index.js +3 -0
  101. package/packages/content/src/index.ts +3 -0
  102. package/packages/content/src/room.d.ts +111 -0
  103. package/packages/content/src/room.js +886 -0
  104. package/packages/content/src/room.ts +1011 -0
  105. package/packages/content/src/target.d.ts +80 -0
  106. package/packages/content/src/target.js +1 -0
  107. package/packages/content/src/target.ts +60 -0
  108. package/packages/content/src/yarn.d.ts +90 -0
  109. package/packages/content/src/yarn.js +214 -0
  110. package/packages/content/src/yarn.ts +261 -0
  111. package/packages/sci/src/analysis/game.d.ts +90 -0
  112. package/packages/sci/src/analysis/game.js +221 -0
  113. package/packages/sci/src/analysis/game.ts +305 -0
  114. package/packages/sci/src/analysis/runtime.d.ts +58 -0
  115. package/packages/sci/src/analysis/runtime.js +133 -0
  116. package/packages/sci/src/analysis/runtime.ts +163 -0
  117. package/packages/sci/src/audio/adlib.d.ts +73 -0
  118. package/packages/sci/src/audio/adlib.js +280 -0
  119. package/packages/sci/src/audio/adlib.ts +329 -0
  120. package/packages/sci/src/audio/index.d.ts +43 -0
  121. package/packages/sci/src/audio/index.js +99 -0
  122. package/packages/sci/src/audio/index.ts +122 -0
  123. package/packages/sci/src/audio/midi.d.ts +92 -0
  124. package/packages/sci/src/audio/midi.js +242 -0
  125. package/packages/sci/src/audio/midi.ts +262 -0
  126. package/packages/sci/src/audio/opl2.d.ts +74 -0
  127. package/packages/sci/src/audio/opl2.js +283 -0
  128. package/packages/sci/src/audio/opl2.ts +283 -0
  129. package/packages/sci/src/audio/sol.d.ts +32 -0
  130. package/packages/sci/src/audio/sol.js +81 -0
  131. package/packages/sci/src/audio/sol.ts +100 -0
  132. package/packages/sci/src/audio/write.d.ts +35 -0
  133. package/packages/sci/src/audio/write.js +91 -0
  134. package/packages/sci/src/audio/write.ts +108 -0
  135. package/packages/sci/src/gfx/cel.d.ts +36 -0
  136. package/packages/sci/src/gfx/cel.js +82 -0
  137. package/packages/sci/src/gfx/cel.ts +110 -0
  138. package/packages/sci/src/gfx/palette.d.ts +24 -0
  139. package/packages/sci/src/gfx/palette.js +49 -0
  140. package/packages/sci/src/gfx/palette.ts +56 -0
  141. package/packages/sci/src/gfx/pic-file.d.ts +46 -0
  142. package/packages/sci/src/gfx/pic-file.js +114 -0
  143. package/packages/sci/src/gfx/pic-file.ts +155 -0
  144. package/packages/sci/src/gfx/pic.d.ts +27 -0
  145. package/packages/sci/src/gfx/pic.js +34 -0
  146. package/packages/sci/src/gfx/pic.ts +53 -0
  147. package/packages/sci/src/gfx/quantize.d.ts +42 -0
  148. package/packages/sci/src/gfx/quantize.js +199 -0
  149. package/packages/sci/src/gfx/quantize.ts +218 -0
  150. package/packages/sci/src/gfx/view-file.d.ts +62 -0
  151. package/packages/sci/src/gfx/view-file.js +182 -0
  152. package/packages/sci/src/gfx/view-file.ts +233 -0
  153. package/packages/sci/src/gfx/view.d.ts +28 -0
  154. package/packages/sci/src/gfx/view.js +45 -0
  155. package/packages/sci/src/gfx/view.ts +62 -0
  156. package/packages/sci/src/index.d.ts +38 -0
  157. package/packages/sci/src/index.js +38 -0
  158. package/packages/sci/src/index.ts +38 -0
  159. package/packages/sci/src/motion/pathfinding.d.ts +40 -0
  160. package/packages/sci/src/motion/pathfinding.js +140 -0
  161. package/packages/sci/src/motion/pathfinding.ts +147 -0
  162. package/packages/sci/src/resource/archive.d.ts +16 -0
  163. package/packages/sci/src/resource/archive.js +51 -0
  164. package/packages/sci/src/resource/archive.ts +56 -0
  165. package/packages/sci/src/resource/lzs.d.ts +12 -0
  166. package/packages/sci/src/resource/lzs.js +64 -0
  167. package/packages/sci/src/resource/lzs.ts +66 -0
  168. package/packages/sci/src/resource/manager.d.ts +45 -0
  169. package/packages/sci/src/resource/manager.js +158 -0
  170. package/packages/sci/src/resource/manager.ts +184 -0
  171. package/packages/sci/src/resource/map.d.ts +18 -0
  172. package/packages/sci/src/resource/map.js +34 -0
  173. package/packages/sci/src/resource/map.ts +44 -0
  174. package/packages/sci/src/resource/types.d.ts +37 -0
  175. package/packages/sci/src/resource/types.js +45 -0
  176. package/packages/sci/src/resource/types.ts +57 -0
  177. package/packages/sci/src/script/assembly.d.ts +67 -0
  178. package/packages/sci/src/script/assembly.js +748 -0
  179. package/packages/sci/src/script/assembly.ts +714 -0
  180. package/packages/sci/src/script/compiler.d.ts +75 -0
  181. package/packages/sci/src/script/compiler.js +993 -0
  182. package/packages/sci/src/script/compiler.ts +1040 -0
  183. package/packages/sci/src/script/disasm.d.ts +81 -0
  184. package/packages/sci/src/script/disasm.js +318 -0
  185. package/packages/sci/src/script/disasm.ts +323 -0
  186. package/packages/sci/src/script/kernel-names.d.ts +6 -0
  187. package/packages/sci/src/script/kernel-names.js +165 -0
  188. package/packages/sci/src/script/kernel-names.ts +165 -0
  189. package/packages/sci/src/script/opcodes.d.ts +22 -0
  190. package/packages/sci/src/script/opcodes.js +45 -0
  191. package/packages/sci/src/script/opcodes.ts +72 -0
  192. package/packages/sci/src/script/script.d.ts +56 -0
  193. package/packages/sci/src/script/script.js +63 -0
  194. package/packages/sci/src/script/script.ts +111 -0
  195. package/packages/sci/src/script/sexpr.d.ts +45 -0
  196. package/packages/sci/src/script/sexpr.js +151 -0
  197. package/packages/sci/src/script/sexpr.ts +139 -0
  198. package/packages/sci/src/script/vocab.d.ts +15 -0
  199. package/packages/sci/src/script/vocab.js +44 -0
  200. package/packages/sci/src/script/vocab.ts +48 -0
  201. package/packages/sci/src/script/world.d.ts +25 -0
  202. package/packages/sci/src/script/world.js +65 -0
  203. package/packages/sci/src/script/world.ts +70 -0
  204. package/packages/sci/src/text/font.d.ts +37 -0
  205. package/packages/sci/src/text/font.js +103 -0
  206. package/packages/sci/src/text/font.ts +125 -0
  207. package/packages/sci/src/text/message.d.ts +69 -0
  208. package/packages/sci/src/text/message.js +171 -0
  209. package/packages/sci/src/text/message.ts +205 -0
  210. package/packages/sci/src/vm/kernels/arrays.d.ts +19 -0
  211. package/packages/sci/src/vm/kernels/arrays.js +182 -0
  212. package/packages/sci/src/vm/kernels/arrays.ts +164 -0
  213. package/packages/sci/src/vm/kernels/audio.d.ts +70 -0
  214. package/packages/sci/src/vm/kernels/audio.js +347 -0
  215. package/packages/sci/src/vm/kernels/audio.ts +349 -0
  216. package/packages/sci/src/vm/kernels/core.d.ts +5 -0
  217. package/packages/sci/src/vm/kernels/core.js +87 -0
  218. package/packages/sci/src/vm/kernels/core.ts +91 -0
  219. package/packages/sci/src/vm/kernels/graphics.d.ts +141 -0
  220. package/packages/sci/src/vm/kernels/graphics.js +467 -0
  221. package/packages/sci/src/vm/kernels/graphics.ts +502 -0
  222. package/packages/sci/src/vm/kernels/index.d.ts +8 -0
  223. package/packages/sci/src/vm/kernels/index.js +29 -0
  224. package/packages/sci/src/vm/kernels/index.ts +32 -0
  225. package/packages/sci/src/vm/kernels/lists.d.ts +6 -0
  226. package/packages/sci/src/vm/kernels/lists.js +127 -0
  227. package/packages/sci/src/vm/kernels/lists.ts +111 -0
  228. package/packages/sci/src/vm/kernels/motion.d.ts +7 -0
  229. package/packages/sci/src/vm/kernels/motion.js +204 -0
  230. package/packages/sci/src/vm/kernels/motion.ts +194 -0
  231. package/packages/sci/src/vm/kernels/palette.d.ts +82 -0
  232. package/packages/sci/src/vm/kernels/palette.js +292 -0
  233. package/packages/sci/src/vm/kernels/palette.ts +303 -0
  234. package/packages/sci/src/vm/kernels/saves.d.ts +45 -0
  235. package/packages/sci/src/vm/kernels/saves.js +123 -0
  236. package/packages/sci/src/vm/kernels/saves.ts +149 -0
  237. package/packages/sci/src/vm/kernels/system.d.ts +62 -0
  238. package/packages/sci/src/vm/kernels/system.js +110 -0
  239. package/packages/sci/src/vm/kernels/system.ts +128 -0
  240. package/packages/sci/src/vm/kernels/text.d.ts +13 -0
  241. package/packages/sci/src/vm/kernels/text.js +338 -0
  242. package/packages/sci/src/vm/kernels/text.ts +328 -0
  243. package/packages/sci/src/vm/memory.d.ts +138 -0
  244. package/packages/sci/src/vm/memory.js +168 -0
  245. package/packages/sci/src/vm/memory.ts +266 -0
  246. package/packages/sci/src/vm/replace.d.ts +11 -0
  247. package/packages/sci/src/vm/replace.js +14 -0
  248. package/packages/sci/src/vm/replace.ts +16 -0
  249. package/packages/sci/src/vm/savegame.d.ts +89 -0
  250. package/packages/sci/src/vm/savegame.js +161 -0
  251. package/packages/sci/src/vm/savegame.ts +188 -0
  252. package/packages/sci/src/vm/value.d.ts +17 -0
  253. package/packages/sci/src/vm/value.js +12 -0
  254. package/packages/sci/src/vm/value.ts +25 -0
  255. package/packages/sci/src/vm/vm.d.ts +155 -0
  256. package/packages/sci/src/vm/vm.js +1053 -0
  257. package/packages/sci/src/vm/vm.ts +914 -0
  258. package/tools/adlib-render.d.ts +1 -0
  259. package/tools/adlib-render.js +49 -0
  260. package/tools/adlib-render.ts +42 -0
  261. package/tools/analyze.d.ts +1 -0
  262. package/tools/analyze.js +25 -0
  263. package/tools/analyze.ts +25 -0
  264. package/tools/art/build.d.ts +34 -0
  265. package/tools/art/build.js +175 -0
  266. package/tools/art/build.ts +153 -0
  267. package/tools/art.d.ts +1 -0
  268. package/tools/art.js +31 -0
  269. package/tools/art.ts +29 -0
  270. package/tools/asm.d.ts +1 -0
  271. package/tools/asm.js +61 -0
  272. package/tools/asm.ts +55 -0
  273. package/tools/cli.d.ts +1 -0
  274. package/tools/cli.js +99 -0
  275. package/tools/cli.ts +100 -0
  276. package/tools/editor-server.d.ts +29 -0
  277. package/tools/editor-server.js +162 -0
  278. package/tools/editor-server.ts +176 -0
  279. package/tools/explore.d.ts +1 -0
  280. package/tools/explore.js +305 -0
  281. package/tools/explore.ts +250 -0
  282. package/tools/game/audio.d.ts +19 -0
  283. package/tools/game/audio.js +143 -0
  284. package/tools/game/audio.ts +130 -0
  285. package/tools/game/build.d.ts +46 -0
  286. package/tools/game/build.js +259 -0
  287. package/tools/game/build.ts +283 -0
  288. package/tools/game/defaults.d.ts +26 -0
  289. package/tools/game/defaults.js +82 -0
  290. package/tools/game/defaults.ts +83 -0
  291. package/tools/game/font.d.ts +3 -0
  292. package/tools/game/font.js +124 -0
  293. package/tools/game/font.ts +126 -0
  294. package/tools/game/kit.d.ts +7 -0
  295. package/tools/game/kit.js +7 -0
  296. package/tools/game/kit.ts +10 -0
  297. package/tools/game/new.d.ts +8 -0
  298. package/tools/game/new.js +39 -0
  299. package/tools/game/new.ts +38 -0
  300. package/tools/game/target.d.ts +7 -0
  301. package/tools/game/target.js +41 -0
  302. package/tools/game/target.ts +42 -0
  303. package/tools/game/template/resources.ts.tmpl +43 -0
  304. package/tools/game/template/rooms/1.room.yaml +9 -0
  305. package/tools/game/template/rooms/1.yarn +17 -0
  306. package/tools/game/template/scripts/0.sc +24 -0
  307. package/tools/game.d.ts +1 -0
  308. package/tools/game.js +77 -0
  309. package/tools/game.ts +70 -0
  310. package/tools/mod-build.d.ts +28 -0
  311. package/tools/mod-build.js +173 -0
  312. package/tools/mod-build.ts +179 -0
  313. package/tools/mod-target.d.ts +16 -0
  314. package/tools/mod-target.js +26 -0
  315. package/tools/mod-target.ts +32 -0
  316. package/tools/mod.d.ts +1 -0
  317. package/tools/mod.js +47 -0
  318. package/tools/mod.ts +45 -0
  319. package/tools/msg.d.ts +1 -0
  320. package/tools/msg.js +40 -0
  321. package/tools/msg.ts +36 -0
  322. package/tools/node-files.d.ts +3 -0
  323. package/tools/node-files.js +34 -0
  324. package/tools/node-files.ts +33 -0
  325. package/tools/patches.d.ts +3 -0
  326. package/tools/patches.js +13 -0
  327. package/tools/patches.ts +13 -0
  328. package/tools/pic-build.d.ts +9 -0
  329. package/tools/pic-build.js +26 -0
  330. package/tools/pic-build.ts +27 -0
  331. package/tools/pic.d.ts +1 -0
  332. package/tools/pic.js +64 -0
  333. package/tools/pic.ts +61 -0
  334. package/tools/play.d.ts +1 -0
  335. package/tools/play.js +54 -0
  336. package/tools/play.ts +54 -0
  337. package/tools/png.d.ts +16 -0
  338. package/tools/png.js +124 -0
  339. package/tools/png.ts +123 -0
  340. package/tools/res.d.ts +1 -0
  341. package/tools/res.js +48 -0
  342. package/tools/res.ts +50 -0
  343. package/tools/scenario.d.ts +1 -0
  344. package/tools/scenario.js +74 -0
  345. package/tools/scenario.ts +80 -0
  346. package/tools/site/build.d.ts +8 -0
  347. package/tools/site/build.js +110 -0
  348. package/tools/site/build.ts +116 -0
  349. package/tools/site/markdown.d.ts +11 -0
  350. package/tools/site/markdown.js +88 -0
  351. package/tools/site/markdown.ts +84 -0
  352. package/tools/view-build.d.ts +34 -0
  353. package/tools/view-build.js +47 -0
  354. package/tools/view-build.ts +71 -0
  355. package/tools/view.d.ts +1 -0
  356. package/tools/view.js +54 -0
  357. package/tools/view.ts +52 -0
package/lib/system.sh ADDED
@@ -0,0 +1,62 @@
1
+ ;;; Constants for the sci-ts class library and the games that use it:
2
+ ;;; (include "system.sh")
3
+
4
+ ;; Verbs: what a click does. Right-click goes to the next one.
5
+ (enum 1
6
+ V_LOOK
7
+ V_TALK
8
+ V_WALK
9
+ V_DO)
10
+ (define VERB_COUNT 4)
11
+
12
+ ;; Cursors: one view per verb, CURSOR_BASE + verb.
13
+ (define CURSOR_BASE 990)
14
+
15
+ ;; Event types, as GetEvent reports them.
16
+ (define EV_NULL 0)
17
+ (define EV_MOUSE_DOWN 1)
18
+ (define EV_MOUSE_UP 2)
19
+ (define EV_KEY_DOWN 4)
20
+ (define EV_ALL $7fff)
21
+ ;; The right button arrives as a click with shift held.
22
+ (define MOD_RIGHT 3)
23
+
24
+ ;; Polygon types: how a polygon limits walking.
25
+ (define PT_TOTAL_ACCESS 0) ; can't go in, can walk out
26
+ (define PT_NEAREST 1) ; a click inside goes to its edge
27
+ (define PT_BARRED 2) ; never
28
+ (define PT_CONTAINED 3) ; the walkable area: can't leave it
29
+
30
+ ;; What AvoidPath ends a path with.
31
+ (define PATH_END $7777)
32
+
33
+ ;; Array and String kernel calls.
34
+ (define ARRAY_NEW 0)
35
+ (define ARRAY_AT 2)
36
+ (define ARRAY_AT_PUT 3)
37
+ (define ARRAY_FREE 4)
38
+ (define STRING_LENGTH 10)
39
+
40
+ ;; DoSound kernel calls.
41
+ (define SND_INIT 6)
42
+ (define SND_DISPOSE 7)
43
+ (define SND_PLAY 8)
44
+ (define SND_STOP 9)
45
+ (define SND_UPDATE_CUES 17)
46
+
47
+ (define SCREEN_WIDTH 320)
48
+ (define SCREEN_HEIGHT 200)
49
+
50
+ ;; Who says a message line (its talker number).
51
+ (define TALKER_HERO 98) ; the game's heroTalker, if it has one
52
+ (define TALKER_NARRATOR 99)
53
+ (define ROOM_TALKERS 200) ; and up: the room's own characters (its findTalker:)
54
+
55
+ ;; View signal bits.
56
+ (define SIG_HIDDEN $0008)
57
+ (define SIG_FIXED_LOOP $0800)
58
+ ;; scaleSignal: scale the cel by scaleX and scaleY.
59
+ (define SCALE_ON 1)
60
+
61
+ ;; Story flags: SetFlag, ClearFlag and IsFlag (script 999's exports 0 to 2) take 0 to 1023.
62
+ (define FLAG_COUNT 1024)
package/package.json CHANGED
@@ -1,6 +1,77 @@
1
1
  {
2
2
  "name": "sci2-ts",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.2",
4
+ "description": "An SCI2 adventure game engine in TypeScript, and the tools to make games with it",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/rlueder/sci-ts.git"
10
+ },
11
+ "homepage": "https://github.com/rlueder/sci-ts#readme",
12
+ "keywords": [
13
+ "sci",
14
+ "sierra",
15
+ "adventure",
16
+ "game-engine",
17
+ "point-and-click",
18
+ "interpreter"
19
+ ],
20
+ "engines": {
21
+ "node": ">=22.18"
22
+ },
23
+ "bin": {
24
+ "sci-ts": "bin/sci-ts.mjs"
25
+ },
26
+ "exports": {
27
+ ".": {
28
+ "types": "./packages/sci/src/index.d.ts",
29
+ "default": "./packages/sci/src/index.js"
30
+ },
31
+ "./content": {
32
+ "types": "./packages/content/src/index.d.ts",
33
+ "default": "./packages/content/src/index.js"
34
+ },
35
+ "./kit": {
36
+ "types": "./tools/game/kit.d.ts",
37
+ "default": "./tools/game/kit.js"
38
+ },
39
+ "./build": {
40
+ "types": "./tools/game/build.d.ts",
41
+ "default": "./tools/game/build.js"
42
+ },
43
+ "./art": {
44
+ "types": "./tools/art/build.d.ts",
45
+ "default": "./tools/art/build.js"
46
+ },
47
+ "./png": {
48
+ "types": "./tools/png.d.ts",
49
+ "default": "./tools/png.js"
50
+ },
51
+ "./viewer": {
52
+ "types": "./apps/viewer/src/session.d.ts",
53
+ "default": "./apps/viewer/src/session.ts"
54
+ },
55
+ "./vite": {
56
+ "types": "./apps/viewer/plugin.d.ts",
57
+ "default": "./apps/viewer/plugin.js"
58
+ },
59
+ "./package.json": "./package.json"
60
+ },
61
+ "dependencies": {
62
+ "tsx": "^4.23.15",
63
+ "vite": "^8.3.1",
64
+ "yaml": "^2.9.1",
65
+ "@codemirror/commands": "^6.11.1",
66
+ "@codemirror/lang-yaml": "^6.1.3",
67
+ "@codemirror/language": "^6.12.4",
68
+ "@codemirror/lint": "^6.9.7",
69
+ "@codemirror/state": "^6.7.6",
70
+ "@codemirror/theme-one-dark": "^6.1.3",
71
+ "@codemirror/view": "^6.43.13",
72
+ "codemirror": "^6.0.2",
73
+ "cytoscape": "^3.34.3",
74
+ "spessasynth_lib": "^4.3.14",
75
+ "sirv": "^3.0.2"
76
+ }
77
+ }
@@ -0,0 +1,267 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "room.schema.json",
4
+ "title": "Room",
5
+ "description": "A room for @sci-ts/content: what's in it. What's said in it lives in the matching .yarn file (nodes named <thing>.<verb>).",
6
+ "type": "object",
7
+ "required": [
8
+ "room"
9
+ ],
10
+ "additionalProperties": false,
11
+ "$defs": {
12
+ "point": {
13
+ "type": "array",
14
+ "items": {
15
+ "type": "integer"
16
+ },
17
+ "minItems": 2,
18
+ "maxItems": 2,
19
+ "description": "[x, y] in room coordinates"
20
+ },
21
+ "rect": {
22
+ "type": "array",
23
+ "items": {
24
+ "type": "integer"
25
+ },
26
+ "minItems": 4,
27
+ "maxItems": 4,
28
+ "description": "[left, top, right, bottom] in room coordinates"
29
+ },
30
+ "polygon": {
31
+ "type": "array",
32
+ "items": {
33
+ "$ref": "#/$defs/point"
34
+ },
35
+ "minItems": 3
36
+ },
37
+ "name": {
38
+ "type": "string",
39
+ "pattern": "^[A-Za-z][A-Za-z0-9]*$"
40
+ },
41
+ "feature": {
42
+ "type": "object",
43
+ "required": [
44
+ "rect"
45
+ ],
46
+ "properties": {
47
+ "rect": {
48
+ "$ref": "#/$defs/rect"
49
+ },
50
+ "at": {
51
+ "$ref": "#/$defs/point",
52
+ "description": "Where the hero looks at (default: the middle of rect)"
53
+ },
54
+ "approach": {
55
+ "$ref": "#/$defs/point",
56
+ "description": "Where the hero walks to before interacting"
57
+ },
58
+ "sightAngle": {
59
+ "type": "integer",
60
+ "minimum": 0,
61
+ "maximum": 360,
62
+ "default": 180
63
+ }
64
+ }
65
+ }
66
+ },
67
+ "properties": {
68
+ "room": {
69
+ "type": "integer",
70
+ "minimum": 0,
71
+ "maximum": 65535,
72
+ "description": "Room (script and message) number"
73
+ },
74
+ "picture": {
75
+ "type": "integer",
76
+ "minimum": 0,
77
+ "maximum": 65535,
78
+ "description": "Picture number (default: the room number)"
79
+ },
80
+ "music": {
81
+ "type": "integer",
82
+ "minimum": 0,
83
+ "maximum": 65535,
84
+ "description": "Music played (looping) here; left alone if it's already playing"
85
+ },
86
+ "hero": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "properties": {
90
+ "at": {
91
+ "$ref": "#/$defs/point",
92
+ "description": "Where the hero appears"
93
+ },
94
+ "enterTo": {
95
+ "$ref": "#/$defs/point",
96
+ "description": "Walk here on arrival; room.enter is narrated after"
97
+ },
98
+ "scale": {
99
+ "type": "object",
100
+ "additionalProperties": false,
101
+ "required": [
102
+ "front",
103
+ "back",
104
+ "frontY",
105
+ "backY"
106
+ ],
107
+ "description": "Perspective: front% at y frontY, back% at y backY",
108
+ "properties": {
109
+ "front": {
110
+ "type": "integer"
111
+ },
112
+ "back": {
113
+ "type": "integer"
114
+ },
115
+ "frontY": {
116
+ "type": "integer"
117
+ },
118
+ "backY": {
119
+ "type": "integer"
120
+ }
121
+ }
122
+ }
123
+ }
124
+ },
125
+ "walkable": {
126
+ "$ref": "#/$defs/polygon",
127
+ "description": "The floor: the hero stays inside"
128
+ },
129
+ "obstacles": {
130
+ "type": "array",
131
+ "items": {
132
+ "$ref": "#/$defs/polygon"
133
+ },
134
+ "description": "Polygons the hero walks around"
135
+ },
136
+ "features": {
137
+ "type": "object",
138
+ "description": "Things to look at and use, drawn in the picture",
139
+ "propertyNames": {
140
+ "$ref": "#/$defs/name"
141
+ },
142
+ "additionalProperties": {
143
+ "allOf": [
144
+ {
145
+ "$ref": "#/$defs/feature"
146
+ }
147
+ ],
148
+ "unevaluatedProperties": false
149
+ }
150
+ },
151
+ "exits": {
152
+ "type": "object",
153
+ "description": "Features that lead to another room when used (Do)",
154
+ "propertyNames": {
155
+ "$ref": "#/$defs/name"
156
+ },
157
+ "additionalProperties": {
158
+ "allOf": [
159
+ {
160
+ "$ref": "#/$defs/feature"
161
+ }
162
+ ],
163
+ "required": [
164
+ "to"
165
+ ],
166
+ "properties": {
167
+ "to": {
168
+ "type": "integer",
169
+ "description": "The room to go to"
170
+ },
171
+ "walkTo": {
172
+ "$ref": "#/$defs/point",
173
+ "description": "Walk here before leaving"
174
+ }
175
+ },
176
+ "unevaluatedProperties": false
177
+ }
178
+ },
179
+ "props": {
180
+ "type": "object",
181
+ "description": "Things drawn with a view (sprite), optionally animated",
182
+ "propertyNames": {
183
+ "$ref": "#/$defs/name"
184
+ },
185
+ "additionalProperties": {
186
+ "type": "object",
187
+ "required": [
188
+ "view",
189
+ "at"
190
+ ],
191
+ "additionalProperties": false,
192
+ "properties": {
193
+ "view": {
194
+ "type": "integer",
195
+ "description": "View number (e.g. from a .view.json)"
196
+ },
197
+ "at": {
198
+ "$ref": "#/$defs/point"
199
+ },
200
+ "loop": {
201
+ "type": "integer",
202
+ "minimum": 0,
203
+ "default": 0
204
+ },
205
+ "cel": {
206
+ "type": "integer",
207
+ "minimum": 0,
208
+ "default": 0
209
+ },
210
+ "cycle": {
211
+ "enum": [
212
+ "forward"
213
+ ],
214
+ "description": "forward: loop the animation forever"
215
+ },
216
+ "sightAngle": {
217
+ "type": "integer",
218
+ "minimum": 0,
219
+ "maximum": 360,
220
+ "default": 180
221
+ },
222
+ "moves": {
223
+ "type": "boolean",
224
+ "description": "It walks or floats about in cutscenes (<<walk name x y>>): an Actor instead of a Prop"
225
+ }
226
+ }
227
+ }
228
+ },
229
+ "characters": {
230
+ "type": "object",
231
+ "description": "Who speaks in this room's Yarn besides Narrator and Hero (`Wisp: ...`)",
232
+ "propertyNames": {
233
+ "$ref": "#/$defs/name"
234
+ },
235
+ "additionalProperties": {
236
+ "type": [
237
+ "object",
238
+ "null"
239
+ ],
240
+ "additionalProperties": false,
241
+ "properties": {
242
+ "name": {
243
+ "type": "string",
244
+ "maxLength": 40,
245
+ "description": "Another name they go by in Yarn (besides the key)"
246
+ },
247
+ "portrait": {
248
+ "type": "integer",
249
+ "minimum": 0,
250
+ "maximum": 65535,
251
+ "description": "Portrait view: loop 0 bust, loop 1 mouth shapes, loop 2 eyes; same-size cels anchored at [0, 0]. Without one: a plain text box"
252
+ }
253
+ }
254
+ }
255
+ },
256
+ "properties": {
257
+ "type": "object",
258
+ "description": "Raw property values per object (the room is \"room\"), for anything not covered above",
259
+ "additionalProperties": {
260
+ "type": "object",
261
+ "additionalProperties": {
262
+ "type": "integer"
263
+ }
264
+ }
265
+ }
266
+ }
267
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./target.ts";
2
+ export * from "./yarn.ts";
3
+ export * from "./room.ts";
@@ -0,0 +1,3 @@
1
+ export * from "./target.js";
2
+ export * from "./yarn.js";
3
+ export * from "./room.js";
@@ -0,0 +1,3 @@
1
+ export * from "./target.ts";
2
+ export * from "./yarn.ts";
3
+ export * from "./room.ts";
@@ -0,0 +1,111 @@
1
+ import type { Target } from "./target.ts";
2
+ /**
3
+ * A room described as data (YAML) plus what's said in it (Yarn), compiled to SCI assembly
4
+ * (.sca) and message text (.msg), the formats tools/mod-build.ts already builds from.
5
+ *
6
+ * room: 701
7
+ * hero: { at: [36, 152], enterTo: [110, 160], scale: { front: 100, back: 70, frontY: 186, backY: 122 } }
8
+ * walkable: [[28, 152], [60, 135], ...]
9
+ * features:
10
+ * pods: { rect: [236, 14, 310, 94] }
11
+ * exits:
12
+ * passage: { rect: [12, 84, 64, 156], approach: [40, 152], walkTo: [30, 152], to: 770 }
13
+ * props:
14
+ * wisp: { view: 701, at: [200, 96], cycle: forward }
15
+ *
16
+ * Yarn nodes named `<thing>.<verb>` are what the hero gets for that verb on that thing
17
+ * (`pods.look`, `wisp.do`, `room.look`); `room.enter` is narration on arrival. Lines can
18
+ * name a speaker (`Wisp: ...`, `Hero: ...`): characters are declared under `characters:`.
19
+ * A node with choices (`-> Who are you?`) is a conversation: the game's topic menu, each
20
+ * choice answered by the lines indented under it.
21
+ */
22
+ export interface RoomSpec {
23
+ room: number;
24
+ picture?: number;
25
+ /** Music played (looping) here; left alone if it's already playing. */
26
+ music?: number;
27
+ hero?: {
28
+ at?: Point;
29
+ /** Walk here on arrival (hands off until there). */
30
+ enterTo?: Point;
31
+ /** Perspective: `front`% at y `frontY`, `back`% at y `backY`. */
32
+ scale?: {
33
+ front: number;
34
+ back: number;
35
+ frontY: number;
36
+ backY: number;
37
+ };
38
+ };
39
+ /** The floor: a polygon the hero stays inside. */
40
+ walkable?: Point[];
41
+ /** Polygons the hero walks around. */
42
+ obstacles?: Point[][];
43
+ features?: Record<string, FeatureSpec>;
44
+ exits?: Record<string, ExitSpec>;
45
+ props?: Record<string, PropSpec>;
46
+ /** Who speaks in this room's Yarn (besides the narrator and the hero). */
47
+ characters?: Record<string, CharacterSpec>;
48
+ /** Raw property values per object (the room is `room`), for anything not covered above. */
49
+ properties?: Record<string, Record<string, number>>;
50
+ }
51
+ interface CharacterSpec {
52
+ /** Their name in Yarn (`Old Crow: ...`), besides the key. */
53
+ name?: string;
54
+ /**
55
+ * Portrait view: loop 0 the bust, loop 1 mouth shapes (cel 0 closed), loop 2 eyes
56
+ * (cel 0 open, then blinking); every cel the same size. Without one, a plain text box.
57
+ */
58
+ portrait?: number;
59
+ }
60
+ type Point = [number, number];
61
+ type Rect = [number, number, number, number];
62
+ interface FeatureSpec {
63
+ /** left, top, right, bottom (room coordinates). */
64
+ rect: Rect;
65
+ /** Where the hero looks at; the middle of rect unless given. */
66
+ at?: Point;
67
+ approach?: Point;
68
+ sightAngle?: number;
69
+ }
70
+ interface ExitSpec extends FeatureSpec {
71
+ to: number;
72
+ /** Walk here before leaving. */
73
+ walkTo?: Point;
74
+ }
75
+ interface PropSpec {
76
+ view: number;
77
+ at: Point;
78
+ /** It walks or floats about in cutscenes (<<walk wisp x y>>): an Actor, not a Prop. */
79
+ moves?: boolean;
80
+ loop?: number;
81
+ cel?: number;
82
+ /** forward: loop the animation forever. */
83
+ cycle?: "forward";
84
+ sightAngle?: number;
85
+ }
86
+ export interface CompiledRoom {
87
+ number: number;
88
+ /** SCI assembly for tools/asm.ts. */
89
+ sca: string;
90
+ /** Message text for tools/msg.ts. */
91
+ msg: string;
92
+ /** The room defines characters: the game needs the target's support for room talkers. */
93
+ roomTalkers: boolean;
94
+ /** Yarn variables ($name) used: each is a flag, numbered by `options.flag`. */
95
+ flags: string[];
96
+ }
97
+ export interface CompileOptions {
98
+ /**
99
+ * The flag number for a Yarn variable. Variables are flags shared by a whole mod (and
100
+ * its saved games), so the caller keeps the numbering (tools/mod-build.ts: flags.yaml).
101
+ */
102
+ flag?: (name: string) => number;
103
+ }
104
+ export declare class ContentError extends Error {
105
+ }
106
+ /** Compiles `<n>.room.yaml` (+ `<n>.yarn`) source text. File names only label errors. */
107
+ export declare function compileRoom(yamlSource: string, yarnSource: string | undefined, target: Target, files?: {
108
+ yaml?: string;
109
+ yarn?: string;
110
+ }, options?: CompileOptions): CompiledRoom;
111
+ export {};