mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
fix missing bitfield (#811)
This commit is contained in:
parent
9b0480c50d
commit
4616f436f1
|
@ -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 =
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1886,10 +1886,6 @@
|
|||
[50, "v1", "vector"]
|
||||
],
|
||||
|
||||
"(method 11 rigid-body-platform)": [
|
||||
[5, "v1", "process-mask"]
|
||||
],
|
||||
|
||||
"(method 22 mud)": [
|
||||
[35, "v0", "(pointer float)"]
|
||||
],
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
18
test/decompiler/reference/kernel/gkernel_REF.gc
vendored
18
test/decompiler/reference/kernel/gkernel_REF.gc
vendored
|
@ -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))
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue