(in-package txt2web.main) ;;; Game session state (saved in savegames) ;; Variables (var *globals (create)) (var *default-globals (create)) ;; Inventory (objects) (var *objs (create)) (var *current-location nil) ;; Game time (var *started-at (chain *date (now))) ;; Timers (var *timer-interval 500) (var *timer-obj nil) ;; Games (var *loaded-games (list)) ;;; Transient state ;; ACTions (var *acts (create)) ;; Savegame data (var *state-stash (create)) ;; List of audio files being played (var *playing (create)) ;; Local variables stack (starts with an empty frame) (var *locals (list)) ;; Promise to continue running the game after menu (var *menu-resume nil) ;;; Game data ;; Games (filename -> [locations]) (var *games (list)) ;; The main (non library) game. Updated by openqst (var *main-game nil) ;; Active locations (var *locs (create)) (setf (@ window onload) #'start) (defun start () (#.(intern "INIT-DOM" "TXT2WEB.API")) ;; For MSECCOUNT (setf *started-at (chain *date (now))) ;; For $COUNTER and SETTIMER (#.(intern "SET-TIMER" "TXT2WEB.API") *timer-interval) ;; Start the first game (let ((first-game (chain *object (keys *games) 0))) (#.(intern "INIT-GLOBALS" "TXT2WEB.API") first-game) (#.(intern "RUN-GAME" "TXT2WEB.API") first-game)) (values)) ;;; Some very common utilities (for both api and lib) (defun by-id (id) (chain document (get-element-by-id id)))