fix missing bitfield (#811)

This commit is contained in:
water111 2021-09-01 21:02:16 -04:00 committed by GitHub
parent 9b0480c50d
commit 4616f436f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 94 additions and 52 deletions

View file

@ -1588,12 +1588,21 @@ FormElement* SimpleExpressionElement::update_from_stack_logor_or_logand_helper(
bool arg1_int_like = env.dts->ts.tc(TypeSpec("integer"), arg1_type);
if ((arg0_int_like) && (arg1_int_like)) {
// we might have a bitfield in arg1.
auto arg1_bitfield = dynamic_cast<BitFieldType*>(env.dts->ts.lookup_type(arg1_type));
auto arg1_enum = dynamic_cast<EnumType*>(env.dts->ts.lookup_type(arg1_type));
if ((arg1_bitfield || arg1_enum) && arg0_type != arg1_type) {
auto new_form = pool.alloc_element<GenericElement>(
GenericOperator::make_fixed(kind), cast_form(args.at(0), arg1_type, pool, env),
args.at(1));
return new_form;
} else {
auto new_form = pool.alloc_element<GenericElement>(GenericOperator::make_fixed(kind),
args.at(0), args.at(1));
return new_form;
// types bad, insert cast.
}
}
// types bad, insert cast.
auto cast = pool.alloc_single_element_form<CastElement>(
nullptr, TypeSpec(arg0_i ? "int" : "uint"), args.at(1));
auto new_form =

View file

@ -651,7 +651,9 @@
(bit8 8)
(bit10 10) ;; TODO - nav-enemy::nav-enemy-patrol-post
(bit13 13)
(bit17 17)
(bit19 19) ;; TODO - nav-enemy::lambda::17
(bit21 21)
)
(defenum task-status
@ -32632,7 +32634,7 @@
;; - Functions
(define-extern misty-camera-view (function int :behavior silostep))
(define-extern misty-camera-view (function handle :behavior silostep))
;; - Unknowns

View file

@ -1886,10 +1886,6 @@
[50, "v1", "vector"]
],
"(method 11 rigid-body-platform)": [
[5, "v1", "process-mask"]
],
"(method 22 mud)": [
[35, "v0", "(pointer float)"]
],

View file

@ -19,7 +19,9 @@
(bit8 8)
(bit10 10) ;; TODO - nav-enemy::nav-enemy-patrol-post
(bit13 13)
(bit17 17)
(bit19 19) ;; TODO - nav-enemy::lambda::17
(bit21 21)
)
(deftype nav-poly (structure)

View file

@ -51,7 +51,7 @@
(-> obj initial-velocity)
time
)
(+! (-> result y) (* (* (* 0.5 time) time) (-> obj gravity)))
(+! (-> result y) (* 0.5 time time (-> obj gravity)))
result
)
@ -454,7 +454,7 @@ nav-enemy-default-event-handler
(if
(or
(logtest? (-> obj nav-enemy-flags) 128)
(logtest? #x80000 (-> obj nav flags))
(logtest? (nav-control-flags bit19) (-> obj nav flags))
)
(seek-to-point-toward-point!
(-> obj collide-info)
@ -531,7 +531,10 @@ nav-enemy-default-event-handler
;; INFO: Return type mismatch int vs none.
(defbehavior nav-enemy-patrol-post nav-enemy ()
(when
(or (logtest? #x80000 (-> self nav flags)) (< 2.0 (-> self nav block-count)))
(or
(logtest? (nav-control-flags bit19) (-> self nav flags))
(< 2.0 (-> self nav block-count))
)
(set! (-> self nav block-count) 2.0)
(logior! (-> self nav flags) (nav-control-flags bit10))
(nav-enemy-get-new-patrol-point)
@ -543,7 +546,7 @@ nav-enemy-default-event-handler
(-> self nav destination-pos)
(-> self rotate-speed)
)
(if (logtest? #x200000 (-> self nav flags))
(if (logtest? (nav-control-flags bit21) (-> self nav flags))
(logclear! (-> self nav flags) (nav-control-flags bit10))
)
(nav-enemy-travel-post)
@ -1194,7 +1197,10 @@ nav-enemy-default-event-handler
)
(set!
(-> self nav flags)
(the-as nav-control-flags (the-as int (logior #x80000 (-> self nav flags))))
(the-as
nav-control-flags
(the-as int (logior (nav-control-flags bit19) (-> self nav flags)))
)
)
(set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags)))
(logior! (-> self nav-enemy-flags) 8)
@ -1890,7 +1896,7 @@ nav-enemy-default-event-handler
(go-virtual nav-enemy-stop-chase)
)
(cond
((logtest? #x20000 (-> self nav flags))
((logtest? (nav-control-flags bit17) (-> self nav flags))
(if (>= (- (-> *display* base-frame-counter) (-> self free-time)) 300)
(go-virtual nav-enemy-patrol)
)
@ -2005,7 +2011,7 @@ nav-enemy-default-event-handler
)
)
)
(logtest? #x20000 (-> self nav flags))
(logtest? (nav-control-flags bit17) (-> self nav flags))
(>=
(- (-> *display* base-frame-counter) (the-as int (-> self state-time)))
(-> self state-timeout)
@ -2164,7 +2170,7 @@ nav-enemy-default-event-handler
)
)
)
(logtest? #x20000 (-> self nav flags))
(logtest? (nav-control-flags bit17) (-> self nav flags))
)
(go-virtual nav-enemy-give-up)
)
@ -2815,7 +2821,7 @@ nav-enemy-default-event-handler
(if
(or
(logtest? (-> self nav-enemy-flags) 128)
(logtest? #x80000 (-> self nav flags))
(logtest? (nav-control-flags bit19) (-> self nav flags))
)
(seek-to-point-toward-point!
(-> self collide-info)
@ -2880,7 +2886,7 @@ nav-enemy-default-event-handler
(- (-> *display* base-frame-counter) (the-as int (-> self state-time)))
150
)
(logtest? #x80000 (-> self nav flags))
(logtest? (nav-control-flags bit19) (-> self nav flags))
)
(go-virtual nav-enemy-chase)
)
@ -3105,7 +3111,10 @@ nav-enemy-default-event-handler
(defmethod TODO-RENAME-45 nav-enemy ((obj nav-enemy) (arg0 nav-enemy-info))
(set! (-> obj rand-gen) (new 'process 'random-generator))
(set! (-> obj rand-gen seed) (the-as uint #x666edd1e))
(set! (-> obj mask) (the-as process-mask (logior #x20000 (-> obj mask))))
(set!
(-> obj mask)
(the-as process-mask (logior (process-mask enemy) (-> obj mask)))
)
(TODO-RENAME-49 obj arg0)
(if (-> obj draw shadow)
(set!

View file

@ -1196,7 +1196,7 @@
copy-defaults!
rigid-body-platform
((obj rigid-body-platform) (arg0 res-lump))
(set! (-> obj mask) (the-as process-mask (logior #x80000 (-> obj mask))))
(set! (-> obj mask) (logior (process-mask platform) (-> obj mask)))
(TODO-RENAME-30 obj)
(process-drawable-from-entity! obj arg0)
(TODO-RENAME-31 obj)

View file

@ -24,7 +24,6 @@
(define-extern silostep-idle (state silostep))
(define-extern silostep-camera (state silostep))
;; failed to figure out what this is:
(let
((v1-1
@ -80,6 +79,7 @@
)
;; definition for function misty-camera-view
;; INFO: Return type mismatch int vs handle.
(defbehavior misty-camera-view silostep ()
(let* ((gp-0 (get-process *default-dead-pool* camera-tracker #x4000))
(v1-1 (when gp-0
@ -119,11 +119,14 @@
)
)
(v0-3
(logior (shl (-> v1-1 0 pid) 32) (new 'static 'handle :process v1-1))
(logior
(new 'static 'handle :pid (-> v1-1 0 pid))
(new 'static 'handle :process v1-1)
)
)
)
(set! (-> self cam-tracker) (the-as uint v0-3))
v0-3
(the-as handle v0-3)
)
)

View file

@ -680,7 +680,7 @@
(format stream-2 "ERROR: dma-list data pointer invalid~%")
(set! end-condition 'error)
)
(when (logtest? #x3ff0000 current-tag)
(when (logtest? (the-as dma-tag #x3ff0000) current-tag)
(format stream-2 "ERROR: dma tag has data in reserved bits ~X~%")
(set! end-condition 'error)
)

View file

@ -25,7 +25,10 @@
)
(dotimes (s2-0 (the-as int (-> fp-data shader-cnt)))
(cond
((and eye-ctrl (= (logand -256 (-> shader texture-id)) #x1cf06f00))
((and
eye-ctrl
(= (logand (the-as texture-id -256) (-> shader texture-id)) #x1cf06f00)
)
(adgif-shader-login shader)
(let ((eye-tex-block (get-eye-block (-> eye-ctrl eye-slot) 0)))
(set! (-> shader tex0 tbp0) eye-tex-block)
@ -46,7 +49,10 @@
)
)
)
((and eye-ctrl (= (logand -256 (-> shader texture-id)) #x1cf07000))
((and
eye-ctrl
(= (logand (the-as texture-id -256) (-> shader texture-id)) #x1cf07000)
)
(adgif-shader-login shader)
(let ((eye-tex-block-2 (get-eye-block (-> eye-ctrl eye-slot) 1)))
(set! (-> shader tex0 tbp0) eye-tex-block-2)

View file

@ -589,7 +589,9 @@
(table-data-start (-> bsp-hdr texture-remap-table))
(table-data-ptr table-data-start)
(mask1 (the-as uint #xfffffff8))
(masked-tex-id (logand (the-as uint #xffffff00) tex-id))
(masked-tex-id
(logand (new 'static 'texture-id :index #xfff :page #xfff) tex-id)
)
(table-data-end (&+ table-data-ptr (* table-size 8)))
)
(label cfg-2)

View file

@ -203,31 +203,31 @@
;; definition (debug) for function stream<-process-mask
(defun-debug stream<-process-mask ((arg0 object) (arg1 process-mask))
(let ((s4-0 arg1))
(if (= (logand #x1000000 s4-0) (process-mask death))
(if (= (logand (process-mask death) s4-0) (process-mask death))
(format arg0 "death ")
)
(if (= (logand #x800000 s4-0) (process-mask attackable))
(if (= (logand (process-mask attackable) s4-0) (process-mask attackable))
(format arg0 "attackable ")
)
(if (= (logand #x400000 s4-0) (process-mask projectile))
(if (= (logand (process-mask projectile) s4-0) (process-mask projectile))
(format arg0 "projectile ")
)
(if (= (logand #x200000 s4-0) (process-mask entity))
(if (= (logand (process-mask entity) s4-0) (process-mask entity))
(format arg0 "entity ")
)
(if (= (logand #x100000 s4-0) (process-mask ambient))
(if (= (logand (process-mask ambient) s4-0) (process-mask ambient))
(format arg0 "ambient ")
)
(if (= (logand #x80000 s4-0) (process-mask platform))
(if (= (logand (process-mask platform) s4-0) (process-mask platform))
(format arg0 "platform ")
)
(if (= (logand #x40000 s4-0) (process-mask camera))
(if (= (logand (process-mask camera) s4-0) (process-mask camera))
(format arg0 "camera ")
)
(if (= (logand #x20000 s4-0) (process-mask enemy))
(if (= (logand (process-mask enemy) s4-0) (process-mask enemy))
(format arg0 "enemy ")
)
(if (= (logand #x10000 s4-0) (process-mask collectable))
(if (= (logand (process-mask collectable) s4-0) (process-mask collectable))
(format arg0 "collectable ")
)
(if (= (logand s4-0 (process-mask crate)) (process-mask crate))

View file

@ -450,7 +450,7 @@ nav-enemy-default-event-handler
(if
(or
(logtest? (-> obj nav-enemy-flags) 128)
(logtest? #x80000 (-> obj nav flags))
(logtest? (nav-control-flags bit19) (-> obj nav flags))
)
(seek-to-point-toward-point!
(-> obj collide-info)
@ -527,7 +527,10 @@ nav-enemy-default-event-handler
;; INFO: Return type mismatch int vs none.
(defbehavior nav-enemy-patrol-post nav-enemy ()
(when
(or (logtest? #x80000 (-> self nav flags)) (< 2.0 (-> self nav block-count)))
(or
(logtest? (nav-control-flags bit19) (-> self nav flags))
(< 2.0 (-> self nav block-count))
)
(set! (-> self nav block-count) 2.0)
(logior! (-> self nav flags) (nav-control-flags bit10))
(nav-enemy-get-new-patrol-point)
@ -539,7 +542,7 @@ nav-enemy-default-event-handler
(-> self nav destination-pos)
(-> self rotate-speed)
)
(if (logtest? #x200000 (-> self nav flags))
(if (logtest? (nav-control-flags bit21) (-> self nav flags))
(logclear! (-> self nav flags) (nav-control-flags bit10))
)
(nav-enemy-travel-post)
@ -1190,7 +1193,10 @@ nav-enemy-default-event-handler
)
(set!
(-> self nav flags)
(the-as nav-control-flags (the-as int (logior #x80000 (-> self nav flags))))
(the-as
nav-control-flags
(the-as int (logior (nav-control-flags bit19) (-> self nav flags)))
)
)
(set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags)))
(logior! (-> self nav-enemy-flags) 8)
@ -1886,7 +1892,7 @@ nav-enemy-default-event-handler
(go-virtual nav-enemy-stop-chase)
)
(cond
((logtest? #x20000 (-> self nav flags))
((logtest? (nav-control-flags bit17) (-> self nav flags))
(if (>= (- (-> *display* base-frame-counter) (-> self free-time)) 300)
(go-virtual nav-enemy-patrol)
)
@ -2001,7 +2007,7 @@ nav-enemy-default-event-handler
)
)
)
(logtest? #x20000 (-> self nav flags))
(logtest? (nav-control-flags bit17) (-> self nav flags))
(>=
(- (-> *display* base-frame-counter) (the-as int (-> self state-time)))
(-> self state-timeout)
@ -2160,7 +2166,7 @@ nav-enemy-default-event-handler
)
)
)
(logtest? #x20000 (-> self nav flags))
(logtest? (nav-control-flags bit17) (-> self nav flags))
)
(go-virtual nav-enemy-give-up)
)
@ -2811,7 +2817,7 @@ nav-enemy-default-event-handler
(if
(or
(logtest? (-> self nav-enemy-flags) 128)
(logtest? #x80000 (-> self nav flags))
(logtest? (nav-control-flags bit19) (-> self nav flags))
)
(seek-to-point-toward-point!
(-> self collide-info)
@ -2876,7 +2882,7 @@ nav-enemy-default-event-handler
(- (-> *display* base-frame-counter) (the-as int (-> self state-time)))
150
)
(logtest? #x80000 (-> self nav flags))
(logtest? (nav-control-flags bit19) (-> self nav flags))
)
(go-virtual nav-enemy-chase)
)
@ -3101,7 +3107,10 @@ nav-enemy-default-event-handler
(defmethod TODO-RENAME-45 nav-enemy ((obj nav-enemy) (arg0 nav-enemy-info))
(set! (-> obj rand-gen) (new 'process 'random-generator))
(set! (-> obj rand-gen seed) (the-as uint #x666edd1e))
(set! (-> obj mask) (the-as process-mask (logior #x20000 (-> obj mask))))
(set!
(-> obj mask)
(the-as process-mask (logior (process-mask enemy) (-> obj mask)))
)
(TODO-RENAME-49 obj arg0)
(if (-> obj draw shadow)
(set!

View file

@ -1191,7 +1191,7 @@
copy-defaults!
rigid-body-platform
((obj rigid-body-platform) (arg0 res-lump))
(set! (-> obj mask) (the-as process-mask (logior #x80000 (-> obj mask))))
(set! (-> obj mask) (logior (process-mask platform) (-> obj mask)))
(TODO-RENAME-30 obj)
(process-drawable-from-entity! obj arg0)
(TODO-RENAME-31 obj)

View file

@ -77,6 +77,7 @@
)
;; definition for function misty-camera-view
;; INFO: Return type mismatch int vs handle.
(defbehavior misty-camera-view silostep ()
(let* ((gp-0 (get-process *default-dead-pool* camera-tracker #x4000))
(v1-1 (when gp-0
@ -116,11 +117,14 @@
)
)
(v0-3
(logior (shl (-> v1-1 0 pid) 32) (new 'static 'handle :process v1-1))
(logior
(new 'static 'handle :pid (-> v1-1 0 pid))
(new 'static 'handle :process v1-1)
)
)
)
(set! (-> self cam-tracker) (the-as uint v0-3))
v0-3
(the-as handle v0-3)
)
)