;;-*-Lisp-*- (in-package goal) ;; definition for function lookup-level-info (defun lookup-level-info ((name symbol)) (let* ((rest *level-load-list*) (current-sym (car rest)) ) (while (not (null? rest)) (let ((info (the-as level-load-info (-> (the-as symbol current-sym) value)))) (if (or (= name (-> info name)) (= name (-> info visname)) (= name (-> info nickname))) (return info) ) ) (set! rest (cdr rest)) (set! current-sym (car rest)) ) ) default-level ) ;; definition for method 21 of type level-group ;; INFO: Return type mismatch object vs pair. (defmethod load-command-get-index level-group ((obj level-group) (name symbol) (cmd-idx int)) (let ((cmd-lst (-> (lookup-level-info name) alt-load-commands))) (while (nonzero? cmd-idx) (+! cmd-idx -1) (set! cmd-lst (cdr cmd-lst)) (nop!) (nop!) (nop!) ) (the-as pair (car cmd-lst)) ) ) ;; definition for function remap-level-name (defun remap-level-name ((arg0 level-load-info)) (if (-> *level* vis?) (-> arg0 visname) (-> arg0 name) ) ) ;; definition for method 28 of type level (defmethod art-group-get-by-name level ((obj level) (arg0 string)) (countdown (s4-0 (-> obj art-group art-group-array length)) (if (name= (-> obj art-group art-group-array s4-0 name) arg0) (return (-> obj art-group art-group-array s4-0)) ) ) (the-as art-group #f) ) ;; definition for method 13 of type level (defmethod bsp-name level ((obj level)) (if (and (!= (-> obj status) 'inactive) (-> obj bsp) (nonzero? (-> obj bsp name))) (-> obj bsp name) (-> obj name) ) ) ;; definition for function add-bsp-drawable (defun add-bsp-drawable ((arg0 bsp-header) (arg1 level) (arg2 symbol) (arg3 display-frame)) (draw arg0 arg0 arg3) (if (nonzero? *display-strip-lines*) (debug-draw arg0 arg0 arg3) ) (none) ) ;; definition for method 2 of type level (defmethod print level ((obj level)) (format #t "#<~A ~A ~S @ #x~X>" (-> obj type) (-> obj status) (-> obj name) obj) obj ) ;; definition for method 7 of type bsp-header ;; INFO: Return type mismatch bsp-header vs none. (defmethod relocate bsp-header ((obj bsp-header) (arg0 kheap) (arg1 (pointer uint8))) (let ((s5-0 (-> *level* loading-level))) (if s5-0 (set! obj (cond (obj (cond ((not (type-type? (-> obj type) bsp-header)) (format 0 "ERROR: level ~A is not a bsp-header.~%" (-> s5-0 name)) (the-as bsp-header #f) ) ((not (file-info-correct-version? (-> obj info) (file-kind level-bt) 0)) (the-as bsp-header #f) ) ((< 2048 (-> obj visible-list-length)) (format 0 "ERROR: level ~A visible-list-length ~d is greater than 2048 (16384 drawables).~%" (-> s5-0 name) (-> obj visible-list-length) ) (the-as bsp-header #f) ) (else (set! (-> s5-0 bsp) obj) (set! (-> obj level) s5-0) obj ) ) ) (else (format 0 "ERROR: level ~A is not a valid file.~%" (-> s5-0 name)) (the-as bsp-header #f) ) ) ) ) ) (none) ) ;; definition for method 24 of type level (defmethod load-required-packages level ((obj level)) (when (not (or (not (-> obj bsp)) (= *kernel-boot-mode* 'debug-boot))) (if (not (null? (-> obj info packages))) (load-package "common" global) ) ) obj ) ;; definition for method 26 of type level ;; Used lq/sq (defmethod vis-clear level ((obj level)) (countdown (v1-0 8) (nop!) (set! (-> obj vis-info v1-0) #f) ) (dotimes (v1-3 128) (set! (-> (the-as (pointer int128) (&+ (-> obj vis-bits) (* v1-3 16)))) 0) ) (set! (-> obj all-visible?) 'loading) 0 ) ;; definition for method 20 of type level ;; Used lq/sq (defmethod vis-load level ((obj level)) (when (zero? (-> obj vis-info (-> obj vis-self-index) ramdisk)) (let ((v1-10 (-> obj other vis-info (-> obj other vis-self-index)))) (when (and v1-10 (nonzero? (-> v1-10 ramdisk))) (set! (-> v1-10 flags) (logand -1073741825 (-> v1-10 flags))) (set! (-> v1-10 ramdisk) (the-as uint 0)) 0 ) ) (let ((s4-0 (make-file-name (file-kind vis) (the-as string (-> obj nickname)) 0 #f)) (s3-0 (the-as ramdisk-rpc-fill (add-element *ramdisk-rpc*))) (s5-0 (+ *current-ramdisk-id* 1)) ) (set! *current-ramdisk-id* s5-0) (set! (-> s3-0 filename) (string->sound-name s4-0)) (set! (-> s3-0 ee-id) s5-0) (call *ramdisk-rpc* (the-as uint 1) (the-as pointer 0) (the-as uint 0)) (set! (-> obj vis-info (-> obj vis-self-index) ramdisk) (the-as uint s5-0)) ) ) (-> obj vis-info (-> obj vis-self-index) ramdisk) ) ;; definition for function load-vis-info (defun load-vis-info ((arg0 symbol) (arg1 symbol)) (dotimes (s4-0 (-> *level* length)) (let ((s3-0 (-> *level* level s4-0))) (when (= (-> s3-0 status) 'active) (when (= arg0 (-> s3-0 nickname)) (format 0 "Swapping in ~A VIS [dumping ~A]~%" arg0 arg1) (vis-load s3-0) ) ) ) ) 0 ) ;; definition for method 25 of type level (defmethod init-vis level ((obj level)) (when (not (or (= (-> obj status) 'inactive) (not (-> obj bsp)))) (set! (-> obj all-visible?) 'loading) (let ((s5-0 (-> obj bsp vis-info 0))) (cond ((and s5-0 (nonzero? s5-0) (valid? s5-0 level-vis-info #f #f 0)) (set! (-> obj vis-info 0) s5-0) (set! (-> s5-0 current-vis-string) (the-as uint -1)) (set! (-> s5-0 from-bsp) (-> obj bsp)) (set! (-> s5-0 vis-bits) (-> obj vis-bits)) (set! (-> s5-0 flags) (logand (the-as uint #xffffffff3fffffff) (-> s5-0 flags))) (set! (-> s5-0 flags) (logior #x20000000 (-> s5-0 flags))) (set! (-> s5-0 ramdisk) (the-as uint 0)) (set! (-> s5-0 string-block) (the-as uint #f)) (set! *vis-boot* #t) ) (else (set! (-> obj vis-info 0) #f) ) ) ) (dotimes (s5-1 6) (let* ((s3-0 (+ s5-1 1)) (s4-0 (-> obj bsp vis-info s3-0)) ) (cond ((and s4-0 (nonzero? s4-0) (valid? s4-0 level-vis-info #f #f 0)) (set! (-> obj vis-info s3-0) s4-0) (set! (-> s4-0 current-vis-string) (the-as uint -1)) (set! (-> s4-0 from-bsp) #f) (set! (-> s4-0 vis-bits) (-> obj vis-bits)) (set! (-> s4-0 flags) (logand (the-as uint #xffffffff1fffffff) (-> s4-0 flags))) (set! *vis-boot* #t) ) (else (set! (-> obj vis-info s3-0) #f) ) ) ) ) ) 0 ) ;; definition for method 11 of type level-group (defmethod level-get-for-use level-group ((obj level-group) (arg0 symbol) (arg1 symbol)) (local-vars (s5-1 level)) (alloc-levels! obj #f) (let* ((s3-0 (lookup-level-info arg0)) (s2-0 (remap-level-name s3-0)) ) (let ((s1-0 (level-get obj s2-0))) (when s1-0 (level-status-set! s1-0 arg1) (set! s5-1 s1-0) (goto cfg-10) ) ) (let ((a0-7 (level-get-most-disposable obj))) (set! s5-1 (if a0-7 (level-status-set! a0-7 'inactive) a0-7 ) ) ) (when (not level) (format 0 "ERROR: could not find a slot to load ~A into.~%" arg0) (set! s5-1 (the-as level #f)) (goto cfg-10) ) (set! (-> s5-1 info) s3-0) (set! (-> s5-1 name) arg0) (set! (-> s5-1 load-name) s2-0) ) (set! (-> s5-1 mood) (the-as mood-context (-> s5-1 info mood value))) (set! (-> s5-1 mood-func) (the-as (function mood-context float int none) (-> s5-1 info mood-func value))) (set! (-> s5-1 display?) #f) (set! (-> s5-1 force-all-visible?) #f) (set! (-> s5-1 force-inside?) #f) (level-status-set! s5-1 'loading) (level-status-set! s5-1 arg1) (label cfg-10) s5-1 ) ;; definition for method 25 of type level-group (defmethod level-status level-group ((obj level-group) (arg0 symbol)) (let ((v1-1 (level-get *level* arg0))) (if v1-1 (-> v1-1 status) ) ) ) ;; definition for method 23 of type level (defmethod level-status-set! level ((obj level) (arg0 symbol)) (case arg0 (('inactive) (-> obj status) (unload! obj) ) (('loading) (case (-> obj status) (('inactive) (load-begin obj) ) ) ) (('loading-bt) (case (-> obj status) (('loading) (set! (-> obj status) arg0) (load-continue obj) ) ) ) (('loading-done) (case (-> obj status) (('loading-bt) (set! (-> obj status) arg0) ) ) ) (('loaded) (case (-> obj status) (('loading-done) (login-begin obj) ) (('alive 'active) (deactivate obj) ) ) ) (('alive 'active) (when *dproc* (case (-> obj status) (('loaded) (birth obj) (level-status-set! obj arg0) ) (('alive) (when (and *dproc* (= arg0 'active)) (remove-by-param1 *background-draw-engine* (-> obj bsp)) (add-connection *background-draw-engine* *dproc* add-bsp-drawable (-> obj bsp) obj #f) (dotimes (v1-40 9) (set! (-> obj closest-object v1-40) 0.0) (set! (-> obj texture-mask v1-40) (the-as uint 0)) ) (set! (-> obj level-distance) 0.0) (set! (-> obj status) 'active) ) ) ) ) ) ) obj ) ;; definition for symbol *login-state*, type login-state (define *login-state* (new 'global 'login-state)) ;; definition for symbol *print-login*, type symbol (define *print-login* #t) ;; definition for method 17 of type level (defmethod load-continue level ((obj level)) (local-vars (sv-16 symbol)) (when (-> obj linking) (when (nonzero? (link-resume)) (set! (-> obj linking) #f) (case (-> obj status) (('loading) (if (not (-> *texture-relocate-later* memcpy)) (dgo-load-continue (logand -64 (&+ (-> obj heap current) 63))) ) ) (('loading-bt) (level-status-set! obj 'loading-done) (level-status-set! obj 'loaded) ) ) ) (set! obj obj) (goto cfg-30) ) (when (-> *texture-relocate-later* memcpy) (relocate-later) (dgo-load-continue (logand -64 (&+ (-> obj heap current) 63))) (set! obj obj) (goto cfg-30) ) (case (-> obj status) (('loading) (set! sv-16 (the-as symbol #f)) (let ((a0-15 (dgo-load-get-next (& sv-16)))) (when a0-15 (cond ((not sv-16) (cond ((dgo-load-link (the-as dgo-header a0-15) (-> obj heap) *print-login* #f) (if (not (-> *texture-relocate-later* memcpy)) (dgo-load-continue (logand -64 (&+ (-> obj heap current) 63))) ) ) (else (set! (-> obj linking) #t) ) ) ) (else (set! (-> obj heap top) (-> obj heap top-base)) (level-status-set! obj 'loading-bt) ) ) ) ) ) (('login) (level-update-after-load obj *login-state*) ) (('loading-bt) (let ((a0-26 (logand -64 (&+ (-> obj heap current) 63)))) (cond ((dgo-load-link (the-as dgo-header a0-26) (-> obj heap) *print-login* #t) (level-status-set! obj 'loading-done) (level-status-set! obj 'loaded) ) (else (set! (-> obj linking) #t) ) ) ) ) ) (label cfg-30) obj ) ;; definition for method 18 of type level (defmethod load-begin level ((obj level)) (set! loading-level (-> obj heap)) (set! (-> *level* loading-level) obj) (set! (-> *level* log-in-level-bsp) #f) (set! (-> obj nickname) #f) (set! (-> obj bsp) #f) (set! (-> obj entity) #f) (set! (-> obj ambient) #f) (set! (-> obj linking) #f) (vis-clear obj) (set! (-> obj status) 'loading) (set! (-> *texture-pool* allocate-func) texture-page-level-allocate) (if (= (-> obj load-name) (-> obj info visname)) (format (clear *temp-string*) "~S" (-> obj info nickname)) (format (clear *temp-string*) "~S" (-> obj name)) ) (set! (-> *temp-string* data 8) (the-as uint 0)) (format *temp-string* ".DGO") (set! (-> obj heap top) (-> obj heap top-base)) (let ((s4-0 (kmalloc (-> obj heap) #x200000 (kmalloc-flags align-64 top) "dgo-level-buf-2")) (s5-2 (kmalloc (-> obj heap) #x200000 (kmalloc-flags align-64 top) "dgo-level-buf-2")) ) (set! (-> obj code-memory-start) (-> obj heap current)) (format 0 "-----------> begin load ~A [~S]~%" (-> obj load-name) *temp-string*) (dgo-load-begin *temp-string* s5-2 s4-0 (logand -64 (&+ (-> obj heap current) 63))) ) obj ) ;; definition for method 19 of type level (defmethod login-begin level ((obj level)) (set! (-> *texture-pool* allocate-func) texture-page-default-allocate) (cond ((-> obj bsp) (set! (-> *level* log-in-level-bsp) (-> obj bsp)) (login-level-textures *texture-pool* obj (-> obj bsp texture-page-count) (-> obj bsp texture-ids)) (let ((v1-7 (-> obj bsp))) (when (nonzero? (-> v1-7 adgifs)) (let ((s5-0 (-> v1-7 adgifs))) (dotimes (s4-0 (-> s5-0 length)) (adgif-shader-login-no-remap (-> s5-0 data s4-0)) ) ) ) ) (set! (-> *login-state* state) -1) (set! (-> *login-state* pos) (the-as uint 0)) (set! (-> *login-state* elts) (the-as uint 0)) (set! (-> obj status) 'login) ) (else (level-status-set! obj 'inactive) (set! loading-level global) (set! (-> *level* loading-level) (-> *level* level-default)) ) ) obj ) ;; definition for function level-update-after-load ;; WARN: Found some very strange gotos. Check result carefully, this is not well tested. ;; WARN: Unsupported inline assembly instruction kind - [mfc0 s5, Count] ;; WARN: Unsupported inline assembly instruction kind - [mfc0 v1, Count] ;; WARN: Unsupported inline assembly instruction kind - [mfc0 v1, Count] ;; Used lq/sq (defun level-update-after-load ((loaded-level level) (level-login-state login-state)) (local-vars (current-timer int) (v1-154 int) (initial-timer int) (sv-16 prototype-bucket-tie) (sv-32 int)) 0 (let ((level-drawable-trees (-> loaded-level bsp drawable-trees))) 0 (.mfc0 initial-timer Count) (label cfg-1) 0 (.mfc0 current-timer Count) (let ((elapsed-timer (- current-timer initial-timer))) (when (< #x186a0 elapsed-timer) (set! loaded-level loaded-level) (goto cfg-78) ) ) (let ((current-login-pos (the-as int (-> level-login-state pos)))) (when (= (-> level-login-state state) -1) (when (< current-login-pos (-> level-drawable-trees length)) (let ((current-drawable (-> level-drawable-trees trees (the-as uint current-login-pos)))) (cond ((= (-> current-drawable type) drawable-tree-tfrag) (dotimes (idx-in-drawable (-> current-drawable length)) (cond ((= (-> current-drawable data idx-in-drawable type) drawable-inline-array-tfrag) (set! (-> level-login-state elt (-> level-login-state elts)) (-> current-drawable data idx-in-drawable)) (+! (-> level-login-state elts) 1) ) (else (login (-> current-drawable data idx-in-drawable)) ) ) ) ) ((= (-> current-drawable type) drawable-tree-instance-tie) (set! (-> level-login-state elt (-> level-login-state elts)) current-drawable) (+! (-> level-login-state elts) 1) ) (else (login current-drawable) ) ) ) (+! (-> level-login-state pos) 1) (goto cfg-1) ) (let ((v1-39 (- (the-as uint current-login-pos) (-> level-drawable-trees length)))) (when (< (the-as int v1-39) (-> loaded-level art-group art-group-array length)) (let ((s2-2 (-> loaded-level art-group art-group-array v1-39))) (login s2-2) (if (needs-link? s2-2) (link-art! s2-2) ) ) (+! (-> level-login-state pos) 1) (goto cfg-1) ) ) (set! (-> level-login-state pos) (the-as uint 0)) (set! (-> level-login-state state) 0) (goto cfg-1) ) (when (< (-> level-login-state state) (the-as int (-> level-login-state elts))) (let ((s1-1 (-> level-login-state elt (-> level-login-state state)))) (cond ((= (-> s1-1 type) drawable-inline-array-tfrag) (cond ((< current-login-pos (-> (the-as drawable-inline-array-tfrag s1-1) length)) (dotimes (s0-0 200) (when (< current-login-pos (-> (the-as drawable-inline-array-tfrag s1-1) length)) (login (-> (the-as drawable-inline-array-tfrag s1-1) data (the-as uint current-login-pos))) (set! current-login-pos (the-as int (+ (the-as uint current-login-pos) 1))) ) ) (set! (-> level-login-state pos) (the-as uint current-login-pos)) ) (else (set! (-> level-login-state pos) (the-as uint 0)) (set! current-login-pos (+ (-> level-login-state state) 1)) (set! (-> level-login-state state) current-login-pos) ) ) ) ((= (-> s1-1 type) drawable-tree-instance-tie) (let ((s1-2 (-> (the-as drawable-tree-instance-tie s1-1) prototypes prototype-array-tie))) (when (< current-login-pos (-> s1-2 length)) (dotimes (s0-1 10) (when (< current-login-pos (-> s1-2 length)) (set! sv-16 (-> s1-2 array-data (the-as uint current-login-pos))) (set! sv-32 0) (while (< sv-32 4) (let ((a0-28 (-> sv-16 geometry-override sv-32))) (if (nonzero? a0-28) (login a0-28) ) ) (set! sv-32 (+ sv-32 1)) ) (set! current-login-pos (the-as int (+ (the-as uint current-login-pos) 1))) ) ) (set! (-> level-login-state pos) (the-as uint current-login-pos)) ) (when (= (the-as uint current-login-pos) (-> s1-2 length)) (dotimes (s2-3 (-> s1-2 length)) (let ((s0-2 (-> s1-2 array-data s2-3 envmap-shader))) (when (nonzero? s0-2) (adgif-shader-login-no-remap s0-2) (set! (-> s0-2 tex1) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1)) (set! (-> s0-2 clamp) (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))) (set! (-> s0-2 alpha) (new 'static 'gs-alpha :b #x2 :c #x1 :d #x1)) (set! (-> s0-2 prims 1) (gs-reg64 tex0-1)) (set! (-> s0-2 prims 3) (gs-reg64 tex1-1)) (set! (-> s0-2 prims 5) (gs-reg64 miptbp1-1)) (set! (-> s0-2 clamp-reg) (gs-reg64 clamp-1)) (set! (-> s0-2 prims 9) (gs-reg64 alpha-1)) ) ) ) (set! (-> level-login-state pos) (the-as uint 0)) (+! (-> level-login-state state) 1) ) ) ) ) ) (goto cfg-1) ) (when (= (-> level-login-state state) (-> level-login-state elts)) (let ((v1-115 (-> loaded-level bsp))) (cond ((or (zero? (-> v1-115 actors)) (= (the-as uint current-login-pos) (-> v1-115 actors length))) (set! (-> level-login-state pos) (the-as uint 0)) (+! (-> level-login-state state) 1) ) (else (let ((a0-36 (-> v1-115 actors data (the-as uint current-login-pos) actor))) (entity-nav-login a0-36) ) (+! (-> level-login-state pos) 1) ) ) ) (goto cfg-1) ) (when (zero? (the-as uint current-login-pos)) (set! (-> level-login-state pos) (the-as uint 1)) (set! loaded-level loaded-level) (goto cfg-78) ) ) ) (set! (-> loaded-level nickname) (-> loaded-level bsp nickname)) (if (nonzero? (-> loaded-level bsp nodes)) (set! *time-of-day-effects* #t) (set! *time-of-day-effects* #f) ) (let ((f0-0 (-> loaded-level bsp unk-data-4)) (f1-0 (-> loaded-level bsp unk-data-5)) ) (when (and (= f0-0 0.0) (= f1-0 0.0)) (set! f0-0 122880.0) (set! f1-0 286720.0) ) (set! (-> *subdivide-settings* close (-> loaded-level index)) f0-0) (set! (-> *subdivide-settings* far (-> loaded-level index)) f1-0) (set! (-> *subdivide-settings* close 3) f0-0) (set! (-> *subdivide-settings* far 3) f1-0) ) (init-vis loaded-level) (load-required-packages loaded-level) (set! (-> loaded-level status) 'loaded) (set! loading-level global) (set! (-> *level* loading-level) (-> *level* level-default)) (set! (-> *level* log-in-level-bsp) #f) 0 (.mfc0 v1-154 Count) (- v1-154 initial-timer) (label cfg-78) loaded-level ) ;; definition for method 22 of type level (defmethod birth level ((obj level)) (case (-> obj status) (('loaded) (let ((s5-0 loading-level) (s4-0 (-> *level* loading-level)) (s3-1 (-> *level* log-in-level-bsp)) ) (set! loading-level (-> obj heap)) (set! (-> *level* log-in-level-bsp) (-> obj bsp)) (set! (-> *level* loading-level) obj) (birth (-> obj bsp)) (set! (-> obj status) 'alive) (copy-perms-to-level! *game-info* obj) (send-event *camera* 'level-activate (-> obj name)) (send-event *target* 'level-activate (-> obj name)) (set! loading-level s5-0) (set! (-> *level* loading-level) s4-0) (set! (-> *level* log-in-level-bsp) s3-1) ) ) ) obj ) ;; definition for method 9 of type level ;; Used lq/sq (defmethod deactivate level ((obj level)) (case (-> obj status) (('active 'alive) (format 0 "----------- kill ~A (status ~A)~%" obj (-> obj status)) (copy-perms-from-level! *game-info* obj) (send-event *camera* 'level-deactivate (-> obj name)) (send-event *target* 'level-deactivate (-> obj name)) (remove-by-param1 *background-draw-engine* (-> obj bsp)) (deactivate-entities (-> obj bsp)) (kill-all-particles-in-level obj) (set! (-> obj inside-sphere?) #f) (set! (-> obj inside-boxes?) #f) (set! (-> obj meta-inside?) #f) (set! (-> obj force-inside?) #f) (set! (-> obj status) 'loaded) (set! (-> obj all-visible?) 'loading) (dotimes (v1-19 128) (set! (-> (the-as (pointer int128) (&+ (-> obj vis-bits) (* v1-19 16)))) 0) ) (countdown (v1-22 8) (let ((a0-14 (-> obj vis-info v1-22))) (if a0-14 (set! (-> a0-14 current-vis-string) (the-as uint -1)) ) ) ) ) ) (if (= (-> *level* log-in-level-bsp) (-> obj bsp)) (set! (-> *level* log-in-level-bsp) #f) ) obj ) ;; definition for method 12 of type level (defmethod unload! level ((obj level)) (deactivate obj) (when (!= (-> obj status) 'inactive) (when (or (= (-> obj status) 'loaded) (= (-> obj status) 'alive) (= (-> obj status) 'active) (= (-> obj status) 'login) ) (dotimes (s5-0 (-> obj art-group art-group-array length)) (let ((s4-0 (-> obj art-group art-group-array s5-0))) (if (needs-link? s4-0) (unlink-art! s4-0) ) ) ) ) (set! (-> obj bsp) #f) (set! (-> obj entity) #f) (set! (-> obj ambient) #f) (set! (-> obj status) 'inactive) (set! (-> obj art-group string-array length) 0) (set! (-> obj art-group art-group-array length) 0) (countdown (s5-1 (-> obj loaded-texture-page-count)) (dotimes (v1-27 32) (when (= (-> obj loaded-texture-page s5-1) (-> *texture-pool* common-page v1-27)) (set! (-> *texture-pool* common-page v1-27) (the-as texture-page 0)) 0 ) ) (unload! *texture-pool* (-> obj loaded-texture-page s5-1)) ) (set! (-> obj loaded-texture-page-count) 0) (unlink-textures-in-heap! *texture-page-dir* (-> obj heap)) (unlink-part-group-by-heap (-> obj heap)) (dotimes (s5-2 2) (let ((v1-41 (-> *art-control* buffer s5-2 pending-load-file))) (if (and (>= (the-as int v1-41) (the-as int (-> obj heap base))) (< (the-as int v1-41) (the-as int (-> obj heap top-base))) ) (set-pending-file (-> *art-control* buffer s5-2) (the-as string #f) -1 (the-as handle #f) 100000000.0) ) ) ) (let* ((s5-3 (-> obj info packages)) (a0-29 (car s5-3))) (while (not (null? s5-3)) (case (rtype-of a0-29) ((symbol) (unload (symbol->string (the-as symbol a0-29))) ) ((string) (unload (the-as string a0-29)) ) ) (set! s5-3 (cdr s5-3)) (set! a0-29 (car s5-3)) ) ) (vis-clear obj) (let ((v1-64 (-> obj heap))) (set! (-> v1-64 current) (-> v1-64 base)) ) (set! (-> obj code-memory-start) (the-as pointer 0)) (set! (-> obj code-memory-end) (the-as pointer 0)) (when (= (-> *level* loading-level) obj) (set! loading-level global) (set! (-> *level* loading-level) (-> *level* level-default)) (set! (-> *level* log-in-level-bsp) #f) ) ) obj ) ;; definition for method 10 of type level ;; WARN: Unsupported inline assembly instruction kind - [addiu a0, a0, 56] (defmethod is-object-visible? level ((obj level) (arg0 int)) (local-vars (a0-1 int) (a0-3 int)) (let ((v1-0 (-> obj vis-bits))) (shift-arith-right-32 a0-1 arg0 3) (let ((v1-2 (-> (the-as (pointer int8) (+ a0-1 (the-as int v1-0)))))) (let ((a0-2 (logand arg0 7))) (.addiu a0-3 a0-2 56) ) (< (shl v1-2 a0-3) 0) ) ) ) ;; definition for method 15 of type level ;; INFO: Return type mismatch object vs symbol. (defmethod point-in-boxes? level ((obj level) (arg0 vector)) (the-as symbol (cond ((or (not (-> obj bsp)) (zero? (-> obj bsp boxes))) #f ) ((-> obj force-inside?) #t ) (else (let* ((a0-1 (-> obj bsp boxes)) (v1-5 (-> a0-1 data)) ) (countdown (a0-2 (-> a0-1 length)) (if (and (>= (-> arg0 x) (-> v1-5 0 min x)) (>= (-> arg0 y) (-> v1-5 0 min y)) (>= (-> arg0 z) (-> v1-5 0 min z)) (< (-> arg0 x) (-> v1-5 0 max x)) (< (-> arg0 y) (-> v1-5 0 max y)) (< (-> arg0 z) (-> v1-5 0 max z)) ) (return (the-as symbol #t)) ) (set! v1-5 (the-as (inline-array box8s) (-> v1-5 1))) ) ) #f ) ) ) ) ;; definition for method 27 of type level ;; INFO: Return type mismatch int vs none. (defmethod debug-print-splitbox level ((obj level) (arg0 vector) (arg1 string)) (cond ((or (not (-> obj bsp)) (zero? (-> obj bsp boxes)) (zero? (-> obj bsp split-box-indices))) ) (else (let* ((s3-0 (-> obj bsp boxes)) (s2-0 (the-as object (-> s3-0 data))) ) (dotimes (s1-0 (-> s3-0 length)) (if (and (>= (-> arg0 x) (-> (the-as (inline-array box8s) s2-0) 0 min x)) (>= (-> arg0 y) (-> (the-as (inline-array box8s) s2-0) 0 min y)) (>= (-> arg0 z) (-> (the-as (inline-array box8s) s2-0) 0 min z)) (< (-> arg0 x) (-> (the-as (inline-array box8s) s2-0) 0 max x)) (< (-> arg0 y) (-> (the-as (inline-array box8s) s2-0) 0 max y)) (< (-> arg0 z) (-> (the-as (inline-array box8s) s2-0) 0 max z)) ) (format arg1 " splitbox-~D~%" (-> obj bsp split-box-indices s1-0)) ) (set! s2-0 (-> (the-as (inline-array box8s) s2-0) 1)) ) ) ) ) 0 (none) ) ;; definition for method 8 of type level (defmethod mem-usage level ((obj level) (arg0 memory-usage-block) (arg1 int)) (when (= (-> obj status) 'active) (set! (-> arg0 length) (max 65 (-> arg0 length))) (set! (-> arg0 data 64 name) "entity-links") (+! (-> arg0 data 64 count) (-> obj entity length)) (let ((v1-8 (asize-of (-> obj entity)))) (+! (-> arg0 data 64 used) v1-8) (+! (-> arg0 data 64 total) (logand -16 (+ v1-8 15))) ) (set! (-> arg0 length) (max 65 (-> arg0 length))) (set! (-> arg0 data 64 name) "ambient-links") (+! (-> arg0 data 64 count) (-> obj ambient length)) (let ((v1-18 (asize-of (-> obj ambient)))) (+! (-> arg0 data 64 used) v1-18) (+! (-> arg0 data 64 total) (logand -16 (+ v1-18 15))) ) (mem-usage (-> obj art-group) arg0 arg1) (set! (-> arg0 length) (max 64 (-> arg0 length))) (set! (-> arg0 data 63 name) "level-code") (+! (-> arg0 data 63 count) 1) (let ((v1-30 (&- (-> obj code-memory-end) (the-as uint (-> obj code-memory-start))))) (+! (-> arg0 data 63 used) v1-30) (+! (-> arg0 data 63 total) (logand -16 (+ v1-30 15))) ) (countdown (s3-0 (-> obj loaded-texture-page-count)) (mem-usage (-> obj loaded-texture-page s3-0) arg0 arg1) ) (countdown (s3-1 8) (let ((s2-0 (-> obj vis-info s3-1))) (when s2-0 (cond ((zero? s3-1) (set! (-> arg0 length) (max 60 (-> arg0 length))) (set! (-> arg0 data 59 name) "bsp-leaf-vis-self") (+! (-> arg0 data 59 count) 1) (let ((v1-50 (asize-of s2-0))) (+! (-> arg0 data 59 used) v1-50) (+! (-> arg0 data 59 total) (logand -16 (+ v1-50 15))) ) ) (else (set! (-> arg0 length) (max 61 (-> arg0 length))) (set! (-> arg0 data 60 name) "bsp-leaf-vis-adj") (+! (-> arg0 data 60 count) 1) (let ((v1-61 (+ (asize-of s2-0) (-> s2-0 allocated-length)))) (+! (-> arg0 data 60 used) v1-61) (+! (-> arg0 data 60 total) (logand -16 (+ v1-61 15))) ) ) ) ) ) ) (mem-usage (-> obj bsp) arg0 arg1) ) obj ) ;; definition for method 18 of type level-group (defmethod alloc-levels! level-group ((obj level-group) (arg0 symbol)) (when (zero? (-> *level* level0 heap base)) (when (nmember "game" *kernel-packages*) (set! *kernel-packages* (cons "art" *kernel-packages*)) (set! *kernel-packages* (cons "common" *kernel-packages*)) ) (load-package "art" global) (if arg0 (load-package "common" global) ) (let ((s5-1 (if arg0 #xa2c000 #x1900000 ) ) ) (dotimes (s4-0 2) (let ((s3-0 (-> obj level s4-0 heap))) (set! (-> s3-0 base) (malloc 'global s5-1)) (set! (-> s3-0 current) (-> s3-0 base)) (set! (-> s3-0 top-base) (&+ (-> s3-0 base) s5-1)) (set! (-> s3-0 top) (-> s3-0 top-base)) ) ) ) ) 0 ) ;; definition for method 10 of type level-group (defmethod level-get-with-status level-group ((obj level-group) (arg0 symbol)) (dotimes (v1-0 (-> obj length)) (if (= (-> obj level v1-0 status) arg0) (return (-> obj level v1-0)) ) ) (the-as level #f) ) ;; definition for method 26 of type level-group (defmethod level-get-most-disposable level-group ((obj level-group)) (dotimes (v1-0 (-> obj length)) (case (-> obj level v1-0 status) (('inactive) (return (-> obj level v1-0)) ) ) ) (dotimes (v1-6 (-> obj length)) (case (-> obj level v1-6 status) (('loading 'loading-bt) (return (-> obj level v1-6)) ) ) ) (dotimes (v1-12 (-> obj length)) (case (-> obj level v1-12 status) (('loaded) (return (-> obj level v1-12)) ) ) ) (let ((v0-0 (the-as level #f))) (dotimes (v1-18 (-> obj length)) (case (-> obj level v1-18 status) (('active) (if (and (not (-> obj level v1-18 inside-boxes?)) (or (not v0-0) (< (-> obj level v1-18 info priority) (-> v0-0 info priority))) ) (set! v0-0 (-> obj level v1-18)) ) ) ) ) v0-0 ) ) ;; definition for method 9 of type level-group (defmethod level-get level-group ((obj level-group) (arg0 symbol)) (dotimes (v1-0 (-> obj length)) (if (and (!= (-> obj level v1-0 status) 'inactive) (or (= (-> obj level v1-0 name) arg0) (= (-> obj level v1-0 load-name) arg0)) ) (return (-> obj level v1-0)) ) ) (the-as level #f) ) ;; definition for method 20 of type level-group (defmethod art-group-get-by-name level-group ((obj level-group) (arg0 string)) (countdown (s4-0 3) (let ((s3-0 (-> obj level s4-0))) (countdown (s2-0 (-> s3-0 art-group art-group-array length)) (if (name= (-> s3-0 art-group art-group-array s2-0 name) arg0) (return (-> s3-0 art-group art-group-array s2-0)) ) ) ) ) (the-as art-group #f) ) ;; definition for method 12 of type level-group (defmethod activate-levels! level-group ((obj level-group)) (dotimes (s5-0 (-> obj length)) (level-status-set! (-> obj level s5-0) 'active) ) 0 ) ;; definition for method 17 of type level-group (defmethod level-get-target-inside level-group ((obj level-group)) (let ((s5-0 (target-pos 0))) (let ((v1-2 (-> *game-info* current-continue level))) (dotimes (a0-2 (-> obj length)) (let ((a1-3 (-> obj level a0-2))) (when (= (-> a1-3 status) 'active) (if (= (-> a1-3 name) v1-2) (return a1-3) ) ) ) ) ) (let ((s4-0 (the-as level #f))) (let ((f30-0 0.0)) (dotimes (s3-0 (-> obj length)) (let ((s2-0 (-> obj level s3-0))) (when (= (-> s2-0 status) 'active) (let ((f0-0 (vector-vector-distance (-> s2-0 bsp bsphere) s5-0))) (if (and (-> s2-0 inside-boxes?) (or (not s4-0) (< f0-0 f30-0))) (set! s4-0 s2-0) ) ) ) ) ) ) (if s4-0 (return s4-0) ) ) ) (dotimes (v1-20 (-> obj length)) (let ((a0-8 (-> obj level v1-20))) (when (= (-> a0-8 status) 'active) (if (-> a0-8 meta-inside?) (return a0-8) ) ) ) ) (let ((v0-1 (the-as level #f))) (let ((f0-1 0.0)) (dotimes (v1-23 (-> obj length)) (let ((a0-13 (-> obj level v1-23))) (when (= (-> a0-13 status) 'active) (if (or (not v0-1) (< (-> a0-13 level-distance) f0-1)) (set! v0-1 a0-13) ) ) ) ) ) v0-1 ) ) ;; definition for method 19 of type level-group (defmethod load-commands-set! level-group ((obj level-group) (arg0 pair)) (set! (-> obj load-commands) arg0) arg0 ) ;; definition for method 8 of type level-group (defmethod mem-usage level-group ((obj level-group) (arg0 memory-usage-block) (arg1 int)) (dotimes (s3-0 (-> obj length)) (mem-usage (-> obj level s3-0) arg0 arg1) ) obj ) ;; definition for function bg (defun bg ((arg0 symbol)) (set! *cheat-mode* (if *debug-segment* 'debug #f ) ) (let ((v1-2 (lookup-level-info arg0))) (cond ((= (-> v1-2 visname) arg0) (set! (-> *level* vis?) #t) (set! arg0 (-> v1-2 name)) ) (else (set! (-> *level* vis?) #f) (set! (-> *kernel-context* low-memory-message) #f) ) ) (let* ((s5-0 (-> v1-2 run-packages)) (a0-8 (car s5-0)) ) (while (not (null? s5-0)) (case (rtype-of a0-8) ((symbol) (load-package (symbol->string (the-as symbol a0-8)) global) ) ((string) (load-package (the-as string a0-8) global) ) ) (set! s5-0 (cdr s5-0)) (set! a0-8 (car s5-0)) ) ) ) (let ((gp-1 (level-get-for-use *level* arg0 'active))) (while (and gp-1 (or (= (-> gp-1 status) 'loading) (= (-> gp-1 status) 'loading-bt) (= (-> gp-1 status) 'login)) (not *dproc*) ) (load-continue gp-1) ) (vis-load gp-1) (set! (-> *load-state* vis-nick) (if (-> *level* vis?) (-> gp-1 nickname) #f ) ) (set! (-> *load-state* want 0 name) (-> gp-1 name)) (set! (-> *load-state* want 0 display?) 'display) (set! (-> *load-state* want 0 force-vis?) #f) (set! (-> *load-state* want 0 force-inside?) #f) (set! (-> *load-state* want 1 name) #f) (set! (-> *load-state* want 1 display?) #f) (set! (-> *load-state* want 1 force-inside?) #f) (if (-> gp-1 info continues) (set-continue! *game-info* (the-as basic (car (-> gp-1 info continues)))) ) ) (activate-levels! *level*) (set! *print-login* #f) 0 ) ;; definition for function play (defun play ((arg0 symbol) (arg1 symbol)) (let* ((v1-0 *kernel-boot-message*) (s5-0 (cond ((= v1-0 'play) (if *debug-segment* 'village1 'title ) ) (else 'demo ) ) ) ) (stop 'play) (set! (-> *level* vis?) arg0) (set! (-> *level* want-level) #f) (set! (-> *level* border?) #t) (set! (-> *setting-control* default border-mode) #t) (set! (-> *level* play?) #t) (alloc-levels! *level* #t) (set! *display-profile* #f) (set! *cheat-mode* (if *debug-segment* 'debug #f ) ) (set! *time-of-day-fast* #f) (load-commands-set! *level* '()) (when *time-of-day-proc* (set! (-> *time-of-day-proc* 0 time-ratio) 300.0) (set! (-> *time-of-day-proc* 0 hour) 7) ) (set-blackout-frames (seconds 0.02)) (when (not *dproc*) (reset! *load-state*) (let ((s4-1 (level-get-for-use *level* s5-0 'active))) (load-state-want-levels s5-0 #f) (load-state-want-display-level s5-0 'display) (load-state-want-vis (-> (lookup-level-info s5-0) nickname)) (while (and s4-1 (or (= (-> s4-1 status) 'loading) (= (-> s4-1 status) 'loading-bt) (= (-> s4-1 status) 'login))) (set-blackout-frames (seconds 0.02)) (load-continue s4-1) ) ) ) (set! *print-login* #f) (level-status-set! (level-get *level* s5-0) 'active) ) (on #t) (if arg1 (initialize! *game-info* 'game (the-as game-save #f) (the-as string #f)) ) 0 ) ;; definition for function update-sound-banks (defun update-sound-banks () (if (nonzero? (rpc-busy? 1)) (return 0) ) (let ((gp-0 #f) (s5-0 #f) ) (dotimes (s4-0 (-> *level* length)) (let ((v1-5 (-> *level* level s4-0))) (when (= (-> v1-5 status) 'active) (let* ((s3-0 (-> v1-5 info sound-banks)) (t0-0 (the-as symbol (car s3-0))) ) (while (not (null? s3-0)) (cond ((or (= gp-0 t0-0) (= s5-0 t0-0) (-> *setting-control* current movie)) ) ((not gp-0) (set! gp-0 t0-0) ) ((not s5-0) (set! s5-0 t0-0) ) (else (format 0 "ERROR: Soundbanks ~A, ~A and ~A all required~%" gp-0 s5-0 t0-0) ) ) (set! s3-0 (cdr s3-0)) (set! t0-0 (the-as symbol (car s3-0))) ) ) ) ) ) (when (and gp-0 (!= gp-0 *sound-bank-1*) (!= gp-0 *sound-bank-2*)) (when (not *sound-bank-1*) (format 0 "Load soundbank ~A~%" gp-0) (sound-bank-load (string->sound-name (symbol->string gp-0))) (set! *sound-bank-1* gp-0) (return 0) ) (when (not *sound-bank-2*) (format 0 "Load soundbank ~A~%" gp-0) (sound-bank-load (string->sound-name (symbol->string gp-0))) (set! *sound-bank-2* gp-0) (return 0) ) (when (!= *sound-bank-1* s5-0) (format 0 "Unload soundbank ~A~%" *sound-bank-1*) (sound-bank-unload (string->sound-name (symbol->string *sound-bank-1*))) (set! *sound-bank-1* #f) (return 0) ) (when (!= *sound-bank-2* s5-0) (format 0 "Unload soundbank ~A~%" *sound-bank-2*) (sound-bank-unload (string->sound-name (symbol->string *sound-bank-2*))) (set! *sound-bank-2* #f) (return 0) ) ) (when (and s5-0 (!= s5-0 *sound-bank-1*) (!= s5-0 *sound-bank-2*)) (when (not *sound-bank-1*) (format 0 "Load soundbank ~A~%" s5-0) (sound-bank-load (string->sound-name (symbol->string s5-0))) (set! *sound-bank-1* s5-0) (return 0) ) (when (not *sound-bank-2*) (format 0 "Load soundbank ~A~%" s5-0) (sound-bank-load (string->sound-name (symbol->string s5-0))) (set! *sound-bank-2* s5-0) (return 0) ) (when (!= *sound-bank-1* gp-0) (format 0 "Unload soundbank ~A~%" *sound-bank-1*) (sound-bank-unload (string->sound-name (symbol->string *sound-bank-1*))) (set! *sound-bank-1* #f) (return 0) ) (when (!= *sound-bank-2* gp-0) (format 0 "Unload soundbank ~A~%" *sound-bank-2*) (sound-bank-unload (string->sound-name (symbol->string *sound-bank-2*))) (set! *sound-bank-2* #f) (return 0) ) ) ) 0 ) ;; definition for method 10 of type load-state (defmethod update! load-state ((obj load-state)) (update-sound-banks) (let ((v1-0 #f)) (dotimes (s5-0 2) (let ((s4-0 (-> *level* level s5-0))) (when (!= (-> s4-0 status) 'inactive) (let ((a0-6 #f)) (dotimes (a1-2 2) (if (= (-> s4-0 name) (-> obj want a1-2 name)) (set! a0-6 #t) ) ) (when (not a0-6) (format 0 "Discarding level ~A~%" (-> s4-0 name)) (level-status-set! s4-0 'inactive) (set! v1-0 #t) ) ) ) ) ) (let ((s5-1 #f)) (if (and (= (-> *level* level0 status) 'inactive) (= (-> *level* level1 status) 'inactive)) (set! s5-1 #t) ) (if v1-0 (return 0) ) (let ((a0-20 #f) (v1-5 #f) ) (when (-> obj want 0 name) (set! a0-20 #t) (dotimes (a1-12 3) (let ((a2-9 (-> *level* level a1-12))) (if (and (!= (-> a2-9 status) 'inactive) (= (-> a2-9 name) (-> obj want 0 name))) (set! a0-20 #f) ) ) ) ) (when (-> obj want 1 name) (set! v1-5 #t) (dotimes (a1-17 3) (let ((a2-17 (-> *level* level a1-17))) (if (and (!= (-> a2-17 status) 'inactive) (= (-> a2-17 name) (-> obj want 1 name))) (set! v1-5 #f) ) ) ) ) (let ((s4-1 -1)) (cond ((and a0-20 v1-5) (set! s4-1 0) (if (and (-> obj want 1 display?) (not (-> obj want 0 display?))) (set! s4-1 1) ) ) (a0-20 (set! s4-1 0) ) (v1-5 (set! s4-1 1) ) ) (when (!= s4-1 -1) (when (or s5-1 (not (check-busy *load-dgo-rpc*))) (format 0 "Adding level ~A~%" (-> obj want s4-1 name)) (let ((s3-0 (level-get-for-use *level* (-> obj want s4-1 name) 'loaded))) (when (and s5-1 (-> obj want s4-1 display?)) (format 0 "Waiting for level to load~%") (while (or (= (-> s3-0 status) 'loading) (= (-> s3-0 status) 'loading-bt) (= (-> s3-0 status) 'login)) (load-continue s3-0) ) ) ) ) ) ) ) ) ) (dotimes (s5-2 2) (when (-> obj want s5-2 name) (dotimes (s4-2 3) (let ((s3-1 (-> *level* level s4-2))) (when (!= (-> s3-1 status) 'inactive) (when (= (-> s3-1 name) (-> obj want s5-2 name)) (when (!= (-> s3-1 display?) (-> obj want s5-2 display?)) (cond ((not (-> s3-1 display?)) (cond ((or (= (-> s3-1 status) 'loaded) (= (-> s3-1 status) 'active)) (format 0 "Displaying level ~A [~A]~%" (-> obj want s5-2 name) (-> obj want s5-2 display?)) (level-get-for-use *level* (-> s3-1 info name) 'active) (set! (-> s3-1 display?) (-> obj want s5-2 display?)) ) (else (if (and (-> s3-1 info wait-for-load) (!= (-> obj want s5-2 display?) 'display-no-wait)) (send-event *target* 'loading) ) (if (= *cheat-mode* 'debug) (format *stdcon* "display on for ~A but level is loading~%" (-> obj want s5-2 name)) ) ) ) ) ((not (-> obj want s5-2 display?)) (set! (-> s3-1 display?) #f) (format 0 "Turning level ~A off~%" (-> s3-1 name)) (deactivate s3-1) ) (else (format 0 "Setting level ~A display command to ~A~%" (-> obj want s5-2 name) (-> obj want s5-2 display?)) (set! (-> s3-1 display?) (-> obj want s5-2 display?)) ) ) ) (when (!= (-> s3-1 force-all-visible?) (-> obj want s5-2 force-vis?)) (set! (-> s3-1 force-all-visible?) (-> obj want s5-2 force-vis?)) (format 0 "Setting force-all-visible?[~A] to ~A~%" (-> obj want s5-2 name) (-> obj want s5-2 force-vis?)) ) (when (!= (-> s3-1 force-inside?) (-> obj want s5-2 force-inside?)) (set! (-> s3-1 force-inside?) (-> obj want s5-2 force-inside?)) (format 0 "Setting force-inside?[~A] to ~A~%" (-> obj want s5-2 name) (-> obj want s5-2 force-inside?)) ) ) ) ) ) ) ) (let ((s5-3 #f)) (dotimes (v1-121 (-> *level* length)) (let ((a0-55 (-> *level* level v1-121))) (when (= (-> a0-55 status) 'active) (if (nonzero? (-> a0-55 vis-info (-> a0-55 vis-self-index) ramdisk)) (set! s5-3 (-> a0-55 nickname)) ) ) ) ) (when (and (!= s5-3 (-> obj vis-nick)) (-> *level* vis?)) (when (-> obj vis-nick) (dotimes (s4-3 (-> *level* length)) (let ((v1-133 (-> *level* level s4-3))) (when (= (-> v1-133 status) 'active) (if (and (= (-> v1-133 nickname) (-> obj vis-nick)) (-> v1-133 inside-boxes?)) (load-vis-info (-> obj vis-nick) s5-3) ) ) ) ) ) ) ) 0 ) ;; definition for method 16 of type level-group (defmethod level-update level-group ((obj level-group)) (camera-pos) (new 'static 'boxed-array :type symbol :length 0 :allocated-length 2) (update-per-frame-settings! *setting-control*) (update *art-control* #t) (clear-rec *art-control*) (dotimes (s5-0 2) (load-continue (-> obj level s5-0)) ) (dotimes (s5-1 (-> obj length)) (let ((s4-0 (-> obj level s5-1))) (when (= (-> s4-0 status) 'active) (set! (-> s4-0 inside-boxes?) (point-in-boxes? s4-0 (-> *math-camera* trans))) (set! (-> s4-0 inside-sphere?) (>= (-> s4-0 bsp bsphere w) (-> s4-0 level-distance))) (if (-> s4-0 inside-boxes?) (set! (-> s4-0 meta-inside?) #t) ) ) ) ) (update! *load-state*) (dotimes (s5-2 (-> obj length)) (let ((s4-1 (-> obj level s5-2))) (when (= (-> s4-1 status) 'active) (if (and (-> s4-1 inside-boxes?) (not (-> s4-1 other inside-boxes?))) (set! (-> s4-1 other meta-inside?) #f) ) (when (and (null? (-> obj load-commands)) (= (-> s4-1 nickname) (-> *load-state* vis-nick)) (!= (-> s4-1 name) (-> *game-info* current-continue level)) (-> *level* border?) ) (let ((s3-0 (the-as continue-point (car (-> s4-1 info continues))))) (let* ((s2-0 (target-pos 0)) (s4-2 (-> s4-1 info continues)) (s1-0 (the-as continue-point (car s4-2))) ) (while (not (null? s4-2)) (if (and (< (vector-vector-distance s2-0 (-> s1-0 trans)) (vector-vector-distance s2-0 (-> s3-0 trans))) (zero? (-> s1-0 flags)) ) (set! s3-0 s1-0) ) (set! s4-2 (cdr s4-2)) (set! s1-0 (the-as continue-point (car s4-2))) ) ) (set-continue! *game-info* s3-0) ) ) ) ) ) (dotimes (v1-67 (-> obj length)) (let ((a0-26 (-> obj level v1-67))) (when (= (-> a0-26 status) 'active) (set! (-> a0-26 vis-self-index) 0) (set! (-> a0-26 vis-adj-index) 7) (when (= (-> a0-26 other status) 'active) (dotimes (a1-10 8) (if (and (-> a0-26 vis-info a1-10) (= (-> a0-26 vis-info a1-10 from-level) (-> a0-26 other load-name))) (set! (-> a0-26 vis-adj-index) a1-10) ) ) ) ) ) ) (when *display-level-border* (dotimes (s5-3 (-> obj length)) (let ((s4-3 (-> obj level s5-3))) (when (= (-> s4-3 status) 'active) (let ((s3-1 (-> s4-3 bsp current-bsp-back-flags))) (dotimes (s2-1 6) (when (and (logtest? s3-1 3) (-> s4-3 vis-info (+ s2-1 1))) (let ((v1-88 (lookup-level-info (-> s4-3 vis-info (+ s2-1 1) from-level)))) (format *stdcon* " ~A -> ~A: load: ~A display: ~A~%" (-> s4-3 name) (-> v1-88 name) (logtest? s3-1 1) (logtest? s3-1 2) ) ) ) (set! s3-1 (shr s3-1 2)) ) ) ) ) ) ) (dotimes (s5-4 (-> obj length)) (let ((s4-4 (-> obj level s5-4))) (when (= (-> s4-4 status) 'active) (when (and (= (-> s4-4 nickname) (-> *load-state* vis-nick)) (not (-> s4-4 inside-boxes?))) (if (and (= *cheat-mode* 'debug) (-> s4-4 other inside-boxes?)) (format *stdcon* "~3LForcing outside of ~A [bad split boxes]~%~0L" (-> s4-4 other name)) ) (set! (-> s4-4 other inside-boxes?) #f) ) ) ) ) (cond ((not (or (-> obj level0 inside-boxes?) (-> obj level1 inside-boxes?))) (when (or (-> obj level0 vis-info 0) (-> obj level1 vis-info 0)) (if (= *cheat-mode* 'debug) (format *stdcon* "~3Loutside of bsp~%~0L") ) ) ) (else (dotimes (v1-125 (-> obj length)) (let ((a0-44 (-> obj level v1-125))) (when (= (-> a0-44 status) 'active) (dotimes (a1-17 8) (let ((a2-18 (-> a0-44 vis-info a1-17))) (when a2-18 (set! (-> a2-18 flags) (logand (the-as uint #xffffffff7fffffff) (-> a2-18 flags))) (cond ((= a1-17 (-> a0-44 vis-self-index)) (set! (-> a2-18 from-bsp) (-> a0-44 bsp)) ) ((= a1-17 (-> a0-44 vis-adj-index)) (set! (-> a2-18 from-bsp) (-> a0-44 other bsp)) ) (else (set! (-> a2-18 from-bsp) #f) ) ) ) ) ) (cond ((= (-> a0-44 display?) 'display-self) (let ((a0-46 (-> a0-44 vis-info (-> a0-44 vis-self-index)))) (if a0-46 (set! (-> a0-46 flags) (the-as uint (logior (shl #x8000 16) (-> a0-46 flags)))) ) ) ) ((and (-> a0-44 inside-boxes?) (not (-> a0-44 other inside-boxes?))) (let ((a0-48 (-> a0-44 vis-info (-> a0-44 vis-self-index)))) (if a0-48 (set! (-> a0-48 flags) (the-as uint (logior (shl #x8000 16) (-> a0-48 flags)))) ) ) ) ((-> a0-44 other inside-boxes?) (let ((a0-50 (-> a0-44 vis-info (-> a0-44 vis-adj-index)))) (if a0-50 (set! (-> a0-50 flags) (the-as uint (logior (shl #x8000 16) (-> a0-50 flags)))) ) ) ) ) ) ) ) ) ) (when (or *display-level-border* *display-texture-download* *display-split-box-info*) (when *display-level-border* (format *stdcon* " want: ~A ~A/~A ~A ~A/~A~%" (-> *load-state* want 0 name) (-> *load-state* want 0 display?) (-> *load-state* want 0 force-vis?) (-> *load-state* want 1 name) (-> *load-state* want 1 display?) (-> *load-state* want 1 force-vis?) ) (let ((t9-16 format) (a0-53 *stdcon*) (a1-49 " nick ~A cur ~S cont ~A~%~%") (a2-24 (-> *load-state* vis-nick)) (v1-142 (and *target* (-> *target* current-level name))) ) (t9-16 a0-53 a1-49 a2-24 (if v1-142 (symbol->string (the-as symbol v1-142)) ) (-> *game-info* current-continue name) ) ) ) (dotimes (s5-5 (-> obj length)) (let ((s4-5 (-> obj level s5-5))) (when (= (-> s4-5 status) 'active) (format *stdcon* "~A: ~S ~A~%" (-> s4-5 name) (if (point-in-boxes? s4-5 (-> *math-camera* trans)) "inside" ) (-> s4-5 display?) ) (when *display-texture-download* (format *stdcon* " tfrag: ~8,,0m " (-> s4-5 closest-object 0)) (format *stdcon* " shrub: ~8,,0m " (-> s4-5 closest-object 2)) (format *stdcon* " alpha: ~8,,0m #x~8X~%" (-> s4-5 closest-object 3) (-> s4-5 texture-mask 8)) (format *stdcon* " tie: ~8,,0m " (-> s4-5 closest-object 5)) (format *stdcon* " fg-tf: ~8,,0m " (-> s4-5 closest-object 6)) (format *stdcon* " fg-pr: ~8,,0m #x~8X~%" (-> s4-5 closest-object 7) (-> s4-5 texture-mask 7)) (format *stdcon* " tf: ~8D pr: ~8D sh: ~8D al: ~8D wa: ~8D~%~1K" (-> s4-5 upload-size 0) (-> s4-5 upload-size 1) (-> s4-5 upload-size 2) (-> s4-5 upload-size 3) (-> s4-5 upload-size 4) ) ) (if *display-split-box-info* (debug-print-splitbox s4-5 (-> *math-camera* trans) *stdcon*) ) ) ) ) ) 0 ) ;; definition (debug) for function show-level (defun-debug show-level ((arg0 symbol)) (set! (-> *setting-control* default border-mode) #t) (load-state-want-levels (-> (level-get-target-inside *level*) name) arg0) (load-state-want-display-level arg0 'display) 0 ) ;; failed to figure out what this is: (when (zero? (-> *level* level0 art-group)) (let ((gp-0 *level*)) (set! (-> gp-0 vis?) #f) (set! (-> gp-0 loading-level) (-> gp-0 level-default)) (set! (-> gp-0 level0 art-group) (new 'global 'load-dir-art-group 50 (-> gp-0 level0))) (set! (-> gp-0 level0 foreground-draw-engine 0) (new 'global 'engine 'draw 280)) (set! (-> gp-0 level0 foreground-draw-engine 1) (new 'global 'engine 'draw 280)) (set! (-> gp-0 level0 foreground-draw-engine 2) (new 'global 'engine 'draw 16)) (set! (-> gp-0 level1 art-group) (new 'global 'load-dir-art-group 50 (-> gp-0 level1))) (set! (-> gp-0 level1 foreground-draw-engine 0) (new 'global 'engine 'draw 280)) (set! (-> gp-0 level1 foreground-draw-engine 1) (new 'global 'engine 'draw 280)) (set! (-> gp-0 level1 foreground-draw-engine 2) (new 'global 'engine 'draw 16)) (set! (-> gp-0 level-default art-group) (new 'global 'load-dir-art-group 50 (-> gp-0 level1))) (set! (-> gp-0 level-default foreground-draw-engine 0) (new 'global 'engine 'draw 280)) (set! (-> gp-0 level-default foreground-draw-engine 1) (new 'global 'engine 'draw 10)) (set! (-> gp-0 level0 other) (-> gp-0 level1)) (set! (-> gp-0 level1 other) (-> gp-0 level0)) (set! (-> gp-0 level-default other) #f) (dotimes (s5-0 2) (let ((s4-0 (-> gp-0 level s5-0))) (set! (-> s4-0 vis-bits) (malloc 'global 2048)) (vis-clear s4-0) ) ) (dotimes (v1-36 3) (let ((a0-50 (-> gp-0 level v1-36))) (set! (-> a0-50 linking) #f) (dotimes (a1-46 3) (set! (-> a0-50 foreground-sink-group a1-46 level) a0-50) ) ) ) ) )