get started on entity (#793)

This commit is contained in:
water111 2021-08-31 11:05:03 -04:00 committed by GitHub
parent ccdfa01a88
commit 34e8afa0ee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
36 changed files with 1931 additions and 340 deletions

View file

@ -728,6 +728,77 @@ Form* cast_sound_name(FormPool& pool, const Env& env, Form* in) {
return pool.alloc_single_element_form<ConstantTokenElement>(
nullptr, fmt::format("(static-sound-name \"{}\")", name));
}
std::optional<std::vector<BitFieldDef>> get_field_defs_from_expr(const BitFieldType* type_info,
Form* in,
const TypeSpec& typespec,
FormPool& pool,
const Env& env,
std::optional<int> offset) {
auto in_as_generic = strip_int_or_uint_cast(in)->try_as_element<GenericElement>();
std::vector<Form*> args;
if (in_as_generic && in_as_generic->op().is_fixed(FixedOperatorKind::LOGIOR)) {
args = compact_nested_logiors(in_as_generic, env);
} else {
args = {strip_int_or_uint_cast(in)};
}
if (!args.empty()) {
std::vector<BitFieldDef> field_defs;
for (auto it = args.begin(); it != args.end(); it++) {
auto constant = get_goal_integer_constant(*it, env);
if (constant) {
auto constant_defs =
try_decompile_bitfield_from_int(typespec, env.dts->ts, *constant, false, offset);
if (!constant_defs) {
return std::nullopt; // failed
}
for (auto& x : *constant_defs) {
field_defs.push_back(BitFieldDef::from_constant(x, pool));
}
args.erase(it);
break;
}
}
// now variables
for (auto& arg : args) {
// it's a 64-bit constant so correct to set offset 0 here.
auto maybe_field = get_bitfield_initial_set(strip_int_or_uint_cast(arg), type_info,
env.dts->ts, offset ? *offset : 0);
if (!maybe_field) {
// failed, just return cast.
return std::nullopt;
}
BitField field_info;
if (!type_info->lookup_field(maybe_field->field_name, &field_info)) {
assert(false);
}
if (field_info.type() == TypeSpec("symbol") || field_info.type() == TypeSpec("type")) {
maybe_field->value = strip_int_or_uint_cast(maybe_field->value);
}
if (field_info.type() == TypeSpec("float")) {
auto stripped = strip_int_or_uint_cast(maybe_field->value);
auto integer = get_goal_integer_constant(stripped, env);
if (integer) {
float value_f;
u32 value_i = *integer;
memcpy(&value_f, &value_i, 4);
maybe_field->value =
pool.alloc_single_element_form<ConstantFloatElement>(nullptr, value_f);
}
}
field_defs.push_back(*maybe_field);
}
return field_defs;
}
return std::vector<BitFieldDef>();
}
} // namespace
/*!
@ -752,8 +823,9 @@ Form* cast_to_bitfield(const BitFieldType* type_info,
// check if it's just a constant:
auto in_as_atom = form_as_atom(in);
if (in_as_atom && in_as_atom->is_int()) {
// will always be 64-bits
auto fields =
try_decompile_bitfield_from_int(typespec, env.dts->ts, in_as_atom->get_int(), false);
try_decompile_bitfield_from_int(typespec, env.dts->ts, in_as_atom->get_int(), false, {});
if (!fields) {
return pool.alloc_single_element_form<CastElement>(nullptr, typespec, in);
}
@ -761,46 +833,32 @@ Form* cast_to_bitfield(const BitFieldType* type_info,
pool);
}
auto in_as_generic = strip_int_or_uint_cast(in)->try_as_element<GenericElement>();
std::vector<Form*> args;
if (in_as_generic && in_as_generic->op().is_fixed(FixedOperatorKind::LOGIOR)) {
args = compact_nested_logiors(in_as_generic, env);
bool bitfield_128 = type_info->get_size_in_memory() == 16;
if (bitfield_128) {
auto in_no_cast = strip_int_or_uint_cast(in);
auto pcpyld_matcher =
Matcher::fixed_op(FixedOperatorKind::PCPYLD, {Matcher::any(0), Matcher::any(1)});
auto mr = match(pcpyld_matcher, in_no_cast);
if (mr.matched) {
auto upper = mr.maps.forms.at(0);
auto lower = mr.maps.forms.at(1);
auto upper_defs = get_field_defs_from_expr(type_info, upper, typespec, pool, env, 64);
auto lower_defs = get_field_defs_from_expr(type_info, lower, typespec, pool, env, 0);
if (upper_defs && lower_defs) {
lower_defs->insert(lower_defs->end(), upper_defs->begin(), upper_defs->end());
return pool.alloc_single_element_form<BitfieldStaticDefElement>(nullptr, typespec,
*lower_defs);
}
}
return pool.alloc_single_element_form<CastElement>(nullptr, typespec, in);
} else {
args = {strip_int_or_uint_cast(in)};
}
if (!args.empty()) {
std::vector<BitFieldDef> field_defs;
for (auto it = args.begin(); it != args.end(); it++) {
auto constant = get_goal_integer_constant(*it, env);
if (constant) {
auto constant_defs =
try_decompile_bitfield_from_int(typespec, env.dts->ts, *constant, false);
if (!constant_defs) {
return pool.alloc_single_element_form<CastElement>(nullptr, typespec, in);
}
for (auto& x : *constant_defs) {
field_defs.push_back(BitFieldDef::from_constant(x, pool));
}
args.erase(it);
break;
}
auto field_defs = get_field_defs_from_expr(type_info, in, typespec, pool, env, {});
if (field_defs) {
return pool.alloc_single_element_form<BitfieldStaticDefElement>(nullptr, typespec,
*field_defs);
}
// now variables
for (auto& arg : args) {
// it's a 64-bit constant so correct to set offset 0 here.
auto maybe_field =
get_bitfield_initial_set(strip_int_or_uint_cast(arg), type_info, env.dts->ts, 0);
if (!maybe_field) {
// failed, just return cast.
return pool.alloc_single_element_form<CastElement>(nullptr, typespec, in);
}
field_defs.push_back(*maybe_field);
}
return pool.alloc_single_element_form<BitfieldStaticDefElement>(nullptr, typespec, field_defs);
}
// all failed, just return whatever.

View file

@ -624,6 +624,7 @@
(bit-7 7)
(real-complete 8)
(bit-9 9)
(bit-10 10)
)
(defenum path-control-flag
@ -1262,7 +1263,7 @@
;; - Functions
(define-extern entity-deactivate-handler (function process object none))
(define-extern entity-deactivate-handler (function process entity none))
(define-extern process-disconnect (function process int))
(define-extern throw (function symbol object int))
(define-extern set-to-run-bootstrap (function none))
@ -4968,7 +4969,7 @@
:flag-assert #x1d00000a30
(:methods
(deactivate (_type_) _type_ 9)
(dummy-10 (_type_ int) symbol 10)
(is-object-visible? (_type_ int) symbol 10)
(add-irq-to-tex-buckets! (_type_) none 11)
(unload! (_type_) _type_ 12)
(bsp-name (_type_) symbol 13)
@ -5021,18 +5022,18 @@
(level-get-with-status (_type_ symbol) level 10)
(level-get-for-use (_type_ symbol symbol) level 11)
(activate-levels! (_type_) int 12)
(dummy-13 () none 13)
(dummy-14 (_type_ object) none 14)
(dummy-15 () none 15)
(debug-print-entities (_type_ symbol type) none 13)
(debug-draw-actors (_type_ symbol) none 14)
(dummy-15 (_type_) object 15)
(dummy-16 (_type_) int 16)
(level-get-target-inside (_type_) level 17)
(alloc-levels! (_type_ symbol) int 18)
(load-commands-set! (_type_ pair) pair 19)
(art-group-get-by-name (_type_ string) art-group 20)
(load-command-get-index (_type_ symbol int) pair 21)
(dummy-22 () none 22)
(dummy-23 () none 23)
(dummy-24 () none 24)
(update-vis-volumes (_type_) none 22)
(update-vis-volumes-from-nav-mesh (_type_) none 23)
(print-volume-sizes (_type_) none 24)
(level-status (_type_ symbol) symbol 25)
(level-get-most-disposable (_type_) level 26)
)
@ -10094,8 +10095,8 @@
)
(deftype part-tracker (process)
((root basic :offset-assert 112)
(part basic :offset-assert 116)
((root trsqv :offset-assert 112)
(part sparticle-launch-control :offset-assert 116)
(target uint64 :offset-assert 120)
(callback basic :offset-assert 128)
(linger-callback basic :offset-assert 132)
@ -11819,7 +11820,7 @@
(unk-data-4 float :offset-assert 160)
(unk-data-5 float :offset-assert 164)
(adgifs adgif-shader-array :offset-assert 168)
(unk-data-6 pointer :offset-assert 172)
(actor-birth-order (pointer uint32) :offset-assert 172)
(unk-data-7 pointer :offset-assert 176)
(unk-data-8 uint32 55 :offset-assert 180)
@ -11829,7 +11830,7 @@
:flag-assert #x1400000190
(:methods
(relocate (_type_ kheap (pointer uint8)) none :replace 7)
(dummy-18 (_type_) none 18)
(birth (_type_) none 18)
(dummy-19 (_type_) none 19)
)
)
@ -13027,7 +13028,7 @@
:size-assert #x40
:flag-assert #xa00000040
(:methods
(dummy-9 () none 9)
(dummy-9 (_type_ vector) none 9)
)
)
@ -13055,11 +13056,11 @@
:flag-assert #x1b00000034
;; unrecognized get op: (set! t9 find-parent-method) parent was res-lump
(:methods
(dummy-22 () none 22)
(dummy-23 () none 23)
(dummy-24 () none 24)
(dummy-25 () none 25)
(dummy-26 () none 26)
(birth! (_type_) _type_ 22)
(kill! (_type_) _type_ 23)
(add-to-level! (_type_ level-group level actor-id) none 24)
(remove-from-level! (_type_ level-group) _type_ 25)
(get-level (_type_) level 26)
)
)
@ -13093,7 +13094,7 @@
)
(deftype entity-ambient-data-array (inline-array-class)
()
((data entity-ambient-data :dynamic :inline))
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
@ -13106,7 +13107,7 @@
:flag-assert #x1d00000034
(:methods
(dummy-27 () none 27)
(dummy-28 () none 28)
(birth-ambient! (_type_) none 28)
)
)
@ -13117,6 +13118,7 @@
(etype type :offset-assert 56) ;; probably type
(task uint8 :offset-assert 60)
(vis-id uint16 :offset-assert 62)
(vis-id-signed int16 :offset 62) ;; added
(quat quaternion :inline :offset-assert 64)
)
:method-count-assert 31
@ -13126,8 +13128,8 @@
(:methods
(next-actor (_type_) entity-actor 27)
(prev-actor (_type_) entity-actor 28)
(dummy-29 () none 29)
(dummy-30 () none 30)
(debug-print (_type_ symbol type) none 29)
(dummy-30 (_type_ entity-perm-status symbol) none 30)
)
)
@ -14519,7 +14521,7 @@
(node-count int32 :offset-assert 176)
(nodes uint32 :offset-assert 180)
(vertex-count int32 :offset-assert 184)
(vertex uint32 :offset-assert 188)
(vertex (inline-array vector) :offset-assert 188)
(poly-count int32 :offset-assert 192)
(poly uint32 :offset-assert 196)
(route uint32 :offset-assert 200)
@ -14538,7 +14540,7 @@
(dummy-16 () none 16)
(dummy-17 (_type_) none 17)
(dummy-18 () none 18)
(dummy-19 () none 19)
(compute-bounding-box (_type_ vector vector) none 19)
(dummy-20 () none 20)
(dummy-21 () none 21)
(dummy-22 () none 22)
@ -17434,7 +17436,7 @@
(define-extern command-get-int (function object int int))
(define-extern ambient-hint-spawn (function symbol symbol process-tree none))
(define-extern command-get-float (function object float float))
(define-extern process-by-ename function)
(define-extern process-by-ename (function string process))
(define-extern point-in-polygon function)
(define-extern try-corner function)
(define-extern split-monotone-polygon function)
@ -18627,7 +18629,7 @@
(define-extern camera-fov-draw function)
(define-extern cam-line-dma function)
(define-extern camera-line2d function)
(define-extern camera-plot-float-func function)
(define-extern camera-plot-float-func (function float float float float (function float float) vector4w none))
(define-extern cam-debug-add-coll-tri function)
(define-extern debug-euler function)
(define-extern bike-cam-limit function)
@ -18905,7 +18907,7 @@
(define-extern line-in-view-frustum? function)
(define-extern process-drawable-random-point! function)
(define-extern process-drawable-from-entity! (function process-drawable object none))
(define-extern process-drawable-from-entity! (function process-drawable res-lump none))
(define-extern cam-launcher-long-joystick function)
(define-extern hide-hud-quick (function none))
(define-extern command-get-process function)
@ -19649,7 +19651,7 @@
(define-extern dma-add-process-drawable-hud function)
(define-extern foreground-engine-execute (function engine display-frame int int none))
(define-extern main-debug-hook function)
(define-extern main-draw-hook function)
(define-extern main-draw-hook (function none))
(define-extern swap-display (function display none))
(define-extern marks-cam-restore function)
(define-extern eddie-cam-restore function)
@ -19840,23 +19842,23 @@
;; - Functions
(define-extern task-control-reset (function symbol none))
(define-extern init-entity function)
(define-extern birth-viewer function)
(define-extern update-actor-vis-box function)
(define-extern process-status-bits function)
(define-extern entity-by-meters function)
(define-extern entity-process-count function)
(define-extern entity-count function)
(define-extern entity-remap-names function)
(define-extern expand-vis-box-with-point function)
(define-extern entity-task-complete-on function)
(define-extern entity-task-complete-off function)
(define-extern entity-speed-test function)
(define-extern init-entity (function process entity none))
(define-extern birth-viewer (function process entity object))
(define-extern update-actor-vis-box (function process-drawable vector vector none))
(define-extern process-status-bits (function process symbol none))
(define-extern entity-by-meters (function float float float entity-actor))
(define-extern entity-process-count (function symbol int))
(define-extern entity-count (function int))
(define-extern entity-remap-names (function pair none))
(define-extern expand-vis-box-with-point (function entity vector none))
(define-extern entity-task-complete-on (function entity none))
(define-extern entity-task-complete-off (function entity none))
(define-extern entity-speed-test (function string none))
;; - Unknowns
(define-extern *compact-actors* symbol)
;;(define-extern *vis-actors* object) ;; unknown type
(define-extern *vis-actors* symbol)
;; ----------------------
@ -21418,28 +21420,15 @@
;; - Types
; (deftype viewer (process-drawable)
; ((janim basic :offset-assert 176)
; )
; :method-count-assert 20
; :size-assert #xb4
; :heap-base #x50
; :flag-assert #x14005000b4
; ;; inherited inspect of process-drawable
; (:methods
; (dummy-9 () none 9)
; (dummy-10 () none 10)
; (dummy-11 () none 11)
; (dummy-12 () none 12)
; (dummy-13 () none 13)
; (dummy-14 () none 14)
; (dummy-15 () none 15)
; (dummy-16 () none 16)
; (dummy-17 () none 17)
; (dummy-18 () none 18)
; (dummy-19 () none 19)
; )
; )
(deftype viewer (process-drawable)
((janim art-joint-anim :offset-assert 176)
)
:method-count-assert 20
:size-assert #xb4
:heap-base #x50
:flag-assert #x14005000b4
;; inherited inspect of process-drawable
)
;; - Functions
@ -21452,11 +21441,11 @@
;; - Unknowns
;;(define-extern *viewer* object) ;; unknown type
;;(define-extern viewer-ja-name object) ;; unknown type
;;(define-extern viewer-geo-name object) ;; unknown type
(define-extern viewer-ja-name string)
(define-extern viewer-geo-name string)
(define-extern *viewer-sg* skeleton-group)
;;(define-extern viewer-process object) ;; unknown type
;;(define-extern viewer-string object) ;; unknown type
(define-extern viewer-process (state viewer))
(define-extern viewer-string string)
;; ----------------------
@ -29150,29 +29139,16 @@
;; - Types
; (deftype springbox (process-drawable)
; ((spring-height meters :offset-assert 176)
; (smush float :offset-assert 180)
; )
; :method-count-assert 20
; :size-assert #xb8
; :heap-base #x50
; :flag-assert #x14005000b8
; ;; inherited inspect of process-drawable
; (:methods
; (dummy-9 () none 9)
; (dummy-10 () none 10)
; (dummy-11 () none 11)
; (dummy-12 () none 12)
; (dummy-13 () none 13)
; (dummy-14 () none 14)
; (dummy-15 () none 15)
; (dummy-16 () none 16)
; (dummy-17 () none 17)
; (dummy-18 () none 18)
; (dummy-19 () none 19)
; )
; )
(deftype springbox (process-drawable)
((spring-height meters :offset-assert 176)
(smush float :offset-assert 180)
)
:method-count-assert 20
:size-assert #xb8
:heap-base #x50
:flag-assert #x14005000b8
;; inherited inspect of process-drawable
)
;; - Unknowns

View file

@ -680,5 +680,9 @@
[1, "(function symbol :behavior target)"]
],
"entity": [
[10, "(function process-drawable none)"]
],
"placeholder-do-not-add-below": []
}

View file

@ -418,7 +418,8 @@
"(method 8 process-tree)",
"(method 16 load-state)",
"(method 15 load-state)",
"build-continue-menu"
"build-continue-menu",
"entity-remap-names"
],
// If format is used with the wrong number of arguments,

View file

@ -427,6 +427,21 @@
// ["L276", "sparticle-launch-group", true],
],
"entity": [
["L483", "vector"],
["L482", "vector"],
["L480", "vector"],
["L479", "vector"],
["L478", "vector"],
["L477", "vector"],
["L476", "vector"],
["L475", "vector4w"],
["L474", "vector4w"],
["L473", "vector4w"],
["L472", "vector4w"],
["L471", "vector4w"]
],
// please do not add things after this entry! git is dumb.
"object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": []
}

View file

@ -1401,5 +1401,14 @@
[16, "event-message-block"]
],
"update-actor-vis-box": [
[16, "vector"]
],
"(method 14 level-group)":[
[16, "vector"],
[32, "vector"]
],
"placeholder-do-not-add-below!": []
}

View file

@ -2481,5 +2481,72 @@
[30, "t9", "(function int debug-menu-msg float float int)"]
],
"entity-remap-names": [
[33, "a1", "int"],
[39, "a2", "int"]
],
"process-status-bits": [
[[15, 59], "s3", "process-drawable"]
],
"(method 13 level-group)": [
[[56, 61], "a0", "entity-actor"]
],
"(method 24 entity)": [
[[39, 45], "a0", "entity-actor"]
],
"(method 23 level-group)": [
[53, "a0", "entity-actor"],
[57, "v1", "entity-actor"],
[[29, 31], "v0", "(inline-array vector)"]
],
"(method 24 level-group)": [
[51, "v1", "entity-actor"],
[[55, 57], "s1", "(inline-array vector)"]
],
"init-entity": [
[31, "t9", "(function process function process entity none)"]
],
"(method 19 bsp-header)": [
[[53, 63], "s2", "process"],
[74, "s2", "part-tracker"],
[[104, 122], "v1", "process-drawable"],
[[129, 148], "v1", "process-drawable"],
[[123, 127], "a0", "process-drawable"]
],
"(method 3 entity)": [
[7, "t9", "(function entity entity)"]
],
"(method 3 entity-actor)": [
[7, "t9", "(function entity-actor entity-actor)"]
],
"(method 14 level-group)": [
[[54, 164], "s1", "process-drawable"],
[[319, 342], "s0", "process-drawable"],
[368, "v1", "(pointer process-drawable)"],
[[384, 494], "s5", "process-drawable"]
],
"(method 22 level-group)": [
[[28, 30], "v0", "(inline-array vector)"]
],
"expand-vis-box-with-point": [
[10, "v0", "(inline-array vector)"]
],
"(method 28 entity-ambient)": [
[79, "v1", "int"]
],
"placeholder-do-not-add-below": []
}

View file

@ -3290,5 +3290,60 @@
"(anon-function 82 default-menu)": {
"vars":{"s4-0":["s4-0", "texture-id"]}
},
"process-status-bits": {
"vars":{"s3-0":["proc-draw", "process-drawable"]}
},
"(method 29 entity-actor)":{
"args":["obj", "mode", "expected-type"]
},
"(method 13 level-group)":{
"args":["obj", "mode", "expected-type"]
},
"(method 24 entity)": {
"args":["obj", "lev-group", "lev", "aid"],
"vars":{
"v1-4":"level-link",
"t0-5":"other-prev",
"t1-1":"other-front"
}
},
"update-actor-vis-box": {
"args":["proc", "min-pt", "max-pt"],
"vars":{"v1-4":"world-bounds-origin", "f0-0":"radius"}
},
"init-entity": {
"args":["proc", "ent"]
},
"(method 22 entity-actor)": {
"vars":{
"s5-0":"entity-type",
"v1-0":"info",
"s4-0":"entity-process"
}
},
"(method 18 bsp-header)": {
"vars":{
"a2-0":"existing-actor-count",
"s4-0":"birth-idx",
"a0-4":"idx-to-birth",
"v1-25":"actor-to-birth",
"a2-5":"existing-amb-count",
"s4-1":"amb-array",
"s3-0":"bsp-ambs",
"a0-10":"amb-to-birth",
"s4-2":"cams"
}
},
"aaaaaaaaaaaaaaaaaaaaaaa": {}
}

View file

@ -1192,23 +1192,36 @@ std::optional<std::vector<BitFieldConstantDef>> try_decompile_bitfield_from_int(
const TypeSpec& type,
const TypeSystem& ts,
u64 value,
bool require_success) {
bool require_success,
std::optional<int> offset) {
u64 touched_bits = 0;
std::vector<BitFieldConstantDef> result;
auto type_info = dynamic_cast<BitFieldType*>(ts.lookup_type(type));
assert(type_info);
int start_bit = 0;
if (offset) {
start_bit = *offset;
}
int end_bit = 64 + start_bit;
for (auto& field : type_info->fields()) {
if (field.offset() < start_bit || (field.offset() + field.size()) > end_bit) {
continue;
}
u64 bitfield_value;
bool is_signed = ts.tc(TypeSpec("int"), field.type()) && !ts.tc(TypeSpec("uint"), field.type());
if (is_signed) {
// signed
s64 signed_value = value;
bitfield_value = extract_bitfield<s64>(signed_value, field.offset(), field.size());
bitfield_value =
extract_bitfield<s64>(signed_value, field.offset() - start_bit, field.size());
} else {
// unsigned
bitfield_value = extract_bitfield<u64>(value, field.offset(), field.size());
bitfield_value = extract_bitfield<u64>(value, field.offset() - start_bit, field.size());
}
if (bitfield_value != 0) {
@ -1226,13 +1239,15 @@ std::optional<std::vector<BitFieldConstantDef>> try_decompile_bitfield_from_int(
if (nested_bitfield_type) {
BitFieldConstantDef::NestedField nested;
nested.field_type = field.type();
nested.fields = *try_decompile_bitfield_from_int(field.type(), ts, bitfield_value, true);
// never nested 128-bit bitfields
nested.fields =
*try_decompile_bitfield_from_int(field.type(), ts, bitfield_value, true, {});
def.nested_field = nested;
}
result.push_back(def);
}
for (int i = field.offset(); i < field.offset() + field.size(); i++) {
for (int i = field.offset() - start_bit; i < field.offset() + field.size() - start_bit; i++) {
touched_bits |= (u64(1) << i);
}
}
@ -1254,7 +1269,7 @@ std::optional<std::vector<BitFieldConstantDef>> try_decompile_bitfield_from_int(
std::vector<BitFieldConstantDef> decompile_bitfield_from_int(const TypeSpec& type,
const TypeSystem& ts,
u64 value) {
return *try_decompile_bitfield_from_int(type, ts, value, true);
return *try_decompile_bitfield_from_int(type, ts, value, true, {});
}
std::vector<std::string> decompile_bitfield_enum_from_int(const TypeSpec& type,

View file

@ -98,7 +98,8 @@ std::optional<std::vector<BitFieldConstantDef>> try_decompile_bitfield_from_int(
const TypeSpec& type,
const TypeSystem& ts,
u64 value,
bool require_success);
bool require_success,
std::optional<int> offset);
std::vector<std::string> decompile_bitfield_enum_from_int(const TypeSpec& type,
const TypeSystem& ts,

View file

@ -195,3 +195,5 @@
- Fixed a bug where casting a value to seconds, then setting a field of type seconds would incorrectly fail type-check
- Fixed a bug where nested rlet's didn't properly share register constraints, leading to inefficient register allocation, and some rare cases a regalloc constraint error
- Lambdas may now be used in static pairs.
- Dynamically constructed bitfields created with `(new 'static ...` may now set fields with `structure` type.
- Allocations on `'loading-level` are now permitted.

View file

@ -124,6 +124,10 @@ void DefaultMapping(MappingInfo& mapping) {
}
}
// r1/l1
MapButton(mapping, Button::L1, 0, GLFW_KEY_U);
MapButton(mapping, Button::R1, 0, GLFW_KEY_I);
// face buttons
MapButton(mapping, Button::Ecks, 0, GLFW_KEY_Z);
MapButton(mapping, Button::Square, 0, GLFW_KEY_X);

View file

@ -5,3 +5,7 @@
;; name in dgo: ambient
;; dgos: GAME, ENGINE
(defmethod birth-ambient! entity-ambient ((obj entity-ambient))
;; TODO stub
(none)
)

View file

@ -5,6 +5,32 @@
;; name in dgo: drawable
;; dgos: GAME, ENGINE
(defun real-main-draw-hook ()
(when *slow-frame-rate*
(dotimes (v1-2 #xc3500)
(nop!)
(nop!)
(nop!)
(nop!)
(nop!)
(nop!)
)
)
"Function to be executed to set up for engine dma"
;; lots more in this function.
(when *debug-segment*
(debug-draw-actors *level* *display-actor-marks*)
)
)
(defun main-draw-hook ()
"Nice."
(real-main-draw-hook)
(none)
)
(define *draw-hook* main-draw-hook)
(defun debug-init-buffer ((arg0 bucket-id) (arg1 gs-zbuf) (arg2 gs-test))
"Initialize a bucket for debug draw with the given zbuf and test settings"
(let* ((t0-0 (-> *display* frames (-> *display* on-screen) frame global-buf))

View file

@ -148,3 +148,20 @@
(-> arg0 frame-num)
)
(defenum entity-perm-status
:bitfield #t
:type uint16
(bit-0 0)
(bit-1 1)
(dead 2)
(bit-3 3)
(bit-4 4)
(user-set-from-cstage 5)
(complete 6)
(bit-7 7)
(real-complete 8)
(bit-9 9)
(bit-10 10)
)
(define-extern process-entity-status! (function process entity-perm-status symbol int))

View file

@ -9,21 +9,6 @@
(define *generate-actor-vis-start* #f)
(define *generate-actor-vis-output* #f)
(defenum entity-perm-status
:bitfield #t
:type uint16
(bit-0 0)
(bit-1 1)
(dead 2)
(bit-3 3)
(bit-4 4)
(user-set-from-cstage 5)
(complete 6)
(bit-7 7)
(real-complete 8)
(bit-9 9)
)
;; definition of type entity-perm
(deftype entity-perm (structure)
((user-object object 2 :offset-assert 0)
@ -67,7 +52,7 @@
:size-assert #x40
:flag-assert #xa00000040
(:methods
(dummy-9 () none 9)
(dummy-9 (_type_ vector) none 9)
)
)
@ -97,11 +82,11 @@
:size-assert #x34
:flag-assert #x1b00000034
(:methods
(dummy-22 () none 22)
(dummy-23 () none 23)
(dummy-24 () none 24)
(dummy-25 () none 25)
(dummy-26 () none 26)
(birth! (_type_) _type_ 22)
(kill! (_type_) _type_ 23)
(add-to-level! (_type_ level-group level actor-id) none 24)
(remove-from-level! (_type_ level-group) _type_ 25)
(get-level (_type_) level 26)
)
)
@ -132,7 +117,7 @@
)
(deftype entity-ambient-data-array (inline-array-class)
()
((data entity-ambient-data :inline :dynamic))
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
@ -146,7 +131,7 @@
:flag-assert #x1d00000034
(:methods
(dummy-27 () none 27)
(dummy-28 () none 28)
(birth-ambient! (_type_) none 28)
)
)
@ -155,6 +140,7 @@
(etype type :offset-assert 56)
(task uint8 :offset-assert 60)
(vis-id uint16 :offset-assert 62)
(vis-id-signed int16 :offset 62) ;; added
(quat quaternion :inline :offset-assert 64)
)
:method-count-assert 31
@ -163,8 +149,8 @@
(:methods
(next-actor (_type_) entity-actor 27)
(prev-actor (_type_) entity-actor 28)
(dummy-29 () none 29)
(dummy-30 () none 30)
(debug-print (_type_ symbol type) none 29)
(dummy-30 (_type_ entity-perm-status symbol) none 30)
)
)

File diff suppressed because it is too large Load diff

View file

@ -47,19 +47,19 @@
)
(deftype part-tracker (process)
((root basic :offset-assert 112)
(part basic :offset-assert 116)
(target uint64 :offset-assert 120)
(callback basic :offset-assert 128)
(linger-callback basic :offset-assert 132)
(duration uint64 :offset-assert 136)
(linger-duration uint64 :offset-assert 144)
(start-time uint64 :offset-assert 152)
(offset vector :inline :offset-assert 160)
(userdata uint64 :offset-assert 176)
(user-time uint64 2 :offset-assert 184)
(user-vector vector 2 :inline :offset-assert 208)
(user-handle uint32 2 :offset-assert 240)
((root trsqv :offset-assert 112)
(part sparticle-launch-control :offset-assert 116)
(target uint64 :offset-assert 120)
(callback basic :offset-assert 128)
(linger-callback basic :offset-assert 132)
(duration uint64 :offset-assert 136)
(linger-duration uint64 :offset-assert 144)
(start-time uint64 :offset-assert 152)
(offset vector :inline :offset-assert 160)
(userdata uint64 :offset-assert 176)
(user-time uint64 2 :offset-assert 184)
(user-vector vector 2 :inline :offset-assert 208)
(user-handle uint32 2 :offset-assert 240)
)
:heap-base #x90
:method-count-assert 14

View file

@ -973,6 +973,8 @@
;; main cheats
;; update-camera
;; draw hook
(*draw-hook*)
(add-ee-profile-frame 'draw :g #x80)
;; menu hook
(*menu-hook*)
(add-ee-profile-frame 'draw :g #x40)

View file

@ -61,7 +61,7 @@
(unk-data-4 float :offset-assert 160)
(unk-data-5 float :offset-assert 164)
(adgifs adgif-shader-array :offset-assert 168)
(unk-data-6 pointer :offset-assert 172)
(actor-birth-order (pointer uint32) :offset-assert 172)
(unk-data-7 pointer :offset-assert 176)
(unk-data-8 uint32 55 :offset-assert 180)
)
@ -70,7 +70,7 @@
:flag-assert #x1400000190
(:methods
(relocate (_type_ kheap (pointer uint8)) none :replace 7)
(dummy-18 (_type_) none 18)
(birth (_type_) none 18)
(dummy-19 (_type_) none 19)
)
)

View file

@ -141,8 +141,8 @@
)
)
;; add unk-data-6
(when (nonzero? (-> obj unk-data-6))
;; add actor-birth-order
(when (nonzero? (-> obj actor-birth-order))
(set! (-> mem-use length) (max 58 (-> mem-use length)))
(set! (-> mem-use data 57 name) "bsp-misc")
(+! (-> mem-use data 57 count) 1)

View file

@ -152,7 +152,7 @@
:flag-assert #x1d00000a30
(:methods
(deactivate (_type_) _type_ 9)
(dummy-10 (_type_ int) symbol 10)
(is-object-visible? (_type_ int) symbol 10)
(add-irq-to-tex-buckets! (_type_) none 11)
(unload! (_type_) _type_ 12)
(bsp-name (_type_) symbol 13)
@ -211,18 +211,18 @@
(level-get-with-status (_type_ symbol) level 10)
(level-get-for-use (_type_ symbol symbol) level 11)
(activate-levels! (_type_) int 12)
(dummy-13 () none 13)
(dummy-14 (_type_ object) none 14)
(dummy-15 () none 15)
(debug-print-entities (_type_ symbol type) none 13)
(debug-draw-actors (_type_ symbol) none 14)
(dummy-15 (_type_) object 15)
(dummy-16 (_type_) int 16)
(level-get-target-inside (_type_) level 17)
(alloc-levels! (_type_ symbol) int 18)
(load-commands-set! (_type_ pair) pair 19)
(art-group-get-by-name (_type_ string) art-group 20)
(load-command-get-index (_type_ symbol int) pair 21)
(dummy-22 () none 22)
(dummy-23 () none 23)
(dummy-24 () none 24)
(update-vis-volumes (_type_) none 22)
(update-vis-volumes-from-nav-mesh (_type_) none 23)
(print-volume-sizes (_type_) none 24)
(level-status (_type_ symbol) symbol 25)
(level-get-most-disposable (_type_) level 26)
)

View file

@ -722,7 +722,7 @@
(set! loading-level (-> obj heap))
(set! (-> *level* log-in-level-bsp) (-> obj bsp))
(set! (-> *level* loading-level) obj)
;; (dummy-18 (-> obj bsp)) TODO
(birth (-> obj bsp))
(set! (-> obj status) 'alive)
;; (dummy-15 *game-info*) TODO
;; (send-event *camera* 'level-activate (-> obj name))
@ -859,6 +859,9 @@
)
;; method 10 level
(defmethod is-object-visible? level ((obj level) (arg0 int))
;; hack! TODO
#t)
;; method 15 level
;; method 27 level

View file

@ -148,7 +148,7 @@
(node-count int32 :offset-assert 176)
(nodes uint32 :offset-assert 180)
(vertex-count int32 :offset-assert 184)
(vertex uint32 :offset-assert 188)
(vertex (inline-array vector) :offset-assert 188)
(poly-count int32 :offset-assert 192)
(poly uint32 :offset-assert 196)
(route uint32 :offset-assert 200)
@ -167,7 +167,7 @@
(dummy-16 () none 16)
(dummy-17 (_type_) none 17)
(dummy-18 () none 18)
(dummy-19 () none 19)
(compute-bounding-box (_type_ vector vector) none 19)
(dummy-20 () none 20)
(dummy-21 () none 21)
(dummy-22 () none 22)

View file

@ -11,6 +11,12 @@
(lg) ;; have the runtime load the game engine
(test-play) ;; start the game loop
(ml "goal_src/examples/debug-draw-example.gc") ;; build and load this file.
;; to get control of camera from keyboard
(kill-test-procs)
(launch-wasd-process)
;; you can turn on actor marks (full) or visibilty boxes in the debug menu.
|#
(defun hack-update-camera ((location vector) (inv-rot matrix))
@ -104,6 +110,94 @@
)
(define *wasd-camera-transform* (new 'global 'transform))
(defun wasd-camera-update ()
(let ((local-trans (new-stack-vector0))
(trans *wasd-camera-transform*)
(pad-idx 0))
;; circle/square move camera relative x (left and right)
(set! (-> local-trans x)
(cond
((logtest? (-> *cpad-list* cpads pad-idx button0-abs 0) (pad-buttons circle))
-80.0
)
((logtest? (-> *cpad-list* cpads pad-idx button0-abs 0) (pad-buttons square))
80.0
)
(else
0.0
)
)
)
;; no way to move camera relative y (up/down)
(set! (-> local-trans y) 0.0)
;; in and out movement
(set! (-> local-trans z)
(cond
((logtest? (-> *cpad-list* cpads pad-idx button0-abs 0) (pad-buttons down))
-800.0
)
((logtest? (-> *cpad-list* cpads pad-idx button0-abs 0) (pad-buttons up))
800.0
)
(else
0.0
)
)
)
(set! (-> local-trans w) 1.0)
;; rotate this into world frame
(let ((inv-cam-rot (new-stack-vector0))
(cam-rot-mat (new-stack-matrix0)))
;; unused.
(vector-negate! inv-cam-rot (-> trans rot))
;; convert rotation to rotation matrix.
(matrix-rotate-zyx! cam-rot-mat (-> trans rot))
;; and rotate the translation.
(vector-matrix*! local-trans local-trans cam-rot-mat)
)
;; and update the transform
(vector+! (-> trans trans) (-> trans trans) local-trans)
;; don't forget to fix w.
(set! (-> trans trans w) 1.0)
;; global translation
(if (logtest? (-> *cpad-list* cpads pad-idx button0-abs 0) (pad-buttons l1))
(set! (-> trans trans y) (+ 800.0 (-> trans trans y)))
)
(if (logtest? (-> *cpad-list* cpads pad-idx button0-abs 0) (pad-buttons r1))
(set! (-> trans trans y) (+ -800.0 (-> trans trans y)))
)
;; rotation (don't allow camera roll)
(if (logtest? (-> *cpad-list* cpads pad-idx button0-abs 0) (pad-buttons x))
(set! (-> trans rot x) (+ 54.13336 (-> trans rot x)))
)
(if (logtest? (-> *cpad-list* cpads pad-idx button0-abs 0) (pad-buttons triangle))
(set! (-> trans rot x) (+ -54.13336 (-> trans rot x)))
)
(if (logtest? (-> *cpad-list* cpads pad-idx button0-abs 0) (pad-buttons left))
(set! (-> trans rot y) (+ 546.13336 (-> trans rot y)))
)
(if (logtest? (-> *cpad-list* cpads pad-idx button0-abs 0) (pad-buttons right))
(set! (-> trans rot y) (+ -546.13336 (-> trans rot y)))
)
(set! (-> trans scale x) 1.)
(set! (-> trans scale y) 1.)
(set! (-> trans scale z) 1.)
(set! (-> trans scale w) 1.)
)
)
(defun launch-test-process ()
"Call this to launch a process that draws the debug demo"
(let ((proc (get-process *nk-dead-pool* process 1024)))
@ -122,6 +216,41 @@
)
(defun launch-wasd-process ()
"Launch a process to control the camera with keyboard.
Note that the test process above also controls the camera and should be killed first.
For example, after loading this file, do
(kill-test-procs)
(launch-wasd-process)"
(let ((proc (get-process *nk-dead-pool* process 1024)))
(activate proc *active-pool* 'test *kernel-dram-stack*)
(set! (-> *wasd-camera-transform* trans y) (meters 4.0))
(run-next-time-in-process proc (lambda ()
(let ((iter 0))
(while #t
(wasd-camera-update)
(let ((mat (new-stack-matrix0)))
(transform-matrix-calc! *wasd-camera-transform* mat)
(set! (-> mat data 3) 0.)
(set! (-> mat data 7) 0.)
(set! (-> mat data 11) 0.)
(set! (-> mat data 12) 0.)
(set! (-> mat data 13) 0.)
(set! (-> mat data 14) 0.)
(set! (-> mat data 15) 1.)
;;(matrix-transpose! mat mat)
(hack-update-camera (-> *wasd-camera-transform* trans) mat)
)
(suspend)
(+! iter 1)
)
)
)
)
proc)
)
;; This will spawn a process the first time this file is loaded
(define-perm *test-process* process (launch-test-process))

View file

@ -712,6 +712,11 @@
(dbg)
)
)
(defmacro mi ()
"Make ISO"
`(make-group "iso")
)
;;;;;;;;;;;;;;;;;;;
;; enum stuff
;;;;;;;;;;;;;;;;;;;

View file

@ -2336,8 +2336,8 @@
;; this is not yet defined.
(define-extern entity-deactivate-handler (function process object none))
(define entity-deactivate-handler (the (function process object none) nothing))
(define-extern entity-deactivate-handler (function process entity none))
(define entity-deactivate-handler (the (function process entity none) nothing))
(define-extern process-disconnect (function process int))

View file

@ -418,9 +418,21 @@ Val* Compiler::compile_bitfield_definition(const goos::Object& form,
form, "Field {} is a symbol, which cannot be constructed at compile time yet.",
field_name_def);
}
}
else {
} else if (m_ts.tc(TypeSpec("structure"), field_info.result_type)) {
if (allow_dynamic_construction) {
DynamicDef dyn;
dyn.definition = field_value;
dyn.field_offset = field_offset;
dyn.field_size = field_size;
dyn.field_name = field_name_def;
dyn.expected_type = coerce_to_reg_type(field_info.result_type);
dynamic_defs.push_back(dyn);
} else {
throw_compiler_error(
form, "Field {} is a structure, which cannot be constructed at compile time yet.",
field_name_def);
}
} else {
throw_compiler_error(form, "Bitfield field {} with type {} cannot be set statically.",
field_name_def, field_info.result_type.print());
}

View file

@ -1148,7 +1148,7 @@ Val* Compiler::compile_new(const goos::Object& form, const goos::Object& _rest,
rest = &pair_cdr(*rest);
if (allocation == "global" || allocation == "debug" || allocation == "process" ||
allocation == "process-level-heap") {
allocation == "process-level-heap" || allocation == "loading-level") {
// allocate on a named heap
return compile_heap_new(form, allocation, type, rest, env);
} else if (allocation == "static") {

View file

@ -75,7 +75,7 @@
:size-assert #x40
:flag-assert #xa00000040
(:methods
(dummy-9 () none 9)
(dummy-9 (_type_ vector) none 9)
)
)
@ -147,11 +147,11 @@
:size-assert #x34
:flag-assert #x1b00000034
(:methods
(dummy-22 () none 22)
(dummy-23 () none 23)
(dummy-24 () none 24)
(dummy-25 () none 25)
(dummy-26 () none 26)
(birth! (_type_) _type_ 22)
(kill! (_type_) _type_ 23)
(add-to-level! (_type_ level-group level actor-id) none 24)
(remove-from-level! (_type_ level-group) _type_ 25)
(get-level (_type_) level 26)
)
)
@ -203,7 +203,8 @@
;; definition of type entity-ambient-data-array
(deftype entity-ambient-data-array (inline-array-class)
()
((data entity-ambient-data :inline :dynamic :offset-assert 16)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
@ -214,7 +215,7 @@
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (-> obj _data))
(format #t "~Tdata[0] @ #x~X~%" (-> obj data))
obj
)
@ -229,17 +230,18 @@
:flag-assert #x1d00000034
(:methods
(dummy-27 () none 27)
(dummy-28 () none 28)
(birth-ambient! (_type_) none 28)
)
)
;; definition of type entity-actor
(deftype entity-actor (entity)
((nav-mesh nav-mesh :offset-assert 52)
(etype type :offset-assert 56)
(task uint8 :offset-assert 60)
(vis-id uint16 :offset-assert 62)
(quat quaternion :inline :offset-assert 64)
((nav-mesh nav-mesh :offset-assert 52)
(etype type :offset-assert 56)
(task uint8 :offset-assert 60)
(vis-id uint16 :offset-assert 62)
(vis-id-signed int16 :offset 62)
(quat quaternion :inline :offset-assert 64)
)
:method-count-assert 31
:size-assert #x50
@ -247,8 +249,8 @@
(:methods
(next-actor (_type_) entity-actor 27)
(prev-actor (_type_) entity-actor 28)
(dummy-29 () none 29)
(dummy-30 () none 30)
(debug-print (_type_ symbol type) none 29)
(dummy-30 (_type_ entity-perm-status symbol) none 30)
)
)

View file

@ -78,19 +78,19 @@
;; definition of type part-tracker
(deftype part-tracker (process)
((root basic :offset-assert 112)
(part basic :offset-assert 116)
(target uint64 :offset-assert 120)
(callback basic :offset-assert 128)
(linger-callback basic :offset-assert 132)
(duration uint64 :offset-assert 136)
(linger-duration uint64 :offset-assert 144)
(start-time uint64 :offset-assert 152)
(offset vector :inline :offset-assert 160)
(userdata uint64 :offset-assert 176)
(user-time uint64 2 :offset-assert 184)
(user-vector vector 2 :inline :offset-assert 208)
(user-handle uint32 2 :offset-assert 240)
((root trsqv :offset-assert 112)
(part sparticle-launch-control :offset-assert 116)
(target uint64 :offset-assert 120)
(callback basic :offset-assert 128)
(linger-callback basic :offset-assert 132)
(duration uint64 :offset-assert 136)
(linger-duration uint64 :offset-assert 144)
(start-time uint64 :offset-assert 152)
(offset vector :inline :offset-assert 160)
(userdata uint64 :offset-assert 176)
(user-time uint64 2 :offset-assert 184)
(user-vector vector 2 :inline :offset-assert 208)
(user-handle uint32 2 :offset-assert 240)
)
:heap-base #x90
:method-count-assert 14

View file

@ -53,7 +53,7 @@
(unk-data-4 float :offset-assert 160)
(unk-data-5 float :offset-assert 164)
(adgifs adgif-shader-array :offset-assert 168)
(unk-data-6 pointer :offset-assert 172)
(actor-birth-order (pointer uint32) :offset-assert 172)
(unk-data-7 pointer :offset-assert 176)
(unk-data-8 uint32 55 :offset-assert 180)
)
@ -62,7 +62,7 @@
:flag-assert #x1400000190
(:methods
(relocate (_type_ kheap (pointer uint8)) none :replace 7)
(dummy-18 (_type_) none 18)
(birth (_type_) none 18)
(dummy-19 (_type_) none 19)
)
)

View file

@ -113,7 +113,7 @@
)
)
)
(when (nonzero? (-> obj unk-data-6))
(when (nonzero? (-> obj actor-birth-order))
(set! (-> mem-use length) (max 58 (-> mem-use length)))
(set! (-> mem-use data 57 name) "bsp-misc")
(+! (-> mem-use data 57 count) 1)

View file

@ -186,7 +186,7 @@
:flag-assert #x1d00000a30
(:methods
(deactivate (_type_) _type_ 9)
(dummy-10 (_type_ int) symbol 10)
(is-object-visible? (_type_ int) symbol 10)
(add-irq-to-tex-buckets! (_type_) none 11)
(unload! (_type_) _type_ 12)
(bsp-name (_type_) symbol 13)
@ -294,18 +294,18 @@
(level-get-with-status (_type_ symbol) level 10)
(level-get-for-use (_type_ symbol symbol) level 11)
(activate-levels! (_type_) int 12)
(dummy-13 () none 13)
(dummy-14 (_type_ object) none 14)
(dummy-15 () none 15)
(debug-print-entities (_type_ symbol type) none 13)
(debug-draw-actors (_type_ symbol) none 14)
(dummy-15 (_type_) object 15)
(dummy-16 (_type_) int 16)
(level-get-target-inside (_type_) level 17)
(alloc-levels! (_type_ symbol) int 18)
(load-commands-set! (_type_ pair) pair 19)
(art-group-get-by-name (_type_ string) art-group 20)
(load-command-get-index (_type_ symbol int) pair 21)
(dummy-22 () none 22)
(dummy-23 () none 23)
(dummy-24 () none 24)
(update-vis-volumes (_type_) none 22)
(update-vis-volumes-from-nav-mesh (_type_) none 23)
(print-volume-sizes (_type_) none 24)
(level-status (_type_ symbol) symbol 25)
(level-get-most-disposable (_type_) level 26)
)

View file

@ -239,21 +239,21 @@
;; definition of type nav-mesh
(deftype nav-mesh (basic)
((user-list engine :offset-assert 4)
(poly-lookup-history uint8 2 :offset-assert 8)
(debug-time uint8 :offset-assert 10)
(static-sphere-count uint8 :offset-assert 11)
(static-sphere uint32 :offset-assert 12)
(bounds sphere :inline :offset-assert 16)
(origin vector :inline :offset-assert 32)
(cache nav-lookup-elem 4 :inline :offset-assert 48)
(node-count int32 :offset-assert 176)
(nodes uint32 :offset-assert 180)
(vertex-count int32 :offset-assert 184)
(vertex uint32 :offset-assert 188)
(poly-count int32 :offset-assert 192)
(poly uint32 :offset-assert 196)
(route uint32 :offset-assert 200)
((user-list engine :offset-assert 4)
(poly-lookup-history uint8 2 :offset-assert 8)
(debug-time uint8 :offset-assert 10)
(static-sphere-count uint8 :offset-assert 11)
(static-sphere uint32 :offset-assert 12)
(bounds sphere :inline :offset-assert 16)
(origin vector :inline :offset-assert 32)
(cache nav-lookup-elem 4 :inline :offset-assert 48)
(node-count int32 :offset-assert 176)
(nodes uint32 :offset-assert 180)
(vertex-count int32 :offset-assert 184)
(vertex (inline-array vector) :offset-assert 188)
(poly-count int32 :offset-assert 192)
(poly uint32 :offset-assert 196)
(route uint32 :offset-assert 200)
)
:method-count-assert 30
:size-assert #xcc
@ -269,7 +269,7 @@
(dummy-16 () none 16)
(dummy-17 (_type_) none 17)
(dummy-18 () none 18)
(dummy-19 () none 19)
(compute-bounding-box (_type_ vector vector) none 19)
(dummy-20 () none 20)
(dummy-21 () none 21)
(dummy-22 () none 22)

View file

@ -1652,10 +1652,10 @@
(the-as (function none :behavior process) nothing)
)
;; definition for symbol entity-deactivate-handler, type (function process object none)
;; definition for symbol entity-deactivate-handler, type (function process entity none)
(define
entity-deactivate-handler
(the-as (function process object none) nothing)
(the-as (function process entity none) nothing)
)
;; definition for method 10 of type process