mirror of
https://github.com/open-goal/jak-project
synced 2026-09-02 18:12:50 -04:00
collision renderer v2 (#1344)
* collision renderer v2 * update code * update again! * Update collision.vert * Update collide-target-h.gc * fix code * bleh * gah * minor fixes * fix stupidity * skip filters * fix subtitle that i missed * remove assert that doesn't work! * Update hint-control.gc
This commit is contained in:
@@ -50,7 +50,7 @@ enum MemoryUsageCategory {
|
||||
NUM_CATEGORIES
|
||||
};
|
||||
|
||||
constexpr int TFRAG3_VERSION = 16;
|
||||
constexpr int TFRAG3_VERSION = 17;
|
||||
|
||||
// These vertices should be uploaded to the GPU at load time and don't change
|
||||
struct PreloadedVertex {
|
||||
@@ -315,8 +315,10 @@ struct CollisionMesh {
|
||||
u32 flags;
|
||||
s16 nx, ny, nz;
|
||||
u16 pad;
|
||||
u32 pat;
|
||||
u32 pad2;
|
||||
};
|
||||
static_assert(sizeof(Vertex) == 24);
|
||||
static_assert(sizeof(Vertex) == 32);
|
||||
std::vector<Vertex> vertices;
|
||||
void serialize(Serializer& ser);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "ParseHelpers.h"
|
||||
#include "third-party/fmt/core.h"
|
||||
|
||||
namespace goos {
|
||||
|
||||
@@ -44,16 +45,16 @@ bool va_check(
|
||||
std::string* err_string) {
|
||||
ASSERT(args.rest.empty());
|
||||
if (unnamed.size() != args.unnamed.size()) {
|
||||
*err_string = "Got " + std::to_string(args.unnamed.size()) + " arguments, but expected " +
|
||||
std::to_string(unnamed.size());
|
||||
*err_string = fmt::format("Got {} arguments, but expected {}",
|
||||
std::to_string(args.unnamed.size()), std::to_string(unnamed.size()));
|
||||
return false;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < unnamed.size(); i++) {
|
||||
if (unnamed[i].has_value() && unnamed[i] != args.unnamed[i].type) {
|
||||
*err_string = "Argument " + std::to_string(i) + " has type " +
|
||||
object_type_to_string(args.unnamed[i].type) + " but " +
|
||||
object_type_to_string(unnamed[i].value()) + " was expected";
|
||||
*err_string = fmt::format("Argument {} has type {} but {} was expected\nArgument is: {}", i,
|
||||
object_type_to_string(args.unnamed[i].type),
|
||||
object_type_to_string(unnamed[i].value()), args.unnamed[i].print());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3748,7 +3748,7 @@
|
||||
(shrub-near 12)
|
||||
(billboard 13)
|
||||
(trans-shrubbery 14)
|
||||
(trans-frag 15)
|
||||
(trans-tfrag 15)
|
||||
(sprite 16)
|
||||
(shadow 17)
|
||||
(depth-cue 18)
|
||||
@@ -11861,7 +11861,7 @@
|
||||
(unknown-vector120 vector :inline :offset 18928) ;; from target::(code target-running-attack)
|
||||
(unknown-float150 float :offset 18944) ;; from target::(code target-wheel-flip)
|
||||
(unknown-vector121 vector :inline :offset 18960) ;; from target collide response
|
||||
(unknown-int60 uint32 :offset 18976) ;; from logic-target::print-target-stats
|
||||
(wall-pat pat-surface :offset 18976) ;; pat information for wall-check collision
|
||||
(unknown-soundid00 sound-id :offset 18980) ;; from powerups::target-powerup-process
|
||||
(unknown-float141 float :offset 18984) ;; from powerups::target-powerup-process
|
||||
)
|
||||
@@ -11879,7 +11879,7 @@
|
||||
;; - Types
|
||||
|
||||
(deftype touching-prim (structure)
|
||||
((cprim collide-shape-prim :offset-assert 0) ;; a big guess, there's a few that meet this name
|
||||
((cprim collide-shape-prim :offset-assert 0) ;; a big guess, there's a few that meet this name
|
||||
(has-tri? symbol :offset-assert 4)
|
||||
(tri collide-tri-result :inline :offset-assert 16)
|
||||
)
|
||||
@@ -12441,7 +12441,7 @@
|
||||
target-tube
|
||||
(target-tube-death symbol)
|
||||
(target-tube-jump float float)
|
||||
(target-tube-hit handle attack-info)
|
||||
(target-tube-hit symbol attack-info)
|
||||
target-snowball
|
||||
(target-death symbol)
|
||||
(target-clone-anim handle)
|
||||
@@ -20332,7 +20332,7 @@
|
||||
(define-extern turn-around? (function symbol :behavior target))
|
||||
(define-extern target-move-dist (function time-frame float :behavior target))
|
||||
(define-extern target-compute-edge-rider (function none :behavior target))
|
||||
(define-extern target-post (function none))
|
||||
(define-extern target-post (function none :behavior target))
|
||||
(define-extern target-swim-post (function none :behavior target))
|
||||
(define-extern target-no-stick-post (function none :behavior target))
|
||||
(define-extern target-no-move-post (function none :behavior target))
|
||||
@@ -20418,7 +20418,7 @@
|
||||
(define-extern target-bonk-event-handler (function process int symbol event-message-block object :behavior target))
|
||||
(define-extern target-standard-event-handler (function process int symbol event-message-block object :behavior target))
|
||||
(define-extern target-send-attack (function process uint uint int int symbol :behavior target)) ;; i suspect the uints are actually structures/basics
|
||||
(define-extern target-attacked (function symbol attack-info process process (state handle attack-info target) object :behavior target)) ;; unconfirmed, target-tube::(event target-tube-start)
|
||||
(define-extern target-attacked (function symbol attack-info process process (state symbol attack-info target) object :behavior target))
|
||||
(define-extern target-apply-tongue (function vector symbol :behavior target))
|
||||
(define-extern get-intersect-point (function vector touching-prims-entry control-info process vector))
|
||||
(define-extern target-powerup-effect (function symbol none :behavior target))
|
||||
|
||||
@@ -9,8 +9,15 @@ struct CollideListItem {
|
||||
const level_tools::InstanceTie* inst = nullptr;
|
||||
|
||||
struct {
|
||||
struct UnpackedFace {
|
||||
UnpackedFace(u8 a, u8 b, u8 c) : verts(a, b, c) {}
|
||||
|
||||
math::Vector<u8, 3> verts;
|
||||
u32 pat;
|
||||
};
|
||||
|
||||
std::vector<math::Vector4f> vu0_buffer;
|
||||
std::vector<math::Vector<u8, 3>> faces;
|
||||
std::vector<UnpackedFace> faces;
|
||||
} unpacked;
|
||||
};
|
||||
|
||||
@@ -68,6 +75,14 @@ s8 deref_s8(const Ref& ref, int byte) {
|
||||
return vals[byte & 3];
|
||||
}
|
||||
|
||||
u8 deref_u8(const Ref& ref, int byte) {
|
||||
u32 u32_offset = byte / 4;
|
||||
u32 u32_val = level_tools::deref_u32(ref, u32_offset);
|
||||
u8 vals[4];
|
||||
memcpy(vals, &u32_val, 4);
|
||||
return vals[byte & 3];
|
||||
}
|
||||
|
||||
void unpack_part1_collide_list_item(CollideListItem& item) {
|
||||
int in_idx = 0;
|
||||
int out_idx = 0;
|
||||
@@ -184,6 +199,17 @@ void find_faces(CollideListItem& item) {
|
||||
}
|
||||
}
|
||||
|
||||
void extract_pats(CollideListItem& item) {
|
||||
u32 byte_offset = 16 * item.mesh->vertex_data_qwc + item.mesh->strip_data_len;
|
||||
for (auto& f : item.unpacked.faces) {
|
||||
auto pat_idx = deref_u8(item.mesh->packed_data, byte_offset++);
|
||||
|
||||
u32 pat = level_tools::deref_u32(item.mesh->pat_array, pat_idx);
|
||||
// fmt::print("pat @ {} is 0x{:x}\n", pat_idx, pat);
|
||||
f.pat = pat;
|
||||
}
|
||||
}
|
||||
|
||||
std::string debug_dump_to_obj(const std::vector<CollideListItem>& list) {
|
||||
std::vector<math::Vector4f> verts;
|
||||
std::vector<math::Vector<u32, 3>> faces;
|
||||
@@ -191,7 +217,7 @@ std::string debug_dump_to_obj(const std::vector<CollideListItem>& list) {
|
||||
for (auto& item : list) {
|
||||
u32 f_off = verts.size() + 1;
|
||||
for (auto& f : item.unpacked.faces) {
|
||||
faces.emplace_back(f[0] + f_off, f[1] + f_off, f[2] + f_off);
|
||||
faces.emplace_back(f.verts[0] + f_off, f.verts[1] + f_off, f.verts[2] + f_off);
|
||||
}
|
||||
for (u32 t = 0; t < item.unpacked.vu0_buffer.size(); t++) {
|
||||
verts.push_back(item.unpacked.vu0_buffer[t] / 65536);
|
||||
@@ -254,6 +280,7 @@ void extract_collide_frags(const level_tools::DrawableTreeCollideFragment* tree,
|
||||
unpack_part1_collide_list_item(frag);
|
||||
unpack_part2_collide_list_item(frag);
|
||||
find_faces(frag);
|
||||
extract_pats(frag);
|
||||
total_faces += frag.unpacked.faces.size();
|
||||
}
|
||||
|
||||
@@ -266,15 +293,17 @@ void extract_collide_frags(const level_tools::DrawableTreeCollideFragment* tree,
|
||||
|
||||
for (auto& item : all_frags) {
|
||||
for (auto& f : item.unpacked.faces) {
|
||||
math::Vector4f verts[3] = {item.unpacked.vu0_buffer[f[0]], item.unpacked.vu0_buffer[f[1]],
|
||||
item.unpacked.vu0_buffer[f[2]]};
|
||||
math::Vector4f verts[3] = {item.unpacked.vu0_buffer[f.verts[0]],
|
||||
item.unpacked.vu0_buffer[f.verts[1]],
|
||||
item.unpacked.vu0_buffer[f.verts[2]]};
|
||||
tfrag3::CollisionMesh::Vertex out_verts[3];
|
||||
set_vertices_for_tri(out_verts, verts);
|
||||
for (int i = 0; i < 3; i++) {
|
||||
out_verts[i].pat = f.pat;
|
||||
out.collision.vertices.push_back(out_verts[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace decompiler
|
||||
} // namespace decompiler
|
||||
|
||||
@@ -395,6 +395,10 @@
|
||||
("sksp0064" :hint #x245 (0 "DAXTER" "WATCH YOUR BACK! YOU REMEMBER WHAT HAPPENED THE LAST TIME WE WERE HERE."))
|
||||
("sksp0067" :hint #x249 (0 "DAXTER" "DON'T FALL INTO THE MIST BELOW US! 'CAUSE I DON'T THINK WE'LL MAKE IT BACK."))
|
||||
("sksp0059" :hint #x26e (0 "DAXTER" "THIS PLACE GIVES ME THE WILLIES! LET'S KEEP YOU OUT OF THE OOZE, OKAY?"))
|
||||
("sksp0060" :hint #x26f
|
||||
(0 "DAXTER" "(WHIMPERS) THIS PLACE GIVES ME THE CREEPS! AND TRUST ME, IT'S A WHOLE NEW EXPERIENCE")
|
||||
(337 "DAXTER" "WHEN YOU'RE COVERED IN FUZZ!")
|
||||
)
|
||||
("sksp0056" :hint #x27b (0 "DAXTER" "HEY! I SEE THE SCULPTOR'S MUSE!"))
|
||||
("sksp0062" :hint #x27e (0 "DAXTER" "LET'S PLOW INTO THOSE BALLOON LURKERS AND SHRED 'EM!"))
|
||||
("sksp0063" :hint #x27f
|
||||
|
||||
@@ -290,4 +290,76 @@ void SetLod(RendererTreeType tree, int lod) {
|
||||
}
|
||||
}
|
||||
|
||||
bool CollisionRendererGetMask(GfxGlobalSettings::CollisionRendererMode mode, int mask_id) {
|
||||
int arr_idx = mask_id / 32;
|
||||
int arr_ofs = mask_id % 32;
|
||||
|
||||
switch (mode) {
|
||||
case GfxGlobalSettings::CollisionRendererMode::Mode:
|
||||
return (g_global_settings.collision_mode_mask[arr_idx] >> arr_ofs) & 1;
|
||||
case GfxGlobalSettings::CollisionRendererMode::Event:
|
||||
return (g_global_settings.collision_event_mask[arr_idx] >> arr_ofs) & 1;
|
||||
case GfxGlobalSettings::CollisionRendererMode::Material:
|
||||
return (g_global_settings.collision_material_mask[arr_idx] >> arr_ofs) & 1;
|
||||
case GfxGlobalSettings::CollisionRendererMode::Skip:
|
||||
ASSERT(arr_idx == 0);
|
||||
return (g_global_settings.collision_skip_mask >> arr_ofs) & 1;
|
||||
default:
|
||||
lg::error("{} invalid params {} {}", __PRETTY_FUNCTION__, mode, mask_id);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void CollisionRendererSetMask(GfxGlobalSettings::CollisionRendererMode mode, int mask_id) {
|
||||
int arr_idx = mask_id / 32;
|
||||
int arr_ofs = mask_id % 32;
|
||||
|
||||
switch (mode) {
|
||||
case GfxGlobalSettings::CollisionRendererMode::Mode:
|
||||
g_global_settings.collision_mode_mask[arr_idx] |= 1 << arr_ofs;
|
||||
break;
|
||||
case GfxGlobalSettings::CollisionRendererMode::Event:
|
||||
g_global_settings.collision_event_mask[arr_idx] |= 1 << arr_ofs;
|
||||
break;
|
||||
case GfxGlobalSettings::CollisionRendererMode::Material:
|
||||
g_global_settings.collision_material_mask[arr_idx] |= 1 << arr_ofs;
|
||||
break;
|
||||
case GfxGlobalSettings::CollisionRendererMode::Skip:
|
||||
ASSERT(arr_idx == 0);
|
||||
g_global_settings.collision_skip_mask |= 1 << arr_ofs;
|
||||
break;
|
||||
default:
|
||||
lg::error("{} invalid params {} {}", __PRETTY_FUNCTION__, mode, mask_id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CollisionRendererClearMask(GfxGlobalSettings::CollisionRendererMode mode, int mask_id) {
|
||||
int arr_idx = mask_id / 32;
|
||||
int arr_ofs = mask_id % 32;
|
||||
|
||||
switch (mode) {
|
||||
case GfxGlobalSettings::CollisionRendererMode::Mode:
|
||||
g_global_settings.collision_mode_mask[arr_idx] &= ~(1 << arr_ofs);
|
||||
break;
|
||||
case GfxGlobalSettings::CollisionRendererMode::Event:
|
||||
g_global_settings.collision_event_mask[arr_idx] &= ~(1 << arr_ofs);
|
||||
break;
|
||||
case GfxGlobalSettings::CollisionRendererMode::Material:
|
||||
g_global_settings.collision_material_mask[arr_idx] &= ~(1 << arr_ofs);
|
||||
break;
|
||||
case GfxGlobalSettings::CollisionRendererMode::Skip:
|
||||
ASSERT(arr_idx == 0);
|
||||
g_global_settings.collision_skip_mask &= ~(1 << arr_ofs);
|
||||
break;
|
||||
default:
|
||||
lg::error("{} invalid params {} {}", __PRETTY_FUNCTION__, mode, mask_id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CollisionRendererSetMode(GfxGlobalSettings::CollisionRendererMode mode) {
|
||||
g_global_settings.collision_mode = mode;
|
||||
}
|
||||
|
||||
} // namespace Gfx
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <array>
|
||||
|
||||
#include "common/common_types.h"
|
||||
#include "game/kernel/kboot.h"
|
||||
@@ -65,6 +66,9 @@ struct GfxSettings {
|
||||
};
|
||||
|
||||
// runtime settings
|
||||
static constexpr int PAT_MOD_COUNT = 3;
|
||||
static constexpr int PAT_EVT_COUNT = 7;
|
||||
static constexpr int PAT_MAT_COUNT = 23;
|
||||
struct GfxGlobalSettings {
|
||||
// note: this is actually the size of the display that ISN'T letterboxed
|
||||
// the excess space is what will be letterboxed away.
|
||||
@@ -77,6 +81,17 @@ struct GfxGlobalSettings {
|
||||
// lod settings, used by bucket renderers
|
||||
int lod_tfrag = 0;
|
||||
int lod_tie = 0;
|
||||
|
||||
// collision renderer settings
|
||||
bool collision_enable = false;
|
||||
bool collision_wireframe = true;
|
||||
|
||||
// matching enum in kernel-defs.gc !!
|
||||
enum CollisionRendererMode { None, Mode, Event, Material, Skip } collision_mode = Mode;
|
||||
std::array<u32, (PAT_MOD_COUNT + 31) / 32> collision_mode_mask = {UINT32_MAX};
|
||||
std::array<u32, (PAT_EVT_COUNT + 31) / 32> collision_event_mask = {UINT32_MAX};
|
||||
std::array<u32, (PAT_MAT_COUNT + 31) / 32> collision_material_mask = {UINT32_MAX};
|
||||
u32 collision_skip_mask = UINT32_MAX;
|
||||
};
|
||||
|
||||
namespace Gfx {
|
||||
@@ -119,5 +134,9 @@ int PadAnalogValue(Pad::Analog analog, int port);
|
||||
// matching enum in kernel-defs.gc !!
|
||||
enum class RendererTreeType { NONE = 0, TFRAG3 = 1, TIE3 = 2, INVALID };
|
||||
void SetLod(RendererTreeType tree, int lod);
|
||||
bool CollisionRendererGetMask(GfxGlobalSettings::CollisionRendererMode mode, int mask_id);
|
||||
void CollisionRendererSetMask(GfxGlobalSettings::CollisionRendererMode mode, int mask_id);
|
||||
void CollisionRendererClearMask(GfxGlobalSettings::CollisionRendererMode mode, int mask_id);
|
||||
void CollisionRendererSetMode(GfxGlobalSettings::CollisionRendererMode mode);
|
||||
|
||||
} // namespace Gfx
|
||||
|
||||
@@ -41,8 +41,8 @@ struct SharedRenderState {
|
||||
bool use_direct2 = true;
|
||||
math::Vector<u8, 4> fog_color;
|
||||
float fog_intensity = 1.f;
|
||||
bool no_multidraw = false;
|
||||
bool render_collision_mesh = false;
|
||||
bool no_multidraw = true;
|
||||
bool render_collision_mesh = true;
|
||||
|
||||
void reset();
|
||||
bool has_pc_data = false;
|
||||
@@ -114,4 +114,4 @@ class SkipRenderer : public BucketRenderer {
|
||||
void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override;
|
||||
bool empty() const override { return true; }
|
||||
void draw_debug_window() override {}
|
||||
};
|
||||
};
|
||||
|
||||
@@ -30,23 +30,17 @@ void CollideMeshRenderer::render(SharedRenderState* render_state, ScopedProfiler
|
||||
for (int i = 0; i < 4; i++) {
|
||||
settings.planes[i] = render_state->camera_planes[i];
|
||||
}
|
||||
glUniformMatrix4fv(
|
||||
glGetUniformLocation(render_state->shaders[ShaderId::COLLISION].id(), "camera"), 1, GL_FALSE,
|
||||
settings.math_camera.data());
|
||||
glUniform4f(glGetUniformLocation(render_state->shaders[ShaderId::COLLISION].id(), "hvdf_offset"),
|
||||
settings.hvdf_offset[0], settings.hvdf_offset[1], settings.hvdf_offset[2],
|
||||
settings.hvdf_offset[3]);
|
||||
auto shader = render_state->shaders[ShaderId::COLLISION].id();
|
||||
glUniformMatrix4fv(glGetUniformLocation(shader, "camera"), 1, GL_FALSE,
|
||||
settings.math_camera.data());
|
||||
glUniform4f(glGetUniformLocation(shader, "hvdf_offset"), settings.hvdf_offset[0],
|
||||
settings.hvdf_offset[1], settings.hvdf_offset[2], settings.hvdf_offset[3]);
|
||||
const auto& trans = render_state->camera_pos;
|
||||
glUniform4f(
|
||||
glGetUniformLocation(render_state->shaders[ShaderId::COLLISION].id(), "camera_position"),
|
||||
trans[0], trans[1], trans[2], trans[3]);
|
||||
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::COLLISION].id(), "fog_constant"),
|
||||
settings.fog.x());
|
||||
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::COLLISION].id(), "fog_min"),
|
||||
settings.fog.y());
|
||||
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::COLLISION].id(), "fog_max"),
|
||||
settings.fog.z());
|
||||
glUniform1i(glGetUniformLocation(render_state->shaders[ShaderId::COLLISION].id(), "mode"), 0);
|
||||
glUniform4f(glGetUniformLocation(shader, "camera_position"), trans[0], trans[1], trans[2],
|
||||
trans[3]);
|
||||
glUniform1f(glGetUniformLocation(shader, "fog_constant"), settings.fog.x());
|
||||
glUniform1f(glGetUniformLocation(shader, "fog_min"), settings.fog.y());
|
||||
glUniform1f(glGetUniformLocation(shader, "fog_max"), settings.fog.z());
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_GEQUAL);
|
||||
glEnable(GL_BLEND);
|
||||
@@ -58,6 +52,7 @@ void CollideMeshRenderer::render(SharedRenderState* render_state, ScopedProfiler
|
||||
glEnableVertexAttribArray(0);
|
||||
glEnableVertexAttribArray(1);
|
||||
glEnableVertexAttribArray(2);
|
||||
glEnableVertexAttribArray(3);
|
||||
glVertexAttribPointer(0, // location 0 in the shader
|
||||
3, // 3 values per vert
|
||||
GL_FLOAT, // floats
|
||||
@@ -78,20 +73,39 @@ void CollideMeshRenderer::render(SharedRenderState* render_state, ScopedProfiler
|
||||
sizeof(tfrag3::CollisionMesh::Vertex), // stride
|
||||
(void*)offsetof(tfrag3::CollisionMesh::Vertex, nx) // offset (0)
|
||||
);
|
||||
glUniform1i(glGetUniformLocation(render_state->shaders[ShaderId::COLLISION].id(), "mode"), 0);
|
||||
glVertexAttribIPointer(3, // location 3 in the shader
|
||||
1, // 3 values per vert
|
||||
GL_UNSIGNED_INT, // u32
|
||||
sizeof(tfrag3::CollisionMesh::Vertex), // stride
|
||||
(void*)offsetof(tfrag3::CollisionMesh::Vertex, pat) // offset (0)
|
||||
);
|
||||
glUniform1i(glGetUniformLocation(shader, "wireframe"), 0);
|
||||
glUniform1uiv(glGetUniformLocation(shader, "collision_mode_mask"),
|
||||
Gfx::g_global_settings.collision_mode_mask.size(),
|
||||
Gfx::g_global_settings.collision_mode_mask.data());
|
||||
glUniform1uiv(glGetUniformLocation(shader, "collision_event_mask"),
|
||||
Gfx::g_global_settings.collision_event_mask.size(),
|
||||
Gfx::g_global_settings.collision_event_mask.data());
|
||||
glUniform1uiv(glGetUniformLocation(shader, "collision_material_mask"),
|
||||
Gfx::g_global_settings.collision_material_mask.size(),
|
||||
Gfx::g_global_settings.collision_material_mask.data());
|
||||
glUniform1ui(glGetUniformLocation(shader, "collision_skip_mask"),
|
||||
Gfx::g_global_settings.collision_skip_mask);
|
||||
glUniform1i(glGetUniformLocation(shader, "mode"), Gfx::g_global_settings.collision_mode);
|
||||
glDrawArrays(GL_TRIANGLES, 0, lev->level->collision.vertices.size());
|
||||
|
||||
bool kDrawWireframe = false;
|
||||
if (kDrawWireframe) {
|
||||
glUniform1i(glGetUniformLocation(render_state->shaders[ShaderId::COLLISION].id(), "mode"), 1);
|
||||
if (Gfx::g_global_settings.collision_wireframe) {
|
||||
glUniform1i(glGetUniformLocation(shader, "wireframe"), 1);
|
||||
glDisable(GL_BLEND);
|
||||
glDepthMask(GL_FALSE);
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
glDrawArrays(GL_TRIANGLES, 0, lev->level->collision.vertices.size());
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
glEnable(GL_BLEND);
|
||||
glDepthMask(GL_TRUE);
|
||||
}
|
||||
|
||||
prof.add_draw_call();
|
||||
prof.add_tri(lev->level->collision.vertices.size() / 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -458,7 +458,8 @@ void OpenGLRenderer::dispatch_buckets(DmaFollower dma, ScopedProfilerNode& prof)
|
||||
m_category_times[(int)m_bucket_categories[bucket_id]] += bucket_prof.get_elapsed_time();
|
||||
|
||||
// hack to draw the collision mesh in the middle the drawing
|
||||
if (bucket_id == (int)BucketId::ALPHA_TEX_LEVEL0 - 1 && m_render_state.render_collision_mesh) {
|
||||
if (bucket_id == (int)BucketId::ALPHA_TEX_LEVEL0 - 1 && m_render_state.render_collision_mesh &&
|
||||
Gfx::g_global_settings.collision_enable) {
|
||||
auto p = prof.make_scoped_child("collision-draw");
|
||||
m_collide_renderer.render(&m_render_state, p);
|
||||
}
|
||||
|
||||
@@ -5,5 +5,6 @@ out vec4 color;
|
||||
in vec4 fragment_color;
|
||||
|
||||
void main() {
|
||||
if (fragment_color.a <= 0) discard;
|
||||
color = fragment_color;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
layout (location = 0) in vec3 position_in;
|
||||
layout (location = 1) in uint flags;
|
||||
layout (location = 2) in vec3 normal_in;
|
||||
layout (location = 3) in uint pat;
|
||||
|
||||
uniform vec4 hvdf_offset;
|
||||
uniform mat4 camera;
|
||||
@@ -10,10 +11,31 @@ uniform vec4 camera_position;
|
||||
uniform float fog_constant;
|
||||
uniform float fog_min;
|
||||
uniform float fog_max;
|
||||
uniform int wireframe;
|
||||
uniform int mode;
|
||||
|
||||
out vec4 fragment_color;
|
||||
|
||||
const int PAT_MOD_COUNT = 3;
|
||||
const int PAT_EVT_COUNT = 7;
|
||||
const int PAT_MAT_COUNT = 23;
|
||||
uniform uint collision_mode_mask[(PAT_MOD_COUNT + 31) / 32];
|
||||
uniform uint collision_event_mask[(PAT_EVT_COUNT + 31) / 32];
|
||||
uniform uint collision_material_mask[(PAT_MAT_COUNT + 31) / 32];
|
||||
uniform uint collision_skip_mask;
|
||||
|
||||
const int MODE_NONE = 0;
|
||||
const int MODE_MODE = 1;
|
||||
const int MODE_EVENT = 2;
|
||||
const int MODE_MATERIAL = 3;
|
||||
|
||||
uint pat_get_mode(uint p) { return (p >> 3) & 0x7; }
|
||||
uint pat_get_material(uint p) { return (p >> 6) & 0x3f; }
|
||||
uint pat_get_event(uint p) { return (p >> 14) & 0x3f; }
|
||||
|
||||
bool logtest(uint a, uint b) { return (a & b) != 0; }
|
||||
bool logtesta(uint a, uint b) { return (a & b) == b; }
|
||||
|
||||
void main() {
|
||||
// Step 3, the camera transform
|
||||
vec4 transformed = -camera[3].xyzw;
|
||||
@@ -30,9 +52,6 @@ void main() {
|
||||
// offset
|
||||
transformed.xyz += hvdf_offset.xyz;
|
||||
|
||||
// ftoi4
|
||||
//transformed.xyzw *= 16;
|
||||
|
||||
// correct xy offset
|
||||
transformed.xy -= (2048.);
|
||||
|
||||
@@ -51,17 +70,81 @@ void main() {
|
||||
// scissoring area adjust
|
||||
gl_Position.y *= 512.0/448.0;
|
||||
|
||||
vec3 to_cam = camera_position.xyz - position_in;
|
||||
float dist_from_cam = length(to_cam);
|
||||
vec3 to_cam_n = to_cam / dist_from_cam;
|
||||
float cam_dot = abs(dot(to_cam_n, normal_in));
|
||||
// wireframe check
|
||||
if (wireframe == 0) {
|
||||
// lighting check
|
||||
vec3 to_cam = camera_position.xyz - position_in;
|
||||
float dist_from_cam = length(to_cam);
|
||||
vec3 to_cam_n = to_cam / dist_from_cam;
|
||||
float cam_dot = abs(dot(to_cam_n, normal_in));
|
||||
|
||||
// color
|
||||
if (mode == 0) {
|
||||
fragment_color = vec4((normal_in + 1)*.5, 1);
|
||||
// base colors
|
||||
fragment_color = vec4(0.5, 0.6, 0.6, 1);
|
||||
fragment_color.xyz *= (pow(cam_dot, 3) + 0.3);
|
||||
|
||||
// pat checks
|
||||
uint pMode = pat_get_mode(pat);
|
||||
uint pMat = pat_get_material(pat);
|
||||
uint pEvent = pat_get_event(pat);
|
||||
if (logtest(collision_mode_mask[pMode/32], 1 << (pMode & 0x1f)) &&
|
||||
logtest(collision_material_mask[pMat/32], 1 << (pMat & 0x1f)) &&
|
||||
logtest(collision_event_mask[pEvent/32], 1 << (pEvent & 0x1f)) &&
|
||||
logtesta(collision_skip_mask, pat)) {
|
||||
// fancy colors
|
||||
if (mode == MODE_MODE) {
|
||||
switch ( pMode ) {
|
||||
case 0: fragment_color.rgb *= vec3(1.25, 0.1, 0.1); break; // ground
|
||||
case 1: fragment_color.rgb *= vec3(0.1, 0.1, 1.0); break; // wall
|
||||
case 2: fragment_color.rgb *= vec3(1.0, 0.1, 1.0); break; // obstacle
|
||||
default: fragment_color.rgb = vec3(1, 0, 1); break;
|
||||
}
|
||||
} else if (mode == MODE_EVENT) {
|
||||
switch ( pEvent ) {
|
||||
case 0: fragment_color.rgb *= vec3(1.0); break; // none
|
||||
case 1: fragment_color.rgb *= vec3(0.2, 1.0, 1.0); break; // deadly
|
||||
case 2: fragment_color.rgb *= vec3(0.1, 1.0, 0.1); break; // endlessfall
|
||||
case 3: fragment_color.rgb *= vec3(1.0, 1.0, 0.1); break; // burn
|
||||
case 4: fragment_color.rgb *= vec3(0.1, 0.1, 1.0); break; // deadlyup
|
||||
case 5: fragment_color.rgb *= vec3(1.0, 0.1, 0.5); break; // burnup
|
||||
case 6: fragment_color.rgb *= vec3(1.0, 0.1, 0.1); break; // melt
|
||||
default: fragment_color.rgb = vec3(1, 0, 1); break;
|
||||
}
|
||||
} else if (mode == MODE_MATERIAL) {
|
||||
switch ( pMat ) {
|
||||
case 0: fragment_color.rgb *= vec3(1.0, 0.7, 1.0); break; // stone
|
||||
case 1: fragment_color.rgb *= vec3(0.1, 2.0, 2.0); break; // ice
|
||||
case 2: fragment_color.rgb *= vec3(0.75, 0.25, 0.1); break; // quicksand
|
||||
case 3: fragment_color.rgb *= vec3(0.1, 0.25, 0.75); break; // waterbottom
|
||||
case 4: fragment_color.rgb *= vec3(0.5, 0.15, 0.1); break; // tar
|
||||
case 5: fragment_color.rgb *= vec3(2.0, 1.5, 0.5); break; // sand
|
||||
case 6: fragment_color.rgb *= vec3(1.5, 0.75, 0.1); break; // wood
|
||||
case 7: fragment_color.rgb *= vec3(0.1, 1.35, 0.1); break; // grass
|
||||
case 8: fragment_color.rgb *= vec3(1.7, 1.3, 0.1); break; // pcmetal
|
||||
case 9: fragment_color.rgb *= vec3(1.8); break; // snow
|
||||
case 10: fragment_color.rgb *= vec3(1.5, 0.2, 1.0); break; // deepsnow
|
||||
case 11: fragment_color.rgb *= vec3(1.2, 0.5, 0.3); break; // hotcoals
|
||||
case 12: fragment_color.rgb *= vec3(1.4, 0.1, 0.1); break; // lava
|
||||
case 13: fragment_color.rgb *= vec3(0.8, 0.3, 0.1); break; // crwood
|
||||
case 14: fragment_color.rgb *= vec3(1.0, 0.4, 1.0); break; // gravel
|
||||
case 15: fragment_color.rgb *= vec3(1.5, 0.5, 0.15); break; // dirt
|
||||
case 16: fragment_color.rgb *= vec3(0.7, 0.7, 1.0); break; // metal
|
||||
case 17: fragment_color.rgb *= vec3(0.1, 0.1, 1.2); break; // straw
|
||||
case 18: fragment_color.rgb *= vec3(0.75, 1.75, 0.75); break; // tube
|
||||
case 19: fragment_color.rgb *= vec3(0.4, 0.1, 0.8); break; // swamp
|
||||
case 20: fragment_color.rgb *= vec3(0.1, 0.4, 0.8); break; // stopproj
|
||||
case 21: fragment_color.rgb *= vec3(1.9, 0.1, 1.9); break; // rotate
|
||||
case 22: fragment_color.rgb *= vec3(1.0); break; // neutral
|
||||
default: fragment_color.rgb = vec3(1, 0, 1); break;
|
||||
}
|
||||
} else {
|
||||
fragment_color = vec4((normal_in + 1)*.5, 1);
|
||||
fragment_color.xyz *= (pow(cam_dot, 3) + 0.3);
|
||||
}
|
||||
} else {
|
||||
// filtered out. goodbye!
|
||||
fragment_color.rgba = vec4(0);
|
||||
}
|
||||
} else {
|
||||
fragment_color = vec4(0.0, 0.3, 0.3, 1);
|
||||
fragment_color = vec4(0.12, 0.12, 0.12, 0.5);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -893,8 +893,29 @@ void set_fullscreen(u32 symptr, s64 screen) {
|
||||
}
|
||||
}
|
||||
|
||||
void set_collision(u32 symptr) {
|
||||
Gfx::g_global_settings.collision_enable = symptr != s7.offset;
|
||||
}
|
||||
|
||||
void set_collision_wireframe(u32 symptr) {
|
||||
Gfx::g_global_settings.collision_wireframe = symptr != s7.offset;
|
||||
}
|
||||
|
||||
void set_collision_mask(GfxGlobalSettings::CollisionRendererMode mode, int mask, u32 symptr) {
|
||||
if (symptr != s7.offset) {
|
||||
Gfx::CollisionRendererSetMask(mode, mask);
|
||||
} else {
|
||||
Gfx::CollisionRendererClearMask(mode, mask);
|
||||
}
|
||||
}
|
||||
|
||||
u32 get_collision_mask(GfxGlobalSettings::CollisionRendererMode mode, int mask) {
|
||||
return Gfx::CollisionRendererGetMask(mode, mask) ? s7.offset + FIX_SYM_TRUE : s7.offset;
|
||||
}
|
||||
|
||||
void InitMachine_PCPort() {
|
||||
// PC Port added functions
|
||||
|
||||
make_function_symbol_from_c("__read-ee-timer", (void*)read_ee_timer);
|
||||
make_function_symbol_from_c("__mem-move", (void*)c_memmove);
|
||||
make_function_symbol_from_c("__send-gfx-dma-chain", (void*)send_gfx_dma_chain);
|
||||
@@ -919,9 +940,16 @@ void InitMachine_PCPort() {
|
||||
make_function_symbol_from_c("pc-get-fullscreen", (void*)get_fullscreen);
|
||||
make_function_symbol_from_c("pc-get-screen-size", (void*)get_screen_size);
|
||||
make_function_symbol_from_c("pc-set-window-size", (void*)Gfx::set_window_size);
|
||||
make_function_symbol_from_c("pc-set-letterbox", (void*)Gfx::set_letterbox);
|
||||
make_function_symbol_from_c("pc-set-fullscreen", (void*)set_fullscreen);
|
||||
|
||||
// graphics things
|
||||
make_function_symbol_from_c("pc-set-letterbox", (void*)Gfx::set_letterbox);
|
||||
make_function_symbol_from_c("pc-renderer-tree-set-lod", (void*)Gfx::SetLod);
|
||||
make_function_symbol_from_c("pc-set-collision-mode", (void*)Gfx::CollisionRendererSetMode);
|
||||
make_function_symbol_from_c("pc-set-collision-mask", (void*)set_collision_mask);
|
||||
make_function_symbol_from_c("pc-get-collision-mask", (void*)get_collision_mask);
|
||||
make_function_symbol_from_c("pc-set-collision-wireframe", (void*)set_collision_wireframe);
|
||||
make_function_symbol_from_c("pc-set-collision", (void*)set_collision);
|
||||
|
||||
// file related functions
|
||||
make_function_symbol_from_c("pc-filepath-exists?", (void*)filepath_exists);
|
||||
|
||||
@@ -854,7 +854,7 @@ u32 MC_check_result() {
|
||||
* The slot includes the four save slots (8 banks), and a few other files.
|
||||
*/
|
||||
void MC_get_status(s32 slot, Ptr<mc_slot_info> info) {
|
||||
ASSERT(slot == 0); // no memory cards so only allow "slot 0"!!!
|
||||
// slot is ignored, so you'll get the same thing regardless of what slot you pick
|
||||
|
||||
info->handle = 0;
|
||||
info->known = 0;
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
;; name in dgo: collide-reaction-target
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(defun collide-shape-moving-angle-set! ((arg0 collide-shape-moving) (arg1 vector) (arg2 vector))
|
||||
(set! (-> arg0 surface-normal quad) (-> arg1 quad))
|
||||
(set! (-> arg0 surface-angle) (vector-dot arg1 (-> arg0 dynam gravity-normal)))
|
||||
@@ -113,7 +115,7 @@
|
||||
)
|
||||
)
|
||||
(set! sv-32 (logior sv-32 128))
|
||||
(set! (-> arg0 unknown-dword-coverage) (-> *display* base-frame-counter))
|
||||
(set! (-> arg0 unknown-dword-coverage) (the-as int (-> *display* base-frame-counter)))
|
||||
(set! sv-40 (logior sv-40 128))
|
||||
(set! (-> arg0 unknown-dword21) (-> *display* base-frame-counter))
|
||||
(let ((f30-0 (vector-dot sv-52 (-> arg0 unknown-vector22)))
|
||||
@@ -299,7 +301,7 @@
|
||||
(set! (-> arg0 unknown-vector70 quad) (-> arg1 best-tri intersect quad))
|
||||
(set! (-> arg0 unknown-vector71 quad) (-> arg0 poly-normal quad))
|
||||
(set! (-> arg0 unknown-vector121 quad) (-> sv-84 quad))
|
||||
(set! (-> arg0 unknown-int60) (the-as uint (-> arg1 best-tri pat)))
|
||||
(set! (-> arg0 wall-pat) (-> arg1 best-tri pat))
|
||||
(-> arg0 history-data (logand (+ (-> arg0 unknown-halfword00) 127) 127))
|
||||
(cond
|
||||
(#f
|
||||
@@ -320,7 +322,7 @@
|
||||
)
|
||||
)
|
||||
(and (< 0.0 (vector-dot (-> arg0 ground-poly-normal) arg2))
|
||||
(< (- (-> *display* base-frame-counter) (-> arg0 unknown-dword10)) 90)
|
||||
(< (- (-> *display* base-frame-counter) (-> arg0 unknown-dword10)) (seconds 0.3))
|
||||
(zero? (logand sv-104 32))
|
||||
)
|
||||
)
|
||||
@@ -375,8 +377,6 @@
|
||||
(the-as uint sv-96)
|
||||
)
|
||||
|
||||
;; definition for function target-collision-no-reaction
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun target-collision-no-reaction ((arg0 control-info) (arg1 collide-shape-intersect) (arg2 vector) (arg3 vector))
|
||||
(if (= (-> arg0 unknown-surface00 mode) 'air)
|
||||
(logior! (-> arg0 reaction-flag) 32)
|
||||
@@ -388,4 +388,8 @@
|
||||
(set! (-> arg0 unknown-halfword00) (logand (+ (-> arg0 unknown-halfword00) 1) 127))
|
||||
0
|
||||
(none)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
(unknown-vector120 vector :inline :offset 18928) ;; from target::(code target-running-attack)
|
||||
(unknown-float150 float :offset 18944) ;; from target::(code target-wheel-flip)
|
||||
(unknown-vector121 vector :inline :offset 18960) ;; from target collide response
|
||||
(unknown-int60 uint32 :offset 18976) ;; from logic-target::print-target-stats
|
||||
(wall-pat pat-surface :offset 18976) ;; pat information for wall-check collision
|
||||
(unknown-soundid00 sound-id :offset 18980) ;; from powerups::target-powerup-process
|
||||
(unknown-float141 float :offset 18984) ;; from powerups::target-powerup-process
|
||||
)
|
||||
|
||||
@@ -4253,6 +4253,99 @@
|
||||
))
|
||||
)
|
||||
|
||||
(defun dm-toggle-collision-pick-func ((arg symbol) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(cond
|
||||
((-> arg value)
|
||||
(false! (-> arg value))
|
||||
(logior! *vu1-enable-user-menu* (vu1-renderer-mask tfrag trans-tfrag tie tie-near))
|
||||
(false! *generic-tie*)
|
||||
)
|
||||
(else
|
||||
(true! (-> arg value))
|
||||
(logclear! *vu1-enable-user-menu* (vu1-renderer-mask tfrag trans-tfrag tie tie-near))
|
||||
(true! *generic-tie*)
|
||||
)
|
||||
)
|
||||
)
|
||||
(-> arg value)
|
||||
)
|
||||
|
||||
(defun dm-collision-mode-pick-func ((arg pc-collision-mode) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(set! *collision-mode* arg)
|
||||
)
|
||||
(= *collision-mode* arg)
|
||||
)
|
||||
|
||||
(defun dm-collision-filter-mode-pick-func ((arg int) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(pc-set-collision-mask (pc-collision-mode mode) arg (not (pc-get-collision-mask (pc-collision-mode mode) arg)))
|
||||
)
|
||||
(pc-get-collision-mask (pc-collision-mode mode) arg)
|
||||
)
|
||||
|
||||
(defun dm-collision-filter-event-pick-func ((arg int) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(pc-set-collision-mask (pc-collision-mode event) arg (not (pc-get-collision-mask (pc-collision-mode event) arg)))
|
||||
)
|
||||
(pc-get-collision-mask (pc-collision-mode event) arg)
|
||||
)
|
||||
|
||||
(defun dm-collision-filter-material-pick-func ((arg int) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(pc-set-collision-mask (pc-collision-mode material) arg (not (pc-get-collision-mask (pc-collision-mode material) arg)))
|
||||
)
|
||||
(pc-get-collision-mask (pc-collision-mode material) arg)
|
||||
)
|
||||
|
||||
(defun dm-collision-filter-skip-pick-func ((arg int) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(pc-set-collision-mask (pc-collision-mode skip) arg (not (pc-get-collision-mask (pc-collision-mode skip) arg)))
|
||||
)
|
||||
(pc-get-collision-mask (pc-collision-mode skip) arg)
|
||||
)
|
||||
|
||||
(defun debug-menu-make-collision-renderer-menu ((ctx debug-menu-context))
|
||||
(let ((menu (new 'debug 'debug-menu ctx "Collision renderer menu")))
|
||||
;; master toggle
|
||||
(debug-menu-append-item menu (new-dm-bool "Enable" *collision-renderer* dm-toggle-collision-pick-func))
|
||||
(debug-menu-append-item menu (new-dm-bool "Wireframe" *collision-wireframe* dm-boolean-toggle-pick-func))
|
||||
(debug-menu-append-item menu (new-dm-submenu "Mode"
|
||||
(let ((mode-menu (new 'debug 'debug-menu ctx "Collision renderer mode menu")))
|
||||
(doenum (name val pc-collision-mode)
|
||||
(debug-menu-append-item mode-menu (new-dm-flag name val dm-collision-mode-pick-func))
|
||||
)
|
||||
mode-menu)))
|
||||
(debug-menu-append-item menu (new-dm-submenu "Filter mode"
|
||||
(let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter mode menu")))
|
||||
(doenum (name val pat-mode)
|
||||
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-mode-pick-func))
|
||||
)
|
||||
filter-menu)))
|
||||
(debug-menu-append-item menu (new-dm-submenu "Filter event"
|
||||
(let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter event menu")))
|
||||
(doenum (name val pat-event)
|
||||
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-event-pick-func))
|
||||
)
|
||||
filter-menu)))
|
||||
(debug-menu-append-item menu (new-dm-submenu "Filter material"
|
||||
(let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter material menu")))
|
||||
(doenum (name val pat-material)
|
||||
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-material-pick-func))
|
||||
)
|
||||
filter-menu)))
|
||||
(debug-menu-append-item menu (new-dm-submenu "Filter skip"
|
||||
(let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter skip menu")))
|
||||
(doenum (name val pc-pat-skip-hack)
|
||||
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-skip-pick-func))
|
||||
)
|
||||
filter-menu)))
|
||||
|
||||
(new-dm-submenu "Collision renderer" menu)
|
||||
)
|
||||
)
|
||||
|
||||
(defun dm-lod-int ((arg0 int) (arg1 debug-menu-msg) (arg2 int) (arg3 int))
|
||||
(when (= arg1 (debug-menu-msg press))
|
||||
(case (/ arg0 8)
|
||||
@@ -4450,11 +4543,11 @@
|
||||
(flag "Update vis outside bsp" *update-leaf-when-outside-bsp* dm-boolean-toggle-pick-func)
|
||||
(flag "Pad display" #f ,(dm-lambda-boolean-flag (-> *pc-settings* debug-pad-display)))
|
||||
(flag "Display actor bank" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-actor-bank)))
|
||||
(flag "Heap status" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-heap-status)))
|
||||
(flag "Bug report" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-bug-report)))
|
||||
(flag "Text boxes" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-text-box)))
|
||||
(float-var "Actor birth dist" #f ,(dm-lambda-meters-var (-> *ACTOR-bank* birth-dist)) 20 1 #t 0 10000 1)
|
||||
(float-var "Actor pause dist" #f ,(dm-lambda-meters-var (-> *ACTOR-bank* pause-dist)) 20 1 #t 0 10000 1)
|
||||
(flag "Heap status" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-heap-status)))
|
||||
(flag "Text boxes" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-text-box)))
|
||||
(flag "Bug report" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-bug-report)))
|
||||
(menu "Mood override"
|
||||
(function "-- SIMPLE OVERRIDE" #f nothing)
|
||||
(flag "Palette 0" 0 dm-mood-override-palette-pick-func)
|
||||
@@ -4495,6 +4588,10 @@
|
||||
|
||||
(debug-menu-append-item (-> *debug-menu-context* root-menu) other-menu-node)
|
||||
)
|
||||
|
||||
(debug-menu-append-item (-> (the debug-menu-item-submenu (caddddr (-> *debug-menu-context* root-menu items))) submenu)
|
||||
(debug-menu-make-collision-renderer-menu *debug-menu-context*))
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
@@ -1936,11 +1936,21 @@
|
||||
(cond
|
||||
;; some water-height info
|
||||
((and (= (-> e tag i name) 'water-height) (= (-> e tag i elt-count) 4) (= (-> e tag i elt-type) float))
|
||||
(format *debug-temp-string* " ~mm ~mm ~mm ~f"
|
||||
(format *debug-temp-string* " ~mm ~mm ~mm #x~X"
|
||||
(-> (the (pointer float) data) 0)
|
||||
(-> (the (pointer float) data) 1)
|
||||
(-> (the (pointer float) data) 2)
|
||||
(-> (the (pointer float) data) 3)
|
||||
(-> (the (pointer uint32) data) 3)
|
||||
)
|
||||
)
|
||||
;; some water-height info but with 5 elts
|
||||
((and (= (-> e tag i name) 'water-height) (= (-> e tag i elt-count) 4) (= (-> e tag i elt-type) float))
|
||||
(format *debug-temp-string* " ~mm ~mm ~mm #x~X ~mm"
|
||||
(-> (the (pointer float) data) 0)
|
||||
(-> (the (pointer float) data) 1)
|
||||
(-> (the (pointer float) data) 2)
|
||||
(-> (the (pointer uint32) data) 3)
|
||||
(-> (the (pointer float) data) 4)
|
||||
)
|
||||
)
|
||||
;; music flava (music ambients)
|
||||
|
||||
@@ -5,575 +5,464 @@
|
||||
;; name in dgo: hint-control
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
;; failed to figure out what this is:
|
||||
(set!
|
||||
(-> *game-info* hint-control)
|
||||
(the-as
|
||||
(array level-hint-control)
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type level-hint-control :length 25 :allocated-length 25
|
||||
(new 'static 'level-hint-control
|
||||
:id #x917
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 3
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x90a
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x284
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing 3
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x285
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x251
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x2af
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x384
|
||||
:id #x239
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x5dc
|
||||
:id #x29d
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x384
|
||||
:id #x25b
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x2a4
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x384
|
||||
:id #x2aa
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x5dc
|
||||
:id #x33a
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x1194
|
||||
:id #x34b
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing 2
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x4650
|
||||
:id #x34a
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x34d
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x345
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing 2
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x352
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x2328
|
||||
:id #x347
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x34e
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x444
|
||||
:num-attempts-before-playing 5
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x384
|
||||
:id #x438
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x433
|
||||
:num-attempts-before-playing 4
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id #x70d
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 2
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x5dc
|
||||
:id #x806
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing #x5dc
|
||||
:id #x809
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
;; DECOMP BEGINS
|
||||
|
||||
;; failed to figure out what this is:
|
||||
(set!
|
||||
(-> *game-info* task-hint-control)
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control-group :length 16 :allocated-length 16
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 3 :allocated-length 3
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task training-gimmie)
|
||||
:delay #x2bf20
|
||||
(set! (-> *game-info* hint-control) (new
|
||||
'static
|
||||
'boxed-array
|
||||
:type level-hint-control :length 25 :allocated-length 25
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id sage-voicebox-hint-crate-iron)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 3
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id training-more-eco-more-time)
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id sidekick-speech-hint-crate-iron)
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing 3
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id sidekick-speech-hint-crate-steel)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id sidekick-hint-orb-cache-top)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id beach-grottopole-increment)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 3)
|
||||
:id (game-text-id beach-eco-rock-increment)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 5)
|
||||
:id
|
||||
(game-text-id jungle-mirrors-break-the-mirror-jak)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 3)
|
||||
:id
|
||||
(game-text-id jungle-precursorbridge-hint)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id misty-teetertotter-bonk-dax-tutorial)
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 3)
|
||||
:id (game-text-id misty-bone-bridge-hint)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 5)
|
||||
:id (game-text-id rolling-dark-plants-hint)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 15)
|
||||
:id (game-text-id sunken-bully-dive-hint)
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing 2
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 60)
|
||||
:id (game-text-id sunken-qbert-plat-hint)
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id sunken-blue-eco-charger-all-hint)
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id sunken-blue-eco-charger-hint)
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing 2
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id swamp-tethers-advice-hint)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 30)
|
||||
:id
|
||||
(game-text-id sunken-double-lurker-hint)
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id sunken-take-it-easy-hot-pipes)
|
||||
:num-attempts-before-playing 3
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id (game-text-id ram-boss-red-eco-hint)
|
||||
:num-attempts-before-playing 5
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 3)
|
||||
:id
|
||||
(game-text-id darkcave-light-crystal-hint)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id daxter-maybe-you-can-shoot-better-goggles)
|
||||
:num-attempts-before-playing 4
|
||||
:num-success-before-killing -1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:id
|
||||
(game-text-id lavatube-shoot-the-spheres)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 2
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 5)
|
||||
:id
|
||||
(game-text-id citadel-break-generator-hint)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
(new 'static 'level-hint-control
|
||||
:delay-before-playing (seconds 5)
|
||||
:id
|
||||
(game-text-id citadel-break-generators-reminder)
|
||||
:num-attempts-before-playing 1
|
||||
:num-success-before-killing 1
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(set! (-> *game-info* task-hint-control)
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control-group :length 16 :allocated-length 16
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 3 :allocated-length 3
|
||||
(new 'static 'task-hint-control :task (game-task training-gimmie) :delay (seconds 600))
|
||||
(new 'static 'task-hint-control :task (game-task training-door) :delay (seconds 1200))
|
||||
(new 'static 'task-hint-control :task (game-task training-climb) :delay (seconds 1800))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 3 :allocated-length 3
|
||||
(new 'static 'task-hint-control :task (game-task beach-gimmie) :delay (seconds 900))
|
||||
(new 'static 'task-hint-control :task (game-task beach-sentinel) :delay (seconds 1800))
|
||||
(new 'static 'task-hint-control :task (game-task beach-cannon) :delay (seconds 2700))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 2 :allocated-length 2
|
||||
(new 'static 'task-hint-control :task (game-task jungle-plant) :delay (seconds 1200))
|
||||
(new 'static 'task-hint-control :task (game-task jungle-canyon-end) :delay (seconds 2400))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 4 :allocated-length 4
|
||||
(new 'static 'task-hint-control :task (game-task misty-boat) :delay (seconds 1200))
|
||||
(new 'static 'task-hint-control :task (game-task misty-warehouse) :delay (seconds 1800))
|
||||
(new 'static 'task-hint-control :task (game-task misty-bike-jump) :delay (seconds 2400))
|
||||
(new 'static 'task-hint-control :task (game-task misty-eco-challenge) :delay (seconds 3000))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group)
|
||||
(new 'static 'task-hint-control-group)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 3 :allocated-length 3
|
||||
(new 'static 'task-hint-control :task (game-task sunken-spinning-room) :delay (seconds 1200))
|
||||
(new 'static 'task-hint-control :task (game-task sunken-sharks) :delay (seconds 1800))
|
||||
(new 'static 'task-hint-control :task (game-task sunken-slide) :delay (seconds 2400))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 1 :allocated-length 1
|
||||
(new 'static 'task-hint-control :task (game-task swamp-battle) :delay (seconds 2400))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 1 :allocated-length 1
|
||||
(new 'static 'task-hint-control :task (game-task rolling-lake) :delay (seconds 2400))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 1 :allocated-length 1
|
||||
(new 'static 'task-hint-control :task (game-task ogre-secret) :delay (seconds 3600))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 1 :allocated-length 1
|
||||
(new 'static 'task-hint-control :task (game-task village3-extra1) :delay (seconds 3600))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 4 :allocated-length 4
|
||||
(new 'static 'task-hint-control :task (game-task snow-bumpers) :delay (seconds 1200))
|
||||
(new 'static 'task-hint-control :task (game-task snow-cage) :delay (seconds 1800))
|
||||
(new 'static 'task-hint-control :task (game-task snow-ball) :delay (seconds 2400))
|
||||
(new 'static 'task-hint-control :task (game-task snow-bunnies) :delay (seconds 3000))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 4 :allocated-length 4
|
||||
(new 'static 'task-hint-control :task (game-task cave-dark-climb) :delay (seconds 1200))
|
||||
(new 'static 'task-hint-control :task (game-task cave-robot-climb) :delay (seconds 1800))
|
||||
(new 'static 'task-hint-control :task (game-task cave-swing-poles) :delay (seconds 2400))
|
||||
(new 'static 'task-hint-control :task (game-task cave-platforms) :delay (seconds 3000))
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group)
|
||||
(new 'static 'task-hint-control-group)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task training-door)
|
||||
:delay #x57e40
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task training-climb)
|
||||
:delay #x83d60
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 3 :allocated-length 3
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task beach-gimmie)
|
||||
:delay #x41eb0
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task beach-sentinel)
|
||||
:delay #x83d60
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task beach-cannon)
|
||||
:delay #xc5c10
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 2 :allocated-length 2
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task jungle-plant)
|
||||
:delay #x57e40
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task jungle-canyon-end)
|
||||
:delay #xafc80
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 4 :allocated-length 4
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task misty-boat)
|
||||
:delay #x57e40
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task misty-warehouse)
|
||||
:delay #x83d60
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task misty-bike-jump)
|
||||
:delay #xafc80
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task misty-eco-challenge)
|
||||
:delay #xdbba0
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group)
|
||||
(new 'static 'task-hint-control-group)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 3 :allocated-length 3
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task sunken-spinning-room)
|
||||
:delay #x57e40
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task sunken-sharks)
|
||||
:delay #x83d60
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task sunken-slide)
|
||||
:delay #xafc80
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 1 :allocated-length 1
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task swamp-battle)
|
||||
:delay #xafc80
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 1 :allocated-length 1
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task rolling-lake)
|
||||
:delay #xafc80
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 1 :allocated-length 1
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task ogre-secret)
|
||||
:delay #x107ac0
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 1 :allocated-length 1
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task village3-extra1)
|
||||
:delay #x107ac0
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 4 :allocated-length 4
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task snow-bumpers)
|
||||
:delay #x57e40
|
||||
)
|
||||
(new 'static 'task-hint-control :task (game-task snow-cage) :delay #x83d60)
|
||||
(new 'static 'task-hint-control :task (game-task snow-ball) :delay #xafc80)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task snow-bunnies)
|
||||
:delay #xdbba0
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group
|
||||
:tasks
|
||||
(new
|
||||
'static
|
||||
'boxed-array
|
||||
:type task-hint-control :length 4 :allocated-length 4
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task cave-dark-climb)
|
||||
:delay #x57e40
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task cave-robot-climb)
|
||||
:delay #x83d60
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task cave-swing-poles)
|
||||
:delay #xafc80
|
||||
)
|
||||
(new 'static 'task-hint-control
|
||||
:task (game-task cave-platforms)
|
||||
:delay #xdbba0
|
||||
)
|
||||
)
|
||||
)
|
||||
(new 'static 'task-hint-control-group)
|
||||
(new 'static 'task-hint-control-group)
|
||||
)
|
||||
)
|
||||
|
||||
;; definition for function find-hint-control-index
|
||||
(defun find-hint-control-index ((arg0 game-text-id))
|
||||
(let ((gp-0 -1))
|
||||
(let ((v1-2 (length (-> *game-info* hint-control))))
|
||||
(dotimes (a0-2 v1-2)
|
||||
(when (= (-> *game-info* hint-control a0-2 id) arg0)
|
||||
(set! gp-0 a0-2)
|
||||
(set! a0-2 v1-2)
|
||||
(let ((v1-2 (length (-> *game-info* hint-control))))
|
||||
(dotimes (a0-2 v1-2)
|
||||
(when (= (-> *game-info* hint-control a0-2 id) arg0)
|
||||
(set! gp-0 a0-2)
|
||||
(set! a0-2 v1-2)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
gp-0
|
||||
)
|
||||
gp-0
|
||||
)
|
||||
)
|
||||
|
||||
;; definition for function start-hint-timer
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun start-hint-timer ((arg0 game-text-id))
|
||||
(let ((v1-0 (find-hint-control-index arg0)))
|
||||
(when
|
||||
(and
|
||||
(>= v1-0 0)
|
||||
(zero? (-> *game-info* hint-control v1-0 start-time))
|
||||
(!= (-> *game-info* hint-control v1-0 num-attempts-before-playing) 1)
|
||||
)
|
||||
(set!
|
||||
(-> *game-info* hint-control v1-0 start-time)
|
||||
(-> *display* base-frame-counter)
|
||||
)
|
||||
0
|
||||
(when (and (>= v1-0 0)
|
||||
(zero? (-> *game-info* hint-control v1-0 start-time))
|
||||
(!= (-> *game-info* hint-control v1-0 num-attempts-before-playing) 1)
|
||||
)
|
||||
(set! (-> *game-info* hint-control v1-0 start-time) (-> *display* base-frame-counter))
|
||||
0
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function increment-success-for-hint
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun increment-success-for-hint ((arg0 game-text-id))
|
||||
(let ((gp-0 (find-hint-control-index arg0)))
|
||||
(when (>= gp-0 0)
|
||||
(set!
|
||||
(-> *game-info* hint-control gp-0 num-success)
|
||||
(seekl (-> *game-info* hint-control gp-0 num-success) 127 1)
|
||||
)
|
||||
0
|
||||
(when (>= gp-0 0)
|
||||
(seekl! (-> *game-info* hint-control gp-0 num-success) 127 1)
|
||||
0
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function can-hint-be-played?
|
||||
;; WARN: disable def twice: 139. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
|
||||
(defun can-hint-be-played? ((arg0 game-text-id) (arg1 entity) (arg2 string))
|
||||
(let ((v1-0 (not (str-is-playing?))))
|
||||
(if (and v1-0 (nonzero? arg0))
|
||||
(set! v1-0 (not (seen-text? *game-info* arg0)))
|
||||
)
|
||||
(when v1-0
|
||||
(when *hint-semaphore*
|
||||
(set!
|
||||
v1-0
|
||||
(appeared-for-long-enough? (the-as level-hint (ppointer->process *hint-semaphore*)))
|
||||
)
|
||||
0
|
||||
)
|
||||
(when
|
||||
(and
|
||||
v1-0
|
||||
(<
|
||||
(- (-> *display* base-frame-counter) (-> *game-info* hint-play-time))
|
||||
30
|
||||
)
|
||||
)
|
||||
(set! v1-0 #f)
|
||||
0
|
||||
)
|
||||
(set!
|
||||
v1-0
|
||||
(and
|
||||
v1-0
|
||||
(not (-> *setting-control* current talking))
|
||||
(not (-> *setting-control* current spooling))
|
||||
(not (-> *setting-control* current hint))
|
||||
(not (-> *setting-control* current ambient))
|
||||
(>= (-> *display* base-frame-counter) (-> *game-info* blackout-time))
|
||||
)
|
||||
)
|
||||
0
|
||||
)
|
||||
(cond
|
||||
(v1-0
|
||||
(let ((v1-16 (find-hint-control-index arg0)))
|
||||
(cond
|
||||
((< v1-16 0)
|
||||
#t
|
||||
(if (and v1-0 (nonzero? arg0))
|
||||
(set! v1-0 (not (seen-text? *game-info* arg0)))
|
||||
)
|
||||
(else
|
||||
(let ((gp-1 (-> *game-info* hint-control v1-16))
|
||||
(a0-24
|
||||
(-
|
||||
(-> *display* base-frame-counter)
|
||||
(-> *game-info* hint-control v1-16 last-time-called)
|
||||
)
|
||||
)
|
||||
(v1-21 #t)
|
||||
)
|
||||
(if (and (= (-> gp-1 num-attempts-before-playing) 1) (< a0-24 30))
|
||||
(+! (-> gp-1 start-time) a0-24)
|
||||
)
|
||||
(cond
|
||||
((and
|
||||
(!= (-> gp-1 num-attempts-before-playing) 1)
|
||||
(nonzero? (-> gp-1 last-time-called))
|
||||
(<
|
||||
(- (-> *display* base-frame-counter) (-> gp-1 last-time-called))
|
||||
150
|
||||
)
|
||||
(when v1-0
|
||||
(when *hint-semaphore*
|
||||
(set! v1-0 (appeared-for-long-enough? (the-as level-hint (ppointer->process *hint-semaphore*))))
|
||||
0
|
||||
)
|
||||
(when (and v1-0 (< (- (-> *display* base-frame-counter) (-> *game-info* hint-play-time)) (seconds 0.1)))
|
||||
(set! v1-0 #f)
|
||||
0
|
||||
)
|
||||
(set! v1-0 (and v1-0
|
||||
(not (-> *setting-control* current talking))
|
||||
(not (-> *setting-control* current spooling))
|
||||
(not (-> *setting-control* current hint))
|
||||
(not (-> *setting-control* current ambient))
|
||||
(>= (-> *display* base-frame-counter) (-> *game-info* blackout-time))
|
||||
)
|
||||
)
|
||||
(set! (-> gp-1 last-time-called) (-> *display* base-frame-counter))
|
||||
#f
|
||||
)
|
||||
(else
|
||||
(set! (-> gp-1 last-time-called) (-> *display* base-frame-counter))
|
||||
(when (nonzero? (-> gp-1 delay-before-playing))
|
||||
(if
|
||||
(<
|
||||
(-> gp-1 start-time)
|
||||
(the-as int (-> gp-1 delay-before-playing))
|
||||
)
|
||||
(set! v1-21 #f)
|
||||
)
|
||||
0
|
||||
)
|
||||
(cond
|
||||
(v1-21
|
||||
(set! (-> gp-1 num-attempts) (seekl (-> gp-1 num-attempts) 127 1))
|
||||
(and
|
||||
(>= (-> gp-1 num-attempts) (-> gp-1 num-attempts-before-playing))
|
||||
(or
|
||||
(= (-> gp-1 num-success-before-killing) -1)
|
||||
(< (-> gp-1 num-success) (-> gp-1 num-success-before-killing))
|
||||
)
|
||||
)
|
||||
0
|
||||
)
|
||||
(cond
|
||||
(v1-0
|
||||
(let ((v1-16 (find-hint-control-index arg0)))
|
||||
(cond
|
||||
((< v1-16 0)
|
||||
#t
|
||||
)
|
||||
(else
|
||||
#f
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(else
|
||||
#f
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; definition for function reset-all-hint-controls
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun reset-all-hint-controls ()
|
||||
(let ((v1-2 (length (-> *game-info* hint-control))))
|
||||
(dotimes (a0-1 v1-2)
|
||||
(let ((a1-2 (-> *game-info* hint-control a0-1)))
|
||||
(set! (-> a1-2 start-time) 0)
|
||||
(set! (-> a1-2 last-time-called) 0)
|
||||
(set! (-> a1-2 num-attempts) 0)
|
||||
(set! (-> a1-2 num-success) 0)
|
||||
)
|
||||
0
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function update-task-hints
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun update-task-hints ()
|
||||
(when *target*
|
||||
(let ((a0-0 (+ (-> *target* current-level info index) -1))
|
||||
(v1-7 (-> *game-info* task-hint-control))
|
||||
)
|
||||
(when (and (>= a0-0 0) (< a0-0 (-> *level-task-data-remap* length)))
|
||||
(let ((a0-3 (-> *level-task-data-remap* a0-0)))
|
||||
(when (< a0-3 (-> v1-7 length))
|
||||
(let ((gp-0 (-> v1-7 a0-3 tasks)))
|
||||
(when (and (!= gp-0 0) (nonzero? (-> gp-0 length)))
|
||||
(let ((s5-0 (-> *game-info* in-level-time a0-3)))
|
||||
(dotimes (s4-0 (-> gp-0 length))
|
||||
(case (get-task-status (-> gp-0 s4-0 task))
|
||||
(((task-status need-hint) (task-status unknown))
|
||||
(if (< (the-as uint (-> gp-0 s4-0 delay)) (the-as uint s5-0))
|
||||
(close-specific-task!
|
||||
(-> gp-0 s4-0 task)
|
||||
(task-status need-hint)
|
||||
(let ((gp-1 (-> *game-info* hint-control v1-16))
|
||||
(a0-24 (- (-> *display* base-frame-counter) (-> *game-info* hint-control v1-16 last-time-called)))
|
||||
(v1-21 #t)
|
||||
)
|
||||
(if (and (= (-> gp-1 num-attempts-before-playing) 1) (< a0-24 (seconds 0.1)))
|
||||
(+! (-> gp-1 start-time) a0-24)
|
||||
)
|
||||
(cond
|
||||
((and (!= (-> gp-1 num-attempts-before-playing) 1)
|
||||
(nonzero? (-> gp-1 last-time-called))
|
||||
(< (- (-> *display* base-frame-counter) (-> gp-1 last-time-called)) (seconds 0.5))
|
||||
)
|
||||
(set! (-> gp-1 last-time-called) (-> *display* base-frame-counter))
|
||||
#f
|
||||
)
|
||||
(else
|
||||
(set! (-> gp-1 last-time-called) (-> *display* base-frame-counter))
|
||||
(when (nonzero? (-> gp-1 delay-before-playing))
|
||||
(if (< (-> gp-1 start-time) (-> gp-1 delay-before-playing))
|
||||
(set! v1-21 #f)
|
||||
)
|
||||
0
|
||||
)
|
||||
(cond
|
||||
(v1-21
|
||||
(seekl! (-> gp-1 num-attempts) 127 1)
|
||||
(and (>= (-> gp-1 num-attempts) (-> gp-1 num-attempts-before-playing))
|
||||
(or (= (-> gp-1 num-success-before-killing) -1)
|
||||
(< (-> gp-1 num-success) (-> gp-1 num-success-before-killing))
|
||||
)
|
||||
)
|
||||
)
|
||||
(else
|
||||
#f
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(else
|
||||
#f
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defun reset-all-hint-controls ()
|
||||
(let ((v1-2 (length (-> *game-info* hint-control))))
|
||||
(dotimes (a0-1 v1-2)
|
||||
(let ((a1-2 (-> *game-info* hint-control a0-1)))
|
||||
(set! (-> a1-2 start-time) 0)
|
||||
(set! (-> a1-2 last-time-called) 0)
|
||||
(set! (-> a1-2 num-attempts) 0)
|
||||
(set! (-> a1-2 num-success) 0)
|
||||
)
|
||||
0
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
(defun update-task-hints ()
|
||||
(when *target*
|
||||
(let ((a0-0 (+ (-> *target* current-level info index) -1))
|
||||
(v1-7 (-> *game-info* task-hint-control))
|
||||
)
|
||||
(when (and (>= a0-0 0) (< a0-0 (-> *level-task-data-remap* length)))
|
||||
(let ((a0-3 (-> *level-task-data-remap* a0-0)))
|
||||
(when (< a0-3 (-> v1-7 length))
|
||||
(let ((gp-0 (-> v1-7 a0-3 tasks)))
|
||||
(when (and (!= gp-0 0) (nonzero? (-> gp-0 length)))
|
||||
(let ((s5-0 (-> *game-info* in-level-time a0-3)))
|
||||
(dotimes (s4-0 (-> gp-0 length))
|
||||
(case (get-task-status (-> gp-0 s4-0 task))
|
||||
(((task-status need-hint) (task-status unknown))
|
||||
(if (< (the-as uint (-> gp-0 s4-0 delay)) (the-as uint s5-0))
|
||||
(close-specific-task! (-> gp-0 s4-0 task) (task-status need-hint))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
(shrub-near 12)
|
||||
(billboard 13)
|
||||
(trans-shrubbery 14)
|
||||
(trans-frag 15)
|
||||
(trans-tfrag 15)
|
||||
(sprite 16)
|
||||
(shadow 17)
|
||||
(depth-cue 18)
|
||||
@@ -45,7 +45,7 @@
|
||||
shrub-near
|
||||
billboard
|
||||
trans-shrubbery
|
||||
trans-frag
|
||||
trans-tfrag
|
||||
sprite
|
||||
shadow
|
||||
depth-cue
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
(a0-37 int)
|
||||
(sv-16 (pointer uint8))
|
||||
)
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(let ((s5-0 (+ (-> arg0 length) -1)))
|
||||
#| TODO
|
||||
(when (nonzero? s5-0)
|
||||
@@ -375,7 +375,7 @@
|
||||
(a0-37 int)
|
||||
(sv-16 (pointer uint8))
|
||||
)
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(let ((s5-0 (+ (-> arg0 length) -1)))
|
||||
#| TODO
|
||||
(when (nonzero? s5-0)
|
||||
@@ -550,7 +550,7 @@
|
||||
(a0-37 int)
|
||||
(sv-16 (pointer uint8))
|
||||
)
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(let ((s5-0 (+ (-> arg0 length) -1)))
|
||||
#| TODO
|
||||
(when (nonzero? s5-0)
|
||||
@@ -850,9 +850,9 @@
|
||||
;; INFO: Return type mismatch drawable-tree-trans-tfrag vs none.
|
||||
;; Used lq/sq
|
||||
(defmethod collect-stats drawable-tree-trans-tfrag ((obj drawable-tree-trans-tfrag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag))))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag))))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag-near) (-> *terrain-stats* trans-tfrag-near))
|
||||
(let ((v1-12 (-> *tfrag-work* frag-dists quad)))
|
||||
@@ -869,9 +869,9 @@
|
||||
;; INFO: Return type mismatch drawable-tree-lowres-trans-tfrag vs none.
|
||||
;; Used lq/sq
|
||||
(defmethod collect-stats drawable-tree-lowres-trans-tfrag ((obj drawable-tree-lowres-trans-tfrag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag))))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag))))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag-near) (-> *terrain-stats* trans-tfrag-near))
|
||||
(let ((v1-12 (-> *tfrag-work* frag-dists quad)))
|
||||
@@ -888,9 +888,9 @@
|
||||
;; INFO: Return type mismatch drawable-tree-dirt-tfrag vs none.
|
||||
;; Used lq/sq
|
||||
(defmethod collect-stats drawable-tree-dirt-tfrag ((obj drawable-tree-dirt-tfrag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag))))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag))))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag-near) (-> *terrain-stats* trans-tfrag-near))
|
||||
(let ((v1-12 (-> *tfrag-work* frag-dists quad)))
|
||||
@@ -907,9 +907,9 @@
|
||||
;; INFO: Return type mismatch drawable-tree-ice-tfrag vs none.
|
||||
;; Used lq/sq
|
||||
(defmethod collect-stats drawable-tree-ice-tfrag ((obj drawable-tree-ice-tfrag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag))))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near) (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag))))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag-near) (-> *terrain-stats* trans-tfrag-near))
|
||||
(let ((v1-12 (-> *tfrag-work* frag-dists quad)))
|
||||
@@ -940,7 +940,7 @@
|
||||
;; definition for method 14 of type drawable-inline-array-trans-tfrag
|
||||
;; INFO: Return type mismatch drawable-inline-array-trans-tfrag vs none.
|
||||
(defmethod collect-stats drawable-inline-array-trans-tfrag ((obj drawable-inline-array-trans-tfrag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(dotimes (s5-0 (-> obj length))
|
||||
(let ((s4-0 (-> obj data s5-0)))
|
||||
(if (vis-cull (-> s4-0 id))
|
||||
|
||||
@@ -302,11 +302,11 @@
|
||||
(let ((s4-2 format)
|
||||
(s3-2 arg1)
|
||||
(s2-2 "~0kwall:~6X mode:~-8S material:~-10S event:~S~%")
|
||||
(s1-2 (-> arg0 control unknown-int60))
|
||||
(s0-2 (pat-mode->string (the-as pat-surface (-> arg0 control unknown-int60))))
|
||||
(s1-2 (-> arg0 control wall-pat))
|
||||
(s0-2 (pat-mode->string (-> arg0 control wall-pat)))
|
||||
)
|
||||
(set! sv-96 (pat-material->string (the-as pat-surface (-> arg0 control unknown-int60))))
|
||||
(let ((t1-2 (pat-event->string (the-as pat-surface (-> arg0 control unknown-int60)))))
|
||||
(set! sv-96 (pat-material->string (-> arg0 control wall-pat)))
|
||||
(let ((t1-2 (pat-event->string (-> arg0 control wall-pat))))
|
||||
(s4-2 s3-2 s2-2 s1-2 s0-2 sv-96 t1-2)
|
||||
)
|
||||
)
|
||||
@@ -1620,7 +1620,7 @@
|
||||
(none)
|
||||
)
|
||||
|
||||
(defun target-post ()
|
||||
(defbehavior target-post target ()
|
||||
(target-real-post)
|
||||
(none)
|
||||
)
|
||||
|
||||
@@ -5,47 +5,12 @@
|
||||
;; name in dgo: target-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
;; TODO - for cam-master
|
||||
(define-extern target-cam-pos (function vector))
|
||||
(defun-extern stop symbol int)
|
||||
(defun-extern start symbol continue-point target)
|
||||
;; TODO - for mood
|
||||
(define-extern target-joint-pos (function vector)) ;; TODO - unconfirmed
|
||||
;; TODO - for logic-target - defined in shadow
|
||||
(define-extern do-target-shadow (function none :behavior target))
|
||||
;; TODO - for logic-target - defined in powerups
|
||||
(define-extern target-powerup-process (function none :behavior target))
|
||||
;; TODO - for logic-target - defined in target-handler
|
||||
(define-extern target-exit (function none :behavior target))
|
||||
(define-extern target-generic-event-handler (function process int symbol event-message-block object :behavior target))
|
||||
;; TODO - for logic-target - defined in sidekick
|
||||
(declare-type sidekick process-drawable)
|
||||
(define-extern init-sidekick (function none :behavior sidekick))
|
||||
;; TODO - for logic-target - defined in target-death
|
||||
(define-extern mod-var-jump (function symbol symbol symbol vector vector :behavior target))
|
||||
(define-extern init-var-jump (function float float vector vector vector vector :behavior target)) ;; 1st and 2nd vectors may be symbols instead?
|
||||
;; TODO - for target-util
|
||||
;; TODO - for target-tube
|
||||
(define-extern target-attacked (function symbol attack-info process process (state handle attack-info target) object :behavior target)) ;; unconfirmed, target-tube::(event target-tube-start)
|
||||
;; TODO - for racer-states
|
||||
(define-extern racer-collision-reaction (function control-info collide-shape-intersect vector vector uint))
|
||||
;; TODO -for target2
|
||||
(define-extern target-falling-anim-trans (function none :behavior target)) ;; unconfirmed
|
||||
|
||||
(declare-type collide-cache basic)
|
||||
(declare-type snowball-info basic)
|
||||
(declare-type tube-info basic)
|
||||
(declare-type racer-info basic)
|
||||
(declare-type flut-info basic)
|
||||
(declare-type target process-drawable)
|
||||
(defun-extern start symbol continue-point target)
|
||||
|
||||
;; NOTE - for logic-target - defined in sidekick
|
||||
(declare-type sidekick process-drawable)
|
||||
|
||||
;; NOTE - for target-death
|
||||
(define-extern start-sequence-a (function none)) ;; not confirmed
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(deftype target (process-drawable)
|
||||
@@ -177,7 +142,7 @@
|
||||
target-title-wait
|
||||
target-tube
|
||||
(target-tube-death symbol)
|
||||
(target-tube-hit handle attack-info)
|
||||
(target-tube-hit symbol attack-info)
|
||||
(target-tube-jump float float)
|
||||
(target-tube-start handle)
|
||||
target-turn-around
|
||||
@@ -214,7 +179,18 @@
|
||||
|
||||
(define-perm *sidekick* sidekick #f)
|
||||
|
||||
0
|
||||
|
||||
(defun-extern start symbol continue-point target)
|
||||
(defun-extern stop symbol int)
|
||||
(define-extern do-target-shadow (function none :behavior target))
|
||||
(define-extern target-joint-pos (function vector))
|
||||
(define-extern target-cam-pos (function vector))
|
||||
(define-extern target-powerup-process (function none :behavior target))
|
||||
(define-extern target-exit (function none :behavior target))
|
||||
(define-extern target-generic-event-handler (function process int symbol event-message-block object :behavior target))
|
||||
(define-extern init-sidekick (function none :behavior sidekick))
|
||||
(define-extern racer-collision-reaction (function control-info collide-shape-intersect vector vector uint))
|
||||
(define-extern start-sequence-a (function none))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
(if (!= (pickup-collectable!
|
||||
(-> self fact-info-target)
|
||||
(the-as pickup-type s4-0)
|
||||
(-> (new 'static 'array float 1 0.0) 0)
|
||||
(the-as float 0.0)
|
||||
(the-as handle #f)
|
||||
)
|
||||
(pickup-collectable! (-> self fact-info-target) (the-as pickup-type s4-0) f28-0 (process->handle arg0))
|
||||
@@ -120,7 +120,7 @@
|
||||
(pickup-collectable!
|
||||
(-> self fact-info-target)
|
||||
(the-as pickup-type (-> arg3 param 1))
|
||||
(-> (new 'static 'array float 1 0.0) 0)
|
||||
(the-as float 0.0)
|
||||
(the-as handle #f)
|
||||
)
|
||||
)
|
||||
@@ -298,7 +298,13 @@
|
||||
)
|
||||
)
|
||||
((= v1-0 'change-state)
|
||||
(go (the-as (state object object object object target) (-> arg3 param 0)) (-> arg3 param 1) (-> arg3 param 2) (-> arg3 param 3) (-> arg3 param 4))
|
||||
(go
|
||||
(the-as (state object object object object target) (-> arg3 param 0))
|
||||
(-> arg3 param 1)
|
||||
(-> arg3 param 2)
|
||||
(-> arg3 param 3)
|
||||
(-> arg3 param 4)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -331,7 +337,7 @@
|
||||
arg0
|
||||
)
|
||||
|
||||
(defbehavior target-attacked target ((arg0 symbol) (arg1 attack-info) (arg2 process) (arg3 process) (arg4 (state handle attack-info target)))
|
||||
(defbehavior target-attacked target ((arg0 symbol) (arg1 attack-info) (arg2 process) (arg3 process) (arg4 (state symbol attack-info target)))
|
||||
(when (zero? (logand (-> self state-flags) 8))
|
||||
(cond
|
||||
((or (logtest? (-> self state-flags) 112)
|
||||
@@ -433,7 +439,7 @@
|
||||
(if (and (= (-> self game mode) 'play) (and (>= 1.0 (-> self fact-info-target health)) (= arg0 'attack)))
|
||||
(logior! (-> self state-flags) #x8000)
|
||||
)
|
||||
(go arg4 (the-as handle arg0) (-> self attack-info-rec))
|
||||
(go arg4 arg0 (-> self attack-info-rec))
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -797,7 +803,7 @@
|
||||
(the-as attack-info (-> arg3 param 1))
|
||||
arg0
|
||||
(the-as process (-> arg3 param 0))
|
||||
(the-as (state handle attack-info target) target-hit)
|
||||
target-hit
|
||||
)
|
||||
)
|
||||
(('shove)
|
||||
@@ -947,7 +953,7 @@
|
||||
(the-as attack-info (-> arg3 param 1))
|
||||
arg0
|
||||
(the-as process (-> arg3 param 0))
|
||||
(the-as (state handle attack-info target) target-hit)
|
||||
target-hit
|
||||
)
|
||||
)
|
||||
(else
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
(define-extern target-state-hook-exit (function none :behavior target))
|
||||
(define-extern target-effect-exit (function none :behavior target))
|
||||
(define-extern target-post (function none))
|
||||
(define-extern target-post (function none :behavior target))
|
||||
(define-extern target-walk-event-handler (function process int symbol event-message-block object :behavior target))
|
||||
(define-extern target-land-effect (function none :behavior target))
|
||||
(define-extern target-dangerous-event-handler (function process int symbol event-message-block object :behavior target))
|
||||
@@ -1018,7 +1018,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-walk (target)
|
||||
@@ -1583,7 +1583,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-turn-around (target)
|
||||
@@ -1725,7 +1725,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defbehavior init-var-jump target ((arg0 float) (arg1 float) (arg2 vector) (arg3 vector) (arg4 vector))
|
||||
@@ -2039,7 +2039,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-duck-walk (target)
|
||||
@@ -2160,7 +2160,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-jump (target)
|
||||
@@ -2360,7 +2360,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-jump-forward (target)
|
||||
@@ -2418,7 +2418,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-double-jump (target)
|
||||
@@ -2526,7 +2526,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-high-jump (target)
|
||||
@@ -2621,7 +2621,7 @@
|
||||
:code
|
||||
(-> target-jump code)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-duck-high-jump (target)
|
||||
@@ -2688,7 +2688,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-duck-high-jump-jump (target)
|
||||
@@ -2798,7 +2798,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-falling (target)
|
||||
@@ -2829,7 +2829,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-hit-ground (target)
|
||||
@@ -2935,7 +2935,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-attack (target)
|
||||
@@ -3005,7 +3005,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-running-attack (target)
|
||||
@@ -3312,7 +3312,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-attack-air (target)
|
||||
@@ -3544,7 +3544,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-attack-uppercut (target)
|
||||
@@ -3593,7 +3593,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-attack-uppercut-jump (target)
|
||||
@@ -3704,7 +3704,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-flop (target)
|
||||
@@ -4022,7 +4022,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-flop-hit-ground (target)
|
||||
@@ -4105,7 +4105,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-wheel (target)
|
||||
@@ -4243,7 +4243,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-wheel-flip (target)
|
||||
@@ -4426,7 +4426,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(deftype first-person-hud (process)
|
||||
@@ -529,7 +529,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-look-around (target)
|
||||
@@ -1393,7 +1393,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-pole-flip-forward (target)
|
||||
@@ -1458,7 +1458,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-edge-grab (target)
|
||||
@@ -1899,7 +1899,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(define *yellow-jump-mods* (new 'static 'surface
|
||||
@@ -2147,7 +2147,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-wade-stance (target)
|
||||
@@ -2211,7 +2211,7 @@
|
||||
:code
|
||||
(-> target-stance code)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-wade-walk (target)
|
||||
@@ -2504,7 +2504,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defbehavior target-swim-tilt target ((arg0 float) (arg1 float) (arg2 float) (arg3 float))
|
||||
@@ -3253,7 +3253,7 @@
|
||||
:code
|
||||
(-> target-jump code)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-swim-jump (target)
|
||||
|
||||
@@ -772,6 +772,10 @@
|
||||
`(car (cdr (cdr (cdr ,arg))))
|
||||
)
|
||||
|
||||
(defmacro caddddr (arg)
|
||||
`(car (cdr (cdr (cdr (cdr ,arg)))))
|
||||
)
|
||||
|
||||
(defmacro dcons (a b)
|
||||
`(new 'debug 'pair ,a ,b)
|
||||
)
|
||||
@@ -944,6 +948,22 @@
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro doenum (bindings &rest body)
|
||||
"run body while iterating through an enum.
|
||||
WARNING: enums are NOT A RUNTIME TYPE! There is an UNWOUND loop with body in it!! Use with caution."
|
||||
;; (doenum (name-var val-var enum &rest result) &rest body)
|
||||
|
||||
`(begin ,@(apply (lambda (x)
|
||||
;; (fmt #t "{}\n" x)
|
||||
`(let (
|
||||
(,(first bindings) ,(symbol->string (car x))) ;; name
|
||||
(,(second bindings) ,(cdr x)) ;; value
|
||||
)
|
||||
,@body
|
||||
)) (get-enum-vals (third bindings))))
|
||||
|
||||
)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; float macros
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
+13
-1
@@ -312,6 +312,13 @@
|
||||
(tie3 2)
|
||||
(invalid))
|
||||
|
||||
(defenum pc-collision-mode
|
||||
(none 0)
|
||||
(mode 1)
|
||||
(event 2)
|
||||
(material 3)
|
||||
(skip 4))
|
||||
|
||||
(define-extern __read-ee-timer (function uint))
|
||||
(define-extern __mem-move (function pointer pointer uint none))
|
||||
(define-extern __send-gfx-dma-chain (function object object none))
|
||||
@@ -332,9 +339,14 @@
|
||||
(define-extern pc-get-window-size (function (pointer int32) (pointer int32) none))
|
||||
(define-extern pc-get-window-scale (function (pointer float) (pointer float) none))
|
||||
(define-extern pc-set-window-size (function int int none))
|
||||
(define-extern pc-set-letterbox (function int int none))
|
||||
(define-extern pc-set-fullscreen (function symbol int none))
|
||||
(define-extern pc-renderer-tree-set-lod (function pc-renderer-tree-type int none))
|
||||
(define-extern pc-set-letterbox (function int int none))
|
||||
(define-extern pc-set-collision (function symbol none))
|
||||
(define-extern pc-set-collision-wireframe (function symbol none))
|
||||
(define-extern pc-get-collision-mask (function pc-collision-mode int symbol))
|
||||
(define-extern pc-set-collision-mask (function pc-collision-mode int symbol none))
|
||||
(define-extern pc-set-collision-mode (function pc-collision-mode none))
|
||||
(define-extern pc-discord-rpc-update (function discord-info none))
|
||||
(define-extern pc-discord-rpc-set (function int none))
|
||||
(define-extern pc-filepath-exists? (function string symbol))
|
||||
|
||||
@@ -380,7 +380,7 @@
|
||||
(the-as attack-info (-> arg3 param 1))
|
||||
arg0
|
||||
(the-as process (-> arg3 param 0))
|
||||
(the-as (state handle attack-info target) target-flut-hit)
|
||||
target-flut-hit
|
||||
)
|
||||
)
|
||||
(('shove)
|
||||
@@ -465,7 +465,7 @@
|
||||
(the-as attack-info (-> arg3 param 1))
|
||||
arg0
|
||||
(the-as process (-> arg3 param 0))
|
||||
(the-as (state handle attack-info target) target-flut-hit)
|
||||
target-flut-hit
|
||||
)
|
||||
)
|
||||
(else
|
||||
@@ -616,7 +616,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-flut-stance (target)
|
||||
@@ -2664,7 +2664,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-flut-grab (target)
|
||||
|
||||
@@ -2346,7 +2346,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
(set! (-> arg0 cur-pat mode) 1)
|
||||
(set! (-> arg0 unknown-vector70 quad) (-> arg1 best-tri intersect quad))
|
||||
(set! (-> arg0 unknown-vector71 quad) (-> arg0 poly-normal quad))
|
||||
(set! (-> arg0 unknown-int60) (the-as uint (-> arg1 best-tri pat)))
|
||||
(set! (-> arg0 wall-pat) (-> arg1 best-tri pat))
|
||||
(vector-reflect-flat-above! arg2 (-> sv-88 0) sv-84)
|
||||
(cond
|
||||
((not
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
(the-as attack-info (-> arg3 param 1))
|
||||
arg0
|
||||
(the-as process (-> arg3 param 0))
|
||||
target-racing-hit
|
||||
(the-as (state symbol attack-info target) target-racing-hit)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -320,7 +320,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defbehavior target-racing-smack-check target ()
|
||||
|
||||
@@ -957,10 +957,10 @@
|
||||
)
|
||||
(when (logtest? (-> self control status) 8)
|
||||
(let* ((gp-8 (racer-find-prop-point (new 'stack-no-clear 'vector) (-> self control unknown-vector70)))
|
||||
(v1-274 (shr (shl (-> self control unknown-int60) 52) 58))
|
||||
(v1-274 (-> self control wall-pat material))
|
||||
(a1-54
|
||||
(cond
|
||||
((or (= v1-274 16) (= v1-274 8))
|
||||
((or (= v1-274 (pat-material metal)) (= v1-274 (pat-material pcmetal)))
|
||||
(set! (-> *part-id-table* 2226 init-specs 1 initial-valuef)
|
||||
(lerp-scale 0.2 10.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max))
|
||||
)
|
||||
@@ -986,7 +986,7 @@
|
||||
)
|
||||
(cpad-set-buzz! (-> *cpad-list* cpads 0) 0 51 (seconds 0.05))
|
||||
(sound-play-by-name
|
||||
(sound-name-with-material 'zoom-hit (the-as pat-surface (-> self control unknown-int60)) "")
|
||||
(sound-name-with-material 'zoom-hit (-> self control wall-pat) "")
|
||||
(-> self racer scrape-sound-id)
|
||||
1024
|
||||
0
|
||||
|
||||
@@ -313,7 +313,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-ice-walk (target)
|
||||
@@ -536,7 +536,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-snowball (target)
|
||||
|
||||
@@ -541,7 +541,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defbehavior target-tube-turn-anim target ()
|
||||
@@ -759,7 +759,7 @@
|
||||
:event
|
||||
(-> target-tube-start event)
|
||||
:enter
|
||||
(behavior ((arg0 handle) (arg1 attack-info))
|
||||
(behavior ((arg0 symbol) (arg1 attack-info))
|
||||
(send-event
|
||||
(handle->process (-> self tube tube))
|
||||
'update
|
||||
@@ -780,7 +780,7 @@
|
||||
(none)
|
||||
)
|
||||
:code
|
||||
(behavior ((arg0 handle) (arg1 attack-info))
|
||||
(behavior ((arg0 symbol) (arg1 attack-info))
|
||||
(let ((gp-0 (-> self attack-info)))
|
||||
(set! (-> self state-time) (-> *display* base-frame-counter))
|
||||
(logior! (-> self state-flags) 8)
|
||||
@@ -870,7 +870,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
(defstate target-tube-death (target)
|
||||
|
||||
+29
-3
@@ -23,6 +23,28 @@
|
||||
|#
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; global variables
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
;; collision renderer things. debug only.
|
||||
(define *collision-renderer* #f)
|
||||
(define *collision-wireframe* #f)
|
||||
(define *collision-mode* (pc-collision-mode mode))
|
||||
|
||||
(defenum pc-pat-skip-hack
|
||||
:bitfield #t
|
||||
(noentity 0)
|
||||
(nocamera 1)
|
||||
(noedge 2)
|
||||
(nolineofsight 12)
|
||||
(unknowncamera 13)
|
||||
(unknown 15)
|
||||
)
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; updates
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -76,7 +98,7 @@
|
||||
(none))
|
||||
|
||||
(defmethod update-from-os pc-settings ((obj pc-settings))
|
||||
"Update settings from the PC kernel to GOAL."
|
||||
"Update settings from the C kernel to GOAL."
|
||||
|
||||
(set! (-> obj os) (pc-get-os))
|
||||
(pc-get-window-size (&-> obj win-width) (&-> obj win-height))
|
||||
@@ -120,7 +142,7 @@
|
||||
(none))
|
||||
|
||||
(defmethod update-to-os pc-settings ((obj pc-settings))
|
||||
"Update settings from GOAL to the PC kernel."
|
||||
"Update settings from GOAL to the C kernel."
|
||||
|
||||
(cond
|
||||
((-> obj letterbox?)
|
||||
@@ -139,7 +161,11 @@
|
||||
(pc-renderer-tree-set-lod (pc-renderer-tree-type tie3) (-> obj lod-force-tie))
|
||||
)
|
||||
|
||||
;; TODO - save changes
|
||||
(when *debug-segment*
|
||||
(pc-set-collision *collision-renderer*)
|
||||
(pc-set-collision-wireframe *collision-wireframe*)
|
||||
(pc-set-collision-mode *collision-mode*)
|
||||
)
|
||||
|
||||
(none))
|
||||
|
||||
|
||||
+1
-1
@@ -192,7 +192,7 @@
|
||||
(unknown-vector120 vector :inline :offset 18928)
|
||||
(unknown-float150 float :offset 18944)
|
||||
(unknown-vector121 vector :inline :offset 18960)
|
||||
(unknown-int60 uint32 :offset 18976)
|
||||
(wall-pat pat-surface :offset 18976)
|
||||
(unknown-soundid00 sound-id :offset 18980)
|
||||
(unknown-float141 float :offset 18984)
|
||||
)
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
shrub-near
|
||||
billboard
|
||||
trans-shrubbery
|
||||
trans-frag
|
||||
trans-tfrag
|
||||
sprite
|
||||
shadow
|
||||
depth-cue
|
||||
|
||||
+16
-16
@@ -284,7 +284,7 @@
|
||||
;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1]
|
||||
(defun draw-drawable-tree-trans-tfrag ((arg0 drawable-tree-trans-tfrag))
|
||||
(local-vars (a0-18 int) (a0-20 int) (a0-35 int) (a0-37 int) (sv-16 (pointer uint8)))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(let ((s5-0 (+ (-> arg0 length) -1)))
|
||||
(when (nonzero? s5-0)
|
||||
(dotimes (s4-0 s5-0)
|
||||
@@ -497,7 +497,7 @@
|
||||
;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1]
|
||||
(defun draw-drawable-tree-dirt-tfrag ((arg0 drawable-tree-dirt-tfrag))
|
||||
(local-vars (a0-18 int) (a0-20 int) (a0-35 int) (a0-37 int) (sv-16 (pointer uint8)))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(let ((s5-0 (+ (-> arg0 length) -1)))
|
||||
(when (nonzero? s5-0)
|
||||
(dotimes (s4-0 s5-0)
|
||||
@@ -692,7 +692,7 @@
|
||||
;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1]
|
||||
(defun draw-drawable-tree-ice-tfrag ((arg0 drawable-tree-ice-tfrag))
|
||||
(local-vars (a0-18 int) (a0-20 int) (a0-35 int) (a0-37 int) (sv-16 (pointer uint8)))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(let ((s5-0 (+ (-> arg0 length) -1)))
|
||||
(when (nonzero? s5-0)
|
||||
(dotimes (s4-0 s5-0)
|
||||
@@ -993,12 +993,12 @@
|
||||
;; INFO: Return type mismatch drawable-tree-trans-tfrag vs none.
|
||||
;; Used lq/sq
|
||||
(defmethod collect-stats drawable-tree-trans-tfrag ((obj drawable-tree-trans-tfrag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag)
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag)))
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag)))
|
||||
)
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near)
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag)))
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag)))
|
||||
)
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag-near) (-> *terrain-stats* trans-tfrag-near))
|
||||
@@ -1016,12 +1016,12 @@
|
||||
;; INFO: Return type mismatch drawable-tree-lowres-trans-tfrag vs none.
|
||||
;; Used lq/sq
|
||||
(defmethod collect-stats drawable-tree-lowres-trans-tfrag ((obj drawable-tree-lowres-trans-tfrag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag)
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag)))
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag)))
|
||||
)
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near)
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag)))
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag)))
|
||||
)
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag-near) (-> *terrain-stats* trans-tfrag-near))
|
||||
@@ -1039,12 +1039,12 @@
|
||||
;; INFO: Return type mismatch drawable-tree-dirt-tfrag vs none.
|
||||
;; Used lq/sq
|
||||
(defmethod collect-stats drawable-tree-dirt-tfrag ((obj drawable-tree-dirt-tfrag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag)
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag)))
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag)))
|
||||
)
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near)
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag)))
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag)))
|
||||
)
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag-near) (-> *terrain-stats* trans-tfrag-near))
|
||||
@@ -1062,12 +1062,12 @@
|
||||
;; INFO: Return type mismatch drawable-tree-ice-tfrag vs none.
|
||||
;; Used lq/sq
|
||||
(defmethod collect-stats drawable-tree-ice-tfrag ((obj drawable-tree-ice-tfrag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag)
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag)))
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag)))
|
||||
)
|
||||
(set! (-> *tfrag-work* vu1-enable-tfrag-near)
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag)))
|
||||
(the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-tfrag)))
|
||||
)
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag))
|
||||
(set! (-> *tfrag-work* tr-stat-tfrag-near) (-> *terrain-stats* trans-tfrag-near))
|
||||
@@ -1099,7 +1099,7 @@
|
||||
;; definition for method 14 of type drawable-inline-array-trans-tfrag
|
||||
;; INFO: Return type mismatch drawable-inline-array-trans-tfrag vs none.
|
||||
(defmethod collect-stats drawable-inline-array-trans-tfrag ((obj drawable-inline-array-trans-tfrag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag))
|
||||
(when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-tfrag))
|
||||
(dotimes (s5-0 (-> obj length))
|
||||
(let ((s4-0 (-> obj data s5-0)))
|
||||
(if (vis-cull (-> s4-0 id))
|
||||
|
||||
+5
-5
@@ -306,11 +306,11 @@
|
||||
(let ((s4-2 format)
|
||||
(s3-2 arg1)
|
||||
(s2-2 "~0kwall:~6X mode:~-8S material:~-10S event:~S~%")
|
||||
(s1-2 (-> arg0 control unknown-int60))
|
||||
(s0-2 (pat-mode->string (the-as pat-surface (-> arg0 control unknown-int60))))
|
||||
(s1-2 (-> arg0 control wall-pat))
|
||||
(s0-2 (pat-mode->string (-> arg0 control wall-pat)))
|
||||
)
|
||||
(set! sv-96 (pat-material->string (the-as pat-surface (-> arg0 control unknown-int60))))
|
||||
(let ((t1-2 (pat-event->string (the-as pat-surface (-> arg0 control unknown-int60)))))
|
||||
(set! sv-96 (pat-material->string (-> arg0 control wall-pat)))
|
||||
(let ((t1-2 (pat-event->string (-> arg0 control wall-pat))))
|
||||
(s4-2 s3-2 s2-2 s1-2 s0-2 sv-96 t1-2)
|
||||
)
|
||||
)
|
||||
@@ -1672,7 +1672,7 @@
|
||||
)
|
||||
|
||||
;; definition for function target-post
|
||||
(defun target-post ()
|
||||
(defbehavior target-post target ()
|
||||
(target-real-post)
|
||||
(none)
|
||||
)
|
||||
|
||||
+1
-1
@@ -1094,7 +1094,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; definition for symbol *death-spool-array*, type (array spool-anim)
|
||||
|
||||
+1
-1
@@ -131,7 +131,7 @@
|
||||
target-title-wait
|
||||
target-tube
|
||||
(target-tube-death symbol)
|
||||
(target-tube-hit handle attack-info)
|
||||
(target-tube-hit symbol attack-info)
|
||||
(target-tube-jump float float)
|
||||
(target-tube-start handle)
|
||||
target-turn-around
|
||||
|
||||
+4
-4
@@ -336,7 +336,7 @@
|
||||
)
|
||||
|
||||
;; definition for function target-attacked
|
||||
(defbehavior target-attacked target ((arg0 symbol) (arg1 attack-info) (arg2 process) (arg3 process) (arg4 (state handle attack-info target)))
|
||||
(defbehavior target-attacked target ((arg0 symbol) (arg1 attack-info) (arg2 process) (arg3 process) (arg4 (state symbol attack-info target)))
|
||||
(when (zero? (logand (-> self state-flags) 8))
|
||||
(cond
|
||||
((or (logtest? (-> self state-flags) 112)
|
||||
@@ -438,7 +438,7 @@
|
||||
(if (and (= (-> self game mode) 'play) (and (>= 1.0 (-> self fact-info-target health)) (= arg0 'attack)))
|
||||
(logior! (-> self state-flags) #x8000)
|
||||
)
|
||||
(go arg4 (the-as handle arg0) (-> self attack-info-rec))
|
||||
(go arg4 arg0 (-> self attack-info-rec))
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -807,7 +807,7 @@
|
||||
(the-as attack-info (-> arg3 param 1))
|
||||
arg0
|
||||
(the-as process (-> arg3 param 0))
|
||||
(the-as (state handle attack-info target) target-hit)
|
||||
target-hit
|
||||
)
|
||||
)
|
||||
(('shove)
|
||||
@@ -958,7 +958,7 @@
|
||||
(the-as attack-info (-> arg3 param 1))
|
||||
arg0
|
||||
(the-as process (-> arg3 param 0))
|
||||
(the-as (state handle attack-info target) target-hit)
|
||||
target-hit
|
||||
)
|
||||
)
|
||||
(else
|
||||
|
||||
+9
-9
@@ -201,7 +201,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; definition of type first-person-hud
|
||||
@@ -556,7 +556,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -1426,7 +1426,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -1493,7 +1493,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -1938,7 +1938,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; definition for symbol *yellow-jump-mods*, type surface
|
||||
@@ -2189,7 +2189,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2254,7 +2254,7 @@
|
||||
:code
|
||||
(-> target-stance code)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2548,7 +2548,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; definition for function target-swim-tilt
|
||||
@@ -3303,7 +3303,7 @@
|
||||
:code
|
||||
(-> target-jump code)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
|
||||
+22
-22
@@ -1008,7 +1008,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -1574,7 +1574,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -1718,7 +1718,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; definition for function init-var-jump
|
||||
@@ -2037,7 +2037,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2159,7 +2159,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2360,7 +2360,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2419,7 +2419,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2528,7 +2528,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2624,7 +2624,7 @@
|
||||
:code
|
||||
(-> target-jump code)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2692,7 +2692,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2803,7 +2803,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2835,7 +2835,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2942,7 +2942,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -3013,7 +3013,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -3321,7 +3321,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -3554,7 +3554,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -3604,7 +3604,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -3716,7 +3716,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -4035,7 +4035,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -4119,7 +4119,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -4258,7 +4258,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -4442,5 +4442,5 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
+4
-4
@@ -414,7 +414,7 @@
|
||||
(the-as attack-info (-> arg3 param 1))
|
||||
arg0
|
||||
(the-as process (-> arg3 param 0))
|
||||
(the-as (state handle attack-info target) target-flut-hit)
|
||||
target-flut-hit
|
||||
)
|
||||
)
|
||||
(('shove)
|
||||
@@ -500,7 +500,7 @@
|
||||
(the-as attack-info (-> arg3 param 1))
|
||||
arg0
|
||||
(the-as process (-> arg3 param 0))
|
||||
(the-as (state handle attack-info target) target-flut-hit)
|
||||
target-flut-hit
|
||||
)
|
||||
)
|
||||
(else
|
||||
@@ -652,7 +652,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -2715,7 +2715,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
|
||||
+1
-1
@@ -2463,5 +2463,5 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
+1
-1
@@ -110,7 +110,7 @@
|
||||
(set! (-> arg0 cur-pat mode) 1)
|
||||
(set! (-> arg0 unknown-vector70 quad) (-> arg1 best-tri intersect quad))
|
||||
(set! (-> arg0 unknown-vector71 quad) (-> arg0 poly-normal quad))
|
||||
(set! (-> arg0 unknown-int60) (the-as uint (-> arg1 best-tri pat)))
|
||||
(set! (-> arg0 wall-pat) (-> arg1 best-tri pat))
|
||||
(vector-reflect-flat-above! arg2 (-> sv-88 0) sv-84)
|
||||
(cond
|
||||
((not
|
||||
|
||||
+2
-2
@@ -35,7 +35,7 @@
|
||||
(the-as attack-info (-> arg3 param 1))
|
||||
arg0
|
||||
(the-as process (-> arg3 param 0))
|
||||
target-racing-hit
|
||||
(the-as (state symbol attack-info target) target-racing-hit)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -313,7 +313,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; definition for function target-racing-smack-check
|
||||
|
||||
+3
-3
@@ -980,10 +980,10 @@
|
||||
)
|
||||
(when (logtest? (-> self control status) 8)
|
||||
(let* ((gp-8 (racer-find-prop-point (new 'stack-no-clear 'vector) (-> self control unknown-vector70)))
|
||||
(v1-274 (shr (shl (-> self control unknown-int60) 52) 58))
|
||||
(v1-274 (-> self control wall-pat material))
|
||||
(a1-54
|
||||
(cond
|
||||
((or (= v1-274 16) (= v1-274 8))
|
||||
((or (= v1-274 (pat-material metal)) (= v1-274 (pat-material pcmetal)))
|
||||
(set! (-> *part-id-table* 2226 init-specs 1 initial-valuef)
|
||||
(lerp-scale 0.2 10.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max))
|
||||
)
|
||||
@@ -1009,7 +1009,7 @@
|
||||
)
|
||||
(cpad-set-buzz! (-> *cpad-list* cpads 0) 0 51 (seconds 0.05))
|
||||
(sound-play-by-name
|
||||
(sound-name-with-material 'zoom-hit (the-as pat-surface (-> self control unknown-int60)) "")
|
||||
(sound-name-with-material 'zoom-hit (-> self control wall-pat) "")
|
||||
(-> self racer scrape-sound-id)
|
||||
1024
|
||||
0
|
||||
|
||||
+2
-2
@@ -308,7 +308,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
@@ -532,5 +532,5 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
+1
-1
@@ -132,7 +132,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
|
||||
+4
-4
@@ -572,7 +572,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; definition for function target-tube-turn-anim
|
||||
@@ -795,7 +795,7 @@
|
||||
:event
|
||||
(-> target-tube-start event)
|
||||
:enter
|
||||
(behavior ((arg0 handle) (arg1 attack-info))
|
||||
(behavior ((arg0 symbol) (arg1 attack-info))
|
||||
(send-event
|
||||
(handle->process (-> self tube tube))
|
||||
'update
|
||||
@@ -816,7 +816,7 @@
|
||||
(none)
|
||||
)
|
||||
:code
|
||||
(behavior ((arg0 handle) (arg1 attack-info))
|
||||
(behavior ((arg0 symbol) (arg1 attack-info))
|
||||
(let ((gp-0 (-> self attack-info)))
|
||||
(set! (-> self state-time) (-> *display* base-frame-counter))
|
||||
(logior! (-> self state-flags) 8)
|
||||
@@ -906,7 +906,7 @@
|
||||
(none)
|
||||
)
|
||||
:post
|
||||
(the-as (function none :behavior target) target-post)
|
||||
target-post
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
|
||||
Reference in New Issue
Block a user