1 ;;; Copyright 2009 Christoph Senjak
3 (in-package :uxul-world)
5 (defparameter *cfont* nil)
7 (defun start-game (&key (music nil) room-function (15-fps nil))
8 "Start the Game: Call room-function for getting the room-object to
9 run. Music is ignored so far. 15-fps makes only every second frame be
10 drawn (for very slow computers)"
11 (sdl:with-init (sdl:sdl-init-video sdl:sdl-init-audio)
12 (sdl:window +screen-width+ +screen-height+
13 :title-caption "Uxul World"
14 :icon-caption "Uxul World"
15 :flags (logior sdl:sdl-hw-accel sdl:sdl-hw-surface)
16 ;:flags (logior sdl:sdl-hw-surface) #| sdl:sdl-fullscreen )|#
18 ;;(if music (sdl-mixer:OPEN-AUDIO :frequency 44100))
19 (let ((*graphics-table*
20 #-ecl (trivial-garbage:make-weak-hash-table
23 #+ecl (make-hash-table :test #'equal)
26 (setf (sdl:frame-rate) 15)
27 (setf (sdl:frame-rate) 30))
29 (setf *current-room* (funcall room-function))
31 (sdl:clear-display (sdl:color :r 0 :g 0 :b 0));; :update-p nil)
33 ;;(if music (sdl-mixer:play-sample levelmusic))
38 (progn (sdl-mixer:halt-music)
39 (sdl-mixer:halt-sample :channel t)
40 (sdl-mixer:free levelmusic)
41 (sdl-mixer:close-audio))
44 (:key-down-event (:key key)
46 ((sdl:key= key :SDL-KEY-ESCAPE)
47 (sdl:push-quit-event))
49 (on-key-down *current-room* key))))
50 (:key-up-event (:key key)
51 (on-key-up *current-room* key))
54 (invoke *current-room*)
56 (invoke *current-room*))
57 (sdl:clear-display (sdl:color :r 128 :g 128 :b 128)); :update-p nil)
65 (defun preview-animation (frameskip &rest images)
67 (sdl:with-init (sdl:sdl-init-video sdl:sdl-init-audio)
68 (sdl:window +screen-width+ +screen-height+
69 :title-caption "Uxul World"
70 :icon-caption "Uxul World"
71 :flags (logior sdl:sdl-hw-accel)
72 #| :flags (logior sdl:sdl-hw-surface sdl:sdl-fullscreen )|# )
73 (let ((*graphics-table*
74 #-ecl (trivial-garbage:make-weak-hash-table
77 #+ecl (make-hash-table :test #'equal)
79 (my-anim (apply #'make-animation frameskip images))
82 (setf (sdl:frame-rate) 30)
83 (sdl:clear-display (sdl:color :r 64 :g 64 :b 46));; :update-p nil)
87 (:key-down-event (:key key)
89 ((sdl:key= key :SDL-KEY-ESCAPE)
90 (sdl:push-quit-event))))
93 (sdl:clear-display (sdl:color :r 64 :g 64 :b 46));; :update-p nil)