##// END OF EJS Templates
Special variables and locations
naryl -
r32:f0801da6 default
parent child Browse files
Show More
@@ -1,6 +1,7 b''
1
1
2 * Special locations
2 * Special locations
3 * Special variables
3 * Special variables
4 * IMG
4 * CLI build for Linux
5 * CLI build for Linux
5 * CLI build for Windows
6 * CLI build for Windows
6
7
@@ -21,3 +21,6 b''
21 <div id="qsp-image-container" class="center-on-screen">
21 <div id="qsp-image-container" class="center-on-screen">
22 <img id="qsp-image">
22 <img id="qsp-image">
23 </div>
23 </div>
24
25 <style id="qsp-style">
26 </style>
@@ -35,6 +35,9 b''
35
35
36 #qsp-main {
36 #qsp-main {
37 flex: 6 6 60px;
37 flex: 6 6 60px;
38 background-repeat: no-repeat;
39 background-position: right top;
40 background-attachment: fixed;
38 }
41 }
39
42
40 #qsp-acts {
43 #qsp-acts {
@@ -14,8 +14,11 b''
14 ,@body
14 ,@body
15 (pop-local-frame))))
15 (pop-local-frame))))
16
16
17 (defpsmacro href-call (func &rest args)
18 `(+ "javascript:" (inline-call ,func ,@args)))
19
17 (defpsmacro inline-call (func &rest args)
20 (defpsmacro inline-call (func &rest args)
18 `(+ (ps-inline ,func)
21 `(+ ,func
19 "(\""
22 "(\""
20 ,(first args)
23 ,(first args)
21 ,@(loop :for arg :in (cdr args)
24 ,@(loop :for arg :in (cdr args)
@@ -32,3 +35,12 b''
32 (resolve)))))
35 (resolve)))))
33 ,@body))))
36 ,@body))))
34
37
38 (defvar serv-vars (create))
39
40 (defpsmacro define-serv-var (name (slot value &optional index) &body body)
41 (setf name (string-upcase (symbol-name name)))
42 `(setf (getprop serv-vars name)
43 (create :name ,name
44 :slot ,slot
45 :body (lambda (,value ,@(when index (list index)))
46 ,@body))))
@@ -9,17 +9,25 b''
9 ;;; Utils
9 ;;; Utils
10
10
11 (defun make-act-html (title img)
11 (defun make-act-html (title img)
12 (+ "<a class='qsp-act' href='" (inline-call call-act title) "'>"
12 (+ "<a class='qsp-act' href='" (href-call call-act title) "' onmouseover='" (inline-call select-act title) "'>"
13 (if img (+ "<img src='" img "'>") "")
13 (if img (+ "<img src='" img "'>") "")
14 title
14 title
15 "</a>"))
15 "</a>"))
16
16
17 (defun make-menu-item-html (num title img loc)
17 (defun make-menu-item-html (num title img loc)
18 (+ "<a href='" (inline-call finish-menu loc) "'>"
18 (+ "<a href='" (href-call finish-menu loc) "'>"
19 (if img (+ "<img src='" img "'>") "")
19 (if img (+ "<img src='" img "'>") "")
20 title
20 title
21 "</a>"))
21 "</a>"))
22
22
23 (defun make-obj (title img selected)
24 (+ "<li>"
25 "<a href='" (href-call select-obj title img) "'"
26 "class='qsp-obj" (if selected " qsp-obj-selected" "") "'>"
27 (if img (+ "<img src='" img "'>") "")
28 obj
29 "</a>"))
30
23 (defun make-menu-delimiter ()
31 (defun make-menu-delimiter ()
24 "<hr>")
32 "<hr>")
25
33
@@ -46,7 +54,9 b''
46 (setf (@ btn href) "#"))
54 (setf (@ btn href) "#"))
47 ;; Close image on click
55 ;; Close image on click
48 (setf (@ (by-id "qsp-image-container") onclick)
56 (setf (@ (by-id "qsp-image-container") onclick)
49 (show-image nil))
57 show-image)
58 (setf (@ (get-frame :input) onkeyup)
59 on-input-key)
50 ;; Close the dropdown on any click
60 ;; Close the dropdown on any click
51 (setf (@ window onclick)
61 (setf (@ window onclick)
52 (lambda (event)
62 (lambda (event)
@@ -60,7 +70,7 b''
60 (when loc-name
70 (when loc-name
61 (let ((loc (getprop (root locs) loc-name)))
71 (let ((loc (getprop (root locs) loc-name)))
62 (when loc
72 (when loc
63 (funcall loc args))))))
73 (call-loc loc-name args))))))
64
74
65 (defun filename-game (filename)
75 (defun filename-game (filename)
66 (let ((game-name (chain filename (match "(.*/)?([^.]+)(\\.[a-zA-Z]+)?") 2))))
76 (let ((game-name (chain filename (match "(.*/)?([^.]+)(\\.[a-zA-Z]+)?") 2))))
@@ -102,6 +112,11 b''
102 (when contents
112 (when contents
103 (incf (inner-html (by-id id)) (prepare-contents contents force-html))))
113 (incf (inner-html (by-id id)) (prepare-contents contents force-html))))
104
114
115 (defun on-input-key (ev)
116 (when (= 13 (@ ev key-code))
117 (chain ev (prevent-default))
118 (call-serv-loc "USERCOM")))
119
105 ;;; Function calls
120 ;;; Function calls
106
121
107 (defun init-args (args)
122 (defun init-args (args)
@@ -120,16 +135,17 b''
120 (setf name (chain name (to-upper-case)))
135 (setf name (chain name (to-upper-case)))
121 (with-frame
136 (with-frame
122 (with-call-args args
137 (with-call-args args
123 (funcall (getprop (root locs) name) args))))
138 (funcall (getprop (root locs) name)))))
124
139
125 (defun call-act (title)
140 (defun call-act (title)
126 (with-frame
141 (with-frame
127 (funcall (getprop (root acts) title 'act))))
142 (funcall (getprop (root acts) title :act))))
128
143
129 ;;; Text windows
144 ;;; Text windows
130
145
131 (defun key-to-id (key)
146 (defun key-to-id (key)
132 (case key
147 (case key
148 (:all "qsp")
133 (:main "qsp-main")
149 (:main "qsp-main")
134 (:stat "qsp-stat")
150 (:stat "qsp-stat")
135 (:objs "qsp-objs")
151 (:objs "qsp-objs")
@@ -160,7 +176,7 b''
160
176
161 (defun add-act (title img act)
177 (defun add-act (title img act)
162 (setf (getprop (root acts) title)
178 (setf (getprop (root acts) title)
163 (create img img act act))
179 (create :title title :img img :act act :selected nil))
164 (update-acts))
180 (update-acts))
165
181
166 (defun del-act (title)
182 (defun del-act (title)
@@ -169,7 +185,7 b''
169
185
170 (defun clear-act ()
186 (defun clear-act ()
171 (setf (root acts) (create))
187 (setf (root acts) (create))
172 (clear-id "qsp-acts"))
188 (update-acts))
173
189
174 (defun update-acts ()
190 (defun update-acts ()
175 (clear-id "qsp-acts")
191 (clear-id "qsp-acts")
@@ -178,6 +194,11 b''
178 (let ((obj (getprop (root acts) title)))
194 (let ((obj (getprop (root acts) title)))
179 (incf (inner-html elt) (make-act-html title (getprop obj :img)))))))
195 (incf (inner-html elt) (make-act-html title (getprop obj :img)))))))
180
196
197 (defun select-act (title)
198 (loop :for (k v) :of (root acts)
199 (setf (getprop v :selected) nil))
200 (setf (getprop (root acts) title :selected) t)
201 (call-serv-loc "ONACTSEL"))
181
202
182 ;;; "Syntax"
203 ;;; "Syntax"
183
204
@@ -193,9 +214,9 b''
193
214
194 (defun *var (name)
215 (defun *var (name)
195 ;; From strings to numbers
216 ;; From strings to numbers
196 (setf (@ this indexes) (create))
217 (setf (@ this :indexes) (create))
197 ;; From numbers to {num: 0, str: ""} objects
218 ;; From numbers to {num: 0, str: ""} objects
198 (setf (@ this values) (list))
219 (setf (@ this :values) (list))
199 (void))
220 (void))
200
221
201 (defun new-value ()
222 (defun new-value ()
@@ -205,39 +226,39 b''
205 (lambda (index)
226 (lambda (index)
206 (let ((num-index
227 (let ((num-index
207 (if (stringp index)
228 (if (stringp index)
208 (if (in index (@ this indexes))
229 (if (in index (@ this :indexes))
209 (getprop (@ this indexes) index)
230 (getprop (@ this :indexes) index)
210 (let ((n (length (@ this values))))
231 (let ((n (length (@ this :values))))
211 (setf (getprop (@ this indexes) index) n)
232 (setf (getprop (@ this :indexes) index) n)
212 n))
233 n))
213 index)))
234 index)))
214 (unless (in num-index (@ this values))
235 (unless (in num-index (@ this :values))
215 (setf (elt (@ this values) num-index) (new-value)))
236 (setf (elt (@ this :values) num-index) (new-value)))
216 num-index)))
237 num-index)))
217
238
218 (setf (@ *var prototype get)
239 (setf (@ *var prototype get)
219 (lambda (index slot)
240 (lambda (index slot)
220 (unless (or index (= 0 index))
241 (unless (or index (= 0 index))
221 (setf index (1- (length (@ this values)))))
242 (setf index (1- (length (@ this :values)))))
222 (getprop (@ this values) (chain this (index-num index)) slot)))
243 (getprop (@ this :values) (chain this (index-num index)) slot)))
223
244
224 (setf (@ *var prototype set)
245 (setf (@ *var prototype set)
225 (lambda (index slot value)
246 (lambda (index slot value)
226 (unless (or index (= 0 index))
247 (unless (or index (= 0 index))
227 (setf index (length (@ this values))))
248 (setf index (length (@ this :values))))
228 (case slot
249 (case slot
229 (:num (setf value (chain *number (parse-int value))))
250 (:num (setf value (chain *number (parse-int value))))
230 (:str (setf value (chain value (to-string)))))
251 (:str (setf value (chain value (to-string)))))
231 (setf (getprop (@ this values)
252 (setf (getprop (@ this :values)
232 (chain this (index-num index))
253 (chain this (index-num index))
233 slot) value)
254 slot) value)
234 (void)))
255 (void)))
235
256
236 (setf (@ *var prototype kill)
257 (setf (@ *var prototype kill)
237 (lambda (index)
258 (lambda (index)
238 (setf (elt (@ this values) (chain this (index-num index)))
259 (setf (elt (@ this :values) (chain this (index-num index)))
239 (new-value))
260 (new-value))
240 (delete (getprop 'this 'indexes index))))
261 (delete (getprop 'this :indexes index))))
241
262
242 ;;; Variables
263 ;;; Variables
243
264
@@ -267,17 +288,22 b''
267
288
268 (defun set-var (name index slot value)
289 (defun set-var (name index slot value)
269 (chain (ensure-var name) (set index slot value))
290 (chain (ensure-var name) (set index slot value))
291 (let ((serv-var (getprop serv-vars name)))
292 (when serv-var
293 (funcall (@ serv-var :func)
294 (get-var name index (@ serv-var :slot))
295 index)))
270 (void))
296 (void))
271
297
272 (defun get-array (name)
298 (defun get-array (name)
273 (setf name (chain name (to-upper-case)))
299 (setf name (chain name (to-upper-case)))
274 (var-ref name))
300 (ensure-var name))
275
301
276 (defun set-array (name value)
302 (defun set-array (name value)
277 (setf name (chain name (to-upper-case)))
303 (setf name (chain name (to-upper-case)))
278 (let ((store (var-ref name)))
304 (let ((store (ensure-var name)))
279 (setf (@ store values) (@ value values))
305 (setf (@ store :values) (@ value :values))
280 (setf (@ store indexes) (@ value indexes)))
306 (setf (@ store :indexes) (@ value :indexes)))
281 (void))
307 (void))
282
308
283 (defun kill-var (name &optional index)
309 (defun kill-var (name &optional index)
@@ -288,7 +314,7 b''
288 (void))
314 (void))
289
315
290 (defun array-size (name)
316 (defun array-size (name)
291 (@ (var-ref name) values length))
317 (@ (var-ref name) :values length))
292
318
293 ;;; Locals
319 ;;; Locals
294
320
@@ -311,11 +337,18 b''
311
337
312 ;;; Objects
338 ;;; Objects
313
339
340 (defun select-obj (title img)
341 (loop :for (k v) :of (root objs)
342 (setf (getprop v :selected) nil))
343 (setf (getprop (root objs) title :selected) t)
344 (call-serv-loc "ONOBJSEL" title img))
345
314 (defun update-objs ()
346 (defun update-objs ()
315 (let ((elt (by-id "qsp-objs")))
347 (let ((elt (by-id "qsp-objs")))
316 (setf (inner-html elt) "<ul>")
348 (setf (inner-html elt) "<ul>")
317 (loop :for obj :in (root objs)
349 (loop :for obj :in (root objs)
318 :do (incf (inner-html elt) (+ "<li>" obj)))
350 :do (incf (inner-html elt)
351 (make-obj obj)))
319 (incf (inner-html elt) "</ul>")))
352 (incf (inner-html elt) "</ul>")))
320
353
321 ;;; Menu
354 ;;; Menu
@@ -378,6 +411,17 b''
378 (setf (@ img src) "")
411 (setf (@ img src) "")
379 (setf (@ img style display) "hidden")))))
412 (setf (@ img style display) "hidden")))))
380
413
414 (defun rgb-string (rgb)
415 (let ((red (rgb >> 16))
416 (green (& (rgb >> 8) 255))
417 (blue (& rgb 255)))
418 (flet ((rgb-to-hex (comp)
419 (let ((hex (chain (*number comp) (to-string 16))))
420 (if (< (length hex) 2)
421 (+ "0" hex)
422 hex))))
423 (+ "#" (rgb-to-hex red) (rgb-to-hex green) (rgb-to-hex red)))))
424
381 ;;; Saves
425 ;;; Saves
382
426
383 (defun opengame ()
427 (defun opengame ()
@@ -467,3 +511,18 b''
467 (lambda ()
511 (lambda ()
468 (call-serv-loc "COUNTER"))
512 (call-serv-loc "COUNTER"))
469 interval)))
513 interval)))
514
515 ;;; Special variables
516
517 (define-serv-var backimage (:str path)
518 (setf (@ (get-frame :main) style background-image) path))
519
520 (define-serv-var bcolor (:num color)
521 (setf (@ (get-frame :all) style background-color) (rgb-string color)))
522
523 (define-serv-var fcolor (:num color)
524 (setf (@ (get-frame :all) style color) (rgb-string color)))
525
526 (define-serv-var lcolor (:num color)
527 (setf (@ (get-frame :style) inner-text)
528 (+ "a { color: " (rgb-string color) ";}")))
@@ -155,12 +155,6 b''
155
155
156 ;;; 21local
156 ;;; 21local
157
157
158 (defpsmacro local (var &optional expr)
159 `(progn
160 (api-call new-local ,(string (second var)))
161 ,@(when expr
162 `((set ,var ,expr)))))
163
164 ;;; 22for
158 ;;; 22for
165
159
166 ;;; misc
160 ;;; misc
@@ -18,6 +18,7 b''
18 (setf (root current-location) (chain target (to-upper-case)))
18 (setf (root current-location) (chain target (to-upper-case)))
19 (api:stash-state args)
19 (api:stash-state args)
20 (api:call-loc (root current-location) args)
20 (api:call-loc (root current-location) args)
21 (api:call-serv-loc "ONNEWLOC")
21 (void))
22 (void))
22
23
23 ;;; 2var
24 ;;; 2var
@@ -142,7 +143,6 b''
142 (api:get-text :main)
143 (api:get-text :main)
143 (void))
144 (void))
144
145
145 ;; For clarity (it leaves a lib.desc() call in JS)
146 (defun desc (s)
146 (defun desc (s)
147 "")
147 "")
148
148
@@ -193,24 +193,31 b''
193
193
194 ;;; 15objs
194 ;;; 15objs
195
195
196 (defun addobj (name)
196 (defun addobj (name img)
197 (chain (root objs) (push name))
197 (setf img (or img ""))
198 (setf (getprop (root objs) name)
199 (create :name name :img img :selected nil))
198 (api:update-objs)
200 (api:update-objs)
201 (api-call call-serv-loc "ONOBJADD" name img)
199 (void))
202 (void))
200
203
201 (defun delobj (name)
204 (defun delobj (name)
202 (let ((index (chain (root objs) (index-of name))))
205 (delete (getprop (root objs) name))
203 (when (> index -1)
206 (api-call call-serv-loc "ONOBJDEL" name)
204 (killobj (1+ index))))
205 (void))
207 (void))
206
208
207 (defun killobj (&optional (num nil))
209 (defun killobj (&optional (num nil))
208 (if (eq nil num)
210 (if (eq nil num)
209 (setf (root objs) (list))
211 (setf (root objs) (create))
210 (chain (root objs) (splice (1- num) 1)))
212 (delobj (elt (chain *object (keys (root objs))) num)))
211 (api:update-objs)
213 (api:update-objs)
212 (void))
214 (void))
213
215
216 (defun selobj ()
217 (loop :for (k v) :of (root objs)
218 :do (when (@ v :selected)
219 (return-from selobj (@ v :name)))))
220
214 ;;; 16menu
221 ;;; 16menu
215
222
216 (defun menu (menu-name)
223 (defun menu (menu-name)
@@ -286,12 +293,9 b''
286 ;;; misc
293 ;;; misc
287
294
288 (defun rgb (red green blue)
295 (defun rgb (red green blue)
289 (flet ((rgb-to-hex (comp)
296 (+ (<< red 16)
290 (let ((hex (chain (*number comp) (to-string 16))))
297 (<< green 8)
291 (if (< (length hex) 2)
298 blue))
292 (+ "0" hex)
293 hex))))
294 (+ "#" (rgb-to-hex red) (rgb-to-hex green) (rgb-to-hex red))))
295
299
296 (defun openqst (name)
300 (defun openqst (name)
297 (api-call run-game name))
301 (api-call run-game name))
@@ -12,7 +12,7 b''
12 (syms
12 (syms
13 ;; main
13 ;; main
14 window
14 window
15 *object
15 *object assign
16 now
16 now
17 onload
17 onload
18 keys includes
18 keys includes
@@ -7,7 +7,7 b''
7 ;; Variables
7 ;; Variables
8 vars (create)
8 vars (create)
9 ;; Inventory (objects)
9 ;; Inventory (objects)
10 objs (list)
10 objs (create)
11 current-location nil
11 current-location nil
12 ;; Game time
12 ;; Game time
13 started-at (chain *date (now))
13 started-at (chain *date (now))
@@ -40,7 +40,7 b''
40 (defpsmacro location ((name) &body body)
40 (defpsmacro location ((name) &body body)
41 (declare (ignore name))
41 (declare (ignore name))
42 "Name is used by the game macro above"
42 "Name is used by the game macro above"
43 `(async-lambda (args)
43 `(async-lambda ()
44 (label-block ()
44 (label-block ()
45 ,@body)))
45 ,@body)))
46
46
@@ -125,6 +125,9 b''
125 (getprop _labels ,(first rest-labels))))))))))
125 (getprop _labels ,(first rest-labels))))))))))
126 (funcall (getprop _labels "_nil"))))))
126 (funcall (getprop _labels "_nil"))))))
127
127
128 (defpsmacro exit ()
129 '(return-from nil (values)))
130
128 ;;; 10dynamic
131 ;;; 10dynamic
129
132
130 (defpsmacro qspblock (&body body)
133 (defpsmacro qspblock (&body body)
@@ -160,6 +163,12 b''
160
163
161 ;;; 21local
164 ;;; 21local
162
165
166 (defpsmacro local (var &optional expr)
167 `(progn
168 (api-call new-local ,(string (second var)))
169 ,@(when expr
170 `((set ,var ,expr)))))
171
163 ;;; 22for
172 ;;; 22for
164
173
165 (defpsmacro qspfor (var from to step &body body)
174 (defpsmacro qspfor (var from to step &body body)
@@ -13,7 +13,6 b''
13 (:file "main-macros")
13 (:file "main-macros")
14 (:file "ps-macros")
14 (:file "ps-macros")
15 (:file "api-macros")
15 (:file "api-macros")
16 (:file "intrinsic-macros")
17 (:file "class")
16 (:file "class")
18 (:file "main")
17 (:file "main")
19 (:file "parser")))
18 (:file "parser")))
General Comments 0
You need to be logged in to leave comments. Login now