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 |
|
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