• R/O
  • SSH

waddle: Commit

Common Lisp library for manipulating Doom and Quake WAD files and PAK files.


Commit MetaInfo

Revisão4cd7d6d646e7719b6da01fa5123ceee4ea9b8110 (tree)
Hora2019-12-29 09:36:23
AutorAlexa Jones-Gonzales <alexa@part...>
CommiterAlexa Jones-Gonzales

Mensagem de Log

Add classes for BSP2 and 2PSB files

Mudança Sumário

Diff

diff -r 674a1066483c -r 4cd7d6d646e7 src/bsp-classes.lisp
--- a/src/bsp-classes.lisp Sun Dec 22 01:03:45 2019 -0700
+++ b/src/bsp-classes.lisp Sat Dec 28 17:36:23 2019 -0700
@@ -332,6 +332,12 @@
332332 :ledges (make-instance 'bsp-entry)
333333 :models (make-instance 'bsp-entry)))))
334334
335+(defclass bsp2-file (bsp-file)
336+ ())
337+
338+(defclass 2psb-file (bsp-file)
339+ ())
340+
335341 (defmethod print-object ((obj bsp-file) out)
336342 (print-unreadable-object (obj out :type t)
337343 (format out "Version: 29")))
diff -r 674a1066483c -r 4cd7d6d646e7 src/bsp.lisp
--- a/src/bsp.lisp Sun Dec 22 01:03:45 2019 -0700
+++ b/src/bsp.lisp Sat Dec 28 17:36:23 2019 -0700
@@ -15,6 +15,8 @@
1515 ;;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
1616 (in-package :p36.waddle)
1717
18+;;(declaim (optimize (debug 3)))
19+
1820 (defgeneric bsp-file-entry (bsp entry))
1921 (defgeneric bsp-load-header (bsp source))
2022 (defgeneric load-bsp (source))
@@ -55,8 +57,19 @@
5557 (getf (slot-value bsp 'entries) entry))
5658
5759 (defmethod load-bsp ((source stream))
58- (let ((bsp (make-instance 'bsp-file)))
59- (bsp-load-header bsp source)
60+ (let* ((bsp (make-instance 'bsp-file))
61+ (ver (bsp-load-header bsp source)))
62+
63+ ;; Change to a BSP2 or 2PSB as-needed, it'll affect the loading.
64+ (let ((orig-ents (slot-value bsp 'entries)))
65+ (cond
66+ ((= ver +bsp2-version+)
67+ (setf bsp (make-instance 'bsp2-file))
68+ (setf (slot-value bsp 'entries) orig-ents))
69+
70+ ((= ver +2psb-version+)
71+ (setf bsp (make-instance '2psb-file))
72+ (setf (slot-value bsp 'entries) orig-ents))))
6073
6174 (bsp-load-entities bsp source)
6275 (bsp-load-planes bsp source)
@@ -91,14 +104,13 @@
91104 (unless (or (= ver +bsp-version+)
92105 (= ver +bsp2-version+)
93106 (= ver +2psb-version+))
94- (error 'bsp-error :text (format nil "Bad BSP version: ~a" ver))))
107+ (error 'bsp-error :text (format nil "Bad BSP version: ~a" ver)))
95108
96- (loop for (type entry) on (slot-value bsp 'entries) by #'cddr do
97- (progn
109+ (loop for (type entry) on (slot-value bsp 'entries) by #'cddr do
98110 (setf (bsp-entry-offset entry) (p36:read-bytes-into-int source 4))
99- (setf (bsp-entry-size entry) (p36:read-bytes-into-int source 4))))
111+ (setf (bsp-entry-size entry) (p36:read-bytes-into-int source 4)))
100112
101- bsp)
113+ ver))
102114
103115 (defmethod bsp-load-entities ((bsp bsp-file) (source stream))
104116 (let ((entry (bsp-file-entry bsp :entities)))
@@ -164,9 +176,7 @@
164176 (setf (bsp-node-plane-id node) (p36:read-bytes-into-int source 4))
165177 (setf (bsp-node-front node) (p36:read-bytes-into-uint source 2))
166178 (setf (bsp-node-back node) (p36:read-bytes-into-uint source 2))
167-
168179 (setf (bsp-node-bounding-box node) (read-new-short-bounding-box source))
169-
170180 (setf (bsp-node-face-id node) (p36:read-bytes-into-uint source 2))
171181 (setf (bsp-node-num-faces node) (p36:read-bytes-into-uint source 2))))
172182
Show on old repository browser