[decompiler] Use meters, degrees, and seconds (#689)

* use meters degrees and seconds

* update changelog
This commit is contained in:
water111 2021-07-11 18:19:41 -04:00 committed by GitHub
parent d508c408cc
commit 0a9cc68a27
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
55 changed files with 939 additions and 742 deletions

View file

@ -1,8 +1,5 @@
#pragma once
#ifndef JAK_GOAL_CONSTANTS_H
#define JAK_GOAL_CONSTANTS_H
#include "common_types.h"
constexpr s32 BINTEGER_OFFSET = 0;
@ -36,4 +33,7 @@ constexpr u64 EE_MAIN_MEM_MAP = 0x2123000000; // intentionally > 32-bit to
// so this should be used only for debugging.
constexpr bool EE_MEM_LOW_MAP = false;
#endif // JAK_GOAL_CONSTANTS_H
constexpr double METER_LENGTH = 4096.0;
constexpr double DEGREES_PER_ROT = 65536.0;
constexpr double DEGREES_LENGTH = DEGREES_PER_ROT / 360.0;
constexpr u64 TICKS_PER_SECOND = 300.0;

View file

@ -965,6 +965,13 @@ void TypeSystem::add_builtin_types() {
add_builtin_value_type("uinteger", "uint64", 8);
add_builtin_value_type("uinteger", "uint128", 16, false, false, RegClass::INT_128);
// add special units types.
add_builtin_value_type("float", "meters", 4, false, false, RegClass::FLOAT)
->set_runtime_type("float");
add_builtin_value_type("float", "degrees", 4, false, false, RegClass::FLOAT)
->set_runtime_type("float");
add_builtin_value_type("uint64", "seconds", 8, false, false)->set_runtime_type("uint64");
auto int_type = add_builtin_value_type("integer", "int", 8, false, true);
int_type->disallow_in_runtime();
auto uint_type = add_builtin_value_type("uinteger", "uint", 8, false, false);
@ -1352,8 +1359,23 @@ bool TypeSystem::typecheck_and_throw(const TypeSpec& expected,
/*!
* Is actual of type expected? For base types.
*/
bool TypeSystem::typecheck_base_types(const std::string& expected,
bool TypeSystem::typecheck_base_types(const std::string& input_expected,
const std::string& actual) const {
std::string expected = input_expected;
// the unit types aren't picky.
if (expected == "meters") {
expected = "float";
}
if (expected == "seconds") {
expected = "uint";
}
if (expected == "degrees") {
expected = "float";
}
// just to make sure it exists.
lookup_type_allow_partial_def(expected);

View file

@ -557,7 +557,7 @@ TP_Type SimpleExpression::get_type_int2(const TypeState& input,
if (m_kind == Kind::ADD && tc(dts, TypeSpec("structure"), arg0_type) &&
arg1_type.is_integer_constant()) {
auto type_info = dts.ts.lookup_type(arg0_type.typespec());
if (type_info->get_size_in_memory() == arg1_type.get_integer_constant()) {
if ((u64)type_info->get_size_in_memory() == arg1_type.get_integer_constant()) {
return TP_Type::make_from_ts(arg0_type.typespec());
}
}

View file

@ -1274,6 +1274,7 @@ class ConstantFloatElement : public FormElement {
FormStack& stack,
std::vector<FormElement*>* result,
bool allow_side_effects) override;
float value() const { return m_value; }
private:
float m_value;
@ -1770,5 +1771,9 @@ GenericElement* alloc_generic_token_op(const std::string& name,
const std::vector<Form*>& args,
FormPool& pool);
Form* alloc_var_form(const RegisterAccess& var, FormPool& pool);
Form* try_cast_simplify(Form* in, const TypeSpec& new_type, FormPool& pool, const Env& env);
Form* try_cast_simplify(Form* in,
const TypeSpec& new_type,
FormPool& pool,
const Env& env,
bool tc_pass = false);
} // namespace decompiler

View file

@ -64,14 +64,59 @@ Form* strip_pcypld_64(Form* in) {
return in;
}
}
std::optional<float> get_goal_float_constant(Form* in) {
auto as_fc = in->try_as_element<ConstantFloatElement>();
if (as_fc) {
return as_fc->value();
}
return {};
}
} // namespace
Form* try_cast_simplify(Form* in, const TypeSpec& new_type, FormPool& pool, const Env& env) {
Form* try_cast_simplify(Form* in,
const TypeSpec& new_type,
FormPool& pool,
const Env& env,
bool tc_pass) {
auto in_as_cast = dynamic_cast<CastElement*>(in->try_as_single_element());
if (in_as_cast && in_as_cast->type() == new_type) {
return in; // no need to cast again, it already has it!
}
if (new_type == TypeSpec("meters")) {
auto fc = get_goal_float_constant(in);
if (fc) {
double div = (double)*fc / METER_LENGTH; // GOOS will use doubles here
if (div * METER_LENGTH == *fc) {
return pool.alloc_single_element_form<GenericElement>(
nullptr,
GenericOperator::make_function(
pool.alloc_single_element_form<ConstantTokenElement>(nullptr, "meters")),
pool.alloc_single_element_form<ConstantFloatElement>(nullptr, div));
} else {
lg::error("Floating point value {} could not be converted to meters.", *fc);
}
}
}
if (new_type == TypeSpec("degrees")) {
auto fc = get_goal_float_constant(in);
if (fc) {
double div = (double)*fc / DEGREES_LENGTH; // GOOS will use doubles here
if (div * DEGREES_LENGTH == *fc) {
return pool.alloc_single_element_form<GenericElement>(
nullptr,
GenericOperator::make_function(
pool.alloc_single_element_form<ConstantTokenElement>(nullptr, "degrees")),
pool.alloc_single_element_form<ConstantFloatElement>(nullptr, div));
} else {
lg::error("Floating point value {} could not be converted to degrees.", *fc);
}
}
}
auto type_info = env.dts->ts.lookup_type(new_type);
auto bitfield_info = dynamic_cast<BitFieldType*>(type_info);
if (bitfield_info) {
@ -91,7 +136,11 @@ Form* try_cast_simplify(Form* in, const TypeSpec& new_type, FormPool& pool, cons
}
}
return nullptr;
if (tc_pass) {
return in;
} else {
return nullptr;
}
}
bool Form::has_side_effects() {
@ -285,8 +334,12 @@ void pop_helper(const std::vector<RegisterAccess>& vars,
/*!
* This should be used to generate all casts.
*/
Form* cast_form(Form* in, const TypeSpec& new_type, FormPool& pool, const Env& env) {
auto result = try_cast_simplify(in, new_type, pool, env);
Form* cast_form(Form* in,
const TypeSpec& new_type,
FormPool& pool,
const Env& env,
bool tc_pass = false) {
auto result = try_cast_simplify(in, new_type, pool, env, tc_pass);
if (result) {
return result;
}
@ -340,15 +393,12 @@ std::vector<Form*> pop_to_forms(const std::vector<RegisterAccess>& vars,
return forms;
}
// TODO - if we start using child classes of float/int/uint for things like degrees/meters
// we may need to adjust these.
/*!
* type == float (exactly)?
*/
bool is_float_type(const Env& env, int my_idx, RegisterAccess var) {
auto type = env.get_types_before_op(my_idx).get(var.reg()).typespec();
return type == TypeSpec("float");
return env.dts->ts.tc(TypeSpec("float"), type);
}
/*!
@ -436,6 +486,10 @@ Form* make_cast_if_needed(Form* in,
if (in_type == out_type) {
return in;
}
if (out_type == TypeSpec("float") && env.dts->ts.tc(TypeSpec("float"), in_type)) {
return in;
}
return cast_form(in, out_type, pool, env);
}
@ -548,7 +602,8 @@ void SimpleExpressionElement::update_from_stack_fpr_to_gpr(const Env& env,
bool allow_side_effects) {
auto src = m_expr.get_arg(0);
auto src_type = env.get_types_before_op(m_my_idx).get(src.var().reg());
if (src_type.typespec() == TypeSpec("float") || src_type.typespec() == TypeSpec("int")) {
if (env.dts->ts.tc(TypeSpec("float"), src_type.typespec()) ||
src_type.typespec() == TypeSpec("int")) {
// set ourself to identity.
m_expr = src.as_expr();
// then go again.
@ -2229,8 +2284,9 @@ void FunctionCallElement::update_from_stack(const Env& env,
}
auto desired_arg_type = function_type.get_arg(arg_id);
if (!env.dts->ts.tc(desired_arg_type, actual_arg_type)) {
arg_forms.push_back(cast_form(val, desired_arg_type, pool, env));
if (env.dts->should_attempt_cast_simplify(desired_arg_type, actual_arg_type)) {
arg_forms.push_back(cast_form(val, desired_arg_type, pool, env,
env.dts->ts.tc(desired_arg_type, actual_arg_type)));
} else {
arg_forms.push_back(val);
}

View file

@ -2166,8 +2166,8 @@
)
(deftype trsqv (trsq)
((pause-adjust-distance float :offset 4) ;; todo meters
(nav-radius float :offset 8) ;; todo meters
((pause-adjust-distance meters :offset 4)
(nav-radius meters :offset 8)
(transv vector :inline :offset-assert 64)
(rotv vector :inline :offset-assert 80)
(scalev vector :inline :offset-assert 96)
@ -4779,7 +4779,7 @@
(bsp-mask uint64 :offset-assert 80)
(bsphere sphere :offset-assert 88)
(buzzer int32 :offset-assert 92)
(bottom-height float :offset-assert 96) ;; meters
(bottom-height meters :offset-assert 96)
(run-packages pair :offset-assert 100)
(prev-level basic :offset-assert 104)
(next-level basic :offset-assert 108)
@ -4830,7 +4830,7 @@
(ambient entity-ambient-data-array :offset-assert 288)
(closest-object float 9 :offset-assert 292)
(upload-size int32 9 :offset-assert 328)
(level-distance float :offset-assert 364) ; meters
(level-distance meters :offset-assert 364)
(inside-sphere? symbol :offset-assert 368)
(inside-boxes? symbol :offset-assert 372)
(display? symbol :offset-assert 376)
@ -4977,9 +4977,9 @@
)
(deftype math-camera (basic)
((d float :offset-assert 4) ;; meters
(f float :offset-assert 8) ;; meters
(fov float :offset-assert 12) ;; deg
((d meters :offset-assert 4)
(f meters :offset-assert 8)
(fov degrees :offset-assert 12)
(x-ratio float :offset-assert 16)
(y-ratio float :offset-assert 20)
(x-pix float :offset-assert 24)
@ -4991,8 +4991,8 @@
(y-clip-ratio-in float :offset-assert 48)
(y-clip-ratio-over float :offset-assert 52)
(cull-info cull-info :inline :offset-assert 56)
(fog-start float :offset-assert 120) ;; meters
(fog-end float :offset-assert 124) ;; meters
(fog-start meters :offset-assert 120)
(fog-end meters :offset-assert 124)
(fog-max float :offset-assert 128)
(fog-min float :offset-assert 132)
(reset int32 :offset-assert 136)
@ -7100,8 +7100,8 @@
(deftype mood-fog (structure)
((fog-color vector :inline :offset-assert 0)
(fog-dists vector :inline :offset-assert 16)
(fog-start float :offset 16) ;; meters
(fog-end float :offset 20) ;;meters
(fog-start meters :offset 16)
(fog-end meters :offset 20)
(fog-max float :offset 24)
(fog-min float :offset 28)
(erase-color vector :inline :offset-assert 32)
@ -7496,11 +7496,11 @@
(jgeo int32 :offset-assert 8)
(janim int32 :offset-assert 12)
(bounds vector :inline :offset-assert 16)
(radius float :offset 28) ;; meters
(radius meters :offset 28)
(mgeo uint16 4 :offset-assert 32)
(max-lod int32 :offset-assert 40)
(lod-dist float 4 :offset-assert 44)
(longest-edge float :offset-assert 60) ;; meters
(longest-edge meters :offset-assert 60)
(texture-level int8 :offset-assert 64)
(version int8 :offset-assert 65)
(shadow int8 :offset-assert 66)
@ -7515,7 +7515,7 @@
(declare-type merc-ctrl art-element)
(deftype lod-group (structure)
((geo merc-ctrl :offset-assert 0)
(dist float :offset-assert 4) ;; meters
(dist meters :offset-assert 4)
)
:pack-me
:method-count-assert 9
@ -7556,7 +7556,7 @@
(cur-lod int8 :offset-assert 62)
(desired-lod int8 :offset-assert 63)
(ripple ripple-control :offset-assert 64)
(longest-edge float :offset-assert 68) ;; meters
(longest-edge meters :offset-assert 68)
(longest-edge? uint32 :offset 68)
(light-index uint8 :offset-assert 72)
(dummy uint8 2 :offset-assert 73)
@ -7571,7 +7571,7 @@
(shadow-ctrl shadow-control :offset-assert 96)
(origin vector :inline :offset-assert 112)
(bounds vector :inline :offset-assert 128)
(radius float :offset 140) ;; meters
(radius meters :offset 140)
(color-mult rgbaf :inline :offset-assert 144)
(color-emissive rgbaf :inline :offset-assert 160)
(secondary-interp float :offset-assert 176)
@ -8942,10 +8942,10 @@
(rdists vector :inline :offset-assert 48)
(next uint32 4 :offset-assert 64)
(count uint16 4 :offset-assert 80)
(near-plane float :offset 32) ;; meters
(near-stiff float :offset 36) ;; meters
(mid-plane float :offset 40) ;; meters
(far-plane float :offset 44) ;; meters
(near-plane meters :offset 32)
(near-stiff meters :offset 36)
(mid-plane meters :offset 40)
(far-plane meters :offset 44)
(rlength-near float :offset 48)
(rlength-stiff float :offset 52)
(rlength-mid float :offset 56)
@ -9059,7 +9059,7 @@
(param float 2 :offset-assert 24)
(group-sub-index int16 :offset-assert 32)
(group-size int16 :offset-assert 34)
(dist float :offset-assert 36) ;; meters
(dist meters :offset-assert 36)
(eval-time uint32 :offset-assert 40)
(inspector-amount float :offset-assert 44)
)
@ -9385,12 +9385,12 @@
(deftype dynamics (basic)
((name basic :offset-assert 4)
(gravity-max float :offset-assert 8) ;; meters
(gravity-length float :offset-assert 12) ;; meters
(gravity-max meters :offset-assert 8)
(gravity-length meters :offset-assert 12)
(gravity vector :inline :offset-assert 16)
(gravity-normal vector :inline :offset-assert 32)
(walk-distance float :offset-assert 48) ;; meters
(run-distance float :offset-assert 52) ;; meters
(walk-distance meters :offset-assert 48)
(run-distance meters :offset-assert 52)
)
:method-count-assert 9
:size-assert #x38
@ -9570,17 +9570,17 @@
((eco-level-max float :offset-assert 4)
(eco-single-inc float :offset-assert 8)
(eco-full-inc float :offset-assert 12)
(eco-single-timeout uint64 :offset-assert 16) ; usec
(eco-full-timeout uint64 :offset-assert 24) ; usec
(dummy uint64 :offset-assert 32) ; usec
(eco-single-timeout seconds :offset-assert 16)
(eco-full-timeout seconds :offset-assert 24)
(dummy seconds :offset-assert 32)
(health-max-default float :offset-assert 40)
(health-single-inc float :offset-assert 44)
(eco-pill-max-default float :offset-assert 48)
(health-small-inc float :offset-assert 52)
(buzzer-max-default float :offset-assert 56)
(buzzer-single-inc float :offset-assert 60)
(suck-bounce-dist float :offset-assert 64) ; meters
(suck-suck-dist float :offset-assert 68) ; meters
(suck-bounce-dist meters :offset-assert 64)
(suck-suck-dist meters :offset-assert 68)
(default-pill-inc float :offset-assert 72)
)
:method-count-assert 9
@ -9611,7 +9611,7 @@
((eco-type int32 :offset-assert 40)
(eco-level float :offset-assert 44)
(eco-pickup-time uint64 :offset-assert 48)
(eco-timeout uint64 :offset-assert 56) ;; usec
(eco-timeout seconds :offset-assert 56)
(health float :offset-assert 64)
(health-max float :offset-assert 68)
(buzzer float :offset-assert 72)
@ -9636,12 +9636,12 @@
(deftype fact-info-enemy (fact-info)
((speed float :offset-assert 40)
(idle-distance float :offset-assert 44) ; meters
(notice-top float :offset-assert 48) ; meters
(notice-bottom float :offset-assert 52) ; meters
(cam-horz float :offset-assert 56) ; meters
(cam-vert float :offset-assert 60) ; meters
(cam-notice-dist float :offset-assert 64) ; meters
(idle-distance meters :offset-assert 44)
(notice-top meters :offset-assert 48)
(notice-bottom meters :offset-assert 52)
(cam-horz meters :offset-assert 56)
(cam-vert meters :offset-assert 60)
(cam-notice-dist meters :offset-assert 64)
)
:method-count-assert 12
:size-assert #x44
@ -9678,7 +9678,7 @@
(matrix matrix 2 :inline :offset-assert 32)
(transform transform 2 :inline :offset-assert 160)
(delta transformq :inline :offset-assert 256)
(last-speed float :offset-assert 304);; meters
(last-speed meters :offset-assert 304)
(align transformq :inline :offset 160)
)
:method-count-assert 14
@ -9801,13 +9801,13 @@
(invinc-time uint64 :offset-assert 56)
(mask uint32 :offset-assert 64)
(mode basic :offset-assert 68)
(shove-back float :offset-assert 72) ;; meters
(shove-up float :offset-assert 76) ;; meters
(speed float :offset-assert 80) ;; meters
(dist float :offset-assert 84) ;; meters
(shove-back meters :offset-assert 72)
(shove-up meters :offset-assert 76)
(speed meters :offset-assert 80)
(dist meters :offset-assert 84)
(control float :offset-assert 88)
(angle basic :offset-assert 92)
(rotate-to float :offset-assert 96) ;; deg
(rotate-to degrees :offset-assert 96)
(prev-state basic :offset-assert 100)
)
:method-count-assert 10
@ -9869,7 +9869,7 @@
(deftype part-spawner (process-drawable)
((mode uint32 :offset-assert 176)
(enable basic :offset-assert 180)
(radius float :offset-assert 184) ;; meters
(radius meters :offset-assert 184)
(world-sphere sphere :inline :offset-assert 192)
)
:heap-base #x60
@ -9958,8 +9958,8 @@
(deftype swingpole (process)
((root basic :offset-assert 112)
(dir vector :inline :offset-assert 128)
(range float :offset-assert 144) ;; meters
(edge-length float :offset-assert 148) ;; meters
(range meters :offset-assert 144)
(edge-length meters :offset-assert 148)
)
:heap-base #x30
:method-count-assert 14
@ -10251,7 +10251,7 @@
((initial-position vector :inline :offset-assert 0)
(initial-velocity vector :inline :offset-assert 16)
(time float :offset-assert 32)
(gravity float :offset-assert 36) ;; meters
(gravity meters :offset-assert 36)
)
:method-count-assert 16
:size-assert #x28
@ -10341,8 +10341,8 @@
(notice-time uint64 :offset-assert 112)
(flex-blend float :offset-assert 120)
(blend float :offset-assert 124)
(max-dist float :offset-assert 128) ;; meters
(ignore-angle float :offset-assert 132) ;; deg
(max-dist meters :offset-assert 128)
(ignore-angle degrees :offset-assert 132)
(up uint8 :offset-assert 136)
(nose uint8 :offset-assert 137)
(ear uint8 :offset-assert 138)
@ -10676,7 +10676,7 @@
(action uint32 :offset 40)
(offense int8 :offset 44)
(prim-type int8 :offset 45)
(radius float :offset 60) ;; meters
(radius meters :offset 60)
)
:method-count-assert 28
:size-assert #x48
@ -10871,7 +10871,7 @@
(ground-poly-normal vector :inline :offset-assert 368)
(ground-touch-point vector :inline :offset-assert 384)
(shadow-pos vector :inline :offset-assert 400)
(ground-impact-vel float :offset-assert 416) ;; meters
(ground-impact-vel meters :offset-assert 416)
(surface-angle float :offset-assert 420)
(poly-angle float :offset-assert 424)
(touch-angle float :offset-assert 428)
@ -13176,8 +13176,8 @@
(deftype sparticle-group-item (structure)
((launcher uint32 :offset-assert 0)
(fade-after float :offset-assert 4) ;; meters
(falloff-to float :offset-assert 8) ;; meters
(fade-after meters :offset-assert 4)
(falloff-to meters :offset-assert 8)
(flags uint16 :offset-assert 12)
(period uint16 :offset-assert 14)
(length uint16 :offset-assert 16)
@ -13397,12 +13397,12 @@
(joypad uint32 :offset-assert 8)
(min-detectable-velocity float :offset-assert 12)
(attack-timeout uint64 :offset-assert 16)
(default-string-max-y float :offset-assert 24) ; meters
(default-string-min-y float :offset-assert 28) ; meters
(default-string-max-z float :offset-assert 32) ; meters
(default-string-min-z float :offset-assert 36) ; meters
(default-string-push-z float :offset-assert 40) ; meters
(default-tilt-adjust float :offset-assert 44) ; deg
(default-string-max-y meters :offset-assert 24)
(default-string-min-y meters :offset-assert 28)
(default-string-max-z meters :offset-assert 32)
(default-string-min-z meters :offset-assert 36)
(default-string-push-z meters :offset-assert 40)
(default-tilt-adjust degrees :offset-assert 44)
)
:method-count-assert 9
:size-assert #x30
@ -14201,7 +14201,7 @@
(dest-pos vector :inline :offset-assert 32)
(current-poly nav-poly :offset-assert 48)
(next-poly nav-poly :offset-assert 52)
(len float :offset-assert 56) ;; meters
(len meters :offset-assert 56)
(last-edge int8 :offset-assert 60)
(terminated basic :offset-assert 64)
(reached-dest basic :offset-assert 68)
@ -14357,7 +14357,7 @@
(next-poly nav-poly :offset-assert 32)
(target-poly nav-poly :offset-assert 36)
(portal nav-route-portal 2 :offset-assert 40) ;; guess
(nearest-y-threshold float :offset-assert 48) ;; meters
(nearest-y-threshold meters :offset-assert 48)
(event-temp vector :inline :offset-assert 64)
(old-travel vector :inline :offset-assert 80)
(blocked-travel vector :inline :offset-assert 96)
@ -15098,7 +15098,7 @@
;; - Unknowns
(define-extern add-debug-vector (function symbol bucket-id vector vector float rgba symbol))
(define-extern add-debug-vector (function symbol bucket-id vector vector meters rgba symbol))
(define-extern *debug-lines* (inline-array debug-line))
(define-extern *debug-lines-trk* debug-tracking-thang)
(define-extern *debug-text-3ds* (inline-array debug-text-3d))
@ -17577,24 +17577,24 @@
(process process :offset-assert 8)
(joint-index int32 :offset-assert 12)
(top-y-offset float :offset-assert 16)
(ripple-size float :offset-assert 20) ; meters
(ripple-size meters :offset-assert 20)
(enter-water-time uint64 :offset-assert 24)
(wade-time uint64 :offset-assert 32)
(on-water-time uint64 :offset-assert 40)
(enter-swim-time uint64 :offset-assert 48)
(swim-time uint64 :offset-assert 56)
(base-height float :offset-assert 64) ; meters
(wade-height float :offset-assert 68) ; meters
(swim-height float :offset-assert 72) ; meters
(surface-height float :offset-assert 76) ; meters
(bottom-height float :offset-assert 80) ; meters
(height float :offset-assert 84) ; meters
(base-height meters :offset-assert 64)
(wade-height meters :offset-assert 68)
(swim-height meters :offset-assert 72)
(surface-height meters :offset-assert 76)
(bottom-height meters :offset-assert 80)
(height meters :offset-assert 84)
(height-offset float 4 :offset-assert 88)
(real-ocean-offset float :offset 88) ; meters
(ocean-offset float :offset 92) ; meters
(bob-offset float :offset 96) ; meters
(align-offset float :offset 100) ; meters
(swim-depth float :offset-assert 104) ; meters
(real-ocean-offset meters :offset 88)
(ocean-offset meters :offset 92)
(bob-offset meters :offset 96)
(align-offset meters :offset 100)
(swim-depth meters :offset-assert 104)
(bob smush-control :inline :offset-assert 112)
(volume uint64 :offset-assert 144) ;; handle?
(bottom vector 2 :inline :offset-assert 160)
@ -17605,7 +17605,7 @@
(drip-wetness float :offset-assert 260)
(drip-time uint64 :offset-assert 264)
(drip-speed float :offset-assert 272)
(drip-height float :offset-assert 276) ; meters
(drip-height meters :offset-assert 276)
(drip-mult float :offset-assert 280)
)
:method-count-assert 17
@ -17625,10 +17625,10 @@
)
(deftype water-vol (process-drawable)
((water-height float :offset-assert 176) ;; meters
(wade-height float :offset-assert 180) ;; meters
(swim-height float :offset-assert 184) ;; meters
(bottom-height float :offset-assert 188) ;; meters
((water-height meters :offset-assert 176)
(wade-height meters :offset-assert 180)
(swim-height meters :offset-assert 184)
(bottom-height meters :offset-assert 188)
(attack-event basic :offset-assert 192)
(target uint64 :offset-assert 200)
(flags uint32 :offset-assert 208)
@ -17729,9 +17729,9 @@
;; - Types
(deftype camera-master-bank (basic)
((onscreen-head-height float :offset-assert 4) ;; meters
(onscreen-foot-height float :offset-assert 8) ;; meters
(target-height float :offset-assert 12) ;; meters
((onscreen-head-height meters :offset-assert 4)
(onscreen-foot-height meters :offset-assert 8)
(target-height meters :offset-assert 12)
(up-move-to-pitch-ratio-in-air float :offset-assert 16)
(down-move-to-pitch-ratio-in-air float :offset-assert 20)
(up-move-to-pitch-on-ground float :offset-assert 24)
@ -17920,8 +17920,8 @@
;; - Types
(deftype cam-point-watch-bank (basic)
((speed float :offset-assert 4)
(rot-speed float :offset-assert 8) ;; deg
((speed float :offset-assert 4)
(rot-speed degrees :offset-assert 8)
)
:method-count-assert 9
:size-assert #xc
@ -17929,8 +17929,8 @@
)
(deftype cam-free-bank (basic)
((speed float :offset-assert 4)
(rot-speed float :offset-assert 8) ;; deg
((speed float :offset-assert 4)
(rot-speed degrees :offset-assert 8)
)
:method-count-assert 9
:size-assert #xc
@ -18769,8 +18769,8 @@
; (flop-radius meters :offset-assert 512)
; (flop0-offset vector :inline :offset-assert 528)
; (flop1-offset vector :inline :offset-assert 544)
; (stuck-time useconds :offset-assert 560)
; (stuck-timeout useconds :offset-assert 568)
; (stuck-time seconds :offset-assert 560)
; (stuck-timeout seconds :offset-assert 568)
; (stuck-distance meters :offset-assert 576)
; (tongue-pull-speed-min float :offset-assert 580)
; (tongue-pull-speed-max float :offset-assert 584)
@ -21945,33 +21945,33 @@
(die-anim int32 :offset-assert 40)
(neck-joint int32 :offset-assert 44)
(player-look-at-joint int32 :offset-assert 48)
(run-travel-speed float :offset-assert 52) ; meters
(run-rotate-speed float :offset-assert 56) ; deg
(run-acceleration float :offset-assert 60) ; meters
(run-turn-time uint64 :offset-assert 64) ; seconds
(walk-travel-speed float :offset-assert 72) ; meters
(walk-rotate-speed float :offset-assert 76) ; deg
(walk-acceleration float :offset-assert 80) ; meters
(walk-turn-time uint64 :offset-assert 88) ; seconds
(attack-shove-back float :offset-assert 96) ; meters
(attack-shove-up float :offset-assert 100) ; meters
(shadow-size float :offset-assert 104) ; meters
(notice-nav-radius float :offset-assert 108) ; meters
(nav-nearest-y-threshold float :offset-assert 112) ; meters
(notice-distance float :offset-assert 116) ; meters
(proximity-notice-distance float :offset-assert 120) ; meters
(stop-chase-distance float :offset-assert 124) ; meters
(frustration-distance float :offset-assert 128) ; meters
(run-travel-speed meters :offset-assert 52)
(run-rotate-speed degrees :offset-assert 56)
(run-acceleration meters :offset-assert 60)
(run-turn-time seconds :offset-assert 64)
(walk-travel-speed meters :offset-assert 72)
(walk-rotate-speed degrees :offset-assert 76)
(walk-acceleration meters :offset-assert 80)
(walk-turn-time seconds :offset-assert 88)
(attack-shove-back meters :offset-assert 96)
(attack-shove-up meters :offset-assert 100)
(shadow-size meters :offset-assert 104)
(notice-nav-radius meters :offset-assert 108)
(nav-nearest-y-threshold meters :offset-assert 112)
(notice-distance meters :offset-assert 116)
(proximity-notice-distance meters :offset-assert 120)
(stop-chase-distance meters :offset-assert 124)
(frustration-distance meters :offset-assert 128)
(frustration-time uint64 :offset-assert 136)
(die-anim-hold-frame float :offset-assert 144)
(jump-anim-start-frame float :offset-assert 148)
(jump-land-anim-end-frame float :offset-assert 152)
(jump-height-min float :offset-assert 156) ; meters
(jump-height-min meters :offset-assert 156)
(jump-height-factor float :offset-assert 160)
(jump-start-anim-speed float :offset-assert 164)
(shadow-max-y float :offset-assert 168) ; meters
(shadow-min-y float :offset-assert 172) ; meters
(shadow-locus-dist float :offset-assert 176) ; meters
(shadow-max-y meters :offset-assert 168)
(shadow-min-y meters :offset-assert 172)
(shadow-locus-dist meters :offset-assert 176)
(use-align basic :offset-assert 180)
(draw-shadow basic :offset-assert 184)
(move-to-ground basic :offset-assert 188)
@ -23956,15 +23956,15 @@
; (deftype pelican-bank (basic)
; ((circle-speed meters :offset-assert 4)
; (dive-time useconds :offset-assert 8)
; (to-nest0-time useconds :offset-assert 16)
; (to-nest1-time useconds :offset-assert 24)
; (land-time useconds :offset-assert 32)
; (from-nest-time useconds :offset-assert 40)
; (spit-time useconds :offset-assert 48)
; (pre-spit-wait-time useconds :offset-assert 56)
; (post-spit-wait-time useconds :offset-assert 64)
; (run-away-time useconds :offset-assert 72)
; (dive-time seconds :offset-assert 8)
; (to-nest0-time seconds :offset-assert 16)
; (to-nest1-time seconds :offset-assert 24)
; (land-time seconds :offset-assert 32)
; (from-nest-time seconds :offset-assert 40)
; (spit-time seconds :offset-assert 48)
; (pre-spit-wait-time seconds :offset-assert 56)
; (post-spit-wait-time seconds :offset-assert 64)
; (run-away-time seconds :offset-assert 72)
; )
; :method-count-assert 9
; :size-assert #x50
@ -30285,17 +30285,17 @@
; ((y-offset meters :offset-assert 176)
; (y-offset-grips meters :offset-assert 180)
; (height meters :offset-assert 184)
; (turn deg :offset-assert 188)
; (tilt deg :offset-assert 192)
; (target-turn deg :offset-assert 196)
; (target-tilt deg :offset-assert 200)
; (turn degrees :offset-assert 188)
; (tilt degrees :offset-assert 192)
; (target-turn degrees :offset-assert 196)
; (target-tilt degrees :offset-assert 200)
; (base vector :inline :offset-assert 208)
; (reflector-trans vector :inline :offset-assert 224)
; (next-reflector-trans vector :inline :offset-assert 240)
; (prev-reflector-trans vector :inline :offset-assert 256)
; (old-camera-matrix matrix :inline :offset-assert 272)
; (reflector uint32 :offset-assert 336)
; (gauge-rot deg :offset-assert 340)
; (gauge-rot degrees :offset-assert 340)
; (lock-time uint64 :offset-assert 344)
; (aligned? basic :offset-assert 352)
; (raised? basic :offset-assert 356)
@ -31121,9 +31121,9 @@
; (rot vector :inline :offset-assert 80)
; (rot-old vector :inline :offset-assert 96)
; (rotv vector :inline :offset-assert 112)
; (lean-rotx deg :offset-assert 128)
; (change-roty deg :offset-assert 132)
; (change-roty-old deg :offset-assert 136)
; (lean-rotx degrees :offset-assert 128)
; (change-roty degrees :offset-assert 132)
; (change-roty-old degrees :offset-assert 136)
; (quat vector :inline :offset-assert 144)
; (surface-y meters :offset-assert 160)
; (surface-vy meters :offset-assert 164)
@ -31140,7 +31140,7 @@
; (hill-value float :offset-assert 268)
; (hill-ground-value float :offset-assert 272)
; (hill-offset meters :offset-assert 276)
; (hill-rotx deg :offset-assert 280)
; (hill-rotx degrees :offset-assert 280)
; (hill-boost meters :offset-assert 284)
; (bob-timer float :offset-assert 288)
; (bob-meta-timer float :offset-assert 292)
@ -31150,19 +31150,19 @@
; (bob-period float :offset-assert 308)
; (bob-meta-time uint64 :offset-assert 312)
; (bob-hit-ground-time uint64 :offset-assert 320)
; (cur-rotx deg :offset-assert 328)
; (targ-rotx deg :offset-assert 332)
; (cur-rotx degrees :offset-assert 328)
; (targ-rotx degrees :offset-assert 332)
; (speed-rotx float :offset-assert 336)
; (mult-rotx deg :offset-assert 340)
; (mult-rotx degrees :offset-assert 340)
; (front-blade basic :offset-assert 344)
; (front-rot deg :offset-assert 348)
; (front-rotv deg :offset-assert 352)
; (front-rot degrees :offset-assert 348)
; (front-rotv degrees :offset-assert 352)
; (bottom-blade basic :offset-assert 356)
; (bottom-rot deg :offset-assert 360)
; (bottom-rot degrees :offset-assert 360)
; (front basic :offset-assert 364)
; (front-turn deg :offset-assert 368)
; (front-turn degrees :offset-assert 368)
; (tail basic :offset-assert 372)
; (tail-tilt deg :offset-assert 376)
; (tail-tilt degrees :offset-assert 376)
; (transv-max meters :offset-assert 380)
; (slide-down-time UNKNOWN 2 :offset-assert 384)
; (slide-enter-time uint64 :offset-assert 400)
@ -31207,7 +31207,7 @@
; )
; (deftype racer-bank (basic)
; ((slide-hold-time useconds :offset-assert 8)
; ((slide-hold-time seconds :offset-assert 8)
; (heat-max float :offset-assert 16)
; (hotcoals-heat-inc float :offset-assert 20)
; (lava-heat-inc float :offset-assert 24)
@ -31222,8 +31222,8 @@
; (boost-curve-max meters :offset-assert 60)
; (boost-level-max meters :offset-assert 64)
; (boost-level-inc meters :offset-assert 68)
; (boost-duration useconds :offset-assert 72)
; (default-front-blade deg :offset-assert 80)
; (boost-duration seconds :offset-assert 72)
; (default-front-blade degrees :offset-assert 80)
; (yellow-projectile-speed meters :offset-assert 84)
; )
; :method-count-assert 9
@ -31977,7 +31977,7 @@
; (push-velocity vector :inline :offset-assert 224)
; (home-base vector :inline :offset-assert 240)
; (dest-base vector :inline :offset-assert 256)
; (dest-rot deg :offset-assert 272)
; (dest-rot degrees :offset-assert 272)
; (enable-turn-around basic :offset-assert 276)
; (rotating basic :offset-assert 280)
; (in-pen basic :offset-assert 284)

View file

@ -434,4 +434,21 @@ TypeSpec DecompilerTypeSystem::lookup_symbol_type(const std::string& name) const
return kv->second;
}
}
bool DecompilerTypeSystem::should_attempt_cast_simplify(const TypeSpec& expected,
const TypeSpec& actual) const {
if (expected == TypeSpec("meters") && actual == TypeSpec("float")) {
return true;
}
if (expected == TypeSpec("seconds") && actual == TypeSpec("uint64")) {
return true;
}
if (expected == TypeSpec("degrees") && actual == TypeSpec("float")) {
return true;
}
return !ts.tc(expected, actual);
}
} // namespace decompiler

View file

@ -43,6 +43,7 @@ class DecompilerTypeSystem {
int get_format_arg_count(const std::string& str) const;
int get_format_arg_count(const TP_Type& type) const;
TypeSpec lookup_symbol_type(const std::string& name) const;
bool should_attempt_cast_simplify(const TypeSpec& expected, const TypeSpec& actual) const;
// todo - totally eliminate this.
struct {

View file

@ -857,11 +857,35 @@ goos::Object decompile_value(const TypeSpec& type,
} else {
return pretty_print::to_symbol(fmt::format("{}", value));
}
} else if (type == TypeSpec("seconds")) {
assert(bytes.size() == 8);
u64 value;
memcpy(&value, bytes.data(), 8);
// only rewrite if exact.
u64 seconds = value / TICKS_PER_SECOND;
if (seconds * TICKS_PER_SECOND == value) {
return pretty_print::to_symbol(fmt::format("(seconds {})", seconds));
}
return pretty_print::to_symbol(fmt::format("#x{:x}", value));
} else if (ts.tc(TypeSpec("uint64"), type)) {
assert(bytes.size() == 8);
u64 value;
memcpy(&value, bytes.data(), 8);
return pretty_print::to_symbol(fmt::format("#x{:x}", value));
} else if (type == TypeSpec("meters")) {
assert(bytes.size() == 4);
float value;
memcpy(&value, bytes.data(), 4);
double meters = (double)value / METER_LENGTH;
return pretty_print::build_list("meters", pretty_print::float_representation(meters));
} else if (type == TypeSpec("degrees")) {
assert(bytes.size() == 4);
float value;
memcpy(&value, bytes.data(), 4);
double degrees = (double)value / DEGREES_LENGTH;
return pretty_print::build_list("degrees", pretty_print::float_representation(degrees));
} else if (ts.tc(TypeSpec("float"), type)) {
assert(bytes.size() == 4);
float value;

View file

@ -177,4 +177,5 @@
- Lambdas and methods now support `:behavior` to specify the current process type.
- `defbehavior` has been added to define a global behavior.
- Auto-generated inspect methods of process now start by calling the parent type's inspect, like in GOAL.
- Fields with type `(inline-array thing)` can now be set in statics.
- Fields with type `(inline-array thing)` can now be set in statics.
- `meters`, `degrees`, and `seconds` types have been added.

View file

@ -7,15 +7,15 @@
(deftype align-control (basic)
((flags uint32 :offset-assert 4)
(process process-drawable :offset-assert 8)
(frame-group art-joint-anim :offset-assert 12)
(frame-num float :offset-assert 16)
(matrix matrix 2 :inline :offset-assert 32)
(transform transform 2 :inline :offset-assert 160)
(delta transformq :inline :offset-assert 256)
(last-speed float :offset-assert 304);; meters
(align transformq :inline :offset 160)
((flags uint32 :offset-assert 4)
(process process-drawable :offset-assert 8)
(frame-group art-joint-anim :offset-assert 12)
(frame-num float :offset-assert 16)
(matrix matrix 2 :inline :offset-assert 32)
(transform transform 2 :inline :offset-assert 160)
(delta transformq :inline :offset-assert 256)
(last-speed meters :offset-assert 304)
(align transformq :inline :offset 160)
)
:method-count-assert 14
:size-assert #x134

View file

@ -16,7 +16,7 @@
(param float 2 :offset-assert 24)
(group-sub-index int16 :offset-assert 32)
(group-size int16 :offset-assert 34)
(dist float :offset-assert 36) ;; meters
(dist meters :offset-assert 36)
(eval-time uint32 :offset-assert 40)
(inspector-amount float :offset-assert 44)
)

View file

@ -7,16 +7,16 @@
;; definition of type camera-bank
(deftype camera-bank (basic)
((collide-move-rad float :offset-assert 4)
(joypad uint32 :offset-assert 8)
(min-detectable-velocity float :offset-assert 12)
(attack-timeout uint64 :offset-assert 16)
(default-string-max-y float :offset-assert 24)
(default-string-min-y float :offset-assert 28)
(default-string-max-z float :offset-assert 32)
(default-string-min-z float :offset-assert 36)
(default-string-push-z float :offset-assert 40)
(default-tilt-adjust float :offset-assert 44)
((collide-move-rad float :offset-assert 4)
(joypad uint32 :offset-assert 8)
(min-detectable-velocity float :offset-assert 12)
(attack-timeout uint64 :offset-assert 16)
(default-string-max-y meters :offset-assert 24)
(default-string-min-y meters :offset-assert 28)
(default-string-max-z meters :offset-assert 32)
(default-string-min-z meters :offset-assert 36)
(default-string-push-z meters :offset-assert 40)
(default-tilt-adjust degrees :offset-assert 44)
)
:method-count-assert 9
:size-assert #x30
@ -29,12 +29,12 @@
:collide-move-rad 1638.4
:min-detectable-velocity 40.96
:attack-timeout #x4b
:default-string-max-y 12288.0
:default-string-min-y 4096.0
:default-string-max-z 51200.0
:default-string-min-z 20480.0
:default-string-push-z 40960.0
:default-tilt-adjust -1183.289
:default-string-max-y (meters 3.0)
:default-string-min-y (meters 1.0)
:default-string-max-z (meters 12.5)
:default-string-min-z (meters 5.0)
:default-string-push-z (meters 10.0)
:default-tilt-adjust (degrees -6.5000005)
)
)

View file

@ -47,54 +47,54 @@
)
(deftype math-camera (basic)
((d float :offset-assert 4) ;; meters, camera near plane
(f float :offset-assert 8) ;; meters, camera far plane
(fov float :offset-assert 12) ;; deg, field of view angle
(x-ratio float :offset-assert 16)
(y-ratio float :offset-assert 20)
(x-pix float :offset-assert 24)
(x-clip float :offset-assert 28)
(x-clip-ratio-in float :offset-assert 32)
(x-clip-ratio-over float :offset-assert 36)
(y-pix float :offset-assert 40)
(y-clip float :offset-assert 44)
(y-clip-ratio-in float :offset-assert 48)
(y-clip-ratio-over float :offset-assert 52)
(cull-info cull-info :inline :offset-assert 56)
(fog-start float :offset-assert 120) ;; meters
(fog-end float :offset-assert 124) ;; meters
(fog-max float :offset-assert 128)
(fog-min float :offset-assert 132)
(reset int32 :offset-assert 136)
(smooth-step float :offset-assert 140)
(smooth-t float :offset-assert 144)
(perspective matrix :inline :offset-assert 160)
(isometric matrix :inline :offset-assert 224)
(sprite-2d matrix :inline :offset-assert 288)
(sprite-2d-hvdf vector :inline :offset-assert 352)
(camera-rot matrix :inline :offset-assert 368)
(inv-camera-rot matrix :inline :offset-assert 432)
(inv-camera-rot-smooth matrix :inline :offset-assert 496)
(inv-camera-rot-smooth-from quaternion :inline :offset-assert 560)
(camera-temp matrix :inline :offset-assert 576)
(prev-camera-temp matrix :inline :offset-assert 640)
(hmge-scale vector :inline :offset-assert 704)
(inv-hmge-scale vector :inline :offset-assert 720)
(hvdf-off vector :inline :offset-assert 736)
(guard vector :inline :offset-assert 752)
(vis-gifs vis-gif-tag 4 :inline :offset-assert 768)
(vis-gifs-quads uint128 4 :offset 768)
(giftex vis-gif-tag :offset 768)
(gifgr vis-gif-tag :offset 784)
(giftex-trans vis-gif-tag :offset 800)
(gifgr-trans vis-gif-tag :offset 816)
(pfog0 float :offset-assert 832)
(pfog1 float :offset-assert 836)
(trans vector :inline :offset-assert 848)
(plane uint128 4 :offset-assert 864)
(guard-plane uint128 4 :offset-assert 928)
(shrub-mat matrix :inline :offset-assert 992)
(fov-correction-factor float :offset-assert 1056)
((d meters :offset-assert 4)
(f meters :offset-assert 8)
(fov degrees :offset-assert 12)
(x-ratio float :offset-assert 16)
(y-ratio float :offset-assert 20)
(x-pix float :offset-assert 24)
(x-clip float :offset-assert 28)
(x-clip-ratio-in float :offset-assert 32)
(x-clip-ratio-over float :offset-assert 36)
(y-pix float :offset-assert 40)
(y-clip float :offset-assert 44)
(y-clip-ratio-in float :offset-assert 48)
(y-clip-ratio-over float :offset-assert 52)
(cull-info cull-info :inline :offset-assert 56)
(fog-start meters :offset-assert 120)
(fog-end meters :offset-assert 124)
(fog-max float :offset-assert 128)
(fog-min float :offset-assert 132)
(reset int32 :offset-assert 136)
(smooth-step float :offset-assert 140)
(smooth-t float :offset-assert 144)
(perspective matrix :inline :offset-assert 160)
(isometric matrix :inline :offset-assert 224)
(sprite-2d matrix :inline :offset-assert 288)
(sprite-2d-hvdf vector :inline :offset-assert 352)
(camera-rot matrix :inline :offset-assert 368)
(inv-camera-rot matrix :inline :offset-assert 432)
(inv-camera-rot-smooth matrix :inline :offset-assert 496)
(inv-camera-rot-smooth-from quaternion :inline :offset-assert 560)
(camera-temp matrix :inline :offset-assert 576)
(prev-camera-temp matrix :inline :offset-assert 640)
(hmge-scale vector :inline :offset-assert 704)
(inv-hmge-scale vector :inline :offset-assert 720)
(hvdf-off vector :inline :offset-assert 736)
(guard vector :inline :offset-assert 752)
(vis-gifs vis-gif-tag 4 :inline :offset-assert 768)
(vis-gifs-quads uint128 4 :offset 768)
(giftex vis-gif-tag :offset 768)
(gifgr vis-gif-tag :offset 784)
(giftex-trans vis-gif-tag :offset 800)
(gifgr-trans vis-gif-tag :offset 816)
(pfog0 float :offset-assert 832)
(pfog1 float :offset-assert 836)
(trans vector :inline :offset-assert 848)
(plane uint128 4 :offset-assert 864)
(guard-plane uint128 4 :offset-assert 928)
(shrub-mat matrix :inline :offset-assert 992)
(fov-correction-factor float :offset-assert 1056)
)
(:methods
(new (symbol type) _type_ 0)

View file

@ -145,7 +145,7 @@
(offense int8 :offset 44)
(prim-type int8 :offset 45)
;; overlay of the local-sphere w
(radius float :offset 60) ;; meters
(radius meters :offset 60)
)
:method-count-assert 28
:size-assert #x48
@ -354,7 +354,7 @@
(ground-poly-normal vector :inline :offset-assert 368)
(ground-touch-point vector :inline :offset-assert 384)
(shadow-pos vector :inline :offset-assert 400)
(ground-impact-vel float :offset-assert 416) ;; meters
(ground-impact-vel meters :offset-assert 416)
(surface-angle float :offset-assert 420)
(poly-angle float :offset-assert 424)
(touch-angle float :offset-assert 428)

View file

@ -201,20 +201,20 @@
)
(deftype skeleton-group (basic)
((art-group-name basic :offset-assert 4)
(jgeo int32 :offset-assert 8)
(janim int32 :offset-assert 12)
(bounds vector :inline :offset-assert 16)
(radius float :offset 28)
(mgeo uint16 4 :offset-assert 32)
(max-lod int32 :offset-assert 40)
(lod-dist float 4 :offset-assert 44)
(longest-edge float :offset-assert 60)
(texture-level int8 :offset-assert 64)
(version int8 :offset-assert 65)
(shadow int8 :offset-assert 66)
(sort int8 :offset-assert 67)
(_pad uint8 4 :offset-assert 68)
((art-group-name basic :offset-assert 4)
(jgeo int32 :offset-assert 8)
(janim int32 :offset-assert 12)
(bounds vector :inline :offset-assert 16)
(radius meters :offset 28)
(mgeo uint16 4 :offset-assert 32)
(max-lod int32 :offset-assert 40)
(lod-dist float 4 :offset-assert 44)
(longest-edge meters :offset-assert 60)
(texture-level int8 :offset-assert 64)
(version int8 :offset-assert 65)
(shadow int8 :offset-assert 66)
(sort int8 :offset-assert 67)
(_pad uint8 4 :offset-assert 68)
)
:method-count-assert 9
:size-assert #x48
@ -223,8 +223,8 @@
(declare-type merc-ctrl basic)
(deftype lod-group (structure)
((geo merc-ctrl :offset-assert 0)
(dist float :offset-assert 4) ;; meters
((geo merc-ctrl :offset-assert 0)
(dist meters :offset-assert 4)
)
:pack-me
:method-count-assert 9
@ -265,7 +265,7 @@
(cur-lod int8 :offset-assert 62)
(desired-lod int8 :offset-assert 63)
(ripple ripple-control :offset-assert 64)
(longest-edge float :offset-assert 68) ;; meters
(longest-edge meters :offset-assert 68)
(longest-edge? uint32 :offset 68)
(light-index uint8 :offset-assert 72)
(dummy uint8 2 :offset-assert 73)
@ -280,7 +280,7 @@
(shadow-ctrl shadow-control :offset-assert 96)
(origin vector :inline :offset-assert 112)
(bounds vector :inline :offset-assert 128)
(radius float :offset 140) ;; meters
(radius meters :offset 140)
(color-mult rgbaf :inline :offset-assert 144)
(color-emissive rgbaf :inline :offset-assert 160)
(secondary-interp float :offset-assert 176)

View file

@ -1176,7 +1176,7 @@
)
)
(defun-debug add-debug-vector ((arg0 symbol) (arg1 bucket-id) (arg2 vector) (arg3 vector) (arg4 float) (arg5 rgba))
(defun-debug add-debug-vector ((arg0 symbol) (arg1 bucket-id) (arg2 vector) (arg3 vector) (arg4 meters) (arg5 rgba))
(if (not arg0)
(return #f)
)

View file

@ -9,21 +9,21 @@
;; All game code should reference *FACT-bank* to determine these parameters
(deftype fact-bank (basic)
((eco-level-max float :offset-assert 4)
(eco-single-inc float :offset-assert 8)
(eco-full-inc float :offset-assert 12)
(eco-single-timeout uint64 :offset-assert 16) ; usec
(eco-full-timeout uint64 :offset-assert 24) ; usec
(dummy uint64 :offset-assert 32) ; usec
(health-max-default float :offset-assert 40)
(health-single-inc float :offset-assert 44)
(eco-pill-max-default float :offset-assert 48)
(health-small-inc float :offset-assert 52)
(buzzer-max-default float :offset-assert 56)
(buzzer-single-inc float :offset-assert 60)
(suck-bounce-dist float :offset-assert 64) ; meters
(suck-suck-dist float :offset-assert 68) ; meters
(default-pill-inc float :offset-assert 72)
((eco-level-max float :offset-assert 4)
(eco-single-inc float :offset-assert 8)
(eco-full-inc float :offset-assert 12)
(eco-single-timeout seconds :offset-assert 16)
(eco-full-timeout seconds :offset-assert 24)
(dummy seconds :offset-assert 32)
(health-max-default float :offset-assert 40)
(health-single-inc float :offset-assert 44)
(eco-pill-max-default float :offset-assert 48)
(health-small-inc float :offset-assert 52)
(buzzer-max-default float :offset-assert 56)
(buzzer-single-inc float :offset-assert 60)
(suck-bounce-dist meters :offset-assert 64)
(suck-suck-dist meters :offset-assert 68)
(default-pill-inc float :offset-assert 72)
)
:method-count-assert 9
:size-assert #x4c
@ -101,23 +101,23 @@
)
(deftype fact-info-target (fact-info)
((eco-type int32 :offset-assert 40)
(eco-level float :offset-assert 44)
(eco-pickup-time uint64 :offset-assert 48)
(eco-timeout uint64 :offset-assert 56) ;; usec
(health float :offset-assert 64)
(health-max float :offset-assert 68)
(buzzer float :offset-assert 72)
(buzzer-max float :offset-assert 76)
(eco-pill float :offset-assert 80)
(eco-pill-max float :offset-assert 84)
(health-pickup-time uint64 :offset-assert 88)
(eco-source uint64 :offset-assert 96)
(eco-source-time uint64 :offset-assert 104)
(money-pickup-time uint64 :offset-assert 112)
(buzzer-pickup-time uint64 :offset-assert 120)
(fuel-cell-pickup-time uint64 :offset-assert 128)
(eco-pill-pickup-time uint64 :offset-assert 136)
((eco-type int32 :offset-assert 40)
(eco-level float :offset-assert 44)
(eco-pickup-time uint64 :offset-assert 48)
(eco-timeout seconds :offset-assert 56)
(health float :offset-assert 64)
(health-max float :offset-assert 68)
(buzzer float :offset-assert 72)
(buzzer-max float :offset-assert 76)
(eco-pill float :offset-assert 80)
(eco-pill-max float :offset-assert 84)
(health-pickup-time uint64 :offset-assert 88)
(eco-source uint64 :offset-assert 96)
(eco-source-time uint64 :offset-assert 104)
(money-pickup-time uint64 :offset-assert 112)
(buzzer-pickup-time uint64 :offset-assert 120)
(fuel-cell-pickup-time uint64 :offset-assert 128)
(eco-pill-pickup-time uint64 :offset-assert 136)
)
:method-count-assert 12
:size-assert #x90
@ -128,13 +128,13 @@
)
(deftype fact-info-enemy (fact-info)
((speed float :offset-assert 40)
(idle-distance float :offset-assert 44) ; meters
(notice-top float :offset-assert 48) ; meters
(notice-bottom float :offset-assert 52) ; meters
(cam-horz float :offset-assert 56) ; meters
(cam-vert float :offset-assert 60) ; meters
(cam-notice-dist float :offset-assert 64) ; meters
((speed float :offset-assert 40)
(idle-distance meters :offset-assert 44)
(notice-top meters :offset-assert 48)
(notice-bottom meters :offset-assert 52)
(cam-horz meters :offset-assert 56)
(cam-vert meters :offset-assert 60)
(cam-notice-dist meters :offset-assert 64)
)
:method-count-assert 12
:size-assert #x44

View file

@ -96,21 +96,21 @@
)
(deftype attack-info (structure)
((trans vector :inline :offset-assert 0)
(vector vector :inline :offset-assert 16)
(intersection vector :inline :offset-assert 32)
(attacker uint64 :offset-assert 48) ;; handle
(invinc-time uint64 :offset-assert 56)
(mask uint32 :offset-assert 64)
(mode basic :offset-assert 68)
(shove-back float :offset-assert 72) ;; meters
(shove-up float :offset-assert 76) ;; meters
(speed float :offset-assert 80) ;; meters
(dist float :offset-assert 84) ;; meters
(control float :offset-assert 88)
(angle basic :offset-assert 92)
(rotate-to float :offset-assert 96) ;; deg
(prev-state basic :offset-assert 100)
((trans vector :inline :offset-assert 0)
(vector vector :inline :offset-assert 16)
(intersection vector :inline :offset-assert 32)
(attacker uint64 :offset-assert 48) ;; handle
(invinc-time uint64 :offset-assert 56)
(mask uint32 :offset-assert 64)
(mode basic :offset-assert 68)
(shove-back meters :offset-assert 72)
(shove-up meters :offset-assert 76)
(speed meters :offset-assert 80)
(dist meters :offset-assert 84)
(control float :offset-assert 88)
(angle basic :offset-assert 92)
(rotate-to degrees :offset-assert 96)
(prev-state basic :offset-assert 100)
)
:method-count-assert 10
:size-assert #x68

View file

@ -33,7 +33,7 @@
(deftype part-spawner (process-drawable)
((mode uint32 :offset-assert 176)
(enable basic :offset-assert 180)
(radius float :offset-assert 184) ;; meters
(radius meters :offset-assert 184)
(world-sphere sphere :inline :offset-assert 192)
)
:heap-base #x60
@ -122,8 +122,8 @@
(deftype swingpole (process)
((root basic :offset-assert 112)
(dir vector :inline :offset-assert 128)
(range float :offset-assert 144) ;; meters
(edge-length float :offset-assert 148) ;; meters
(range meters :offset-assert 144)
(edge-length meters :offset-assert 148)
)
:heap-base #x30
:method-count-assert 14

View file

@ -6,13 +6,13 @@
;; dgos: GAME, ENGINE
(deftype mood-fog (structure)
((fog-color vector :inline :offset-assert 0)
(fog-dists vector :inline :offset-assert 16)
(fog-start float :offset 16) ;; meters
(fog-end float :offset 20) ;;meters
(fog-max float :offset 24)
(fog-min float :offset 28)
(erase-color vector :inline :offset-assert 32)
((fog-color vector :inline :offset-assert 0)
(fog-dists vector :inline :offset-assert 16)
(fog-start meters :offset 16)
(fog-end meters :offset 20)
(fog-max float :offset 24)
(fog-min float :offset 28)
(erase-color vector :inline :offset-assert 32)
)
:method-count-assert 9
:size-assert #x30

View file

@ -6,25 +6,25 @@
;; dgos: GAME, ENGINE
(deftype prototype-bucket (basic)
((name basic :offset-assert 4)
(flags uint32 :offset-assert 8)
(in-level uint16 :offset-assert 12)
(utextures uint16 :offset-assert 14)
(geometry drawable 4 :offset-assert 16)
(dists vector :inline :offset-assert 32)
(rdists vector :inline :offset-assert 48)
(next uint32 4 :offset-assert 64)
(count uint16 4 :offset-assert 80)
(near-plane float :offset 32)
(near-stiff float :offset 36)
(mid-plane float :offset 40)
(far-plane float :offset 44)
(rlength-near float :offset 48)
(rlength-stiff float :offset 52)
(rlength-mid float :offset 56)
(stiffness float :offset 60)
(next-clear uint128 :offset 64)
(count-clear uint64 :offset 80)
((name basic :offset-assert 4)
(flags uint32 :offset-assert 8)
(in-level uint16 :offset-assert 12)
(utextures uint16 :offset-assert 14)
(geometry drawable 4 :offset-assert 16)
(dists vector :inline :offset-assert 32)
(rdists vector :inline :offset-assert 48)
(next uint32 4 :offset-assert 64)
(count uint16 4 :offset-assert 80)
(near-plane meters :offset 32)
(near-stiff meters :offset 36)
(mid-plane meters :offset 40)
(far-plane meters :offset 44)
(rlength-near float :offset 48)
(rlength-stiff float :offset 52)
(rlength-mid float :offset 56)
(stiffness float :offset 60)
(next-clear uint128 :offset 64)
(count-clear uint64 :offset 80)
)
:method-count-assert 9
:size-assert #x58

View file

@ -7,40 +7,40 @@
;; definition of type water-control
(deftype water-control (basic)
((flags uint32 :offset-assert 4)
(process process :offset-assert 8)
(joint-index int32 :offset-assert 12)
(top-y-offset float :offset-assert 16)
(ripple-size float :offset-assert 20) ; meters
(enter-water-time uint64 :offset-assert 24)
(wade-time uint64 :offset-assert 32)
(on-water-time uint64 :offset-assert 40)
(enter-swim-time uint64 :offset-assert 48)
(swim-time uint64 :offset-assert 56)
(base-height float :offset-assert 64) ; meters
(wade-height float :offset-assert 68) ; meters
(swim-height float :offset-assert 72) ; meters
(surface-height float :offset-assert 76) ; meters
(bottom-height float :offset-assert 80) ; meters
(height float :offset-assert 84) ; meters
(height-offset float 4 :offset-assert 88)
(real-ocean-offset float :offset 88) ; meters
(ocean-offset float :offset 92) ; meters
(bob-offset float :offset 96) ; meters
(align-offset float :offset 100) ; meters
(swim-depth float :offset-assert 104) ; meters
(bob smush-control :inline :offset-assert 112)
(volume uint64 :offset-assert 144) ;; handle?
(bottom vector 2 :inline :offset-assert 160)
(top vector 2 :inline :offset-assert 192)
(enter-water-pos vector :inline :offset-assert 224)
(drip-old-pos vector :inline :offset-assert 240)
(drip-joint-index int32 :offset-assert 256)
(drip-wetness float :offset-assert 260)
(drip-time uint64 :offset-assert 264)
(drip-speed float :offset-assert 272)
(drip-height float :offset-assert 276) ; meters
(drip-mult float :offset-assert 280)
((flags uint32 :offset-assert 4)
(process process :offset-assert 8)
(joint-index int32 :offset-assert 12)
(top-y-offset float :offset-assert 16)
(ripple-size meters :offset-assert 20)
(enter-water-time uint64 :offset-assert 24)
(wade-time uint64 :offset-assert 32)
(on-water-time uint64 :offset-assert 40)
(enter-swim-time uint64 :offset-assert 48)
(swim-time uint64 :offset-assert 56)
(base-height meters :offset-assert 64)
(wade-height meters :offset-assert 68)
(swim-height meters :offset-assert 72)
(surface-height meters :offset-assert 76)
(bottom-height meters :offset-assert 80)
(height meters :offset-assert 84)
(height-offset float 4 :offset-assert 88)
(real-ocean-offset meters :offset 88)
(ocean-offset meters :offset 92)
(bob-offset meters :offset 96)
(align-offset meters :offset 100)
(swim-depth meters :offset-assert 104)
(bob smush-control :inline :offset-assert 112)
(volume uint64 :offset-assert 144)
(bottom vector 2 :inline :offset-assert 160)
(top vector 2 :inline :offset-assert 192)
(enter-water-pos vector :inline :offset-assert 224)
(drip-old-pos vector :inline :offset-assert 240)
(drip-joint-index int32 :offset-assert 256)
(drip-wetness float :offset-assert 260)
(drip-time uint64 :offset-assert 264)
(drip-speed float :offset-assert 272)
(drip-height meters :offset-assert 276)
(drip-mult float :offset-assert 280)
)
:method-count-assert 17
:size-assert #x11c
@ -86,10 +86,10 @@
)
(deftype water-vol (process-drawable)
((water-height float :offset-assert 176)
(wade-height float :offset-assert 180)
(swim-height float :offset-assert 184)
(bottom-height float :offset-assert 188)
((water-height meters :offset-assert 176)
(wade-height meters :offset-assert 180)
(swim-height meters :offset-assert 184)
(bottom-height meters :offset-assert 188)
(attack-event basic :offset-assert 192)
(target uint64 :offset-assert 200)
(flags uint32 :offset-assert 208)

View file

@ -65,7 +65,7 @@
(bsp-mask uint64 :offset-assert 80) ;; ??
(bsphere sphere :offset-assert 88) ;; boundings sphere of level?
(buzzer int32 :offset-assert 92) ;; which task is the scout fly?
(bottom-height float :offset-assert 96) ;; meters
(bottom-height meters :offset-assert 96)
(run-packages pair :offset-assert 100) ;; possibly unused?
(prev-level basic :offset-assert 104)
(next-level basic :offset-assert 108)
@ -118,7 +118,7 @@
(ambient entity-ambient-data-array :offset-assert 288)
(closest-object float 9 :offset-assert 292)
(upload-size int32 9 :offset-assert 328)
(level-distance float :offset-assert 364) ; meters
(level-distance meters :offset-assert 364)
(inside-sphere? symbol :offset-assert 368)
(inside-boxes? symbol :offset-assert 372)
(display? symbol :offset-assert 376)

View file

@ -107,7 +107,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x -5079040.0 :z 4055040.0 :w 1024000.0)
:buzzer 95
:bottom-height -466944.0
:bottom-height (meters -114.0)
:run-packages '("common" "villagep")
:wait-for-load #f
)
@ -228,7 +228,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x -444416.0 :y 133120.0 :z 360448.0 :w 843776.0)
:buzzer 75
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -273,7 +273,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x -819200.0 :z -1556480.0 :w 1474560.0)
:buzzer 20
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -318,7 +318,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 1474560.0 :y 2519040.0 :z -983040.0 :w 2457600.0)
:buzzer 7
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -361,7 +361,7 @@
:alt-load-commands '()
:bsphere (new 'static 'sphere :x 1486848.0 :y -1269760.0 :z -1064960.0 :w 1228800.0)
:buzzer 7
:bottom-height -327680.0
:bottom-height (meters -80.0)
:run-packages '("common" "jungle")
:wait-for-load #f
)
@ -527,7 +527,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :z 4096000.0 :w 1269760.0)
:buzzer 28
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #f
)
@ -585,7 +585,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 419840.0 :y 151552.0 :z -3006464.0 :w 2048000.0)
:buzzer 68
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -658,7 +658,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 1392640.0 :y 81920.0 :z -6770688.0 :w 696320.0)
:buzzer 76
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -744,7 +744,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 2867200.0 :y -2048000.0 :z -6553600.0 :w 2048000.0)
:buzzer 49
:bottom-height -2048000.0
:bottom-height (meters -500.0)
:run-packages '("common")
:wait-for-load #f
)
@ -802,7 +802,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 2867200.0 :y -2048000.0 :z -6553600.0 :w 2048000.0)
:buzzer 49
:bottom-height -2048000.0
:bottom-height (meters -500.0)
:run-packages '("common" "sunken")
:wait-for-load #f
)
@ -979,7 +979,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 1986560.0 :z -8417280.0 :w 1003520.0)
:buzzer 43
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -1024,7 +1024,7 @@
:bsphere
(new 'static 'sphere :x -753664.0 :y 131072.0 :z -6569984.0 :w 974848.0)
:buzzer 57
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -1096,7 +1096,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 2334720.0 :y 180224.0 :z -10653696.0 :w 3653632.0)
:buzzer 88
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -1170,7 +1170,7 @@
:bsphere
(new 'static 'sphere :x 4571136.0 :y 389120.0 :z -14323712.0 :w 409600.0)
:buzzer 77
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #f
)
@ -1327,7 +1327,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 3072000.0 :y 1142784.0 :z -14028800.0 :w 1290240.0)
:buzzer 65
:bottom-height 524288.0
:bottom-height (meters 128.0)
:run-packages '("common")
:wait-for-load #f
)
@ -1399,7 +1399,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 4517888.0 :y 114688.0 :z -12484608.0 :w 655360.0)
:buzzer 85
:bottom-height -245760.0
:bottom-height (meters -60.0)
:run-packages '("common")
:wait-for-load #f
)
@ -1443,7 +1443,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 3620864.0 :y 266240.0 :z -11935744.0 :w 368640.0)
:buzzer 85
:bottom-height -245760.0
:bottom-height (meters -60.0)
:run-packages '("common" "maincave")
:wait-for-load #t
)
@ -1502,7 +1502,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 5529600.0 :y 81920.0 :z -11468800.0 :w 512000.0)
:buzzer 85
:bottom-height -245760.0
:bottom-height (meters -60.0)
:run-packages '("common" "maincave")
:wait-for-load #t
)
@ -1592,7 +1592,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 8806400.0 :y 131072.0 :z -15564800.0 :w 3174400.0)
:buzzer 90
:bottom-height -286720.0
:bottom-height (meters -70.0)
:run-packages '("common")
:wait-for-load #t
)
@ -1773,7 +1773,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 11436032.0 :y -462848.0 :z -19750912.0 :w 1228800.0)
:buzzer 91
:bottom-height -466944.0
:bottom-height (meters -114.0)
:run-packages '("common")
:wait-for-load #t
)
@ -1837,7 +1837,7 @@
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x 11837440.0 :y 2129920.0 :z -19578880.0 :w 778240.0)
:buzzer 91
:bottom-height -466944.0
:bottom-height (meters -114.0)
:run-packages '("common")
:wait-for-load #f
)
@ -1865,7 +1865,7 @@
:alt-load-commands '()
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere)
:bottom-height -40960000000.0
:bottom-height (meters -10000000.0)
:run-packages '("common")
:wait-for-load #f
)
@ -1909,7 +1909,7 @@
:alt-load-commands '()
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere)
:bottom-height -40960000000.0
:bottom-height (meters -10000000.0)
:run-packages '("common")
:wait-for-load #f
)
@ -1953,7 +1953,7 @@
:alt-load-commands '()
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :x -40960.0 :z 40960.0 :w 1126400.0)
:bottom-height -40960000000.0
:bottom-height (meters -10000000.0)
:run-packages '("common")
:wait-for-load #f
)
@ -1996,7 +1996,7 @@
:alt-load-commands '()
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :w 167772160000.0)
:bottom-height -40960000000.0
:bottom-height (meters -10000000.0)
:run-packages '()
:wait-for-load #t
)
@ -2024,7 +2024,7 @@
:alt-load-commands '()
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :w 167772160000.0)
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '()
:wait-for-load #t
)

View file

@ -28,14 +28,14 @@
;; Representing a translate/rotate/scale with a quaternion and a velocity.
;; definition of type trsqv
(deftype trsqv (trsq)
((pause-adjust-distance float :offset 4)
(nav-radius float :offset 8)
(transv vector :inline :offset-assert 64)
(rotv vector :inline :offset-assert 80)
(scalev vector :inline :offset-assert 96)
(dir-targ quaternion :inline :offset-assert 112)
(angle-change-time uint64 :offset-assert 128)
(old-y-angle-diff float :offset-assert 136)
((pause-adjust-distance meters :offset 4)
(nav-radius meters :offset 8)
(transv vector :inline :offset-assert 64)
(rotv vector :inline :offset-assert 80)
(scalev vector :inline :offset-assert 96)
(dir-targ quaternion :inline :offset-assert 112)
(angle-change-time uint64 :offset-assert 128)
(old-y-angle-diff float :offset-assert 136)
)
:method-count-assert 28
:size-assert #x8c

View file

@ -40,17 +40,17 @@
)
(deftype nav-ray (structure)
((current-pos vector :inline :offset-assert 0)
(dir vector :inline :offset-assert 16)
(dest-pos vector :inline :offset-assert 32)
(current-poly nav-poly :offset-assert 48)
(next-poly nav-poly :offset-assert 52)
(len float :offset-assert 56)
(last-edge int8 :offset-assert 60)
(terminated basic :offset-assert 64)
(reached-dest basic :offset-assert 68)
(hit-boundary basic :offset-assert 72)
(hit-gap basic :offset-assert 76)
((current-pos vector :inline :offset-assert 0)
(dir vector :inline :offset-assert 16)
(dest-pos vector :inline :offset-assert 32)
(current-poly nav-poly :offset-assert 48)
(next-poly nav-poly :offset-assert 52)
(len meters :offset-assert 56)
(last-edge int8 :offset-assert 60)
(terminated basic :offset-assert 64)
(reached-dest basic :offset-assert 68)
(hit-boundary basic :offset-assert 72)
(hit-gap basic :offset-assert 76)
)
:method-count-assert 9
:size-assert #x50
@ -194,20 +194,20 @@
)
(deftype nav-control (basic)
((flags nav-control-flags :offset-assert 4)
(process basic :offset-assert 8)
(shape collide-shape :offset-assert 12)
(mesh nav-mesh :offset-assert 16)
(gap-event basic :offset-assert 20)
(block-event basic :offset-assert 24)
(current-poly nav-poly :offset-assert 28)
(next-poly nav-poly :offset-assert 32)
(target-poly nav-poly :offset-assert 36)
(portal nav-route-portal 2 :offset-assert 40)
(nearest-y-threshold float :offset-assert 48)
(event-temp vector :inline :offset-assert 64)
(old-travel vector :inline :offset-assert 80)
(blocked-travel vector :inline :offset-assert 96)
((flags nav-control-flags :offset-assert 4)
(process basic :offset-assert 8)
(shape collide-shape :offset-assert 12)
(mesh nav-mesh :offset-assert 16)
(gap-event basic :offset-assert 20)
(block-event basic :offset-assert 24)
(current-poly nav-poly :offset-assert 28)
(next-poly nav-poly :offset-assert 32)
(target-poly nav-poly :offset-assert 36)
(portal nav-route-portal 2 :offset-assert 40)
(nearest-y-threshold meters :offset-assert 48)
(event-temp vector :inline :offset-assert 64)
(old-travel vector :inline :offset-assert 80)
(blocked-travel vector :inline :offset-assert 96)
(prev-pos vector :inline :offset-assert 112)
(extra-nav-sphere vector :inline :offset-assert 128)
(travel vector :inline :offset-assert 144)

View file

@ -6,13 +6,13 @@
;; dgos: GAME, ENGINE
(deftype dynamics (basic)
((name basic :offset-assert 4)
(gravity-max float :offset-assert 8) ;; meters
(gravity-length float :offset-assert 12) ;; meters
(gravity vector :inline :offset-assert 16)
(gravity-normal vector :inline :offset-assert 32)
(walk-distance float :offset-assert 48) ;; meters
(run-distance float :offset-assert 52) ;; meters
((name basic :offset-assert 4)
(gravity-max meters :offset-assert 8)
(gravity-length meters :offset-assert 12)
(gravity vector :inline :offset-assert 16)
(gravity-normal vector :inline :offset-assert 32)
(walk-distance meters :offset-assert 48)
(run-distance meters :offset-assert 52)
)
:method-count-assert 9
:size-assert #x38

View file

@ -7,10 +7,10 @@
;; definition of type trajectory
(deftype trajectory (structure)
((initial-position vector :inline :offset-assert 0)
(initial-velocity vector :inline :offset-assert 16)
(time float :offset-assert 32)
(gravity float :offset-assert 36)
((initial-position vector :inline :offset-assert 0)
(initial-velocity vector :inline :offset-assert 16)
(time float :offset-assert 32)
(gravity meters :offset-assert 36)
)
:method-count-assert 16
:size-assert #x28

View file

@ -36,15 +36,15 @@
)
(deftype sparticle-group-item (structure)
((launcher uint32 :offset-assert 0)
(fade-after float :offset-assert 4)
(falloff-to float :offset-assert 8)
(flags uint16 :offset-assert 12)
(period uint16 :offset-assert 14)
(length uint16 :offset-assert 16)
(offset uint16 :offset-assert 18)
(hour-mask uint32 :offset-assert 20)
(binding uint32 :offset-assert 24)
((launcher uint32 :offset-assert 0)
(fade-after meters :offset-assert 4)
(falloff-to meters :offset-assert 8)
(flags uint16 :offset-assert 12)
(period uint16 :offset-assert 14)
(length uint16 :offset-assert 16)
(offset uint16 :offset-assert 18)
(hour-mask uint32 :offset-assert 20)
(binding uint32 :offset-assert 24)
)
:method-count-assert 9
:size-assert #x1c

View file

@ -32,25 +32,25 @@
;; Although the mode is a bitfield, it appears that multiple kinds of mods cannot be
;; activated at the same time.
(deftype joint-mod (basic)
((mode joint-mod-handler-mode :offset-assert 4)
(process process-drawable :offset-assert 8)
(joint cspace :offset-assert 12)
(target vector :inline :offset-assert 16)
(twist vector :inline :offset-assert 32)
(twist-max vector :inline :offset-assert 48)
(trans vector :inline :offset-assert 64)
(quat quaternion :inline :offset-assert 80)
(scale vector :inline :offset-assert 96)
(notice-time uint64 :offset-assert 112)
(flex-blend float :offset-assert 120)
(blend float :offset-assert 124)
(max-dist float :offset-assert 128)
(ignore-angle float :offset-assert 132)
(up uint8 :offset-assert 136)
(nose uint8 :offset-assert 137)
(ear uint8 :offset-assert 138)
(shutting-down? basic :offset-assert 140)
(parented-scale? basic :offset 128)
((mode joint-mod-handler-mode :offset-assert 4)
(process process-drawable :offset-assert 8)
(joint cspace :offset-assert 12)
(target vector :inline :offset-assert 16)
(twist vector :inline :offset-assert 32)
(twist-max vector :inline :offset-assert 48)
(trans vector :inline :offset-assert 64)
(quat quaternion :inline :offset-assert 80)
(scale vector :inline :offset-assert 96)
(notice-time uint64 :offset-assert 112)
(flex-blend float :offset-assert 120)
(blend float :offset-assert 124)
(max-dist meters :offset-assert 128)
(ignore-angle degrees :offset-assert 132)
(up uint8 :offset-assert 136)
(nose uint8 :offset-assert 137)
(ear uint8 :offset-assert 138)
(shutting-down? basic :offset-assert 140)
(parented-scale? basic :offset 128)
)
:method-count-assert 16
:size-assert #x90

View file

@ -7,57 +7,57 @@
;; definition of type nav-enemy-info
(deftype nav-enemy-info (basic)
((idle-anim int32 :offset-assert 4)
(walk-anim int32 :offset-assert 8)
(turn-anim int32 :offset-assert 12)
(notice-anim int32 :offset-assert 16)
(run-anim int32 :offset-assert 20)
(jump-anim int32 :offset-assert 24)
(jump-land-anim int32 :offset-assert 28)
(victory-anim int32 :offset-assert 32)
(taunt-anim int32 :offset-assert 36)
(die-anim int32 :offset-assert 40)
(neck-joint int32 :offset-assert 44)
(player-look-at-joint int32 :offset-assert 48)
(run-travel-speed float :offset-assert 52)
(run-rotate-speed float :offset-assert 56)
(run-acceleration float :offset-assert 60)
(run-turn-time uint64 :offset-assert 64)
(walk-travel-speed float :offset-assert 72)
(walk-rotate-speed float :offset-assert 76)
(walk-acceleration float :offset-assert 80)
(walk-turn-time uint64 :offset-assert 88)
(attack-shove-back float :offset-assert 96)
(attack-shove-up float :offset-assert 100)
(shadow-size float :offset-assert 104)
(notice-nav-radius float :offset-assert 108)
(nav-nearest-y-threshold float :offset-assert 112)
(notice-distance float :offset-assert 116)
(proximity-notice-distance float :offset-assert 120)
(stop-chase-distance float :offset-assert 124)
(frustration-distance float :offset-assert 128)
(frustration-time uint64 :offset-assert 136)
(die-anim-hold-frame float :offset-assert 144)
(jump-anim-start-frame float :offset-assert 148)
(jump-land-anim-end-frame float :offset-assert 152)
(jump-height-min float :offset-assert 156)
(jump-height-factor float :offset-assert 160)
(jump-start-anim-speed float :offset-assert 164)
(shadow-max-y float :offset-assert 168)
(shadow-min-y float :offset-assert 172)
(shadow-locus-dist float :offset-assert 176)
(use-align basic :offset-assert 180)
(draw-shadow basic :offset-assert 184)
(move-to-ground basic :offset-assert 188)
(hover-if-no-ground basic :offset-assert 192)
(use-momentum basic :offset-assert 196)
(use-flee basic :offset-assert 200)
(use-proximity-notice basic :offset-assert 204)
(use-jump-blocked basic :offset-assert 208)
(use-jump-patrol basic :offset-assert 212)
(gnd-collide-with uint64 :offset-assert 216)
(debug-draw-neck basic :offset-assert 224)
(debug-draw-jump basic :offset-assert 228)
((idle-anim int32 :offset-assert 4)
(walk-anim int32 :offset-assert 8)
(turn-anim int32 :offset-assert 12)
(notice-anim int32 :offset-assert 16)
(run-anim int32 :offset-assert 20)
(jump-anim int32 :offset-assert 24)
(jump-land-anim int32 :offset-assert 28)
(victory-anim int32 :offset-assert 32)
(taunt-anim int32 :offset-assert 36)
(die-anim int32 :offset-assert 40)
(neck-joint int32 :offset-assert 44)
(player-look-at-joint int32 :offset-assert 48)
(run-travel-speed meters :offset-assert 52)
(run-rotate-speed degrees :offset-assert 56)
(run-acceleration meters :offset-assert 60)
(run-turn-time seconds :offset-assert 64)
(walk-travel-speed meters :offset-assert 72)
(walk-rotate-speed degrees :offset-assert 76)
(walk-acceleration meters :offset-assert 80)
(walk-turn-time seconds :offset-assert 88)
(attack-shove-back meters :offset-assert 96)
(attack-shove-up meters :offset-assert 100)
(shadow-size meters :offset-assert 104)
(notice-nav-radius meters :offset-assert 108)
(nav-nearest-y-threshold meters :offset-assert 112)
(notice-distance meters :offset-assert 116)
(proximity-notice-distance meters :offset-assert 120)
(stop-chase-distance meters :offset-assert 124)
(frustration-distance meters :offset-assert 128)
(frustration-time uint64 :offset-assert 136)
(die-anim-hold-frame float :offset-assert 144)
(jump-anim-start-frame float :offset-assert 148)
(jump-land-anim-end-frame float :offset-assert 152)
(jump-height-min meters :offset-assert 156)
(jump-height-factor float :offset-assert 160)
(jump-start-anim-speed float :offset-assert 164)
(shadow-max-y meters :offset-assert 168)
(shadow-min-y meters :offset-assert 172)
(shadow-locus-dist meters :offset-assert 176)
(use-align basic :offset-assert 180)
(draw-shadow basic :offset-assert 184)
(move-to-ground basic :offset-assert 188)
(hover-if-no-ground basic :offset-assert 192)
(use-momentum basic :offset-assert 196)
(use-flee basic :offset-assert 200)
(use-proximity-notice basic :offset-assert 204)
(use-jump-blocked basic :offset-assert 208)
(use-jump-patrol basic :offset-assert 212)
(gnd-collide-with uint64 :offset-assert 216)
(debug-draw-neck basic :offset-assert 224)
(debug-draw-jump basic :offset-assert 228)
)
:method-count-assert 9
:size-assert #xe8

View file

@ -166,6 +166,10 @@ void Compiler::generate_field_description(const goos::Object& form,
// Structure
str_template += fmt::format("{}{}: #<{} @ #x~X>~%", tabs, f.name(), f.type().print());
format_args.push_back(get_field_of_structure(type, reg, f.name(), env)->to_gpr(env));
} else if (f.type() == TypeSpec("seconds")) {
// seconds
str_template += fmt::format("{}{}: (seconds ~e)~%", tabs, f.name());
format_args.push_back(get_field_of_structure(type, reg, f.name(), env)->to_gpr(env));
} else if (m_ts.tc(m_ts.make_typespec("integer"), f.type())) {
// Integer
if (m_ts.lookup_type(f.type())->get_load_size() > 8) {
@ -175,6 +179,14 @@ void Compiler::generate_field_description(const goos::Object& form,
format_args.push_back(get_field_of_structure(type, reg, f.name(), env)->to_gpr(env));
}
} else if (f.type() == TypeSpec("meters")) {
// meters
str_template += fmt::format("{}{}: (meters ~m)~%", tabs, f.name());
format_args.push_back(get_field_of_structure(type, reg, f.name(), env)->to_gpr(env));
} else if (f.type() == TypeSpec("degrees")) {
// degrees
str_template += fmt::format("{}{}: (degrees ~r)~%", tabs, f.name());
format_args.push_back(get_field_of_structure(type, reg, f.name(), env)->to_gpr(env));
} else if (m_ts.tc(m_ts.make_typespec("float"), f.type())) {
// Float
str_template += fmt::format("{}{}: ~f~%", tabs, f.name());

View file

@ -127,3 +127,66 @@
)
)
)
(defglobalconstant METER_LENGTH 4096.0)
(defmacro meters (x)
"Convert number to meters.
If the input is a constant float or integer, the result will be a
compile time constant float. Otherwise, it will not be constant."
;; we don't have enough constant propagation for the compiler to figure this out.
(cond
((float? x)
(* METER_LENGTH x)
)
((integer? x)
(* METER_LENGTH x)
)
(#t
`(* METER_LENGTH ,x)
)
)
)
(defglobalconstant DEGREES_PER_ROT 65536.0)
(defmacro degrees (x)
"Convert number to degrees unit.
Will keep a constant float/int constant."
(cond
((or (float? x) (integer? x))
(* DEGREES_PER_ROT (/ (+ 0.0 x) 360.0))
)
(#t
`(* (/ (the float ,x) 360.0)
DEGREES_PER_ROT
)
)
)
)
(defglobalconstant TICKS_PER_SECOND 300) ;; 5 t/frame @ 60fps, 6 t/frame @ 50fps
(defmacro seconds (x)
"Convert number to seconds unit."
(cond
((float? x)
(* 1.0 TICKS_PER_SECOND x)
)
((integer? x)
(* TICKS_PER_SECOND x)
)
(#t
`(* 1.0 TICKS_PER_SECOND ,x)
)
)
)
;; maybe rename to "velocity"?
(defmacro vel-tick (vel)
"turn a velocity value into a per-tick value"
`(* (/ 1.0 ,TICKS_PER_SECOND) ,vel)
)

View file

@ -10,7 +10,7 @@
(matrix matrix 2 :inline :offset-assert 32)
(transform transform 2 :inline :offset-assert 160)
(delta transformq :inline :offset-assert 256)
(last-speed float :offset-assert 304)
(last-speed meters :offset-assert 304)
(align transformq :inline :offset 160)
)
:method-count-assert 14
@ -65,7 +65,3 @@
obj
)
)

View file

@ -12,7 +12,7 @@
(param float 2 :offset-assert 24)
(group-sub-index int16 :offset-assert 32)
(group-size int16 :offset-assert 34)
(dist float :offset-assert 36)
(dist meters :offset-assert 36)
(eval-time uint32 :offset-assert 40)
(inspector-amount float :offset-assert 44)
)

View file

@ -3,16 +3,16 @@
;; definition of type camera-bank
(deftype camera-bank (basic)
((collide-move-rad float :offset-assert 4)
(joypad uint32 :offset-assert 8)
(min-detectable-velocity float :offset-assert 12)
(attack-timeout uint64 :offset-assert 16)
(default-string-max-y float :offset-assert 24)
(default-string-min-y float :offset-assert 28)
(default-string-max-z float :offset-assert 32)
(default-string-min-z float :offset-assert 36)
(default-string-push-z float :offset-assert 40)
(default-tilt-adjust float :offset-assert 44)
((collide-move-rad float :offset-assert 4)
(joypad uint32 :offset-assert 8)
(min-detectable-velocity float :offset-assert 12)
(attack-timeout uint64 :offset-assert 16)
(default-string-max-y meters :offset-assert 24)
(default-string-min-y meters :offset-assert 28)
(default-string-max-z meters :offset-assert 32)
(default-string-min-z meters :offset-assert 36)
(default-string-push-z meters :offset-assert 40)
(default-tilt-adjust degrees :offset-assert 44)
)
:method-count-assert 9
:size-assert #x30
@ -62,12 +62,12 @@
:collide-move-rad 1638.4
:min-detectable-velocity 40.96
:attack-timeout #x4b
:default-string-max-y 12288.0
:default-string-min-y 4096.0
:default-string-max-z 51200.0
:default-string-min-z 20480.0
:default-string-push-z 40960.0
:default-tilt-adjust -1183.289
:default-string-max-y (meters 3.0)
:default-string-min-y (meters 1.0)
:default-string-max-z (meters 12.5)
:default-string-min-z (meters 5.0)
:default-string-push-z (meters 10.0)
:default-tilt-adjust (degrees -6.5000005)
)
)

View file

@ -72,9 +72,9 @@
;; definition of type math-camera
(deftype math-camera (basic)
((d float :offset-assert 4)
(f float :offset-assert 8)
(fov float :offset-assert 12)
((d meters :offset-assert 4)
(f meters :offset-assert 8)
(fov degrees :offset-assert 12)
(x-ratio float :offset-assert 16)
(y-ratio float :offset-assert 20)
(x-pix float :offset-assert 24)
@ -86,8 +86,8 @@
(y-clip-ratio-in float :offset-assert 48)
(y-clip-ratio-over float :offset-assert 52)
(cull-info cull-info :inline :offset-assert 56)
(fog-start float :offset-assert 120)
(fog-end float :offset-assert 124)
(fog-start meters :offset-assert 120)
(fog-end meters :offset-assert 124)
(fog-max float :offset-assert 128)
(fog-min float :offset-assert 132)
(reset int32 :offset-assert 136)

View file

@ -234,7 +234,7 @@
(action uint32 :offset 40)
(offense int8 :offset 44)
(prim-type int8 :offset 45)
(radius float :offset 60)
(radius meters :offset 60)
)
:method-count-assert 28
:size-assert #x48
@ -490,7 +490,7 @@
(ground-poly-normal vector :inline :offset-assert 368)
(ground-touch-point vector :inline :offset-assert 384)
(shadow-pos vector :inline :offset-assert 400)
(ground-impact-vel float :offset-assert 416)
(ground-impact-vel meters :offset-assert 416)
(surface-angle float :offset-assert 420)
(poly-angle float :offset-assert 424)
(touch-angle float :offset-assert 428)

View file

@ -325,11 +325,11 @@
(jgeo int32 :offset-assert 8)
(janim int32 :offset-assert 12)
(bounds vector :inline :offset-assert 16)
(radius float :offset 28)
(radius meters :offset 28)
(mgeo uint16 4 :offset-assert 32)
(max-lod int32 :offset-assert 40)
(lod-dist float 4 :offset-assert 44)
(longest-edge float :offset-assert 60)
(longest-edge meters :offset-assert 60)
(texture-level int8 :offset-assert 64)
(version int8 :offset-assert 65)
(shadow int8 :offset-assert 66)
@ -363,7 +363,7 @@
;; definition of type lod-group
(deftype lod-group (structure)
((geo merc-ctrl :offset-assert 0)
(dist float :offset-assert 4)
(dist meters :offset-assert 4)
)
:pack-me
:method-count-assert 9
@ -419,7 +419,7 @@
(cur-lod int8 :offset-assert 62)
(desired-lod int8 :offset-assert 63)
(ripple ripple-control :offset-assert 64)
(longest-edge float :offset-assert 68)
(longest-edge meters :offset-assert 68)
(longest-edge? uint32 :offset 68)
(light-index uint8 :offset-assert 72)
(dummy uint8 2 :offset-assert 73)
@ -434,7 +434,7 @@
(shadow-ctrl shadow-control :offset-assert 96)
(origin vector :inline :offset-assert 112)
(bounds vector :inline :offset-assert 128)
(radius float :offset 140)
(radius meters :offset 140)
(color-mult rgbaf :inline :offset-assert 144)
(color-emissive rgbaf :inline :offset-assert 160)
(secondary-interp float :offset-assert 176)

View file

@ -3,21 +3,21 @@
;; definition of type fact-bank
(deftype fact-bank (basic)
((eco-level-max float :offset-assert 4)
(eco-single-inc float :offset-assert 8)
(eco-full-inc float :offset-assert 12)
(eco-single-timeout uint64 :offset-assert 16)
(eco-full-timeout uint64 :offset-assert 24)
(dummy uint64 :offset-assert 32)
(health-max-default float :offset-assert 40)
(health-single-inc float :offset-assert 44)
(eco-pill-max-default float :offset-assert 48)
(health-small-inc float :offset-assert 52)
(buzzer-max-default float :offset-assert 56)
(buzzer-single-inc float :offset-assert 60)
(suck-bounce-dist float :offset-assert 64)
(suck-suck-dist float :offset-assert 68)
(default-pill-inc float :offset-assert 72)
((eco-level-max float :offset-assert 4)
(eco-single-inc float :offset-assert 8)
(eco-full-inc float :offset-assert 12)
(eco-single-timeout seconds :offset-assert 16)
(eco-full-timeout seconds :offset-assert 24)
(dummy seconds :offset-assert 32)
(health-max-default float :offset-assert 40)
(health-single-inc float :offset-assert 44)
(eco-pill-max-default float :offset-assert 48)
(health-small-inc float :offset-assert 52)
(buzzer-max-default float :offset-assert 56)
(buzzer-single-inc float :offset-assert 60)
(suck-bounce-dist meters :offset-assert 64)
(suck-suck-dist meters :offset-assert 68)
(default-pill-inc float :offset-assert 72)
)
:method-count-assert 9
:size-assert #x4c
@ -52,17 +52,17 @@
:eco-level-max 2.0
:eco-single-inc 1.0
:eco-full-inc 5.0
:eco-single-timeout #x5dc
:eco-full-timeout #x1770
:dummy #x1194
:eco-single-timeout (seconds 5)
:eco-full-timeout (seconds 20)
:dummy (seconds 15)
:health-max-default 3.0
:health-single-inc 1.0
:eco-pill-max-default 50.0
:health-small-inc 1.0
:buzzer-max-default 7.0
:buzzer-single-inc 1.0
:suck-bounce-dist 73728.0
:suck-suck-dist 30720.0
:suck-bounce-dist (meters 18.0)
:suck-suck-dist (meters 7.5)
)
)
@ -139,23 +139,23 @@
;; definition of type fact-info-target
(deftype fact-info-target (fact-info)
((eco-type int32 :offset-assert 40)
(eco-level float :offset-assert 44)
(eco-pickup-time uint64 :offset-assert 48)
(eco-timeout uint64 :offset-assert 56)
(health float :offset-assert 64)
(health-max float :offset-assert 68)
(buzzer float :offset-assert 72)
(buzzer-max float :offset-assert 76)
(eco-pill float :offset-assert 80)
(eco-pill-max float :offset-assert 84)
(health-pickup-time uint64 :offset-assert 88)
(eco-source uint64 :offset-assert 96)
(eco-source-time uint64 :offset-assert 104)
(money-pickup-time uint64 :offset-assert 112)
(buzzer-pickup-time uint64 :offset-assert 120)
(fuel-cell-pickup-time uint64 :offset-assert 128)
(eco-pill-pickup-time uint64 :offset-assert 136)
((eco-type int32 :offset-assert 40)
(eco-level float :offset-assert 44)
(eco-pickup-time uint64 :offset-assert 48)
(eco-timeout seconds :offset-assert 56)
(health float :offset-assert 64)
(health-max float :offset-assert 68)
(buzzer float :offset-assert 72)
(buzzer-max float :offset-assert 76)
(eco-pill float :offset-assert 80)
(eco-pill-max float :offset-assert 84)
(health-pickup-time uint64 :offset-assert 88)
(eco-source uint64 :offset-assert 96)
(eco-source-time uint64 :offset-assert 104)
(money-pickup-time uint64 :offset-assert 112)
(buzzer-pickup-time uint64 :offset-assert 120)
(fuel-cell-pickup-time uint64 :offset-assert 128)
(eco-pill-pickup-time uint64 :offset-assert 136)
)
:method-count-assert 12
:size-assert #x90
@ -196,13 +196,13 @@
;; definition of type fact-info-enemy
(deftype fact-info-enemy (fact-info)
((speed float :offset-assert 40)
(idle-distance float :offset-assert 44)
(notice-top float :offset-assert 48)
(notice-bottom float :offset-assert 52)
(cam-horz float :offset-assert 56)
(cam-vert float :offset-assert 60)
(cam-notice-dist float :offset-assert 64)
((speed float :offset-assert 40)
(idle-distance meters :offset-assert 44)
(notice-top meters :offset-assert 48)
(notice-bottom meters :offset-assert 52)
(cam-horz meters :offset-assert 56)
(cam-vert meters :offset-assert 60)
(cam-notice-dist meters :offset-assert 64)
)
:method-count-assert 12
:size-assert #x44

View file

@ -120,21 +120,21 @@
;; definition of type attack-info
(deftype attack-info (structure)
((trans vector :inline :offset-assert 0)
(vector vector :inline :offset-assert 16)
(intersection vector :inline :offset-assert 32)
(attacker uint64 :offset-assert 48)
(invinc-time uint64 :offset-assert 56)
(mask uint32 :offset-assert 64)
(mode basic :offset-assert 68)
(shove-back float :offset-assert 72)
(shove-up float :offset-assert 76)
(speed float :offset-assert 80)
(dist float :offset-assert 84)
(control float :offset-assert 88)
(angle basic :offset-assert 92)
(rotate-to float :offset-assert 96)
(prev-state basic :offset-assert 100)
((trans vector :inline :offset-assert 0)
(vector vector :inline :offset-assert 16)
(intersection vector :inline :offset-assert 32)
(attacker uint64 :offset-assert 48)
(invinc-time uint64 :offset-assert 56)
(mask uint32 :offset-assert 64)
(mode basic :offset-assert 68)
(shove-back meters :offset-assert 72)
(shove-up meters :offset-assert 76)
(speed meters :offset-assert 80)
(dist meters :offset-assert 84)
(control float :offset-assert 88)
(angle basic :offset-assert 92)
(rotate-to degrees :offset-assert 96)
(prev-state basic :offset-assert 100)
)
:method-count-assert 10
:size-assert #x68

View file

@ -52,7 +52,7 @@
(deftype part-spawner (process-drawable)
((mode uint32 :offset-assert 176)
(enable basic :offset-assert 180)
(radius float :offset-assert 184)
(radius meters :offset-assert 184)
(world-sphere sphere :inline :offset-assert 192)
)
:heap-base #x60
@ -211,8 +211,8 @@
(deftype swingpole (process)
((root basic :offset-assert 112)
(dir vector :inline :offset-assert 128)
(range float :offset-assert 144)
(edge-length float :offset-assert 148)
(range meters :offset-assert 144)
(edge-length meters :offset-assert 148)
)
:heap-base #x30
:method-count-assert 14

View file

@ -5,8 +5,8 @@
(deftype mood-fog (structure)
((fog-color vector :inline :offset-assert 0)
(fog-dists vector :inline :offset-assert 16)
(fog-start float :offset 16)
(fog-end float :offset 20)
(fog-start meters :offset 16)
(fog-end meters :offset 20)
(fog-max float :offset 24)
(fog-min float :offset 28)
(erase-color vector :inline :offset-assert 32)

View file

@ -64,8 +64,8 @@
;; definition of type sparticle-group-item
(deftype sparticle-group-item (structure)
((launcher uint32 :offset-assert 0)
(fade-after float :offset-assert 4)
(falloff-to float :offset-assert 8)
(fade-after meters :offset-assert 4)
(falloff-to meters :offset-assert 8)
(flags uint16 :offset-assert 12)
(period uint16 :offset-assert 14)
(length uint16 :offset-assert 16)

View file

@ -12,10 +12,10 @@
(rdists vector :inline :offset-assert 48)
(next uint32 4 :offset-assert 64)
(count uint16 4 :offset-assert 80)
(near-plane float :offset 32)
(near-stiff float :offset 36)
(mid-plane float :offset 40)
(far-plane float :offset 44)
(near-plane meters :offset 32)
(near-stiff meters :offset 36)
(mid-plane meters :offset 40)
(far-plane meters :offset 44)
(rlength-near float :offset 48)
(rlength-stiff float :offset 52)
(rlength-mid float :offset 56)

View file

@ -7,24 +7,24 @@
(process process :offset-assert 8)
(joint-index int32 :offset-assert 12)
(top-y-offset float :offset-assert 16)
(ripple-size float :offset-assert 20)
(ripple-size meters :offset-assert 20)
(enter-water-time uint64 :offset-assert 24)
(wade-time uint64 :offset-assert 32)
(on-water-time uint64 :offset-assert 40)
(enter-swim-time uint64 :offset-assert 48)
(swim-time uint64 :offset-assert 56)
(base-height float :offset-assert 64)
(wade-height float :offset-assert 68)
(swim-height float :offset-assert 72)
(surface-height float :offset-assert 76)
(bottom-height float :offset-assert 80)
(height float :offset-assert 84)
(base-height meters :offset-assert 64)
(wade-height meters :offset-assert 68)
(swim-height meters :offset-assert 72)
(surface-height meters :offset-assert 76)
(bottom-height meters :offset-assert 80)
(height meters :offset-assert 84)
(height-offset float 4 :offset-assert 88)
(real-ocean-offset float :offset 88)
(ocean-offset float :offset 92)
(bob-offset float :offset 96)
(align-offset float :offset 100)
(swim-depth float :offset-assert 104)
(real-ocean-offset meters :offset 88)
(ocean-offset meters :offset 92)
(bob-offset meters :offset 96)
(align-offset meters :offset 100)
(swim-depth meters :offset-assert 104)
(bob smush-control :inline :offset-assert 112)
(volume uint64 :offset-assert 144)
(bottom vector 2 :inline :offset-assert 160)
@ -35,7 +35,7 @@
(drip-wetness float :offset-assert 260)
(drip-time uint64 :offset-assert 264)
(drip-speed float :offset-assert 272)
(drip-height float :offset-assert 276)
(drip-height meters :offset-assert 276)
(drip-mult float :offset-assert 280)
)
:method-count-assert 17
@ -136,10 +136,10 @@
;; definition of type water-vol
(deftype water-vol (process-drawable)
((water-height float :offset-assert 176)
(wade-height float :offset-assert 180)
(swim-height float :offset-assert 184)
(bottom-height float :offset-assert 188)
((water-height meters :offset-assert 176)
(wade-height meters :offset-assert 180)
(swim-height meters :offset-assert 184)
(bottom-height meters :offset-assert 188)
(attack-event basic :offset-assert 192)
(target uint64 :offset-assert 200)
(flags uint32 :offset-assert 208)

View file

@ -71,7 +71,7 @@
(bsp-mask uint64 :offset-assert 80)
(bsphere sphere :offset-assert 88)
(buzzer int32 :offset-assert 92)
(bottom-height float :offset-assert 96)
(bottom-height meters :offset-assert 96)
(run-packages pair :offset-assert 100)
(prev-level basic :offset-assert 104)
(next-level basic :offset-assert 108)
@ -158,7 +158,7 @@
(ambient entity-ambient-data-array :offset-assert 288)
(closest-object float 9 :offset-assert 292)
(upload-size int32 9 :offset-assert 328)
(level-distance float :offset-assert 364)
(level-distance meters :offset-assert 364)
(inside-sphere? symbol :offset-assert 368)
(inside-boxes? symbol :offset-assert 372)
(display? symbol :offset-assert 376)

View file

@ -223,7 +223,7 @@
:bsphere
(new 'static 'sphere :x -5079040.0 :z 4055040.0 :w 1024000.0)
:buzzer 95
:bottom-height -466944.0
:bottom-height (meters -114.0)
:run-packages '("common" "villagep")
:wait-for-load #f
)
@ -453,7 +453,7 @@
:bsphere
(new 'static 'sphere :x -444416.0 :y 133120.0 :z 360448.0 :w 843776.0)
:buzzer 75
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -518,7 +518,7 @@
:bsphere
(new 'static 'sphere :x -819200.0 :z -1556480.0 :w 1474560.0)
:buzzer 20
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -586,7 +586,7 @@
:bsphere
(new 'static 'sphere :x 1474560.0 :y 2519040.0 :z -983040.0 :w 2457600.0)
:buzzer 7
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -646,7 +646,7 @@
:bsphere
(new 'static 'sphere :x 1486848.0 :y -1269760.0 :z -1064960.0 :w 1228800.0)
:buzzer 7
:bottom-height -327680.0
:bottom-height (meters -80.0)
:run-packages '("common" "jungle")
:wait-for-load #f
)
@ -1038,7 +1038,7 @@
:bsphere
(new 'static 'sphere :z 4096000.0 :w 1269760.0)
:buzzer 28
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #f
)
@ -1130,7 +1130,7 @@
:bsphere
(new 'static 'sphere :x 419840.0 :y 151552.0 :z -3006464.0 :w 2048000.0)
:buzzer 68
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -1251,7 +1251,7 @@
:bsphere
(new 'static 'sphere :x 1392640.0 :y 81920.0 :z -6770688.0 :w 696320.0)
:buzzer 76
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -1396,7 +1396,7 @@
:bsphere
(new 'static 'sphere :x 2867200.0 :y -2048000.0 :z -6553600.0 :w 2048000.0)
:buzzer 49
:bottom-height -2048000.0
:bottom-height (meters -500.0)
:run-packages '("common")
:wait-for-load #f
)
@ -1485,7 +1485,7 @@
:bsphere
(new 'static 'sphere :x 2867200.0 :y -2048000.0 :z -6553600.0 :w 2048000.0)
:buzzer 49
:bottom-height -2048000.0
:bottom-height (meters -500.0)
:run-packages '("common" "sunken")
:wait-for-load #f
)
@ -1850,7 +1850,7 @@
:bsphere
(new 'static 'sphere :x 1986560.0 :z -8417280.0 :w 1003520.0)
:buzzer 43
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -1914,7 +1914,7 @@
:bsphere
(new 'static 'sphere :x -753664.0 :y 131072.0 :z -6569984.0 :w 974848.0)
:buzzer 57
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -2034,7 +2034,7 @@
:bsphere
(new 'static 'sphere :x 2334720.0 :y 180224.0 :z -10653696.0 :w 3653632.0)
:buzzer 88
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #t
)
@ -2155,7 +2155,7 @@
:bsphere
(new 'static 'sphere :x 4571136.0 :y 389120.0 :z -14323712.0 :w 409600.0)
:buzzer 77
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '("common")
:wait-for-load #f
)
@ -2444,7 +2444,7 @@
:bsphere
(new 'static 'sphere :x 3072000.0 :y 1142784.0 :z -14028800.0 :w 1290240.0)
:buzzer 65
:bottom-height 524288.0
:bottom-height (meters 128.0)
:run-packages '("common")
:wait-for-load #f
)
@ -2564,7 +2564,7 @@
:bsphere
(new 'static 'sphere :x 4517888.0 :y 114688.0 :z -12484608.0 :w 655360.0)
:buzzer 85
:bottom-height -245760.0
:bottom-height (meters -60.0)
:run-packages '("common")
:wait-for-load #f
)
@ -2625,7 +2625,7 @@
:bsphere
(new 'static 'sphere :x 3620864.0 :y 266240.0 :z -11935744.0 :w 368640.0)
:buzzer 85
:bottom-height -245760.0
:bottom-height (meters -60.0)
:run-packages '("common" "maincave")
:wait-for-load #t
)
@ -2714,7 +2714,7 @@
:bsphere
(new 'static 'sphere :x 5529600.0 :y 81920.0 :z -11468800.0 :w 512000.0)
:buzzer 85
:bottom-height -245760.0
:bottom-height (meters -60.0)
:run-packages '("common" "maincave")
:wait-for-load #t
)
@ -2862,7 +2862,7 @@
:bsphere
(new 'static 'sphere :x 8806400.0 :y 131072.0 :z -15564800.0 :w 3174400.0)
:buzzer 90
:bottom-height -286720.0
:bottom-height (meters -70.0)
:run-packages '("common")
:wait-for-load #t
)
@ -3179,7 +3179,7 @@
:bsphere
(new 'static 'sphere :x 11436032.0 :y -462848.0 :z -19750912.0 :w 1228800.0)
:buzzer 91
:bottom-height -466944.0
:bottom-height (meters -114.0)
:run-packages '("common")
:wait-for-load #t
)
@ -3275,7 +3275,7 @@
:bsphere
(new 'static 'sphere :x 11837440.0 :y 2129920.0 :z -19578880.0 :w 778240.0)
:buzzer 91
:bottom-height -466944.0
:bottom-height (meters -114.0)
:run-packages '("common")
:wait-for-load #f
)
@ -3304,7 +3304,7 @@
:alt-load-commands '()
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere)
:bottom-height -40960000000.0
:bottom-height (meters -10000000.0)
:run-packages '("common")
:wait-for-load #f
)
@ -3363,7 +3363,7 @@
:alt-load-commands '()
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere)
:bottom-height -40960000000.0
:bottom-height (meters -10000000.0)
:run-packages '("common")
:wait-for-load #f
)
@ -3424,7 +3424,7 @@
:bsp-mask #xffffffffffffffff
:bsphere
(new 'static 'sphere :x -40960.0 :z 40960.0 :w 1126400.0)
:bottom-height -40960000000.0
:bottom-height (meters -10000000.0)
:run-packages '("common")
:wait-for-load #f
)
@ -3484,7 +3484,7 @@
:alt-load-commands '()
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :w 167772160000.0)
:bottom-height -40960000000.0
:bottom-height (meters -10000000.0)
:run-packages '()
:wait-for-load #t
)
@ -3513,7 +3513,7 @@
:alt-load-commands '()
:bsp-mask #xffffffffffffffff
:bsphere (new 'static 'sphere :w 167772160000.0)
:bottom-height -81920.0
:bottom-height (meters -20.0)
:run-packages '()
:wait-for-load #t
)

View file

@ -41,8 +41,8 @@
;; definition of type trsqv
(deftype trsqv (trsq)
((pause-adjust-distance float :offset 4)
(nav-radius float :offset 8)
((pause-adjust-distance meters :offset 4)
(nav-radius meters :offset 8)
(transv vector :inline :offset-assert 64)
(rotv vector :inline :offset-assert 80)
(scalev vector :inline :offset-assert 96)

View file

@ -67,7 +67,7 @@
(dest-pos vector :inline :offset-assert 32)
(current-poly nav-poly :offset-assert 48)
(next-poly nav-poly :offset-assert 52)
(len float :offset-assert 56)
(len meters :offset-assert 56)
(last-edge int8 :offset-assert 60)
(terminated basic :offset-assert 64)
(reached-dest basic :offset-assert 68)
@ -357,7 +357,7 @@
(next-poly nav-poly :offset-assert 32)
(target-poly nav-poly :offset-assert 36)
(portal nav-route-portal 2 :offset-assert 40)
(nearest-y-threshold float :offset-assert 48)
(nearest-y-threshold meters :offset-assert 48)
(event-temp vector :inline :offset-assert 64)
(old-travel vector :inline :offset-assert 80)
(blocked-travel vector :inline :offset-assert 96)

View file

@ -4,12 +4,12 @@
;; definition of type dynamics
(deftype dynamics (basic)
((name basic :offset-assert 4)
(gravity-max float :offset-assert 8)
(gravity-length float :offset-assert 12)
(gravity-max meters :offset-assert 8)
(gravity-length meters :offset-assert 12)
(gravity vector :inline :offset-assert 16)
(gravity-normal vector :inline :offset-assert 32)
(walk-distance float :offset-assert 48)
(run-distance float :offset-assert 52)
(walk-distance meters :offset-assert 48)
(run-distance meters :offset-assert 52)
)
:method-count-assert 9
:size-assert #x38
@ -53,13 +53,13 @@
*standard-dynamics*
(new 'static 'dynamics
:name 'standard
:gravity-max 163840.0
:gravity-length 245760.0
:gravity-max (meters 40.0)
:gravity-length (meters 60.0)
:gravity
(new 'static 'vector :y 245760.0 :w 1.0)
:gravity-normal (new 'static 'vector :y 1.0 :w 1.0)
:walk-distance 8192.0
:run-distance 20480.0
:walk-distance (meters 2.0)
:run-distance (meters 5.0)
)
)

View file

@ -6,7 +6,7 @@
((initial-position vector :inline :offset-assert 0)
(initial-velocity vector :inline :offset-assert 16)
(time float :offset-assert 32)
(gravity float :offset-assert 36)
(gravity meters :offset-assert 36)
)
:method-count-assert 16
:size-assert #x28

View file

@ -15,8 +15,8 @@
(notice-time uint64 :offset-assert 112)
(flex-blend float :offset-assert 120)
(blend float :offset-assert 124)
(max-dist float :offset-assert 128)
(ignore-angle float :offset-assert 132)
(max-dist meters :offset-assert 128)
(ignore-angle degrees :offset-assert 132)
(up uint8 :offset-assert 136)
(nose uint8 :offset-assert 137)
(ear uint8 :offset-assert 138)
@ -156,7 +156,7 @@
(set! (-> v1-2 z) 1.0)
(set! (-> v1-2 w) 1.0)
)
(set! (-> obj max-dist) (the-as float #f))
(set! (-> obj max-dist) (the-as meters #f))
)
(((joint-mod-handler-mode joint-set*))
(set! (-> joint param0) joint-mod-joint-set*-handler)
@ -170,7 +170,7 @@
(set! (-> v1-4 z) 1.0)
(set! (-> v1-4 w) 1.0)
)
(set! (-> obj max-dist) (the-as float #f))
(set! (-> obj max-dist) (the-as meters #f))
)
)
)

View file

@ -3,57 +3,57 @@
;; definition of type nav-enemy-info
(deftype nav-enemy-info (basic)
((idle-anim int32 :offset-assert 4)
(walk-anim int32 :offset-assert 8)
(turn-anim int32 :offset-assert 12)
(notice-anim int32 :offset-assert 16)
(run-anim int32 :offset-assert 20)
(jump-anim int32 :offset-assert 24)
(jump-land-anim int32 :offset-assert 28)
(victory-anim int32 :offset-assert 32)
(taunt-anim int32 :offset-assert 36)
(die-anim int32 :offset-assert 40)
(neck-joint int32 :offset-assert 44)
(player-look-at-joint int32 :offset-assert 48)
(run-travel-speed float :offset-assert 52)
(run-rotate-speed float :offset-assert 56)
(run-acceleration float :offset-assert 60)
(run-turn-time uint64 :offset-assert 64)
(walk-travel-speed float :offset-assert 72)
(walk-rotate-speed float :offset-assert 76)
(walk-acceleration float :offset-assert 80)
(walk-turn-time uint64 :offset-assert 88)
(attack-shove-back float :offset-assert 96)
(attack-shove-up float :offset-assert 100)
(shadow-size float :offset-assert 104)
(notice-nav-radius float :offset-assert 108)
(nav-nearest-y-threshold float :offset-assert 112)
(notice-distance float :offset-assert 116)
(proximity-notice-distance float :offset-assert 120)
(stop-chase-distance float :offset-assert 124)
(frustration-distance float :offset-assert 128)
(frustration-time uint64 :offset-assert 136)
(die-anim-hold-frame float :offset-assert 144)
(jump-anim-start-frame float :offset-assert 148)
(jump-land-anim-end-frame float :offset-assert 152)
(jump-height-min float :offset-assert 156)
(jump-height-factor float :offset-assert 160)
(jump-start-anim-speed float :offset-assert 164)
(shadow-max-y float :offset-assert 168)
(shadow-min-y float :offset-assert 172)
(shadow-locus-dist float :offset-assert 176)
(use-align basic :offset-assert 180)
(draw-shadow basic :offset-assert 184)
(move-to-ground basic :offset-assert 188)
(hover-if-no-ground basic :offset-assert 192)
(use-momentum basic :offset-assert 196)
(use-flee basic :offset-assert 200)
(use-proximity-notice basic :offset-assert 204)
(use-jump-blocked basic :offset-assert 208)
(use-jump-patrol basic :offset-assert 212)
(gnd-collide-with uint64 :offset-assert 216)
(debug-draw-neck basic :offset-assert 224)
(debug-draw-jump basic :offset-assert 228)
((idle-anim int32 :offset-assert 4)
(walk-anim int32 :offset-assert 8)
(turn-anim int32 :offset-assert 12)
(notice-anim int32 :offset-assert 16)
(run-anim int32 :offset-assert 20)
(jump-anim int32 :offset-assert 24)
(jump-land-anim int32 :offset-assert 28)
(victory-anim int32 :offset-assert 32)
(taunt-anim int32 :offset-assert 36)
(die-anim int32 :offset-assert 40)
(neck-joint int32 :offset-assert 44)
(player-look-at-joint int32 :offset-assert 48)
(run-travel-speed meters :offset-assert 52)
(run-rotate-speed degrees :offset-assert 56)
(run-acceleration meters :offset-assert 60)
(run-turn-time seconds :offset-assert 64)
(walk-travel-speed meters :offset-assert 72)
(walk-rotate-speed degrees :offset-assert 76)
(walk-acceleration meters :offset-assert 80)
(walk-turn-time seconds :offset-assert 88)
(attack-shove-back meters :offset-assert 96)
(attack-shove-up meters :offset-assert 100)
(shadow-size meters :offset-assert 104)
(notice-nav-radius meters :offset-assert 108)
(nav-nearest-y-threshold meters :offset-assert 112)
(notice-distance meters :offset-assert 116)
(proximity-notice-distance meters :offset-assert 120)
(stop-chase-distance meters :offset-assert 124)
(frustration-distance meters :offset-assert 128)
(frustration-time uint64 :offset-assert 136)
(die-anim-hold-frame float :offset-assert 144)
(jump-anim-start-frame float :offset-assert 148)
(jump-land-anim-end-frame float :offset-assert 152)
(jump-height-min meters :offset-assert 156)
(jump-height-factor float :offset-assert 160)
(jump-start-anim-speed float :offset-assert 164)
(shadow-max-y meters :offset-assert 168)
(shadow-min-y meters :offset-assert 172)
(shadow-locus-dist meters :offset-assert 176)
(use-align basic :offset-assert 180)
(draw-shadow basic :offset-assert 184)
(move-to-ground basic :offset-assert 188)
(hover-if-no-ground basic :offset-assert 192)
(use-momentum basic :offset-assert 196)
(use-flee basic :offset-assert 200)
(use-proximity-notice basic :offset-assert 204)
(use-jump-blocked basic :offset-assert 208)
(use-jump-patrol basic :offset-assert 212)
(gnd-collide-with uint64 :offset-assert 216)
(debug-draw-neck basic :offset-assert 224)
(debug-draw-jump basic :offset-assert 228)
)
:method-count-assert 9
:size-assert #xe8