##// END OF EJS Templates
Finishing lib
naryl -
r20:7c7db691 default
parent child Browse files
Show More
@@ -1,5 +1,6 b''
1
1
2 * Finish lib
2 * Make acts stored separately
3 * Update saving system to use separate acts and save at any point
3 * CLI build for Linux
4 * CLI build for Linux
4 * CLI build for Windows
5 * CLI build for Windows
5
6
@@ -21,6 +21,9 b''
21 title
21 title
22 "</a>"))
22 "</a>"))
23
23
24 (defm (root api report-error) (text)
25 (alert text))
26
24 (defm (root api init-dom) ()
27 (defm (root api init-dom) ()
25 ;; Save/load buttons
28 ;; Save/load buttons
26 (let ((btn (document.get-element-by-id "qsp-btn-save")))
29 (let ((btn (document.get-element-by-id "qsp-btn-save")))
@@ -37,44 +40,12 b''
37 (lambda (event)
40 (lambda (event)
38 (setf (ps:@ (api-call get-frame :dropdown) style display) "none"))))
41 (setf (ps:@ (api-call get-frame :dropdown) style display) "none"))))
39
42
40 ;; To be used in saving game
43 (defm (root api call-serv-loc) (var-name &rest args)
41 (defm (root api stash-state) (args)
44 (let ((loc-name (api-call get-var name 0 :str)))
42 (setf (root state-stash)
45 (when loc-name
43 (*j-s-o-n.stringify
46 (let ((loc (ps:getprop (root locs) loc-name)))
44 (ps:create vars (root vars)
47 (when loc
45 objs (root objs)
48 (funcall loc args))))))
46 loc-args args
47 main-html (ps:@
48 (document.get-element-by-id :qsp-main)
49 inner-h-t-m-l)
50 stat-html (ps:@
51 (document.get-element-by-id :qsp-stat)
52 inner-h-t-m-l)
53 next-location (root current-location))))
54 (values))
55
56 (defm (root api unstash-state) ()
57 (let ((data (*j-s-o-n.parse (root state-stash))))
58 (this.clear-act)
59 (setf (root vars) (ps:@ data vars))
60 (loop :for k :in (*object.keys (root vars))
61 :do (*object.set-prototype-of (ps:getprop (root vars) k)
62 (root api *var prototype)))
63 (setf (root objs) (ps:@ data objs))
64 (setf (root current-location) (ps:@ data next-location))
65 (setf (ps:@ (document.get-element-by-id :qsp-main) inner-h-t-m-l)
66 (ps:@ data main-html))
67 (setf (ps:@ (document.get-element-by-id :qsp-stat) inner-h-t-m-l)
68 (ps:@ data stat-html))
69 (funcall (root locs (root current-location)) (ps:@ data loc-args))
70 (this.update-objs)
71 (values)))
72
73 (defm (root api state-to-base64) ()
74 (btoa (encode-u-r-i-component (root state-stash))))
75
76 (defm (root api base64-to-state) (data)
77 (setf (root state-stash) (decode-u-r-i-component (atob data))))
78
49
79 ;;; Misc
50 ;;; Misc
80
51
@@ -120,7 +91,7 b''
120 (:acts "qsp-acts")
91 (:acts "qsp-acts")
121 (:input "qsp-input")
92 (:input "qsp-input")
122 (:dropdown "qsp-dropdown")
93 (:dropdown "qsp-dropdown")
123 (t (report-error "Internal error!"))))
94 (t (this.report-error "Internal error!"))))
124
95
125 (defm (root api get-frame) (key)
96 (defm (root api get-frame) (key)
126 (document.get-element-by-id (this.key-to-id key)))
97 (document.get-element-by-id (this.key-to-id key)))
@@ -357,3 +328,54 b''
357 (document.body.append-child element)
328 (document.body.append-child element)
358 (element.click)
329 (element.click)
359 (document.body.remove-child element)))
330 (document.body.remove-child element)))
331
332 (defm (root api stash-state) (args)
333 (setf (root state-stash)
334 (*j-s-o-n.stringify
335 (ps:create vars (root vars)
336 objs (root objs)
337 loc-args args
338 msecs (- (*date.now) (root started-at))
339 main-html (ps:@
340 (document.get-element-by-id :qsp-main)
341 inner-h-t-m-l)
342 stat-html (ps:@
343 (document.get-element-by-id :qsp-stat)
344 inner-h-t-m-l)
345 next-location (root current-location))))
346 (values))
347
348 (defm (root api unstash-state) ()
349 (let ((data (*j-s-o-n.parse (root state-stash))))
350 (this.clear-act)
351 (setf (root vars) (ps:@ data vars))
352 (loop :for k :in (*object.keys (root vars))
353 :do (*object.set-prototype-of (ps:getprop (root vars) k)
354 (root api *var prototype)))
355 (setf (root started-at) (- (*date.now) (ps:@ data msecs)))
356 (setf (root objs) (ps:@ data objs))
357 (setf (root current-location) (ps:@ data next-location))
358 (setf (ps:@ (document.get-element-by-id :qsp-main) inner-h-t-m-l)
359 (ps:@ data main-html))
360 (setf (ps:@ (document.get-element-by-id :qsp-stat) inner-h-t-m-l)
361 (ps:@ data stat-html))
362 (funcall (root locs (root current-location)) (ps:@ data loc-args))
363 (this.update-objs)
364 (values)))
365
366 (defm (root api state-to-base64) ()
367 (btoa (encode-u-r-i-component (root state-stash))))
368
369 (defm (root api base64-to-state) (data)
370 (setf (root state-stash) (decode-u-r-i-component (atob data))))
371
372 ;;; Timers
373
374 (defm (root api set-timer) (interval)
375 (setf (root timer-interval) interval)
376 (clear-interval (root timer-obj))
377 (setf (root timer-obj)
378 (set-interval
379 (lambda ()
380 (api-call call-serv-loc "COUNTER"))
381 interval)))
@@ -142,8 +142,14 b''
142
142
143 ;;; 19input
143 ;;; 19input
144
144
145 (ps:defpsmacro showinput (enable)
146 `(api-call enable-frame :input ,enable))
147
145 ;;; 20time
148 ;;; 20time
146
149
150 (ps:defpsmacro settimer (interval)
151 `(api-call set-timer ,interval))
152
147 ;;; 21local
153 ;;; 21local
148
154
149 (ps:defpsmacro local (var &optional expr)
155 (ps:defpsmacro local (var &optional expr)
@@ -112,10 +112,14 b''
112 ;;; 10dynamic
112 ;;; 10dynamic
113
113
114 (defm (root lib dynamic) (block &rest args)
114 (defm (root lib dynamic) (block &rest args)
115 (when (stringp block)
116 (api-call report-error "DYNAMIC can't evaluate arbitrary strings.\nUse {braces} to create blocks for DYNAMIC."))
115 (funcall block args)
117 (funcall block args)
116 (values))
118 (values))
117
119
118 (defm (root lib dyneval) (block &rest args)
120 (defm (root lib dyneval) (block &rest args)
121 (when (stringp block)
122 (api-call report-error "DYNEVAL can't evaluate arbitrary strings.\nUse {braces} to create blocks for DYNEVAL."))
119 (funcall block args))
123 (funcall block args))
120
124
121 ;;; 11main
125 ;;; 11main
@@ -252,17 +256,21 b''
252
256
253 (defm (root lib refint) ()
257 (defm (root lib refint) ()
254 ;; "Force interface update" Uh... what exactly do we do here?
258 ;; "Force interface update" Uh... what exactly do we do here?
259 (api-call report-error "REFINT is not supported")
255 )
260 )
256
261
257 ;;; 19input
262 ;;; 19input
258
263
259 (defm (root lib showinput) ())
264 (defm (root lib usertxt) ()
260
265 (let ((input (document.get-element-by-id "qsp-input")))
261 (defm (root lib usertxt) ())
266 (ps:@ input value)))
262
267
263 (defm (root lib cmdclear) ())
268 (defm (root lib cmdclear) ()
269 (let ((input (document.get-element-by-id "qsp-input")))
270 (setf (ps:@ input value) "")))
264
271
265 (defm (root lib input) ())
272 (defm (root lib input) (text)
273 (window.prompt text))
266
274
267 ;;; 20time
275 ;;; 20time
268
276
@@ -272,9 +280,8 b''
272 (exit-time (+ (funcall now.get-time) msec)))
280 (exit-time (+ (funcall now.get-time) msec)))
273 (loop :while (< (funcall now.get-time) exit-time))))
281 (loop :while (< (funcall now.get-time) exit-time))))
274
282
275 (defm (root lib msecscount) ())
283 (defm (root lib msecscount) ()
276
284 (- (*date.now) (root started-at)))
277 (defm (root lib settimer) ())
278
285
279 ;;; 21local
286 ;;; 21local
280
287
@@ -282,11 +289,14 b''
282
289
283 ;;; misc
290 ;;; misc
284
291
285 (defm (root lib rgb) ())
292 (defm (root lib rgb) ()
293 (api-call report-error "RGB is not supported. Use HTML."))
286
294
287 (defm (root lib openqst) ())
295 (defm (root lib openqst) ()
296 (api-call report-error "OPENQST is not supported."))
288
297
289 (defm (root lib addqst) ())
298 (defm (root lib addqst) ()
299 (api-call report-error "ADDQST is not supported. Bundle the library with the main game."))
290
300
291 (defm (root lib killqst) ())
301 (defm (root lib killqst) ()
292
302 (api-call report-error "KILLQST is not supported."))
@@ -8,6 +8,11 b''
8 vars (ps:create)
8 vars (ps:create)
9 ;; Inventory (objects)
9 ;; Inventory (objects)
10 objs (list)
10 objs (list)
11 ;; Game time
12 started-at (*date.now)
13 ;; Timers
14 timer-interval 500
15 timer-obj nil
11 ;;; Transient state
16 ;;; Transient state
12 ;; Savegame data
17 ;; Savegame data
13 state-stash (ps:create)
18 state-stash (ps:create)
@@ -25,6 +30,10 b''
25 (setf window.onload
30 (setf window.onload
26 (lambda ()
31 (lambda ()
27 (api-call init-dom)
32 (api-call init-dom)
33 ;; For MSECCOUNT
34 (setf (root started-at) (*date.now))
35 ;; For $COUNTER and SETTIMER
36 (api-call set-timer (root timer-interval))
28 (funcall (ps:getprop (root locs)
37 (funcall (ps:getprop (root locs)
29 (ps:chain *object (keys (root locs)) 0))
38 (ps:chain *object (keys (root locs)) 0))
30 (list))
39 (list))
@@ -70,10 +70,12 b''
70 (:text t))
70 (:text t))
71
71
72 (p:defrule spaces (+ (or #\space #\tab line-continuation))
72 (p:defrule spaces (+ (or #\space #\tab line-continuation))
73 (:constant nil))
73 (:constant nil)
74 (:error-report nil))
74
75
75 (p:defrule spaces? (* (or #\space #\tab line-continuation))
76 (p:defrule spaces? (* (or #\space #\tab line-continuation))
76 (:constant nil))
77 (:constant nil)
78 (:error-report nil))
77
79
78 (p:defrule colon #\:
80 (p:defrule colon #\:
79 (:constant nil))
81 (:constant nil))
General Comments 0
You need to be logged in to leave comments. Login now