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:
ManDude
2022-04-30 19:48:24 +01:00
committed by GitHub
parent caf4aed127
commit 3ed009924f
54 changed files with 1094 additions and 800 deletions
+4 -2
View File
@@ -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);
};
+6 -5
View File
@@ -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;
}
}
+6 -6
View File
@@ -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
+72
View File
@@ -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
+19
View File
@@ -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);
}
}
+29 -1
View File
@@ -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);
+1 -1
View File
@@ -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)
)
)
+1 -1
View File
@@ -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
)
+100 -3
View File
@@ -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*))
)
)
+12 -2
View File
@@ -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)
+421 -532
View File
@@ -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)
)
+2 -2
View File
@@ -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
+16 -16
View File
@@ -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))
+5 -5
View File
@@ -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)
)
+13 -37
View File
@@ -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))
+13 -7
View File
@@ -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
+23 -23
View File
@@ -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
)
+9 -9
View File
@@ -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)
+20
View File
@@ -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
View File
@@ -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))
+4 -4
View File
@@ -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)
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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 ()
+3 -3
View File
@@ -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
+2 -2
View File
@@ -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
)
+1 -1
View File
@@ -122,7 +122,7 @@
(none)
)
:post
(the-as (function none :behavior target) target-post)
target-post
)
(defstate target-snowball (target)
+4 -4
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -15,7 +15,7 @@
shrub-near
billboard
trans-shrubbery
trans-frag
trans-tfrag
sprite
shadow
depth-cue
+16 -16
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -2463,5 +2463,5 @@
(none)
)
:post
(the-as (function none :behavior target) target-post)
target-post
)
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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: