;;-*-Lisp-*- (in-package goal) ;; name: settings.gc ;; name in dgo: settings ;; dgos: GAME, ENGINE (defmethod handle-pending-updates setting-data ((obj setting-data) (arg0 engine)) "this goes through the list of pending setting changes in the engine/connection list and updates the setting-data" (let ((conn (the-as connection (-> arg0 alive-list-end))) (s4-0 (-> arg0 alive-list-end prev0)) ) (while (!= (the-as connectable conn) (-> arg0 alive-list)) (case (-> conn param0) (('border-mode) (set! (-> obj border-mode) (the-as symbol (-> conn param1))) ) (('allow-look-around) (set! (-> obj allow-look-around) (the-as symbol (-> conn param1))) ) (('ocean-off) (set! (-> obj ocean-off) (the-as symbol (-> conn param1))) ) (('music) (set! (-> obj music) (the-as symbol (-> conn param1))) ) (('process-mask) (case (-> conn param1) (('set) (logior! (-> obj process-mask) (the-as process-mask (-> conn param3))) ) (('clear) (logclear! (-> obj process-mask) (the-as process-mask (-> conn param3))) ) (('abs) (set! (-> obj process-mask) (the-as process-mask (-> conn param3))) ) ) ) (('sfx-volume) (when (or (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask progress))) (= (get-process conn) (ppointer->process *progress-process*)) ) (let ((v1-20 (the-as symbol (-> conn param1)))) (if (= v1-20 'rel) (set! (-> obj sfx-volume) (* (* 0.01 (the-as float (-> conn param2))) (-> obj sfx-volume)) ) (set! (-> obj sfx-volume) (the-as float (-> conn param2))) ) ) ) ) (('music-volume) (let ((v1-25 (the-as symbol (-> conn param1)))) (if (= v1-25 'rel) (set! (-> obj music-volume) (* (* 0.01 (the-as float (-> conn param2))) (-> obj music-volume)) ) (set! (-> obj music-volume) (the-as float (-> conn param2))) ) ) ) (('ambient-volume) (let ((v1-30 (the-as symbol (-> conn param1)))) (if (= v1-30 'rel) (set! (-> obj ambient-volume) (* (* 0.01 (the-as float (-> conn param2))) (-> obj ambient-volume)) ) (set! (-> obj ambient-volume) (the-as float (-> conn param2))) ) ) ) (('dialog-volume) (let ((v1-35 (the-as symbol (-> conn param1)))) (if (= v1-35 'rel) (set! (-> obj dialog-volume) (* (* 0.01 (the-as float (-> conn param2))) (-> obj dialog-volume)) ) (set! (-> obj dialog-volume) (the-as float (-> conn param2))) ) ) ) (('sfx-volume-movie) (let ((v1-40 (the-as symbol (-> conn param1)))) (if (= v1-40 'rel) (set! (-> obj sfx-volume-movie) (* (* 0.01 (the-as float (-> conn param2))) (-> obj sfx-volume-movie)) ) (set! (-> obj sfx-volume-movie) (the-as float (-> conn param2))) ) ) ) (('music-volume-movie) (let ((v1-45 (the-as symbol (-> conn param1)))) (if (= v1-45 'rel) (set! (-> obj music-volume-movie) (* (* 0.01 (the-as float (-> conn param2))) (-> obj music-volume-movie) ) ) (set! (-> obj music-volume-movie) (the-as float (-> conn param2))) ) ) ) (('ambient-volume-movie) (let ((v1-50 (the-as symbol (-> conn param1)))) (if (= v1-50 'rel) (set! (-> obj ambient-volume-movie) (* (* 0.01 (the-as float (-> conn param2))) (-> obj ambient-volume-movie) ) ) (set! (-> obj ambient-volume-movie) (the-as float (-> conn param2))) ) ) ) (('dialog-volume-hint) (let ((v1-55 (the-as symbol (-> conn param1)))) (if (= v1-55 'rel) (set! (-> obj dialog-volume-hint) (* (* 0.01 (the-as float (-> conn param2))) (-> obj dialog-volume-hint) ) ) (set! (-> obj dialog-volume-hint) (the-as float (-> conn param2))) ) ) ) (('sound-flava) (when (>= (the-as float (-> conn param2)) (-> obj sound-flava-priority)) (set! (-> obj sound-flava) (the-as uint (the-as int (-> conn param3)))) (set! (-> obj sound-flava-priority) (the-as float (-> conn param2))) ) ) (('bg-r) (set! (-> obj bg-r) (the-as float (-> conn param2))) ) (('bg-g) (set! (-> obj bg-g) (the-as float (-> conn param2))) ) (('bg-b) (set! (-> obj bg-b) (the-as float (-> conn param2))) ) (('bg-a) (set! (-> obj bg-a) (the-as float (-> conn param2))) ) (('bg-a-speed) (set! (-> obj bg-a-speed) (the-as float (-> conn param2))) ) (('bg-a-force) (set! (-> obj bg-a-force) (the-as float (-> conn param2))) ) (('language) (set! (-> obj language) (the-as language-enum (-> conn param3))) ) (('vibration) (set! (-> obj vibration) (the-as symbol (-> conn param1))) ) (('auto-save) (set! (-> obj auto-save) (the-as symbol (-> conn param1))) ) (('allow-pause) (set! (-> obj allow-pause) (the-as symbol (-> conn param1))) ) (('allow-progress) (set! (-> obj allow-progress) (the-as symbol (-> conn param1))) ) (('play-hints) (set! (-> obj play-hints) (the-as symbol (-> conn param1))) ) (('movie) (set! (-> obj movie) (the-as (pointer progress) (-> conn param1))) ) (('talking) (set! (-> obj talking) (the-as (pointer progress) (-> conn param1))) ) (('spooling) (set! (-> obj spooling) (the-as (pointer progress) (-> conn param1))) ) (('hint) (set! (-> obj hint) (the-as (pointer process) (-> conn param1))) ) (('ambient) (set! (-> obj ambient) (the-as (pointer progress) (-> conn param1))) ) (('common-page) (case (-> conn param1) (('set) (logior! (-> obj common-page) (the-as int (-> conn param3))) ) (('clear) (logclear! (-> obj common-page) (the-as int (-> conn param3))) ) ) ) ) (set! conn (the-as connection s4-0)) (set! s4-0 (-> (the-as connectable conn) prev0)) ) ) obj ) (defmethod push-setting! setting-control ((obj setting-control) (arg0 process) (arg1 (function object object object object object)) (arg2 object) (arg3 object) (arg4 object)) (add-connection (-> obj engine) arg0 arg1 arg2 arg3 arg4) 0 (none) ) (defmethod set-setting! setting-control ((obj setting-control) (arg0 process) (arg1 symbol) (arg2 symbol) (arg3 float) (arg4 int)) (clear-pending-settings-from-process obj arg0 arg1) (add-connection (-> obj engine) arg0 (the-as (function object object object object object) arg1) arg2 arg3 arg4 ) 0 (none) ) (defmethod clear-pending-settings-from-process setting-control ((obj setting-control) (arg0 process) (arg1 symbol)) (when arg0 (let ((s5-0 (-> obj engine)) (s4-0 (-> arg0 connection-list next1)) ) (while s4-0 (if (and ((method-of-type connection belongs-to-engine?) (the-as connection s4-0) s5-0 ) (or (= arg1 #t) (= arg1 (-> (the-as connection s4-0) param0))) ) ((method-of-type connection move-to-dead) (the-as connection s4-0)) ) (set! s4-0 (-> s4-0 next1)) ) ) ) 0 (none) ) (defmethod copy-settings-from-target! setting-control ((obj setting-control)) (let ((gp-0 (-> obj current))) (let ((s5-0 (-> obj target))) (mem-copy! (the-as pointer s5-0) (the-as pointer (-> obj default)) 196) (set! (-> s5-0 ambient-volume) (* (* 0.01 (-> obj default ambient-volume)) (-> obj default sfx-volume)) ) (handle-pending-updates s5-0 (-> obj engine)) (set! (-> gp-0 border-mode) (-> s5-0 border-mode)) (set! (-> gp-0 common-page) (-> s5-0 common-page)) (set! (-> gp-0 vibration) (-> s5-0 vibration)) (set! (-> gp-0 auto-save) (-> s5-0 auto-save)) (set! (-> gp-0 play-hints) (-> s5-0 play-hints)) (set! (-> gp-0 movie) (-> s5-0 movie)) (set! (-> gp-0 talking) (-> s5-0 talking)) (set! (-> gp-0 spooling) (-> s5-0 spooling)) (set! (-> gp-0 hint) (-> s5-0 hint)) (set! (-> gp-0 ambient) (-> s5-0 ambient)) (set! (-> gp-0 allow-pause) (-> s5-0 allow-pause)) (set! (-> gp-0 allow-progress) (-> s5-0 allow-progress)) (set! (-> gp-0 allow-look-around) (-> s5-0 allow-look-around)) (set! (-> gp-0 ocean-off) (-> s5-0 ocean-off)) (set! (-> gp-0 ambient-volume-movie) (-> s5-0 ambient-volume-movie)) (set! (-> gp-0 music-volume-movie) (-> s5-0 music-volume-movie)) (set! (-> gp-0 sfx-volume-movie) (-> s5-0 sfx-volume-movie)) (set! (-> gp-0 dialog-volume-hint) (-> s5-0 dialog-volume-hint)) (set! (-> gp-0 process-mask) (-> s5-0 process-mask)) ) (set! (-> *kernel-context* prevent-from-run) (-> gp-0 process-mask)) gp-0 ) ) (defmethod update-per-frame-settings! setting-control ((obj setting-control)) (copy-settings-from-target! obj) (let ((gp-0 (-> obj current))) (let ((s5-1 (-> obj target))) (when *sound-player-enable* (when (!= (-> gp-0 sfx-volume) (-> s5-1 sfx-volume)) (seek! (-> gp-0 sfx-volume) (-> s5-1 sfx-volume) (* 100.0 (-> *display* seconds-per-frame))) (sound-set-volume (the-as uint 1) (-> gp-0 sfx-volume)) ) (when (!= (-> gp-0 music-volume) (-> s5-1 music-volume)) (seek! (-> gp-0 music-volume) (-> s5-1 music-volume) (* 100.0 (-> *display* seconds-per-frame))) (sound-set-volume (the-as uint 2) (-> gp-0 music-volume)) ) (when (!= (-> gp-0 dialog-volume) (-> s5-1 dialog-volume)) (seek! (-> gp-0 dialog-volume) (-> s5-1 dialog-volume) (* 100.0 (-> *display* seconds-per-frame))) (sound-set-volume (the-as uint 4) (-> gp-0 dialog-volume)) ) (when (!= (-> gp-0 ambient-volume) (-> s5-1 ambient-volume)) (seek! (-> gp-0 ambient-volume) (-> s5-1 ambient-volume) (* 100.0 (-> *display* seconds-per-frame))) (sound-set-volume (the-as uint 16) (-> gp-0 ambient-volume)) ) ) (when (!= (-> gp-0 language) (-> s5-1 language)) (set! (-> gp-0 language) (-> s5-1 language)) (set-language (-> gp-0 language)) ) (when (and (!= (-> s5-1 music) (-> gp-0 music)) (and (< 0.0 (-> *setting-control* current music-volume)) (zero? (rpc-busy? 1)) *sound-bank-1* *sound-bank-2* ) ) (cond ((-> s5-1 music) (format 0 "Load music ~A~%" (-> s5-1 music)) (sound-music-load (string->sound-name (symbol->string (-> s5-1 music)))) ) (else (format 0 "Unload music~%") (sound-music-unload) ) ) (set! (-> gp-0 music) (-> s5-1 music)) ) (set! (-> s5-1 sound-flava) (the-as uint (flava-lookup (-> gp-0 music) (the-as int (-> s5-1 sound-flava))))) (set! (-> gp-0 sound-flava) (-> s5-1 sound-flava)) (if *sound-player-enable* (sound-set-flava (-> gp-0 sound-flava)) ) (when (!= (-> gp-0 aspect-ratio) (-> s5-1 aspect-ratio)) (set! (-> gp-0 aspect-ratio) (-> s5-1 aspect-ratio)) (set-aspect-ratio (-> gp-0 aspect-ratio)) ) (when (!= (-> gp-0 video-mode) (-> s5-1 video-mode)) (set! (-> gp-0 video-mode) (-> s5-1 video-mode)) (set-video-mode (-> gp-0 video-mode)) ) (when (!= (-> gp-0 screenx) (-> s5-1 screenx)) (set! (-> gp-0 screenx) (-> s5-1 screenx)) (set! (-> *video-parms* display-dx) (/ (-> s5-1 screenx) 2)) (set! (-> *video-parms* set-video-mode) #t) ) (when (!= (-> gp-0 screeny) (-> s5-1 screeny)) (set! (-> gp-0 screeny) (-> s5-1 screeny)) (set! (-> *video-parms* display-dy) (* (/ (-> s5-1 screeny) 2) 2)) (set! (-> *video-parms* set-video-mode) #t) ) (set! (-> gp-0 bg-a-speed) (-> s5-1 bg-a-speed)) (set! (-> gp-0 bg-a-force) (-> s5-1 bg-a-force)) (set! (-> gp-0 bg-r) (-> s5-1 bg-r)) (set! (-> gp-0 bg-g) (-> s5-1 bg-g)) (set! (-> gp-0 bg-b) (-> s5-1 bg-b)) (seek! (-> gp-0 bg-a) (-> s5-1 bg-a) (* (-> s5-1 bg-a-speed) (-> *display* seconds-per-frame))) ) (let ((v1-60 (-> *display* frames (-> *display* on-screen) display)) (f0-39 (-> gp-0 bg-a)) ) (if (!= (-> gp-0 bg-a-force) 0.0) (set! f0-39 (-> gp-0 bg-a-force)) ) (set! (-> v1-60 bgcolor r) (the int (* 255.0 (-> gp-0 bg-r)))) (set! (-> v1-60 bgcolor g) (the int (* 255.0 (-> gp-0 bg-g)))) (set! (-> v1-60 bgcolor b) (the int (* 255.0 (-> gp-0 bg-b)))) (set! (-> v1-60 pmode alp) (the int (* 255.0 (- 1.0 f0-39)))) ) (set! (-> *level* border?) (-> gp-0 border-mode)) (set! (-> *texture-pool* common-page-mask) (-> gp-0 common-page)) (set! (-> *cpad-list* cpads 0 buzz) (-> gp-0 vibration)) (case (-> gp-0 ocean-off) ((#t) (set! *ocean-off* #t) ) (('mid) (set! *ocean-mid-off* #t) ) (('near) (set! *ocean-near-off* #t) ) ) gp-0 ) ) (when (zero? *setting-control*) (set! *setting-control* (new 'global 'setting-control 32)) (let ((gp-0 (-> *setting-control* default)) (s5-0 (-> *setting-control* current)) ) (let ((f0-2 (* 0.01 (the float (scf-get-volume))))) (set! (-> gp-0 ocean-off) #f) (set! (-> gp-0 allow-look-around) #t) (set! (-> gp-0 border-mode) #f) (set! (-> gp-0 sfx-volume) (the float (* 5 (the int (+ 0.5 (* 15.0 f0-2)))))) (set! (-> gp-0 music-volume) (the float (* 5 (the int (+ 0.5 (* 13.0 f0-2)))))) (set! (-> gp-0 dialog-volume) (the float (* 5 (the int (+ 0.5 (* 20.0 f0-2)))))) (set! (-> gp-0 ambient-volume) (the float (* 5 (the int (+ 0.5 (* 15.0 f0-2)))))) (set! (-> gp-0 sfx-volume-movie) (the float (* 5 (the int (+ 0.5 (* 11.0 f0-2)))))) (set! (-> gp-0 music-volume-movie) (the float (* 5 (the int (+ 0.5 (* 13.0 f0-2)))))) (set! (-> gp-0 ambient-volume-movie) (the float (* 5 (the int (+ 0.5 (* 11.0 f0-2)))))) (set! (-> gp-0 dialog-volume-hint) (the float (* 5 (the int (+ 0.5 (* 16.0 f0-2)))))) ) (set! (-> gp-0 language) (scf-get-language)) (set! (-> gp-0 process-mask) (process-mask execute sleep)) (set! (-> gp-0 screenx) 0) (set! (-> gp-0 screeny) 0) (set! (-> gp-0 vibration) #t) (set! (-> gp-0 auto-save) #f) (set! (-> gp-0 play-hints) #t) (set! (-> gp-0 movie) (the-as (pointer process) #f)) (set! (-> gp-0 talking) (the-as (pointer process) #f)) (set! (-> gp-0 spooling) (the-as (pointer process) #f)) (set! (-> gp-0 hint) (the-as (pointer process) #f)) (set! (-> gp-0 ambient) (the-as (pointer process) #f)) (set! (-> gp-0 sound-flava) (the-as uint 49)) (set! (-> gp-0 sound-flava-priority) 0.0) (set! (-> gp-0 music) #f) (set! (-> gp-0 bg-a-speed) 8.0) (set! (-> gp-0 allow-pause) #t) (set! (-> gp-0 allow-progress) #t) (let ((v1-27 (scf-get-aspect))) (if (= v1-27 2) (set! (-> gp-0 aspect-ratio) 'aspect16x9) (set! (-> gp-0 aspect-ratio) 'aspect4x3) ) ) (if (zero? *boot-video-mode*) (set! (-> gp-0 video-mode) 'ntsc) (set! (-> gp-0 video-mode) 'pal) ) (set! (-> s5-0 sfx-volume) (+ -1.0 (-> gp-0 sfx-volume))) (set! (-> s5-0 music-volume) (+ -1.0 (-> gp-0 music-volume))) (set! (-> s5-0 dialog-volume) (+ -1.0 (-> gp-0 dialog-volume))) (set! (-> s5-0 ambient-volume) (+ -1.0 (-> gp-0 ambient-volume))) (set! (-> s5-0 sfx-volume-movie) (-> gp-0 sfx-volume-movie)) (set! (-> s5-0 music-volume-movie) (-> gp-0 music-volume-movie)) (set! (-> s5-0 ambient-volume-movie) (-> gp-0 ambient-volume-movie)) (set! (-> s5-0 dialog-volume-hint) (-> gp-0 dialog-volume-hint)) (set! (-> s5-0 language) (+ (-> gp-0 language) -1)) (set! (-> s5-0 aspect-ratio) #f) (set! (-> s5-0 video-mode) #f) (set! (-> s5-0 music) #f) (set! (-> s5-0 bg-a-speed) (-> gp-0 bg-a-speed)) (set! (-> s5-0 allow-pause) (-> gp-0 allow-pause)) (set! (-> s5-0 allow-progress) (-> gp-0 allow-progress)) (set! (-> s5-0 allow-look-around) (-> gp-0 allow-look-around)) (set! (-> s5-0 ocean-off) (-> gp-0 ocean-off)) ) )