Show More
@@ -9,6 +9,10 b'' | |||
|
9 | 9 | <div id="qsp-stat" class="qsp-frame"> </div> |
|
10 | 10 | <div id="qsp-objs" class="qsp-frame"> </div> |
|
11 | 11 | </div> |
|
12 | <div class="qsp-col qsp-col3"> | |
|
13 | <a href="javascript:SugarQSP.lib.savegame()"><img id="qsp-btn-save"></a> | |
|
14 | <a href="javascript:SugarQSP.lib.opengame()"><img id="qsp-btn-load"></a> | |
|
15 | </div> | |
|
12 | 16 | </div> |
|
13 | 17 | |
|
14 | 18 | <div id="qsp-dropdown"> |
@@ -29,6 +29,10 b'' | |||
|
29 | 29 | flex: 3 3 30px; |
|
30 | 30 | } |
|
31 | 31 | |
|
32 | .qsp-col3 { | |
|
33 | flex: 0 0 40px; | |
|
34 | } | |
|
35 | ||
|
32 | 36 | #qsp-main { |
|
33 | 37 | flex: 6 6 60px; |
|
34 | 38 | } |
@@ -58,7 +62,7 b'' | |||
|
58 | 62 | outline: #9E9E9E outset 3px |
|
59 | 63 | } |
|
60 | 64 | |
|
61 |
/ |
|
|
65 | /* Dropdown */ | |
|
62 | 66 | |
|
63 | 67 | #qsp-dropdown { |
|
64 | 68 | display: none; |
@@ -82,3 +86,18 b'' | |||
|
82 | 86 | #qsp-dropdown a:hover { |
|
83 | 87 | background-color: #ddd; |
|
84 | 88 | } |
|
89 | ||
|
90 | /* Buttons */ | |
|
91 | ||
|
92 | .qsp-col3 a, .qsp-col3 img { | |
|
93 | width: 50px; | |
|
94 | height: 50px; | |
|
95 | } | |
|
96 | ||
|
97 | #qsp-btn-save { | |
|
98 | background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAACSklEQVRoge3ZPWgUQRjG8V/iRRFU/GoEQdSohSgWWqQSooVgK9iJFiKCnYV2BkFQsBRBQQwWVsHKIoWxEOzEwmhhogbRMhhFicTvYm+JCUlmZzabRLN/OPaWeZ+ZeW7feXf2lpqampqamnRaImKP4hA2VjCP27hbpoNGwbib2IPreB+IPYY7M7SvxWYM4QNO4QqWyQxVRgdeYnnB+K5A+wUcbB7z+O14hxPx08toLRDTgfv4mjrIJFrwwMS0HsABXMTxlE6LpNYqfE7pPJIBdOKhLM1uxIiLrpG5YtC4GSLMVGGkLdD+GpfxAuvxaVL7oCzN+jCG7iKDVmHkKS5hSSBuJ3bg6hRt+Zrpa553z8bEuoQrUVXk1exwKLBI1ZpPBnAL+0KBqanVim1Ykaifji+yNfIrVphipB1n8BgjCfqZ2IrTuIZXMcIUIydxFj8TtEW4JysW52JEKWtkVHUm4EdzjChSrkgLlmJXghb6m8ep9MN4K25XjvTF3sCaElrT6McS+0w2Mirb+JWhrH4CC/0+UpjUK7Ia5/86f4IeHMHeEvPJ+4km1chHE43k9KROpCyLPrViym8/vjW/b5Jt3acjL7/RzEX5bRg3sjKg+2fK7/PmZ9aZzdTqxwYzp06IBZFaDeHUCbFgUquy1Anx35TfRWXkd+WzCBOcQxEjQ7JH0PmiHW9CQUWM9Mr+Y+osO6ME8nF7Q4FFn8T2y14VDMt2vsFfqCRbZBvTdbLXFI9CgphHyjbsVu4+EcMInuH7HI1XU1NTU7OI+QMFe2N82rtssgAAAABJRU5ErkJggg=='); | |
|
99 | } | |
|
100 | ||
|
101 | #qsp-btn-load { | |
|
102 | background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAACCklEQVRoge3Yz6sNYRzH8deVexNxSaEoroWFUuomOceSPVnIwsbSxs6Psrgphf9AsrZR7kJWsroUlrZKKZRSl4USGouZk9Npzp1n5pm5x4/nXdNzpvP9Pp/v95nv82OGRCKRSCQS/w8zuIn3yGpe37CEQ6sedQk38BA7G/jO4BQ+YEebQZUxVfH/OxzGVSxX2D4o2mO4jmt4jpNFe6d5mPFkRbvQ0H9h6OqUtR33/xXr0celGn4/sYjXoQ5dJ3ILB7AOW2r4bcIj7GsrkEFpXWyrwwbaf15nXWqv6SqK1abuHDmPjV0EMobhBWIZt8cZVu0j2ZDNHF7gblRozdiO49g1zqDOEzmKJ7gcGVQTzmLDSgZ1Eunh2dD9aewpsXtctH3cwzn5ALysoVWlXZvhleMV5ovfU8J363mciAliRLsRg0Q244vfT3A/zgT2cQHbImIY1S4ldPk9Ii+NH8V9H08DfbfiY6BtiHYpoYmMBr4bbwN9YzfVoEELnew9+blpwBv5u0oI9wPtQrUbkWFaXqOzsZ01IFg7pLQOyp/A58igmhCsHZJInYndNsHa/0wiVWTy9/a5NjprQGvag0Qmwd462iGltdQ8lihqlVVIIn/9/CAvrajDWgTRB8VhMt1/aSljVr4RToc6hJTWioe1jujJD4rfQx2qRvuTyX1JuTIh3UQikUgkEhPnF+1xZ9hHnLjAAAAAAElFTkSuQmCC'); | |
|
103 | } |
@@ -36,6 +36,8 b'' | |||
|
36 | 36 | (defm (root api base64-to-state) (data) |
|
37 | 37 | (setf (root state-stash) (decode-u-r-i-component (atob data))) |
|
38 | 38 | (let ((data (*j-s-o-n.parse (root state-stash)))) |
|
39 | (api-call clear-id :qsp-main) | |
|
40 | (api-call clear-id :qsp-stat) | |
|
39 | 41 | (api-call clear-act) |
|
40 | 42 | (setf (root vars) (ps:@ data vars)) |
|
41 | 43 | (setf (root objs) (ps:@ data objs)) |
@@ -198,3 +200,11 b'' | |||
|
198 | 200 | :do (incf i) |
|
199 | 201 | :do (incf elt.inner-h-t-m-l (api-call make-menu-item-html i item.text item.icon item.loc))) |
|
200 | 202 | (setf elt.style.display "block"))) |
|
203 | ||
|
204 | ;;; Content | |
|
205 | ||
|
206 | (defm (root api clean-audio) () | |
|
207 | (loop :for k :in (*object.keys (root playing)) | |
|
208 | :for v := (ps:getprop (root playing) k) | |
|
209 | :do (when (ps:@ v ended) | |
|
210 | (ps:delete (ps:@ (root playing) k))))) |
@@ -128,6 +128,9 b'' | |||
|
128 | 128 | |
|
129 | 129 | ;;; 17sound |
|
130 | 130 | |
|
131 | (ps:defpsmacro isplay (filename) | |
|
132 | `(funcall (root playing includes) ,filename)) | |
|
133 | ||
|
131 | 134 | ;;; 18img |
|
132 | 135 | |
|
133 | 136 | ;;; 19input |
@@ -197,13 +197,13 b'' | |||
|
197 | 197 | (defm (root lib delobj) (name) |
|
198 | 198 | (let ((index (ps:chain (root objs) (index-of name)))) |
|
199 | 199 | (when (> index -1) |
|
200 | (funcall (root lib killobj) index))) | |
|
200 | (funcall (root lib killobj) (1+ index)))) | |
|
201 | 201 | (values)) |
|
202 | 202 | |
|
203 | (defm (root lib killobj) (&optional num) | |
|
204 | (if num | |
|
205 |
( |
|
|
206 |
( |
|
|
203 | (defm (root lib killobj) (&optional (num nil)) | |
|
204 | (if (eq nil num) | |
|
205 | (setf (root objs) (list)) | |
|
206 | (ps:chain (root objs) (splice (1- num) 1))) | |
|
207 | 207 | (api-call update-objs) |
|
208 | 208 | (values)) |
|
209 | 209 | |
@@ -232,13 +232,21 b'' | |||
|
232 | 232 | |
|
233 | 233 | ;;; 17sound |
|
234 | 234 | |
|
235 | (defm (root lib play) ()) | |
|
236 | ||
|
237 | (defm (root lib isplay) ()) | |
|
235 | (defm (root lib play) (filename &optional (volume 100)) | |
|
236 | (let ((audio (ps:new (*audio filename)))) | |
|
237 | (setf (ps:getprop (root playing) filename) audio) | |
|
238 | (setf (ps:@ audio volume) (* volume 0.01)) | |
|
239 | (ps:chain audio (play)))) | |
|
238 | 240 | |
|
239 |
(defm (root lib close) ( |
|
|
241 | (defm (root lib close) (filename) | |
|
242 | (funcall (root playing filename) stop) | |
|
243 | (ps:delete (root playing filename))) | |
|
240 | 244 | |
|
241 |
(defm (root lib closeall) () |
|
|
245 | (defm (root lib closeall) () | |
|
246 | (loop :for k :in (*object.keys (root playing)) | |
|
247 | :for v := (ps:getprop (root playing) k) | |
|
248 | :do (funcall v stop)) | |
|
249 | (setf (root playing) (ps:create))) | |
|
242 | 250 | |
|
243 | 251 | ;;; 18img |
|
244 | 252 |
@@ -2,10 +2,21 b'' | |||
|
2 | 2 | (in-package sugar-qsp) |
|
3 | 3 | |
|
4 | 4 | (setf (root) |
|
5 |
( |
|
|
5 | (ps:create | |
|
6 | ;;; Game session state | |
|
7 | ;; Variables | |
|
8 | vars (ps:create) | |
|
9 | ;; Inventory (objects) | |
|
6 | 10 |
|
|
11 | ;;; Transient state | |
|
12 | ;; Savegame data | |
|
7 | 13 |
|
|
14 | ;; List of audio files being played | |
|
15 | playing (ps:create) | |
|
16 | ;;; Game data | |
|
17 | ;; ACTions | |
|
8 | 18 |
|
|
19 | ;; Locations | |
|
9 | 20 |
|
|
10 | 21 | |
|
11 | 22 | ;; Launch the game from the first location |
General Comments 0
You need to be logged in to leave comments.
Login now