diff --git a/common/audio/audio_formats.cpp b/common/audio/audio_formats.cpp index 62398aa4f8..657e06b487 100644 --- a/common/audio/audio_formats.cpp +++ b/common/audio/audio_formats.cpp @@ -1,5 +1,6 @@ #include "audio_formats.h" +#include "common/log/log.h" #include "common/util/BinaryWriter.h" #include "third-party/fmt/core.h" @@ -254,7 +255,7 @@ void test_encode_adpcm(const std::vector& samples, } if (debug) { - fmt::print("Range: {}\n", max_sample - min_sample); + lg::debug("Range: {}", max_sample - min_sample); } // see how many bits we need and pick shift. @@ -283,11 +284,11 @@ void test_encode_adpcm(const std::vector& samples, if (filter_errors[best_filter] || best_filter != filter_debug[block_idx] || best_shift != shift_debug[block_idx]) { - fmt::print("Block {} me {}, {} : answer {} {}: ERR {}\n", block_idx, best_filter, best_shift, - filter_debug[block_idx], shift_debug[block_idx], filter_errors[best_filter]); - fmt::print("filter errors:\n"); + lg::error("Block {} me {}, {} : answer {} {}: ERR {}", block_idx, best_filter, best_shift, + filter_debug[block_idx], shift_debug[block_idx], filter_errors[best_filter]); + lg::error("filter errors:"); for (int i = 0; i < 5; i++) { - fmt::print(" [{}] {} {}\n", i, filter_errors[i], filter_shifts[i]); + lg::error(" [{}] {} {}", i, filter_errors[i], filter_shifts[i]); } ASSERT_MSG(false, fmt::format("prev: {} {}", prev_block_samples[0], prev_block_samples[1])); } diff --git a/common/cross_sockets/XSocket.cpp b/common/cross_sockets/XSocket.cpp index 5ff7bd1e66..71223e77b4 100644 --- a/common/cross_sockets/XSocket.cpp +++ b/common/cross_sockets/XSocket.cpp @@ -18,6 +18,7 @@ #include #include "third-party/fmt/core.h" +#include "common/log/log.h" // clang-format on int open_socket(int af, int type, int protocol) { @@ -29,7 +30,7 @@ int open_socket(int af, int type, int protocol) { // Initialize Winsock iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { - printf("WSAStartup failed: %d\n", iResult); + lg::error("WSAStartup failed: {}", iResult); return 1; } return socket(af, type, protocol); @@ -71,7 +72,7 @@ int accept_socket(int socket, sockaddr* addr, int* addrLen) { // Initialize Winsock iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { - printf("WSAStartup failed: %d\n", iResult); + lg::error("WSAStartup failed: {}", iResult); return 1; } return accept(socket, addr, addrLen); @@ -116,13 +117,13 @@ void close_socket(int sock) { int set_socket_option(int socket, int level, int optname, const void* optval, int optlen) { int ret = setsockopt(socket, level, optname, (const char*)optval, optlen); if (ret < 0) { - printf("Failed to setsockopt(%d, %d, %d, _, _) - Error: %s\n", socket, level, optname, - strerror(errno)); + lg::error("Failed to setsockopt({},{}, {}, _, _) - Error: {}", socket, level, optname, + strerror(errno)); } #ifdef _WIN32 if (ret < 0) { int err = WSAGetLastError(); - printf("WSAGetLastError: %d\n", err); + lg::error("WSAGetLastError: {}", err); } #endif return ret; @@ -153,7 +154,7 @@ int write_to_socket(int socket, const char* buf, int len) { bytes_wrote = send(socket, buf, len, 0); #endif if (bytes_wrote < 0) { - fmt::print(stderr, "[XSocket:{}] Error writing to socket\n", socket); + lg::error("[XSocket:{}] Error writing to socket", socket); } return bytes_wrote; } diff --git a/common/cross_sockets/XSocketServer.cpp b/common/cross_sockets/XSocketServer.cpp index 40a1ba246c..6a47671dc7 100644 --- a/common/cross_sockets/XSocketServer.cpp +++ b/common/cross_sockets/XSocketServer.cpp @@ -12,6 +12,7 @@ #include #include #endif +#include "common/log/log.h" // clang-format on XSocketServer::XSocketServer(std::function shutdown_callback, @@ -67,19 +68,19 @@ bool XSocketServer::init_server() { addr.sin_port = htons(tcp_port); if (bind(listening_socket, (sockaddr*)&addr, sizeof(addr)) < 0) { - fmt::print("[XSocketServer:{}] failed to bind\n", tcp_port); + lg::error("[XSocketServer:{}] failed to bind", tcp_port); close_server_socket(); return false; } if (listen(listening_socket, 0) < 0) { - fmt::print("[XSocketServer:{}] failed to listen\n", tcp_port); + lg::error("[XSocketServer:{}] failed to listen", tcp_port); close_server_socket(); return false; } server_initialized = true; - fmt::print("[XSocketServer:{}] initialized\n", tcp_port); + lg::info("[XSocketServer:{}] initialized", tcp_port); post_init(); return true; } diff --git a/common/custom_data/Tfrag3Data.h b/common/custom_data/Tfrag3Data.h index 930e0163c7..9243fc3016 100644 --- a/common/custom_data/Tfrag3Data.h +++ b/common/custom_data/Tfrag3Data.h @@ -259,10 +259,10 @@ struct Texture { }; // Tfrag trees have several kinds: -enum class TFragmentTreeKind { NORMAL, TRANS, DIRT, ICE, LOWRES, LOWRES_TRANS, INVALID }; +enum class TFragmentTreeKind { NORMAL, TRANS, DIRT, ICE, LOWRES, LOWRES_TRANS, WATER, INVALID }; -constexpr const char* tfrag_tree_names[] = {"normal", "trans", "dirt", "ice", - "lowres", "lowres-trans", "invalid"}; +constexpr const char* tfrag_tree_names[] = {"normal", "trans", "dirt", "ice", + "lowres", "lowres-trans", "water", "invalid"}; // A tfrag model struct TfragTree { diff --git a/common/custom_data/pack_helpers.cpp b/common/custom_data/pack_helpers.cpp index 0025c596b5..6bed346832 100644 --- a/common/custom_data/pack_helpers.cpp +++ b/common/custom_data/pack_helpers.cpp @@ -2,13 +2,15 @@ #include +#include "common/log/log.h" + constexpr float kClusterSize = 4096 * 40; // 100 in-game meters constexpr float kMasterOffset = 12000 * 4096; std::pair position_to_cluster_and_offset(float in) { in += kMasterOffset; if (in < 0) { - fmt::print("negative: {}\n", in); + lg::print("negative: {}\n", in); } ASSERT(in >= 0); int cluster_cell = (in / kClusterSize); @@ -69,4 +71,4 @@ void pack_tfrag_vertices(tfrag3::PackedTfragVertices* result, } ASSERT(next_cluster_idx < UINT16_MAX); -} \ No newline at end of file +} diff --git a/common/dma/dma_copy.cpp b/common/dma/dma_copy.cpp index b02f10df55..5890beccc8 100644 --- a/common/dma/dma_copy.cpp +++ b/common/dma/dma_copy.cpp @@ -3,6 +3,7 @@ #include "common/dma/dma_chain_read.h" #include "common/goal_constants.h" +#include "common/log/log.h" #include "common/util/Timer.h" #include "third-party/fmt/core.h" @@ -36,11 +37,11 @@ void diff_dma_chains(DmaFollower ref, DmaFollower dma) { auto ref_tag = ref.current_tag(); auto dma_tag = dma.current_tag(); if (ref_tag.kind != dma_tag.kind) { - fmt::print("Bad dma tag kinds\n"); + lg::warn("Bad dma tag kinds"); } if (ref_tag.qwc != dma_tag.qwc) { - fmt::print("Bad dma tag qwc: {} {}\n", ref_tag.qwc, dma_tag.qwc); + lg::warn("Bad dma tag qwc: {} {}", ref_tag.qwc, dma_tag.qwc); } auto ref_result = ref.read_and_advance(); @@ -48,19 +49,19 @@ void diff_dma_chains(DmaFollower ref, DmaFollower dma) { for (int i = 0; i < (int)ref_result.size_bytes; i++) { if (ref_result.data[i] != dma_result.data[i]) { - fmt::print("Bad data ({} vs {}) at {} into transfer: {} {}\n", ref_result.data[i], - dma_result.data[i], i, ref_tag.print(), dma_tag.print()); + lg::error("Bad data ({} vs {}) at {} into transfer: {} {}", ref_result.data[i], + dma_result.data[i], i, ref_tag.print(), dma_tag.print()); return; } } } if (!ref.ended()) { - fmt::print("dma ended early\n"); + lg::warn("dma ended early"); } if (!dma.ended()) { - fmt::print("dma had extra data\n"); + lg::warn("dma had extra data"); } } @@ -175,12 +176,12 @@ const DmaData& FixedChunkDmaCopier::run(const void* memory, u32 offset, bool ver auto v2 = flatten_dma(DmaFollower(m_result.data.data(), m_result.start_offset)); if (ref != v2) { - fmt::print("Verification has failed.\n"); - fmt::print("size diff: {} {}\n", ref.size(), v2.size()); + lg::error("Verification has failed."); + lg::error("size diff: {} {}", ref.size(), v2.size()); for (size_t i = 0; i < std::min(ref.size(), v2.size()); i++) { if (ref[i] != v2[i]) { - fmt::print("first diff at {}\n", i); + lg::error("first diff at {}", i); break; } } @@ -188,10 +189,10 @@ const DmaData& FixedChunkDmaCopier::run(const void* memory, u32 offset, bool ver DmaFollower(m_result.data.data(), m_result.start_offset)); ASSERT(false); } else { - fmt::print("verification ok: {} bytes\n", ref.size()); + lg::debug("verification ok: {} bytes", ref.size()); } } m_result.stats.sync_time_ms = timer.getMs(); return m_result; -} \ No newline at end of file +} diff --git a/common/global_profiler/GlobalProfiler.cpp b/common/global_profiler/GlobalProfiler.cpp index 54b563da26..1a459dfd7c 100644 --- a/common/global_profiler/GlobalProfiler.cpp +++ b/common/global_profiler/GlobalProfiler.cpp @@ -24,6 +24,7 @@ u32 get_current_tid() { return (u32)GetCurrentThreadId(); } #endif +#include "common/log/log.h" // clang-format on u64 get_current_ts() { @@ -157,18 +158,17 @@ void GlobalProfiler::dump_to_json(const std::string& path) { // ts json_event["ts"] = (event.ts - lowest_ts) / 1000.f; if (event.ts < info.debug) { - fmt::print("out of order: {} {} {} ms\n", event.ts / 1000.f, info.debug / 1000.f, - (info.debug - event.ts) / 1000000.f); - fmt::print(" idx: {}, range {} {}\n", event_idx, info.lowest_at_target, - info.highest_at_target); - fmt::print(" now: {}\n", m_next_idx); + lg::debug("out of order: {} {} {} ms", event.ts / 1000.f, info.debug / 1000.f, + (info.debug - event.ts) / 1000000.f); + lg::debug(" idx: {}, range {} {}", event_idx, info.lowest_at_target, info.highest_at_target); + lg::debug(" now: {}", m_next_idx); } info.debug = event.ts; } for (auto& t : info_per_thread) { - fmt::print("thread: {}: {} -> {}\n", t.first, t.second.lowest_at_target, - t.second.highest_at_target); + lg::debug("thread: {}: {} -> {}", t.first, t.second.lowest_at_target, + t.second.highest_at_target); } file_util::write_text_file(path, json.dump()); diff --git a/common/goos/PrettyPrinter.cpp b/common/goos/PrettyPrinter.cpp index ee3c994c1c..0e25ec9115 100644 --- a/common/goos/PrettyPrinter.cpp +++ b/common/goos/PrettyPrinter.cpp @@ -13,7 +13,6 @@ #include "Reader.h" #include "common/goos/PrettyPrinter2.h" -#include "common/log/log.h" #include "common/util/Assert.h" #include "third-party/fmt/core.h" diff --git a/common/goos/Reader.cpp b/common/goos/Reader.cpp index 93fd976298..9934b71884 100644 --- a/common/goos/Reader.cpp +++ b/common/goos/Reader.cpp @@ -13,6 +13,7 @@ #include "ReplUtils.h" +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "common/util/FontUtils.h" @@ -291,11 +292,16 @@ Object Reader::internal_read(std::shared_ptr text, ts.seek_past_whitespace_and_comments(); // read list! - auto objs = read_list(ts, false); - if (add_top_level) { - return PairObject::make_new(SymbolObject::make_new(symbolTable, "top-level"), objs); - } else { - return objs; + try { + auto objs = read_list(ts, false); + if (add_top_level) { + return PairObject::make_new(SymbolObject::make_new(symbolTable, "top-level"), objs); + } else { + return objs; + } + } catch (std::exception& e) { + lg::print("{}", e.what()); + throw e; } } diff --git a/common/log/log.cpp b/common/log/log.cpp index 2fd546fed1..2009bdad54 100644 --- a/common/log/log.cpp +++ b/common/log/log.cpp @@ -44,12 +44,12 @@ void log_message(level log_level, LogTime& now, const char* message) { char date_time_buffer[128]; time_t now_seconds = now.tv.tv_sec; auto now_milliseconds = now.tv.tv_usec / 1000; - strftime(date_time_buffer, 128, "%Y-%m-%d %H:%M:%S", localtime(&now_seconds)); - std::string date_string = fmt::format("[{}:{:03d}]", date_time_buffer, now_milliseconds); + strftime(date_time_buffer, 128, "%M:%S", localtime(&now_seconds)); + std::string time_string = fmt::format("[{}:{:03d}]", date_time_buffer, now_milliseconds); #else char date_time_buffer[128]; - strftime(date_time_buffer, 128, "%Y-%m-%d %H:%M:%S", localtime(&now.tim)); - std::string date_string = fmt::format("[{}]", date_time_buffer); + strftime(date_time_buffer, 128, "%M:%S", localtime(&now.tim)); + std::string time_string = fmt::format("[{}]", date_time_buffer); #endif { @@ -57,7 +57,7 @@ void log_message(level log_level, LogTime& now, const char* message) { if (gLogger.fp && log_level >= gLogger.file_log_level) { // log to file std::string file_string = - fmt::format("{} [{}] {}\n", date_string, log_level_names[int(log_level)], message); + fmt::format("{} [{}] {}\n", time_string, log_level_names[int(log_level)], message); fwrite(file_string.c_str(), file_string.length(), 1, gLogger.fp); if (log_level >= gLogger.flush_level) { fflush(gLogger.fp); @@ -65,17 +65,43 @@ void log_message(level log_level, LogTime& now, const char* message) { } if (log_level >= gLogger.stdout_log_level) { - fmt::print("{} [", date_string); + fmt::print("{} [", time_string); fmt::print(fg(log_colors[int(log_level)]), "{}", log_level_names[int(log_level)]); fmt::print("] {}\n", message); if (log_level >= gLogger.flush_level) { fflush(stdout); + fflush(stderr); } } } if (log_level == level::die) { - exit(-1); + fflush(stdout); + fflush(stderr); + if (gLogger.fp) { + fflush(gLogger.fp); + } + abort(); + } +} + +void log_print(const char* message) { + { + // We always immediately flush prints because since it has no associated level + // it could be anything from a fatal error to a useless debug log. + std::lock_guard lock(gLogger.mutex); + if (gLogger.fp) { + // Log to File + std::string msg(message); + fwrite(msg.c_str(), msg.length(), 1, gLogger.fp); + fflush(gLogger.fp); + } + + if (gLogger.stdout_log_level < lg::level::off) { + fmt::print(message); + fflush(stdout); + fflush(stderr); + } } } } // namespace internal diff --git a/common/log/log.h b/common/log/log.h index b26d0dd230..34470f47a1 100644 --- a/common/log/log.h +++ b/common/log/log.h @@ -7,6 +7,7 @@ #endif #include +#include "third-party/fmt/color.h" #include "third-party/fmt/core.h" namespace lg { @@ -27,6 +28,7 @@ enum class level { trace = 0, debug = 1, info = 2, warn = 3, error = 4, die = 5, namespace internal { // log implementation stuff, not to be called by the user void log_message(level log_level, LogTime& now, const char* message); +void log_print(const char* message); } // namespace internal void set_file(const std::string& filename); @@ -49,6 +51,17 @@ void log(level log_level, const std::string& format, Args&&... args) { internal::log_message(log_level, now, formatted_message.c_str()); } +template +void print(const std::string& format, Args&&... args) { + std::string formatted_message = fmt::format(format, std::forward(args)...); + internal::log_print(formatted_message.c_str()); +} +template +void print(const fmt::text_style& ts, const std::string& format, Args&&... args) { + std::string formatted_message = fmt::format(ts, format, std::forward(args)...); + internal::log_print(formatted_message.c_str()); +} + template void trace(const std::string& format, Args&&... args) { log(level::trace, format, std::forward(args)...); diff --git a/common/math/Vector.h b/common/math/Vector.h index e79c1149ef..01bd3c21b2 100644 --- a/common/math/Vector.h +++ b/common/math/Vector.h @@ -225,6 +225,15 @@ class Vector { return result + "]"; } + std::string to_string_hex_word() const { + std::string result = "["; + for (auto x : m_data) { + result.append(fmt::format("0x{:08x} ", x)); + } + result.pop_back(); + return result + "]"; + } + T* data() { return m_data; } const T* data() const { return m_data; } diff --git a/common/serialization/subtitles/subtitles_ser.cpp b/common/serialization/subtitles/subtitles_ser.cpp index dd3d8a9256..36619a8bc2 100644 --- a/common/serialization/subtitles/subtitles_ser.cpp +++ b/common/serialization/subtitles/subtitles_ser.cpp @@ -389,7 +389,7 @@ void GameSubtitleGroups::hydrate_from_asset_file() { m_groups[key] = val.get>(); } } catch (std::exception& ex) { - fmt::print("Bad subtitle group entry - {} - {}", key, ex.what()); + lg::print("Bad subtitle group entry - {} - {}", key, ex.what()); } } } diff --git a/common/type_system/Type.cpp b/common/type_system/Type.cpp index e816b86343..7dbd35e74d 100644 --- a/common/type_system/Type.cpp +++ b/common/type_system/Type.cpp @@ -7,6 +7,7 @@ #include +#include "common/log/log.h" #include "common/util/Assert.h" #include "third-party/fmt/core.h" @@ -196,8 +197,8 @@ std::string Type::get_name() const { std::string Type::get_runtime_name() const { if (!m_allow_in_runtime) { - fmt::print("[TypeSystem] Tried to use type {} as a runtime type, which is not allowed.\n", - get_name()); + lg::print("[TypeSystem] Tried to use type {} as a runtime type, which is not allowed.\n", + get_name()); throw std::runtime_error("get_runtime_name"); } return m_runtime_name; diff --git a/common/type_system/TypeFieldLookup.cpp b/common/type_system/TypeFieldLookup.cpp index 5b690d75de..06eea7e2bd 100644 --- a/common/type_system/TypeFieldLookup.cpp +++ b/common/type_system/TypeFieldLookup.cpp @@ -7,6 +7,8 @@ #include "TypeSystem.h" +#include "common/log/log.h" + #include "third-party/fmt/core.h" namespace { @@ -452,8 +454,8 @@ void try_reverse_lookup(const FieldReverseLookupInput& input, FieldReverseMultiLookupOutput* output, int max_count) { if (debug_reverse_lookup) { - fmt::print(" try_reverse_lookup on {} offset {} deref {} stride {}\n", input.base_type.print(), - input.offset, input.deref.has_value(), input.stride); + lg::debug(" try_reverse_lookup on {} offset {} deref {} stride {}", input.base_type.print(), + input.offset, input.deref.has_value(), input.stride); } auto base_input_type = input.base_type.base_type(); @@ -484,15 +486,15 @@ FieldReverseLookupOutput TypeSystem::reverse_field_lookup( /* if (multi_result.results.size() > 1) { - fmt::print("Multiple:\n"); + lg::print("Multiple:\n"); for (auto& result : multi_result.results) { - fmt::print(" [{}] [{}] ", result.total_score, result.result_type.print()); + lg::print(" [{}] [{}] ", result.total_score, result.result_type.print()); for (auto& tok : result.tokens) { - fmt::print("{} ", tok.print()); + lg::print("{} ", tok.print()); } - fmt::print("\n"); + lg::print("\n"); } - fmt::print("\n\n\n"); + lg::print("\n\n\n"); } */ @@ -510,8 +512,8 @@ FieldReverseMultiLookupOutput TypeSystem::reverse_field_multi_lookup( const FieldReverseLookupInput& input, int max_count) const { if (debug_reverse_lookup) { - fmt::print("reverse_field_lookup on {} offset {} deref {} stride {}\n", input.base_type.print(), - input.offset, input.deref.has_value(), input.stride); + lg::debug("reverse_field_lookup on {} offset {} deref {} stride {}", input.base_type.print(), + input.offset, input.deref.has_value(), input.stride); } FieldReverseMultiLookupOutput result; diff --git a/common/type_system/TypeSystem.cpp b/common/type_system/TypeSystem.cpp index 4490649ff7..a4baa95ab8 100644 --- a/common/type_system/TypeSystem.cpp +++ b/common/type_system/TypeSystem.cpp @@ -9,6 +9,7 @@ #include +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/math_util.h" @@ -18,11 +19,11 @@ namespace { template [[noreturn]] void throw_typesystem_error(const std::string& str, Args&&... args) { - fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Type Error! --\n"); + lg::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Type Error! --\n"); if (!str.empty() && str.back() == '\n') { - fmt::print(fg(fmt::color::yellow), str, std::forward(args)...); + lg::print(fg(fmt::color::yellow), str, std::forward(args)...); } else { - fmt::print(fg(fmt::color::yellow), str + '\n', std::forward(args)...); + lg::print(fg(fmt::color::yellow), str + '\n', std::forward(args)...); } throw std::runtime_error( @@ -63,8 +64,8 @@ Type* TypeSystem::add_type(const std::string& name, std::unique_ptr type) if (m_allow_redefinition || std::find(m_types_allowed_to_be_redefined.begin(), m_types_allowed_to_be_redefined.end(), kv->second->get_name()) != m_types_allowed_to_be_redefined.end()) { - fmt::print("[TypeSystem] Type {} was originally\n{}\nand is redefined as\n{}\n", - kv->second->get_name(), kv->second->print(), type->print()); + lg::print("[TypeSystem] Type {} was originally\n{}\nand is redefined as\n{}\n", + kv->second->get_name(), kv->second->print(), type->print()); // extra dangerous, we have allowed type redefinition! // keep the unique_ptr around, just in case somebody references this old type pointer. @@ -1530,11 +1531,11 @@ bool TypeSystem::typecheck_and_throw(const TypeSpec& expected, if (!success) { if (print_on_error) { if (error_source_name.empty()) { - fmt::print("[TypeSystem] Got type \"{}\" when expecting \"{}\"\n", actual.print(), - expected.print()); + lg::print("[TypeSystem] Got type \"{}\" when expecting \"{}\"\n", actual.print(), + expected.print()); } else { - fmt::print("[TypeSystem] For {}, got type \"{}\" when expecting \"{}\"\n", - error_source_name, actual.print(), expected.print()); + lg::print("[TypeSystem] For {}, got type \"{}\" when expecting \"{}\"\n", error_source_name, + actual.print(), expected.print()); } } diff --git a/common/type_system/deftype.cpp b/common/type_system/deftype.cpp index b5f8cea431..b8467530ec 100644 --- a/common/type_system/deftype.cpp +++ b/common/type_system/deftype.cpp @@ -7,6 +7,7 @@ #include "deftype.h" #include "common/goos/ParseHelpers.h" +#include "common/log/log.h" #include "third-party/fmt/core.h" @@ -402,7 +403,7 @@ StructureDefResult parse_structure_def( fmt::format("Process heap underflow in type {}: heap-base is {} vs. auto-detected {}", type->get_name(), flags.heap_base, auto_hb)); //} else if (flags.heap_base != auto_hb) { - // fmt::print("Type {} has manual heap-base ({} vs {}). This is fine. \n", type->get_name(), + // lg::print("Type {} has manual heap-base ({} vs {}). This is fine. \n", type->get_name(), // flags.heap_base, auto_hb); } } @@ -623,14 +624,14 @@ DeftypeResult parse_deftype(const goos::Object& deftype, new_type->set_pack(true); } if (sr.allow_misaligned) { - fmt::print( + lg::print( "[TypeSystem] :allow-misaligned was set on {}, which is a basic and cannot " "be misaligned\n", name); throw std::runtime_error("invalid pack option on basic"); } if (sr.always_stack_singleton) { - fmt::print( + lg::print( "[TypeSystem] :always-stack-singleton was set on {}, which is a basic and cannot " "be a stack singleton\n", name); diff --git a/common/type_system/state.cpp b/common/type_system/state.cpp index aa2cc38b73..a10f0c31a3 100644 --- a/common/type_system/state.cpp +++ b/common/type_system/state.cpp @@ -87,6 +87,22 @@ TypeSpec get_state_handler_type(StateHandler kind, const TypeSpec& state_type) { return result; } +std::vector get_state_handler_arg_names(StateHandler kind) { + switch (kind) { + case StateHandler::CODE: + // can have args, but are arbitrary + case StateHandler::ENTER: + case StateHandler::TRANS: + case StateHandler::POST: + case StateHandler::EXIT: + return {}; + case StateHandler::EVENT: + return {"proc", "arg1", "event-type", "event"}; + default: + ASSERT(false); + } +} + namespace { TypeSpec func_to_state_type(const TypeSpec& func_type, const TypeSpec& proc_type) { TypeSpec result("state"); diff --git a/common/type_system/state.h b/common/type_system/state.h index cf992455a1..4dd53c606b 100644 --- a/common/type_system/state.h +++ b/common/type_system/state.h @@ -17,6 +17,7 @@ StateHandler handler_name_to_kind(const std::string& name); std::string handler_kind_to_name(StateHandler kind); TypeSpec get_state_handler_type(const std::string& handler_name, const TypeSpec& state_type); TypeSpec get_state_handler_type(StateHandler kind, const TypeSpec& state_type); +std::vector get_state_handler_arg_names(StateHandler kind); std::optional get_state_type_from_enter_and_code(const TypeSpec& enter_func_type, const TypeSpec& code_func_type, diff --git a/common/util/Assert.cpp b/common/util/Assert.cpp index 9844d97839..be4e88288c 100644 --- a/common/util/Assert.cpp +++ b/common/util/Assert.cpp @@ -6,20 +6,23 @@ #include #include +#include "common/log/log.h" + void private_assert_failed(const char* expr, const char* file, int line, const char* function, const char* msg) { if (!msg || msg[0] == '\0') { - fprintf(stderr, "Assertion failed: '%s'\n\tSource: %s:%d\n\tFunction: %s\n", expr, file, line, - function); + std::string log = fmt::format("Assertion failed: '{}'\n\tSource: {}:{}\n\tFunction: {}\n", expr, + file, line, function); + lg::die(log); } else { - fprintf(stderr, "Assertion failed: '%s'\n\tMessage: %s\n\tSource: %s:%d\n\tFunction: %s\n", - expr, msg, file, line, function); + std::string log = + fmt::format("Assertion failed: '{}'\n\tMessage: {}\n\tSource: {}:{}\n\tFunction: {}\n", + expr, msg, file, line, function); + lg::die(log); } - fflush(stdout); // ensure any stdout logs are flushed before we terminate - fflush(stderr); abort(); } diff --git a/common/util/Assert.h b/common/util/Assert.h index 09d1b4ddcc..0d78ccf84b 100644 --- a/common/util/Assert.h +++ b/common/util/Assert.h @@ -28,9 +28,14 @@ #define ASSERT(EX) \ (void)((EX) || (private_assert_failed(#EX, __FILE__, __LINE__, __PRETTY_FUNCTION__), 0)) +#define ASSERT_NOT_REACHED() \ + (void)((private_assert_failed("not reached", __FILE__, __LINE__, __PRETTY_FUNCTION__), 0)) + #define ASSERT_MSG(EXPR, STR) \ (void)((EXPR) || (private_assert_failed(#EXPR, __FILE__, __LINE__, __PRETTY_FUNCTION__, STR), 0)) +#define ASSERT_NOT_REACHED_MSG(STR) \ + (void)((private_assert_failed("not reached", __FILE__, __LINE__, __PRETTY_FUNCTION__, STR), 0)) #else #define ASSERT(EX) ((void)0) diff --git a/common/util/FileUtil.cpp b/common/util/FileUtil.cpp index 0234383710..b9f2835039 100644 --- a/common/util/FileUtil.cpp +++ b/common/util/FileUtil.cpp @@ -139,7 +139,7 @@ bool setup_project_path(std::optional project_path_override) { if (project_path_override) { gFilePathInfo.path_to_data = *project_path_override; gFilePathInfo.initialized = true; - fmt::print("Using explicitly set project path: {}\n", project_path_override->string()); + lg::info("Using explicitly set project path: {}", project_path_override->string()); return true; } @@ -147,7 +147,7 @@ bool setup_project_path(std::optional project_path_override) { if (data_path) { gFilePathInfo.path_to_data = *data_path; gFilePathInfo.initialized = true; - fmt::print("Using data path: {}\n", data_path->string()); + lg::info("Using data path: {}", data_path->string()); return true; } @@ -155,11 +155,11 @@ bool setup_project_path(std::optional project_path_override) { if (development_repo_path) { gFilePathInfo.path_to_data = *development_repo_path; gFilePathInfo.initialized = true; - fmt::print("Using development repo path: {}\n", *development_repo_path); + lg::info("Using development repo path: {}", *development_repo_path); return true; } - fmt::print("Failed to initialize project path.\n"); + lg::error("Failed to initialize project path."); return false; } diff --git a/decompiler/Function/CfgVtx.cpp b/decompiler/Function/CfgVtx.cpp index e70be31832..9da41edfd6 100644 --- a/decompiler/Function/CfgVtx.cpp +++ b/decompiler/Function/CfgVtx.cpp @@ -3,6 +3,7 @@ #include "Function.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "common/symbols.h" #include "common/util/Assert.h" @@ -496,12 +497,12 @@ bool ControlFlowGraph::is_while_loop(CfgVtx* b0, CfgVtx* b1, CfgVtx* b2) { bool debug = b0->to_string() == "Seq CONDNE104 ... Block 18100"; if (debug) { - fmt::print("try while: {} | {} | {}\n", b0->to_string(), b1->to_string(), b2->to_string()); + lg::debug("try while: {} | {} | {}", b0->to_string(), b1->to_string(), b2->to_string()); } if (b0->end_branch.asm_branch || b1->end_branch.asm_branch) { if (debug) - fmt::print("reject 1 {} {}\n", b0->end_branch.asm_branch, b1->end_branch.asm_branch); + lg::debug("reject 1 {} {}", b0->end_branch.asm_branch, b1->end_branch.asm_branch); return false; } @@ -532,17 +533,17 @@ bool ControlFlowGraph::is_while_loop(CfgVtx* b0, CfgVtx* b1, CfgVtx* b2) { return false; ASSERT(!b1->end_branch.has_branch); if (!b2->has_pred(b0)) { - printf("expect b2 (%s) to have pred b0 (%s)\n", b2->to_string().c_str(), - b0->to_string().c_str()); - printf("but it doesn't! instead it has:\n"); + lg::debug("expect b2 ({}) to have pred b0 ({})", b2->to_string().c_str(), + b0->to_string().c_str()); + lg::debug("but it doesn't! instead it has:"); for (auto* x : b2->pred) { - printf(" %s\n", x->to_string().c_str()); + lg::debug(" {}", x->to_string().c_str()); } if (b0->succ_ft) { - printf("b0's succ_ft: %s\n", b0->succ_ft->to_string().c_str()); + lg::debug("b0's succ_ft: {}", b0->succ_ft->to_string().c_str()); } if (b0->succ_branch) { - printf("b0's succ_branch: %s\n", b0->succ_branch->to_string().c_str()); + lg::debug("b0's succ_branch: {}", b0->succ_branch->to_string().c_str()); } } ASSERT(b2->has_pred(b0)); @@ -583,12 +584,9 @@ bool ControlFlowGraph::is_until_loop(CfgVtx* b1, CfgVtx* b2) { return false; ASSERT(!b1->end_branch.has_branch); - if (!b2->has_pred(b1)) { - fmt::print("Graph error {} (s {}) should have pred {} (s {})\n", b2->to_string(), - b2->get_first_block_id(), b1->to_string(), b1->get_first_block_id()); - } - - ASSERT(b2->has_pred(b1)); + ASSERT_MSG(b2->has_pred(b1), + fmt::format("Graph error {} (s {}) should have pred {} (s {})\n", b2->to_string(), + b2->get_first_block_id(), b1->to_string(), b1->get_first_block_id())); if (b2->pred.size() != 1) return false; @@ -938,8 +936,6 @@ bool ControlFlowGraph::find_infinite_continue() { int my_block = b0->get_first_block_id(); int dest_block = b0->succ_branch->get_first_block_id(); - // fmt::print("Considering {} as an infinite continue:\n", b0->to_string()); - if (b0->end_branch.asm_branch) { return true; } @@ -1155,8 +1151,8 @@ bool ControlFlowGraph::clean_up_asm_branches() { } if (debug_asm_branch) { - fmt::print("Looks like asm likely branch: {} {} to {}\n", b0->to_string(), bds->to_string(), - b1->to_string()); + lg::debug("Looks like asm likely branch: {} {} to {}", b0->to_string(), bds->to_string(), + b1->to_string()); } auto* b0_seq = dynamic_cast(b0); @@ -1174,7 +1170,7 @@ bool ControlFlowGraph::clean_up_asm_branches() { for (auto* new_pred : b0->pred) { if (debug_asm_branch) { - fmt::print(" pred {}\n", new_pred->to_string()); + lg::debug(" pred {}", new_pred->to_string()); } new_pred->replace_succ_and_check(b0, new_seq); } @@ -1294,19 +1290,19 @@ bool ControlFlowGraph::clean_up_asm_branches() { else { lg::error("unhandled sequences in clean_up_asm_branches likely seq: {} {}", !!b0_seq, !!b1_seq); - lg::error("{} {}\n", b0->get_first_block_id(), b1->get_first_block_id()); + lg::error("{} {}", b0->get_first_block_id(), b1->get_first_block_id()); } } else { if (debug_asm_branch) { - fmt::print("Looks like asm normal branch: {} to {}\n", b0->to_string(), b1->to_string()); + lg::debug("Looks like asm normal branch: {} to {}", b0->to_string(), b1->to_string()); } auto* b0_seq = dynamic_cast(b0); auto* b1_seq = dynamic_cast(b1); if (!b0_seq && !b1_seq) { if (debug_asm_branch) { - fmt::print("[combo nn] {} and {}\n", b0->get_first_block_id(), b1->get_first_block_id()); + lg::debug("[combo nn] {} and {}", b0->get_first_block_id(), b1->get_first_block_id()); } // build new sequence replaced = true; @@ -1330,19 +1326,19 @@ bool ControlFlowGraph::clean_up_asm_branches() { for (auto* new_succ : b1->succs()) { if (debug_asm_branch) { - fmt::print("changing {}'s pred {} to seq. bc: {}", new_succ->to_string(), - b1->to_string(), new_succ->pred.size()); + lg::debug("changing {}'s pred {} to seq. bc: {}", new_succ->to_string(), + b1->to_string(), new_succ->pred.size()); } new_succ->replace_pred_and_check(b1, new_seq); if (debug_asm_branch) { - fmt::print(" ac: {}\n", new_succ->pred.size()); + lg::debug(" ac: {}", new_succ->pred.size()); } } new_seq->succ_ft = b1->succ_ft; if (b1->succ_branch && debug_asm_branch) { - fmt::print("combining {} and {} into a sequence, succ {}\n", b0->get_first_block_id(), - b1->get_first_block_id(), b1->succ_branch->get_first_block_id()); + lg::debug("combining {} and {} into a sequence, succ {}", b0->get_first_block_id(), + b1->get_first_block_id(), b1->succ_branch->get_first_block_id()); } new_seq->succ_branch = b1->succ_branch; @@ -1367,13 +1363,13 @@ bool ControlFlowGraph::clean_up_asm_branches() { return false; } else if (b0_seq && !b1_seq) { if (debug_asm_branch) { - fmt::print("[combo sn] {} and {}\n", b0->get_first_block_id(), b1->get_first_block_id()); - fmt::print("expanding sequence: {} (s {}) to include {}\n", b0_seq->to_string(), - b0_seq->get_first_block_id(), b1->get_first_block_id()); + lg::debug("[combo sn] {} and {}", b0->get_first_block_id(), b1->get_first_block_id()); + lg::debug("expanding sequence: {} (s {}) to include {}", b0_seq->to_string(), + b0_seq->get_first_block_id(), b1->get_first_block_id()); } if (b1->succ_ft) { if (debug_asm_branch) { - fmt::print(" b1 succ_ft is {}\n", b1->succ_ft->to_string()); + lg::debug(" b1 succ_ft is {}", b1->succ_ft->to_string()); } ASSERT(b1->succ_ft->has_pred(b1)); } @@ -1386,18 +1382,18 @@ bool ControlFlowGraph::clean_up_asm_branches() { if (b0->succ_branch) { if (debug_asm_branch) { - fmt::print("succ {} has {} preds parent: {}\n", b0->succ_branch->get_first_block_id(), - b0->succ_branch->pred.size(), !!b0->succ_branch->parent); + lg::debug("succ {} has {} preds parent: {}", b0->succ_branch->get_first_block_id(), + b0->succ_branch->pred.size(), !!b0->succ_branch->parent); } b0->succ_branch->replace_preds_with_and_check({b0}, nullptr); if (debug_asm_branch) { - fmt::print("OKOK\n"); + lg::debug("OKOK"); } } for (auto* new_succ : b1->succs()) { if (debug_asm_branch) { - fmt::print("fixing up succ {}\n", new_succ->to_string()); + lg::debug("fixing up succ {}", new_succ->to_string()); } new_succ->replace_pred_and_check(b1, b0); } @@ -1419,7 +1415,7 @@ bool ControlFlowGraph::clean_up_asm_branches() { } if (seq->succ_branch && debug_asm_branch) { - fmt::print(" new sb: {}\n", seq->succ_branch->get_first_block_id()); + lg::debug(" new sb: {}", seq->succ_branch->get_first_block_id()); } seq->next = b1->next; if (seq->next) { @@ -1434,8 +1430,8 @@ bool ControlFlowGraph::clean_up_asm_branches() { return false; } else if (b0_seq && b1_seq) { if (debug_asm_branch) { - fmt::print("[combo ss] {} and {}\n", b0->get_first_block_id(), b1->get_first_block_id()); - fmt::print(" {} and {}\n", b0->to_string(), b1->to_string()); + lg::debug("[combo ss] {} and {}", b0->get_first_block_id(), b1->get_first_block_id()); + lg::debug(" {} and {}", b0->to_string(), b1->to_string()); } // printf("make seq type 3 %s %s\n", b0->to_string().c_str(), b1->to_string().c_str()); @@ -1449,8 +1445,8 @@ bool ControlFlowGraph::clean_up_asm_branches() { if (b0->succ_branch) { if (debug_asm_branch) { - fmt::print(" sbp: {}\n", !!b0->succ_branch->parent); - fmt::print(" sb: {}\n", b0->succ_branch->to_string()); + lg::debug(" sbp: {}", !!b0->succ_branch->parent); + lg::debug(" sb: {}", b0->succ_branch->to_string()); } b0->succ_branch->replace_preds_with_and_check({b0}, nullptr); } @@ -1467,7 +1463,7 @@ bool ControlFlowGraph::clean_up_asm_branches() { seq->succ_branch = old_seq->succ_branch; seq->succ_branch = b1->succ_branch; if (seq->succ_branch && debug_asm_branch) { - fmt::print(" DS new sb: {}\n", seq->succ_branch->get_first_block_id()); + lg::debug(" DS new sb: {}", seq->succ_branch->get_first_block_id()); } seq->succ_ft = old_seq->succ_ft; seq->end_branch = old_seq->end_branch; @@ -1483,15 +1479,15 @@ bool ControlFlowGraph::clean_up_asm_branches() { } else if (!b0_seq && b1_seq) { replaced = true; if (!b0->succ_branch) { - fmt::print("bad: {}\n", b0->to_string()); + lg::debug("bad: {}", b0->to_string()); } m_blocks.at(b0->succ_branch->get_first_block_id())->needs_label = true; auto* old_seq = dynamic_cast(b1); ASSERT(old_seq); if (b0->succ_branch) { if (debug_asm_branch) { - fmt::print(" sbp: {}\n", !!b0->succ_branch->parent); - fmt::print(" sb: {}\n", b0->succ_branch->to_string()); + lg::debug(" sbp: {}", !!b0->succ_branch->parent); + lg::debug(" sb: {}", b0->succ_branch->to_string()); } b0->succ_branch->replace_preds_with_and_check({b0}, nullptr); } @@ -2318,18 +2314,18 @@ bool ControlFlowGraph::find_short_circuits() { ShortCircuit::Entry candidate = {vtx, vtx->next}; CfgVtx* end = vtx->next->succ_branch; - // fmt::print("Starting loop\n"); + // lg::print("Starting loop\n"); while (true) { // check candidate: if (!candidate.condition || !candidate.likely_delay || !end) { - // fmt::print("reject begin {} {} {}\n", !!candidate.condition, + // lg::print("reject begin {} {} {}\n", !!candidate.condition, // !!candidate.likely_delay, // !!end); return true; } - // fmt::print(" try {} and {} end {}\n", candidate.condition->to_string(), + // lg::print(" try {} and {} end {}\n", candidate.condition->to_string(), // candidate.likely_delay->to_string(), end->to_string()); if (candidate.condition->next == end) { @@ -2341,13 +2337,13 @@ bool ControlFlowGraph::find_short_circuits() { candidate.likely_delay = nullptr; entries.push_back(candidate); - // fmt::print("all done!"); + // lg::print("all done!"); break; } } if (!candidate.condition->next || !candidate.condition->succ_branch) { - // fmt::print(" fail 0 {}, {}\n", !!candidate.condition->next, + // lg::print(" fail 0 {}, {}\n", !!candidate.condition->next, // !!candidate.condition->succ_branch); return true; } @@ -2357,12 +2353,12 @@ bool ControlFlowGraph::find_short_circuits() { candidate.condition->next != candidate.condition->succ_branch || !candidate.condition->end_branch.branch_likely || candidate.condition->end_branch.kind != CfgVtx::DelaySlotKind::NO_DELAY) { - // fmt::print(" fail 1 {} {} {} {}\n", !candidate.condition->next, + // lg::print(" fail 1 {} {} {} {}\n", !candidate.condition->next, // candidate.condition->next != candidate.condition->succ_branch, // !candidate.condition->end_branch.branch_likely, // candidate.condition->end_branch.kind != // CfgVtx::DelaySlotKind::NO_DELAY); - // fmt::print(" fail 1 condition->next {}, condition->succ_branch {}\n", + // lg::print(" fail 1 condition->next {}, condition->succ_branch {}\n", // candidate.condition->next->to_string(), // candidate.condition->succ_branch->to_string()); return true; @@ -2371,7 +2367,7 @@ bool ControlFlowGraph::find_short_circuits() { if (entries.empty() && candidate.likely_delay->next == end) { entries.push_back(candidate); - // fmt::print("all don2!"); + // lg::print("all don2!"); break; } @@ -2380,7 +2376,7 @@ bool ControlFlowGraph::find_short_circuits() { !candidate.likely_delay->end_branch.branch_always || candidate.likely_delay->end_branch.branch_likely || candidate.likely_delay->end_branch.kind != CfgVtx::DelaySlotKind::NO_DELAY) { - // fmt::print(" fail 2 {} {} {} {} {} {} {}\n", candidate.likely_delay->pred.size() + // lg::print(" fail 2 {} {} {} {} {} {} {}\n", candidate.likely_delay->pred.size() // != 1, // !!candidate.likely_delay->succ_ft, // !candidate.likely_delay->succ_branch, @@ -2389,21 +2385,21 @@ bool ControlFlowGraph::find_short_circuits() { // !!candidate.likely_delay->end_branch.branch_likely, // candidate.likely_delay->end_branch.kind != // CfgVtx::DelaySlotKind::NO_DELAY); - // fmt::print("delay {} has ft {}\n", candidate.likely_delay->to_string(), + // lg::print("delay {} has ft {}\n", candidate.likely_delay->to_string(), // candidate.likely_delay->succ_ft->to_string()); return true; } // slot -> end if (candidate.likely_delay->succ_branch != end) { - // fmt::print(" fail 3\n"); + // lg::print(" fail 3\n"); return true; } // root -> next root if (!candidate.condition->next->next || candidate.condition->next->next != candidate.condition->succ_ft) { - // fmt::print(" fail 4\n"); + // lg::print(" fail 4\n"); return true; } @@ -2415,10 +2411,10 @@ bool ControlFlowGraph::find_short_circuits() { // pre next root check if (next_root->pred.size() != 1) { - // fmt::print(" fail 5\n"); + // lg::print(" fail 5\n"); return true; } - // fmt::print("on to next!\n"); + // lg::print("on to next!\n"); } auto new_sc = alloc(); @@ -2618,7 +2614,7 @@ std::shared_ptr build_cfg(const LinkedObjectFile& file, const CondWithElseLengthHack& cond_with_else_hack, const std::unordered_set& blocks_ending_in_asm_br, GameVersion version) { - // fmt::print("START {}\n", func.guessed_name.to_string()); + // lg::print("START {}\n", func.guessed_name.to_string()); auto cfg = std::make_shared(); const auto& blocks = cfg->create_blocks(func.basic_blocks.size()); @@ -2769,7 +2765,7 @@ std::shared_ptr build_cfg(const LinkedObjectFile& file, if (blocks_ending_in_asm_br.find(i) != blocks_ending_in_asm_br.end()) { b->end_branch.asm_branch = true; if (debug_asm_branch) { - fmt::print("OVERRIDE asm branch at block {}\n", i); + lg::debug("OVERRIDE asm branch at block {}", i); } continue; } @@ -2785,9 +2781,8 @@ std::shared_ptr build_cfg(const LinkedObjectFile& file, if (branch_delay_asm(following, version)) { b->end_branch.asm_branch = true; if (debug_asm_branch) { - fmt::print("LIKELY ASM BRANCH: {} and {}\n", - likely_branch_candidate.to_string(file.labels), - following.to_string(file.labels)); + lg::debug("LIKELY ASM BRANCH: {} and {}", likely_branch_candidate.to_string(file.labels), + following.to_string(file.labels)); } } } @@ -2801,8 +2796,8 @@ std::shared_ptr build_cfg(const LinkedObjectFile& file, if (branch_delay_asm(delay_slot_candidate, version)) { b->end_branch.asm_branch = true; if (debug_asm_branch) { - fmt::print("NORMAL ASM BRANCH: {} and {}\n", branch_candidate.to_string(file.labels), - delay_slot_candidate.to_string(file.labels)); + lg::debug("NORMAL ASM BRANCH: {} and {}", branch_candidate.to_string(file.labels), + delay_slot_candidate.to_string(file.labels)); } } } diff --git a/decompiler/Function/Function.cpp b/decompiler/Function/Function.cpp index 7dc33c21af..c64c9546f3 100644 --- a/decompiler/Function/Function.cpp +++ b/decompiler/Function/Function.cpp @@ -658,7 +658,7 @@ void Function::find_type_defs(LinkedObjectFile& file, DecompilerTypeSystem& dts) if (instr.kind == InstructionKind::SLL && instr.get_dst(0).get_reg() == make_gpr(Reg::V0) && instr.get_src(0).get_reg() == make_gpr(Reg::RA) && instr.get_src(1).get_imm() == 0) { // done! - // fmt::print("Got type {} parent {}\n", type_name, parent_type); + // lg::print("Got type {} parent {}\n", type_name, parent_type); dts.add_type_parent(type_name, parent_type); DecompilerLabel flag_label = file.labels.at(label_idx); u64 word = file.read_data_word(flag_label); @@ -667,7 +667,7 @@ void Function::find_type_defs(LinkedObjectFile& file, DecompilerTypeSystem& dts) word |= (word2 << 32); types_defined.push_back(type_name); dts.add_type_flags(type_name, word); - // fmt::print("Flags are 0x{:x}\n", word); + // lg::print("Flags are 0x{:x}\n", word); state = 0; continue; } diff --git a/decompiler/IR2/AtomicOpForm.cpp b/decompiler/IR2/AtomicOpForm.cpp index c4e1e6f364..a022f968d8 100644 --- a/decompiler/IR2/AtomicOpForm.cpp +++ b/decompiler/IR2/AtomicOpForm.cpp @@ -119,14 +119,14 @@ FormElement* SetVarOp::get_as_form(FormPool& pool, const Env& env) const { menv->disable_use(src_var); } - // fmt::print("marked {} as dead set\n", to_string(env)); + // lg::print("marked {} as dead set\n", to_string(env)); } } else if (m_src.get_arg(0).is_sym_val() && m_src.get_arg(0).get_str() == "#f" && m_dst.reg().allowed_local_gpr()) { auto& ri = env.reg_use().op.at(m_my_idx); if (ri.written_and_unused.find(dst().reg()) != ri.written_and_unused.end()) { result->mark_as_dead_false(); - // fmt::print("marked {} as dead set false\n", to_string(env)); + // lg::print("marked {} as dead set false\n", to_string(env)); } } } diff --git a/decompiler/IR2/AtomicOpTypeAnalysis.cpp b/decompiler/IR2/AtomicOpTypeAnalysis.cpp index 8584821a56..49e92d6880 100644 --- a/decompiler/IR2/AtomicOpTypeAnalysis.cpp +++ b/decompiler/IR2/AtomicOpTypeAnalysis.cpp @@ -314,7 +314,7 @@ TP_Type get_stack_type_at_constant_offset(int offset, auto rd = dts.ts.reverse_field_lookup(rd_in); if (rd.success) { auto result = TP_Type::make_from_ts(coerce_to_reg_type(rd.result_type)); - fmt::print("Matched a stack variable! {}\n", result.print()); + lg::print("Matched a stack variable! {}\n", result.print()); return result; } */ @@ -1428,7 +1428,6 @@ TypeState CallOp::propagate_types_internal(const TypeState& input, in_type.last_arg() == TypeSpec("array")) { // array new: auto& a2 = input.get(Register(Reg::GPR, arg_regs[2])); // elt type - auto& a1 = input.get(Register(Reg::GPR, arg_regs[1])); // array auto& a0 = input.get(Register(Reg::GPR, arg_regs[0])); // allocation if (a2.kind == TP_Type::Kind::TYPE_OF_TYPE_NO_VIRTUAL && diff --git a/decompiler/IR2/Env.cpp b/decompiler/IR2/Env.cpp index a8efa145a1..382c81d12f 100644 --- a/decompiler/IR2/Env.cpp +++ b/decompiler/IR2/Env.cpp @@ -7,8 +7,10 @@ #include "Form.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "common/util/math_util.h" +#include "decompiler/Function/Function.h" #include "decompiler/analysis/atomic_op_builder.h" #include "decompiler/util/DecompilerTypeSystem.h" @@ -25,12 +27,21 @@ const char* get_reg_name(int idx) { } } -void Env::set_remap_for_function(const TypeSpec& ts) { - int nargs = ts.arg_count() - 1; - for (int i = 0; i < nargs; i++) { - m_var_remap[get_reg_name(i)] = ("arg" + std::to_string(i)); +void Env::set_remap_for_function(const Function& func) { + std::vector default_arg_names = {}; + if (func.guessed_name.kind == FunctionName::FunctionKind::V_STATE || + func.guessed_name.kind == FunctionName::FunctionKind::NV_STATE) { + default_arg_names = get_state_handler_arg_names(func.guessed_name.handler_kind); } - if (ts.try_get_tag("behavior")) { + int nargs = func.type.arg_count() - 1; + for (int i = 0; i < nargs; i++) { + if ((int)default_arg_names.size() > i) { + m_var_remap[get_reg_name(i)] = default_arg_names.at(i); + } else { + m_var_remap[get_reg_name(i)] = ("arg" + std::to_string(i)); + } + } + if (func.type.try_get_tag("behavior")) { m_var_remap["s6-0"] = "self"; m_pp_mapped_by_behavior = true; } else { @@ -175,7 +186,7 @@ VariableWithCast Env::get_variable_and_cast(const RegisterAccess& access) const // note - this may be stricter than needed. but that's ok. if (type_of_var != type_of_reg) { - // fmt::print("casting {} (reg {}, idx {}): reg type {} var type {} remapped var + // lg::print("casting {} (reg {}, idx {}): reg type {} var type {} remapped var // type // {}\n ", // lookup_name, reg.to_charp(), atomic_idx, type_of_reg.print(), @@ -190,7 +201,7 @@ VariableWithCast Env::get_variable_and_cast(const RegisterAccess& access) const // let's leave this to set!'s for now. This is tricky with stuff like (if y x) where the // move is eliminated so the RegisterAccess points to the "wrong" place. // if (!dts->ts.tc(type_of_var, type_of_reg)) { - // fmt::print("op {} reg {} type {}\n", atomic_idx, reg.to_charp(), + // lg::print("op {} reg {} type {}\n", atomic_idx, reg.to_charp(), // get_types_for_op_mode(atomic_idx, mode).get(reg).print()); return // pretty_print::build_list("the-as", type_of_reg.print(), lookup_name); // } diff --git a/decompiler/IR2/Env.h b/decompiler/IR2/Env.h index 6c5a6ef894..e2e2f92865 100644 --- a/decompiler/IR2/Env.h +++ b/decompiler/IR2/Env.h @@ -157,7 +157,7 @@ class Env { const std::string& art_group() const { return m_art_group; } std::optional get_art_elt_name(int idx) const; - void set_remap_for_function(const TypeSpec& ts); + void set_remap_for_function(const Function& func); void set_remap_for_method(const TypeSpec& ts); void set_remap_for_new_method(const TypeSpec& ts); void map_args_from_config(const std::vector& args_names, diff --git a/decompiler/IR2/ExpressionHelpers.cpp b/decompiler/IR2/ExpressionHelpers.cpp index e907f14378..0c58d2264f 100644 --- a/decompiler/IR2/ExpressionHelpers.cpp +++ b/decompiler/IR2/ExpressionHelpers.cpp @@ -1,6 +1,7 @@ #include "ExpressionHelpers.h" #include "common/goal_constants.h" +#include "common/log/log.h" #include "decompiler/IR2/Env.h" #include "decompiler/IR2/Form.h" @@ -44,14 +45,14 @@ FormElement* handle_get_property_value_float(const std::vector& forms, // get the mode. It must be interp. auto mode_atom = form_as_atom(forms.at(2)); if (!mode_atom || !mode_atom->is_sym_ptr("interp")) { - fmt::print("fail: bad mode {}\n", forms.at(2)->to_string(env)); + lg::error("fail: bad mode {}", forms.at(2)->to_string(env)); return nullptr; } // get the time. It must be DEFAULT_RES_TIME auto lookup_time = try_get_const_float(forms.at(3)); if (!lookup_time || *lookup_time != DEFAULT_RES_TIME) { - fmt::print("fail: bad time {}\n", forms.at(3)->to_string(env)); + lg::error("fail: bad time {}\n", forms.at(3)->to_string(env)); return nullptr; } @@ -119,7 +120,7 @@ FormElement* handle_get_property_data_or_structure(const std::vector& for // get the mode. It must be interp. auto mode_atom = form_as_atom(forms.at(2)); if (!mode_atom || !mode_atom->is_sym_ptr("interp")) { - fmt::print("fail data: bad mode {}\n", forms.at(2)->to_string(env)); + lg::error("fail data: bad mode {}", forms.at(2)->to_string(env)); return nullptr; } @@ -134,7 +135,7 @@ FormElement* handle_get_property_data_or_structure(const std::vector& for Form* default_value = forms.at(4); // but let's see if it's 0, because that's the default in the macro if (default_value->to_string(env) != expcted_default) { - fmt::print("fail data: bad default {}\n", default_value->to_string(env)); + lg::error("fail data: bad default {}", default_value->to_string(env)); return nullptr; } @@ -184,7 +185,7 @@ FormElement* handle_get_property_value(const std::vector& forms, // get the mode. It must be interp. auto mode_atom = form_as_atom(forms.at(2)); if (!mode_atom || !mode_atom->is_sym_ptr("interp")) { - fmt::print("fail data: bad mode {}\n", forms.at(2)->to_string(env)); + lg::error("fail data: bad mode {}", forms.at(2)->to_string(env)); return nullptr; } @@ -318,7 +319,7 @@ FormElement* last_two_in_and_to_handle_get_proc(Form* first, } // auto first_use_of_in = *first_result.maps.regs.at(reg_input_1); - // fmt::print("reg1: {}\n", first_use_of_in.to_string(env)); + // lg::print("reg1: {}\n", first_use_of_in.to_string(env)); auto setup_matcher = Matcher::set_var( Matcher::deref(Matcher::any_reg(reg_input_2), false, @@ -368,22 +369,22 @@ FormElement* last_two_in_and_to_handle_get_proc(Form* first, const auto& temp_use_def = env.get_use_def_info(*second_result.maps.regs.at(reg_temp_1)); if (temp_use_def.use_count() != 2 || temp_use_def.def_count() != 1) { - fmt::print("failed usedef: {} {}\n", temp_use_def.use_count(), temp_use_def.def_count()); + lg::error("failed usedef: {} {}", temp_use_def.use_count(), temp_use_def.def_count()); return nullptr; } if (part_of_longer_sc) { // check that our temporary name matches (it's the var used inside the macro) if (in_name != longer_sc_var.to_string(env)) { - fmt::print("failed var name: {} vs {}\n", temp_name, longer_sc_var.to_string(env)); + lg::error("failed var name: {} vs {}", temp_name, longer_sc_var.to_string(env)); return nullptr; } // check that our temporary has the right usage pattern. const auto& outer_temp_usedef = env.get_use_def_info(longer_sc_var); if (outer_temp_usedef.use_count() != 3 || outer_temp_usedef.def_count() != 1) { - fmt::print("failed usedef2: {} {}\n", outer_temp_usedef.use_count(), - outer_temp_usedef.def_count()); + lg::error("failed usedef2: {} {}", outer_temp_usedef.use_count(), + outer_temp_usedef.def_count()); return nullptr; } @@ -400,7 +401,7 @@ FormElement* last_two_in_and_to_handle_get_proc(Form* first, menv->disable_use(in3); auto repopped = stack.pop_reg(in1, {}, env, true); - // fmt::print("repopped: {}\n", repopped->to_string(env)); + // lg::print("repopped: {}\n", repopped->to_string(env)); if (!repopped) { repopped = var_to_form(in1, pool); @@ -414,4 +415,4 @@ FormElement* last_two_in_and_to_handle_get_proc(Form* first, cast_type_for_result, pool); } } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index dc945bd3c2..fe4a46229b 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -3,6 +3,7 @@ #include "GenericElementMatcher.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "common/type_system/state.h" #include "common/util/Assert.h" #include "common/util/BitUtils.h" @@ -402,7 +403,7 @@ void pop_helper(const std::vector& vars, submit_regs.push_back(var.reg()); } else { // auto var_id = env.get_program_var_id(var); - // fmt::print( + // lg::print( // "Unsafe to pop {}: used {} times, def {} times, expected use {} ({} {} rd: // {}) ({} " // "{})\n", @@ -413,7 +414,7 @@ void pop_helper(const std::vector& vars, // if (var.to_string(env) == "a3-0") { // for (auto& use : use_def.uses) { // if (!use.disabled) { - // fmt::print(" at instruction {}\n", use.op_id); + // lg::print(" at instruction {}\n", use.op_id); // } // } // } @@ -1051,7 +1052,7 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, // try to find symbol to string stuff auto arg0_int = get_goal_integer_constant(args.at(0), env); - if (arg0_int && (*arg0_int == SYMBOL_TO_STRING_MEM_OFFSET_DECOMP[env.version]) && + if (arg0_int && ((s64)*arg0_int == SYMBOL_TO_STRING_MEM_OFFSET_DECOMP[env.version]) && allowable_base_type_for_symbol_to_string(arg1_type.typespec())) { result->push_back(pool.alloc_element(args.at(1))); return; @@ -1231,7 +1232,7 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, } } } - // fmt::print("here {} {} {}\n", rd_in.base_type.print(), rd.success, + // lg::print("here {} {} {}\n", rd_in.base_type.print(), rd.success, // rd.has_variable_token()); if (idx_of_success >= 0) { @@ -1261,7 +1262,7 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, return; } else { // TODO - output error to IR - lg::error("Bad {} at OP: {}\n", args.at(0)->to_string(env), m_my_idx); + lg::error("Bad {} at OP: {}", args.at(0)->to_string(env), m_my_idx); throw std::runtime_error("Failed to match product_with_constant inline array access 2."); } } @@ -1543,7 +1544,7 @@ void SimpleExpressionElement::update_from_stack_pcypld(const Env& env, result->push_back(as_mod); return; } else { - fmt::print("pcpyud rewrite form fail: {} {}\n", base_form.print(), a1_form.print()); + lg::warn("pcpyud rewrite form fail: {} {}", base_form.print(), a1_form.print()); } } auto new_form = pool.alloc_element( @@ -2013,7 +2014,7 @@ void SimpleExpressionElement::update_from_stack_logor_or_logand(const Env& env, auto repopped = stack.pop_reg(var_b, {}, env, true, stack.size() - 1); if (!repopped) { - fmt::print("repop failed.\n{}\n", stack.print(env)); + lg::warn("repop failed.\n{}", stack.print(env)); repopped = var_to_form(var_b, pool); } @@ -2610,7 +2611,7 @@ void SetFormFormElement::push_to_stack(const Env& env, FormPool& pool, FormStack m_src = value; } } else if (src_as_bf_set) { - fmt::print("invalid bf set: {}\n", src_as_bf_set->to_string(env)); + lg::warn("invalid bf set: {}", src_as_bf_set->to_string(env)); } // setting a bitfield to zero is wonky. @@ -3032,12 +3033,12 @@ Form* get_set_next_state(FormElement* set_elt, const Env& env) { Matcher::deref(Matcher::any_reg(0), false, {DerefTokenMatcher::string("next-state")}); auto mr = match(dst_matcher, dst); if (!mr.matched) { - fmt::print("failed to match dst {}\n", dst->to_string(env)); + lg::error("failed to match dst {}", dst->to_string(env)); return nullptr; } if (mr.maps.regs.at(0)->reg() != Register(Reg::GPR, Reg::S6)) { - fmt::print("failed to match pp reg, got {}\n", mr.maps.regs.at(0)->reg().to_string()); + lg::error("failed to match pp reg, got {}", mr.maps.regs.at(0)->reg().to_string()); return nullptr; } @@ -3243,22 +3244,23 @@ void FunctionCallElement::update_from_stack(const Env& env, "type."); } - bool is_res_lump = tp_type.method_from_type().base_type() == "res-lump"; + bool is_res_lump = tp_type.method_from_type().base_type() == "res-lump" || + tp_type.method_from_type().base_type() == "entity-actor"; bool should_use_virtual = env.dts->ts.should_use_virtual_methods(tp_type.method_from_type(), tp_type.method_id()); if (!should_use_virtual && !is_res_lump) { throw std::runtime_error( - fmt::format("Method call on {} id {} used a virtual call unexpectedly.", - tp_type.method_from_type().print(), tp_type.method_id())); + fmt::format("Method call on {} id {} at {} used a virtual call unexpectedly.", + tp_type.method_from_type().print(), tp_type.method_id(), "ya")); } if (should_use_virtual) { - // fmt::print("STACK\n{}\n\n", stack.print(env)); + // lg::print("STACK\n{}\n\n", stack.print(env)); auto pop = pop_to_forms({*arg0_mr.maps.regs.at(0)}, env, pool, stack, allow_side_effects, {}, {2}) .at(0); - // fmt::print("GOT: {}\n", pop->to_string(env)); + // lg::print("GOT: {}\n", pop->to_string(env)); arg_forms.at(0) = pop; auto head = mr.maps.forms.at(1); @@ -3873,7 +3875,7 @@ Form* try_rewrite_as_process_to_ppointer(CondNoElseElement* value, return nullptr; } - // fmt::print("Matched condition {} in {}\n", condition_var.to_string(env), + // lg::print("Matched condition {} in {}\n", condition_var.to_string(env), // value->to_string(env)); auto* menv = const_cast(&env); @@ -3927,7 +3929,7 @@ Form* try_rewrite_as_pppointer_to_process(CondNoElseElement* value, return nullptr; } - // fmt::print("Matched condition {} in {}\n", condition_var.to_string(env), + // lg::print("Matched condition {} in {}\n", condition_var.to_string(env), // value->to_string(env)); auto* menv = const_cast(&env); @@ -4063,7 +4065,7 @@ void CondNoElseElement::push_to_stack(const Env& env, FormPool& pool, FormStack& stack.push_value_to_reg(write_as_value, as_ja_group, true, env.get_variable_type(final_destination, false)); } else { - // fmt::print("func {} final destination {} type {}\n", env.func->name(), + // lg::print("func {} final destination {} type {}\n", env.func->name(), // final_destination.to_string(env), // env.get_variable_type(final_destination, false).print()); stack.push_value_to_reg(write_as_value, pool.alloc_single_form(nullptr, this), true, @@ -4231,24 +4233,24 @@ void CondWithElseElement::push_to_stack(const Env& env, FormPool& pool, FormStac // (set! x (if y z (expr))) and z requires a cast, but the move from z to x is // eliminated by GOAL's register allocator. - // fmt::print("func: {}\n", env.func->name()); + // lg::print("func: {}\n", env.func->name()); // - // fmt::print("checking:\n"); + // lg::print("checking:\n"); // for (auto& t : source_types) { - // fmt::print(" {}\n", t.print()); + // lg::print(" {}\n", t.print()); // } auto expected_type = env.get_variable_type(*last_var, true); - // fmt::print("The expected type is {}\n", expected_type.print()); + // lg::print("The expected type is {}\n", expected_type.print()); auto result_type = source_types.empty() ? expected_type : env.dts->ts.lowest_common_ancestor(source_types); - // fmt::print("but we actually got {}\n", result_type.print()); + // lg::print("but we actually got {}\n", result_type.print()); Form* result_value = pool.alloc_single_form(nullptr, this); if (!env.dts->ts.tc(expected_type, result_type)) { result_value = pool.form(expected_type, result_value); } - // fmt::print("{}\n", result_value->to_string(env)); + // lg::print("{}\n", result_value->to_string(env)); stack.push_value_to_reg(*last_var, result_value, true, env.get_variable_type(*last_var, false)); @@ -4449,66 +4451,6 @@ FormElement* try_make_nonzero_logtest(Form* in, FormPool& pool) { } return nullptr; } -} // namespace - -FormElement* ConditionElement::make_zero_check_generic(const Env& env, - FormPool& pool, - const std::vector& source_forms, - const std::vector& source_types) { - // (zero? (+ thing small-integer)) -> (= thing (- small-integer)) - ASSERT(source_forms.size() == 1); - - auto enum_type_info = env.dts->ts.try_enum_lookup(source_types.at(0)); - if (enum_type_info && !enum_type_info->is_bitfield()) { - // (zero? (+ (the-as uint arg0) (the-as uint -2))) check enum value - auto mr = match( - Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), - {make_int_uint_cast_matcher(Matcher::any(0)), - Matcher::match_or({Matcher::any_integer(1), - make_int_uint_cast_matcher(Matcher::any_integer(1))})}), - source_forms.at(0)); - if (mr.matched) { - s64 value = mr.maps.ints.at(1); - value = -value; - auto enum_constant = cast_to_int_enum(enum_type_info, pool, env, value); - return pool.alloc_element( - GenericOperator::make_fixed(FixedOperatorKind::EQ), - std::vector{mr.maps.forms.at(0), enum_constant}); - } - } - - { - auto mr = match(Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), - {Matcher::any(0), Matcher::any_integer(1)}), - source_forms.at(0)); - if (mr.matched) { - s64 value = -mr.maps.ints.at(1); - auto value_form = pool.form(SimpleAtom::make_int_constant(value)); - return pool.alloc_element( - GenericOperator::make_fixed(FixedOperatorKind::EQ), - std::vector{mr.maps.forms.at(0), value_form}); - } - } - - auto nice_constant = try_make_constant_from_int_for_compare(0, source_types.at(0), pool, env); - if (nice_constant) { - return pool.alloc_element( - GenericOperator::make_fixed(FixedOperatorKind::EQ), - std::vector{source_forms.at(0), nice_constant}); - } - - /* - auto as_logtest = try_make_nonzero_logtest(source_forms.at(0), pool); - if (as_logtest) { - auto logtest_form = pool.alloc_single_form(nullptr, as_logtest); - auto not_form = pool.alloc_element( - GenericOperator::make_compare(IR2_Condition::Kind::FALSE), logtest_form); - return not_form; - } - */ - - return pool.alloc_element(GenericOperator::make_compare(m_kind), source_forms); -} FormElement* try_make_logtest_cpad_macro(Form* in, FormPool& pool) { /* @@ -4564,6 +4506,68 @@ FormElement* try_make_logtest_cpad_macro(Form* in, FormPool& pool) { } return nullptr; } +} // namespace + +FormElement* ConditionElement::make_zero_check_generic(const Env& env, + FormPool& pool, + const std::vector& source_forms, + const std::vector& source_types) { + // (zero? (+ thing small-integer)) -> (= thing (- small-integer)) + ASSERT(source_forms.size() == 1); + + auto enum_type_info = env.dts->ts.try_enum_lookup(source_types.at(0)); + if (enum_type_info && !enum_type_info->is_bitfield()) { + // (zero? (+ (the-as uint arg0) (the-as uint -2))) check enum value + auto mr = match( + Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), + {make_int_uint_cast_matcher(Matcher::any(0)), + Matcher::match_or({Matcher::any_integer(1), + make_int_uint_cast_matcher(Matcher::any_integer(1))})}), + source_forms.at(0)); + if (mr.matched) { + s64 value = mr.maps.ints.at(1); + value = -value; + auto enum_constant = cast_to_int_enum(enum_type_info, pool, env, value); + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::EQ), + std::vector{mr.maps.forms.at(0), enum_constant}); + } + } + + { + auto mr = match(Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), + {Matcher::any(0), Matcher::any_integer(1)}), + source_forms.at(0)); + if (mr.matched) { + s64 value = -mr.maps.ints.at(1); + auto value_form = pool.form(SimpleAtom::make_int_constant(value)); + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::EQ), + std::vector{mr.maps.forms.at(0), value_form}); + } + } + + auto nice_constant = try_make_constant_from_int_for_compare(0, source_types.at(0), pool, env); + if (nice_constant) { + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::EQ), + std::vector{source_forms.at(0), nice_constant}); + } + + auto as_logtest = try_make_nonzero_logtest(source_forms.at(0), pool); + if (as_logtest) { + auto logtest_form = pool.alloc_single_form(nullptr, as_logtest); + auto as_cpad_macro = try_make_logtest_cpad_macro(logtest_form, pool); + if (as_cpad_macro) { + logtest_form = pool.alloc_single_form(nullptr, as_cpad_macro); + } + auto not_form = pool.alloc_element( + GenericOperator::make_compare(IR2_Condition::Kind::FALSE), logtest_form); + return not_form; + } + + return pool.alloc_element(GenericOperator::make_compare(m_kind), source_forms); +} FormElement* ConditionElement::make_nonzero_check_generic(const Env& env, FormPool& pool, @@ -5339,7 +5343,7 @@ void AsmBranchElement::push_to_stack(const Env& env, FormPool& pool, FormStack& auto op = pool.alloc_element( branch_condition, m_branch_delay, m_branch_op->label_id(), m_branch_op->is_likely()); - // fmt::print("rewrote as {}\n", op->to_string(env)); + // lg::print("rewrote as {}\n", op->to_string(env)); stack.push_form_element(op, true); } @@ -5397,7 +5401,7 @@ void BranchElement::push_to_stack(const Env& env, FormPool& pool, FormStack& sta ASSERT(!m_op->likely()); auto op = pool.alloc_element(branch_condition, branch_delay, m_op->label_id(), m_op->likely()); - // fmt::print("rewrote (non-asm) as {}\n", op->to_string(env)); + // lg::print("rewrote (non-asm) as {}\n", op->to_string(env)); stack.push_form_element(op, true); } @@ -5518,7 +5522,7 @@ void ArrayFieldAccess::update_with_val(Form* new_val, if (!match_result.matched) { result->push_back(this); return; - fmt::print("power {}\n", power_of_two); + lg::error("power {}", power_of_two); throw std::runtime_error( "Couldn't match ArrayFieldAccess (stride power of 2, 0 offset) values: " + new_val->to_string(env)); @@ -5762,7 +5766,7 @@ void ConditionalMoveFalseElement::push_to_stack(const Env& env, FormPool& pool, Form* val = nullptr; - if (!val && on_zero) { + if (on_zero) { auto as_logtest = try_make_nonzero_logtest(popped.at(1), pool); if (as_logtest) { auto logtest_form = pool.alloc_single_form(nullptr, as_logtest); diff --git a/decompiler/IR2/bitfields.cpp b/decompiler/IR2/bitfields.cpp index 99b8bb2a4e..87f994c05f 100644 --- a/decompiler/IR2/bitfields.cpp +++ b/decompiler/IR2/bitfields.cpp @@ -1,6 +1,7 @@ #include "bitfields.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "common/util/BitUtils.h" #include "common/util/Range.h" @@ -563,7 +564,7 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, // in this case, we expect the value we're oring with to be the appropriate mask for the field. - fmt::print("Rare bitfield set!\n"); + lg::info("Rare bitfield set!"); u64 value = step.amount; auto type = ts.lookup_type(m_type); auto as_bitfield = dynamic_cast(type); @@ -621,7 +622,7 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, } lg::error("Current: {}", step.print()); if (m_got_pcpyud) { - lg::error("Got pcpyud\n"); + lg::error("Got pcpyud"); } throw std::runtime_error("Unknown state in BitfieldReadElement"); diff --git a/decompiler/ObjectFile/LinkedObjectFileCreation.cpp b/decompiler/ObjectFile/LinkedObjectFileCreation.cpp index 51db88689e..f7eaad5f95 100644 --- a/decompiler/ObjectFile/LinkedObjectFileCreation.cpp +++ b/decompiler/ObjectFile/LinkedObjectFileCreation.cpp @@ -9,6 +9,7 @@ #include #include "common/link_types.h" +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/BitUtils.h" @@ -125,7 +126,11 @@ static uint32_t c_symlink2(LinkedObjectFile& f, word_kind = LinkedWord::EMPTY_PTR; break; case SymbolLinkKind::TYPE: - dts.add_symbol(name, "type", {}); + // hack for jak 2: this symbol is used as a type in village 1 and also the oracle level + // level info. We'll just leave it out, as we don't really need these definitions. + if (std::string(name) != "oracle") { + dts.add_symbol(name, "type", {}); + } word_kind = LinkedWord::TYPE_PTR; break; default: diff --git a/decompiler/ObjectFile/ObjectFileDB.cpp b/decompiler/ObjectFile/ObjectFileDB.cpp index dd75acc271..81c78ad101 100644 --- a/decompiler/ObjectFile/ObjectFileDB.cpp +++ b/decompiler/ObjectFile/ObjectFileDB.cpp @@ -150,7 +150,7 @@ ObjectFileDB::ObjectFileDB(const std::vector& _dgos, auto name = obj_filename_to_name(obj.string()); if (auto it = config.object_patches.find(name); it != config.object_patches.end()) { // print the file CRC - fmt::print("CRC for {} is: 0x{:X}\n", name, crc32(data.data(), data.size())); + lg::print("CRC for {} is: 0x{:X}\n", name, crc32(data.data(), data.size())); // write patch file if necessary if (config.write_patches) { // this is the "target" file we want to patch to @@ -219,7 +219,7 @@ ObjectFileDB::ObjectFileDB(const std::vector& _dgos, } } - lg::info("ObjectFileDB Initialized\n"); + lg::info("ObjectFileDB Initialized"); if (obj_files_by_name.empty()) { lg::error( "No object files have been added. Check that there are input files and the allowed_objects " @@ -496,7 +496,7 @@ void ObjectFileDB::process_link_data(const Config& config) { }); lg::info("Processed Link Data"); - lg::info(" Total {:.2f} ms\n", process_link_timer.getMs()); + lg::info(" Total {:.2f} ms", process_link_timer.getMs()); // printf("\n"); } @@ -511,7 +511,7 @@ void ObjectFileDB::process_labels() { lg::info("Processed Labels:"); lg::info(" Total {} labels", total); - lg::info(" Total {:.2f} ms\n", process_label_timer.getMs()); + lg::info(" Total {:.2f} ms", process_label_timer.getMs()); } /*! @@ -617,7 +617,7 @@ void ObjectFileDB::find_code(const Config& config) { auto total_ops = combined_stats.code_bytes / 4; lg::info(" Decoded {} / {} ({:.3f} %)", combined_stats.decoded_ops, total_ops, 100.f * (float)combined_stats.decoded_ops / total_ops); - lg::info(" Total {:.3f} ms\n", timer.getMs()); + lg::info(" Total {:.3f} ms", timer.getMs()); } /*! @@ -643,7 +643,7 @@ void ObjectFileDB::find_and_write_scripts(const fs::path& output_dir) { file_util::write_text_file(file_name, all_scripts); lg::info("Found scripts:"); - lg::info(" Total {:.3f} ms\n", timer.getMs()); + lg::info(" Total {:.3f} ms", timer.getMs()); } std::string ObjectFileDB::process_tpages(TextureDB& tex_db, const fs::path& output_path) { @@ -741,10 +741,10 @@ void get_art_info(ObjectFileDB& db, ObjectFileData& obj) { const auto& words = obj.linked_data.words_by_seg.at(MAIN_SEGMENT); if (words.at(0).kind() == LinkedWord::Kind::TYPE_PTR && words.at(0).symbol_name() == "art-group") { - // fmt::print("art-group {}:\n", obj.to_unique_name()); + // lg::print("art-group {}:\n", obj.to_unique_name()); auto name = obj.linked_data.get_goal_string_by_label(words.at(2).label_id()); int length = words.at(3).data; - // fmt::print(" length: {}\n", length); + // lg::print(" length: {}\n", length); std::unordered_map art_group_elts; for (int i = 0; i < length; ++i) { const auto& word = words.at(8 + i); @@ -772,7 +772,7 @@ void get_art_info(ObjectFileDB& db, ObjectFileData& obj) { fmt::format("unknown art elt type {} in {}", elt_type, obj.to_unique_name())); } art_group_elts[i] = unique_name; - // fmt::print(" {}: {} ({}) -> {}\n", i, elt_name, elt_type, unique_name); + // lg::print(" {}: {} ({}) -> {}\n", i, elt_name, elt_type, unique_name); } db.dts.art_group_info[obj.to_unique_name()] = art_group_elts; } @@ -795,7 +795,7 @@ void ObjectFileDB::extract_art_info() { } }); - lg::info("Processed art groups: in {:.2f} ms\n", timer.getMs()); + lg::info("Processed art groups: in {:.2f} ms", timer.getMs()); } /*! @@ -822,7 +822,7 @@ void ObjectFileDB::dump_art_info(const fs::path& output_dir) { file_util::write_text_file(filename, result); } - lg::info("Written art group info: in {:.2f} ms\n", timer.getMs()); + lg::info("Written art group info: in {:.2f} ms", timer.getMs()); } void ObjectFileDB::dump_raw_objects(const fs::path& output_dir) { diff --git a/decompiler/ObjectFile/ObjectFileDB_IR2.cpp b/decompiler/ObjectFile/ObjectFileDB_IR2.cpp index 159395d0e2..cddd5df9ce 100644 --- a/decompiler/ObjectFile/ObjectFileDB_IR2.cpp +++ b/decompiler/ObjectFile/ObjectFileDB_IR2.cpp @@ -50,7 +50,7 @@ void ObjectFileDB::analyze_functions_ir2( int file_idx = 1; for_each_obj([&](ObjectFileData& data) { Timer file_timer; - fmt::print("[{:3d}/{}]------ {}\n", file_idx++, total_file_count, data.to_unique_name()); + lg::info("[{:3d}/{}]------ {}", file_idx++, total_file_count, data.to_unique_name()); ir2_do_segment_analysis_phase1(TOP_LEVEL_SEGMENT, config, data); ir2_do_segment_analysis_phase1(DEBUG_SEGMENT, config, data); ir2_do_segment_analysis_phase1(MAIN_SEGMENT, config, data); @@ -125,7 +125,7 @@ void ObjectFileDB::analyze_functions_ir2( }); } - fmt::print("Done in {:.2f}ms\n", file_timer.getMs()); + lg::info("Done in {:.2f}ms", file_timer.getMs()); }); lg::info("{}", stats.let.print()); @@ -172,7 +172,7 @@ void ObjectFileDB::ir2_setup_labels(const Config& config, ObjectFileData& data) std::make_unique(config_labels, data.linked_data.labels, dts); analyze_labels(data.linked_data.label_db.get(), &data.linked_data); } catch (const std::exception& e) { - lg::die("Error parsing labels for {}: {}\n", data.to_unique_name(), e.what()); + lg::die("Error parsing labels for {}: {}", data.to_unique_name(), e.what()); } } } @@ -296,7 +296,7 @@ void ObjectFileDB::ir2_top_level_pass(const Config& config) { lg::info("{:4d} global {:.2f}%", total_named_global_functions, 100.f * total_named_global_functions / total_functions); lg::info("{:4d} methods {:.2f}%", total_methods, 100.f * total_methods / total_functions); - lg::info("{:4d} logins {:.2f}%\n", total_top_levels, 100.f * total_top_levels / total_functions); + lg::info("{:4d} logins {:.2f}%", total_top_levels, 100.f * total_top_levels / total_functions); } void ObjectFileDB::ir2_analyze_all_types(const fs::path& output_file, diff --git a/decompiler/VuDisasm/VuDisassembler.cpp b/decompiler/VuDisasm/VuDisassembler.cpp index c330465ad0..1c8e2be0e5 100644 --- a/decompiler/VuDisasm/VuDisassembler.cpp +++ b/decompiler/VuDisasm/VuDisassembler.cpp @@ -3,6 +3,7 @@ #include #include +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/print_float.h" @@ -414,15 +415,15 @@ VuProgram VuDisassembler::disassemble(void* data, int size_bytes, bool debug_pri // debug if (debug_print) { - fmt::print("{}\n", to_string(VuInstructionPair{upper_instr, lower_instr})); + lg::print("{}\n", to_string(VuInstructionPair{upper_instr, lower_instr})); } } name_labels(); if (debug_print) { - fmt::print("----------------------------------\n"); - fmt::print("{}\n", to_string(prog)); + lg::print("----------------------------------\n"); + lg::print("{}\n", to_string(prog)); } return prog; @@ -1014,7 +1015,7 @@ std::string VuDisassembler::to_cpp(const VuInstruction& instr, bool mips2c_forma instr.src.at(1).to_string(m_label_names)); default: unk++; - fmt::print("unknown 0 is {}\n", to_string(instr)); + lg::print("unknown 0 is {}\n", to_string(instr)); return "ASSERT(false);"; //"???"; } @@ -1022,7 +1023,7 @@ std::string VuDisassembler::to_cpp(const VuInstruction& instr, bool mips2c_forma unknown: unk++; - fmt::print("unknown 1 is {}\n", to_string(instr)); + lg::print("unknown 1 is {}\n", to_string(instr)); return "ASSERT(false);"; } @@ -1262,7 +1263,7 @@ std::string VuDisassembler::to_string_with_cpp(const VuProgram& prog, bool mips2 } } } - fmt::print("TOTAL unk: {}\n", unk); + lg::print("TOTAL unk: {}\n", unk); return result; } diff --git a/decompiler/analysis/analyze_inspect_method.cpp b/decompiler/analysis/analyze_inspect_method.cpp index a42dcd3872..d3cfc652c0 100644 --- a/decompiler/analysis/analyze_inspect_method.cpp +++ b/decompiler/analysis/analyze_inspect_method.cpp @@ -1,4 +1,5 @@ #include "analyze_inspect_method.h" +#include "common/log/log.h" #include "decompiler/Disasm/InstructionMatching.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" @@ -371,13 +372,13 @@ FieldPrint get_field_print(const std::string& str) { int get_start_idx_process(Function& function, const std::string& parent_type, Env& env) { if (function.basic_blocks.size() != 5) { - fmt::print("[iim] inspect {} had {} basic blocks, expected 5\n", function.name(), - function.basic_blocks.size()); + lg::print("[iim] inspect {} had {} basic blocks, expected 5\n", function.name(), + function.basic_blocks.size()); return -1; } if (!function.ir2.atomic_ops) { - fmt::print("[iim] no atomic ops in {}\n", function.name()); + lg::print("[iim] no atomic ops in {}\n", function.name()); return -1; } auto& aos = *function.ir2.atomic_ops; @@ -390,23 +391,23 @@ int get_start_idx_process(Function& function, const std::string& parent_type, En */ if (aos.block_id_to_end_atomic_op.at(0) != 2) { - fmt::print("[iim] block 0 had the wrong number of ops: {} for {}\n", - aos.block_id_to_end_atomic_op.at(0), function.name()); + lg::print("[iim] block 0 had the wrong number of ops: {} for {}\n", + aos.block_id_to_end_atomic_op.at(0), function.name()); return -1; } if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind::IDENTITY, Register(Reg::GPR, Reg::GP), Register(Reg::GPR, Reg::A0))) { - fmt::print("[iim] block 0 op 0 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 0 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; auto br = dynamic_cast(aos.ops.at(op_idx).get()); if (!br) { - fmt::print("[iim] block 0 op 1 bad in {}: {} (not branch)\n", aos.ops.at(1)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 1 bad in {}: {} (not branch)\n", aos.ops.at(1)->to_string(env), + function.name()); return -1; } @@ -415,8 +416,8 @@ int get_start_idx_process(Function& function, const std::string& parent_type, En br->condition().src(0).var().reg() != Register(Reg::GPR, Reg::GP) || br->branch_delay().kind() != IR2_BranchDelay::Kind::SET_REG_FALSE || br->branch_delay().var(0).reg() != Register(Reg::GPR, Reg::V1)) { - fmt::print("[iim] block 0 op 1 bad in {}: {} (bad branch)\n", aos.ops.at(1)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 1 bad in {}: {} (bad branch)\n", aos.ops.at(1)->to_string(env), + function.name()); return -1; } op_idx++; @@ -427,29 +428,29 @@ int get_start_idx_process(Function& function, const std::string& parent_type, En * (b! #t L371 (nop!)) */ if (aos.block_id_to_end_atomic_op.at(1) != 4) { - fmt::print("[iim] block 1 had the wrong number of ops: {} for {}\n", - aos.block_id_to_end_atomic_op.at(1), function.name()); + lg::print("[iim] block 1 had the wrong number of ops: {} for {}\n", + aos.block_id_to_end_atomic_op.at(1), function.name()); return -1; } if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind ::IDENTITY, Register(Reg::GPR, Reg::GP), Register(Reg::GPR, Reg::GP))) { - fmt::print("[iim] op 2 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op 2 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); return -1; } op_idx++; auto br2 = dynamic_cast(aos.ops.at(op_idx).get()); if (!br2) { - fmt::print("[iim] op 3 bad in {}: {} (not branch)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op 3 bad in {}: {} (not branch)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } if (br2->likely() || br2->condition().kind() != IR2_Condition::Kind::ALWAYS || br2->branch_delay().kind() != IR2_BranchDelay::Kind::NOP) { - fmt::print("[iim] op3 bad in {}: {} (bad branch)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op3 bad in {}: {} (bad branch)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; @@ -468,37 +469,37 @@ L2: sll v0, ra, 0 */ if (!is_set_reg_to_int(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::V1), 0)) { - fmt::print("[iim] op4 bad in {}: {} (bad set 0)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op4 bad in {}: {} (bad set 0)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; if (!is_set_reg_to_symbol_value(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::V1), parent_type)) { - fmt::print("[iim] op5 bad in {}: {} (bad set parent type)\n", - aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op5 bad in {}: {} (bad set parent type)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; if (aos.ops.at(op_idx).get()->to_string(env) != "(set! t9 (l.wu (+ v1 28)))") { - fmt::print("[iim] op6 bad in {}: {} (bad load inspect)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op6 bad in {}: {} (bad load inspect)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; if (aos.ops.at(op_idx).get()->to_string(env) != "(set! a0 gp)") { - fmt::print("[iim] op7 bad in {}: {} (bad set arg)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op7 bad in {}: {} (bad set arg)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; if (aos.ops.at(op_idx).get()->to_string(env) != "(call!)") { - fmt::print("[iim] op8 bad in {}: {} (bad call)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op8 bad in {}: {} (bad call)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; @@ -539,13 +540,13 @@ int get_start_idx(Function& function, const std::string& type_name, Env& env) { if (function.basic_blocks.size() != 5) { - fmt::print("[iim] inspect {} had {} basic blocks, expected 5\n", function.name(), - function.basic_blocks.size()); + lg::print("[iim] inspect {} had {} basic blocks, expected 5\n", function.name(), + function.basic_blocks.size()); return -1; } if (!function.ir2.atomic_ops) { - fmt::print("[iim] no atomic ops in {}\n", function.name()); + lg::print("[iim] no atomic ops in {}\n", function.name()); return -1; } auto& aos = *function.ir2.atomic_ops; @@ -558,23 +559,23 @@ int get_start_idx(Function& function, */ if (aos.block_id_to_end_atomic_op.at(0) != 2) { - fmt::print("[iim] block 0 had the wrong number of ops: {} for {}\n", - aos.block_id_to_end_atomic_op.at(0), function.name()); + lg::print("[iim] block 0 had the wrong number of ops: {} for {}\n", + aos.block_id_to_end_atomic_op.at(0), function.name()); return -1; } if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind::IDENTITY, Register(Reg::GPR, Reg::GP), Register(Reg::GPR, Reg::A0))) { - fmt::print("[iim] block 0 op 0 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 0 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; auto br = dynamic_cast(aos.ops.at(op_idx).get()); if (!br) { - fmt::print("[iim] block 0 op 1 bad in {}: {} (not branch)\n", aos.ops.at(1)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 1 bad in {}: {} (not branch)\n", aos.ops.at(1)->to_string(env), + function.name()); return -1; } @@ -583,8 +584,8 @@ int get_start_idx(Function& function, br->condition().src(0).var().reg() != Register(Reg::GPR, Reg::GP) || br->branch_delay().kind() != IR2_BranchDelay::Kind::SET_REG_FALSE || br->branch_delay().var(0).reg() != Register(Reg::GPR, Reg::V1)) { - fmt::print("[iim] block 0 op 1 bad in {}: {} (bad branch)\n", aos.ops.at(1)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 1 bad in {}: {} (bad branch)\n", aos.ops.at(1)->to_string(env), + function.name()); return -1; } op_idx++; @@ -595,29 +596,29 @@ int get_start_idx(Function& function, * (b! #t L371 (nop!)) */ if (aos.block_id_to_end_atomic_op.at(1) != 4) { - fmt::print("[iim] block 1 had the wrong number of ops: {} for {}\n", - aos.block_id_to_end_atomic_op.at(1), function.name()); + lg::print("[iim] block 1 had the wrong number of ops: {} for {}\n", + aos.block_id_to_end_atomic_op.at(1), function.name()); return -1; } if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind ::IDENTITY, Register(Reg::GPR, Reg::GP), Register(Reg::GPR, Reg::GP))) { - fmt::print("[iim] op 2 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op 2 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); return -1; } op_idx++; auto br2 = dynamic_cast(aos.ops.at(op_idx).get()); if (!br2) { - fmt::print("[iim] op 3 bad in {}: {} (not branch)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op 3 bad in {}: {} (not branch)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } if (br2->likely() || br2->condition().kind() != IR2_Condition::Kind::ALWAYS || br2->branch_delay().kind() != IR2_BranchDelay::Kind::NOP) { - fmt::print("[iim] op3 bad in {}: {} (bad branch)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op3 bad in {}: {} (bad branch)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; @@ -634,38 +635,38 @@ int get_start_idx(Function& function, */ if (!is_set_reg_to_int(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::V1), 0)) { - fmt::print("[iim] op4 bad in {}: {} (bad set 0)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op4 bad in {}: {} (bad set 0)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); } op_idx++; if (!is_set_reg_to_symbol_value(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::T9), "format")) { - fmt::print("[iim] op5 bad in {}: {} (bad set format)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op5 bad in {}: {} (bad set format)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); } op_idx++; if (!is_set_reg_to_symbol_ptr(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::A0), "#t")) { - fmt::print("[iim] op6 bad in {}: {} (bad set #t)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op6 bad in {}: {} (bad set #t)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); } op_idx++; auto type_name_str = get_string_loaded_to_reg(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::A1), file); if (!type_name_str) { - fmt::print("[iim] op7 bad in {}: {} (bad string)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op7 bad in {}: {} (bad string)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); } else if (type_name_str != "[~8x] ~A~%") { - fmt::print("[iim] op7 bad in {}: {} (bad string: {})\n", aos.ops.at(op_idx)->to_string(env), - function.name(), *type_name_str); + lg::print("[iim] op7 bad in {}: {} (bad string: {})\n", aos.ops.at(op_idx)->to_string(env), + function.name(), *type_name_str); } op_idx++; if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind ::IDENTITY, Register(Reg::GPR, Reg::A2), Register(Reg::GPR, Reg::GP))) { - fmt::print("[iim] op 8 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op 8 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); return -1; } op_idx++; @@ -675,13 +676,13 @@ int get_start_idx(Function& function, } else if (aos.ops.at(op_idx)->to_string(env) == "(set! a3 (l.wu (+ gp -4)))") { result->is_basic = true; } else { - fmt::print("[iim] op 9 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op 9 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); return -1; } op_idx++; if (!dynamic_cast(aos.ops.at(op_idx).get())) { - fmt::print("[iim] op 10 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op 10 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); return -1; } op_idx++; @@ -1040,7 +1041,7 @@ std::string inspect_inspect_method(Function& inspect_method, DecompilerTypeSystem& previous_game_ts, TypeInspectorCache& ti_cache, ObjectFileDB::PerObjectAllTypeInfo& object_file_meta) { - fmt::print(" iim: {}\n", inspect_method.name()); + lg::print(" iim: {}\n", inspect_method.name()); TypeInspectorResult result; ASSERT(type_name == inspect_method.guessed_name.type_name); TypeFlags flags; @@ -1072,7 +1073,7 @@ std::string inspect_inspect_method(Function& inspect_method, } } if (!result.found_flags) { - fmt::print("[iim] no flags found for {}, maybe defined in the kernel\n", type_name); + lg::print("[iim] no flags found for {}, maybe defined in the kernel\n", type_name); } result.parent_type_name = dts.lookup_parent_from_inspects(type_name); @@ -1495,13 +1496,13 @@ void inspect_top_level_for_metadata(Function& top_level, continue; } - fmt::print("got 1\n"); + lg::print("got 1\n"); // lwu t9, 16(v1) ;; [ 21] (set! t9-0 (l.wu (+ v1-10 16))) // ;; [v1: ] -> [t9: (function symbol type int type) const auto& aop_1 = top_level.ir2.atomic_ops->ops.at(i + 1); if (!is_set_reg_to_load(aop_1.get(), Register(Reg::GPR, Reg::T9), 16)) { - fmt::print("fail1\n"); + lg::print("fail1\n"); continue; } @@ -1509,7 +1510,7 @@ void inspect_top_level_for_metadata(Function& top_level, const auto& aop_2 = top_level.ir2.atomic_ops->ops.at(i + 2); auto type_name = get_set_reg_to_symbol_ptr(aop_2.get(), Register(Reg::GPR, Reg::A0)); if (!type_name) { - fmt::print("fail2\n"); + lg::print("fail2\n"); continue; } @@ -1517,7 +1518,7 @@ void inspect_top_level_for_metadata(Function& top_level, const auto& aop_3 = top_level.ir2.atomic_ops->ops.at(i + 3); auto parent_name = get_set_reg_to_symbol_value(aop_3.get(), Register(Reg::GPR, Reg::A1)); if (!parent_name) { - fmt::print("fail3\n"); + lg::print("fail3\n"); continue; } @@ -1525,14 +1526,14 @@ void inspect_top_level_for_metadata(Function& top_level, const auto& aop_4 = top_level.ir2.atomic_ops->ops.at(i + 4); auto flags = get_set_reg_to_u64_load(aop_4.get(), Register(Reg::GPR, Reg::A2), file); if (!flags) { - fmt::print("fail3\n"); + lg::print("fail3\n"); continue; } // jalr ra, t9 ;; [ 25] (call! a0-0 a1-0 a2-0) const auto& aop_5 = top_level.ir2.atomic_ops->ops.at(i + 5); if (!dynamic_cast(aop_5.get())) { - fmt::print("fial4\n"); + lg::print("fial4\n"); continue; } diff --git a/decompiler/analysis/cfg_builder.cpp b/decompiler/analysis/cfg_builder.cpp index 94ef950a9a..28d729e5c1 100644 --- a/decompiler/analysis/cfg_builder.cpp +++ b/decompiler/analysis/cfg_builder.cpp @@ -4,6 +4,7 @@ */ #include "cfg_builder.h" +#include "common/log/log.h" #include "decompiler/Function/Function.h" #include "decompiler/IR2/Form.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" @@ -716,7 +717,7 @@ void clean_up_cond_no_else_final(Function& func, CondNoElseElement* cne) { ASSERT(fr.has_value()); cne->final_destination = *fr; } else { - fmt::print("failed to clean up cond_no_else_final: {}\n", func.name()); + lg::print("failed to clean up cond_no_else_final: {}\n", func.name()); ASSERT(false); } } @@ -753,7 +754,7 @@ void clean_up_cond_no_else_final(Function& func, CondNoElseElement* cne) { for (size_t i = 0; i < cne->entries.size(); i++) { if (func.ir2.env.has_reg_use()) { auto reg = cne->entries.at(i).false_destination; - // lg::warn("Disable def of {} at {}\n", reg->to_string(func.ir2.env), reg->idx()); + // lg::warn("Disable def of {} at {}", reg->to_string(func.ir2.env), reg->idx()); func.ir2.env.disable_def(*reg, func.warnings); } } @@ -1181,7 +1182,7 @@ SetVarOp get_delay_op(const Function& f, const BlockVtx* vtx) { auto& delay_op = f.ir2.atomic_ops->ops.at(delay_start); auto* delay = dynamic_cast(delay_op.get()); if (!delay) { - fmt::print("bad delay: {}\n", delay_op->to_string(f.ir2.env)); + lg::print("bad delay: {}\n", delay_op->to_string(f.ir2.env)); ASSERT(false); } return *delay; @@ -1196,7 +1197,7 @@ LoadVarOp get_delay_load_op(const Function& f, const BlockVtx* vtx) { auto& delay_op = f.ir2.atomic_ops->ops.at(delay_start); auto* delay = dynamic_cast(delay_op.get()); if (!delay) { - fmt::print("bad delay: {}\n", delay_op->to_string(f.ir2.env)); + lg::print("bad delay: {}\n", delay_op->to_string(f.ir2.env)); ASSERT(false); } return *delay; @@ -1248,69 +1249,69 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt // get the branch ir's auto b0_ptr = cfg_to_ir(pool, f, b0_c); // should be begin. if (b0_ptr->size() <= 2) { - fmt::print("fail1\n"); + lg::print("fail1\n"); return nullptr; } auto b1_ptr = cfg_to_ir(pool, f, b1_c); if (b1_ptr->size() <= 1) { - fmt::print("fail2\n"); + lg::print("fail2\n"); return nullptr; } auto b2_ptr = cfg_to_ir(pool, f, b2_c); if (b2_ptr->size() <= 1) { - fmt::print("fail3\n"); + lg::print("fail3\n"); return nullptr; } auto b3_ptr = cfg_to_ir(pool, f, b3_c); auto b3_ir = dynamic_cast(b3_ptr->try_as_single_element()); if (!b3_ir) { - fmt::print("fail4\n"); + lg::print("fail4\n"); return nullptr; } // identify the left shift auto set_shift_left = dynamic_cast(b0_ptr->at(b0_ptr->size() - 3)); if (!set_shift_left) { - fmt::print("fail5\n"); + lg::print("fail5\n"); return nullptr; } auto temp_reg0 = set_shift_left->dst(); auto shift_left = dynamic_cast(set_shift_left->src()->try_as_single_element()); if (!shift_left || shift_left->expr().kind() != SimpleExpression::Kind::LEFT_SHIFT) { - fmt::print("fail6\n"); + lg::print("fail6\n"); return nullptr; } auto src_reg = shift_left->expr().get_arg(0).var(); auto sa_left = shift_left->expr().get_arg(1); if (!sa_left.is_int() || sa_left.get_int() != 61) { - fmt::print("fail7\n"); + lg::print("fail7\n"); return nullptr; } // identify the right shift auto set_shift_right = dynamic_cast(b0_ptr->at(b0_ptr->size() - 2)); if (!set_shift_right) { - fmt::print("fail8\n"); + lg::print("fail8\n"); return nullptr; } if (set_shift_right->dst().reg() != set_shift_left->dst().reg()) { - fmt::print("fail9\n"); + lg::print("fail9\n"); return nullptr; } auto shift_right = dynamic_cast(set_shift_right->src()->try_as_single_element()); if (!shift_right || shift_right->expr().kind() != SimpleExpression::Kind::RIGHT_SHIFT_LOGIC) { - fmt::print("fail10\n"); + lg::print("fail10\n"); return nullptr; } if (temp_reg0.reg() != shift_right->expr().get_arg(0).var().reg()) { - fmt::print("fail11\n"); + lg::print("fail11\n"); return nullptr; } auto sa_right = shift_right->expr().get_arg(1); if (!sa_right.is_int() || sa_right.get_int() != 61) { - fmt::print("fail12\n"); + lg::print("fail12\n"); return nullptr; } @@ -1320,7 +1321,7 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt if (!first_branch || !is_set_symbol_value(b0_delay_op, "binteger") || first_branch->op()->condition().kind() != IR2_Condition::Kind::ZERO || !first_branch->op()->likely()) { - fmt::print("fail13\n"); + lg::print("fail13\n"); return nullptr; } auto temp_reg = first_branch->op()->condition().src(0).var(); @@ -1329,19 +1330,19 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt // branch 1 if (b1_ptr->size() != 2) { - fmt::print("fail14\n"); + lg::print("fail14\n"); return nullptr; } auto second_branch_pre_op = dynamic_cast(b1_ptr->at(0)); if (!second_branch_pre_op) { - fmt::print("fail15\n"); + lg::print("fail15\n"); return nullptr; } { auto pos = second_branch_pre_op->src(); auto pos_as_se = pos->try_as_element(); if (!pos_as_se || !pos_as_se->expr().is_identity() || !pos_as_se->expr().get_arg(0).is_int(4)) { - fmt::print("fail16\n"); + lg::print("fail16\n"); return nullptr; } } @@ -1357,30 +1358,30 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt second_branch->op()->condition().src(0).var().reg() != temp_reg0.reg() || !second_branch->op()->condition().src(1).is_var() || second_branch->op()->condition().src(1).var().reg() != temp_reg1.reg()) { - fmt::print("fail17\n"); + lg::print("fail17\n"); return nullptr; } if (!b1_d) { - fmt::print("fail18\n"); + lg::print("fail18\n"); return nullptr; } auto b1_delay_op = get_delay_load_op(f, b1_d); if (b1_delay_op.kind() != LoadVarOp::Kind::UNSIGNED || b1_delay_op.size() != 4) { - fmt::print("fail19\n"); + lg::print("fail19\n"); return nullptr; } IR2_RegOffset ro; if (!get_as_reg_offset(b1_delay_op.src(), &ro)) { - fmt::print("fail20\n"); + lg::print("fail20\n"); return nullptr; } if (ro.offset != -4) { - fmt::print("fail21\n"); + lg::print("fail21\n"); return nullptr; } if (ro.reg != src_reg.reg() || b1_delay_op.get_set_destination().reg() != dst_reg.reg()) { - fmt::print("fail22\n"); + lg::print("fail22\n"); return nullptr; } @@ -1394,19 +1395,19 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt lw a0, pair(s7) */ if (b2_ptr->size() != 2) { - fmt::print("fail23\n"); + lg::print("fail23\n"); return nullptr; } auto third_branch_pre_op = dynamic_cast(b2_ptr->at(0)); if (!third_branch_pre_op) { - fmt::print("fail24\n"); + lg::print("fail24\n"); return nullptr; } { auto pos = third_branch_pre_op->src(); auto pos_as_se = pos->try_as_element(); if (!pos_as_se || !pos_as_se->expr().is_identity() || !pos_as_se->expr().get_arg(0).is_int(2)) { - fmt::print("fail25\n"); + lg::print("fail25\n"); return nullptr; } } @@ -1417,22 +1418,22 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt third_branch->op()->condition().src(0).var().reg() != temp_reg0.reg() || !third_branch->op()->condition().src(1).is_var() || third_branch->op()->condition().src(1).var().reg() != temp_reg2.reg()) { - fmt::print("fail26\n"); + lg::print("fail26\n"); return nullptr; } if (!b2_d) { - fmt::print("fail27\n"); + lg::print("fail27\n"); return nullptr; } auto b2_delay_op = get_delay_op(f, b2_d); if (!is_set_symbol_value(b2_delay_op, "pair") || b2_delay_op.dst().reg() != dst_reg.reg()) { - fmt::print("fail28\n"); + lg::print("fail28\n"); return nullptr; } if (!is_set_symbol_value(b3_ir, "symbol")) { - fmt::print("fail29\n"); + lg::print("fail29\n"); return nullptr; } @@ -1708,22 +1709,22 @@ void convert_and_inline(FormPool& pool, Function& f, const BlockVtx* as_block, T auto& ao = f.ir2.atomic_ops->ops.at(j); if (contains(ao->write_regs(), consumed.reg())) { ri.written_and_unused.insert(consumed.reg()); - // fmt::print("GOT 3, making {} wau by {}\n", consumed.reg().to_charp(), + // lg::print("GOT 3, making {} wau by {}\n", consumed.reg().to_charp(), // ao->to_string(f.ir2.env)); // HACK - regenerate: if (add_map.at(j - start_op) != -1) { - // fmt::print("regenerating {} to ", output->at(add_map.at(j - + // lg::print("regenerating {} to ", output->at(add_map.at(j - // start_op))->to_string(f.ir2.env)); output->at(add_map.at(j - start_op)) = f.ir2.atomic_ops->ops.at(j)->get_as_form(pool, f.ir2.env); - // fmt::print("{}\n", output->at(add_map.at(j - + // lg::print("{}\n", output->at(add_map.at(j - // start_op))->to_string(f.ir2.env)); } break; } if (contains(ao->read_regs(), consumed.reg())) { - // fmt::print("GOT 2, making {} consumed by {}\n", + // lg::print("GOT 2, making {} consumed by {}\n", // consumed.reg().to_charp(), // ao->to_string(f.ir2.env)); ri.consumes.insert(consumed.reg()); @@ -1896,8 +1897,8 @@ Form* cfg_to_ir_helper(FormPool& pool, Function& f, const CfgVtx* vtx) { auto& op = f.ir2.atomic_ops->ops.at(delay_start); auto op_as_expr = dynamic_cast(op.get()); if (!op_as_expr) { - fmt::print("bad in {}\n", f.name()); - fmt::print("{}\n", op->to_string(f.ir2.env)); + lg::print("bad in {}\n", f.name()); + lg::print("{}\n", op->to_string(f.ir2.env)); } ASSERT(op_as_expr); e.branch_delay = *op_as_expr; diff --git a/decompiler/analysis/expression_build.cpp b/decompiler/analysis/expression_build.cpp index 96cef58b5c..0a967db763 100644 --- a/decompiler/analysis/expression_build.cpp +++ b/decompiler/analysis/expression_build.cpp @@ -1,5 +1,6 @@ #include "expression_build.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "decompiler/Function/Function.h" #include "decompiler/IR2/Form.h" #include "decompiler/IR2/FormStack.h" @@ -25,7 +26,7 @@ bool convert_to_expressions( f.guessed_name.kind == FunctionName::FunctionKind::UNIDENTIFIED || f.guessed_name.kind == FunctionName::FunctionKind::NV_STATE || f.guessed_name.kind == FunctionName::FunctionKind::V_STATE) { - f.ir2.env.set_remap_for_function(f.type); + f.ir2.env.set_remap_for_function(f); } else if (f.guessed_name.kind == FunctionName::FunctionKind::METHOD) { auto method_type = dts.ts.lookup_method(f.guessed_name.type_name, f.guessed_name.method_id).type; @@ -46,7 +47,7 @@ bool convert_to_expressions( info.second.name_override = rename->second; } // debug - // fmt::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), + // lg::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), // info.second.tp_type.print()); } diff --git a/decompiler/analysis/find_defstates.cpp b/decompiler/analysis/find_defstates.cpp index 6237a6dc76..03b3585a00 100644 --- a/decompiler/analysis/find_defstates.cpp +++ b/decompiler/analysis/find_defstates.cpp @@ -2,6 +2,7 @@ #include "find_defstates.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "common/type_system/state.h" #include "decompiler/IR2/Form.h" #include "decompiler/IR2/GenericElementMatcher.h" @@ -116,7 +117,7 @@ std::vector get_defstate_entries( } if (debug_defstates) { - fmt::print("SET: {} to {}\n", name, val->to_string(env)); + lg::debug("SET: {} to {}", name, val->to_string(env)); } // now we try to find a function @@ -130,7 +131,7 @@ std::vector get_defstate_entries( this_entry.is_behavior = true; if (print_renames) { - fmt::print("RENAME: {} to ", handler_func->name()); + lg::info("RENAME: {} to ", handler_func->name()); } if (virtual_child) { @@ -139,7 +140,7 @@ std::vector get_defstate_entries( handler_func->guessed_name.set_as_nv_state(state_name, handler_kind); } if (print_renames) { - fmt::print("{}\n", handler_func->name()); + lg::info("{}", handler_func->name()); } // scary part - modify the function type! @@ -191,7 +192,7 @@ FormElement* rewrite_nonvirtual_defstate( expected_state_name); } if (debug_defstates) { - fmt::print("State: {} Type: {}\n", info.first, info.second.print()); + lg::debug("State: {} Type: {}", info.first, info.second.print()); } body_index++; @@ -270,7 +271,6 @@ FormElement* rewrite_virtual_defstate( // see if the first thing is an inherit-state. auto maybe_inherit_form = elt->body()->at(body_idx); - // fmt::print("first is {}\n", maybe_inherit_form->to_string(env)); Form temp; temp.elts().push_back(maybe_inherit_form); // (inherit-state gp-1 (method-of-type plat-button dummy-24)) @@ -418,8 +418,6 @@ FormElement* rewrite_virtual_defstate( expected_state_name, method_info.name, method_info.defined_in_type); } - // fmt::print("is a {}\n", typeid(*parent_state->try_as_single_element()).name()); - auto entries = get_defstate_entries( elt->body(), body_idx + 1, env, expected_state_name, elt->entries().at(0).dest, method_info.type.substitute_for_method_call(type_name), pool, type_name, skip_states); @@ -461,7 +459,7 @@ void run_defstate( env.get_variable_type(as_let->entries().at(0).dest, false) == TypeSpec("state")) { std::string expected_state_name = verify_empty_state_and_get_name(src_as_label, env); if (debug_defstates) { - fmt::print("got state let:\n{}\n", pretty_print::to_string(as_let->to_form(env))); + lg::debug("got state let:\n{}", pretty_print::to_string(as_let->to_form(env))); } if (is_nonvirtual_state(as_let)) { diff --git a/decompiler/analysis/inline_asm_rewrite.cpp b/decompiler/analysis/inline_asm_rewrite.cpp index 039001368b..d3f80dea87 100644 --- a/decompiler/analysis/inline_asm_rewrite.cpp +++ b/decompiler/analysis/inline_asm_rewrite.cpp @@ -1,5 +1,6 @@ #include "inline_asm_rewrite.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "decompiler/Function/Function.h" #include "decompiler/IR2/Form.h" #include "decompiler/IR2/FormStack.h" diff --git a/decompiler/analysis/insert_lets.cpp b/decompiler/analysis/insert_lets.cpp index 555d5abf6a..8e1af0a4dc 100644 --- a/decompiler/analysis/insert_lets.cpp +++ b/decompiler/analysis/insert_lets.cpp @@ -3,6 +3,7 @@ #include #include +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/print_float.h" #include "decompiler/IR2/GenericElementMatcher.h" @@ -55,7 +56,7 @@ std::vector path_up_tree(Form* in, const Env&) { in = nullptr; } } - // lg::warn("DONE\n"); + // lg::warn("DONE"); return path; } @@ -65,7 +66,7 @@ Form* lca_form(Form* a, Form* b, const Env& env) { return b; } // - // fmt::print("lca {} ({}) and {} ({})\n", a->to_string(env), (void*)a, b->to_string(env), + // lg::print("lca {} ({}) and {} ({})\n", a->to_string(env), (void*)a, b->to_string(env), // (void*)b); auto a_up = path_up_tree(a, env); @@ -84,12 +85,10 @@ Form* lca_form(Form* a, Form* b, const Env& env) { ai--; bi--; } - if (!result) { - fmt::print("{} bad form is {}\n\n{}\n", env.func->name(), a->to_string(env), b->to_string(env)); - } - ASSERT(result); + ASSERT_MSG(result, fmt::format("{} bad form is {}\n\n{}\n", env.func->name(), a->to_string(env), + b->to_string(env))); - // fmt::print("{}\n\n", result->to_string(env)); + // lg::print("{}\n\n", result->to_string(env)); return result; } @@ -333,7 +332,7 @@ FormElement* rewrite_as_send_event(LetElement* in, auto body = in->body(); if (body->size() < 4) { // from, num-params, message, call - // fmt::print(" fail: size\n"); + // lg::print(" fail: size\n"); return nullptr; } @@ -379,7 +378,7 @@ FormElement* rewrite_as_send_event(LetElement* in, if (!from_mr.matched) { return nullptr; } - fmt::print("case 1: {}\n", from_mr.maps.forms.at(1)->to_string(env)); + lg::print("case 1: {}\n", from_mr.maps.forms.at(1)->to_string(env)); not_proc = true; } @@ -399,13 +398,13 @@ FormElement* rewrite_as_send_event(LetElement* in, Matcher::any_integer(1)); auto num_params_mr = match(set_num_params_matcher, body->at(1)); if (!num_params_mr.matched) { - // fmt::print(" fail: pc1\n"); + // lg::print(" fail: pc1\n"); return nullptr; } int param_count = num_params_mr.maps.ints.at(1); ASSERT(param_count >= 0 && param_count < 7); if (body->size() != 4 + param_count) { - // fmt::print(" fail: pc3\n"); + // lg::print(" fail: pc3\n"); return nullptr; } @@ -416,7 +415,7 @@ FormElement* rewrite_as_send_event(LetElement* in, Matcher::any(1)); auto set_message_mr = match(set_message_matcher, body->at(2)); if (!set_message_mr.matched) { - // fmt::print(" fail: msg1\n"); + // lg::print(" fail: msg1\n"); return nullptr; } Form* message_name = set_message_mr.maps.forms.at(1); @@ -440,7 +439,7 @@ FormElement* rewrite_as_send_event(LetElement* in, Matcher::any(1)); auto set_param_mr = match(set_param_matcher, set_form); if (!set_param_mr.matched) { - // fmt::print(" fail: pv {} 1: {}\n", param_idx, set_form->to_string(env)); + // lg::print(" fail: pv {} 1: {}\n", param_idx, set_form->to_string(env)); return nullptr; } @@ -2066,7 +2065,7 @@ LetStats insert_lets(const Function& func, // Part 2, figure out the lca form which contains all uses of a var for (auto& kv : var_info) { - // fmt::print("--------------------- {}\n", kv.first); + // lg::print("--------------------- {}\n", kv.first); Form* lca = nullptr; for (auto fe : kv.second.elts_using_var) { lca = lca_form(lca, fe->parent_form, env); @@ -2078,7 +2077,7 @@ LetStats insert_lets(const Function& func, // Part 3, find the minimum range of FormElement's within the lca form that contain // all uses. This is the minimum possible range for a set! for (auto& kv : var_info) { - // fmt::print("Setting range for let {}\n", kv.first); + // lg::print("Setting range for let {}\n", kv.first); kv.second.start_idx = std::numeric_limits::max(); kv.second.end_idx = std::numeric_limits::min(); @@ -2099,14 +2098,14 @@ LetStats insert_lets(const Function& func, got_one = true; kv.second.start_idx = std::min(kv.second.start_idx, i); kv.second.end_idx = std::max(kv.second.end_idx, i + 1); - // fmt::print("update range {} to {} because of {}\n", kv.second.start_idx, + // lg::print("update range {} to {} because of {}\n", kv.second.start_idx, // kv.second.end_idx, kv.second.lca_form->at(i)->to_string(env)); } } ASSERT(got_one); } - // fmt::print("\n"); + // lg::print("\n"); // Part 4, sort the var infos in descending size. // this simplifies future passes. @@ -2150,7 +2149,7 @@ LetStats insert_lets(const Function& func, } } // success! - // fmt::print("Want let for {} range {} to {}\n", + // lg::print("Want let for {} range {} to {}\n", // env.get_variable_name(first_form_as_set->dst()), info.start_idx, info.end_idx); if (allowed) { LetInsertion li; @@ -2163,7 +2162,7 @@ LetStats insert_lets(const Function& func, stats.vars_in_lets++; } } else { - // fmt::print("fail for {} : {}\n", info.var_name, first_form->to_string(env)); + // lg::print("fail for {} : {}\n", info.var_name, first_form->to_string(env)); } } @@ -2179,7 +2178,7 @@ LetStats insert_lets(const Function& func, if (let_b.start_elt > let_a.start_elt && let_b.start_elt < let_a.end_elt && let_b.end_elt > let_a.end_elt) { changed = true; - // fmt::print("Resized {}'s end to {}\n", let_a.set_form->dst().to_string(env), + // lg::print("Resized {}'s end to {}\n", let_a.set_form->dst().to_string(env), // let_b.end_elt); let_a.end_elt = let_b.end_elt; } diff --git a/decompiler/analysis/mips2c.cpp b/decompiler/analysis/mips2c.cpp index 127925b9a3..9fdd63c4e6 100644 --- a/decompiler/analysis/mips2c.cpp +++ b/decompiler/analysis/mips2c.cpp @@ -2,6 +2,7 @@ #include "mips2c.h" +#include "common/log/log.h" #include "common/symbols.h" #include "common/util/print_float.h" #include "decompiler/Disasm/InstructionMatching.h" @@ -555,12 +556,13 @@ Mips2C_Line handle_lwc1(const Instruction& i0, Mips2C_Line handle_lw(Mips2C_Output& out, const Instruction& i0, const std::string& instr_str, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { if (i0.get_src(1).is_reg(rs7()) && i0.get_src(0).is_sym()) { // symbol load. out.require_symbol(i0.get_src(0).get_sym()); - return {fmt::format("c->load_symbol({}, cache.{});", reg_to_name(i0.get_dst(0)), - goal_to_c_name(i0.get_src(0).get_sym())), + return {fmt::format("c->load_symbol{}({}, cache.{});", version == GameVersion::Jak1 ? "" : "2", + reg_to_name(i0.get_dst(0)), goal_to_c_name(i0.get_src(0).get_sym())), instr_str}; } if (i0.get_src(1).is_reg(rfp()) && i0.get_src(0).is_label()) { @@ -887,11 +889,14 @@ Mips2C_Line handle_vopmsub(const Instruction& i0, const std::string& instr_strin instr_string}; } -Mips2C_Line handle_lui(const Instruction& i0, const std::string& instr_string, Mips2C_Output& op) { +Mips2C_Line handle_lui(const Instruction& i0, + const std::string& instr_string, + Mips2C_Output& op, + GameVersion version) { if (i0.get_src(0).get_imm() == 0x7000) { op.require_symbol("*fake-scratchpad-data*"); - return {fmt::format("get_fake_spad_addr({}, cache.fake_scratchpad_data, 0, c);", - reg_to_name(i0.get_dst(0))), + return {fmt::format("get_fake_spad_addr{}({}, cache.fake_scratchpad_data, 0, c);", + version == GameVersion::Jak1 ? "" : "2", reg_to_name(i0.get_dst(0))), instr_string}; } else { return {fmt::format("c->lui({}, {});", reg_to_name(i0.get_dst(0)), i0.get_src(0).get_imm()), @@ -945,7 +950,7 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output, case InstructionKind::CFC2: return handle_cfc2(i0, instr_str); case InstructionKind::LW: - return handle_lw(output, i0, instr_str, file); + return handle_lw(output, i0, instr_str, file, version); case InstructionKind::LB: case InstructionKind::LWL: case InstructionKind::LWR: @@ -1075,6 +1080,10 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output, return handle_generic_op3(i0, instr_str, "adds"); case InstructionKind::SUBS: return handle_generic_op3(i0, instr_str, "subs"); + case InstructionKind::MINS: + return handle_generic_op3(i0, instr_str, "mins"); + case InstructionKind::MAXS: + return handle_generic_op3(i0, instr_str, "maxs"); case InstructionKind::XOR: return handle_generic_op3(i0, instr_str, "xor_"); case InstructionKind::AND: @@ -1143,7 +1152,7 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output, case InstructionKind::PROT3W: return handle_generic_op2(i0, instr_str, "prot3w"); case InstructionKind::LUI: - return handle_lui(i0, instr_str, output); + return handle_lui(i0, instr_str, output, version); case InstructionKind::CLTS: output.needs_cop1_bc = true; return handle_clts(i0, instr_str); @@ -1183,7 +1192,7 @@ struct JumpTableBlock { void run_mips2c_jump_table(Function* f, const std::vector& jump_table_locations, GameVersion version) { - fmt::print("mips2c-jump on {}\n", f->name()); + lg::info("mips2c-jump on {}", f->name()); u32 magic_code = std::hash()(f->name()); std::unordered_map loc_to_block; for (size_t bb_idx = 0; bb_idx < f->basic_blocks.size(); bb_idx++) { diff --git a/decompiler/analysis/reg_usage.cpp b/decompiler/analysis/reg_usage.cpp index 7a6d035ee4..95decf5d4e 100644 --- a/decompiler/analysis/reg_usage.cpp +++ b/decompiler/analysis/reg_usage.cpp @@ -212,7 +212,7 @@ RegUsageInfo analyze_ir2_register_usage(const Function& function) { // also useful to know, written and unused. for (auto reg : op->write_regs()) { if (op_info.live.find(reg) == op_info.live.end()) { - // fmt::print("op {} wau {}\n", op->to_string(function.ir2.env), reg.to_string()); + // lg::print("op {} wau {}\n", op->to_string(function.ir2.env), reg.to_string()); op_info.written_and_unused.insert(reg); } } @@ -222,4 +222,4 @@ RegUsageInfo analyze_ir2_register_usage(const Function& function) { ASSERT(result.op.size() == ops->ops.size()); return result; } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/analysis/static_refs.cpp b/decompiler/analysis/static_refs.cpp index 7e1cfd1425..c668f118de 100644 --- a/decompiler/analysis/static_refs.cpp +++ b/decompiler/analysis/static_refs.cpp @@ -1,5 +1,6 @@ #include "static_refs.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "decompiler/Function/Function.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" #include "decompiler/analysis/final_output.h" diff --git a/decompiler/analysis/symbol_def_map.cpp b/decompiler/analysis/symbol_def_map.cpp index 215c7481ec..24cc7785f1 100644 --- a/decompiler/analysis/symbol_def_map.cpp +++ b/decompiler/analysis/symbol_def_map.cpp @@ -1,5 +1,6 @@ #include "symbol_def_map.h" #include "common/link_types.h" +#include "common/log/log.h" #include "decompiler/ObjectFile/ObjectFileDB.h" #include "third-party/json.hpp" @@ -128,4 +129,4 @@ void SymbolMapBuilder::add_deftypes_from_top_level_function(const Function& f, } } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/analysis/type_analysis.cpp b/decompiler/analysis/type_analysis.cpp index f9c486e39c..9133cb6134 100644 --- a/decompiler/analysis/type_analysis.cpp +++ b/decompiler/analysis/type_analysis.cpp @@ -1,4 +1,5 @@ #include "type_analysis.h" +#include "common/log/log.h" namespace decompiler { namespace { @@ -37,7 +38,7 @@ void modify_input_types_for_casts( try { auto type_from_cast = TP_Type::make_from_ts(dts.parse_type_spec(cast.type_name)); auto original_type = state->get(cast.reg); - // fmt::print("Cast reg {} : {} -> {}\n", cast.reg.to_string(), original_type.print(), + // lg::print("Cast reg {} : {} -> {}\n", cast.reg.to_string(), original_type.print(), // type_from_cast.print()); if (original_type != type_from_cast) { // the cast will have an effect on types. If we are removing the original type, remember it @@ -63,7 +64,7 @@ void try_modify_input_types_for_casts( DecompilerTypeSystem& dts) { auto kv = casts.find(idx); if (kv != casts.end()) { - // fmt::print("at idx {}, casting:\n", idx); + // lg::print("at idx {}, casting:\n", idx); modify_input_types_for_casts(kv->second, state, changed_types, dts); } @@ -208,7 +209,7 @@ bool run_type_analysis_ir2(const TypeSpec& my_type, DecompilerTypeSystem& dts, F for (auto& info : env.stack_slot_entries) { info.second.typespec = info.second.tp_type.typespec(); // debug - // fmt::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), + // lg::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), // info.second.tp_type.print()); } diff --git a/decompiler/analysis/variable_naming.cpp b/decompiler/analysis/variable_naming.cpp index e419a92bcd..725b5d2e14 100644 --- a/decompiler/analysis/variable_naming.cpp +++ b/decompiler/analysis/variable_naming.cpp @@ -1,5 +1,6 @@ #include +#include "common/log/log.h" #include "decompiler/Function/Function.h" #include "decompiler/IR2/Env.h" #include "decompiler/util/DecompilerTypeSystem.h" @@ -66,7 +67,7 @@ void VarMapSSA::merge(const VarSSA& var_a, const VarSSA& var_b) { auto b = m_entries.at(var_b.m_entry_id); ASSERT(a.reg == b.reg); if (b.var_id == 0) { - // fmt::print("Merge {} <- {}\n", to_string(var_b), to_string(var_a)); + // lg::print("Merge {} <- {}\n", to_string(var_b), to_string(var_a)); for (auto& entry : m_entries) { if (entry.var_id == a.var_id && entry.reg == a.reg) { @@ -75,7 +76,7 @@ void VarMapSSA::merge(const VarSSA& var_a, const VarSSA& var_b) { } a.var_id = b.var_id; } else { - // fmt::print("Merge {} <- {}\n", to_string(var_a), to_string(var_b)); + // lg::print("Merge {} <- {}\n", to_string(var_a), to_string(var_b)); for (auto& entry : m_entries) { if (entry.var_id == b.var_id && entry.reg == b.reg) { @@ -101,17 +102,17 @@ void VarMapSSA::merge_to_first(const VarSSA& var_a, const VarSSA& var_b) { auto& a = m_entries.at(var_a.m_entry_id); auto b = m_entries.at(var_b.m_entry_id); - // fmt::print("Merge-to-first {} <- {}\n", to_string(var_a), to_string(var_b)); + // lg::print("Merge-to-first {} <- {}\n", to_string(var_a), to_string(var_b)); ASSERT(a.reg == b.reg); // for (auto& entry : m_entries) { for (size_t i = 0; i < m_entries.size(); i++) { auto& entry = m_entries.at(i); if (entry.var_id == b.var_id && entry.reg == b.reg) { - // fmt::print("remap extra {} var_id from {} to {}\n", i, entry.var_id, a.var_id); + // lg::print("remap extra {} var_id from {} to {}\n", i, entry.var_id, a.var_id); entry.var_id = a.var_id; } else { - // fmt::print("no remap at {} (prev is {} {})\n", i, entry.reg.to_charp(), entry.var_id); + // lg::print("no remap at {} (prev is {} {})\n", i, entry.reg.to_charp(), entry.var_id); } } b.var_id = a.var_id; @@ -163,7 +164,7 @@ void VarMapSSA::remap_reg(Register reg, const std::unordered_map& rema void VarMapSSA::debug_print_map() const { for (auto& entry : m_entries) { - fmt::print("[{:02d}] {} {}\n", entry.entry_id, entry.reg.to_charp(), entry.var_id); + lg::print("[{:02d}] {} {}\n", entry.entry_id, entry.reg.to_charp(), entry.var_id); } } @@ -1012,7 +1013,7 @@ void promote_register_class(const Function& func, } for (const auto& promotion : promote_map) { - // fmt::print("Promote {} to {}\n", promotion.first.print(), "uint128"); + // lg::print("Promote {} to {}\n", promotion.first.print(), "uint128"); // first reads: auto read_info = try_lookup_read(result, promotion.first); @@ -1068,21 +1069,21 @@ std::optional run_variable_renaming(const Function& function, debug_in += fmt::format(" out: {}\n\n", reg_to_string(block_info.output)); } - fmt::print("Debug Input\n{}\n----------------------------------\n", debug_in); + lg::print("Debug Input\n{}\n----------------------------------\n", debug_in); } // Create and convert to SSA auto ssa = make_rc_ssa(function, rui, ops); if (debug_prints) { - fmt::print("Basic SSA\n{}\n------------------------------------\n", ssa.print()); + lg::print("Basic SSA\n{}\n------------------------------------\n", ssa.print()); } // eliminate PHIs that are not needed, still keeping us in SSA. while (ssa.simplify()) { } if (debug_prints) { - fmt::print("Simplified SSA\n{}-------------------------------\n", ssa.print()); + lg::print("Simplified SSA\n{}-------------------------------\n", ssa.print()); } // merge special registers @@ -1099,7 +1100,7 @@ std::optional run_variable_renaming(const Function& function, ssa.merge_all_phis(); if (debug_prints) { - fmt::print("{}", ssa.print()); + lg::print("{}", ssa.print()); } if (debug_prints) { ssa.map.debug_print_map(); @@ -1110,7 +1111,7 @@ std::optional run_variable_renaming(const Function& function, // do rename ssa.remap(arg_count(function)); if (debug_prints) { - fmt::print("{}", ssa.print()); + lg::print("{}", ssa.print()); } if (function.ir2.env.has_type_analysis()) { diff --git a/decompiler/config.cpp b/decompiler/config.cpp index 69b2080118..9f2503275b 100644 --- a/decompiler/config.cpp +++ b/decompiler/config.cpp @@ -1,5 +1,6 @@ #include "config.h" +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "common/util/json_util.h" @@ -29,7 +30,7 @@ Config read_config_file(const fs::path& path_to_config_file, const std::string& Config config; auto config_str = file_util::read_text_file(path_to_config_file); auto cfg = parse_commented_json(config_str, path_to_config_file.string()); - fmt::print("Config Overide: '{}'\n", override_json); + lg::info("Config Overide: '{}'\n", override_json); auto cfg_override = parse_commented_json(override_json, ""); cfg.update(cfg_override); diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index 2326238fc2..e8e767a46d 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -576,7 +576,7 @@ (post-hook function :offset-assert 76) (event-hook (function process int symbol event-message-block object) :offset-assert 80) (allocated-length int32 :offset-assert 84) - (pad0 uint32 2) + (pad-unknown-0 uint32 2) ;; had to rename this unfortunately, there is a type that uses this same name "vehicle" (heap-base pointer :offset-assert 96) (heap-top pointer :offset-assert 100) (heap-cur pointer :offset-assert 104) @@ -2818,7 +2818,7 @@ (tex-l2-shrub 91) ;; tex (shrub-l2-shrub 92) ;; shrub (shrub-n-l2-shrub 93) ;; shrub - (billboard-l2-shrub 94) ;; shrub + (billboard-l2-shrub 94) ;; shrub (shrub-v-l2-shrub 95) ;; shrub (shrub-nt-l2-shrub 96) ;; shrub (merc-l2-shrub 97) ;; merc @@ -5150,14 +5150,14 @@ (tex basic :offset-assert 12) (tex-name basic :offset-assert 16) (extra vector :inline :offset-assert 32) - (color uint32 :offset-assert 48) + (color rgba :offset-assert 48) (frame-time float :offset-assert 52) (frame-delta float :offset-assert 56) (frame-mod float :offset-assert 60) - (test uint64 :offset-assert 64) - (alpha uint64 :offset-assert 72) - (clamp uint64 :offset-assert 80) - (data uint8 :dynamic :offset-assert 88) + (test gs-test :offset-assert 64) + (alpha gs-alpha :offset-assert 72) + (clamp gs-clamp :offset-assert 80) + (data texture-anim-layer :dynamic :offset-assert 88) ) :method-count-assert 11 :size-assert #x58 @@ -5947,7 +5947,7 @@ @see [[memory-usage-block::10]]" (_type_ symbol) memory-usage-block 14) (inside-boxes-check (_type_ vector) symbol 15) - (level-method-16 () none 16) ;; (update-vis! (_type_ level-vis-info uint uint) symbol 16) + (update-vis! (_type_ level-vis-info uint (pointer uint8)) symbol 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) (login-begin (_type_) _type_ 19) @@ -6475,7 +6475,7 @@ (deftype connection (connectable) ((param0 basic :offset-assert 16) - (param1 int32 :offset-assert 20) ;; guessed by decompiler + (param1 basic :offset-assert 20) ;; guessed by decompiler (param2 int32 :offset-assert 24) ;; guessed by decompiler (param3 int32 :offset-assert 28) ;; guessed by decompiler (quad uint128 2 :offset 0) ;; guessed by decompiler @@ -8172,15 +8172,14 @@ ;; +++main-h:scene-controls (defenum scene-controls :type int64 - (all-off 0) - (channel 1) - (anim-name 2) - (dma-size 4) - (bounds-spheres 8) - (actors 16) - (actor-marks 32) - (special-fma-spheres 64) - (all-on 95)) + :bitfield #t + (channel) + (anim-name) + (dma-size) + (bounds-spheres) + (actors) + (actor-marks) + (special-fma-spheres)) ;; ---main-h:scene-controls (define-extern *display-scene-control* scene-controls) @@ -8372,7 +8371,13 @@ (collect-stats (_type_) none 13) ;; (collide-ray (_type_ int collide-list) none 13) (debug-draw (_type_ drawable display-frame) none 14) (unpack-vis (_type_ (pointer int8) (pointer int8)) (pointer int8) 15) ;; - (collect-regions (_type_ sphere int region-prim-list) none 16) + (collect-regions + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (_type_ sphere int region-prim-list) none 16) ) ) @@ -8535,9 +8540,8 @@ :method-count-assert 10 :size-assert #x10 :flag-assert #xa00000010 - ;; field on-enter uses ~A with a signed load field on-inside uses ~A with a signed load field on-exit uses ~A with a signed load (:methods - (region-method-9 () none 9) + (region-method-9 (_type_ vector) symbol 9) ) ) @@ -8550,7 +8554,7 @@ :flag-assert #x900000010 ) - +(declare-type region-prim-area structure) (deftype drawable-region-prim (drawable) ((region region :offset 8) ) @@ -8559,8 +8563,10 @@ :flag-assert #x1400000020 (:methods (debug-draw-region (_type_ int) none 17) - (drawable-region-prim-method-18 () none 18) - (drawable-region-prim-method-19 () none 19) + (track-region "TODO" (_type_ region-prim-area) symbol 18) + (within-area? + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (_type_ region-prim-area) symbol 19) ) ) @@ -8572,16 +8578,15 @@ :method-count-assert 19 :size-assert #x20 :flag-assert #x1300000020 - ;; Failed to read fields. (:methods - (drawable-tree-region-prim-method-17 () none 17) + (drawable-tree-region-prim-method-17 (_type_ vector) symbol 17) (debug-print (_type_ vector object) none 18) ) ) (deftype drawable-inline-array-region-prim (drawable-inline-array) - ((data drawable-region-prim 1 :inline) + ((data drawable-region-prim 1 :inline :offset-assert 32) (pad uint8 4)) :flag-assert #x1100000044 ) @@ -10035,8 +10040,8 @@ (:methods (init-sun-data! "Sets the sun related upload data - the sun, halo and aurora" (_type_ int float float float) none 9) (init-orbit-settings! (_type_ int float float float float float float) none 10) - (sky-work-method-11 () none 11) - (sky-work-method-12 () none 12) + (update-colors-for-time (_type_ float) none 11) + (update-time-and-speed (_type_ float float) none 12) ;; update time-of-day settings (draw (_type_) none 13) (sky-work-method-14 () none 14) (sky-work-method-15 () none 15) @@ -12519,6 +12524,7 @@ (declare-type continue-point basic) (declare-type game-save basic) +;; +++game-info-h:game-secrets (defenum game-secrets :type uint32 :bitfield #t @@ -12539,7 +12545,9 @@ (reverse-races) (hero-mode) (big-head) - (little-head)) + (little-head) + (game-secret-unknown)) +;; ---game-info-h:game-secrets (defenum game-score (none) @@ -13672,6 +13680,7 @@ ;; lightning-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +++lightning-h:lightning-spec-flags (defenum lightning-spec-flags :type uint16 :bitfield #t @@ -13681,6 +13690,7 @@ (lsf3 3) (size-from-adjust-dist 4) ) +;; ---lightning-h:lightning-spec-flags (deftype lightning-spec (basic) ((name string :offset-assert 4) @@ -13710,13 +13720,16 @@ :flag-assert #x900000050 ) +;; +++lightning-h:lightning-mode (defenum lightning-mode :type uint8 + (lm-1 -1) (lm0 0) (lm1 1) (lm2 2) (lm3 3) ) +;; ---lightning-h:lightning-mode (deftype lightning-state (structure) ((mode lightning-mode :offset-assert 0) @@ -13747,7 +13760,7 @@ (new (symbol type lightning-spec process float) _type_) (change-mode (_type_ lightning-mode) lightning-mode 9) (get-mode (_type_) lightning-mode 10) - (set-point (_type_ int vector) none 11) + (set-point! (_type_ int vector) none 11) (set-first-meet-point (_type_ vector) none 12) (set-last-meet-point (_type_ vector) none 13) ) @@ -14897,13 +14910,14 @@ ;; scene-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(declare-type scene-player basic) (deftype scene-actor (basic) - ((name basic :offset-assert 4) + ((name string :offset-assert 4) (level basic :offset-assert 8) - (art-group basic :offset-assert 12) - (prefix basic :offset-assert 16) - (draw-frames basic :offset-assert 20) - (scissor-frames basic :offset-assert 24) + (art-group string :offset-assert 12) + (prefix string :offset-assert 16) + (draw-frames pair :offset-assert 20) ;; some form of pair? + (scissor-frames pair :offset-assert 24) (camera int16 :offset-assert 28) (light-index uint8 :offset-assert 30) (shadow-mask uint8 :offset-assert 31) @@ -14914,36 +14928,36 @@ (shadow-volume-joint basic :offset-assert 48) (draw-seg uint64 :offset-assert 56) (no-draw-seg uint64 :offset-assert 64) - (process uint64 :offset-assert 72) + (process handle :offset-assert 72) ) :method-count-assert 10 :size-assert #x50 :flag-assert #xa00000050 (:methods - (scene-actor-method-9 () none 9) + (scene-actor-method-9 (_type_ scene-player) (pointer process) 9) ) ) (deftype scene (art-group) ((mask-to-clear uint32 :offset-assert 32) - (entity basic :offset-assert 36) - (art-group basic :offset-assert 40) - (anim basic :offset-assert 44) + (entity string :offset-assert 36) + (art-group string :offset-assert 40) + (anim string :offset-assert 44) (parts int32 :offset-assert 48) (command-list basic :offset-assert 52) - (cut-list basic :offset-assert 56) + (cut-list pair :offset-assert 56) (wait-max-time time-frame :offset-assert 64) (wait-air-time time-frame :offset-assert 72) (wait-ground-time time-frame :offset-assert 80) - (draw-target basic :offset-assert 88) + (draw-target level-load-info :offset-assert 88) (abort basic :offset-assert 92) - (actor basic :offset-assert 96) - (load-point basic :offset-assert 100) - (end-point basic :offset-assert 104) + (actor (array scene-actor) :offset-assert 96) + (load-point string :offset-assert 100) + (end-point string :offset-assert 104) (borrow basic :offset-assert 108) (sfx-volume float :offset-assert 112) (ambient-volume float :offset-assert 116) - (music-volume float :offset-assert 120) + (music-volume float :offset-assert 120) (blackout-end basic :offset-assert 124) (peaceful basic :offset-assert 128) (music-delay float :offset-assert 132) @@ -14954,26 +14968,26 @@ :size-assert #x8e :flag-assert #x110000008e (:methods - (scene-method-15 () none 15) - (scene-method-16 () none 16) + (scene-method-15 (_type_ spool-anim) none 15) + (scene-method-16 (_type_) _type_ 16) ) ) (deftype scene-player (process-drawable) - ((scene-list basic :offset-assert 200) - (scene basic :offset-assert 204) + ((scene-list (pointer symbol) :offset-assert 200) + (scene scene :offset-assert 204) (scene-index int32 :offset-assert 208) - (anim basic :offset-assert 212) - (next-anim basic :offset-assert 216) - (camera uint64 :offset-assert 224) - (main-entity basic :offset-assert 232) + (anim spool-anim :offset-assert 212) + (next-anim spool-anim :offset-assert 216) + (camera handle :offset-assert 224) + (main-entity entity-actor :offset-assert 232) (wait basic :offset-assert 236) (old-target-pos transformq :inline :offset-assert 240) (pre-cut-frame basic :offset-assert 288) - (preload-continue basic :offset-assert 292) + (preload-continue string :offset-assert 292) (dma-max uint32 :offset-assert 296) (gui-id uint32 :offset-assert 300) - (aborted? basic :offset-assert 304) + (aborted? symbol :offset-assert 304) (scene-start-time time-frame :offset-assert 312) (targ-speed float :offset-assert 320) (cur-speed float :offset-assert 324) @@ -14987,12 +15001,12 @@ :size-assert #x178 :flag-assert #x1a01000178 (:methods - (scene-player-method-20 () none 20) - (scene-player-method-21 () none 21) - (scene-player-method-22 () none 22) - (scene-player-method-23 () none 23) - (scene-player-method-24 () none 24) - (scene-player-method-25 () none 25) + (wait (symbol) _type_ :state 20) + (release () _type_ :state 21) + (play-anim () _type_ :state 22) + (scene-player-method-23 (_type_ string symbol) none 23) + (scene-player-method-24 (_type_ basic symbol) scene 24) + (scene-player-method-25 (_type_ float) none 25) ) ) @@ -15061,6 +15075,7 @@ (pause-in float :offset-assert 36) (pause-out float :offset-assert 40) ) + :pack-me :method-count-assert 16 :size-assert #x2c :flag-assert #x100000002c @@ -15973,7 +15988,7 @@ (penetrate-using penetrate) (penetrated-by penetrate) (backup-collide-as collide-spec) - (backup-collde-with collide-spec) + (backup-collide-with collide-spec) (event-priority uint8) (rider-max-momentum float) ) @@ -15983,7 +15998,7 @@ ;; Failed to read fields. (:methods (new (symbol type process-drawable collide-list-enum) _type_ 0) - (collide-shape-method-28 () none 28) ;; (move-by-vector! (_type_ vector) none 28) + (move-by-vector! (_type_ vector) none 28) ;; (move-by-vector! (_type_ vector) none 28) (collide-shape-method-29 (_type_ vector) none 29) ;; (alloc-riders (_type_ int) none 29) (collide-shape-method-30 () none 30) ;; (move-to-point! (_type_ vector) none 30) (collide-shape-method-31 () none 31) ;; (debug-draw (_type_) none 31) @@ -16747,7 +16762,7 @@ (get-next (_type_ touching-shapes-entry) touching-prims-entry 10) ;; (get-touched-shape (_type_ collide-shape) collide-shape 10) (touching-shapes-entry-method-11 () none 11) ;; (dummy-11 () none 11) (touching-shapes-entry-method-12 (_type_ collide-shape uint) touching-prims-entry 12) ;; (prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry 12) - (touching-shapes-entry-method-13 () none 13) ;; (prims-touching-action? (_type_ collide-shape collide-action collide-action) touching-prims-entry 13) + (touching-shapes-entry-method-13 (_type_ collide-shape uint uint) basic 13) ;; (prims-touching-action? (_type_ collide-shape collide-action collide-action) touching-prims-entry 13) (touching-shapes-entry-method-14 () none 14) ;; (dummy-14 () none 14) ) ) @@ -17005,7 +17020,9 @@ :size-assert #xcc :flag-assert #x1b005000cc (:methods - (get-trans (_type_ int) vector 20) + (get-trans + "@returns the `trans` [[vector]] from the process's `root` (typically either a [[trsqv]] or a [[collide-shape]]" + (_type_ int) vector 20) (get-quat (_type_) quaternion 21) (get-transv (_type_) vector 22) (process-focusable-method-23 (_type_) none 23) @@ -17776,6 +17793,7 @@ ;; 0 28 (all-visible-list (pointer uint16) :offset-assert 32) (visible-list-length int16 :offset-assert 36) + (extra-vis-list-length int16 :offset-assert 38) (drawable-trees drawable-tree-array :offset-assert 40) (pat pointer :offset-assert 44) (pat-length int32 :offset-assert 48) @@ -17810,8 +17828,7 @@ ;; 200 is some array ;; 204 is maybe that array's length (wind-array-length int32 :offset 204) - ;; 216 is a vector array - ;; (vec-array (pointer vector) :offset 216) ; TODO see - `update-visible` hits assertion + (vis-spheres vector-array :offset 216) (region-tree drawable-tree-region-prim :offset 252) (tfrag-masks texture-masks-array :offset-assert 256) @@ -17834,6 +17851,8 @@ (bsp-offset vector :inline :offset-assert 304) + + (unk-data uint32 18 :offset 180) (end uint8 :offset 399) @@ -19004,28 +19023,54 @@ (deftype region-prim-area (structure) ((region-prim-list region-prim-list :inline :offset-assert 0) (pos vector :inline :offset-assert 1296) + (unknown-vector-uiyb1 vector :inline :offset-assert 1312) (ray vector :inline :offset 1328) + (unknown-vector-t3edh vector :inline :offset-assert 1344) (region-enter-count int32 :offset 1360) - (region-enter-list uint32 320 :offset-assert 1364) - (region-enter-prim-list uint32 320 :offset-assert 2644) + (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) (region-exit-count int32 :offset-assert 3924) - (region-exit-list uint32 320 :offset-assert 3928) - (region-exit-prim-list uint32 320 :offset-assert 5208) + (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) (region-inside-count int32 :offset-assert 6488) - (region-inside-list uint32 320 :offset-assert 6492) - (region-inside-prim-list uint32 320 :offset-assert 7772) + (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) (region-start-count int32 :offset-assert 9052) - (region-start-list uint32 320 :offset-assert 9056) - (region-start-prim-list uint32 320 :offset-assert 10336) + (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 :size-assert #x2d60 :flag-assert #xd00002d60 (:methods - (region-prim-area-method-9 () none 9) - (region-prim-area-method-10 () none 10) - (region-prim-area-method-11 () none 11) - (region-prim-area-method-12 () none 12) + (track-entered-region! + "Enumerates through the objects `region-enter-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and increment `region-enter-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 9) + (track-exited-region! + "Enumerates through the objects `region-exit-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and increment `region-exit-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 10) + (track-inside-region! + "Enumerates through the objects `region-inside-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and increment `region-inside-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 11) + (track-start-region! + "Enumerates through the objects `region-start-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and increment `region-start-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 12) ) ) @@ -19563,6 +19608,7 @@ (start-dead 2) (launch-asap 3) (bit6 6) + (bit7 7) ) (defenum sp-launch-state-flags @@ -19726,7 +19772,7 @@ (:methods (initialize (_type_ sparticle-launch-group process) none 9) ;; (sparticle-launch-control-method-10 (_type_ vector) symbol 10) ;; (is-visible? (_type_ vector) symbol 10) - (sparticle-launch-control-method-11 (_type_ vector) none 11) ;; TODO - CFG ;; (spawn (_type_ vector) object 11) + (spawn (_type_ vector) none 11) ;; TODO - CFG ;; (spawn (_type_ vector) object 11) (sparticle-launch-control-method-12 (_type_ matrix) none 12) (sparticle-launch-control-method-13 (_type_ cspace) none 13) (kill-and-free-particles (_type_) none 14) @@ -21792,7 +21838,7 @@ (user-list engine :offset-assert 36) (next-nav-mesh surface :offset-assert 40) (prev-nav-mesh surface :offset-assert 44) - (bounds sphere :inline :offset-assert 48) + (bounds vector :inline :offset-assert 48) ;; actually a sphere (origin vector :inline :offset 48) (entity entity :offset-assert 64) (link-array (array nav-mesh-link) :offset-assert 68) @@ -22207,7 +22253,7 @@ (:methods (spatial-hash-method-34 () none 34) (spatial-hash-method-35 () none 35) - (spatial-hash-method-36 () none 36) + (spatial-hash-method-36 (_type_ sphere (pointer collide-shape) int) int 36) (spatial-hash-method-37 () none 37) (spatial-hash-method-38 () none 38) (spatial-hash-method-39 () none 39) @@ -22220,7 +22266,7 @@ ;; actor-hash-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-extern *actor-list* pointer) ;; some array of something. +(define-extern *actor-list* (pointer collide-shape)) ;; some array of something. (define-extern *actor-list-length* int) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -22502,7 +22548,7 @@ (define-extern ray-sphere-intersect (function vector vector vector float float)) (define-extern ray-circle-intersect (function vector vector vector float float)) ;; (define-extern ray-cylinder-intersect (function vector vector vector vector float float vector float)) -;; (define-extern ray-plane-intersect function) ;; (function vector vector vector vector vector vector vector float) +(define-extern ray-plane-intersect (function vector vector vector vector vector vector vector float)) ;; ;; (define-extern ray-triangle-intersect function) ;; (function vector vector float matrix vector vector float) ;; (define-extern collide-do-primitives function) ;; (function float) (define-extern moving-sphere-triangle-intersect (function vector vector float collide-cache-tri vector vector float)) ;; @@ -23028,14 +23074,14 @@ (define-extern dma-timeout-cam (function vector)) (define-extern display-file-info (function int)) (define-extern add-debug-cursor (function symbol bucket-id int int int none)) -(define-extern *boundary-polygon* none) ;; (inline-array lbvtx) ;; TODO: figure out what this actually is +(define-extern *boundary-polygon* (inline-array sky-vertex)) (define-extern init-boundary-regs (function none)) (define-extern add-boundary-shader (function texture-id dma-buffer none)) ;; (define-extern draw-boundary-polygon function) ;; function ;; (define-extern render-boundary-quad function) ;; (function lbvtx dma-buffer none) -;; (define-extern render-boundary-tri function) ;; (function lbvtx dma-buffer none) -;; (define-extern add-debug-bound-internal function) -(define-extern add-debug-bound (function int transform int rgba rgba int none)) +(define-extern render-boundary-tri (function sky-vertex dma-buffer none)) +(define-extern add-debug-bound-internal (function dma-buffer (inline-array vector) int rgba rgba int none)) +(define-extern add-debug-bound (function bucket-id (inline-array vector) int rgba rgba int none)) (define-extern cpu-delay (function int none)) (define-extern qword-read-time (function (array uint128) int int)) (define-extern bugfix? (function symbol)) @@ -23772,7 +23818,6 @@ ;; decomp ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype huf-dictionary-node (structure) ((zero uint16 :offset-assert 0) (one uint16 :offset-assert 2) @@ -23781,12 +23826,11 @@ :size-assert #x4 :flag-assert #x900000004 ) -|# -;; (define-extern unpack-comp-rle function) ;; (function (pointer int8) (pointer int8) none) -;; (define-extern unpack-comp-huf function) ;; (function (pointer uint8) (pointer uint8) uint huf-dictionary-node none) -(define-extern unpack-comp-lzo (function object object none)) -;; (define-extern pack-comp-rle function) +(define-extern unpack-comp-rle (function (pointer int8) (pointer int8) none)) +(define-extern unpack-comp-huf (function (pointer uint8) (pointer uint8) uint huf-dictionary-node none)) +(define-extern unpack-comp-lzo (function (pointer uint8) (pointer uint8) none)) +(define-extern pack-comp-rle (function (pointer uint8) (pointer uint8) int int none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; background ;; @@ -24605,7 +24649,7 @@ ;; (define-extern auto-save-init-by-other function) ;; (function symbol process-tree int int none :behavior auto-save) (define-extern auto-save-command (function symbol int int process-tree symbol none)) (define-extern auto-save-check (function none)) -;; (define-extern auto-save-user function) +(define-extern auto-save-user (function none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; settings ;; @@ -25646,7 +25690,7 @@ ;; (define-extern clip-polygon-against-negative-hyperplane function) ;; function ;; (define-extern render-sky-quad function) ;; (function int dma-buffer none) ;; (define-extern render-sky-tri function) ;; (function (inline-array sky-vertex) dma-buffer none) -;; (define-extern close-sky-buffer function) ;; (function dma-buffer none) +(define-extern close-sky-buffer (function dma-buffer none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; load-state ;; @@ -27052,8 +27096,8 @@ ;; (define-extern transform-and-sleep function) ;; (define-extern transform-and-sleep-code function) (define-extern transform-post (function int :behavior process-drawable)) ;; -;; (define-extern rider-trans function) ;; (function int :behavior process-drawable) -;; (define-extern rider-post function) ;; (function int :behavior process-drawable) +(define-extern rider-trans (function none :behavior process-drawable)) ;; +(define-extern rider-post (function none :behavior process-drawable)) ;; ;; (define-extern pusher-post function) ;; (function int :behavior process-drawable) ;; (define-extern process-drawable-delay-player function) ;; (function time-frame int :behavior process-drawable) ;; (define-extern process-drawable-fuel-cell-handler function) ;; (function process int symbol event-message-block none :behavior process-drawable) @@ -27069,7 +27113,7 @@ (define-extern can-display-query? (function symbol)) (define-extern talker-surpress! (function none)) (define-extern talker-displayed? (function symbol)) -(define-extern kill-current-talker (function none)) +(define-extern kill-current-talker (function symbol pair symbol none)) ;; see (exit play-anim scene-player) (define-extern string->talker-speech (function string talker-speech-class)) (define-extern talker-spawn-func (function talker-speech-class process-tree vector region int)) (define-extern talker-init (function talker-speech-class vector region none :behavior talker)) @@ -27084,9 +27128,9 @@ ;; region ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern region-tree-execute function) +(define-extern region-tree-execute (function symbol vector vector none)) (define-extern region-execute (function none)) -(define-extern region-prim-lookup-by-id (function int drawable-region-prim)) +(define-extern region-prim-lookup-by-id (function int symbol symbol drawable-region-prim)) (define-extern region-lookup-by-id (function int region)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -29197,9 +29241,9 @@ (define-extern entity-birth-no-kill (function entity process)) (define-extern entity-task-complete-on (function entity none)) (define-extern entity-task-complete-off (function entity none)) -(define-extern process-entity-status! (function process entity-perm-status symbol int)) ;; +(define-extern process-entity-status! (function process entity-perm-status symbol entity-perm-status)) ;; (define-extern find-nearest-entity (function vector type entity)) -(define-extern entity-speed-test (function string none)) +(define-extern entity-speed-test (function string entity)) (define-extern dump-entity-remap (function object object none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -29695,19 +29739,12 @@ ;; scene ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype scene-stage (process-hidden) () :method-count-assert 15 :size-assert #x80 - :flag-assert #xf00000080 - ;; Failed to read fields. - (:methods - ) - ) -|# + :flag-assert #xf00000080) -#| (deftype subtitle-work (structure) ((draw-tmpl dma-gif-packet :inline :offset-assert 0) (color0 vector4w :inline :offset-assert 32) @@ -29717,13 +29754,12 @@ :size-assert #x40 :flag-assert #x900000040 ) -|# -;; (define-extern scene-decode-continue function) -;; (define-extern scene-lookup function) -;; (define-extern *subtitle-work* object) -;; (define-extern draw-subtitle-image function) -;; (define-extern process-drawable-draw-subtitles function) +(define-extern scene-decode-continue (function basic continue-point)) +(define-extern scene-lookup "TODO - basic can be a string or a scene" (function basic scene)) +(define-extern *subtitle-work* subtitle-work) +(define-extern draw-subtitle-image (function subtitle-image font-context pointer)) +(define-extern process-drawable-draw-subtitles (function none :behavior process-drawable)) (define-extern scene-player-init (function string symbol object none :behavior scene-player)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -31291,12 +31327,23 @@ ;; sampler ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern *sampler-mem* object) -;; (define-extern *sampler-compare* object) -;; (define-extern *sampler-count* object) -;; (define-extern timer0-handler function) -;; (define-extern sampler-start function) -;; (define-extern sampler-stop function) +(define-extern *sampler-mem* "A pointer to where the sampled data should be stored" pointer) +(define-extern *sampler-compare* + "The value used to set the EE register's `Timer 0 Compare Value`. Always `1`" + uint) +(define-extern *sampler-count* + "Incremented everytime a metric is sampled + @see [[timer0-handler]]" + int) +(define-extern timer0-handler (function none)) +(define-extern sampler-start + "Reset the [[timer-bank]] EE registers. + - If [[*sampler-mem*]] is undefined, allocate 16.7MB in the debug segment + - and when [[*sampler-mem*]] is defined, initialize the [[timer-bank]] fully. Reset [[*sampler-count*]] to 0 as well" + (function none)) +(define-extern sampler-stop + "Sets the [[timer-bank]] mode EE register to 0" + (function none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; default-menu ;; @@ -31669,22 +31716,24 @@ ;; blocking-plane ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype blocking-plane (process-drawable) - () + ((root-override collide-shape :offset 128 :score 999)) :method-count-assert 22 :size-assert #xc8 :flag-assert #x16005000c8 (:methods (idle () _type_ :state 20) - (blocking-plane-method-21 () none 21) + (init! + "TODO - but sets up the plane given 2 vectors and a height" + (_type_ (inline-array vector) float) none 21) ) ) -|# -;; (define-extern blocking-plane-init-by-other function) ;; (function curve-control int none :behavior blocking-plane) -;; (define-extern blocking-plane-spawn function) ;; (function curve-control none :behavior process) -;; (define-extern blocking-plane-destroy function) ;; (function none) +(define-extern blocking-plane-init-by-other + "Calls [[blocking-plane::21]] with the given args" + (function (inline-array vector) float none :behavior blocking-plane)) +(define-extern blocking-plane-spawn (function curve-control (inline-array vector) float none :behavior process)) +(define-extern blocking-plane-destroy (function none :behavior blocking-plane)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; idle-control ;; @@ -32150,15 +32199,14 @@ ) |# -#| (deftype nav-enemy (enemy) - ((frustration-point vector :inline :offset-assert 540) - (move-dest vector :inline :offset-assert 556) - (frustration-time time-frame :offset-assert 572) ;; time-frame - (blocked-start-time time-frame :offset-assert 580) - (restore-nav-radius-time time-frame :offset-assert 588) - (nav-radius-backup float :offset-assert 596) - (circle-radial-dist float :offset-assert 240) + ((frustration-point vector :inline :offset-assert 544) + (move-dest vector :inline :offset-assert 560) + (frustration-time time-frame :offset-assert 576) ;; time-frame + (blocked-start-time time-frame :offset-assert 584) + (restore-nav-radius-time time-frame :offset-assert 592) + (nav-radius-backup float :offset-assert 600) + (circle-radial-dist float :offset 244) ) :method-count-assert 178 :size-assert #x25c @@ -32207,7 +32255,6 @@ (nav-enemy-method-177 () none 177) ) ) -|# #| (deftype nav-enemy-debug-control-info (basic) @@ -32299,6 +32346,7 @@ :flag-assert #x900000040 ) +;; +++rigid-body-h:rigid-body-flag (defenum rigid-body-flag :bitfield #t :type uint32 @@ -32309,6 +32357,7 @@ (debug 4) (blocker 5) ) +;; ---rigid-body-h:rigid-body-flag (deftype rigid-body (structure) ((work basic :offset-assert 0) @@ -32334,9 +32383,9 @@ :size-assert #x120 :flag-assert #x2000000120 (:methods - (rigid-body-method-9 () none 9) - (rigid-body-method-10 () none 10) - (rigid-body-method-11 () none 11) + (rigid-body-method-9 (_type_) none 9) + (rigid-body-method-10 (_type_) none 10) + (rigid-body-method-11 (_type_) none 11) (rigid-body-method-12 (_type_ float) none 12) (rigid-body-method-13 (_type_) none 13) (rigid-body-method-14 (_type_ float) none 14) @@ -32386,12 +32435,12 @@ :size-assert #x130 :flag-assert #x1a00000130 (:methods - (rigid-body-control-method-9 () none 9) - (rigid-body-control-method-10 () none 10) - (rigid-body-control-method-11 () none 11) + (rigid-body-control-method-9 (_type_) none 9) + (rigid-body-control-method-10 (_type_) none 10) + (rigid-body-control-method-11 (_type_) none 11) (rigid-body-control-method-12 (_type_ float) none 12) (rigid-body-control-method-13 (_type_) none 13) - (rigid-body-control-method-14 () none 14) + (rigid-body-control-method-14 (_type_ float) none 14) (clear-force-torque! (_type_) none 15) (clear-momentum! (_type_) none 16) (rigid-body-control-method-17 (_type_ vector vector) none 17) @@ -32406,6 +32455,7 @@ ) ) +;; +++rigid-body-h:rigid-body-object-flag (defenum rigid-body-object-flag :bitfield #t :type uint64 @@ -32418,7 +32468,43 @@ (player-standing-on 6) (player-impulse-force 7) (player-contact-force 8) + (persistent 9) + (in-air 10) + (on-ground 11) + (on-flight-level 12) + (riding 13) + (player-driving 14) + (waiting-for-player 15) + (ignition 16) + (turbo-boost 17) + (reverse-gear 18) + (slide 19) + (hard-turn 20) + (jump 21) + (jump-sound 22) + (ai-driving 23) + (traffic-managed 24) + (flight-level-transition 25) + (flight-level-transition-ending 26) + (camera-bike-mode 27) + (camera-rapid-track-mode 28) + (camera 29) + (alert 30) + (in-pursuit 31) + (target-in-sight 32) + (rammed-target 33) + (draw-marks 34) + (hack-edit-graph-mode 35) + (measure-control-parameters 36) + (lights-on 37) + (lights-update 38) + (lights-dead 39) + (no-hijack 40) + (player-grabbed 41) + (nav-spheres 42) + (idle-sound 43) ) +;; ---rigid-body-h:rigid-body-object-flag (deftype rigid-body-object (process-focusable) ((info rigid-body-object-constants :offset-assert 204) @@ -32522,73 +32608,115 @@ ;; base-plat ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype base-plat (process-focusable) - ((smush smush-control :inline :offset-assert 204) - (basetrans vector :inline :offset-assert 236) - (bounce-time time-frame :offset-assert 252) - (bouncing basic :offset-assert 260) - (bounce-scale meters :offset-assert 264) + ((root-override collide-shape-moving :offset 128 :score 100) + (smush smush-control :inline :offset-assert 208) + (basetrans vector :inline :offset-assert 240) + (bounce-time time-frame :offset-assert 256) + (bouncing symbol :offset-assert 264) + (bounce-scale meters :offset-assert 268) ) :method-count-assert 34 :size-assert #x110 :flag-assert #x2200900110 (:methods - (base-plat-method-27 () none 27) - (base-plat-method-28 () none 28) - (base-plat-method-29 () none 29) - (base-plat-method-30 () none 30) - (base-plat-method-31 () none 31) - (base-plat-method-32 () none 32) - (base-plat-method-33 () none 33) + (execute-effects + "Executes various ancillary tasks with the platform, such as spawning particles or playing the associated sound" + (_type_) none 27) + (stop-bouncing! + "Sets `bouncing` to false and resets related settings to their defaults" + (_type_) none 28) + (start-bouncing! + "Sets `bouncing` to [[#t]] and sets up the clock to periodically bounce + and translate the platform via the `smush` + @see [[smush-control]]" + (_type_) none :behavior base-plat 29) + (get-art-group + "@returns The associated [[art-group]]" + (_type_) art-group 30) + (base-plat-method-31 "TODO - collision stuff" (_type_) none 31) + (base-plat-method-32 (_type_) none 32) + (base-plat-method-33 (_type_) none 33) ) ) -|# -#| +;; +++base-plat:eco-door-flags +(defenum eco-door-flags + :bitfield #t + :type int32 + (ecdf00) + (ecdf01) + (auto-close) + (one-way) + ) +;; ---base-plat:eco-door-flags + + (deftype eco-door (process-drawable) - ((speed float :offset-assert 196) - (open-distance float :offset-assert 200) - (close-distance float :offset-assert 204) - (out-dir vector :inline :offset-assert 220) - (open-sound uint128 :offset-assert 236) ;; sound-name - (close-sound uint128 :offset-assert 252) ;; sound-name - (state-actor entity-actor :offset-assert 268) ;; guessed by decompiler - (flags int32 :offset-assert 272) ;; eco-door-flags - (locked symbol :offset-assert 276) ;; guessed by decompiler - (auto-close symbol :offset-assert 280) ;; guessed by decompiler - (one-way symbol :offset-assert 284) ;; guessed by decompiler + "@unused - Likely a left-over from Jak 1" + ((root-override collide-shape :offset 128 :score 100) + (speed float :offset-assert 200) + (open-distance float :offset-assert 204) + (close-distance float :offset-assert 208) + (out-dir vector :inline :offset-assert 224) + (open-sound sound-name :offset-assert 240) ;; sound-name + (close-sound sound-name :offset-assert 256) ;; sound-name + (state-actor entity-actor :offset-assert 272) ;; guessed by decompiler + (flags eco-door-flags :offset-assert 276) ;; eco-door-flags + (locked symbol :offset-assert 280) ;; guessed by decompiler + (auto-close symbol :offset-assert 284) ;; guessed by decompiler + (one-way symbol :offset-assert 288) ;; guessed by decompiler ) :method-count-assert 27 :size-assert #x124 :flag-assert #x1b00b00124 (:methods - (door-closed () _type_ :state 20) ;; (door-closed () _type_ :state 20) - (door-opening () _type_ :state 21) ;; (door-opening () _type_ :state 21) - (door-open () _type_ :state 22) ;; (door-open () _type_ :state 22) - (door-closing () _type_ :state 23) ;; (door-closing () _type_ :state 23) - (eco-door-method-24 () none 24) ;; (TODO-RENAME-24 (_type_) none 24) - (eco-door-method-25 () none 25) ;; (TODO-RENAME-25 (_type_) none 25) - (eco-door-method-26 () none 26) ;; (dummy-26 (_type_) none 26) + (door-closed () _type_ :state 20) + (door-opening () _type_ :state 21) + (door-open () _type_ :state 22) + (door-closing () _type_ :state 23) + (lock-according-to-task! + "If the associated subtask is completed, lock the door if [[eco-door-flags:0]] is set + otherwise, lock it if [[eco-door-flags:0]] is set" + (_type_) none 24) + (eco-door-method-25 (_type_) none 25) ;; (TODO-RENAME-25 (_type_) none 25) + (stub + "@unused - Stub with no overrides" + (_type_) none 26) ) ) -|# -;; (define-extern plat-code function) ;; (function none :behavior baseplat) -;; (define-extern plat-trans function) ;; (function none :behavior baseplat) -;; (define-extern plat-post function) ;; (function none :behavior baseplat) -;; (define-extern plat-event function) ;; (function process int symbol event-message-block object :behavior baseplat) -;; (define-extern eco-door-event-handler function) ;; (function process int symbol event-message-block object :behavior eco-door) +(define-extern plat-code + "After calling [[transform-post]] for 2 consecutive frames, put the process to sleep if it's not bouncing + otherwise, continue bouncing...forever! + @see [[transform-post]]" + (function none :behavior base-plat)) +(define-extern plat-trans + "If the platform is `bouncing`, move the platform accordingly with the [[smush-control]] + - If the amplitude of the `smush` has hit `0.0` then stop bouncing + + If we aren't bouncing however, TODO - CSHAPE" + (function none :behavior base-plat)) +(define-extern plat-post (function none :behavior base-plat)) +(define-extern plat-event + "Handles platform related events. Presently all this does is: + - if `event-type` is [['bonk]], then call [[base-plat:29]]" + (function process int symbol event-message-block object :behavior base-plat)) +(define-extern eco-door-event-handler + "If the `event-type` is `'trigger`, flip the `locked` flag on the door + and play the respective sound + + @unused - likely a leftover from Jak 1" + (function process int symbol event-message-block object :behavior eco-door)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; plat ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype plat (base-plat) - ((path-pos float :offset-assert 268) - (sound-id sound-id :offset-assert 272) ;; guessed by decompiler - (sync sync-eased :inline :offset-assert 276) ;; sync-info-eased :inline + ((path-pos float :offset-assert 272) + (sound-id sound-id :offset-assert 276) ;; guessed by decompiler + (sync sync-eased :inline :offset-assert 280) ;; sync-info-eased :inline ) :method-count-assert 37 :size-assert #x144 @@ -32596,69 +32724,101 @@ (:methods (plat-idle () _type_ :state 34) (plat-path-active () _type_ :state 35) - (plat-method-36 () none 36) + (plat-path-sync + "If the `sync` period is greater than `0` then transition the state to [[plat::35]] + otherwise, [[plat::34]] + + @see [[sync-eased]]" + (_type_) object 36) ) ) -|# -#| (deftype drop-plat (base-plat) - ((art-name basic :offset-assert 268) - (anim basic :offset-assert 272) - (break-anim-name basic :offset-assert 276) - (safe-time time-frame :offset-assert 284) - (hit-point vector :inline :offset-assert 300) + ((art-name string :offset-assert 272) + (anim spool-anim :offset-assert 276) + (break-anim-name string :offset-assert 280) + (safe-time time-frame :offset-assert 288) + (hit-point vector :inline :offset-assert 304) ) :method-count-assert 36 :size-assert #x140 :flag-assert #x2400c00140 (:methods (idle () _type_ :state 34) - (fall () _type_ :state 35) + (fall (symbol) _type_ :state 35) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; basebutton ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| +;; +++basebutton:button-status +(defenum button-status + :type uint16 + :bitfield #t + (pressed) + (button-status-1) + (button-status-2) + (button-status-3) + (button-status-4)) +;; ---basebutton:button-status + (deftype basebutton (process-focusable) - () + ( + (button-status button-status :offset-assert 204) + (notify-actor entity :offset-assert 208) + (actor-group (pointer actor-group) :offset-assert 212) + (actor-group-count int32 :offset-assert 216) + (timeout float :offset-assert 220) + (button-id int32 :offset-assert 224) + (event-going-down symbol :offset-assert 228) + (event-down symbol :offset-assert 232) + (event-going-up symbol :offset-assert 236) + (event-up symbol :offset-assert 240) + (anim-speed float :offset-assert 244) + (move-to-pos vector :inline :offset-assert 256) + (move-to-quat quaternion :inline :offset-assert 272) + ) :method-count-assert 39 :size-assert #x120 :flag-assert #x2700a00120 - ;; Failed to read fields. (:methods (down-idle () _type_ :state 27) ;; (TODO-RENAME-27 (_type_) collide-shape-moving 27) (going-down () _type_ :state 28) ;; (arm-trigger-event! (_type_) symbol 28) (going-up () _type_ :state 29) ;; (TODO-RENAME-29 (_type_ symbol entity) none 29) (up-idle () _type_ :state 30) ;; (move-to-vec-or-quat! (_type_ vector quaternion) quaternion 30) - (basebutton-method-31 () none 31) ;; (press! (_type_ symbol) int 31) - (basebutton-method-32 () none 32) - (basebutton-method-33 () none 33) - (basebutton-method-34 () none 34) - (basebutton-method-35 () none 35) - (basebutton-method-36 () none 36) - (basebutton-method-37 () none 37) - (basebutton-method-38 () none 38) + (reset! (_type_) none 31) ;; (press! (_type_ symbol) int 31) + (idle-state-transition + "If `button-status` has [[button-status:0]] set, transition to [[basebutton::27]] otherwise, [[basebutton::30]]" + (_type_) object 32) + (basebutton-method-33 "TODO - joint stuff" (_type_) none 33) + (basebutton-method-34 "TODO - collision stuff" (_type_) none 34) + (prepare-trigger-event! + "Sets `event-going-down` to `'trigger`" + (_type_) none 35) + (send-event! + "Prepares an [[event-message-block]] using the provided type to send an event to: + - the `notify-actor` + - every [[entity-actor]] in the `actor-group` array + @see [[entity-actor]]" + (_type_ symbol) none :behavior basebutton 36) + (move-to! (_type_ vector quaternion) none 37) + (press! (_type_ symbol) entity-perm-status 38) ) ) -|# -;; (define-extern basebutton-init-by-other function) ;; (function entity-actor vector quaternion entity-actor symbol float none :behavior basebutton) +(define-extern basebutton-init-by-other (function entity-actor vector quaternion entity-actor symbol float none :behavior basebutton)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; bouncer ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype bouncer (process-drawable) - ((spring-height meters :offset-assert 196) - (smush float :offset-assert 200) - (mods basic :offset-assert 204) + ((spring-height meters :offset-assert 200) + (smush float :offset-assert 204) + (mods basic :offset-assert 208) ) :method-count-assert 25 :size-assert #xd4 @@ -32667,18 +32827,15 @@ (idle () _type_ :state 20) (fire () _type_ :state 21) (smush () _type_ :state 22) - (bouncer-method-23 () none 23) - (bouncer-method-24 () none 24) + (init-skeleton! (_type_) none 23) + (bouncer-method-24 "TODO - collision stuff" (_type_) none 24) ) ) -|# - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; conveyor ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype conveyor-section (structure) ((start vector :inline :offset-assert 0) (trailing plane :inline :offset-assert 16) @@ -32689,48 +32846,54 @@ :size-assert #x40 :flag-assert #x900000040 ) -|# -#| (deftype conveyor-section-array (inline-array-class) - ((length int32 :offset-assert 4) - (allocated-length int32 :offset-assert 8) - (data UNKNOWN :dynamic :offset-assert 16) - ) + ((data conveyor-section :dynamic :inline :offset-assert 16)) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 ) -|# -#| (deftype conveyor (process-drawable) - ((speed float :offset-assert 196) - (belt-radius float :offset-assert 200) - (pull-y-threshold float :offset-assert 204) - (speed-mult-array uint32 :offset-assert 208) - (speed-mult-array-len int8 :offset-assert 212) - (sections basic :offset-assert 216) - (leading plane :inline :offset-assert 220) - (collide-bounds sphere :inline :offset-assert 236) + ((speed float :offset-assert 200) + (belt-radius float :offset-assert 204) + (pull-y-threshold float :offset-assert 208) + (speed-mult-array (array float) :offset-assert 212) + (speed-mult-array-len int8 :offset-assert 216) + (sections conveyor-section-array :offset-assert 220) + (leading plane :inline :offset-assert 224) + (collide-bounds sphere :inline :offset-assert 240) ) :method-count-assert 28 :size-assert #x100 :flag-assert #x1c00800100 (:methods (idle () _type_ :state 20) - (conveyor-method-21 () none 21) - (conveyor-method-22 () none 22) - (conveyor-method-23 () none 23) - (conveyor-method-24 () none 24) - (conveyor-method-25 () none 25) - (conveyor-method-26 () none 26) - (conveyor-method-27 () none 27) + (conveyor-method-21 + "TODO - quite dense, has to do with the conveyor sections and the path they are associated with" + (_type_) float 21) + (get-art-group + "@returns The respective [[art-group]] for the [[conveyor]]" + (_type_) art-group 22) + (reset-root! + "Re-initializes the `root` [[trsqv]]" + (_type_) none 23) + (init! + "Initializes defaults for things like the `speed` and `belt-radius`" + (_type_) none 24) + (set-and-get-ambient-sound! + "So long as [[actor-option::16]] is not set, fetch the [[ambient-sound]] for the [[conveyor]] + and return it as well. Otherwise, set it to `0`" + (_type_) ambient-sound 25) + (conveyor-method-26 + "TODO - conveyor section related, perhaps related to moving the process along the belt?" + (_type_ process-focusable) symbol :behavior conveyor 26) + (conveyor-method-27 + "TODO - collision related, has some dead code as well (previous iteration?)" + (_type_) symbol 27) ) ) -|# -#| (deftype strip-conveyor (conveyor) () :method-count-assert 28 @@ -32739,9 +32902,7 @@ (:methods ) ) -|# -#| (deftype lgconveyor (conveyor) () :method-count-assert 28 @@ -32750,28 +32911,39 @@ (:methods ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; elevator ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| +;; +++elevator-flags +(defenum elevator-flags + :type uint64 + :bitfield #t + (elevator-flags-0) + (elevator-flags-1) + (elevator-flags-2) + (elevator-flags-3) + (elevator-flags-4) + (prevent-jump) + (elevator-flags-6) + (elevator-flags-7) + ) +;; ---elevator-flags + (deftype elevator-params (structure) ((xz-threshold float :offset-assert 0) (y-threshold float :offset-assert 4) (start-pos float :offset-assert 8) (move-rate float :offset-assert 12) - (flags uint64 :offset-assert 16) + (flags elevator-flags :offset-assert 16) ) :method-count-assert 9 :size-assert #x18 :flag-assert #x900000018 ) -|# -#| (deftype path-step (structure) ((next-pos float :offset-assert 0) (dist float :offset-assert 4) @@ -32780,63 +32952,99 @@ :size-assert #x8 :flag-assert #x900000008 ) -|# -#| (deftype path-step-inline-array (inline-array-class) - ((length int32 :offset-assert 4) - (allocated-length int32 :offset-assert 8) - (data UNKNOWN :dynamic :offset-assert 16) - ) + ((data path-step :dynamic :inline :offset-assert 16)) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 ) -|# -#| +;; +++elevator:elevator-status +(defenum elevator-status + :type uint64 + :bitfield #t + (elevator-status-0) + (elevator-status-1) + (moving) + ) +;; ---elevator:elevator-status + (deftype elevator (base-plat) - ((params elevator-params :inline :offset-assert 268) - (path-seq basic :offset-assert 292) - (path-dest float :offset-assert 296) - (bottom-top UNKNOWN 2 :offset-assert 300) - (move-pos UNKNOWN 2 :offset-assert 308) - (move-dist float :offset-assert 316) - (path-pos float :offset-assert 320) - (path-eased-pos float :offset-assert 324) - (ride-timer uint64 :offset-assert 332) - (sticky-player-last-ride-time time-frame :offset-assert 340) - (elevator-status uint64 :offset-assert 348) - (on-activate basic :offset-assert 356) - (on-deactivate basic :offset-assert 360) + ((params elevator-params :inline :offset-assert 272) + (path-seq path-step-inline-array :offset-assert 296) + (path-dest float :offset-assert 300) + (bottom-top float 2 :offset-assert 304) + (move-pos float 2 :offset-assert 312) + (move-dist float :offset-assert 320) + (path-pos float :offset-assert 324) + (path-eased-pos float :offset-assert 328) + (ride-timer uint64 :offset-assert 336) + (sticky-player-last-ride-time time-frame :offset-assert 344) + (elevator-status elevator-status :offset-assert 352) + (on-activate basic :offset-assert 360) + (on-deactivate basic :offset-assert 364) ) :method-count-assert 49 :size-assert #x170 :flag-assert #x3100f00170 - ;; field on-activate uses ~A with a signed load field on-deactivate uses ~A with a signed load (:methods (dormant () _type_ :state 34) (waiting () _type_ :state 35) (running () _type_ :state 36) (arrived () _type_ :state 37) - (elevator-method-38 () none 38) - (elevator-method-39 () none 39) - (elevator-method-40 () none 40) - (elevator-method-41 () none 41) - (elevator-method-42 () none 42) - (elevator-method-43 () none 43) - (elevator-method-44 () none 44) - (elevator-method-45 () none 45) - (elevator-method-46 () none 46) - (elevator-method-47 () none 47) - (elevator-method-48 () none 48) + (elevator-method-38 (_type_) none 38) + (calc-dist-between-points! + "Calculates the distance between two points in the elevator's path. + + @param path-point-x The index of the first point in the distance calculation, and where `next-pos` and `dist` are stored in the `path-seq` array + @param path-point-y The second point in the distance calculation" + (_type_ int int) none 39) + (elevator-method-40 + "TODO - need to figure out some flags to be confident about this" + (_type_) object 40) + (init-defaults! + "Initializes default settings related to the [[elevator]]: + - `elevator-xz-threshold` + - `elevator-y-threshold` + - `elevator-start-pos` + - `elevator-move-rate` + - `elevator-flags`" + (_type_) none 41) + (clear-ambient-sound! + "Might be a virtual function, but clears the object's [[ambient-sound]]" + (_type_) none 42) + (elevator-method-43 (_type_ vector float float) symbol 43) + (elevator-method-44 (_type_) symbol 44) + (elevator-method-45 + "@returns Stub, or always returns [[#t]]" + (_type_) symbol 45) + (move-to-next-point! + "If the [[*target*]] is in a valid state and there is a point to transition to in the elevator's path + do so. + @see [[elevator::47]]" + (_type_) none 46) + (find-closest-point-in-path! + "Finds and sets the provided [[path-step]]'s `next-pos` field to the vertex index in the path which is closest to + the provided [[vector]] + + @param vec The point at which distance calculations are based off + @param! next-step If a point is found, `next-pos` will be set to the correct point + @param arg2 TODO + @param arg3 TODO + @returns [[#t]] if a point in the path was found" + (_type_ vector path-step symbol symbol) symbol 47) + (elevator-method-48 "TODO - collision related" (_type_) none 48) ) ) -|# -;; (define-extern ease-value-in-out function) -;; (define-extern elevator-event function) -;; (define-extern move-post function) +(define-extern ease-value-in-out + "TODO - the math in this function is full of duplication and isn't totally clear + but if the name is to be believed, it's to slow a values grow at the beginning and end of it's range + which is obviously useful for an elevator." + (function float float float)) +(define-extern elevator-event (function process int symbol event-message-block object :behavior elevator)) +(define-extern move-post (function none :behavior elevator)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; rigid-body ;; @@ -32980,7 +33188,6 @@ ) |# -#| (deftype joint-exploder-static-joint-params (structure) ((joint-index int16 :offset-assert 0) (parent-joint-index int16 :offset-assert 2) @@ -32989,9 +33196,7 @@ :size-assert #x4 :flag-assert #x900000004 ) -|# -#| (deftype joint-exploder-static-params (basic) ((joints (array joint-exploder-static-joint-params) :offset-assert 4) ;; guessed by decompiler (collide-spec uint32 :offset-assert 8) @@ -33001,7 +33206,6 @@ :size-assert #x10 :flag-assert #x900000010 ) -|# #| (deftype joint-exploder-joint (structure) @@ -33082,9 +33286,8 @@ ;; simple-focus ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype simple-focus (process-focusable) - ((first-time? basic :offset-assert 200) + ((first-time? symbol :offset-assert 204) ) :method-count-assert 28 :size-assert #xd0 @@ -33093,18 +33296,19 @@ (idle () _type_ :state 27) ) ) -|# -;; (define-extern simple-focus-init-by-other function) +(define-extern simple-focus-init-by-other + "Initializes the new [[simple-focus]]. `first-time?` will be set to [[#t]]" + (function none :behavior simple-focus)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; simple-nav-sphere ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype simple-nav-sphere (process-drawable) - ((first-time? basic :offset-assert 196) - (track-joint int32 :offset-assert 200) + ((root-override collide-shape :offset 128 :score 999) + (first-time? symbol :offset-assert 200) + (track-joint int32 :offset-assert 204) ) :method-count-assert 22 :size-assert #xd0 @@ -33114,10 +33318,9 @@ (active () _type_ :state 21) ) ) -|# -;; (define-extern simple-nav-sphere-event-handler function) -;; (define-extern simple-nav-sphere-init-by-other function) +(define-extern simple-nav-sphere-event-handler (function process int symbol event-message-block none :behavior simple-nav-sphere)) +(define-extern simple-nav-sphere-init-by-other (function float vector nav-mesh int none :behavior simple-nav-sphere)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; process-taskable ;; @@ -33721,10 +33924,9 @@ ;; elec-gate ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype elec-gate-params (structure) - ((bolt-spec basic :offset-assert 0) - (ring-spec basic :offset-assert 4) + ((bolt-spec lightning-spec :offset-assert 0) + (ring-spec lightning-spec :offset-assert 4) (ring-radius-min float :offset-assert 8) (ring-radius-max float :offset-assert 12) (speed-mult float :offset-assert 16) @@ -33733,12 +33935,10 @@ :size-assert #x14 :flag-assert #x900000014 ) -|# -#| (deftype elec-gate-bolt (structure) - ((ring UNKNOWN 2 :offset-assert 0) - (bolt basic :offset-assert 8) + ((ring lightning-control 2 :offset-assert 0) ;; guess + (bolt lightning-control :offset-assert 8) (ring-radius float :offset-assert 12) (pos float :offset-assert 16) ) @@ -33746,9 +33946,7 @@ :size-assert #x14 :flag-assert #x900000014 ) -|# -#| (deftype elec-wall (structure) ((pos vector :inline :offset-assert 0) (dir vector :inline :offset-assert 16) @@ -33757,49 +33955,61 @@ :size-assert #x20 :flag-assert #x900000020 ) -|# -#| (deftype elec-gate (process-drawable) - ((params elec-gate-params :offset-assert 196) - (path-l basic :offset-assert 148) - (path-r basic :offset-assert 200) - (l-bolt UNKNOWN 5 :offset-assert 204) - (part-on basic :offset-assert 164) - (part-off basic :offset-assert 364) - (part-spawner-left basic :offset-assert 368) - (part-spawner-right basic :offset-assert 372) - (on-start basic :offset-assert 376) - (on-stop basic :offset-assert 380) - (dividing-wall elec-wall :inline :offset-assert 396) - (plane UNKNOWN 2 :offset-assert 428) - (wall-y float :offset-assert 492) - (wall-xz float :offset-assert 496) - (lightning-quality float :offset-assert 500) - (quality-enabled? basic :offset-assert 504) + ((params elec-gate-params :offset-assert 200) + (path-l path-control :offset 152) + (path-r path-control :offset-assert 204) + (l-bolt elec-gate-bolt 5 :inline :offset-assert 208) + (part-on sparticle-launch-control :offset 168) + (part-off sparticle-launch-control :offset-assert 368) + (part-spawner-left part-spawner :offset-assert 372) + (part-spawner-right part-spawner :offset-assert 376) + (on-start basic :offset-assert 380) + (on-stop basic :offset-assert 384) + (dividing-wall elec-wall :inline :offset-assert 400) + (plane elec-wall 2 :inline :offset-assert 432) + (wall-y float :offset-assert 496) + (wall-xz float :offset-assert 500) + (lightning-quality float :offset-assert 504) + (quality-enabled? symbol :offset-assert 508) ) :method-count-assert 30 :size-assert #x200 :flag-assert #x1e01800200 - ;; field on-start uses ~A with a signed load field on-stop uses ~A with a signed load (:methods (idle () _type_ :state 20) (active () _type_ :state 21) (shutdown () _type_ :state 22) - (elec-gate-method-23 () none 23) - (elec-gate-method-24 () none 24) - (elec-gate-method-25 () none 25) - (elec-gate-method-26 () none 26) - (elec-gate-method-27 () none 27) - (elec-gate-method-28 () none 28) - (elec-gate-method-29 () none 29) + (get-params + "@returns [[*default-elec-gate-params*]] by default" + (_type_) elec-gate-params 23) + (elec-gate-method-24 "virtual" (_type_) none 24) + (set-palette! + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (_type_) none 25) + (set-state! + "If either [[actor-option::17]] is set on the [[elec-gate]] or the related subtask is completed + make the gate `idle`. + + Otherwise, the gate will be `active`." + (_type_) none 26) + (spawn-particles + "TODO - Calls [[sparticle-launch-control::11]] on `part-spawner-left` and `part-spawner-right` if they are defined" + (_type_ sparticle-launch-control) none 27) + (set-elec-scale-if-close! + "If [[target]]'s position is within `80` [[meters]], set the scale to the value provided + @see [[elec-gate::29]]" (_type_ float) none 28) + (set-elec-scale! + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (_type_ float) none 29) ) ) -|# -#| (deftype fort-elec-gate (elec-gate) - ((palette-id int32 :offset-assert 508) + ((palette-id int32 :offset-assert 512) ) :method-count-assert 30 :size-assert #x204 @@ -33807,57 +34017,40 @@ (:methods ) ) -|# -#| (deftype drill-elec-gate (elec-gate) - ((palette-id int32 :offset-assert 508) + ((palette-id int32 :offset-assert 512) ) :method-count-assert 30 :size-assert #x204 :flag-assert #x1e01900204 - (:methods - ) - ) -|# + (:methods)) -#| (deftype caspad-elec-gate (elec-gate) () :method-count-assert 30 :size-assert #x200 :flag-assert #x1e01800200 - (:methods - ) - ) -|# + (:methods)) -#| (deftype castle-elec-gate (elec-gate) () :method-count-assert 30 :size-assert #x200 :flag-assert #x1e01800200 - (:methods - ) - ) -|# + (:methods)) -#| (deftype palroof-elec-gate (elec-gate) - ((palette-id int32 :offset-assert 508) + ((palette-id int32 :offset-assert 512) ) :method-count-assert 30 :size-assert #x204 :flag-assert #x1e01900204 - (:methods - ) - ) -|# + (:methods)) -;; (define-extern *default-elec-gate-params* object) -;; (define-extern elec-gate-post function) -;; (define-extern *caspad-elec-gate-params* object) +(define-extern *default-elec-gate-params* elec-gate-params) +(define-extern elec-gate-post (function none :behavior elec-gate)) +(define-extern *caspad-elec-gate-params* elec-gate-params) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; cty-guard-turret-button ;; @@ -41029,9 +41222,8 @@ ;; sewer-obs2 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype sew-elevator (elevator) - ((sound-id uint32 :offset-assert 364) + ((sound-id sound-id :offset-assert 368) ) :method-count-assert 50 :size-assert #x174 @@ -41040,7 +41232,6 @@ (sew-elevator-method-49 () none 49) ) ) -|# #| (deftype sew-valve (process-drawable) @@ -48456,25 +48647,25 @@ (declare-type nav-node structure) (deftype nav-branch (structure) - ((node nav-node 2 :offset-assert 0) - (src-node nav-node :offset 0) - (dest-node nav-node :offset 4) - (temp-dest-node-id int32 :offset 4) - (speed-limit uint8 :offset-assert 8) - (density uint8 :offset-assert 9) - (clock-type uint8 :offset-assert 10) - (clock-mask uint8 :offset-assert 11) - (max-user-count uint8 :offset-assert 12) - (user-count uint8 :offset-assert 13) - (width uint8 :offset-assert 14) - (flags uint8 :offset-assert 15) + ((node int32 2 :offset-assert 0) + (src-node nav-node :offset 0) + (dest-node nav-node :offset 4) + (temp-dest-node-id int32 :offset 4) + (speed-limit uint8 :offset-assert 8) + (density uint8 :offset-assert 9) + (clock-type uint8 :offset-assert 10) + (clock-mask uint8 :offset-assert 11) + (max-user-count uint8 :offset-assert 12) + (user-count uint8 :offset-assert 13) + (width uint8 :offset-assert 14) + (flags uint8 :offset-assert 15) ) :method-count-assert 21 :size-assert #x10 :flag-assert #x1500000010 (:methods - (nav-branch-method-9 () none 9) - (nav-branch-method-10 () none 10) + (nav-branch-method-9 (_type_) none 9) + (nav-branch-method-10 (_type_ object int) none 10) (nav-branch-method-11 "TODO @returns `density * 0.0078125` - is this some kind of trick?" @@ -48489,11 +48680,11 @@ (_type_) float 13) (user-limit-reached? (_type_) symbol 14) (nav-branch-method-15 "TODO - checks that `dest-node`'s `id` isn't #FFFF" (_type_) symbol 15) - (nav-branch-method-16 () none 16) - (nav-branch-method-17 () none 17) - (nav-branch-method-18 () none 18) - (nav-branch-method-19 () none 19) - (nav-branch-method-20 () none 20) + (nav-branch-method-16 (_type_ float) none 16) + (nav-branch-method-17 (_type_ float) none 17) + (nav-branch-method-18 (_type_ float) none 18) + (nav-branch-method-19 (_type_ nav-node) none 19) + (nav-branch-method-20 (_type_ nav-node) none 20) ) ) @@ -48510,35 +48701,34 @@ ;; ---nav-graph-h:nav-node-flag-byte (deftype nav-node (structure) - ( - (data uint32 8 :offset-assert 0 :score -999) - (position vector :inline :offset 0) - (pos-x float :offset 0) - (pos-y float :offset 4) - (pos-z float :offset 8) - (angle uint16 :offset 12) - (id uint16 :offset 14) - (radius uint8 :offset 16) - (branch-count int8 :offset 17) - (flags nav-node-flag-byte :offset 18) - (pad0 int8 1 :offset 19) - (branch-array uint32 :offset 20) - (nav-mesh-id uint32 :offset 24) - (level level :offset 28) - ) + ((data uint32 8 :offset-assert 0 :score -999) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle uint16 :offset 12) + (id uint16 :offset 14) + (radius uint8 :offset 16) + (branch-count int8 :offset 17) + (flags nav-node-flag-byte :offset 18) + (pad0 int8 1 :offset 19) + (branch-array (inline-array nav-branch) :offset 20) + (nav-mesh-id uint32 :offset 24) + (level symbol :offset 28) + ) :method-count-assert 22 :size-assert #x20 :flag-assert #x1600000020 (:methods - (nav-node-method-9 () none 9) - (nav-node-method-10 () none 10) - (nav-node-method-11 () none 11) - (nav-node-method-12 () none 12) - (nav-node-method-13 () none 13) - (nav-node-method-14 () none 14) - (nav-node-method-15 () none 15) - (nav-node-method-16 () none 16) - (nav-node-method-17 () none 17) + (nav-node-method-9 (_type_) none 9) + (nav-node-method-10 (_type_ symbol string) none 10) + (nav-node-method-11 (_type_ int) none 11) + (nav-node-method-12 (_type_ vector nav-node) none 12) + (nav-node-method-13 (_type_ vector) none 13) + (nav-node-method-14 (_type_ nav-node) none 14) + (nav-node-method-15 (_type_ uint) none 15) + (nav-node-method-16 (_type_ float) none 16) + (nav-node-method-17 (_type_ float) none 17) (get-position "@param! ret The [[vector]] that is modified to hold the result @returns the `position` [[vector]] with a `w` component of `1.0`" @@ -48570,63 +48760,64 @@ ) (deftype nav-graph (basic) - ((node-count int16 :offset-assert 4) - (branch-count int16 :offset-assert 6) - (node-array (inline-array nav-node) :offset-assert 8) - (branch-array uint32 :offset-assert 12) - (link-count int16 :offset-assert 16) - (pad2 uint16 :offset-assert 18) - (link-array uint32 :offset-assert 20) - (first-node int16 :offset-assert 24) - (pad0 uint16 :offset-assert 26) - (patched basic :offset-assert 28) - (id uint32 :offset-assert 32) - (pad1 uint32 6 :offset-assert 36) + ((node-count int16 :offset-assert 4) + (branch-count int16 :offset-assert 6) + (node-array (inline-array nav-node) :offset-assert 8) + (branch-array (inline-array nav-branch) :offset-assert 12) + (link-count int16 :offset-assert 16) + (pad2 uint16 :offset-assert 18) + (link-array (inline-array nav-graph-link) :offset-assert 20) + (first-node int16 :offset-assert 24) + (pad0 uint16 :offset-assert 26) + (patched symbol :offset-assert 28) + (id uint32 :offset-assert 32) + (pad1 uint32 6 :offset-assert 36) ) :method-count-assert 45 :size-assert #x3c :flag-assert #x2d0000003c (:methods - (nav-graph-method-9 () none 9) - (nav-graph-method-10 () none 10) - (nav-graph-method-11 () none 11) - (nav-graph-method-12 () none 12) - (nav-graph-method-13 () none 13) - (nav-graph-method-14 () none 14) - (nav-graph-method-15 () none 15) - (nav-graph-method-16 () none 16) - (nav-graph-method-17 () none 17) - (nav-graph-method-18 () none 18) - (nav-graph-method-19 () none 19) - (nav-graph-method-20 () none 20) - (nav-graph-method-21 () none 21) - (nav-graph-method-22 () none 22) - (nav-graph-method-23 () none 23) - (nav-graph-method-24 () none 24) - (nav-graph-method-25 () none 25) - (nav-graph-method-26 () none 26) - (nav-graph-method-27 () none 27) - (nav-graph-method-28 () none 28) - (nav-graph-method-29 () none 29) - (nav-graph-method-30 () none 30) - (nav-graph-method-31 () none 31) - (nav-graph-method-32 () none 32) - (nav-graph-method-33 () none 33) - (nav-graph-method-34 () none 34) - (nav-graph-method-35 () none 35) - (nav-graph-method-36 () none 36) - (nav-graph-method-37 () none 37) + (new (symbol type int int int uint) _type_ 0) + (nav-graph-method-9 (_type_) none 9) + (nav-graph-method-10 (_type_ vector int) none 10) + (nav-graph-method-11 (_type_) none 11) + (nav-graph-method-12 (_type_) none 12) + (nav-graph-method-13 (_type_ int int) none 13) + (nav-graph-method-14 (_type_ int int) none 14) + (nav-graph-method-15 (_type_) none 15) + (nav-graph-method-16 (_type_ int) nav-node 16) + (nav-graph-method-17 (_type_ nav-node) none 17) + (nav-graph-method-18 (_type_ nav-node int) none 18) + (nav-graph-method-19 (_type_ int int int int int int) none 19) + (nav-graph-method-20 (_type_ int int) none 20) + (nav-graph-method-21 (_type_) none 21) + (nav-graph-method-22 (_type_ int int) none 22) + (nav-graph-method-23 (_type_ int int) none 23) + (nav-graph-method-24 (_type_ int int) none 24) + (nav-graph-method-25 (_type_ symbol symbol) none 25) + (nav-graph-method-26 (_type_ symbol symbol) none 26) + (nav-graph-method-27 (_type_) none 27) + (nav-graph-method-28 (_type_) none 28) + (nav-graph-method-29 (_type_ symbol) none 29) + (nav-graph-method-30 (_type_ uint) none 30) + (nav-graph-method-31 (_type_ float) none 31) + (nav-graph-method-32 (_type_ float) none 32) + (nav-graph-method-33 (_type_ float) none 33) + (nav-graph-method-34 (_type_ float) none 34) + (nav-graph-method-35 (_type_ int) none 35) + (nav-graph-method-36 (_type_ int) none 36) + (nav-graph-method-37 (_type_ vector) none 37) (nav-graph-method-38 () none 38) - (nav-graph-method-39 () none 39) - (nav-graph-method-40 () none 40) + (nav-graph-method-39 (_type_) none 39) + (nav-graph-method-40 (_type_ int) int 40) (node-at-idx "Get the `nav-node` at a given position. @param idx The position in the `node-array` to return @returns the [[nav-node]] if it can be found, otherwise return [[#f]]" (_type_ int) nav-node 41) - (nav-graph-method-42 () none 42) - (nav-graph-method-43 () none 43) - (nav-graph-method-44 () none 44) + (nav-graph-method-42 (_type_) none 42) + (nav-graph-method-43 (_type_ nav-graph-link string) none 43) + (from-editor () none 44) ) ) @@ -48635,11 +48826,10 @@ ;; traffic-engine-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype nav-segment (structure) - ((vertex UNKNOWN 2 :offset-assert 0) - (length float :offset-assert 12) - (spawn-spacing float :offset-assert 28) + ((vertex vector 2 :inline :offset-assert 0) + (length float :offset 12) + (spawn-spacing float :offset 28) (branch nav-branch :offset-assert 32) (nav-mesh-id uint32 :offset-assert 36) (id uint16 :offset-assert 40) @@ -48652,36 +48842,49 @@ :size-assert #x30 :flag-assert #x900000030 ) -|# -#| +(defenum vis-cell-flag + :type uint8 + :bitfield #t + (active-vehicle) + (active-pedestrian) + (suppress) + ) + (deftype vis-cell (structure) - () + ( + (sphere sphere :inline :offset-assert 0) + (segment-array uint32 :offset-assert 16) + (vis-id uint16 :offset-assert 20) + (id uint16 :offset-assert 22) + (incoming-segment-count int8 :offset-assert 24) + (segment-count int8 :offset-assert 25) + (flags vis-cell-flag :offset-assert 26) + (alloc-segment-count int8 :offset 26) + (prev-flags vis-cell-flag :offset-assert 27) + (pad0 uint32 :offset 28) + ) :method-count-assert 11 :size-assert #x20 :flag-assert #xb00000020 - ;; Failed to read fields. (:methods (vis-cell-method-9 () none 9) (vis-cell-method-10 () none 10) ) ) -|# -#| (deftype vis-grid-pos (structure) - ((data UNKNOWN 3 :offset-assert 0) - (x int8 :offset-assert 0) - (y int8 :offset-assert 1) - (z int8 :offset-assert 2) + ((data int8 3 :offset-assert 0 :score -999) + (x int8 :offset 0) + (y int8 :offset 1) + (z int8 :offset 2) ) + :pack-me :method-count-assert 9 :size-assert #x3 :flag-assert #x900000003 ) -|# -#| (deftype vis-grid-box (structure) ((min vis-grid-pos :inline :offset-assert 0) (max vis-grid-pos :inline :offset-assert 3) @@ -48690,9 +48893,7 @@ :size-assert #x6 :flag-assert #x900000006 ) -|# -#| (deftype vis-ray (structure) ((pos vector :inline :offset-assert 0) (dir vector :inline :offset-assert 16) @@ -48706,13 +48907,11 @@ :size-assert #x4c :flag-assert #x90000004c ) -|# -#| (deftype grid-info (structure) - ((axis-scale UNKNOWN 3 :offset-assert 0) - (dimension-array UNKNOWN 3 :offset-assert 12) - (pad0 UNKNOWN 1 :offset-assert 15) + ((axis-scale float 3 :offset-assert 0) + (dimension-array uint8 3 :offset-assert 12) + (pad0 uint8 1 :offset-assert 15) (box bounding-box :inline :offset-assert 16) (cell-size vector :inline :offset-assert 48) ) @@ -48727,9 +48926,7 @@ (grid-info-method-13 () none 13) ) ) -|# -#| (deftype city-level-info (structure) ((grid-info grid-info :inline :offset-assert 0) (cell-array uint32 :offset-assert 64) @@ -48738,7 +48935,7 @@ (segment-array uint32 :offset-assert 72) (nav-graph basic :offset-assert 76) (camera-ceiling meters :offset-assert 80) - (pad-array UNKNOWN 56 :offset-assert 84) + (pad-array int8 56 :offset-assert 84) ) :method-count-assert 19 :size-assert #x8c @@ -48756,15 +48953,13 @@ (city-level-info-method-18 () none 18) ) ) -|# -#| (deftype traffic-level-data (structure) ((city-info city-level-info :offset-assert 0) (active-cell-count uint8 :offset-assert 4) (newly-active-cell-count uint8 :offset-assert 5) - (active-cell-list UNKNOWN 255 :offset-assert 8) - (newly-active-cell-list UNKNOWN 255 :offset-assert 1028) + (active-cell-list vis-cell 255 :offset-assert 8) + (newly-active-cell-list vis-cell 255 :offset-assert 1028) (active-cell-box bounding-box :inline :offset-assert 2048) ) :method-count-assert 15 @@ -48779,22 +48974,18 @@ (traffic-level-data-method-14 () none 14) ) ) -|# -#| (deftype traffic-suppression-box (structure) - ((data UNKNOWN 32 :offset-assert 0) - (bbox bounding-box :inline :offset-assert 0) - (flags uint8 :offset-assert 12) - (duration uint32 :offset-assert 28) + ((data uint8 32 :offset-assert 0 :score -999) + (bbox bounding-box :inline :offset 0) + (flags uint8 :offset 12) + (duration uint32 :offset 28) ) :method-count-assert 9 :size-assert #x20 :flag-assert #x900000020 ) -|# -#| (deftype traffic-guard-type-info (structure) ((object-type uint8 :offset-assert 0) (max-target-count int8 :offset-assert 1) @@ -48807,9 +48998,7 @@ :size-assert #x6 :flag-assert #x900000006 ) -|# -#| (deftype traffic-guard-type-settings (structure) ((target-count int8 :offset-assert 0) (inaccuracy float :offset-assert 4) @@ -48823,48 +49012,82 @@ :size-assert #x10 :flag-assert #x900000010 ) -|# -#| (deftype traffic-alert-state-settings (structure) - ((guard-settings-array UNKNOWN 6 :offset-assert 0) - (ped-tazer traffic-guard-type-settings :inline :offset-assert 0) - (ped-rifle traffic-guard-type-settings :inline :offset-assert 16) - (ped-grenade traffic-guard-type-settings :inline :offset-assert 32) - (ped-roboguard traffic-guard-type-settings :inline :offset-assert 48) - (bike-turret traffic-guard-type-settings :inline :offset-assert 64) - (hellcat-turret traffic-guard-type-settings :inline :offset-assert 80) + ((guard-settings-array traffic-guard-type-settings 6 :offset-assert 0 :score -999) + (ped-tazer traffic-guard-type-settings :inline :offset 0) + (ped-rifle traffic-guard-type-settings :inline :offset 16) + (ped-grenade traffic-guard-type-settings :inline :offset 32) + (ped-roboguard traffic-guard-type-settings :inline :offset 48) + (bike-turret traffic-guard-type-settings :inline :offset 64) + (hellcat-turret traffic-guard-type-settings :inline :offset 80) ) :method-count-assert 9 :size-assert #x60 :flag-assert #x900000060 ) -|# -#| +(defenum traffic-target-flag + :type uint8 + :bitfield #t + (visible-now) + (visible-recently) + (visible-ever) + (updated) + (force-visible) + ) + (deftype traffic-target-status (structure) - () + ( + (flags traffic-target-flag :offset-assert 0) + (handle handle :offset-assert 8) + (last-seen-time time-frame :offset-assert 16) + (position vector :inline :offset-assert 32) + (velocity vector :inline :offset-assert 48) + (move-position vector :inline :offset-assert 64) + ) :method-count-assert 9 :size-assert #x50 :flag-assert #x900000050 - ;; Failed to read fields. ) -|# -#| +(defenum traffic-alert-flag + :type uint8 + :bitfield #t + (alert-ending) + (alarm-on) + (guard-multi-focus) + (sticky-guard-settings) + (disable-pursuit-control) + (target-jak) + ) + (deftype traffic-alert-state (structure) - () + ( + (flags traffic-alert-flag :offset-assert 0) + (level uint8 :offset-assert 1) + (max-level uint8 :offset-assert 2) + (guards-in-sight-of-target int8 :offset-assert 3) + (guard-aim-count int8 :offset-assert 4) + (guard-inaccuracy-factor float :offset-assert 8) + (guard-target-level float :offset-assert 12) + (duration uint32 :offset-assert 16) + (start-time time-frame :offset-assert 24) + (notify-time time-frame :offset-assert 32) + (alarm-sound-id uint32 :offset-assert 40) + (target-status-array traffic-target-status 3 :inline :offset-assert 48) + (settings traffic-alert-state-settings :inline :offset-assert 288) + (guard-type-info-array traffic-guard-type-info 6 :inline :offset-assert 384) + (guard-type-mask-from-object-type int32 126 :offset-assert 480) + ) :method-count-assert 10 :size-assert #x3d8 :flag-assert #xa000003d8 - ;; Failed to read fields. (:methods (traffic-alert-state-method-9 () none 9) ) ) -|# -#| (deftype traffic-object-type-info (structure) ((flags uint8 :offset-assert 0) (target-count int8 :offset-assert 1) @@ -48883,13 +49106,11 @@ :size-assert #x14 :flag-assert #x900000014 ) -|# -#| (deftype traffic-suppressor (structure) ((flags uint8 :offset-assert 0) (bbox bounding-box :inline :offset-assert 16) - (array UNKNOWN 16 :offset-assert 48) + (array traffic-suppression-box 16 :inline :offset-assert 48) ) :method-count-assert 14 :size-assert #x230 @@ -48902,9 +49123,7 @@ (traffic-suppressor-method-13 () none 13) ) ) -|# -#| (deftype traffic-tracker (structure) ((traffic basic :offset-assert 0) (object-hash basic :offset-assert 4) @@ -48912,8 +49131,8 @@ (id uint8 :offset-assert 12) (active-object-count uint8 :offset-assert 13) (inactive-object-count int8 :offset-assert 14) - (active-object-list UNKNOWN 126 :offset-assert 16) - (active-object-type-list UNKNOWN 126 :offset-assert 1024) + (active-object-list int64 126 :offset-assert 16) + (active-object-type-list int8 126 :offset-assert 1024) ) :method-count-assert 27 :size-assert #x47e @@ -48939,9 +49158,7 @@ (traffic-tracker-method-26 () none 26) ) ) -|# -#| (deftype traffic-engine (basic) ((object-hash basic :offset-assert 4) (manager uint64 :offset-assert 8) @@ -48950,16 +49167,17 @@ (sync-mask-8 uint8 :offset-assert 21) (sync-mask-16 uint16 :offset-assert 22) (sync-mask-32 uint32 :offset-assert 24) - (sync-array UNKNOWN 4 :offset-assert 28) + (sync-array uint8 4 :offset-assert 28) (flags uint8 :offset-assert 32) (alert-state traffic-alert-state :inline :offset-assert 48) - (level-data-array UNKNOWN 2 :offset-assert 1040) - (object-type-info-array UNKNOWN 21 :offset-assert 5200) - (tracker-array UNKNOWN 2 :offset-assert 5872) - (inactive-object-array UNKNOWN 420 :offset-assert 8176) + (level-data-array traffic-level-data 2 :inline :offset-assert 1040) + (object-type-info-array traffic-object-type-info 21 :inline :offset-assert 5200) + (tracker-array traffic-tracker 2 :inline :offset-assert 5872) + (inactive-object-array uint64 420 :offset-assert 8176) (suppressor traffic-suppressor :inline :offset-assert 11536) (danger-sphere-count int8 :offset-assert 12096) - (danger-sphere-array UNKNOWN 4 :offset-assert 12112) + (pad int8 15 :offset-assert 12097) + (danger-sphere-array matrix 4 :inline :offset-assert 12112) ) :method-count-assert 74 :size-assert #x3050 @@ -49032,14 +49250,12 @@ (traffic-engine-method-73 () none 73) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; vehicle-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype vehicle-lookup-info (structure) ((turn-radius meters :offset-assert 0) (throttle-turning float :offset-assert 4) @@ -49049,9 +49265,7 @@ :size-assert #xc :flag-assert #x90000000c ) -|# -#| (deftype vehicle-control-point (structure) ((local-pos vector :inline :offset-assert 0) (normal vector :inline :offset-assert 16) @@ -49060,36 +49274,30 @@ :size-assert #x20 :flag-assert #x900000020 ) -|# -#| (deftype vehicle-section-info (structure) - ((damage-seg-array UNKNOWN 3 :offset-assert 0) + ((damage-seg-array uint64 3 :offset-assert 0) (damage-seg-count int8 :offset-assert 24) ) :method-count-assert 9 :size-assert #x19 :flag-assert #x900000019 ) -|# -#| (deftype vehicle-seat-info (structure) - ((data UNKNOWN 16 :offset-assert 0) - (position vector :inline :offset-assert 0) - (pos-x float :offset-assert 0) - (pos-y float :offset-assert 4) - (pos-z float :offset-assert 8) - (angle int16 :offset-assert 12) - (flags uint8 :offset-assert 14) + ((data uint8 16 :offset-assert 0 :score -999) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle int16 :offset 12) + (flags uint8 :offset 14) ) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 ) -|# -#| (deftype vehicle-explosion-info (joint-exploder-static-params) ((skel basic :offset-assert 16) (skel-name basic :offset-assert 20) @@ -49099,20 +49307,16 @@ :size-assert #x1c :flag-assert #x90000001c ) -|# -#| (deftype vehicle-grab-rail-info (structure) - ((local-pos UNKNOWN 2 :offset-assert 0) + ((local-pos vector 2 :inline :offset-assert 0) (normal vector :inline :offset-assert 32) ) :method-count-assert 9 :size-assert #x30 :flag-assert #x900000030 ) -|# -#| (deftype rigid-body-vehicle-constants (rigid-body-object-constants) ((flags uint32 :offset-assert 208) (object-type uint8 :offset-assert 212) @@ -49173,15 +49377,15 @@ (rider-stance uint8 :offset-assert 422) (grab-rail-count int8 :offset-assert 423) (grab-rail-array uint32 :offset-assert 424) - (seat-array UNKNOWN 4 :offset-assert 432) - (rider-hand-offset UNKNOWN 2 :offset-assert 496) - (section-array UNKNOWN 4 :offset-assert 528) - (section-bike-front vehicle-section-info :inline :offset-assert 528) - (section-bike-rear vehicle-section-info :inline :offset-assert 560) - (section-car-front-left vehicle-section-info :inline :offset-assert 528) - (section-car-rear-left vehicle-section-info :inline :offset-assert 560) - (section-car-front-right vehicle-section-info :inline :offset-assert 592) - (section-car-rear-right vehicle-section-info :inline :offset-assert 624) + (seat-array vehicle-seat-info 4 :inline :offset-assert 432) + (rider-hand-offset vector 2 :inline :offset-assert 496) + (section-array vehicle-section-info 4 :inline :offset-assert 528 :score -999) + (section-bike-front vehicle-section-info :inline :offset 528) + (section-bike-rear vehicle-section-info :inline :offset 560) + (section-car-front-left vehicle-section-info :inline :offset 528) + (section-car-rear-left vehicle-section-info :inline :offset 560) + (section-car-front-right vehicle-section-info :inline :offset 592) + (section-car-rear-right vehicle-section-info :inline :offset 624) (explosion basic :offset-assert 656) (engine-pitch-scale float :offset-assert 660) (engine-pitch-offset float :offset-assert 664) @@ -49198,22 +49402,23 @@ (taillight-count int8 :offset-assert 789) (thruster-flame-width meters :offset-assert 792) (thruster-flame-length meters :offset-assert 796) - (thruster-local-pos UNKNOWN 2 :offset-assert 800) - (exhaust-local-pos UNKNOWN 2 :offset-assert 832) - (exhaust-local-dir UNKNOWN 2 :offset-assert 864) - (smoke-local-pos UNKNOWN 2 :offset-assert 896) - (smoke-local-vel UNKNOWN 2 :offset-assert 928) - (headlight-local-pos UNKNOWN 3 :offset-assert 960) - (taillight-local-pos UNKNOWN 2 :offset-assert 1008) + (thruster-local-pos vector 2 :inline :offset-assert 800) + (exhaust-local-pos vector 2 :inline :offset-assert 832) + (exhaust-local-dir vector 2 :inline :offset-assert 864) + (smoke-local-pos vector 2 :inline :offset-assert 896) + (smoke-local-vel vector 2 :inline :offset-assert 928) + (headlight-local-pos vector 3 :inline :offset-assert 960) + (taillight-local-pos vector 2 :inline :offset-assert 1008) (lift-thruster-count int8 :offset-assert 1040) (roll-thruster-count int8 :offset-assert 1041) (steering-thruster-count int8 :offset-assert 1042) (stabilizer-count int8 :offset-assert 1043) (inv-lift-thruster-count float :offset-assert 1044) - (lift-thruster-array UNKNOWN 2 :offset-assert 1056) - (roll-thruster-array UNKNOWN 2 :offset-assert 1120) - (steering-thruster-array UNKNOWN 2 :offset-assert 1184) - (stabilizer-array UNKNOWN 6 :offset-assert 1248) + (pad int8 8 :offset-assert 1048) + (lift-thruster-array vector4w-2 2 :inline :offset-assert 1056) + (roll-thruster-array vector4w-2 2 :inline :offset-assert 1120) + (steering-thruster-array vector4w-2 2 :inline :offset-assert 1184) + (stabilizer-array vector4w-2 6 :inline :offset-assert 1248) (engine-thrust-local-pos vector :inline :offset-assert 1440) (brake-local-pos vector :inline :offset-assert 1456) (particle-system-2d basic :offset-assert 1472) @@ -49238,11 +49443,44 @@ (rigid-body-vehicle-constants-method-10 () none 10) ) ) -|# -#| +;; +++vehicle-h:vehicle-controller-flag +(defenum vehicle-controller-flag + :type uint32 + :bitfield #t + (debug) + (draw-marks) + (left-turn) + (on-straightaway) + (do-turn) + (blocking-dest-node) + (attached) + (off-path) + (ignore-others) + (direct-mode) + (recovery-mode) + (no-slowing-for-turns)) +;; ---vehicle-h:vehicle-controller-flag + (deftype vehicle-controller (structure) - () + ( + (flags vehicle-controller-flag :offset-assert 0) + (traffic symbol :offset-assert 4) + (branch nav-branch :offset-assert 8) + (target-speed-offset meters :offset-assert 12) + (target-speed meters :offset-assert 16) + (choose-branch-callback symbol :offset-assert 20) + (turn-accel meters :offset-assert 24) + (max-turn-speed meters :offset-assert 28) + (path-prev-point vector :inline :offset-assert 32) + (turn-enter-point vector :inline :offset-assert 48) + (turn-exit-point vector :inline :offset-assert 64) + (path-dest-point vector :inline :offset 64) + (turn-enter-dir vector :inline :offset-assert 80) + (turn-exit-dir vector :inline :offset-assert 96) + (dest-circle vector :inline :offset-assert 112) + (target-point vector :inline :offset-assert 128) + ) :method-count-assert 22 :size-assert #x90 :flag-assert #x1600000090 @@ -49263,9 +49501,7 @@ (vehicle-controller-method-21 () none 21) ) ) -|# -#| (deftype vehicle-section (structure) ((damage float :offset-assert 0) ) @@ -49273,15 +49509,80 @@ :size-assert #x4 :flag-assert #x900000004 ) -|# -#| (deftype vehicle (rigid-body-object) - () + ( + (pad uint32 4 :offset-assert 272) + (controls vehicle-controls :inline :offset-assert 288) + (prev-controls vehicle-controls :inline :offset-assert 304) + (up-dir vector :inline :offset-assert 320) + (jump-time float :offset-assert 336) + (jump-thrust float :offset-assert 340) + (engine-thrust float :offset-assert 344) + (engine-power-factor float :offset-assert 348) + (force-scale float :offset-assert 352) + (target-distance2 meters :offset-assert 356) + (pad0 uint32 :offset-assert 360) + (target-acceleration vector :inline :offset-assert 368) + (impact-pos vector :inline :offset-assert 384) + (lin-acceleration vector :inline :offset-assert 400) + (hit-points float :offset-assert 416) + (damage-factor float :offset-assert 420) + (crash-level int8 :offset-assert 424) + (force-level int8 :offset-assert 425) + (traffic-hash-id int8 :offset-assert 426) + (traffic-priority-id int8 :offset-assert 427) + (power-fluctuation-factor float :offset-assert 428) + (power-level float :offset-assert 432) + (flight-level-index int8 :offset-assert 436) + (flight-level-index-prev int8 :offset-assert 437) + (overlap-player-counter uint8 :offset-assert 438) + (physics-counter uint8 :offset-assert 439) + (flight-level float :offset-assert 440) + (brake-factor float :offset-assert 444) + (cam-speed-interp float :offset-assert 448) + (camera-dist2 float :offset-assert 452) + (player-dist2 float :offset-assert 456) + (bound-radius float :offset-assert 460) + (rider-array int64 4 :offset-assert 464) + (lift-thrust float 2 :offset-assert 496) + (roll-thrust float 2 :offset-assert 504) + (sent-attack-time time-frame :offset-assert 512) + (air-time time-frame :offset-assert 520) + (turn-time time-frame :offset-assert 528) + (crash-time time-frame :offset-assert 536) + (transition-time time-frame :offset-assert 544) + (transition-end-time time-frame :offset-assert 552) + (turbo-boost-time time-frame :offset-assert 560) + (crash-duration uint16 :offset-assert 568) + (turbo-boost-duration uint16 :offset-assert 570) + (turbo-boost-factor float :offset-assert 572) + (crash-impulse float :offset-assert 576) + (water-height float :offset-assert 580) + (lights-factor float :offset-assert 584) + (outgoing-attack-id uint32 :offset-assert 588) + (scrape-sound-id sound-id :offset-assert 592) + (engine-sound-id sound-id :offset-assert 596) + (thrust-sound-id sound-id :offset-assert 600) + (roll-sound-id sound-id :offset-assert 604) + (damage-pop-sound-id sound-id :offset-assert 608) + (damage-zap-sound-id sound-id :offset-assert 612) + (extra-sound-id sound-id :offset-assert 616) + (fog-fade float :offset-assert 620) + (scrape-sound-envelope float :offset-assert 624) + (engine-sound-envelope float :offset-assert 628) + (engine-sound-factor float :offset-assert 632) + (sputter-sound-envelope float :offset-assert 636) + (rudder-sound-envelope float :offset-assert 640) + (fins-sound-envelope float :offset-assert 644) + (exhaust-part-accum basic 2 :offset-assert 648) + (smoke-part-accum basic 2 :offset-assert 656) + (controller vehicle-controller :inline :offset-assert 672) + (section-array vehicle-section 4 :inline :offset-assert 816) + ) :method-count-assert 144 :size-assert #x370 :flag-assert #x9002f00370 - ;; Failed to read fields. (:methods (vehicle-method-53 () none 53) (vehicle-method-54 () none 54) @@ -49376,16 +49677,15 @@ (vehicle-method-143 () none 143) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; citizen-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype citizen (nav-enemy) - () + ( + (pad uint8 :offset 963)) :method-count-assert 201 :size-assert #x3c4 :flag-assert #xc9035003c4 @@ -49416,51 +49716,51 @@ (citizen-method-200 () none 200) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; height-map-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype xz-height-map (structure) - ((offset UNKNOWN 3 :offset-assert 0) - (x-offset float :offset-assert 0) - (y-offset float :offset-assert 4) - (z-offset float :offset-assert 8) + ((offset float 3 :offset-assert 0) + (x-offset float :offset 0) + (y-offset float :offset 4) + (z-offset float :offset 8) (x-inv-spacing float :offset-assert 12) (z-inv-spacing float :offset-assert 16) (y-scale float :offset-assert 20) - (dim UNKNOWN 2 :offset-assert 24) - (x-dim int16 :offset-assert 24) - (z-dim int16 :offset-assert 26) - (data uint32 :offset-assert 28) + (dim int16 2 :offset-assert 24) + (x-dim int16 :offset 24) + (z-dim int16 :offset 26) + (data (pointer int8) :offset-assert 28) ;; 2240 words for the traffic-height-map - this could be so many things, but its something with an `int8` at offset 0 ) :method-count-assert 15 :size-assert #x20 :flag-assert #xf00000020 (:methods - (xz-height-map-method-9 () none 9) - (xz-height-map-method-10 () none 10) - (xz-height-map-method-11 () none 11) - (xz-height-map-method-12 () none 12) - (xz-height-map-method-13 () none 13) - (xz-height-map-method-14 () none 14) + (xz-height-map-method-9 (_type_ vector) float 9) + (xz-height-map-method-10 (_type_ vector) none 10) + (xz-height-map-method-11 (_type_) none 11) + (xz-height-map-method-12 (_type_ vector) none 12) + (xz-height-map-method-13 (_type_ vector) none 13) + (xz-height-map-method-14 (_type_ vector int) none 14) ) ) -|# -;; (define-extern get-traffic-height function) +(define-extern get-traffic-height + "@returns The value of [[xz-height-map::9]] using [[*traffic-height-map*]] and the [[vector]] provided + @see [[xz-height-map::9]]" + (function vector float)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ctywide-obs-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| + (deftype city-race-ring-info (structure) ((pos vector :inline :offset-assert 0) - (angle float :offset-assert 12) + (angle float :offset 12) (boost float :offset-assert 16) (dist float :offset-assert 20) ) @@ -49471,9 +49771,7 @@ (city-race-ring-info-method-9 () none 9) ) ) -|# -#| (deftype city-ambush-spot (structure) ((pos vector :inline :offset-assert 0) (obj-type uint8 :offset-assert 16) @@ -49482,9 +49780,7 @@ :size-assert #x11 :flag-assert #x900000011 ) -|# -#| (deftype city-ambush-info (structure) ((count int16 :offset-assert 0) (array uint32 :offset-assert 4) @@ -49496,26 +49792,25 @@ (city-ambush-info-method-9 () none 9) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; height-map ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern point-in-bbox? function) +(define-extern point-in-bbox? (function bounding-box vector symbol)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; traffic-height-map ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern *traffic-height-map* object) +(define-extern *traffic-height-map* xz-height-map) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; nav-graph ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern make-nav-graph function) +(define-extern make-nav-graph (function nav-graph object none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; vehicle-rider ;; @@ -50216,23 +50511,22 @@ ) |# -#| (deftype civilian (citizen) - ((info basic :offset-assert 960) - (anim-panic-run int32 :offset-assert 964) - (anim-on-ground int32 :offset-assert 968) - (anim-dive int32 :offset-assert 972) - (anim-get-up-front int32 :offset-assert 976) - (anim-get-up-back int32 :offset-assert 980) - (last-second-pos vector :inline :offset-assert 988) - (last-distance float :offset-assert 1004) - (next-time time-frame :offset-assert 1012) - (dive-target-point vector :inline :offset-assert 1020) - (dive-reaction float :offset-assert 1036) - (allow-dive basic :offset-assert 1040) - (dive-finished? basic :offset-assert 1044) - (hit-face uint32 :offset-assert 1048) - (seat int32 :offset-assert 1052) + ((info basic :offset-assert 964) + (anim-panic-run int32 :offset-assert 968) + (anim-on-ground int32 :offset-assert 972) + (anim-dive int32 :offset-assert 976) + (anim-get-up-front int32 :offset-assert 980) + (anim-get-up-back int32 :offset-assert 984) + (last-second-pos vector :inline :offset-assert 992) + (last-distance float :offset-assert 1008) + (next-time time-frame :offset-assert 1016) + (dive-target-point vector :inline :offset-assert 1024) + (dive-reaction float :offset-assert 1040) + (allow-dive basic :offset-assert 1044) + (dive-finished? basic :offset-assert 1048) + (hit-face uint32 :offset-assert 1052) + (seat int32 :offset-assert 1056) ) :method-count-assert 218 :size-assert #x424 @@ -50257,7 +50551,6 @@ (civilian-method-217 () none 217) ) ) -|# ;; (define-extern civilian-flee-post function) ;; (define-extern civilian-avoid-danger-post function) @@ -50354,7 +50647,6 @@ ;; citizen-fat ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype citizen-fat (civilian) () :method-count-assert 218 @@ -50363,7 +50655,6 @@ (:methods ) ) -|# ;; (define-extern *citizen-fat-global-info* civilian-global-info) ;; (define-extern *citizen-fat-nav-enemy-info* nav-enemy-info) diff --git a/decompiler/config/jak2/anonymous_function_types.jsonc b/decompiler/config/jak2/anonymous_function_types.jsonc index 77dbcdd939..4f252379a3 100644 --- a/decompiler/config/jak2/anonymous_function_types.jsonc +++ b/decompiler/config/jak2/anonymous_function_types.jsonc @@ -397,5 +397,6 @@ [44, "(function surface surface surface int none :behavior target)"], [45, "(function surface object object int float :behavior target)"], [76, "(function surface surface surface int float :behavior target)"] - ] + ], + "scene": [[4, "(function symbol)"]] } diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index e70f503575..36d1c3c9ab 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -37,7 +37,6 @@ // checking boxed type is different now - these make the cfg stuff sad "name=", "cspace-inspect-tree", - "scene-player-init", "(method 77 spyder)", "(method 77 flamer)", "(method 77 grenadier)", @@ -221,7 +220,10 @@ "bg", "update-sound-banks", "entity-remap-names", - "(method 8 process-tree)" + "(method 8 process-tree)", + "(post play-anim scene-player)", + "(method 25 scene-player)", + "(method 25 scene-player)" ], // If format is used with the wrong number of arguments, @@ -304,7 +306,45 @@ "upload-vis-bits": [2, 6, 3, 0], "set-background-regs!": [4, 3], "draw-drawable-tree-instance-tie": [21, 23, 31, 33], - "command-get-process": [43] + "command-get-process": [43], + "unpack-comp-rle": [1, 3, 5, 6], + "(method 16 level)": [0, 1, 5, 13, 14, 15], + "unpack-comp-huf": [2, 4, 5, 6, 7, 8, 9], + "unpack-comp-lzo": [ + 0, + 1, + 4, + 5, + 6, + 7, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, // branch fwd 39 + 39, // branch fwd no delay + 43, // goto 18 + 45 // goto 6 + ], + "(method 27 conveyor)": [5, 14, 22], + "(method 44 nav-graph)": [1, 3, 6, 13, 17], + "(method 11 sparticle-launch-control)": [18, 24, 25, 28, 29, 32, 33, 34, 36, 41, 55, 58, 93, 95] }, // Sometimes the game might use format strings that are fetched dynamically, @@ -343,7 +383,12 @@ "draw-string", "get-string-length", "adgif-shader<-texture-with-update!", - "init-boundary-regs" + "init-boundary-regs", + "draw-boundary-polygon", + "render-boundary-quad", + "render-boundary-tri", + "clip-polygon-against-negative-hyperplane", + "clip-polygon-against-positive-hyperplane" ], "mips2c_jump_table_functions": {}, diff --git a/decompiler/config/jak2/inputs.jsonc b/decompiler/config/jak2/inputs.jsonc index eb8acee533..d23d3bae87 100644 --- a/decompiler/config/jak2/inputs.jsonc +++ b/decompiler/config/jak2/inputs.jsonc @@ -97,7 +97,7 @@ // "DGO/TITLE.DGO", // "DGO/FORDUMPD.DGO", // "DGO/D3A.DGO", - // "DGO/DRILLMTN.DGO", + "DGO/DRILLMTN.DGO", // "DGO/PAC.DGO", // "DGO/LTENTOB.DGO", // "DGO/LRACEBF.DGO", @@ -148,19 +148,19 @@ // "DGO/UNB.DGO", // "DGO/CPO.DGO", // "DGO/CAP.DGO", - "DGO/CWI.DGO" + "DGO/CWI.DGO", // "DGO/CTYKORA.DGO", // "DGO/RUI.DGO", // "DGO/LSACK.DGO", // "DGO/CTYASHA.DGO", // "DGO/LPRTRACE.DGO", - // "DGO/LWIDEA.DGO", + "DGO/LWIDEA.DGO", // "DGO/HIPHOG.DGO", // "DGO/LSMYSBRT.DGO", // "DGO/LRACEBB.DGO", // "DGO/CASCITY.DGO", // "DGO/LYSAMSAM.DGO" //, - // "DGO/VI1.DGO" + "DGO/VI1.DGO" ], // some objects are part of STR files (streaming data). @@ -184,5 +184,5 @@ "streamed_audio_file_names": [], - "levels_to_extract": ["PRI.DGO", "CTA.DGO", "CWI.DGO"] + "levels_to_extract": ["PRI.DGO", "CTA.DGO", "CWI.DGO", "LWIDEA.DGO", "VI1.DGO"] } diff --git a/decompiler/config/jak2/label_types.jsonc b/decompiler/config/jak2/label_types.jsonc index f2981f35dd..ea7bc69fb9 100644 --- a/decompiler/config/jak2/label_types.jsonc +++ b/decompiler/config/jak2/label_types.jsonc @@ -73,7 +73,9 @@ ["L256", "vector"], ["L257", "vector"], ["L258", "vector"], - ["L259", "vector"] + ["L259", "vector"], + ["L231", "matrix"], + ["L232", "matrix"] ], "mood-funcs": [ ["L231", "vector"], @@ -271,6 +273,8 @@ ], "target-gun": [["L595", "uint64", true]], "tie-methods": [["L328", "(inline-array tie-init-data)", 6]], + "blocking-plane": [["L43", "vector"]], + "elec-gate": [["L141", "attack-info"]], "progress-draw": [ ["L933", "uint64", true], ["L934", "uint64", true], diff --git a/decompiler/config/jak2/stack_structures.jsonc b/decompiler/config/jak2/stack_structures.jsonc index ff42dc02eb..bcb284b2e0 100644 --- a/decompiler/config/jak2/stack_structures.jsonc +++ b/decompiler/config/jak2/stack_structures.jsonc @@ -909,6 +909,26 @@ [48, "vector"] ], "target-board-pre-move": [[112, "vector"]], + // stack guesser can't handle inline arrays + "(method 11 blocking-plane)": [[16, ["inline-array", "vector", 2]]], + // stack guesser can't handle inline arrays + "blocking-plane-spawn": [[16, ["inline-array", "vector", 2]]], + // stack guesser can't handle inline arrays + "(enter active elec-gate)": [[176, ["inline-array", "vector", 2]]], + "(method 46 elevator)": [ + // bad stack guess (method type was a path-step) + [16, "path-step"] + ], + "(method 10 nav-node)": [[16, "vector"]], + "(method 9 nav-graph)": [[16, "matrix"]], + "(method 10 xz-height-map)": [[16, "matrix"]], + "(method 13 xz-height-map)": [[16, "vector4w-2"]], + "(method 9 nav-node)": [[48, "nav-graph-link"]], + "(method 18 drawable-region-face)": [ + [16, "vector"], + [32, "vector"] + ], + "target-board-pre-move": [[112, "vector"]], "progress-post": [[112, "hud-box"]], "(method 10 menu-missions-option)": [[224, "hud-box"]], "(method 10 menu-secret-option)": [[64, "hud-box"]], diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 6b3d444919..79bb7faddc 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -965,7 +965,7 @@ [5, "s5", "glst-named-node"], [6, "v1", "glst-named-node"] ], - "(event time-of-day-tick)": [[10, "v1", "float"]], + "(event time-of-day-tick)": [[10, "v1", "float"], [148, "v1", "float"]], "cam-slave-get-vector-with-offset": [[[52, 61], "s3", "vector"]], "cam-slave-get-interp-time": [[43, "f0", "float"]], "cam-standard-event-handler": [ @@ -2752,6 +2752,186 @@ ["_stack_", 16, "res-tag"], [[29, 45], "v1", "(pointer float)"] ], + + "unpack-comp-rle": [[[10, 26], "a0", "(pointer int8)"]], + + "(method 16 level)": [ + [222, "v1", "(pointer uint128)"], + [223, "a1", "(pointer uint128)"], + [225, "a0", "(pointer uint128)"], + [[71, 168], "s1", "(pointer int8)"], + [72, "v1", "(pointer int8)"], + [[74, 169], "s0", "(pointer int8)"], + [[170, 193], "s1", "(pointer uint8)"], + [[171, 193], "s2", "(pointer uint8)"], + [227, "v1", "(pointer uint8)"] + ], + "set-fog-height!": [ + [2, "v1", "(array texture-anim)"] + ], + "unpack-comp-huf": [ + [[21,23], "t3", "(pointer uint16)"] + ], + "(method 10 elec-gate)": [[13, "t9", "(function process-drawable none)"]], + "(method 11 elec-gate)": [ + [180, "a0", "vector"], + [193, "a0", "vector"] + ], + "(event idle simple-focus)": [[6, "v1", "vector"]], + "(trans active simple-nav-sphere)": [[10, "v1", "process-drawable"]], + "simple-nav-sphere-event-handler": [[21, "v1", "float"]], + "sampler-start": [ + [1, "v1", "timer-bank"], + [3, "v1", "timer-bank"], + [6, "a0", "timer-bank"], + [24, "a0", "timer-bank"] + ], + "(top-level-login sampler)": [[14, "v1", "timer-bank"]], + "sampler-stop": [[1, "v1", "timer-bank"]], + "(event up-idle basebutton)": [[[3, 38], "v1", "attack-info"]], + "(method 33 basebutton)": [[35, "v1", "art-joint-anim"]], + "(event idle drop-plat)": [ + [19, "s5", "process-focusable"], + [53, "gp", "process-focusable"] + ], + "(event idle bouncer)": [[[120, 127], "v1", "attack-info"]], + "(method 7 conveyor)": [ + [12, "t9", "(function process-drawable int process-drawable)"] + ], + "(method 27 conveyor)": [ + [23, "a0", "connection"], + [24, "a0", "collide-shape"], + [71, "a0", "connection"], + [72, "a0", "collide-shape"], + [143, "s4", "process-focusable"] + ], + "(method 21 conveyor)": [ + [104, "v1", "vector"], + [102, "v1", "vector"], + [106, "a0", "vector"], + [112, "v1", "vector"], + [118, "v1", "vector"] + ], + "(code idle lgconveyor)": [[10, "v1", "art-joint-anim"]], + "(post idle lgconveyor)": [[4, "t9", "(function none)"]], + "(method 7 elevator)": [[14, "t9", "(function base-plat int base-plat)"]], + "elevator-event": [ + [23, "v1", "focus"], + [88, "gp", "float"], + [132, "gp", "float"] + ], + "(method 46 elevator)": [[11, "f0", "float"]], + "(method 11 elevator)": [[156, "f0", "float"]], + "(enter idle elec-gate)": [ + [[33, 53], "a1", "lightning-mode"], + [[10, 30], "a1", "lightning-mode"], + [[56, 76], "a1", "lightning-mode"] + ], + "(enter active elec-gate)": [ + [[29, 49], "a1", "lightning-mode"], + [[75, 95], "a1", "lightning-mode"], + [[52, 72], "a1", "lightning-mode"] + ], + "(trans active elec-gate)": [ + [[284, 304], "a0", "lightning-mode"], + [[257, 416], "s4", "lightning-mode"] + ], + "(trans shutdown elec-gate)": [ + [[36, 56], "a0", "lightning-mode"], + [[82, 102], "a0", "lightning-mode"], + [[59, 79], "a0", "lightning-mode"] + ], + "(method 11 basebutton)": [["_stack_", 16, "res-tag"]], + "(method 24 conveyor)": [["_stack_", 16, "res-tag"]], + "(method 25 conveyor)": [[11, "v0", "actor-option"]], + "(method 24 scene-player)": [[38, "gp", "scene"]], + "process-drawable-draw-subtitles": [[26, "v0", "(pointer vector)"]], + "(post play-anim scene-player)": [ + [192, "s4", "process-drawable"], + [243, "s4", "process-drawable"], + [306, "s5", "process-drawable"] + ], + "(method 9 scene-actor)": [ + [43, "s4", "skeleton-group"], + [258, "a0", "process-drawable"], + [262, "v1", "process-drawable"], + [266, "a0", "process-drawable"], + [346, "a0", "scene-player"], + [355, "v1", "manipy"], + [361, "v1", "manipy"], + [376, "v1", "manipy"], + [382, "v1", "manipy"], + [533, "a0", "process-drawable"], + [537, "v1", "process-drawable"], + [541, "a0", "process-drawable"] + ], + "(method 25 scene-player)": [ + [99, "s2", "process-drawable"], + [152, "s2", "process-drawable"], + [155, "s2", "process-drawable"], + [158, "s2", "process-drawable"], + [161, "s2", "process-drawable"] + ], + "(method 16 drawable-inline-array-region-prim)": [ + [[1, 7], "v1", "drawable-region-prim"] + ], + "(method 18 drawable-region-face)": [ + [[33, 84], "v1", "(inline-array vector)"] + ], + "(method 18 drawable-tree-region-prim)": [ + [[22, 49], "s2", "drawable-region-prim"] + ], + "(method 9 region)": [ + [[55, 60], "a0", "drawable-region-prim"], + [58, "v1", "region-prim-area"], + [4, "a0", "region-prim-area"], + [50, "v1", "drawable-region-prim"] + ], + "(method 17 drawable-tree-region-prim)": [ + [[23, 28], "a0", "drawable-region-prim"], + [4, "a0", "region-prim-area"] + ], + "(method 19 drawable-region-volume)": [[8, "a3", "drawable-region-face"]], + "(method 18 drawable-region-volume)": [ + [[23, 27], "a0", "drawable-region-face"] + ], + "(method 17 drawable-region-volume)": [ + [[12, 21], "a0", "drawable-region-face"] + ], + "region-prim-lookup-by-id": [[45, "t6", "drawable-region-prim"]], + "region-tree-execute": [ + [114, "v1", "region-prim-area"], + [107, "v1", "region-prim-area"], + [97, "v1", "region-prim-area"], + [159, "v1", "region-prim-area"], + [204, "v1", "region-prim-area"], + [210, "v1", "region-prim-area"], + [221, "v1", "region-prim-area"], + [165, "v1", "region-prim-area"], + [169, "v1", "region-prim-area"], + [175, "a0", "region-prim-area"], + [191, "v1", "region-prim-area"], + [120, "v1", "region-prim-area"], + [124, "v1", "region-prim-area"], + [146, "v1", "region-prim-area"], + [129, "a1", "region-prim-area"], + [103, "v1", "region-prim-area"], + [[19, 29], "v1", "region-prim-area"] + ], + "add-debug-bound": [ + [[33, 41], "a0", "dma-packet"], + [[42, 50], "a0", "gs-gif-tag"], + [53, "a0", "(pointer gs-zbuf)"], + [55, "a0", "(pointer gs-reg64)"], + [57, "a0", "(pointer gs-test)"], + [59, "a0", "(pointer gs-reg64)"], + [61, "a0", "(pointer gs-alpha)"], + [63, "a0", "(pointer gs-reg64)"], + [[107, 114], "v1", "dma-packet"], + [105, "v1", "dma-packet"], + [99, "a0", "dma-packet"], + [97, "a1", "dma-packet"] + ], "(method 25 progress)": [[[19, 31], "a0", "menu-option"]], "(method 24 progress)": [ [70, "a0", "(array menu-option)"], diff --git a/decompiler/config/jak2/var_names.jsonc b/decompiler/config/jak2/var_names.jsonc index d50d72c750..6a7f58ace9 100644 --- a/decompiler/config/jak2/var_names.jsonc +++ b/decompiler/config/jak2/var_names.jsonc @@ -1537,5 +1537,441 @@ "s4-0": "pad", "s3-1": ["buttons-pushed", "pad-buttons"] } + }, + "(method 16 level)": { + "args": ["obj", "vis-info", "unused", "in-bsp-vis-string"], + "vars": { + "a0-1": "cam-leaf-idx", + "v1-1": "curr-vis-string-offset", + "s3-0": "desired-vis-string-offset", + "s3-1": "vis-buf", + "s2-0": "lower-flag-bits", + "s1-0": "spad-start", + "s0-0": "spad-end", + "s4-1": "list-len", + "v1-30": "qwc", + "v1-33": "comp-mode", + "v1-35": "qwc2", + "sv-16": "extra-vis-length", + "sv-32": "extra-vis-dest", + "v1-45": "extra-vis-in", + "a0-25": "extra-vis-idx", + "a1-9": "vis-byte", + "s2-1": "vis-ptr", + "s1-1": "all-vis-ptr", + "v1-51": "vis-error", + "v1-55": "unpacked-vis-ptr", + "a0-42": "final-vis-ptr", + "a1-22": "all-vis", + "a2-11": "vis-qwc" + } + }, + "elec-gate-post": { + "vars": { + "s5-0": "bolt-idx", + "sv-96": "curr-bolt", + "gp-0": "num-points", + "sv-112": "curr-point" + } + }, + "(enter idle elec-gate)": { + "vars": { + "v1-0": "bolt-idx", + "a0-3": "bolt", + "a0-6": "first-ring", + "a0-9": "second-ring", + "a1-1": "mode", + "a1-2": "mode", + "a1-3": "mode", + "a2-2": "mode-diff?", + "a2-12": "mode-diff?", + "a2-22": "mode-diff?" + } + }, + "(enter active elec-gate)": { + "vars": { + "v1-7": "bolt-idx", + "a0-5": "curr-bolt", + "a1-3": "mode", + "a2-3": "mode-diff?", + "a0-8": "first-ring", + "a1-4": "mode", + "a0-11": "second-ring", + "a1-5": "mode", + "a2-23": "mode-diff?", + "a2-13": "mode-diff?", + "v1-10": "vec-idx", + "gp-0": "vec-pair" + } + }, + "(trans active elec-gate)": { + "vars": { + "s5-0": "proc-focus", + "gp-0": "target", + "gp-1": "focus-trans", + "a1-4": "evt", + "v1-20": "attack", + "a0-8": "game-info", + "a2-2": "attack-id", + "s5-2": "bolt-idx" + } + }, + "(trans shutdown elec-gate)": { + "vars": { + "s5-0": "bolt-idx", + "gp-0": "go-idle?", + "s4-0": "left-bolt-0", + "v1-9": "left-bolt-1", + "a0-1": "mode", + "a1-2": "mode-diff?", + "v1-12": "left-bolt-first-ring", + "v1-15": "left-bolt-second-ring", + "a0-2": "mode", + "a0-3": "mode", + "a1-12": "mode-diff?", + "a1-22": "mode-diff?" + } + }, + "(method 27 elec-gate)": { + "args": ["obj", "sparticle-lc"] + }, + "(method 7 elec-gate)": { + "vars": { + "v1-0": "bolt-idx", + "a2-2": "left-bolt" + }, + "args": ["obj", "new-addr"] + }, + "(method 11 elec-gate)": { + "vars": { + "s4-0": "bolt-idx", + "s5-1": "params", + "s3-0": "left-bolt" + } + }, + "(method 29 fort-elec-gate)": { + "args": ["obj", "scale"] + }, + "(event idle blocking-plane)": { + "vars": { + "v1-0": "evt-type", + "v1-3": "prim", + "gp-0": "proc-child-ptr-0", + "s5-0": "proc-child-0", + "gp-1": "proc-child-ptr-1", + "s5-1": "proc-child-1" + } + }, + "(method 21 blocking-plane)": { + "args": ["obj", "vec-pair", "height"] + }, + "blocking-plane-init-by-other": { + "args": ["vec-pair", "height"] + }, + "blocking-plane-destroy": { + "vars": { + "gp-0": "child-proc-ptr", + "s5-0": "child-proc" + } + }, + "simple-focus-init-by-other": { + "vars": { + "gp-0": "root" + } + }, + "simple-nav-sphere-event-handler": { + "args": ["proc", "arg1", "event-type", "event"], + "vars": { + "f0-0": "radius", + "a0-7": "collide-shape" + } + }, + "plat-trans": { + "vars": { + "gp-0": "trans" + } + }, + "plat-event": { + "args": ["proc", "arg1", "event-type", "event"], + "vars": { + "v1-0": "evt-type" + } + }, + "eco-door-event-handler": { + "args": ["proc", "arg1", "event-type", "event"], + "vars": { + "v1-0": "evt-type" + } + }, + "(code door-opening eco-door)": { + "vars": { + "v1-14": "prim" + } + }, + "(code door-open eco-door)": { + "vars": { + "v1-3": "prim", + "f30-0": "dist-from-target", + "f28-0": "dist-from-camera" + } + }, + "(code door-closing eco-door)": { + "vars": { + "gp-0": "params" + } + }, + "(method 25 eco-door)": { + "vars": { + "s5-0": "collision-shape", + "v1-2": "collision-mesh", + "v1-5": "prim" + } + }, + "(method 11 eco-door)": { + "vars": { + "f0-0": "door-scale", + "v1-8": "state-actor" + } + }, + "(method 37 basebutton)": { + "args": ["obj", "vec", "quat"] + }, + "(event up-idle basebutton)": { + "vars": { + "v1-1": "attack" + } + }, + "(event going-down basebutton)": { + "vars": { + "v1-0": "evt-type" + } + }, + "(code going-down basebutton)": { + "vars": { + "gp-0": "activation-script" + } + }, + "(event down-idle basebutton)": { + "vars": { + "v1-0": "evt-type" + } + }, + "(method 38 basebutton)": { + "args": ["obj", "pressed?"] + }, + "(method 33 basebutton)": { + "vars": { + "s5-1": "channel-0", + "s5-2": "channel-1" + } + }, + "(method 34 basebutton)": { + "vars": { + "s5-0": "collision-shape", + "s4-0": "collision-mesh", + "v1-12": "prim" + } + }, + "basebutton-init-by-other": { + "args": [ + "process-actor", + "vec", + "quat", + "notify-actor", + "pressed?", + "timeout" + ] + }, + "(method 36 basebutton)": { + "args": ["obj", "event-type"], + "vars": { + "a1-1": "event", + "a1-2": "event", + "s4-0": "actor-group-idx", + "s3-0": "actor-group", + "s2-0": "actor-idx", + "v1-10": "actor", + "t9-1": "func", + "t9-0": "func", + "v1-2": "actor" + } + }, + "(method 31 plat)": { + "vars": { + "s5-0": "collision-shape", + "s4-0": "collision-mesh", + "v1-11": "prim" + } + }, + "(method 11 plat)": { + "vars": { + "a1-4": "params" + }, + "args": ["obj", "entity"] + }, + "(event idle drop-plat)": { + "vars": { + "a0-5": "proc-focus", + "s5-0": "proc-temp", + "a0-13": "proc-focus" + } + }, + "(event idle bouncer)": { + "vars": { + "v1-0": "evt-type" + } + }, + "(method 24 bouncer)": { + "vars": { + "s5-0": "collision-shape", + "v1-2": "collision-mesh", + "v1-5": "prim" + } + }, + "(method 7 conveyor)": { + "args": ["obj", "new-addr"] + }, + "(method 24 conveyor)": { + "vars": { + "v1-4": "scale-factor", + "a0-1": "entity", + "sv-16": "tag" + } + }, + "(method 25 conveyor)": { + "vars": { + "v0-1": "sound", + "v1-1": "actor-options" + } + }, + "(method 26 conveyor)": { + "vars": { + "s4-0": "vec", + "a1-2": "sections", + "a2-0": "section-count", + "a0-3": "section-idx", + "v1-8": "section", + "a1-3": "vec-temp" + }, + "args": ["obj", "proc-focus"] + }, + "(method 48 elevator)": { + "vars": { + "gp-0": "target", + "v1-6": "collide-query" + } + }, + "(method 41 elevator)": { + "vars": { + "a0-1": "entity", + "a0-2": "entity", + "a0-3": "entity", + "a0-4": "entity", + "a0-5": "entity" + } + }, + "ease-value-in-out": { + "args": ["value", "step-amount"], + "vars": { + "f0-0": "step" + } + }, + "elevator-event": { + "args": ["proc", "arg1", "event-type", "event"], + "vars": { + "v1-0": "evt-type", + "v1-8": "proc-focus", + "v1-20": "next-state-0", + "v1-48": "next-state-1" + } + }, + "(method 47 elevator)": { + "vars": { + "s0-0": "path-vertex-idx", + "sv-32": "path-point", + "s1-0": "elev-params", + "f28-0": "smallest-dist", + "f30-0": "point-idx-tracker", + "f0-12": "dist" + } + }, + "(method 44 elevator)": { + "vars": { + "s5-0": "target-temp", + "a0-2": "target" + } + }, + "(method 46 elevator)": { + "vars": { + "sv-16": "zero", + "a0-1": "target" + } + }, + "(method 11 elevator)": { + "args": ["obj", "entity"], + "vars": { + "s5-1": "num-path-points", + "s3-1": "path-point-idx" + } + }, + "(method 39 elevator)": { + "args": ["obj", "path-point-x", "path-point-y"], + "vars": { + "s3-0": "point-x", + "a1-3": "point-y" + } + }, + "(method 16 drawable-region-prim)": { + "args": ["obj", "area-of-interest", "_count", "region-list"], + "vars": { + "s2-0": "count" + } + }, + "(method 9 region-prim-area)": { + "args": ["obj", "region-sphere"], + "vars": { + "v1-0": "regions-entered", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 10 region-prim-area)": { + "vars": { + "v1-0": "regions-exited", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 11 region-prim-area)": { + "vars": { + "v1-0": "regions-inside", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 12 region-prim-area)": { + "vars": { + "v1-0": "regions-started", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 18 drawable-region-sphere)": { + "vars": { + "s4-0": "area-of-interest" + }, + "args": ["obj", "area"] + }, + "(method 19 drawable-region-sphere)": { + "args": ["obj", "area"] + }, + "(method 18 drawable-region-volume)": { + "args": ["obj", "area"] + }, + "add-debug-bound-internal": { + "args": ["buf", "pts", "num-pts", "color0", "color1", "flip-tex"] + }, + "add-debug-bound": { + "args": ["buf", "pts", "c0", "c1", "flash"] } } diff --git a/decompiler/config/jak2_ntsc_v1.jsonc b/decompiler/config/jak2_ntsc_v1.jsonc index 48dd806a75..fcee13e3ed 100644 --- a/decompiler/config/jak2_ntsc_v1.jsonc +++ b/decompiler/config/jak2_ntsc_v1.jsonc @@ -7,8 +7,8 @@ // if you want to filter to only some object names. // it will make the decompiler much faster. - "allowed_objects": [], - "banned_objects": ["effect-control", "time-of-day", "target-util", "ctywide-scenes"], + "allowed_objects": ["mood"], + "banned_objects": ["effect-control", "target-util", "ctywide-scenes"], //////////////////////////// // CODE ANALYSIS OPTIONS diff --git a/decompiler/data/TextureDB.cpp b/decompiler/data/TextureDB.cpp index 99a1409e92..9785bdcfb3 100644 --- a/decompiler/data/TextureDB.cpp +++ b/decompiler/data/TextureDB.cpp @@ -1,5 +1,6 @@ #include "TextureDB.h" +#include "common/log/log.h" #include "common/util/Assert.h" #include "third-party/fmt/core.h" @@ -49,11 +50,11 @@ void TextureDB::replace_textures(const fs::path& path) { for (auto& tex : textures) { fs::path full_path = base_path / tpage_names.at(tex.second.page) / (tex.second.name + ".png"); if (fs::exists(full_path)) { - fmt::print("Replacing {}\n", full_path.string().c_str()); + lg::info("Replacing {}", full_path.string().c_str()); int w, h; auto data = stbi_load(full_path.string().c_str(), &w, &h, 0, 4); // rgba channels if (!data) { - fmt::print("failed to load PNG file: {}\n", full_path.string().c_str()); + lg::warn("failed to load PNG file: {}", full_path.string().c_str()); continue; } tex.second.rgba_bytes.resize(w * h); diff --git a/decompiler/data/streamed_audio.cpp b/decompiler/data/streamed_audio.cpp index 466626a0f5..306dd47a8c 100644 --- a/decompiler/data/streamed_audio.cpp +++ b/decompiler/data/streamed_audio.cpp @@ -42,7 +42,7 @@ struct AudioDir { void debug_print() const { for (auto& e : entries) { - fmt::print("\"{}\" 0x{:07x} - 0x{:07x}\n", e.name, e.start_byte, e.end_byte); + lg::debug("\"{}\" 0x{:07x} - 0x{:07x}", e.name, e.start_byte, e.end_byte); } } }; @@ -80,9 +80,9 @@ struct VagFileHeader { char temp_name[17]; memcpy(temp_name, name, 16); temp_name[16] = '\0'; - fmt::print("{}{}{}{} v {} zero {} chan {} samp {} z {} {} {} name {}\n", magic[0], magic[1], - magic[2], magic[3], version, zero, channel_size, sample_rate, z[0], z[1], z[2], - temp_name); + lg::debug("{}{}{}{} v {} zero {} chan {} samp {} z {} {} {} name {}", magic[0], magic[1], + magic[2], magic[3], version, zero, channel_size, sample_rate, z[0], z[1], z[2], + temp_name); } }; @@ -96,7 +96,7 @@ AudioDir read_audio_dir(const fs::path& path) { u32 value; }; auto data = file_util::read_binary_file(path); - lg::info("Got {} bytes of audio dir.\n", data.size()); + lg::info("Got {} bytes of audio dir.", data.size()); auto reader = BinaryReader(data); u32 count = reader.read(); diff --git a/decompiler/level_extractor/BspHeader.cpp b/decompiler/level_extractor/BspHeader.cpp index 6644fc39e3..7088bf1e8d 100644 --- a/decompiler/level_extractor/BspHeader.cpp +++ b/decompiler/level_extractor/BspHeader.cpp @@ -1,6 +1,7 @@ #include "BspHeader.h" #include "common/dma/dma.h" +#include "common/log/log.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" #include "decompiler/util/DecompilerTypeSystem.h" @@ -215,7 +216,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { while (word_offset < qwc_total * 4) { VifCode next(deref_u32(start, word_offset)); - fmt::print("{} at: {} bytes, {} qw\n", next.print(), word_offset * 4, word_offset / 4); + lg::debug("{} at: {} bytes, {} qw", next.print(), word_offset * 4, word_offset / 4); word_offset++; switch (next.kind) { case VifCode::Kind::UNPACK_V4_16: { @@ -231,8 +232,8 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { words[1] = deref_u32(start, word_offset++); u16 unpacked[4]; memcpy(unpacked, words, 8); - fmt::print(" [{:3d} {:3d} {:3d} {:3d}]\n", unpacked[0], unpacked[1], unpacked[2], - unpacked[3]); + lg::debug(" [{:3d} {:3d} {:3d} {:3d}]", unpacked[0], unpacked[1], unpacked[2], + unpacked[3]); } } break; @@ -249,7 +250,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { words[1] = deref_u32(start, word_offset++); words[2] = deref_u32(start, word_offset++); words[3] = deref_u32(start, word_offset++); - fmt::print(" [{:3d} {:3d} {:3d} {:3d}]\n", words[0], words[1], words[2], words[3]); + lg::debug(" [{:3d} {:3d} {:3d} {:3d}]", words[0], words[1], words[2], words[3]); } } break; @@ -264,7 +265,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { words[0] = deref_u32(start, word_offset++); words[1] = deref_u32(start, word_offset++); words[2] = deref_u32(start, word_offset++); - fmt::print(" [{:3d} {:3d} {:3d}]\n", words[0], words[1], words[2]); + lg::debug(" [{:3d} {:3d} {:3d}]", words[0], words[1], words[2]); } } break; @@ -274,7 +275,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { words[1] = deref_u32(start, word_offset++); words[2] = deref_u32(start, word_offset++); words[3] = deref_u32(start, word_offset++); - fmt::print(" row data [{:3d} {:3d} {:3d} {:3d}]\n", words[0], words[1], words[2], words[3]); + lg::debug(" row data [{:3d} {:3d} {:3d} {:3d}]", words[0], words[1], words[2], words[3]); } break; case VifCode::Kind::STMOD: { @@ -293,7 +294,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { s8 words[4]; u32 all = deref_u32(start, word_offset++); memcpy(words, &all, 4); - fmt::print(" [{:3d} {:3d} {:3d} {:3d}]\n", words[0], words[1], words[2], words[3]); + lg::debug(" [{:3d} {:3d} {:3d} {:3d}]", words[0], words[1], words[2], words[3]); } } break; case VifCode::Kind::NOP: @@ -302,7 +303,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { ASSERT_MSG(false, fmt::format("unknown: {}", next.print())); } } - fmt::print("-------------------------------------------\n"); + lg::debug("-------------------------------------------"); } std::vector read_dma_chain(Ref& start, u32 qwc) { @@ -350,22 +351,22 @@ void TFragment::read_from_file(TypedRef ref, if (stats->debug_print_dma_data) { // first, common - fmt::print("DMA COMMON {}, {} qwc:\n", dmas[0].label_name, dma_qwc[0]); + lg::info("DMA COMMON {}, {} qwc:", dmas[0].label_name, dma_qwc[0]); tfrag_debug_print_unpack(dmas[0].ref, dma_qwc[0]); // next "base" - fmt::print("DMA BASE {}, {} qwc:\n", dmas[1].label_name, dma_qwc[1]); + lg::info("DMA BASE {}, {} qwc:", dmas[1].label_name, dma_qwc[1]); tfrag_debug_print_unpack(dmas[1].ref, dma_qwc[1]); // next "level0" - // fmt::print("DMA LEVEL0 {}, {} qwc:\n", dmas[0].label_name, dma_qwc[3]); + // lg::print("DMA LEVEL0 {}, {} qwc:\n", dmas[0].label_name, dma_qwc[3]); // tfrag_debug_print_unpack(dmas[0].ref, dma_qwc[3]); // next "level1" - fmt::print("DMA LEVEL1 {}, {} qwc:\n", dmas[2].label_name, dma_qwc[2]); + lg::info("DMA LEVEL1 {}, {} qwc:", dmas[2].label_name, dma_qwc[2]); tfrag_debug_print_unpack(dmas[2].ref, dma_qwc[2]); - fmt::print("qwc's: {} {} {} {}\n", dma_qwc[0], dma_qwc[1], dma_qwc[2], dma_qwc[3]); + lg::info("qwc's: {} {} {} {}", dma_qwc[0], dma_qwc[1], dma_qwc[2], dma_qwc[3]); } num_base_colors = read_plain_data_field(ref, "num-base-colors", dts); @@ -404,7 +405,7 @@ void TFragment::read_from_file(TypedRef ref, // todo shader ASSERT(num_colors / 4 == color_count); - // fmt::print("colors: {} {} {}\n", num_base_colors, num_level0_colors, num_level1_colors); + // lg::print("colors: {} {} {}\n", num_base_colors, num_level0_colors, num_level1_colors); if (version == GameVersion::Jak1) { ASSERT(read_plain_data_field(ref, "pad0", dts) == 0); ASSERT(read_plain_data_field(ref, "pad1", dts) == 0); @@ -780,6 +781,18 @@ std::unique_ptr make_drawable_inline_array( return result; } + if (ref.type->get_name() == "drawable-inline-array-tfrag-trans") { + auto result = std::make_unique(); + result->read_from_file(ref, dts, stats, version); + return result; + } + + if (ref.type->get_name() == "drawable-inline-array-tfrag-water") { + auto result = std::make_unique(); + result->read_from_file(ref, dts, stats, version); + return result; + } + if (ref.type->get_name() == "drawable-inline-array-instance-tie") { auto result = std::make_unique(); result->read_from_file(ref, dts, stats, version); @@ -920,7 +933,7 @@ void PrototypeBucketTie::read_from_file(TypedRef ref, break; case GameVersion::Jak2: flags = read_plain_data_field(ref, "flags", dts); - fmt::print("flag: {}\n", flags); + lg::print("flag: {}\n", flags); break; default: ASSERT(false); @@ -1576,7 +1589,7 @@ void PrototypeBucketShrub::read_from_file(TypedRef ref, } if (flags) { // lid in misty has flag 2, not sure what it means yet. - fmt::print("proto: {} flags: {}\n", name, flags); + lg::info("proto: {} flags: {}", name, flags); } in_level = read_plain_data_field(ref, "in-level", dts); utextures = read_plain_data_field(ref, "utextures", dts); @@ -1772,6 +1785,18 @@ std::unique_ptr make_drawable_tree(TypedRef ref, return tree; } + if (ref.type->get_name() == "drawable-tree-tfrag-trans") { + auto tree = std::make_unique(); + tree->read_from_file(ref, dts, stats, version); + return tree; + } + + if (ref.type->get_name() == "drawable-tree-tfrag-water") { + auto tree = std::make_unique(); + tree->read_from_file(ref, dts, stats, version); + return tree; + } + if (ref.type->get_name() == "drawable-tree-actor") { auto tree = std::make_unique(); tree->read_from_file(ref, dts, stats, version); diff --git a/decompiler/level_extractor/BspHeader.h b/decompiler/level_extractor/BspHeader.h index 625f1884f4..c0a0d5e734 100644 --- a/decompiler/level_extractor/BspHeader.h +++ b/decompiler/level_extractor/BspHeader.h @@ -363,6 +363,21 @@ struct DrawableInlineArrayTransTFrag : public DrawableInlineArrayTFrag { std::string my_type() const override { return "drawable-inline-array-trans-tfrag"; } }; +struct DrawableInlineArrayTFragTrans : public DrawableInlineArrayTFrag { + std::string my_type() const override { return "drawable-inline-array-tfrag-trans"; } +}; + +struct DrawableInlineArrayTFragWater : public DrawableInlineArrayTFrag { + std::string my_type() const override { return "drawable-inline-array-tfrag-water"; } +}; + +struct DrawableTreeTfragTrans : public DrawableTreeTfrag { + std::string my_type() const override { return "drawable-tree-tfrag-trans"; } +}; + +struct DrawableTreeTfragWater : public DrawableTreeTfrag { + std::string my_type() const override { return "drawable-tree-tfrag-water"; } +}; ///////////////////// // TIE ///////////////////// diff --git a/decompiler/level_extractor/MercData.cpp b/decompiler/level_extractor/MercData.cpp index 7ff7b3611e..64382057ce 100644 --- a/decompiler/level_extractor/MercData.cpp +++ b/decompiler/level_extractor/MercData.cpp @@ -152,7 +152,7 @@ void MercByteHeader::from_ref(TypedRef tr, const DecompilerTypeSystem& dts) { } else { // ASSERT(!got_end); if (got_end) { - // fmt::print("got something after the end\n"); // todo, should investigate more + // lg::print("got something after the end\n"); // todo, should investigate more } } } @@ -203,10 +203,10 @@ TypedRef MercFragment::from_ref(TypedRef tr, const DecompilerTypeSystem& dts, const MercFragmentControl& control, const MercCtrlHeader& main_control) { - // fmt::print("frag::from_ref:\n{}\n", control.print()); + // lg::print("frag::from_ref:\n{}\n", control.print()); TypedRef byte_hdr(get_field_ref(tr, "header", dts), dts.ts.lookup_type("merc-byte-header")); header.from_ref(byte_hdr, dts); - // fmt::print("{}\n", header.print()); + // lg::print("{}\n", header.print()); // all these offsets are super confusing. // the DMA transfers require source and dest addresses/sized to have alignment of 16 bytes. @@ -225,7 +225,7 @@ TypedRef MercFragment::from_ref(TypedRef tr, // dsll32 s0, v0, 4 // daddu t3, t2, s0 u32 my_u4_count = ((control.unsigned_four_count + 3) / 4) * 16; - // fmt::print("my u4: {} ({} qwc)\n", my_u4_count, my_u4_count / 16); + // lg::print("my u4: {} ({} qwc)\n", my_u4_count, my_u4_count / 16); for (u32 w = 0; w < my_u4_count / 4; w++) { u32 val = deref_u32(tr.ref, w); memcpy(unsigned_four_including_header.emplace_back().data(), &val, 4); @@ -237,7 +237,7 @@ TypedRef MercFragment::from_ref(TypedRef tr, // srl s0, s0, 2 // dsll32 s2, s0, 4 u32 my_l4_count = my_u4_count + ((control.lump_four_count + 3) / 4) * 16; - // fmt::print("my l4: {} ({} qwc)\n", my_l4_count, my_l4_count / 16); + // lg::print("my l4: {} ({} qwc)\n", my_l4_count, my_l4_count / 16); // end of lump should align with mm (main memory?) fp off. which // is used for accessing the fp data in main memory. ASSERT(my_l4_count / 16 == header.mm_quadword_fp_off); @@ -409,4 +409,4 @@ std::string MercCtrl::print() { return result; } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/level_extractor/extract_collide_frags.cpp b/decompiler/level_extractor/extract_collide_frags.cpp index d32fd25b83..5f7847e9fd 100644 --- a/decompiler/level_extractor/extract_collide_frags.cpp +++ b/decompiler/level_extractor/extract_collide_frags.cpp @@ -179,7 +179,7 @@ void extract_pats(CollideListItem& item) { auto pat_idx = deref_u8(item.mesh->packed_data, byte_offset++); u32 pat = deref_u32(item.mesh->pat_array, pat_idx); - // fmt::print("pat @ {} is 0x{:x}\n", pat_idx, pat); + // lg::print("pat @ {} is 0x{:x}\n", pat_idx, pat); f.pat = pat; } } diff --git a/decompiler/level_extractor/extract_level.cpp b/decompiler/level_extractor/extract_level.cpp index b20ce552af..6417af89e9 100644 --- a/decompiler/level_extractor/extract_level.cpp +++ b/decompiler/level_extractor/extract_level.cpp @@ -3,6 +3,7 @@ #include #include +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "common/util/SimpleThreadGroup.h" #include "common/util/compress.h" @@ -38,18 +39,18 @@ std::optional get_bsp_file(const std::vector */ bool is_valid_bsp(const decompiler::LinkedObjectFile& file) { if (file.segments != 1) { - fmt::print("Got {} segments, but expected 1\n", file.segments); + lg::error("Got {} segments, but expected 1", file.segments); return false; } auto& first_word = file.words_by_seg.at(0).at(0); if (first_word.kind() != decompiler::LinkedWord::TYPE_PTR) { - fmt::print("Expected the first word to be a type pointer, but it wasn't.\n"); + lg::error("Expected the first word to be a type pointer, but it wasn't."); return false; } if (first_word.symbol_name() != "bsp-header") { - fmt::print("Expected to get a bsp-header, but got {} instead.\n", first_word.symbol_name()); + lg::error("Expected to get a bsp-header, but got {} instead.", first_word.symbol_name()); return false; } @@ -126,7 +127,7 @@ std::vector extract_bsp_from_level(const ObjectFileDB } std::string level_name = bsp_rec->name.substr(0, bsp_rec->name.length() - 4); - fmt::print("Processing level {} ({})\n", dgo_name, level_name); + lg::info("Processing level {} ({})", dgo_name, level_name); const auto& bsp_file = db.lookup_record(*bsp_rec); bool ok = is_valid_bsp(bsp_file.linked_data); ASSERT(ok); @@ -140,12 +141,13 @@ std::vector extract_bsp_from_level(const ObjectFileDB /* level_tools::PrintSettings settings; settings.expand_collide = true; - fmt::print("{}\n", bsp_header.print(settings)); + lg::print("{}\n", bsp_header.print(settings)); */ const std::set tfrag_trees = { - "drawable-tree-tfrag", "drawable-tree-trans-tfrag", "drawable-tree-dirt-tfrag", - "drawable-tree-ice-tfrag", "drawable-tree-lowres-tfrag", "drawable-tree-lowres-trans-tfrag"}; + "drawable-tree-tfrag", "drawable-tree-trans-tfrag", "drawable-tree-tfrag-trans", + "drawable-tree-dirt-tfrag", "drawable-tree-tfrag-water", "drawable-tree-ice-tfrag", + "drawable-tree-lowres-tfrag", "drawable-tree-lowres-trans-tfrag"}; int i = 0; std::vector all_ties; @@ -173,7 +175,7 @@ std::vector extract_bsp_from_level(const ObjectFileDB auto as_tie_tree = dynamic_cast(draw_tree.get()); ASSERT(as_tie_tree); extract_tie(as_tie_tree, fmt::format("{}-{}-tie", dgo_name, i++), - bsp_header.texture_remap_table, tex_db, level_data, false); + bsp_header.texture_remap_table, tex_db, level_data, false, db.version()); } else if (draw_tree->my_type() == "drawable-tree-instance-shrub") { auto as_shrub_tree = dynamic_cast(draw_tree.get()); @@ -189,7 +191,7 @@ std::vector extract_bsp_from_level(const ObjectFileDB extract_collide_frags(as_collide_frags, all_ties, fmt::format("{}-{}-collide", dgo_name, i++), level_data, false); } else { - // fmt::print(" unsupported tree {}\n", draw_tree->my_type()); + lg::print(" unsupported tree {}\n", draw_tree->my_type()); } } level_data.level_name = level_name; @@ -228,10 +230,10 @@ void extract_common(const ObjectFileDB& db, auto compressed = compression::compress_zstd(ser.get_save_result().first, ser.get_save_result().second); - fmt::print("stats for {}\n", dgo_name); + lg::info("stats for {}", dgo_name); print_memory_usage(tfrag_level, ser.get_save_result().second); - fmt::print("compressed: {} -> {} ({:.2f}%)\n", ser.get_save_result().second, compressed.size(), - 100.f * compressed.size() / ser.get_save_result().second); + lg::info("compressed: {} -> {} ({:.2f}%)", ser.get_save_result().second, compressed.size(), + 100.f * compressed.size() / ser.get_save_result().second); file_util::write_binary_file( output_folder / fmt::format("{}.fr3", dgo_name.substr(0, dgo_name.length() - 4)), compressed.data(), compressed.size()); @@ -265,10 +267,10 @@ void extract_from_level(const ObjectFileDB& db, level_data.serialize(ser); auto compressed = compression::compress_zstd(ser.get_save_result().first, ser.get_save_result().second); - fmt::print("stats for {}\n", dgo_name); + lg::info("stats for {}", dgo_name); print_memory_usage(level_data, ser.get_save_result().second); - fmt::print("compressed: {} -> {} ({:.2f}%)\n", ser.get_save_result().second, compressed.size(), - 100.f * compressed.size() / ser.get_save_result().second); + lg::info("compressed: {} -> {} ({:.2f}%)", ser.get_save_result().second, compressed.size(), + 100.f * compressed.size() / ser.get_save_result().second); file_util::write_binary_file( output_folder / fmt::format("{}.fr3", dgo_name.substr(0, dgo_name.length() - 4)), compressed.data(), compressed.size()); diff --git a/decompiler/level_extractor/extract_merc.cpp b/decompiler/level_extractor/extract_merc.cpp index 73c1873c58..74a01f65d0 100644 --- a/decompiler/level_extractor/extract_merc.cpp +++ b/decompiler/level_extractor/extract_merc.cpp @@ -1,5 +1,6 @@ #include "extract_merc.h" +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "common/util/colors.h" @@ -198,8 +199,8 @@ void update_mode_from_alpha1(GsAlpha reg, DrawMode& mode) { else { // unsupported blend: a 0 b 1 c 0 d 2 is this part of generic? - fmt::print("unsupported blend: a {} b {} c {} d {}\n", (int)reg.a_mode(), (int)reg.b_mode(), - (int)reg.c_mode(), (int)reg.d_mode()); + lg::warn("unsupported blend: a {} b {} c {} d {}", (int)reg.a_mode(), (int)reg.b_mode(), + (int)reg.c_mode(), (int)reg.d_mode()); mode.set_alpha_blend(DrawMode::AlphaBlend::SRC_DST_SRC_DST); // ASSERT(false); } @@ -297,8 +298,8 @@ void handle_frag(const std::string& debug_name, MercMemory& memory) { (void)frag_ctrl; (void)debug_name; - // fmt::print("handling frag: {}\n", debug_name); - // fmt::print("{}\n", frag.print()); + // lg::print("handling frag: {}\n", debug_name); + // lg::print("{}\n", frag.print()); // we'll iterate through the lump and rgba data int lump_ptr = 0; // vertex data starts at the beginning of "lump" @@ -490,7 +491,7 @@ void handle_frag(const std::string& debug_name, // dst1_adc = dst0_adc && (mat0_flag >= 0); // dst0_adc = !dst0_adc; // dst1_adc = !dst1_adc; - // fmt::print("{}\n", dst1_adc); + // lg::print("{}\n", dst1_adc); } // write to two spots in memory @@ -510,7 +511,7 @@ void handle_frag(const std::string& debug_name, memory.memory.at(vtx.dst1 + 2).kind = MercOutputQuadword::Kind::INVALID; /* - fmt::print("place vertex {} @ {} {}: {} (adc {} {}) {}\n", current_vtx_idx, vtx.dst0, vtx.dst1, + lg::print("place vertex {} @ {} {}: {} (adc {} {}) {}\n", current_vtx_idx, vtx.dst0, vtx.dst1, vtx.pos.to_string_aligned(), dst0_adc, dst1_adc, mat1_flag); */ @@ -542,7 +543,7 @@ std::vector index_list_from_packet(u32 vtx_ptr, u32 nloop, const MercMemory prev_vtx = vtx_mem.vtx_idx; } else { // missing vertex! - fmt::print("MISSING VERTEX at {}\n", vtx_ptr); + lg::warn("MISSING VERTEX at {}", vtx_ptr); result.push_back(UINT32_MAX); } @@ -759,7 +760,7 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect, u32 srcdst_ptr = frag.header.srcdest_off; for (u32 sci = 0; sci < frag.header.samecopy_cnt; sci++) { auto& cpy = frag.unsigned_four_including_header[srcdst_ptr]; - // fmt::print("sci: {}\n", cpy.to_string_hex_byte()); + // lg::print("sci: {}\n", cpy.to_string_hex_byte()); u32 src = cpy[0]; auto& vert = merc_memories[memory_buffer_toggle].memory.at(src); u32 dst = cpy[1]; @@ -771,7 +772,7 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect, dvert.adc = !dvert.adc; } } else { - fmt::print("sc missing vert\n"); + lg::warn("sc missing vert"); dvert.kind = MercOutputQuadword::Kind::INVALID; } @@ -781,7 +782,7 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect, // "cross" copy from the other output buffer for (u32 cci = 0; cci < frag.header.crosscopy_cnt; cci++) { auto& cpy = frag.unsigned_four_including_header[srcdst_ptr]; - // fmt::print("cci: {}\n", cpy.to_string_hex_byte()); + // lg::print("cci: {}\n", cpy.to_string_hex_byte()); u32 src = cpy[0]; auto& vert = merc_memories[memory_buffer_toggle ^ 1].memory.at(src); u32 dst = cpy[1]; @@ -793,7 +794,7 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect, dvert.adc = !dvert.adc; } } else { - fmt::print("cc missing vert\n"); + lg::warn("cc missing vert"); dvert.kind = MercOutputQuadword::Kind::INVALID; } srcdst_ptr++; diff --git a/decompiler/level_extractor/extract_shrub.cpp b/decompiler/level_extractor/extract_shrub.cpp index 48daeba7c6..78c50be73c 100644 --- a/decompiler/level_extractor/extract_shrub.cpp +++ b/decompiler/level_extractor/extract_shrub.cpp @@ -2,6 +2,7 @@ #include +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" @@ -157,8 +158,8 @@ DrawSettings adgif_to_draw_mode(const AdGifData& ad, // ADGIF 0 bool weird = (u8)ad.tex0_addr != (u32)GsRegisterAddress::TEX0_1; if (weird) { - fmt::print("---------------- WEIRD: 0x{:x}\n", ad.tex0_addr); - fmt::print("i have {} verts\n", count); + lg::info("---------------- WEIRD: 0x{:x}", ad.tex0_addr); + lg::info("i have {} verts", count); } else { ASSERT(ad.tex0_data == 0 || ad.tex0_data == 0x800000000); // note: decal?? todo } @@ -171,7 +172,7 @@ DrawSettings adgif_to_draw_mode(const AdGifData& ad, u32 new_tex = remap_texture(original_tex, map); // try remapping it if (original_tex != new_tex) { - fmt::print("map from 0x{:x} to 0x{:x}\n", original_tex, new_tex); + lg::info("map from 0x{:x} to 0x{:x}", original_tex, new_tex); } // texture the texture page/texture index, and convert to a PC port texture ID u32 tpage = new_tex >> 20; @@ -181,7 +182,7 @@ DrawSettings adgif_to_draw_mode(const AdGifData& ad, auto tex = tdb.textures.find(tex_combo); ASSERT(tex != tdb.textures.end()); if (weird) { - fmt::print("tex: {}\n", tex->second.name); + lg::info("tex: {}", tex->second.name); } // ADGIF 2 @@ -251,7 +252,7 @@ ShrubProtoInfo extract_proto(const shrub_types::PrototypeBucketShrub& proto, memcpy(adgif_data.data(), frag.textures.data(), frag.textures.size()); if (frag_idx == 0 && proto.name == "vil2-cattail.mb") { - fmt::print("Skipping broken village2 thing\n"); + lg::info("Skipping broken village2 thing"); continue; } diff --git a/decompiler/level_extractor/extract_tfrag.cpp b/decompiler/level_extractor/extract_tfrag.cpp index 6e4c2dd2e3..1a45c30188 100644 --- a/decompiler/level_extractor/extract_tfrag.cpp +++ b/decompiler/level_extractor/extract_tfrag.cpp @@ -3,6 +3,7 @@ #include "common/custom_data/pack_helpers.h" #include "common/dma/dma.h" #include "common/dma/gs.h" +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/FileUtil.h" @@ -42,7 +43,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra if (as_tfrags) { for (auto& elt : as_tfrags->tfragments) { if (elt.id != start) { - fmt::print("bad frag: exp {} got {}\n", start, elt.id); + lg::error("bad frag: exp {} got {}", start, elt.id); return false; } start++; @@ -52,7 +53,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra } else if (as_nodes) { for (auto& elt : as_nodes->draw_nodes) { if (elt.id != start) { - fmt::print("bad node: exp {} got {}\n", start, elt.id); + lg::error("bad node: exp {} got {}", start, elt.id); return false; } start++; @@ -60,7 +61,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra *end = start; return true; } else { - fmt::print("bad node array type: {}\n", array->my_type()); + lg::error("bad node array type: {}", array->my_type()); return false; } } @@ -368,7 +369,7 @@ int handle_unpack_v4_16_mode1(const VifCode& code, qw[3] = row[3] + (u32)deref_ptr(dma + offset); offset += 2; - // fmt::print(" unpack rgba?: {:x} {:x} {:x} {:x}\n", qw[0], qw[1], qw[2], qw[3]); + // lg::print(" unpack rgba?: {:x} {:x} {:x} {:x}\n", qw[0], qw[1], qw[2], qw[3]); memcpy(vu_mem + (dest_qw * 16), qw, 16); } ASSERT((offset % 4) == 0); @@ -456,7 +457,7 @@ void emulate_chain(UnpackState& state, u32 max_words, const u32* start, u8* vu_m while (word < max_words) { VifCode code(start[word]); word++; - // fmt::print("{}\n", code.print()); + // lg::print("{}\n", code.print()); switch (code.kind) { case VifCode::Kind::STROW: state.row_init = true; @@ -737,7 +738,7 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, // iblez vi12, L123 // iaddi vi09, vi09, 0x1 vi09_draw_addr_book++; // on to the next chunk - // fmt::print("VI09 now {}\n", vars.vi09); + // lg::print("VI09 now {}\n", vars.vi09); // no need for new adgifs, just a new strgif. if (((s16)vi12_vert_count) > 0) { @@ -759,10 +760,10 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, // ilwr.x vi12, vi09 vi12_vert_count = mem.ilw_data(vi09_draw_addr_book, 0); // next vert count! if (DEBUG) { - fmt::print("continue with this adgif, but new strgif. next {} verts (kick zone now {})\n", - vi12_vert_count, vi06_kick_zone_ptr); + lg::debug("continue with this adgif, but new strgif. next {} verts (kick zone now {})", + vi12_vert_count, vi06_kick_zone_ptr); } - // fmt::print("didn't kick, vi12 now {}\n", vars.vi12); + // lg::print("didn't kick, vi12 now {}\n", vars.vi12); all_draws.push_back(current_draw); current_draw.verts.clear(); return false; @@ -773,10 +774,10 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, u16 vi01 = mem.ilw_data(vi09_draw_addr_book - 1, 1); // ? // ilw.z vi13, -1(vi09) vi13_adgifs = mem.ilw_data(vi09_draw_addr_book - 1, 2); // load new adgif addr - // fmt::print("VI09 loads: {} {}\n", m_ptrs.vi01, vars.vi13); + // lg::print("VI09 loads: {} {}\n", m_ptrs.vi01, vars.vi13); // ibeq vi00, vi12, L126 // ilwr.x vi14, vi10 - // fmt::print("val is {}: {}\n", vars.vi10, ilw_kick_zone(vars.vi10, 0)); + // lg::print("val is {}: {}\n", vars.vi10, ilw_kick_zone(vars.vi10, 0)); // vars.vi14 = mem.ilw_kick_zone(vi10_start_of_vert_kick_data, 0); old vert count if (vi12_vert_count != 0) { // ibltz vi01, L124 @@ -838,10 +839,10 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, // ilwr.x vi12, vi09 vi12_vert_count = mem.ilw_data(vi09_draw_addr_book, 0); if (DEBUG) { - fmt::print("done with adgifs but not packet, now moving on to another with {}\n", - (s16)vi12_vert_count); + lg::debug("done with adgifs but not packet, now moving on to another with {}", + (s16)vi12_vert_count); } - // fmt::print("didn't kick 2, vi12 now {}\n", vars.vi12); + // lg::print("didn't kick 2, vi12 now {}\n", vars.vi12); return false; } @@ -857,7 +858,7 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, // ibgez vi13, L125 // iswr.x vi14, vi10 - // fmt::print("kick zone store: {}\n", vars.vi14); + // lg::print("kick zone store: {}\n", vars.vi14); // store_u32_kick_zone(vars.vi14, vars.vi10, 0); set eop. if (((s16)vi13_adgifs) < 0) { // xgkick vi01 @@ -944,7 +945,7 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, // jr vi15 // ilwr.x vi12, vi09 vi12_vert_count = mem.ilw_data(vi09_draw_addr_book, 0); - // fmt::print("did kick, vi12 now {}\n", vars.vi12); + // lg::print("did kick, vi12 now {}\n", vars.vi12); return false; } @@ -960,10 +961,10 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, all_draws.push_back(current_draw); current_draw.verts.clear(); // iadd vi14, vi14, vi11 - // fmt::print("before add: {}\n", vars.vi14); + // lg::print("before add: {}\n", vars.vi14); // vars.vi14 += vars.vi11; // iswr.x vi14, vi10 - // fmt::print("kick zone store: {}\n", vars.vi14); + // lg::print("kick zone store: {}\n", vars.vi14); // store_u32_kick_zone(vars.vi14, vars.vi10, 0); // lq.xyzw vf04, 664(vi00) // todo don't think I needed that load of ambient @@ -978,7 +979,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra VuMemWrapper& mem, TFragColorUnpack& color_indices, TFragExtractStats* /*stats*/) { - // fmt::print("tfrag exec. offset of colors = {}\n", color_indices.unpack_qw_addr); + // lg::print("tfrag exec. offset of colors = {}\n", color_indices.unpack_qw_addr); std::vector all_draws; TFragDraw current_draw; @@ -990,7 +991,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ilw.w vi08, 4(vi14) | nop u16 vi08_adgif_base = mem.ilw_data(4 + vi14, 3); // is an address, v4/32 unpack. - // fmt::print("------------- VI08 init: {}\n", vars.vi08); + // lg::print("------------- VI08 init: {}\n", vars.vi08); // ilw.z vi09, 4(vi14) | nop u16 vi09_draw_addr_book = mem.ilw_data(4 + vi14, 2); // is an input address, v4/8 unpack (seems small?) @@ -999,17 +1000,17 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra 3 + vi14, 1); // is an input address (v4-8 with strow). a list of addresses for v4-16's with strow - // fmt::print("-------VI03 init: {}\n", vars.vi03); + // lg::print("-------VI03 init: {}\n", vars.vi03); if (DEBUG) { // small, like 9, 54, 66 level_tools::PrintSettings settings; settings.print_tfrag = true; - fmt::print("{}\n", frag.print(settings, 0)); - fmt::print("ints: {} {} {}\n", vi08_adgif_base, vi09_draw_addr_book, vi03_vert_addr_book); + lg::debug("{}", frag.print(settings, 0)); + lg::debug("ints: {} {} {}", vi08_adgif_base, vi09_draw_addr_book, vi03_vert_addr_book); } - // fmt::print("vi09: #x{:x} ({})\n", vars.vi09, vars.vi14); + // lg::print("vi09: #x{:x} ({})\n", vars.vi09, vars.vi14); // fcset 0x0 | nop // iaddi vi07, vi00, -0x1 | nop @@ -1035,7 +1036,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra ASSERT(vi03_vert_addr_book < 328); // should be a buffer 0 addr u16 vi02_pre_vtx_ptr = mem.ilw_data(vi03_vert_addr_book, 0); // is an addr? v4/16 with strom if (DEBUG) { - fmt::print("vi02-warmup 0: {}\n", vi02_pre_vtx_ptr); + lg::debug("vi02-warmup 0: {}", vi02_pre_vtx_ptr); } // lq.xyzw vf09, 8(vi14) | nop @@ -1052,8 +1053,8 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra float vf28_w_addr_of_next_vtx = vf28_load_temp.w(); // addr, of v3-32, with 2, 1 if (DEBUG) { - fmt::print("vf28 load 0: x_f {} y_f {} z_u32 {}\n", vf28_x, vf28_y, - float_2_u32(vf28_w_addr_of_next_vtx)); + lg::debug("vf28 load 0: x_f {} y_f {} z_u32 {}", vf28_x, vf28_y, + float_2_u32(vf28_w_addr_of_next_vtx)); }; // they rotate vi06 to alternate the kick zone buffer. @@ -1065,13 +1066,13 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ilwr.x vi12, vi09 | nop u16 vi12_vert_count = mem.ilw_data(vi09_draw_addr_book, 0); // some sort of counter? if (DEBUG) { - fmt::print("vi12: 0x{:x}\n", vi12_vert_count); + lg::debug("vi12: 0x{:x}", vi12_vert_count); } // ilwr.z vi13, vi09 | nop u16 vi13_adgifs = mem.ilw_data(vi09_draw_addr_book, 2); if (DEBUG) { - fmt::print("vi13: 0x{:x}\n", vi13_adgifs); + lg::debug("vi13: 0x{:x}", vi13_adgifs); } // mtir vi04, vf28.w | subz.xyz vf24, vf28, vf02 @@ -1092,7 +1093,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ilwr.y vi02, vi03 | nop vi02_pre_vtx_ptr = mem.ilw_data(vi03_vert_addr_book, 1); if (DEBUG) { - fmt::print("vi02-warmup 1: {}\n", vi02_pre_vtx_ptr); + lg::debug("vi02-warmup 1: {}", vi02_pre_vtx_ptr); } // vertex load @@ -1119,9 +1120,9 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vf12_vtx_pos_0 = itof0(vf12_vtx_pos_0); if (DEBUG) { - fmt::print("vf28 load 0: x_f {} y_f {} w_u32 {}\n", vf28_x, vf28_y, - float_2_u32(vf28_w_addr_of_next_vtx)); - fmt::print("vtx w0: {}\n", vf12_vtx_pos_0.to_string_aligned()); + lg::debug("vf28 load 0: x_f {} y_f {} w_u32 {}", vf28_x, vf28_y, + float_2_u32(vf28_w_addr_of_next_vtx)); + lg::debug("vtx w0: {}", vf12_vtx_pos_0.to_string_aligned()); }; // mfir.w vf24, vi06 | nop @@ -1168,7 +1169,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ilwr.z vi02, vi03 | nop vi02_pre_vtx_ptr = mem.ilw_data(vi03_vert_addr_book, 2); if (DEBUG) { - fmt::print("pre-vtx-vi02-warmup 2: {}\n", vi02_pre_vtx_ptr); + lg::debug("pre-vtx-vi02-warmup 2: {}", vi02_pre_vtx_ptr); } // lq.xyzw vf13, 0(vi04) | madday.xyzw ACC, vf07, vf12 @@ -1234,7 +1235,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ilwr.w vi02, vi03 | mul.xyz vf24, vf24, Q vi02_pre_vtx_ptr = mem.ilw_data(vi03_vert_addr_book, 3); if (DEBUG) { - fmt::print("pre-vtx-vi02-warmup 3: {}\n", vi02_pre_vtx_ptr); + lg::debug("pre-vtx-vi02-warmup 3: {}", vi02_pre_vtx_ptr); } // lq.xyzw vf14, 0(vi04) | madday.xyzw ACC, vf07, vf13 @@ -1355,12 +1356,12 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ibeq vi05, vi06, L133 | miniz.w vf13, vf13, vf01 bool take_branch = (vi05_end_of_vert_kick_data == vi06_kick_zone_ptr); - // fmt::print("L129 prog: {} {}\n", vars.vi05, vars.vi06_kick_zone_ptr); + // lg::print("L129 prog: {} {}\n", vars.vi05, vars.vi06_kick_zone_ptr); // vars.vf13_root_pos_1.w() = std::min(vars.vf13_root_pos_1.w(), m_tfrag_data.fog.z()); // sqi.xyzw vf12, vi06 | clipw.xyz vf17, vf17 vertex_pipeline[0].pre_cam_trans_pos = vf12_vtx_pos_0; // todo move down? - // fmt::print("C: vf12 store: {}\n", int_vec_debug(vars.vf12_root_pos_0)); + // lg::print("C: vf12 store: {}\n", int_vec_debug(vars.vf12_root_pos_0)); current_draw.verts.push_back(vertex_pipeline[0]); vi06_kick_zone_ptr++; // m_clip_and_3ffff = clip_xyz_plus_minus(vars.vf17_scaled_pos_1); @@ -1426,14 +1427,14 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vertex_pipeline[1].stq[0] = vf25_stq_1[0]; vertex_pipeline[1].stq[1] = vf25_stq_1[1]; vertex_pipeline[1].stq[2] = vf25_stq_1[2]; - // fmt::print("A: vf25 store: {}\n", vars.vf25.to_string_aligned()); + // lg::print("A: vf25 store: {}\n", vars.vf25.to_string_aligned()); vi06_kick_zone_ptr++; // vf14 += m_tfrag_data.hvdf_offset; // sqi.xyzw vf21, vi06 | ftoi4.xyzw vf13, vf13 // store_vector_kick_zone(vars.vi06_kick_zone_ptr, vars.vf21); vertex_pipeline[1].rgba = vf21_vtx_rgba_1; - // fmt::print("B: vf21 store: {}\n", int_vec_debug(vars.vf21)); + // lg::print("B: vf21 store: {}\n", int_vec_debug(vars.vf21)); vi06_kick_zone_ptr++; // vars.vf13_root_pos_1 = ftoi4(vars.vf13_root_pos_1); @@ -1462,7 +1463,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // store_vector_kick_zone(vars.vi06_kick_zone_ptr, vars.vf13_root_pos_1); vertex_pipeline[1].pre_cam_trans_pos = vf13_vtx_pos_1; current_draw.verts.push_back(vertex_pipeline[1]); - // fmt::print("C: vf13 store: {}\n", int_vec_debug(vars.vf13_root_pos_1)); + // lg::print("C: vf13 store: {}\n", int_vec_debug(vars.vf13_root_pos_1)); vi06_kick_zone_ptr++; // m_clip_and_3ffff = clip_xyz_plus_minus(vars.vf18_scaled_pos_2); @@ -1517,7 +1518,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // lq.xyzw vf21, 1(vi04) | maddz.xyzw vf12, vf08, vf12 vf21_vtx_rgba_1 = color_indices.load_color_idx(vi04_vtx_ptr + 1); - // fmt::print("vf21 load from: {}\n", vars.vi04 + 1); + // lg::print("vf21 load from: {}\n", vars.vi04 + 1); // vars.vf12_root_pos_0 = m_acc + in.vf08_cam_mat_z * vars.vf12_root_pos_0.z(); // sqi.xyzw vf26, vi06 | add.xyzw vf15, vf15, vf10 @@ -1525,14 +1526,14 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vertex_pipeline[2].stq[0] = vf26_stq_2[0]; vertex_pipeline[2].stq[1] = vf26_stq_2[1]; vertex_pipeline[2].stq[2] = vf26_stq_2[2]; - // fmt::print("A: vf26 store: {}\n", vars.vf26.to_string_aligned()); + // lg::print("A: vf26 store: {}\n", vars.vf26.to_string_aligned()); vi06_kick_zone_ptr++; // vars.vf15_loop_pos_1 += m_tfrag_data.hvdf_offset; // sqi.xyzw vf22, vi06 | ftoi4.xyzw vf14, vf14 // store_vector_kick_zone(vars.vi06_kick_zone_ptr, vars.vf22); vertex_pipeline[2].rgba = vf22_vtx_rgba_2; - // fmt::print("B: vf22 store: {}\n", int_vec_debug(vars.vf22)); + // lg::print("B: vf22 store: {}\n", int_vec_debug(vars.vf22)); vi06_kick_zone_ptr++; // vars.vf14_loop_pos_0 = ftoi4(vars.vf14_loop_pos_0); @@ -1560,7 +1561,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vertex_pipeline[2].pre_cam_trans_pos = vf14_vtx_pos_2; current_draw.verts.push_back(vertex_pipeline[2]); - // fmt::print("C: vf14 store: {}\n", int_vec_debug(vars.vf14_loop_pos_0)); + // lg::print("C: vf14 store: {}\n", int_vec_debug(vars.vf14_loop_pos_0)); vi06_kick_zone_ptr++; // m_clip_and_3ffff = clip_xyz_plus_minus(vars.vf19_scaled_pos_3); @@ -1623,7 +1624,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vertex_pipeline[3].stq[0] = vf27_vtx_stq_3[0]; vertex_pipeline[3].stq[1] = vf27_vtx_stq_3[1]; vertex_pipeline[3].stq[2] = vf27_vtx_stq_3[2]; - // fmt::print("A: vf27 store: {}\n", vars.vf27.to_string_aligned()); + // lg::print("A: vf27 store: {}\n", vars.vf27.to_string_aligned()); vi06_kick_zone_ptr++; // vars.vf12_root_pos_0 += m_tfrag_data.hvdf_offset; @@ -1631,7 +1632,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // store_vector_kick_zone(vars.vi06_kick_zone_ptr, vars.vf23); vertex_pipeline[3].rgba = vf23_vtx_rgba_3; - // fmt::print("B: vf23 store: {}\n", int_vec_debug(vars.vf23)); + // lg::print("B: vf23 store: {}\n", int_vec_debug(vars.vf23)); vi06_kick_zone_ptr++; // vars.vf15_loop_pos_1 = ftoi4(vars.vf15_loop_pos_1); @@ -1652,7 +1653,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ibne vi05, vi06, L128 | miniz.w vf12, vf12, vf01 take_branch = (vi05_end_of_vert_kick_data != vi06_kick_zone_ptr); - // fmt::print("kick check: {} {}\n", vars.vi05, vars.vi06_kick_zone_ptr); + // lg::print("kick check: {} {}\n", vars.vi05, vars.vi06_kick_zone_ptr); // vars.vf12_root_pos_0.w() = std::min(vars.vf12_root_pos_0.w(), m_tfrag_data.fog.z()); // sqi.xyzw vf15, vi06 | clipw.xyz vf16, vf16 @@ -1660,7 +1661,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vertex_pipeline[3].pre_cam_trans_pos = vf15_vtx_pos_3; current_draw.verts.push_back(vertex_pipeline[3]); vi06_kick_zone_ptr++; - // fmt::print("C: vf15 store: {}\n", int_vec_debug(vars.vf15_loop_pos_1)); + // lg::print("C: vf15 store: {}\n", int_vec_debug(vars.vf15_loop_pos_1)); // m_clip_and_3ffff = clip_xyz_plus_minus(vars.vf16_scaled_pos_0); if (!take_branch) { @@ -1815,7 +1816,7 @@ u32 remap_texture(u32 original, const std::vector& ma auto masked = original & 0xffffff00; for (auto& t : map) { if (t.original_texid == masked) { - fmt::print("OKAY! remapped!\n"); + lg::info("OKAY! remapped!"); return t.new_texid | 20; } } @@ -1874,6 +1875,16 @@ void process_draw_mode(std::vector& all_draws, mode.set_depth_test(GsTest::ZTest::GEQUAL); // :ztst (gs-ztest greater-equal) mode.enable_ab(); break; + case tfrag3::TFragmentTreeKind::WATER: + // (new 'static 'gs-test :ate #x1 :afail #x1 :zte #x1 :ztst (gs-ztest greater-equal)) + mode.enable_at(); + mode.set_alpha_test(DrawMode::AlphaTest::NEVER); + mode.set_alpha_fail(GsTest::AlphaFail::FB_ONLY); + mode.set_aref(0); + mode.enable_zt(); + mode.set_depth_test(GsTest::ZTest::GEQUAL); + mode.enable_ab(); + break; default: ASSERT(false); } @@ -1888,7 +1899,7 @@ void process_draw_mode(std::vector& all_draws, update_mode_from_test1(val, mode); break; case GsRegisterAddress::TEX0_1: - ASSERT(val == 0); + // ASSERT(val == 0); HACK jak 2 sets this. break; case GsRegisterAddress::TEX1_1: ASSERT(val == 0x120); // some flag @@ -1896,11 +1907,11 @@ void process_draw_mode(std::vector& all_draws, u32 original_tex = draw.get_adgif_upper(ad_idx); u32 new_tex = remap_texture(original_tex, map); if (original_tex != new_tex) { - fmt::print("map from 0x{:x} to 0x{:x}\n", original_tex, new_tex); + lg::info("map from 0x{:x} to 0x{:x}", original_tex, new_tex); } u32 tpage = new_tex >> 20; u32 tidx = (new_tex >> 8) & 0b1111'1111'1111; - // fmt::print("texture: {} : {}\n", tpage, tidx); + // lg::print("texture: {} : {}\n", tpage, tidx); draw.tpage = tpage; draw.tex_in_page = tidx; } @@ -1913,8 +1924,6 @@ void process_draw_mode(std::vector& all_draws, ASSERT_MSG(false, fmt::format("clamp: 0x{:x}", val)); } - // this isn't quite right, but I'm hoping it's enough! - // mode.set_clamp_enable(val == 0b101); mode.set_clamp_s_enable(val & 0b1); mode.set_clamp_t_enable(val & 0b100); break; @@ -1922,8 +1931,8 @@ void process_draw_mode(std::vector& all_draws, update_mode_from_alpha1(val, mode); break; default: - fmt::print("Address {} ({}) is not supported in process_draw_mode\n", - register_address_name(addr), ad_idx); + lg::info("Address {} ({}) is not supported in process_draw_mode", + register_address_name(addr), ad_idx); } } draw.mode = mode; @@ -1975,7 +1984,7 @@ std::map> make_draw_groups(std::vector& } } - // fmt::print(" grouped to get {} draw calls\n", dc); + // lg::print(" grouped to get {} draw calls\n", dc); return result; } @@ -2160,6 +2169,10 @@ void extract_tfrag(const level_tools::DrawableTreeTfrag* tree, this_tree.kind = tfrag3::TFragmentTreeKind::LOWRES; } else if (tree->my_type() == "drawable-tree-trans-tfrag") { this_tree.kind = tfrag3::TFragmentTreeKind::TRANS; + } else if (tree->my_type() == "drawable-tree-tfrag-trans") { + this_tree.kind = tfrag3::TFragmentTreeKind::TRANS; + } else if (tree->my_type() == "drawable-tree-tfrag-water") { + this_tree.kind = tfrag3::TFragmentTreeKind::WATER; } else { ASSERT_MSG(false, fmt::format("unknown tfrag tree kind: {}", tree->my_type())); } @@ -2180,7 +2193,7 @@ void extract_tfrag(const level_tools::DrawableTreeTfrag* tree, } bool ok = verify_node_indices(tree); ASSERT(ok); - // fmt::print(" tree has {} arrays and {} tfragments\n", tree->length, + // lg::print(" tree has {} arrays and {} tfragments\n", tree->length, // as_tfrag_array->length); auto vis_nodes = extract_vis_data(tree, as_tfrag_array->tfragments.front().id); diff --git a/decompiler/level_extractor/extract_tie.cpp b/decompiler/level_extractor/extract_tie.cpp index 45eb884db8..a80d551698 100644 --- a/decompiler/level_extractor/extract_tie.cpp +++ b/decompiler/level_extractor/extract_tie.cpp @@ -2,6 +2,7 @@ #include +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" @@ -45,7 +46,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra if (as_tie_instances) { for (auto& elt : as_tie_instances->instances) { if (elt.id != start) { - fmt::print("bad inst: exp {} got {}\n", start, elt.id); + lg::error("bad inst: exp {} got {}", start, elt.id); return false; } start++; @@ -55,7 +56,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra } else if (as_nodes) { for (auto& elt : as_nodes->draw_nodes) { if (elt.id != start) { - fmt::print("bad node: exp {} got {}\n", start, elt.id); + lg::error("bad node: exp {} got {}", start, elt.id); return false; } start++; @@ -63,7 +64,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra *end = start; return true; } else { - fmt::print("bad node array type: {}\n", array->my_type()); + lg::error("bad node array type: {}", array->my_type()); return false; } } @@ -550,7 +551,7 @@ void update_proto_info(std::vector* out, // try remapping it u32 new_tex = remap_texture(original_tex, map); if (original_tex != new_tex) { - fmt::print("map from 0x{:x} to 0x{:x}\n", original_tex, new_tex); + lg::info("map from 0x{:x} to 0x{:x}", original_tex, new_tex); } // texture the texture page/texture index, and convert to a PC port texture ID u32 tpage = new_tex >> 20; @@ -565,7 +566,7 @@ void update_proto_info(std::vector* out, memcpy(&adgif.second_w, &gif_data.at(16 * (tex_idx * 5 + 1) + 12), 4); // todo: figure out if this matters. maybe this is decal? if (ra_tex0_val == 0x800000000) { - // fmt::print("texture {} in {} has weird tex setting\n", tex->second.name, proto.name); + // lg::print("texture {} in {} has weird tex setting\n", tex->second.name, proto.name); } // mipmap settings. we ignore, but get the hidden value @@ -784,7 +785,7 @@ void emulate_tie_prototype_program(std::vector& protos) { // vi06 will be one of our gifbufs we can use. u16 vi06; memcpy(&vi06, &vf_gifbufs.y(), sizeof(u16)); - // fmt::print("vi06: {}\n", vi06); + // lg::print("vi06: {}\n", vi06); ASSERT(vi06 == 470 || vi06 == 286 || vi06 == 654); // should be one of the three gifbufs. // lqi.xyzw vf02, vi_point_ptr | suby.xz vf_gifbufs, vf_gifbufs, vf_gifbufs @@ -801,7 +802,7 @@ void emulate_tie_prototype_program(std::vector& protos) { // and vi05 is our other buffer. u16 vi05; memcpy(&vi05, &vf_gifbufs.x(), sizeof(u16)); - // fmt::print("vi05: {}\n", vi05); + // lg::print("vi05: {}\n", vi05); // check that we understand the buffer rotation. if (vi06 == 470) { ASSERT(vi05 == 286); @@ -831,7 +832,7 @@ void emulate_tie_prototype_program(std::vector& protos) { // store adgifs in one buffer. frag.prog_info.adgif_offset_in_gif_buf_qw.push_back(vi03 - vi05); - // fmt::print("adgifs at offset {}\n", frag.prog_info.adgif_offset_in_gif_buf_qw.back()); + // lg::print("adgifs at offset {}\n", frag.prog_info.adgif_offset_in_gif_buf_qw.back()); // sqi.xyzw vf01, vi03 | nop // sqi.xyzw vf02, vi03 | nop // sqi.xyzw vf03, vi03 | nop @@ -889,7 +890,7 @@ void emulate_tie_prototype_program(std::vector& protos) { // u16 vf04_w = frag.other_gif_data.at(11); ASSERT(vi_ind >= frag.adgifs.size()); // at least 1 draw per shader. ASSERT(vi_ind < 1000); // check for insane value. - // fmt::print("got: {}, other size: {}\n", vi_ind, frag.other_gif_data.size()); + // lg::print("got: {}, other size: {}\n", vi_ind, frag.other_gif_data.size()); // iaddi vi_point_ptr, vi_point_ptr, -0x2 | subw.w vf07, vf07, vf07 vi_point_ptr -= 2; @@ -910,7 +911,7 @@ void emulate_tie_prototype_program(std::vector& protos) { vi04 = frag.ilw_other_gif(vi_point_ptr, 2); // offset - // fmt::print("[{}] 7: {} 8: {} 4: {}, for {}\n", vi_point_ptr, vi07, vi08, vi04, vi_ind - 1); + // lg::print("[{}] 7: {} 8: {} 4: {}, for {}\n", vi_point_ptr, vi07, vi08, vi04, vi_ind - 1); // iaddi vi_ind, vi_ind, -0x1 | nop vi_ind--; @@ -934,7 +935,7 @@ void emulate_tie_prototype_program(std::vector& protos) { vi_ind--; // dec remaining tag // sq.xyzw vf07, 0(vi03) | nop info.address = vi03 - vi05; // store the template. but this doesn't have size or anything. - // fmt::print("strgif at {}, {}\n", vi03, vi04); + // lg::print("strgif at {}, {}\n", vi03, vi04); // iswr.x vi07, vi03 | nop info.nloop = vi07 & 0x7fff; @@ -961,7 +962,7 @@ void emulate_tie_prototype_program(std::vector& protos) { // ibne vi00, vi_ind, L3 | nop // lq.xyz vf07, 967(vi08) | nop next_mode = vi08; - // fmt::print("[{}] 7: {} 8: {} 4: {}, for {}\n", vi_point_ptr, vi07, vi08, vi04, vi_ind); + // lg::print("[{}] 7: {} 8: {} 4: {}, for {}\n", vi_point_ptr, vi07, vi08, vi04, vi_ind); frag.prog_info.str_gifs.push_back(info); } @@ -1017,13 +1018,13 @@ void emulate_tie_prototype_program(std::vector& protos) { vf05 = muli64_xyz(vf05); // mtir vi07, vf04.y | itof0.xyzw vf06, vf06 vi07 = vf04_y; - // fmt::print("bonus points: {}\n", vi07); + // lg::print("bonus points: {}\n", vi07); vf06 = itof0(vf06); // L5: Vector4f vf07; top_of_points_loop: - // fmt::print("{}/{}\n", vi05, vi06); + // lg::print("{}/{}\n", vi05, vi06); // lqi.xyzw vf07, vi05 | itof12.xyz vf16, vf16 vf07 = frag.lq_points_allow_past_end(vi05); vi05++; @@ -1278,10 +1279,10 @@ void emulate_tie_prototype_program(std::vector& protos) { void debug_print_info(const std::vector& out) { for (auto& proto : out) { - fmt::print("[{:40}]\n", proto.name); - fmt::print(" generic: {}\n", proto.uses_generic); - fmt::print(" use count: {}\n", proto.instances.size()); - fmt::print(" stiffness: {}\n", proto.stiffness); + lg::debug("[{:40}]", proto.name); + lg::debug(" generic: {}", proto.uses_generic); + lg::debug(" use count: {}", proto.instances.size()); + lg::debug(" stiffness: {}", proto.stiffness); } } @@ -1379,7 +1380,7 @@ void emulate_tie_instance_program(std::vector& protos) { // iadd vi_tgt_bp2_ptr, vi_tgt_bp2_ptr, vi01 | nop tgt_bp2_ptr += vi01; - // fmt::print("b tgts: {} {}\n", tgt_bp1_ptr, tgt_bp2_ptr); + // lg::print("b tgts: {} {}\n", tgt_bp1_ptr, tgt_bp2_ptr); // lqi.xyzw vf_vtx2, vi_point_ptr | mul.xyz vf_pos02, vf_pos02, Q // div Q, vf00.w, vf_pos13.w | mul.xyz vf_tex0, vf_tex0, Q // mtir vi_ind, vf_inds.z | addx.w vtx_0, vtx_0, vf_gifbufs @@ -1388,13 +1389,13 @@ void emulate_tie_instance_program(std::vector& protos) { // iadd vi_tgt_ip2_ptr, vi_tgt_ip2_ptr, vi01 | madday.xyzw ACC, vf_mtx1, vf_vtx2 tgt_ip1_ptr += vi01; tgt_ip2_ptr += vi01; - // fmt::print("i tgts: {} {}\n", tgt_ip1_ptr, tgt_ip2_ptr); + // lg::print("i tgts: {} {}\n", tgt_ip1_ptr, tgt_ip2_ptr); // lq.xyzw vf_mtx3, 838(vi_ind) | ftoi4.xyz vf_res02, vf_pos02 // ibeq vi_tgt_bp1_ptr, vi_dest_ptr, L40 | maddz.xyzw vf_pos02, vf_clr1, vf_vtx2 // iadd vi_kick_addr, vi_kick_addr, vi01 | nop kick_addr += vi01; if (tgt_bp1_ptr == dest_ptr) { - fmt::print("DRAW FINISH 1 (no points)\n"); + lg::info("DRAW FINISH 1 (no points)"); goto program_end; } @@ -1485,7 +1486,7 @@ void emulate_tie_instance_program(std::vector& protos) { float vtx_w = vert_pos.w() + frag.prog_info.gifbufs.x(); dest_ptr = float_to_u16(vtx_w); auto tex_coord = frag.lq_points(point_ptr); - // fmt::print("texw: [{}] {}\n", point_ptr, tex_coord.w()); + // lg::print("texw: [{}] {}\n", point_ptr, tex_coord.w()); point_ptr++; float tex_w = tex_coord.w() + frag.prog_info.gifbufs.x(); u16 dest2_ptr = float_to_u16(tex_w); @@ -1499,7 +1500,7 @@ void emulate_tie_instance_program(std::vector& protos) { vertex_info.tex.y() = tex_coord.y(); vertex_info.tex.z() = tex_coord.z(); - // fmt::print("double draw: {} {}\n", dest_ptr, dest2_ptr); + // lg::print("double draw: {} {}\n", dest_ptr, dest2_ptr); bool inserted = frag.vertex_by_dest_addr.insert({(u32)dest_ptr, vertex_info}).second; ASSERT(inserted); @@ -1974,8 +1975,8 @@ void update_mode_from_alpha1(u64 val, DrawMode& mode) { } else { - fmt::print("unsupported blend: a {} b {} c {} d {}\n", (int)reg.a_mode(), (int)reg.b_mode(), - (int)reg.c_mode(), (int)reg.d_mode()); + lg::error("unsupported blend: a {} b {} c {} d {}", (int)reg.a_mode(), (int)reg.b_mode(), + (int)reg.c_mode(), (int)reg.d_mode()); mode.set_alpha_blend(DrawMode::AlphaBlend::SRC_DST_SRC_DST); ASSERT(false); } @@ -2294,7 +2295,8 @@ void extract_tie(const level_tools::DrawableTreeInstanceTie* tree, const std::vector& tex_map, const TextureDB& tex_db, tfrag3::Level& out, - bool dump_level) { + bool dump_level, + GameVersion version) { for (int geo = 0; geo < GEOM_MAX; ++geo) { tfrag3::TieTree this_tree; @@ -2335,7 +2337,9 @@ void extract_tie(const level_tools::DrawableTreeInstanceTie* tree, auto info = collect_instance_info(as_instance_array, &tree->prototypes.prototype_array_tie.data, geo); update_proto_info(&info, tex_map, tex_db, tree->prototypes.prototype_array_tie.data, geo); - check_wind_vectors_zero(info, tree->prototypes.wind_vectors); + if (version != GameVersion::Jak2) { + check_wind_vectors_zero(info, tree->prototypes.wind_vectors); + } // determine draws from VU program emulate_tie_prototype_program(info); emulate_tie_instance_program(info); diff --git a/decompiler/level_extractor/extract_tie.h b/decompiler/level_extractor/extract_tie.h index 6429a775ee..c64101f57a 100644 --- a/decompiler/level_extractor/extract_tie.h +++ b/decompiler/level_extractor/extract_tie.h @@ -14,5 +14,6 @@ void extract_tie(const level_tools::DrawableTreeInstanceTie* tree, const std::vector& tex_map, const TextureDB& tex_db, tfrag3::Level& out, - bool dump_level); + bool dump_level, + GameVersion version); } diff --git a/decompiler/level_extractor/tfrag_tie_fixup.cpp b/decompiler/level_extractor/tfrag_tie_fixup.cpp index 3e2f93c80b..3bd89bd81c 100644 --- a/decompiler/level_extractor/tfrag_tie_fixup.cpp +++ b/decompiler/level_extractor/tfrag_tie_fixup.cpp @@ -4,6 +4,7 @@ #include #include +#include "common/log/log.h" #include "common/math/Vector.h" #include "common/util/Assert.h" @@ -246,7 +247,7 @@ void build_graph(std::vector& nodes, int group_a = info_a.source_group; int group_b = info_b.source_group; if (info_a.source_group == info_b.source_group) { - fmt::print("duplicate edge in group!\n"); // ?? + lg::print("duplicate edge in group!\n"); // ?? continue; } @@ -453,4 +454,4 @@ void fixup_and_unstrip_tfrag_tie(const std::vector& stripped_indices, // Part 7 make_final_indices(groups, unstripped); -} \ No newline at end of file +} diff --git a/decompiler/main.cpp b/decompiler/main.cpp index e1c63afddc..e24f8fa579 100644 --- a/decompiler/main.cpp +++ b/decompiler/main.cpp @@ -69,7 +69,7 @@ int main(int argc, char** argv) { in_folder = in_folder / config.game_name; // Verify the in_folder is correct if (!exists(in_folder)) { - fmt::print("Aborting - 'in_folder' does not exist '{}'\n", in_folder.string()); + lg::error("Aborting - 'in_folder' does not exist '{}'", in_folder.string()); return 1; } @@ -80,9 +80,9 @@ int main(int argc, char** argv) { // Warning message if expected ELF isn't found, user could be using bad assets / didn't extract // the ISO properly if (!config.expected_elf_name.empty() && !exists(in_folder / config.expected_elf_name)) { - fmt::print( + lg::error( "WARNING - '{}' does not contain the expected ELF file '{}'. Was the ISO extracted " - "properly or is there a version mismatch?\n", + "properly or is there a version mismatch?", in_folder.string(), config.expected_elf_name); } @@ -90,11 +90,11 @@ int main(int argc, char** argv) { Timer decomp_timer; - fmt::print("[Mem] Top of main: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] Top of main: {} MB\n", get_peak_rss() / (1024 * 1024)); init_opcode_info(); - fmt::print("[Mem] After init: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After init: {} MB\n", get_peak_rss() / (1024 * 1024)); std::vector dgos, objs, strs; for (const auto& dgo_name : config.dgo_names) { @@ -113,13 +113,13 @@ int main(int argc, char** argv) { file_util::create_dir_if_needed(file_util::get_jak_project_dir() / "debug_out"); } - fmt::print("[Mem] After config read: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After config read: {} MB", get_peak_rss() / (1024 * 1024)); // build file database lg::info("Setting up object file DB..."); ObjectFileDB db(dgos, fs::path(config.obj_file_name_map_file), objs, strs, config); - fmt::print("[Mem] After DB setup: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After DB setup: {} MB", get_peak_rss() / (1024 * 1024)); // write out DGO file info file_util::write_text_file(out_folder / "dgo.txt", db.generate_dgo_listing()); @@ -136,10 +136,10 @@ int main(int argc, char** argv) { // process files (required for all analysis) db.process_link_data(config); - fmt::print("[Mem] After link data: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After link data: {} MB", get_peak_rss() / (1024 * 1024)); db.find_code(config); db.process_labels(); - fmt::print("[Mem] After code: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After code: {} MB", get_peak_rss() / (1024 * 1024)); // top level decompile (do this before printing asm so we get function names) if (config.find_functions) { @@ -168,7 +168,7 @@ int main(int argc, char** argv) { config.hacks.types_with_bad_inspect_methods); } - fmt::print("[Mem] After decomp: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After decomp: {} MB", get_peak_rss() / (1024 * 1024)); // write out all symbols file_util::write_text_file(out_folder / "all-syms.gc", db.dts.dump_symbol_types()); @@ -194,7 +194,7 @@ int main(int argc, char** argv) { } } - fmt::print("[Mem] After text: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After text: {} MB", get_peak_rss() / (1024 * 1024)); decompiler::TextureDB tex_db; if (config.process_tpages || config.levels_extract) { @@ -206,7 +206,7 @@ int main(int argc, char** argv) { } } - fmt::print("[Mem] After textures: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After textures: {} MB", get_peak_rss() / (1024 * 1024)); auto replacements_path = file_util::get_jak_project_dir() / "texture_replacements"; if (fs::exists(replacements_path)) { tex_db.replace_textures(replacements_path); @@ -227,7 +227,7 @@ int main(int argc, char** argv) { config.rip_levels, config.extract_collision, level_out_path); } - fmt::print("[Mem] After extraction: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After extraction: {} MB", get_peak_rss() / (1024 * 1024)); if (!config.audio_dir_file_name.empty()) { auto streaming_audio_in = in_folder / "VAG"; diff --git a/decompiler/types2/ForwardProp.cpp b/decompiler/types2/ForwardProp.cpp index 6bf28da1bc..b266127423 100644 --- a/decompiler/types2/ForwardProp.cpp +++ b/decompiler/types2/ForwardProp.cpp @@ -1,3 +1,4 @@ +#include "common/log/log.h" #include "common/util/BitUtils.h" #include "decompiler/IR2/AtomicOp.h" @@ -56,8 +57,8 @@ void types2_from_ambiguous_deref(types2::Instruction& instr, } // the previously selected type is gone... not sure what we can do here, but complain and // use the first one (highest scored). - fmt::print("type2_from_ambiguous_deref: wanted type {}, but couldn't find it.\n", - desired_type.print()); + lg::print("type2_from_ambiguous_deref: wanted type {}, but couldn't find it.\n", + desired_type.print()); type.type = TP_Type::make_from_ts(out.front().result_type); return; } else { @@ -286,7 +287,6 @@ bool backprop_tagged_type(const TP_Type& expected_type, actual_type.tag.unknown_label->selected_type == expected_type.typespec()) { return false; // no need to update } else { - auto& tag = actual_type.tag.unknown_label; actual_type.tag.unknown_label->selected_type = expected_type.typespec(); return true; } @@ -296,7 +296,6 @@ bool backprop_tagged_type(const TP_Type& expected_type, actual_type.tag.unknown_stack_structure->selected_type == expected_type.typespec()) { return false; // no need to update } else { - auto& tag = actual_type.tag.unknown_stack_structure; actual_type.tag.unknown_stack_structure->selected_type = expected_type.typespec(); return true; } @@ -379,7 +378,7 @@ void types2_for_label(types2::Type& type_out, env.file->labels.at(label_idx).name)); } else { auto& name = env.file->labels.at(label_idx).name; - // fmt::print("Encountered unknown label: {}\n", name); + // lg::print("Encountered unknown label: {}\n", name); instr.unknown_label_tag = std::make_unique(); instr.unknown_label_tag->label_idx = label_idx; instr.unknown_label_tag->label_name = name; @@ -1035,7 +1034,7 @@ void types2_addr_on_stack(types2::Type& type_out, throw std::runtime_error( fmt::format("Failed to find a stack variable or structure at offset {}", offset)); } else { - // fmt::print("Encountered unknown stack address {} : {}\n", env.func->name(), offset); + // lg::print("Encountered unknown stack address {} : {}\n", env.func->name(), offset); instr.unknown_stack_structure_tag = std::make_unique(); instr.unknown_stack_structure_tag->stack_offset = offset; type_out.tag.unknown_stack_structure = instr.unknown_stack_structure_tag.get(); @@ -1363,8 +1362,8 @@ void types2_for_add(types2::Type& type_out, } } - fmt::print("checks: {} {} {}\n", tc(dts, TypeSpec("structure"), arg1_type), - !expr.get_arg(0).is_int(), is_int_or_uint(dts, arg0_type)); + lg::print("checks: {} {} {}\n", tc(dts, TypeSpec("structure"), arg1_type), + !expr.get_arg(0).is_int(), is_int_or_uint(dts, arg0_type)); throw std::runtime_error( fmt::format("add failed: {} {}\n", arg0_type.print(), arg1_type.print())); @@ -1800,11 +1799,11 @@ void StoreOp::propagate_types2(types2::Instruction& instr, // temp warning if we have multiple store types if (location_type.size() > 1) { - fmt::print("StoreOp::propagate_types2: multiple possible store types: "); + lg::print("StoreOp::propagate_types2: multiple possible store types: "); for (auto& t : location_type) { - fmt::print("{} ", t.print()); + lg::print("{} ", t.print()); } - fmt::print("\n"); + lg::print("\n"); } if (backprop_tagged_type(location_type.at(0), *value_type, dts)) { @@ -2075,13 +2074,13 @@ bool load_var_op_determine_type(types2::Type& type_out, } } else { /* - fmt::print("ambiguous deref. Choices are:\n"); + lg::print("ambiguous deref. Choices are:\n"); for (auto& result : rd.results) { - fmt::print(" {} : ", result.result_type.print()); + lg::print(" {} : ", result.result_type.print()); for (auto& tok : result.tokens) { - fmt::print("{} ", tok.print()); + lg::print("{} ", tok.print()); } - fmt::print("\n"); + lg::print("\n"); } */ diff --git a/decompiler/types2/types2.cpp b/decompiler/types2/types2.cpp index 8ab979aa4a..6c473acce8 100644 --- a/decompiler/types2/types2.cpp +++ b/decompiler/types2/types2.cpp @@ -2,6 +2,8 @@ #include +#include "common/log/log.h" + #include "decompiler/ObjectFile/LinkedObjectFile.h" #include "decompiler/types2/types2.h" #include "decompiler/util/type_utils.h" @@ -316,7 +318,7 @@ void backprop_from_preds(FunctionCache& cache, tag->is_reg = true; tag->reg = reg; tag->type_to_clear = &cache.blocks.at(succ_idx).start_type_state[reg]->type; - // fmt::print("mark to clear {}\n", succ_idx); + // lg::print("mark to clear {}\n", succ_idx); // add the tag to the type. auto& st = succ_cblock.start_types[reg]; ASSERT(!st.tag.has_tag()); @@ -344,7 +346,7 @@ void backprop_from_preds(FunctionCache& cache, if (my_tag->updated) { tags_updated = true; my_tag->updated = false; - // fmt::print("clearing {}\n", block_idx); + // lg::print("clearing {}\n", block_idx); cblock.needs_run = true; // maybe? *my_tag->type_to_clear = {}; // meh.. } @@ -403,9 +405,9 @@ bool tp_lca(types2::TypeState* combined, const types2::TypeState& add, Decompile bool diff = false; auto comb = combined->try_find_stack_spill_slot(x->slot); if (!comb) { - fmt::print("failed to find {}\n", x->slot); + lg::print("failed to find {}\n", x->slot); for (auto& x : combined->stack_slot_types) { - fmt::print("x = {}\n", x->slot); + lg::print("x = {}\n", x->slot); } } ASSERT(comb); @@ -447,7 +449,7 @@ bool propagate_block(FunctionCache& cache, auto& aop = func.ir2.atomic_ops->ops.at(instr->aop_idx); TypePropExtras extras; extras.tags_locked = tag_lock; - // fmt::print("run: {}\n", aop->to_string(func.ir2.env)); + // lg::print("run: {}\n", aop->to_string(func.ir2.env)); try { aop->propagate_types2(*instr, func.ir2.env, *previous_typestate, *func.ir2.env.dts, extras); @@ -682,7 +684,7 @@ end_type_pass: std::string error; if (!convert_to_old_format(out, function_cache, error, input.func->ir2.env.casts(), input.func->ir2.env.stack_casts(), *input.dts, hit_error)) { - fmt::print("Failed convert_to_old_format: {}\n", error); + lg::print("Failed convert_to_old_format: {}\n", error); } else { input.func->ir2.env.types_succeeded = true; auto last_type = out.op_end_types.back().get(Register(Reg::GPR, Reg::V0)).typespec(); @@ -717,7 +719,7 @@ end_type_pass: for (auto& info : env.stack_slot_entries) { info.second.typespec = info.second.tp_type.typespec(); // debug - // fmt::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), + // lg::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), // info.second.tp_type.print()); } diff --git a/decompiler/util/DecompilerTypeSystem.cpp b/decompiler/util/DecompilerTypeSystem.cpp index c2532caa94..ec30a41799 100644 --- a/decompiler/util/DecompilerTypeSystem.cpp +++ b/decompiler/util/DecompilerTypeSystem.cpp @@ -102,7 +102,7 @@ void DecompilerTypeSystem::parse_type_defs(const std::vector& file_ } } catch (std::exception& e) { auto info = m_reader.db.get_info_for(o); - lg::error("{} when parsing decompiler type file:\n{}", e.what(), info); + lg::error("{} when parsing decompiler type file:{}", e.what(), info); throw e; } }); @@ -184,8 +184,8 @@ void DecompilerTypeSystem::add_symbol(const std::string& name, } else { if (ts.tc(type_spec, skv->second)) { } else { - lg::warn("Attempting to redefine type of symbol {} from {} to {}\n", name, - skv->second.print(), type_spec.print()); + lg::warn("Attempting to redefine type of symbol {} from {} to {}", name, skv->second.print(), + type_spec.print()); throw std::runtime_error("Type redefinition"); } } @@ -434,7 +434,7 @@ int DecompilerTypeSystem::get_format_arg_count(const std::string& str) const { bool code_takes_no_arg = false; for (auto& ignored_code : code_ignore_list) { - int j = i; + size_t j = i; bool match = true; for (const char c : ignored_code) { if (j > str.length()) { diff --git a/decompiler/util/TP_Type.h b/decompiler/util/TP_Type.h index 476397ba20..f8ffe87e7b 100644 --- a/decompiler/util/TP_Type.h +++ b/decompiler/util/TP_Type.h @@ -1,9 +1,9 @@ #pragma once #include #include +#include #include "common/common_types.h" -#include "common/log/log.h" #include "common/type_system/TypeSpec.h" #include "common/util/Assert.h" diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index 9d310376f6..db4e05dfb8 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -77,11 +77,11 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, // TODO - having this logic here isn't great. auto stride = align(field_type_info->get_size_in_memory(), field_type_info->get_inline_array_stride_alignment()); - fmt::print("decompiler {} stride {} {} = {}\n", field_type_info->get_name(), - field_type_info->get_size_in_memory(), - field_type_info->get_inline_array_stride_alignment(), - align(field_type_info->get_size_in_memory(), - field_type_info->get_inline_array_stride_alignment())); + lg::info("decompiler {} stride {} {} = {}", field_type_info->get_name(), + field_type_info->get_size_in_memory(), + field_type_info->get_inline_array_stride_alignment(), + align(field_type_info->get_size_in_memory(), + field_type_info->get_inline_array_stride_alignment())); if (dynamic_cast(field_type_info)) { throw std::runtime_error("Plan basic arrays not supported yet"); @@ -363,7 +363,7 @@ goos::Object decomp_ref_to_integer_array_guess_size( const LinkedObjectFile* /*file*/, const TypeSpec& array_elt_type, int stride) { - // fmt::print("Decomp decomp_ref_to_inline_array_guess_size {}\n", array_elt_type.print()); + // lg::print("Decomp decomp_ref_to_inline_array_guess_size {}\n", array_elt_type.print()); // verify types auto elt_type_info = ts.lookup_type(array_elt_type); @@ -392,13 +392,13 @@ goos::Object decomp_ref_to_integer_array_guess_size( end_offset = end_label.offset; } - // fmt::print("Data is from {} to {}\n", start_label.name, end_label.name); + // lg::print("Data is from {} to {}\n", start_label.name, end_label.name); // now we can figure out the size int size_bytes = end_offset - start_label.offset; int size_elts = size_bytes / stride; // 32 bytes per ocean-near-index int leftover_bytes = size_bytes % stride; - // fmt::print("Size is {} bytes ({} elts), with {} bytes left over\n", size_bytes, + // lg::print("Size is {} bytes ({} elts), with {} bytes left over\n", size_bytes, // size_elts,leftover_bytes); // if we have leftover, should verify that its all zeros, or that it's the type pointer @@ -440,7 +440,7 @@ goos::Object decomp_ref_to_inline_array_guess_size( const LinkedObjectFile* file, const TypeSpec& array_elt_type, int stride) { - // fmt::print("Decomp decomp_ref_to_inline_array_guess_size {}\n", array_elt_type.print()); + // lg::print("Decomp decomp_ref_to_inline_array_guess_size {}\n", array_elt_type.print()); // verify the stride matches the type system auto elt_type_info = ts.lookup_type(array_elt_type); @@ -470,13 +470,13 @@ goos::Object decomp_ref_to_inline_array_guess_size( end_offset = end_label.offset; } - // fmt::print("Data is from {} to {}\n", start_label.name, end_label.name); + // lg::print("Data is from {} to {}\n", start_label.name, end_label.name); // now we can figure out the size int size_bytes = end_offset - start_label.offset; int size_elts = size_bytes / stride; // 32 bytes per ocean-near-index int leftover_bytes = size_bytes % stride; - // fmt::print("Size is {} bytes ({} elts), with {} bytes left over\n", size_bytes, + // lg::print("Size is {} bytes ({} elts), with {} bytes left over\n", size_bytes, // size_elts,leftover_bytes); // if we have leftover, should verify that its all zeros, or that it's the type pointer @@ -604,6 +604,17 @@ goos::Object nav_mesh_nav_control_arr_decompile( file, TypeSpec("nav-control"), 288); } +goos::Object xz_height_map_data_arr_decompile(const std::vector& words, + const std::vector& labels, + int my_seg, + int field_location, + const TypeSystem& ts, + const std::vector>& all_words, + const LinkedObjectFile* file) { + return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, + file, TypeSpec("vector4b"), 4); +} + goos::Object nav_mesh_route_arr_decompile(const std::vector& words, const std::vector& labels, int my_seg, @@ -643,7 +654,7 @@ goos::Object decompile_sound_spec(const TypeSpec& type, const TypeSystem& ts, const LinkedObjectFile* file) { // auto normal = decompile_structure(type, label, labels, words, ts, file, false); - // fmt::print("Doing: {}\n", normal.print()); + // lg::print("Doing: {}\n", normal.print()); auto uncast_type_info = ts.lookup_type(type); auto type_info = dynamic_cast(uncast_type_info); if (!type_info) { @@ -863,7 +874,7 @@ goos::Object decompile_structure(const TypeSpec& type, if (is_basic || !type_info->is_packed()) { throw std::runtime_error(error); } else { - // fmt::print("{}\n", error); + // lg::print("{}\n", error); } } @@ -1030,6 +1041,11 @@ goos::Object decompile_structure(const TypeSpec& type, field_defs_out.emplace_back(field.name(), nav_mesh_nav_control_arr_decompile( obj_words, labels, label.target_segment, field_start, ts, words, file)); + } else if (field.name() == "data" && type.print() == "xz-height-map" && + file->version == GameVersion::Jak2) { + field_defs_out.emplace_back(field.name(), xz_height_map_data_arr_decompile( + obj_words, labels, label.target_segment, + field_start, ts, words, file)); } else if (field.name() == "route" && type.print() == "nav-mesh" && file->version == GameVersion::Jak1) { field_defs_out.emplace_back( @@ -1417,7 +1433,7 @@ goos::Object decompile_boxed_array(const DecompilerLabel& label, if (type_ptr.kind() != LinkedWord::TYPE_PTR) { throw std::runtime_error("Invalid basic in decompile_boxed_array"); } - if (type_ptr.symbol_name() == "array") { + if (type_ptr.symbol_name() == "array" || type_ptr.symbol_name() == "texture-anim-array") { auto content_type_ptr_word_idx = type_ptr_word_idx + 3; auto& content_type_ptr = words.at(label.target_segment).at(content_type_ptr_word_idx); if (content_type_ptr.kind() != LinkedWord::TYPE_PTR) { @@ -1425,7 +1441,8 @@ goos::Object decompile_boxed_array(const DecompilerLabel& label, } content_type = TypeSpec(content_type_ptr.symbol_name()); } else { - throw std::runtime_error("Wrong basic type in decompile_boxed_array"); + throw std::runtime_error( + fmt::format("Wrong basic type in decompile_boxed_array: got {}", type_ptr.symbol_name())); } } else { throw std::runtime_error("Invalid alignment in decompile_boxed_array"); diff --git a/decompiler/util/sparticle_decompile.cpp b/decompiler/util/sparticle_decompile.cpp index 8a0f829c49..c1747c338c 100644 --- a/decompiler/util/sparticle_decompile.cpp +++ b/decompiler/util/sparticle_decompile.cpp @@ -326,10 +326,7 @@ goos::Object decompile_sparticle_rot_x(const std::vector& words, goos::Object decompile_sparticle_int_with_rand_init(const std::vector& words, const std::string& field_name, const std::string& flag_name) { - if (flag_name != "plain-v1") { - fmt::print("Bad {} {}\n", field_name, flag_name); - } - ASSERT(flag_name == "plain-v1"); + ASSERT_MSG(flag_name == "plain-v1", fmt::format("Bad {} {}\n", field_name, flag_name)); if (word_as_s32(words.at(2)) == 0 && word_as_s32(words.at(3)) == 1) { return decompile_sparticle_int_init(words, field_name, flag_name); } @@ -451,7 +448,7 @@ goos::Object decompile_sparticle_group_item(const TypeSpec& type, const TypeSystem& ts, const LinkedObjectFile* /*file*/) { // auto normal = decompile_structure(type, label, labels, words, ts, file, false); - // fmt::print("Doing: {}\n", normal.print()); + // lg::print("Doing: {}\n", normal.print()); auto uncast_type_info = ts.lookup_type(type); auto type_info = dynamic_cast(uncast_type_info); if (!type_info) { @@ -530,7 +527,7 @@ goos::Object decompile_sparticle_group_item(const TypeSpec& type, } result += ')'; - // fmt::print("Result: {}\n", result); + // lg::print("Result: {}\n", result); return pretty_print::to_symbol(result); } @@ -541,7 +538,7 @@ goos::Object decompile_sparticle_field_init(const TypeSpec& type, const TypeSystem& ts, const LinkedObjectFile* file) { auto normal = decompile_structure(type, label, labels, words, ts, file, false); - // fmt::print("Doing: {}\n", normal.print()); + // lg::print("Doing: {}\n", normal.print()); auto uncast_type_info = ts.lookup_type(type); auto type_info = dynamic_cast(uncast_type_info); if (!type_info) { @@ -623,7 +620,7 @@ goos::Object decompile_sparticle_field_init(const TypeSpec& type, } } - // fmt::print("Result: {}\n\n", result.print()); + // lg::print("Result: {}\n\n", result.print()); return result; } @@ -708,7 +705,7 @@ goos::Object decompile_sparticle_field_init(const DefpartElement::StaticInfo::Pa } } - // fmt::print("Result: {}\n\n", result.print()); + // lg::print("Result: {}\n\n", result.print()); return result; } } // namespace decompiler diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index 2036d07565..7f6e1324d5 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -83,8 +83,10 @@ set(RUNTIME_SOURCE mips2c/jak1_functions/tie_methods.cpp mips2c/jak1_functions/time_of_day.cpp mips2c/jak2_functions/collide_func.cpp + mips2c/jak2_functions/debug.cpp mips2c/jak2_functions/font.cpp mips2c/jak2_functions/joint.cpp + mips2c/jak2_functions/sky.cpp mips2c/jak2_functions/texture.cpp overlord/dma.cpp overlord/fake_iso.cpp @@ -142,6 +144,7 @@ set(RUNTIME_SOURCE graphics/opengl_renderer/Sprite3.cpp graphics/opengl_renderer/SpriteRenderer.cpp graphics/opengl_renderer/TextureUploadHandler.cpp + graphics/opengl_renderer/VisDataHandler.cpp graphics/opengl_renderer/DepthCue.cpp graphics/texture/jak1_tpage_dir.cpp graphics/texture/jak2_tpage_dir.cpp diff --git a/game/graphics/display.cpp b/game/graphics/display.cpp index 652f2e4a62..25c29501e0 100644 --- a/game/graphics/display.cpp +++ b/game/graphics/display.cpp @@ -85,6 +85,7 @@ void GfxDisplay::restore_display_settings() { if (!file_util::file_exists(file_path)) { return; } + lg::info("reading {}", file_path); auto raw = file_util::read_text_file(file_path); auto json = parse_commented_json(raw, "display-settings.json"); if (json.contains("window_xpos")) { diff --git a/game/graphics/gfx.cpp b/game/graphics/gfx.cpp index b9d1d58045..4452f0d5a5 100644 --- a/game/graphics/gfx.cpp +++ b/game/graphics/gfx.cpp @@ -148,6 +148,7 @@ void SavePeripheralSettings() { void LoadPeripheralSettings(const ghc::filesystem::path& filepath) { Pad::DefaultMapping(g_settings.pad_mapping_info); + lg::info("reading {}", filepath.string()); auto file_txt = file_util::read_text_file(filepath); auto configuration = parse_commented_json(file_txt, filepath.string()); diff --git a/game/graphics/opengl_renderer/BucketRenderer.cpp b/game/graphics/opengl_renderer/BucketRenderer.cpp index 64129a19c2..e14717f598 100644 --- a/game/graphics/opengl_renderer/BucketRenderer.cpp +++ b/game/graphics/opengl_renderer/BucketRenderer.cpp @@ -28,10 +28,9 @@ void EmptyBucketRenderer::render(DmaFollower& dma, // CALL auto call_tag = dma.current_tag(); dma.read_and_advance(); - if (!(call_tag.kind == DmaTag::Kind::CALL && call_tag.qwc == 0)) { - fmt::print("Bucket renderer {} ({}) was supposed to be empty, but wasn't\n", m_my_id, m_name); - } - ASSERT(call_tag.kind == DmaTag::Kind::CALL && call_tag.qwc == 0); + ASSERT_MSG(call_tag.kind == DmaTag::Kind::CALL && call_tag.qwc == 0, + fmt::format("Bucket renderer {} ({}) was supposed to be empty, but wasn't\n", + m_my_id, m_name)); // in the default reg buffer: ASSERT(dma.current_tag_offset() == render_state->default_regs_buffer); diff --git a/game/graphics/opengl_renderer/BucketRenderer.h b/game/graphics/opengl_renderer/BucketRenderer.h index 4a0def8def..4e09832036 100644 --- a/game/graphics/opengl_renderer/BucketRenderer.h +++ b/game/graphics/opengl_renderer/BucketRenderer.h @@ -39,7 +39,6 @@ struct SharedRenderState { bool use_sky_cpu = true; bool use_occlusion_culling = true; - bool enable_merc_xgkick = true; math::Vector fog_color = math::Vector{0, 0, 0, 0}; float fog_intensity = 1.f; bool no_multidraw = false; @@ -77,6 +76,7 @@ struct SharedRenderState { int draw_offset_y = 0; int bucket_for_vis_copy = 0; + int num_vis_to_copy = 0; GameVersion version; }; diff --git a/game/graphics/opengl_renderer/DirectRenderer.cpp b/game/graphics/opengl_renderer/DirectRenderer.cpp index 7dac2af981..de0b76bb89 100644 --- a/game/graphics/opengl_renderer/DirectRenderer.cpp +++ b/game/graphics/opengl_renderer/DirectRenderer.cpp @@ -311,11 +311,10 @@ void DirectRenderer::update_gl_texture(SharedRenderState* render_state, int unit if (!tex) { // TODO Add back if (state.texture_base_ptr >= 8160 && state.texture_base_ptr <= 8600) { - fmt::print("Failed to find texture at {}, using random (eye zone)\n", state.texture_base_ptr); - + lg::warn("Failed to find texture at {}, using random (eye zone)", state.texture_base_ptr); tex = render_state->texture_pool->get_placeholder_texture(); } else { - fmt::print("Failed to find texture at {}, using random\n", state.texture_base_ptr); + lg::warn("Failed to find texture at {}, using random", state.texture_base_ptr); tex = render_state->texture_pool->get_placeholder_texture(); } } @@ -582,9 +581,8 @@ void DirectRenderer::render_gif(const u8* data, handle_tex0_1_packed(data + offset); break; default: - fmt::print("Register {} is not supported in packed mode yet\n", - reg_descriptor_name(reg_desc[reg])); - ASSERT(false); + ASSERT_MSG(false, fmt::format("Register {} is not supported in packed mode yet\n", + reg_descriptor_name(reg_desc[reg]))); } offset += 16; // PACKED = quadwords } @@ -606,9 +604,8 @@ void DirectRenderer::render_gif(const u8* data, handle_xyzf2(register_data, render_state, prof); break; default: - fmt::print("Register {} is not supported in reglist mode yet\n", - reg_descriptor_name(reg_desc[reg])); - ASSERT(false); + ASSERT_MSG(false, fmt::format("Register {} is not supported in reglist mode yet\n", + reg_descriptor_name(reg_desc[reg]))); } offset += 8; // PACKED = quadwords } diff --git a/game/graphics/opengl_renderer/DirectRenderer.h b/game/graphics/opengl_renderer/DirectRenderer.h index 246843ce62..244b0ce78d 100644 --- a/game/graphics/opengl_renderer/DirectRenderer.h +++ b/game/graphics/opengl_renderer/DirectRenderer.h @@ -3,7 +3,6 @@ #include #include "common/dma/gs.h" -#include "common/log/log.h" #include "common/math/Vector.h" #include "common/util/SmallVector.h" diff --git a/game/graphics/opengl_renderer/DirectRenderer2.cpp b/game/graphics/opengl_renderer/DirectRenderer2.cpp index 30383256fb..5d092dca28 100644 --- a/game/graphics/opengl_renderer/DirectRenderer2.cpp +++ b/game/graphics/opengl_renderer/DirectRenderer2.cpp @@ -97,7 +97,7 @@ void DirectRenderer2::reset_state() { m_state = {}; m_stats = {}; if (m_next_free_draw || m_vertices.next_vertex || m_vertices.next_index) { - fmt::print("[{}] Call to reset_state while there was pending draw data!\n", m_name); + lg::warn("[{}] Call to reset_state while there was pending draw data!", m_name); } reset_buffers(); } @@ -156,10 +156,10 @@ void DirectRenderer2::flush_pending(SharedRenderState* render_state, ScopedProfi void DirectRenderer2::draw_call_loop_simple(SharedRenderState* render_state, ScopedProfilerNode& prof) { - fmt::print("------------------------\n"); + lg::debug("------------------------"); for (u32 draw_idx = 0; draw_idx < m_next_free_draw; draw_idx++) { const auto& draw = m_draw_buffer[draw_idx]; - fmt::print("{}", draw.to_single_line_string()); + lg::debug("{}", draw.to_single_line_string()); setup_opengl_for_draw_mode(draw, render_state); setup_opengl_tex(0, draw.tbp, draw.mode.get_filt_enable(), draw.mode.get_clamp_s_enable(), draw.mode.get_clamp_t_enable(), render_state); @@ -354,11 +354,10 @@ void DirectRenderer2::setup_opengl_tex(u16 unit, if (!tex) { // TODO Add back if (tbp_to_lookup >= 8160 && tbp_to_lookup <= 8600) { - fmt::print("Failed to find texture at {}, using random (eye zone)\n", tbp_to_lookup); - + lg::warn("Failed to find texture at {}, using random (eye zone)", tbp_to_lookup); tex = render_state->texture_pool->get_placeholder_texture(); } else { - fmt::print("Failed to find texture at {}, using random\n", tbp_to_lookup); + lg::warn("Failed to find texture at {}, using random", tbp_to_lookup); tex = render_state->texture_pool->get_placeholder_texture(); } } @@ -444,9 +443,8 @@ void DirectRenderer2::render_gif_data(const u8* data, ASSERT(false); // handle_tex0_1_packed(data + offset); break; default: - fmt::print("Register {} is not supported in packed mode yet\n", - reg_descriptor_name(reg_desc[reg])); - ASSERT(false); + ASSERT_MSG(false, fmt::format("Register {} is not supported in packed mode yet\n", + reg_descriptor_name(reg_desc[reg]))); } offset += 16; // PACKED = quadwords } @@ -468,9 +466,8 @@ void DirectRenderer2::render_gif_data(const u8* data, ASSERT(false); // handle_xyzf2(register_data, render_state, prof); break; default: - fmt::print("Register {} is not supported in reglist mode yet\n", - reg_descriptor_name(reg_desc[reg])); - ASSERT(false); + ASSERT_MSG(false, fmt::format("Register {} is not supported in reglist mode yet\n", + reg_descriptor_name(reg_desc[reg]))); } offset += 8; // PACKED = quadwords } diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index cd8849e3fe..b672a7cbd4 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -11,6 +11,7 @@ #include "game/graphics/opengl_renderer/Sprite3.h" #include "game/graphics/opengl_renderer/SpriteRenderer.h" #include "game/graphics/opengl_renderer/TextureUploadHandler.h" +#include "game/graphics/opengl_renderer/VisDataHandler.h" #include "game/graphics/opengl_renderer/background/Shrub.h" #include "game/graphics/opengl_renderer/background/TFragment.h" #include "game/graphics/opengl_renderer/background/Tie3.h" @@ -87,7 +88,7 @@ void OpenGLRenderer::init_bucket_renderers_jak2() { using namespace jak2; m_bucket_renderers.resize((int)BucketId::MAX_BUCKETS); m_bucket_categories.resize((int)BucketId::MAX_BUCKETS, BucketCategory::OTHER); - + init_bucket_renderer("vis", BucketCategory::OTHER, BucketId::SPECIAL_BUCKET_2); init_bucket_renderer("tfrag-l0-tfrag", BucketCategory::TFRAG, BucketId::TFRAG_L0_TFRAG, std::vector{tfrag3::TFragmentTreeKind::NORMAL}, false, 0); init_bucket_renderer("tie-l0-tfrag", BucketCategory::TIE, BucketId::TIE_L0_TFRAG, 0); @@ -99,8 +100,12 @@ void OpenGLRenderer::init_bucket_renderers_jak2() { init_bucket_renderer("tfrag-t-l0-alpha", BucketCategory::TFRAG, BucketId::TFRAG_T_L0_ALPHA, std::vector{tfrag3::TFragmentTreeKind::TRANS}, false, 0); + init_bucket_renderer("tfrag-w-l0-alpha", BucketCategory::TFRAG, + BucketId::TFRAG_W_L0_WATER, + std::vector{tfrag3::TFragmentTreeKind::WATER}, false, 0); init_bucket_renderer("debug-no-zbuf1", BucketCategory::OTHER, BucketId::DEBUG_NO_ZBUF1, 0x8000); + init_bucket_renderer("debug2", BucketCategory::OTHER, BucketId::DEBUG2, 0x8000); init_bucket_renderer("debug-no-zbuf2", BucketCategory::OTHER, BucketId::DEBUG_NO_ZBUF2, 0x8000); init_bucket_renderer("debug3", BucketCategory::OTHER, BucketId::DEBUG3, 0x8000); @@ -454,7 +459,6 @@ void OpenGLRenderer::draw_renderer_selection_window() { ImGui::SliderFloat("Fog Adjust", &m_render_state.fog_intensity, 0, 10); ImGui::Checkbox("Sky CPU", &m_render_state.use_sky_cpu); ImGui::Checkbox("Occlusion Cull", &m_render_state.use_occlusion_culling); - ImGui::Checkbox("Merc XGKICK", &m_render_state.enable_merc_xgkick); ImGui::Checkbox("Blackout Loads", &m_enable_fast_blackout_loads); for (size_t i = 0; i < m_bucket_renderers.size(); i++) { @@ -696,6 +700,7 @@ void OpenGLRenderer::dispatch_buckets_jak1(DmaFollower dma, dma.current_tag_offset() + 16; // offset by 1 qw for the initial call m_render_state.next_bucket = m_render_state.buckets_base; m_render_state.bucket_for_vis_copy = (int)jak1::BucketId::TFRAG_LEVEL0; + m_render_state.num_vis_to_copy = 2; // Find the default regs buffer auto initial_call_tag = dma.current_tag(); @@ -758,7 +763,8 @@ void OpenGLRenderer::dispatch_buckets_jak2(DmaFollower dma, m_render_state.buckets_base = dma.current_tag_offset(); // starts at 0 in jak 2 m_render_state.next_bucket = m_render_state.buckets_base + 16; - m_render_state.bucket_for_vis_copy = 0; // TODO + m_render_state.bucket_for_vis_copy = (int)jak2::BucketId::SPECIAL_BUCKET_2; + m_render_state.num_vis_to_copy = 6; for (size_t bucket_id = 0; bucket_id < m_bucket_renderers.size(); bucket_id++) { auto& renderer = m_bucket_renderers[bucket_id]; diff --git a/game/graphics/opengl_renderer/Profiler.cpp b/game/graphics/opengl_renderer/Profiler.cpp index 430f6dbc44..cca445cbfc 100644 --- a/game/graphics/opengl_renderer/Profiler.cpp +++ b/game/graphics/opengl_renderer/Profiler.cpp @@ -17,13 +17,13 @@ ProfilerNode* ProfilerNode::make_child(const std::string& name) { void ProfilerNode::finish() { if (m_finished) { - lg::error("finish() called twice on {}\n", m_name); + lg::error("finish() called twice on {}", m_name); } else { m_stats.duration = m_timer.getSeconds(); float total_child_time = 0; for (const auto& child : m_children) { if (!child.finished()) { - lg::error("finish() not called on {}\n", child.name()); + lg::error("finish() not called on {}", child.name()); } total_child_time += child.m_stats.duration; m_stats.add_draw_stats(child.m_stats); diff --git a/game/graphics/opengl_renderer/Shader.cpp b/game/graphics/opengl_renderer/Shader.cpp index 5954ae6f94..bbb854035a 100644 --- a/game/graphics/opengl_renderer/Shader.cpp +++ b/game/graphics/opengl_renderer/Shader.cpp @@ -28,7 +28,7 @@ Shader::Shader(const std::string& shader_name, GameVersion version) { glGetShaderiv(m_vert_shader, GL_COMPILE_STATUS, &compile_ok); if (!compile_ok) { glGetShaderInfoLog(m_vert_shader, len, nullptr, err); - lg::error("Failed to compile vertex shader {}:\n{}\n", shader_name.c_str(), err); + lg::error("Failed to compile vertex shader {}:\n{}", shader_name.c_str(), err); m_is_okay = false; return; } @@ -41,7 +41,7 @@ Shader::Shader(const std::string& shader_name, GameVersion version) { glGetShaderiv(m_frag_shader, GL_COMPILE_STATUS, &compile_ok); if (!compile_ok) { glGetShaderInfoLog(m_frag_shader, len, nullptr, err); - lg::error("Failed to compile fragment shader {}:\n{}\n", shader_name.c_str(), err); + lg::error("Failed to compile fragment shader {}:\n{}", shader_name.c_str(), err); m_is_okay = false; return; } @@ -54,7 +54,7 @@ Shader::Shader(const std::string& shader_name, GameVersion version) { glGetProgramiv(m_program, GL_LINK_STATUS, &compile_ok); if (!compile_ok) { glGetProgramInfoLog(m_program, len, nullptr, err); - lg::error("Failed to link shader {}:\n{}\n", shader_name.c_str(), err); + lg::error("Failed to link shader {}:\n{}", shader_name.c_str(), err); m_is_okay = false; return; } diff --git a/game/graphics/opengl_renderer/ShadowRenderer.cpp b/game/graphics/opengl_renderer/ShadowRenderer.cpp index 95d5106da9..02d63f40bf 100644 --- a/game/graphics/opengl_renderer/ShadowRenderer.cpp +++ b/game/graphics/opengl_renderer/ShadowRenderer.cpp @@ -157,9 +157,8 @@ void ShadowRenderer::xgkick(u16 imm) { } break; default: - fmt::print("Register {} is not supported in packed mode yet\n", - reg_descriptor_name(reg_desc[reg])); - ASSERT(false); + ASSERT_MSG(false, fmt::format("Register {} is not supported in packed mode yet\n", + reg_descriptor_name(reg_desc[reg]))); } offset += 16; // PACKED = quadwords } diff --git a/game/graphics/opengl_renderer/Shadow_PS2.cpp b/game/graphics/opengl_renderer/Shadow_PS2.cpp index 285cbb8f97..69fb615e94 100644 --- a/game/graphics/opengl_renderer/Shadow_PS2.cpp +++ b/game/graphics/opengl_renderer/Shadow_PS2.cpp @@ -1,3 +1,5 @@ +#include "common/log/log.h" + #include "game/graphics/opengl_renderer/ShadowRenderer.h" void ShadowRenderer::run_mscal10_vu2c() { @@ -148,7 +150,7 @@ void ShadowRenderer::run_mscal_vu2c(u16 imm) { goto L21; default: - fmt::print("didn't know mscal imm: {}\n", imm); + lg::warn("didn't know mscal imm: {}", imm); // ASSERT(false); } // clang-format off diff --git a/game/graphics/opengl_renderer/SkyRenderer.cpp b/game/graphics/opengl_renderer/SkyRenderer.cpp index 06ad732f19..23db4a837f 100644 --- a/game/graphics/opengl_renderer/SkyRenderer.cpp +++ b/game/graphics/opengl_renderer/SkyRenderer.cpp @@ -1,7 +1,5 @@ #include "SkyRenderer.h" -#include "common/log/log.h" - #include "game/graphics/opengl_renderer/AdgifHandler.h" #include "game/graphics/pipelines/opengl.h" diff --git a/game/graphics/opengl_renderer/Sprite3.cpp b/game/graphics/opengl_renderer/Sprite3.cpp index 0c2089823c..a24bbf2ba8 100644 --- a/game/graphics/opengl_renderer/Sprite3.cpp +++ b/game/graphics/opengl_renderer/Sprite3.cpp @@ -2,6 +2,8 @@ #include "Sprite3.h" +#include "common/log/log.h" + #include "game/graphics/opengl_renderer/background/background_common.h" #include "game/graphics/opengl_renderer/dma_helpers.h" @@ -1069,7 +1071,7 @@ void Sprite3::flush_sprites(SharedRenderState* render_state, tex = render_state->texture_pool->lookup(tbp); if (!tex) { - fmt::print("Failed to find texture at {}, using random\n", tbp); + lg::warn("Failed to find texture at {}, using random", tbp); tex = render_state->texture_pool->get_placeholder_texture(); } ASSERT(tex); @@ -1216,8 +1218,8 @@ void Sprite3::update_mode_from_alpha1(u64 val, DrawMode& mode) { } else { - fmt::print("unsupported blend: a {} b {} c {} d {}\n", (int)reg.a_mode(), (int)reg.b_mode(), - (int)reg.c_mode(), (int)reg.d_mode()); + lg::error("unsupported blend: a {} b {} c {} d {}", (int)reg.a_mode(), (int)reg.b_mode(), + (int)reg.c_mode(), (int)reg.d_mode()); mode.set_alpha_blend(DrawMode::AlphaBlend::SRC_DST_SRC_DST); ASSERT(false); } diff --git a/game/graphics/opengl_renderer/SpriteRenderer.cpp b/game/graphics/opengl_renderer/SpriteRenderer.cpp index 6bedb8a4b0..659bcf8049 100644 --- a/game/graphics/opengl_renderer/SpriteRenderer.cpp +++ b/game/graphics/opengl_renderer/SpriteRenderer.cpp @@ -1,5 +1,7 @@ #include "SpriteRenderer.h" +#include "common/log/log.h" + #include "game/graphics/opengl_renderer/background/background_common.h" #include "game/graphics/opengl_renderer/dma_helpers.h" @@ -614,7 +616,7 @@ void SpriteRenderer::update_gl_texture(SharedRenderState* render_state, int unit } if (!tex) { - fmt::print("Failed to find texture at {}, using random\n", state.texture_base_ptr); + lg::warn("Failed to find texture at {}, using random", state.texture_base_ptr); tex = render_state->texture_pool->get_placeholder_texture(); } ASSERT(tex); diff --git a/game/graphics/opengl_renderer/TextureUploadHandler.cpp b/game/graphics/opengl_renderer/TextureUploadHandler.cpp index 17d92f0ad1..e152b75644 100644 --- a/game/graphics/opengl_renderer/TextureUploadHandler.cpp +++ b/game/graphics/opengl_renderer/TextureUploadHandler.cpp @@ -1,5 +1,7 @@ #include "TextureUploadHandler.h" +#include "common/log/log.h" + #include "game/graphics/opengl_renderer/EyeRenderer.h" #include "game/graphics/pipelines/opengl.h" @@ -82,9 +84,9 @@ void TextureUploadHandler::flush_uploads(std::vector& uploads, else if (uploads.empty()) { // do nothing. } else { - fmt::print("unhandled upload sequence in {}:\n", m_name); + lg::error("unhandled upload sequence in {}:", m_name); for (auto& upload : uploads) { - fmt::print(" page: 0x{:x} mode: {}\n", upload.page, upload.mode); + lg::error(" page: 0x{:x} mode: {}", upload.page, upload.mode); } ASSERT(false); } diff --git a/game/graphics/opengl_renderer/VisDataHandler.cpp b/game/graphics/opengl_renderer/VisDataHandler.cpp new file mode 100644 index 0000000000..146d0e51df --- /dev/null +++ b/game/graphics/opengl_renderer/VisDataHandler.cpp @@ -0,0 +1,82 @@ +#include "VisDataHandler.h" + +#include "third-party/imgui/imgui.h" + +VisDataHandler::VisDataHandler(const std::string& name, int my_id) : BucketRenderer(name, my_id) {} + +void VisDataHandler::draw_debug_window() { + ImGui::Checkbox("Count Visible?", &m_count_vis); + for (int i = 0; i < kMaxLevels; i++) { + const auto& stats = m_stats[i]; + if (stats.has_vis) { + if (m_count_vis) { + ImGui::Text("[%d] %d visible", i, stats.num_visible); + } else { + ImGui::Text("[%d] has vis", i); + } + } + } +} + +int bitcount(const u8* data) { + int result = 0; + for (int byte = 0; byte < 16 * 128; byte++) { + u8 val = data[byte]; + for (int i = 0; i < 8; i++) { + if (val & 1) { + result++; + } + val >>= 1; + } + } + return result; +} + +void VisDataHandler::render(DmaFollower& dma, + SharedRenderState* render_state, + ScopedProfilerNode& /*prof*/) { + // reset stats + for (auto& stats : m_stats) { + stats = LevelStats(); + } + if (dma.current_tag_offset() == render_state->next_bucket) { + return; + } + + // skip bucket start + dma.read_and_advance(); + + if (dma.current_tag_offset() == render_state->next_bucket) { + return; + } + + for (int i = 0; i < render_state->num_vis_to_copy; i++) { + auto vis_data = dma.read_and_advance(); + ASSERT(vis_data.vif0() == 0); + if (vis_data.vifcode1().kind != VifCode::Kind::PC_PORT) { + break; + } + if (vis_data.size_bytes == 128 * 16 && render_state->use_occlusion_culling) { + memcpy(render_state->occlusion_vis[i].data, vis_data.data, 128 * 16); + render_state->occlusion_vis[i].valid = true; + m_stats[i].has_vis = true; + if (m_count_vis) { + m_stats[i].num_visible = bitcount(render_state->occlusion_vis[i].data); + } else { + m_stats[i].num_visible = -1; + } + } else { + m_stats[i].has_vis = false; + m_stats[i].num_visible = -1; + } + + auto next = dma.read_and_advance(); + ASSERT(next.size_bytes == 0); + } + + while (dma.current_tag_offset() != render_state->next_bucket) { + auto x = dma.read_and_advance(); + fmt::print("{} {}\n", x.vifcode0().print(), x.vifcode1().print()); + ASSERT(false); + } +} diff --git a/game/graphics/opengl_renderer/VisDataHandler.h b/game/graphics/opengl_renderer/VisDataHandler.h new file mode 100644 index 0000000000..d371ef8849 --- /dev/null +++ b/game/graphics/opengl_renderer/VisDataHandler.h @@ -0,0 +1,23 @@ +#pragma once + +#include "game/graphics/opengl_renderer/BucketRenderer.h" + +/*! + * The VisDataHandler copies visibility data from add-pc-port-background-data for the background + * renderers. + */ +class VisDataHandler : public BucketRenderer { + public: + VisDataHandler(const std::string& name, int my_id); + void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override; + void draw_debug_window() override; + + private: + struct LevelStats { + bool has_vis = false; + int num_visible = 0; + }; + static constexpr int kMaxLevels = 10; + LevelStats m_stats[kMaxLevels]; + bool m_count_vis = false; +}; diff --git a/game/graphics/opengl_renderer/background/Shrub.cpp b/game/graphics/opengl_renderer/background/Shrub.cpp index 5943e918e5..501698a623 100644 --- a/game/graphics/opengl_renderer/background/Shrub.cpp +++ b/game/graphics/opengl_renderer/background/Shrub.cpp @@ -1,5 +1,7 @@ #include "Shrub.h" +#include "common/log/log.h" + Shrub::Shrub(const std::string& name, int my_id) : BucketRenderer(name, my_id) { m_color_result.resize(TIME_OF_DAY_COLOR_COUNT); } @@ -50,9 +52,8 @@ void Shrub::render(DmaFollower& dma, SharedRenderState* render_state, ScopedProf memcpy(settings.math_camera.data(), m_pc_port_data.camera[0].data(), 64); settings.tree_idx = 0; - for (int i = 0; i < 8; i++) { - settings.time_of_day_weights[i] = - 2 * (0xff & m_pc_port_data.itimes[i / 2].data()[2 * (i % 2)]) / 127.f; + for (int i = 0; i < 4; i++) { + settings.itimes[i] = m_pc_port_data.itimes[i]; } update_render_state_from_pc_settings(render_state, m_pc_port_data); @@ -184,7 +185,7 @@ bool Shrub::setup_for_level(const std::string& level, SharedRenderState* render_ } if (tfrag3_setup_timer.getMs() > 5) { - fmt::print("Shrub setup: {:.1f}ms\n", tfrag3_setup_timer.getMs()); + lg::info("Shrub setup: {:.1f}ms", tfrag3_setup_timer.getMs()); } return m_has_level; @@ -227,7 +228,7 @@ void Shrub::render_tree(int idx, } Timer interp_timer; - interp_time_of_day_fast(settings.time_of_day_weights, tree.tod_cache, m_color_result.data()); + interp_time_of_day_fast(settings.itimes, tree.tod_cache, m_color_result.data()); tree.perf.tod_time.add(interp_timer.getSeconds()); Timer setup_timer; diff --git a/game/graphics/opengl_renderer/background/TFragment.cpp b/game/graphics/opengl_renderer/background/TFragment.cpp index 3285bf40d1..60f578706f 100644 --- a/game/graphics/opengl_renderer/background/TFragment.cpp +++ b/game/graphics/opengl_renderer/background/TFragment.cpp @@ -60,17 +60,17 @@ void TFragment::render(DmaFollower& dma, return; } - if (m_my_id == render_state->bucket_for_vis_copy) { - DmaTransfer transfers[2]; + if (m_my_id == render_state->bucket_for_vis_copy && + dma.current_tag_vifcode1().kind == VifCode::Kind::PC_PORT) { + DmaTransfer transfers[20]; - transfers[0] = dma.read_and_advance(); - auto next0 = dma.read_and_advance(); - ASSERT(next0.size_bytes == 0); - transfers[1] = dma.read_and_advance(); - auto next1 = dma.read_and_advance(); - ASSERT(next1.size_bytes == 0); + for (int i = 0; i < render_state->num_vis_to_copy; i++) { + transfers[i] = dma.read_and_advance(); + auto next0 = dma.read_and_advance(); + ASSERT(next0.size_bytes == 0); + } - for (int i = 0; i < 2; i++) { + for (int i = 0; i < render_state->num_vis_to_copy; i++) { if (transfers[i].size_bytes == 128 * 16) { if (render_state->use_occlusion_culling) { render_state->occlusion_vis[i].valid = true; @@ -128,17 +128,7 @@ void TFragment::render(DmaFollower& dma, for (int i = 0; i < 4; i++) { settings.planes[i] = m_pc_port_data.planes[i]; - } - - if (m_override_time_of_day) { - for (int i = 0; i < 8; i++) { - settings.time_of_day_weights[i] = m_time_of_days[i]; - } - } else { - for (int i = 0; i < 8; i++) { - settings.time_of_day_weights[i] = - 2 * (0xff & m_pc_port_data.itimes[i / 2].data()[2 * (i % 2)]) / 127.f; - } + settings.itimes[i] = m_pc_port_data.itimes[i]; } auto t3prof = prof.make_scoped_child("t3"); @@ -152,13 +142,6 @@ void TFragment::render(DmaFollower& dma, } void TFragment::draw_debug_window() { - ImGui::Checkbox("Manual Time of Day", &m_override_time_of_day); - if (m_override_time_of_day) { - for (int i = 0; i < 8; i++) { - ImGui::SliderFloat(fmt::format("{}", i).c_str(), m_time_of_days + i, 0.f, 1.f); - } - } - m_tfrag3.draw_debug_window(); } diff --git a/game/graphics/opengl_renderer/background/TFragment.h b/game/graphics/opengl_renderer/background/TFragment.h index ea48b0f63e..17adf3a8b2 100644 --- a/game/graphics/opengl_renderer/background/TFragment.h +++ b/game/graphics/opengl_renderer/background/TFragment.h @@ -48,8 +48,6 @@ class TFragment : public BucketRenderer { void handle_initialization(DmaFollower& dma); bool m_child_mode = false; - bool m_override_time_of_day = false; - float m_time_of_days[8] = {1, 0, 0, 0, 0, 0, 0, 0}; // GS setup data u8 m_test_setup[32]; diff --git a/game/graphics/opengl_renderer/background/Tfrag3.cpp b/game/graphics/opengl_renderer/background/Tfrag3.cpp index a1ee89a64a..fd679ecfb9 100644 --- a/game/graphics/opengl_renderer/background/Tfrag3.cpp +++ b/game/graphics/opengl_renderer/background/Tfrag3.cpp @@ -1,5 +1,7 @@ #include "Tfrag3.h" +#include "common/log/log.h" + #include "third-party/imgui/imgui.h" Tfrag3::Tfrag3() { @@ -161,7 +163,7 @@ bool Tfrag3::setup_for_level(const std::vector& tree_ } if (tfrag3_setup_timer.getMs() > 5) { - fmt::print("TFRAG setup: {:.1f}ms\n", tfrag3_setup_timer.getMs()); + lg::info("TFRAG setup: {:.1f}ms", tfrag3_setup_timer.getMs()); } return m_has_level; @@ -181,9 +183,9 @@ void Tfrag3::render_tree(int geom, m_color_result.resize(tree.colors->size()); } if (m_use_fast_time_of_day) { - interp_time_of_day_fast(settings.time_of_day_weights, tree.tod_cache, m_color_result.data()); + interp_time_of_day_fast(settings.itimes, tree.tod_cache, m_color_result.data()); } else { - interp_time_of_day_slow(settings.time_of_day_weights, *tree.colors, m_color_result.data()); + interp_time_of_day_slow(settings.itimes, *tree.colors, m_color_result.data()); } glActiveTexture(GL_TEXTURE10); glBindTexture(GL_TEXTURE_1D, tree.time_of_day_texture); diff --git a/game/graphics/opengl_renderer/background/Tie3.cpp b/game/graphics/opengl_renderer/background/Tie3.cpp index d077e756dd..e8a8b10446 100644 --- a/game/graphics/opengl_renderer/background/Tie3.cpp +++ b/game/graphics/opengl_renderer/background/Tie3.cpp @@ -1,6 +1,7 @@ #include "Tie3.h" #include "common/global_profiler/GlobalProfiler.h" +#include "common/log/log.h" #include "third-party/imgui/imgui.h" @@ -168,7 +169,7 @@ bool Tie3::setup_for_level(const std::string& level, SharedRenderState* render_s } if (tfrag3_setup_timer.getMs() > 5) { - fmt::print("TIE setup: {:.1f}ms\n", tfrag3_setup_timer.getMs()); + lg::info("TIE setup: {:.1f}ms", tfrag3_setup_timer.getMs()); } return m_has_level; @@ -382,17 +383,7 @@ void Tie3::render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfi for (int i = 0; i < 4; i++) { settings.planes[i] = m_pc_port_data.planes[i]; - } - - if (false) { - // for (int i = 0; i < 8; i++) { - // settings.time_of_day_weights[i] = m_time_of_days[i]; - // } - } else { - for (int i = 0; i < 8; i++) { - settings.time_of_day_weights[i] = - 2 * (0xff & m_pc_port_data.itimes[i / 2].data()[2 * (i % 2)]) / 127.f; - } + settings.itimes[i] = m_pc_port_data.itimes[i]; } if (!m_override_level) { @@ -551,9 +542,9 @@ void Tie3::render_tree(int idx, Timer interp_timer; if (m_use_fast_time_of_day) { - interp_time_of_day_fast(settings.time_of_day_weights, tree.tod_cache, m_color_result.data()); + interp_time_of_day_fast(settings.itimes, tree.tod_cache, m_color_result.data()); } else { - interp_time_of_day_slow(settings.time_of_day_weights, *tree.colors, m_color_result.data()); + interp_time_of_day_slow(settings.itimes, *tree.colors, m_color_result.data()); } tree.perf.tod_time.add(interp_timer.getSeconds()); diff --git a/game/graphics/opengl_renderer/background/background_common.cpp b/game/graphics/opengl_renderer/background/background_common.cpp index 168badf275..2fe62be6e8 100644 --- a/game/graphics/opengl_renderer/background/background_common.cpp +++ b/game/graphics/opengl_renderer/background/background_common.cpp @@ -165,14 +165,32 @@ void first_tfrag_draw_setup(const TfragRenderSettings& settings, render_state->fog_intensity / 255); } -void interp_time_of_day_slow(const float weights[8], +void interp_time_of_day_slow(const math::Vector itimes[4], const std::vector& in, math::Vector* out) { // Timer interp_timer; + math::Vector4f weights[8]; + for (int component = 0; component < 8; component++) { + int quad_idx = component / 2; + int word_off = (component % 2 * 2); + for (int channel = 0; channel < 4; channel++) { + int word = word_off + (channel / 2); + int hw_off = channel % 2; + + u32 word_val = itimes[quad_idx][word]; + u32 hw_val = hw_off ? (word_val >> 16) : word_val; + hw_val = hw_val & 0xff; + weights[component][channel] = hw_val / 64.f; + } + } + for (size_t color = 0; color < in.size(); color++) { math::Vector4f result = math::Vector4f::zero(); for (int component = 0; component < 8; component++) { - result += in[color].rgba[component].cast() * weights[component]; + for (int channel = 0; channel < 4; channel++) { + result[channel] += in[color].rgba[component][channel] * weights[component][channel]; + } + // result += in[color].rgba[component].cast() * weights[component]; } result[0] = std::min(result[0], 255.f); result[1] = std::min(result[1], 255.f); @@ -229,127 +247,52 @@ SwizzledTimeOfDay swizzle_time_of_day(const std::vector& return out; } -// This does the same thing as interp_time_of_day_slow, but is faster. -// Due to using integers instead of floats, it may be a tiny bit different. -// TODO: it might be possible to reorder the loop into two blocks of loads and avoid spilling xmms. -// It's ~8x faster than the slow version. - -void interp_time_of_day_fast_avx2(const float weights[8], - const SwizzledTimeOfDay& in, - math::Vector* out) { - // even though the colors are 8 bits, we'll use 16 bits so we can saturate correctly -#ifdef __AVX2__ - // weight multipliers - __m256i weights0 = _mm256_set1_epi16(weights[0] * 64.f); - __m256i weights1 = _mm256_set1_epi16(weights[1] * 64.f); - __m256i weights2 = _mm256_set1_epi16(weights[2] * 64.f); - __m256i weights3 = _mm256_set1_epi16(weights[3] * 64.f); - __m256i weights4 = _mm256_set1_epi16(weights[4] * 64.f); - __m256i weights5 = _mm256_set1_epi16(weights[5] * 64.f); - __m256i weights6 = _mm256_set1_epi16(weights[6] * 64.f); - __m256i weights7 = _mm256_set1_epi16(weights[7] * 64.f); - - // saturation: note that alpha is saturated to 128 but the rest are 255. - // TODO: maybe we should saturate to 255 for everybody (can do this using a single packus) and - // change the shader to deal with this. - __m256i sat = _mm256_set_epi16(128, 255, 255, 255, 128, 255, 255, 255, 128, 255, 255, 255, 128, - 255, 255, 255); - - for (u32 color_quad = 0; color_quad < in.color_count / 4; color_quad++) { - // first, load colors. We put 16 bytes / register and don't touch the upper half because we - // convert u8s to u16s. - const u8* base = in.data.data() + color_quad * 128; - __m128i color0_p = _mm_loadu_si128((const __m128i*)(base + 0)); - __m128i color1_p = _mm_loadu_si128((const __m128i*)(base + 16)); - __m128i color2_p = _mm_loadu_si128((const __m128i*)(base + 32)); - __m128i color3_p = _mm_loadu_si128((const __m128i*)(base + 48)); - __m128i color4_p = _mm_loadu_si128((const __m128i*)(base + 64)); - __m128i color5_p = _mm_loadu_si128((const __m128i*)(base + 80)); - __m128i color6_p = _mm_loadu_si128((const __m128i*)(base + 96)); - __m128i color7_p = _mm_loadu_si128((const __m128i*)(base + 112)); - - // unpack to 16-bits. each has 16x 16 bit colors. - __m256i color0 = _mm256_cvtepu8_epi16(color0_p); - __m256i color1 = _mm256_cvtepu8_epi16(color1_p); - __m256i color2 = _mm256_cvtepu8_epi16(color2_p); - __m256i color3 = _mm256_cvtepu8_epi16(color3_p); - __m256i color4 = _mm256_cvtepu8_epi16(color4_p); - __m256i color5 = _mm256_cvtepu8_epi16(color5_p); - __m256i color6 = _mm256_cvtepu8_epi16(color6_p); - __m256i color7 = _mm256_cvtepu8_epi16(color7_p); - - // multiply by weights - color0 = _mm256_mullo_epi16(color0, weights0); - color1 = _mm256_mullo_epi16(color1, weights1); - color2 = _mm256_mullo_epi16(color2, weights2); - color3 = _mm256_mullo_epi16(color3, weights3); - color4 = _mm256_mullo_epi16(color4, weights4); - color5 = _mm256_mullo_epi16(color5, weights5); - color6 = _mm256_mullo_epi16(color6, weights6); - color7 = _mm256_mullo_epi16(color7, weights7); - - // add. This order minimizes dependencies. - color0 = _mm256_add_epi16(color0, color1); - color2 = _mm256_add_epi16(color2, color3); - color4 = _mm256_add_epi16(color4, color5); - color6 = _mm256_add_epi16(color6, color7); - - color0 = _mm256_add_epi16(color0, color2); - color4 = _mm256_add_epi16(color4, color6); - - color0 = _mm256_add_epi16(color0, color4); - - // divide, because we multiplied our weights by 2^7. - color0 = _mm256_srli_epi16(color0, 6); - - // saturate - color0 = _mm256_min_epu16(sat, color0); - - // back to u8s. - auto hi = _mm256_extracti128_si256(color0, 1); - auto result = _mm_packus_epi16(_mm256_castsi256_si128(color0), hi); - - // store result - _mm_storeu_si128((__m128i*)(&out[color_quad * 4]), result); - } -#else - // unreachable. - (void)weights; - (void)in; - (void)out; - ASSERT(false); -#endif -} - -void interp_time_of_day_fast(const float weights[8], - const SwizzledTimeOfDay& in, +void interp_time_of_day_fast(const math::Vector itimes[4], + const SwizzledTimeOfDay& swizzled_colors, math::Vector* out) { - // even though the colors are 8 bits, we'll use 16 bits so we can saturate correctly - if (get_cpu_info().has_avx2) { - interp_time_of_day_fast_avx2(weights, in, out); - return; + math::Vector weights[8]; + for (int component = 0; component < 8; component++) { + int quad_idx = component / 2; + int word_off = (component % 2 * 2); + for (int channel = 0; channel < 4; channel++) { + int word = word_off + (channel / 2); + int hw_off = channel % 2; + + u32 word_val = itimes[quad_idx][word]; + u32 hw_val = hw_off ? (word_val >> 16) : word_val; + hw_val = hw_val & 0xff; + weights[component][channel] = hw_val; + } } // weight multipliers - __m128i weights0 = _mm_set1_epi16(weights[0] * 64.f); - __m128i weights1 = _mm_set1_epi16(weights[1] * 64.f); - __m128i weights2 = _mm_set1_epi16(weights[2] * 64.f); - __m128i weights3 = _mm_set1_epi16(weights[3] * 64.f); - __m128i weights4 = _mm_set1_epi16(weights[4] * 64.f); - __m128i weights5 = _mm_set1_epi16(weights[5] * 64.f); - __m128i weights6 = _mm_set1_epi16(weights[6] * 64.f); - __m128i weights7 = _mm_set1_epi16(weights[7] * 64.f); + __m128i weights0 = _mm_setr_epi16(weights[0][0], weights[0][1], weights[0][2], weights[0][3], + weights[0][0], weights[0][1], weights[0][2], weights[0][3]); + __m128i weights1 = _mm_setr_epi16(weights[1][0], weights[1][1], weights[1][2], weights[1][3], + weights[1][0], weights[1][1], weights[1][2], weights[1][3]); + __m128i weights2 = _mm_setr_epi16(weights[2][0], weights[2][1], weights[2][2], weights[2][3], + weights[2][0], weights[2][1], weights[2][2], weights[2][3]); + __m128i weights3 = _mm_setr_epi16(weights[3][0], weights[3][1], weights[3][2], weights[3][3], + weights[3][0], weights[3][1], weights[3][2], weights[3][3]); + __m128i weights4 = _mm_setr_epi16(weights[4][0], weights[4][1], weights[4][2], weights[4][3], + weights[4][0], weights[4][1], weights[4][2], weights[4][3]); + __m128i weights5 = _mm_setr_epi16(weights[5][0], weights[5][1], weights[5][2], weights[5][3], + weights[5][0], weights[5][1], weights[5][2], weights[5][3]); + __m128i weights6 = _mm_setr_epi16(weights[6][0], weights[6][1], weights[6][2], weights[6][3], + weights[6][0], weights[6][1], weights[6][2], weights[6][3]); + __m128i weights7 = _mm_setr_epi16(weights[7][0], weights[7][1], weights[7][2], weights[7][3], + weights[7][0], weights[7][1], weights[7][2], weights[7][3]); // saturation: note that alpha is saturated to 128 but the rest are 255. // TODO: maybe we should saturate to 255 for everybody (can do this using a single packus) and // change the shader to deal with this. __m128i sat = _mm_set_epi16(128, 255, 255, 255, 128, 255, 255, 255); - for (u32 color_quad = 0; color_quad < in.color_count / 4; color_quad++) { + for (u32 color_quad = 0; color_quad < swizzled_colors.color_count / 4; color_quad++) { // first, load colors. We put 16 bytes / register and don't touch the upper half because we // convert u8s to u16s. { - const u8* base = in.data.data() + color_quad * 128; + const u8* base = swizzled_colors.data.data() + color_quad * 128; __m128i color0_p = _mm_loadu_si64((const __m128i*)(base + 0)); __m128i color1_p = _mm_loadu_si64((const __m128i*)(base + 16)); __m128i color2_p = _mm_loadu_si64((const __m128i*)(base + 32)); @@ -404,7 +347,7 @@ void interp_time_of_day_fast(const float weights[8], } { - const u8* base = in.data.data() + color_quad * 128 + 8; + const u8* base = swizzled_colors.data.data() + color_quad * 128 + 8; __m128i color0_p = _mm_loadu_si64((const __m128i*)(base + 0)); __m128i color1_p = _mm_loadu_si64((const __m128i*)(base + 16)); __m128i color2_p = _mm_loadu_si64((const __m128i*)(base + 32)); diff --git a/game/graphics/opengl_renderer/background/background_common.h b/game/graphics/opengl_renderer/background/background_common.h index 1218b96cfe..2f24f7646a 100644 --- a/game/graphics/opengl_renderer/background/background_common.h +++ b/game/graphics/opengl_renderer/background/background_common.h @@ -22,7 +22,7 @@ struct TfragRenderSettings { math::Vector4f hvdf_offset; math::Vector4f fog; int tree_idx; - float time_of_day_weights[8] = {0}; + math::Vector itimes[4]; math::Vector4f planes[4]; bool debug_culling = false; const u8* occlusion_culling = nullptr; @@ -42,7 +42,8 @@ DoubleDraw setup_opengl_from_draw_mode(DrawMode mode, u32 tex_unit, bool mipmap) void first_tfrag_draw_setup(const TfragRenderSettings& settings, SharedRenderState* render_state, ShaderId shader); -void interp_time_of_day_slow(const float weights[8], + +void interp_time_of_day_slow(const math::Vector itimes[4], const std::vector& in, math::Vector* out); @@ -53,8 +54,8 @@ struct SwizzledTimeOfDay { SwizzledTimeOfDay swizzle_time_of_day(const std::vector& in); -void interp_time_of_day_fast(const float weights[8], - const SwizzledTimeOfDay& in, +void interp_time_of_day_fast(const math::Vector itimes[4], + const SwizzledTimeOfDay& swizzled_colors, math::Vector* out); void cull_check_all_slow(const math::Vector4f* planes, diff --git a/game/graphics/opengl_renderer/buckets.h b/game/graphics/opengl_renderer/buckets.h index eabfbe5bff..69159412a2 100644 --- a/game/graphics/opengl_renderer/buckets.h +++ b/game/graphics/opengl_renderer/buckets.h @@ -81,6 +81,7 @@ enum class BucketId { namespace jak2 { enum class BucketId { + SPECIAL_BUCKET_2 = 2, TFRAG_L0_TFRAG = 8, TIE_L0_TFRAG = 9, TFRAG_L1_TFRAG = 19, @@ -88,7 +89,9 @@ enum class BucketId { SHRUB_L0_SHRUB = 74, SHRUB_L1_SHRUB = 83, TFRAG_T_L0_ALPHA = 128, + TFRAG_W_L0_WATER = 255, DEBUG_NO_ZBUF1 = 318, + DEBUG2 = 324, DEBUG_NO_ZBUF2 = 325, DEBUG3 = 326, MAX_BUCKETS = 327 diff --git a/game/graphics/opengl_renderer/dma_helpers.cpp b/game/graphics/opengl_renderer/dma_helpers.cpp index b698f00ac7..3719d6aa6c 100644 --- a/game/graphics/opengl_renderer/dma_helpers.cpp +++ b/game/graphics/opengl_renderer/dma_helpers.cpp @@ -1,5 +1,7 @@ #include "dma_helpers.h" +#include "common/log/log.h" + #include "third-party/fmt/format.h" /*! @@ -15,17 +17,17 @@ bool verify_unpack_with_stcycl(const DmaTransfer& transfer, bool usn, bool flg) { if (transfer.size_bytes != qwc * 16) { - fmt::print("verify_unpack: bad size {} vs {}\n", transfer.size_bytes, qwc * 16); + lg::error("verify_unpack: bad size {} vs {}", transfer.size_bytes, qwc * 16); return false; } if (transfer.vifcode0().kind != VifCode::Kind::STCYCL) { - fmt::print("verify_unpack: bad vifcode 0\n"); + lg::error("verify_unpack: bad vifcode 0"); return false; } if (transfer.vifcode1().kind != unpack_kind) { - fmt::print("verify_unpack: bad vifcode 1\n"); + lg::error("verify_unpack: bad vifcode 1"); return false; } @@ -33,18 +35,18 @@ bool verify_unpack_with_stcycl(const DmaTransfer& transfer, VifCodeUnpack unpack(transfer.vifcode1()); if (stcycl.cl != cl || stcycl.wl != wl) { - fmt::print("verify_unpack: bad cl/wl {}/{} vs {}/{}\n", stcycl.cl, stcycl.wl, cl, wl); + lg::error("verify_unpack: bad cl/wl {}/{} vs {}/{}", stcycl.cl, stcycl.wl, cl, wl); return false; } if (unpack.addr_qw != addr || unpack.use_tops_flag != flg || unpack.is_unsigned != usn) { - fmt::print("verify_unpack: bad unpack {}/{}/{} vs {}/{}/{}", unpack.addr_qw, - unpack.use_tops_flag, unpack.is_unsigned, addr, flg, usn); + lg::error("verify_unpack: bad unpack {}/{}/{} vs {}/{}/{}", unpack.addr_qw, + unpack.use_tops_flag, unpack.is_unsigned, addr, flg, usn); return false; } if (transfer.vifcode1().num != qwc) { - fmt::print("verify_unpack: bad num {} vs {}\n", transfer.vifcode1().num, qwc); + lg::error("verify_unpack: bad num {} vs {}", transfer.vifcode1().num, qwc); return false; } @@ -82,30 +84,30 @@ bool verify_unpack_no_stcycl(const DmaTransfer& transfer, bool usn, bool flg) { if (transfer.size_bytes != qwc * 16) { - fmt::print("verify_unpack: bad size {} vs {}\n", transfer.size_bytes, qwc * 16); + lg::error("verify_unpack: bad size {} vs {}", transfer.size_bytes, qwc * 16); return false; } if (transfer.vifcode0().kind != VifCode::Kind::NOP) { - fmt::print("verify_unpack: bad vifcode 0\n"); + lg::error("verify_unpack: bad vifcode 0"); return false; } if (transfer.vifcode1().kind != unpack_kind) { - fmt::print("verify_unpack: bad vifcode 1\n"); + lg::error("verify_unpack: bad vifcode 1"); return false; } VifCodeUnpack unpack(transfer.vifcode1()); if (unpack.addr_qw != addr || unpack.use_tops_flag != flg || unpack.is_unsigned != usn) { - fmt::print("verify_unpack: bad unpack {}/{}/{} vs {}/{}/{}", unpack.addr_qw, - unpack.use_tops_flag, unpack.is_unsigned, addr, flg, usn); + lg::error("verify_unpack: bad unpack {}/{}/{} vs {}/{}/{}", unpack.addr_qw, + unpack.use_tops_flag, unpack.is_unsigned, addr, flg, usn); return false; } if (transfer.vifcode1().num != qwc) { - fmt::print("verify_unpack: bad num {} vs {}\n", transfer.vifcode1().num, qwc); + lg::error("verify_unpack: bad num {} vs {}", transfer.vifcode1().num, qwc); return false; } @@ -134,4 +136,4 @@ void verify_mscal(const DmaTransfer& transfer, int address) { ASSERT(transfer.vif0() == 0); ASSERT(transfer.vifcode1().kind == VifCode::Kind::MSCAL); ASSERT(transfer.vifcode1().immediate == address); -} \ No newline at end of file +} diff --git a/game/graphics/opengl_renderer/foreground/Generic2_OpenGL.cpp b/game/graphics/opengl_renderer/foreground/Generic2_OpenGL.cpp index e76a39868e..5b17e13780 100644 --- a/game/graphics/opengl_renderer/foreground/Generic2_OpenGL.cpp +++ b/game/graphics/opengl_renderer/foreground/Generic2_OpenGL.cpp @@ -1,3 +1,5 @@ +#include "common/log/log.h" + #include "Generic2.h" void Generic2::opengl_setup() { @@ -223,11 +225,10 @@ void Generic2::setup_opengl_tex(u16 unit, if (!tex) { // TODO Add back if (tbp_to_lookup >= 8160 && tbp_to_lookup <= 8600) { - fmt::print("Failed to find texture at {}, using random (eye zone)\n", tbp_to_lookup); - + lg::warn("Failed to find texture at {}, using random (eye zone)", tbp_to_lookup); tex = render_state->texture_pool->get_placeholder_texture(); } else { - fmt::print("Failed to find texture at {}, using random\n", tbp_to_lookup); + lg::warn("Failed to find texture at {}, using random", tbp_to_lookup); tex = render_state->texture_pool->get_placeholder_texture(); } } diff --git a/game/graphics/opengl_renderer/loader/Loader.cpp b/game/graphics/opengl_renderer/loader/Loader.cpp index 6c3c0c5302..0c2d7adf86 100644 --- a/game/graphics/opengl_renderer/loader/Loader.cpp +++ b/game/graphics/opengl_renderer/loader/Loader.cpp @@ -17,7 +17,8 @@ std::string uppercase_string(const std::string& s) { } } // namespace -Loader::Loader(const fs::path& base_path) : m_base_path(base_path) { +Loader::Loader(const fs::path& base_path, int max_levels) + : m_base_path(base_path), m_max_levels(max_levels) { m_loader_thread = std::thread(&Loader::loader_thread, this); m_loader_stages = make_loader_stages(); } @@ -333,7 +334,7 @@ void Loader::update(TexturePool& texture_pool) { auto evt = scoped_prof("gpu-unload"); // try to remove levels. Timer unload_timer; - if (m_loaded_tfrag3_levels.size() >= 3) { + if ((int)m_loaded_tfrag3_levels.size() >= m_max_levels) { for (auto& lev : m_loaded_tfrag3_levels) { if (lev.second->frames_since_last_used > 180) { std::unique_lock lk(texture_pool.mutex()); diff --git a/game/graphics/opengl_renderer/loader/Loader.h b/game/graphics/opengl_renderer/loader/Loader.h index f31d4d5fd8..fbce81e7ac 100644 --- a/game/graphics/opengl_renderer/loader/Loader.h +++ b/game/graphics/opengl_renderer/loader/Loader.h @@ -16,7 +16,7 @@ class Loader { public: static constexpr float TIE_LOAD_BUDGET = 1.5f; static constexpr float SHARED_TEXTURE_LOAD_BUDGET = 3.f; - Loader(const fs::path& base_path); + Loader(const fs::path& base_path, int max_levels); ~Loader(); void update(TexturePool& tex_pool); void update_blocking(TexturePool& tex_pool); @@ -53,4 +53,5 @@ class Loader { std::vector> m_loader_stages; fs::path m_base_path; + int m_max_levels = 0; }; diff --git a/game/graphics/opengl_renderer/ocean/CommonOceanRenderer.cpp b/game/graphics/opengl_renderer/ocean/CommonOceanRenderer.cpp index b5e00a239d..ea3c4fc2a0 100644 --- a/game/graphics/opengl_renderer/ocean/CommonOceanRenderer.cpp +++ b/game/graphics/opengl_renderer/ocean/CommonOceanRenderer.cpp @@ -1,5 +1,7 @@ #include "CommonOceanRenderer.h" +#include "common/log/log.h" + CommonOceanRenderer::CommonOceanRenderer() { m_vertices.resize(4096 * 10); // todo decrease for (auto& buf : m_indices) { @@ -252,7 +254,7 @@ void CommonOceanRenderer::handle_near_adgif(const u8* data, u32 offset, u32 coun } break; default: - fmt::print("reg: {}\n", register_address_name(addr)); + lg::debug("reg: {}", register_address_name(addr)); break; } } @@ -412,7 +414,7 @@ void CommonOceanRenderer::handle_mid_adgif(const u8* data, u32 offset) { } break; default: - fmt::print("reg: {}\n", register_address_name(addr)); + lg::debug("reg: {}", register_address_name(addr)); break; } } diff --git a/game/graphics/opengl_renderer/ocean/OceanMid.cpp b/game/graphics/opengl_renderer/ocean/OceanMid.cpp index 0e192fa22d..07237aace9 100644 --- a/game/graphics/opengl_renderer/ocean/OceanMid.cpp +++ b/game/graphics/opengl_renderer/ocean/OceanMid.cpp @@ -1,5 +1,7 @@ #include "OceanMid.h" +#include "common/log/log.h" + static bool is_end_tag(const DmaTag& tag, const VifCode& v0, const VifCode& v1) { return tag.qwc == 2 && tag.kind == DmaTag::Kind::CNT && v0.kind == VifCode::Kind::NOP && v1.kind == VifCode::Kind::DIRECT; @@ -111,7 +113,7 @@ void OceanMid::run(DmaFollower& dma, SharedRenderState* render_state, ScopedProf run_call275_vu2c(); break; default: - fmt::print("unknown call1: {}\n", v1.immediate); + lg::warn("unknown call1: {}", v1.immediate); } } else if (v0.kind == VifCode::Kind::MSCALF && v1.kind == VifCode::Kind::FLUSHA) { switch (v0.immediate) { diff --git a/game/graphics/opengl_renderer/ocean/OceanNear.cpp b/game/graphics/opengl_renderer/ocean/OceanNear.cpp index ac9c753038..210b53567d 100644 --- a/game/graphics/opengl_renderer/ocean/OceanNear.cpp +++ b/game/graphics/opengl_renderer/ocean/OceanNear.cpp @@ -1,5 +1,7 @@ #include "OceanNear.h" +#include "common/log/log.h" + #include "third-party/imgui/imgui.h" OceanNear::OceanNear(const std::string& name, int my_id) @@ -54,7 +56,7 @@ void OceanNear::render(DmaFollower& dma, } if (dma.current_tag().qwc != 2) { - fmt::print("abort!\n"); + lg::error("abort OceanNear::render!"); while (dma.current_tag_offset() != render_state->next_bucket) { dma.read_and_advance(); } diff --git a/game/graphics/pipelines/opengl.cpp b/game/graphics/pipelines/opengl.cpp index 63814480e4..dd8b490f38 100644 --- a/game/graphics/pipelines/opengl.cpp +++ b/game/graphics/pipelines/opengl.cpp @@ -38,6 +38,8 @@ namespace { constexpr bool run_dma_copy = false; +constexpr PerGameVersion fr3_level_count(3, 7); + struct GraphicsData { // vsync std::mutex sync_mutex; @@ -72,8 +74,9 @@ struct GraphicsData { GraphicsData(GameVersion version) : dma_copier(EE_MAIN_MEM_SIZE), texture_pool(std::make_shared(version)), - loader(std::make_shared(file_util::get_jak_project_dir() / "out" / - game_version_names[version] / "fr3")), + loader(std::make_shared( + file_util::get_jak_project_dir() / "out" / game_version_names[version] / "fr3", + fr3_level_count[version])), ogl_renderer(texture_pool, loader, version), version(version) {} }; diff --git a/game/graphics/texture/TexturePool.cpp b/game/graphics/texture/TexturePool.cpp index 88998c3d91..f978b344a7 100644 --- a/game/graphics/texture/TexturePool.cpp +++ b/game/graphics/texture/TexturePool.cpp @@ -136,11 +136,9 @@ void TexturePool::unload_texture(PcTextureId tex_id, u64 gpu_id) { ASSERT(false); return; } - if (tex->is_placeholder) { - fmt::print("trying to unload something that was already placholdered: {} {}\n", - get_debug_texture_name(tex_id), tex->gpu_textures.size()); - } - ASSERT(!tex->is_placeholder); + ASSERT_MSG(!tex->is_placeholder, + fmt::format("trying to unload something that was already placholdered: {} {}\n", + get_debug_texture_name(tex_id), tex->gpu_textures.size())); auto it = std::find_if(tex->gpu_textures.begin(), tex->gpu_textures.end(), [&](const auto& a) { return a.gl == gpu_id; }); ASSERT(it != tex->gpu_textures.end()); @@ -378,4 +376,4 @@ std::string TexturePool::get_debug_texture_name(PcTextureId id) { } else { return "???"; } -} \ No newline at end of file +} diff --git a/game/kernel/common/kdgo.cpp b/game/kernel/common/kdgo.cpp index a92ebb9877..86039b6a75 100644 --- a/game/kernel/common/kdgo.cpp +++ b/game/kernel/common/kdgo.cpp @@ -232,30 +232,6 @@ Ptr GetNextDGO(u32* lastObjectFlag) { return buffer; } -/*! - * Instruct the IOP to continue loading the next object. - * Only should be called once it is safe to overwrite the previous. - * @param heapPtr : pointer to heap so the IOP could try to load directly into a heap if it wants. - * This should be updated after each object file load to make sure the IOP knows the exact location - * of the end of the GOAL heap data. - * DONE, - * EXACT - */ -void ContinueLoadingDGO(Ptr heapPtr) { - u32 msgID = sMsgNum; - RPC_Dgo_Cmd* sendBuff = sMsg + sMsgNum; - sMsgNum = sMsgNum ^ 1; - sendBuff->result = DGO_RPC_RESULT_INIT; - sMsg[msgID].buffer1 = 0; - sMsg[msgID].buffer2 = 0; - sMsg[msgID].buffer_heap_top = heapPtr.offset; - // the IOP will wait for this RpcCall to continue the DGO state machine. - RpcCall(DGO_RPC_CHANNEL, DGO_RPC_LOAD_NEXT_FNO, true, sendBuff, sizeof(RPC_Dgo_Cmd), sendBuff, - sizeof(RPC_Dgo_Cmd)); - // this async RPC call will complete when the next object is fully loaded. - sLastMsg = sendBuff; -} - /*! * Load the TEST.DGO file. * Presumably used for debugging DGO loads. @@ -291,7 +267,9 @@ void LoadDGOTest() { } // okay to load the next one - ContinueLoadingDGO(Ptr(0x4000000)); + ASSERT(false); // this is different per version, annoyingly. This function is unused though, + // so let's be lazy for now... + // ContinueLoadingDGO(Ptr(0x4000000)); } sShowStallMsg = lastShowStall; diff --git a/game/kernel/common/kdgo.h b/game/kernel/common/kdgo.h index 5a75d0b1d0..9e6a5b4e12 100644 --- a/game/kernel/common/kdgo.h +++ b/game/kernel/common/kdgo.h @@ -2,8 +2,10 @@ #include "common/common_types.h" +#include "game/common/dgo_rpc_types.h" #include "game/kernel/common/Ptr.h" +extern u32 sMsgNum; s32 RpcCall(s32 rpcChannel, u32 fno, bool async, @@ -13,7 +15,6 @@ s32 RpcCall(s32 rpcChannel, s32 recvSize); void BeginLoadingDGO(const char* name, Ptr buffer1, Ptr buffer2, Ptr currentHeap); Ptr GetNextDGO(u32* lastObjectFlag); -void ContinueLoadingDGO(Ptr heapPtr); u64 RpcCall_wrapper(void* _args); u32 RpcBusy(s32 channel); void RpcSync(s32 channel); @@ -23,3 +24,5 @@ u32 InitRPC(); void StopIOP(); extern u32 sShowStallMsg; +extern RPC_Dgo_Cmd sMsg[2]; +extern RPC_Dgo_Cmd* sLastMsg; \ No newline at end of file diff --git a/game/kernel/common/klink.cpp b/game/kernel/common/klink.cpp index 4a89d7694c..6017e69e5d 100644 --- a/game/kernel/common/klink.cpp +++ b/game/kernel/common/klink.cpp @@ -144,7 +144,7 @@ void link_control::begin(Ptr object_file, m_opengoal = false; // not an open goal object. if (link_debug_printfs) { - printf("Linking GOAL style object\n"); + printf("Linking GOAL style object %s\n", name); } // initialize @@ -252,6 +252,9 @@ Ptr c_symlink2(Ptr objData, Ptr linkObj, Ptr relocTable) { *(objPtr.cast()) = linkObj.offset; } else { // I don't think we should hit this ever. + // if this is hit - there's a good chance something has overwritten the object file data + // after linking has started. + printf("val is 0x%x ptr %p\n", objValue, relocPtr - 1); ASSERT(false); } } while (*relocPtr); diff --git a/game/kernel/jak1/kdgo.cpp b/game/kernel/jak1/kdgo.cpp index f165b7556e..c08b8c5b97 100644 --- a/game/kernel/jak1/kdgo.cpp +++ b/game/kernel/jak1/kdgo.cpp @@ -3,6 +3,7 @@ #include "common/common_types.h" #include "common/log/log.h" +#include "game/common/dgo_rpc_types.h" #include "game/kernel/common/Ptr.h" #include "game/kernel/common/fileio.h" #include "game/kernel/common/kdgo.h" @@ -10,6 +11,31 @@ #include "game/kernel/jak1/klink.h" namespace jak1 { + +/*! + * Instruct the IOP to continue loading the next object. + * Only should be called once it is safe to overwrite the previous. + * @param heapPtr : pointer to heap so the IOP could try to load directly into a heap if it wants. + * This should be updated after each object file load to make sure the IOP knows the exact location + * of the end of the GOAL heap data. + * DONE, + * EXACT + */ +void ContinueLoadingDGO(Ptr heapPtr) { + u32 msgID = sMsgNum; + RPC_Dgo_Cmd* sendBuff = sMsg + sMsgNum; + sMsgNum = sMsgNum ^ 1; + sendBuff->result = DGO_RPC_RESULT_INIT; + sMsg[msgID].buffer1 = 0; + sMsg[msgID].buffer2 = 0; + sMsg[msgID].buffer_heap_top = heapPtr.offset; + // the IOP will wait for this RpcCall to continue the DGO state machine. + RpcCall(DGO_RPC_CHANNEL, DGO_RPC_LOAD_NEXT_FNO, true, sendBuff, sizeof(RPC_Dgo_Cmd), sendBuff, + sizeof(RPC_Dgo_Cmd)); + // this async RPC call will complete when the next object is fully loaded. + sLastMsg = sendBuff; +} + /*! * Load and link a DGO file. * This does not use the mutli-threaded linker and will block until the entire file is done. diff --git a/game/kernel/jak2/kdgo.cpp b/game/kernel/jak2/kdgo.cpp index 246186b37a..d409c9f02d 100644 --- a/game/kernel/jak2/kdgo.cpp +++ b/game/kernel/jak2/kdgo.cpp @@ -10,6 +10,30 @@ namespace jak2 { +/*! + * Instruct the IOP to continue loading the next object. + * Only should be called once it is safe to overwrite the previous. + * @param heapPtr : pointer to heap so the IOP could try to load directly into a heap if it wants. + * This should be updated after each object file load to make sure the IOP knows the exact location + * of the end of the GOAL heap data. + * + * Unlike jak 1, we update buffer1 and buffer2 here for borrow heap loads. + */ +void ContinueLoadingDGO(Ptr b1, Ptr b2, Ptr heapPtr) { + u32 msgID = sMsgNum; + RPC_Dgo_Cmd* sendBuff = sMsg + sMsgNum; + sMsgNum = sMsgNum ^ 1; + sendBuff->result = DGO_RPC_RESULT_INIT; + sMsg[msgID].buffer1 = b1.offset; + sMsg[msgID].buffer2 = b2.offset; + sMsg[msgID].buffer_heap_top = heapPtr.offset; + // the IOP will wait for this RpcCall to continue the DGO state machine. + RpcCall(DGO_RPC_CHANNEL, DGO_RPC_LOAD_NEXT_FNO, true, sendBuff, sizeof(RPC_Dgo_Cmd), sendBuff, + sizeof(RPC_Dgo_Cmd)); + // this async RPC call will complete when the next object is fully loaded. + sLastMsg = sendBuff; +} + /*! * Load and link a DGO file. * This does not use the mutli-threaded linker and will block until the entire file is done. @@ -85,7 +109,7 @@ void load_and_link_dgo_from_c(const char* name, // inform IOP we are done if (!lastObjectLoaded) { - ContinueLoadingDGO(Ptr((heap->current + 0x3f).offset & 0xffffffc0)); + ContinueLoadingDGO(buffer1, buffer2, Ptr((heap->current + 0x3f).offset & 0xffffffc0)); } } sShowStallMsg = oldShowStall; diff --git a/game/kernel/jak2/kscheme.cpp b/game/kernel/jak2/kscheme.cpp index 0cbc3b5d67..bccd4bd994 100644 --- a/game/kernel/jak2/kscheme.cpp +++ b/game/kernel/jak2/kscheme.cpp @@ -1460,7 +1460,7 @@ int InitHeapAndSymbol() { set_fixed_symbol(FIX_SYM_ASIZE_OF_BASIC_FUNC, "asize-of-basic-func", make_function_from_c((void*)asize_of_basic).offset); set_fixed_symbol(FIX_SYM_COPY_BASIC_FUNC, "asize-of-basic-func", - make_function_from_c((void*)copy_basic).offset); + make_function_from_c((void*)copy_basic, true).offset); set_fixed_symbol(FIX_SYM_DELETE_BASIC, "delete-basic", make_function_from_c((void*)delete_basic).offset); set_fixed_symbol(FIX_SYM_GLOBAL_HEAP, "global", kglobalheap.offset); @@ -1509,7 +1509,7 @@ int InitHeapAndSymbol() { set_fixed_type(FIX_SYM_BASIC, "basic", get_fixed_type_symbol(FIX_SYM_STRUCTURE), pack_type_flag(9, 0, 4), make_function_from_c((void*)print_basic).offset, make_function_from_c((void*)inspect_basic).offset); - basic_type->new_method = make_function_from_c((void*)new_basic); + basic_type->new_method = make_function_from_c((void*)new_basic, true); basic_type->delete_method = Ptr(u32_in_fixed_sym(FIX_SYM_DELETE_BASIC)); basic_type->asize_of_method = Ptr(u32_in_fixed_sym(FIX_SYM_ASIZE_OF_BASIC_FUNC)); basic_type->copy_method = Ptr(u32_in_fixed_sym(FIX_SYM_COPY_BASIC_FUNC)); @@ -1636,7 +1636,7 @@ int InitHeapAndSymbol() { pack_type_flag(9, 0, 16), 0, 0); Ptr(u32_in_fixed_sym(FIX_SYM_OBJECT_TYPE))->new_method = - make_function_from_c((void*)alloc_heap_object); + make_function_from_c((void*)alloc_heap_object, true); make_function_symbol_from_c("string->symbol", (void*)intern); make_function_symbol_from_c("print", (void*)sprint); diff --git a/game/mips2c/jak2_functions/debug.cpp b/game/mips2c/jak2_functions/debug.cpp new file mode 100644 index 0000000000..a59f717742 --- /dev/null +++ b/game/mips2c/jak2_functions/debug.cpp @@ -0,0 +1,592 @@ + +//--------------------------MIPS2C--------------------- +// clang-format off +#include "game/mips2c/mips2c_private.h" +#include "game/kernel/jak2/kscheme.h" +#include "game/mips2c/jak2_functions/sky.h" + +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace debug_line_clip { +struct Cache { + void* math_camera; // *math-camera* +} cache; + +void qfsrv_same_mtsab_4(ExecutionContext* c, int reg) { + u32 temp[4]; + auto& val = c->gprs[reg]; + temp[0] = val.du32[1]; + temp[1] = val.du32[2]; + temp[2] = val.du32[3]; + temp[3] = val.du32[0]; + val.du32[0] = temp[0]; + val.du32[1] = temp[1]; + val.du32[2] = temp[2]; + val.du32[3] = temp[3]; +} + +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + bool bc = false; + bool cop1_bc = false; + c->load_symbol2(v1, cache.math_camera); // lw v1, *math-camera*(s7) + c->lqc2(vf9, 0, a2); // lqc2 vf9, 0(a2) + c->lqc2(vf10, 0, a3); // lqc2 vf10, 0(a3) + c->lqc2(vf16, 940, v1); // lqc2 vf16, 940(v1) + c->lqc2(vf17, 956, v1); // lqc2 vf17, 956(v1) + c->lqc2(vf18, 972, v1); // lqc2 vf18, 972(v1) + c->lqc2(vf19, 988, v1); // lqc2 vf19, 988(v1) + c->vmula_bc(DEST::xyzw, BC::x, vf16, vf9); // vmulax.xyzw acc, vf16, vf9 + c->vmadda_bc(DEST::xyzw, BC::y, vf17, vf9); // vmadday.xyzw acc, vf17, vf9 + c->vmadda_bc(DEST::xyzw, BC::z, vf18, vf9); // vmaddaz.xyzw acc, vf18, vf9 + c->vmsub_bc(DEST::xyzw, BC::w, vf11, vf19, vf0); // vmsubw.xyzw vf11, vf19, vf0 + c->vmula_bc(DEST::xyzw, BC::x, vf16, vf10); // vmulax.xyzw acc, vf16, vf10 + c->vmadda_bc(DEST::xyzw, BC::y, vf17, vf10); // vmadday.xyzw acc, vf17, vf10 + c->vmadda_bc(DEST::xyzw, BC::z, vf18, vf10); // vmaddaz.xyzw acc, vf18, vf10 + c->vmsub_bc(DEST::xyzw, BC::w, vf12, vf19, vf0); // vmsubw.xyzw vf12, vf19, vf0 + c->mov128_gpr_vf(v1, vf11); // qmfc2.i v1, vf11 + c->pcgtw(v1, r0, v1); // pcgtw v1, r0, v1 + c->ppach(a2, r0, v1); // ppach a2, r0, v1 + c->mov128_gpr_vf(v1, vf12); // qmfc2.i v1, vf12 + c->pcgtw(v1, r0, v1); // pcgtw v1, r0, v1 + c->ppach(a3, r0, v1); // ppach a3, r0, v1 + c->and_(v1, a2, a3); // and v1, a2, a3 + bc = c->sgpr64(v1) != 0; // bne v1, r0, L220 + // nop // sll r0, r0, 0 + if (bc) {goto block_10;} // branch non-likely + + c->vmove(DEST::xyzw, vf13, vf9); // vmove.xyzw vf13, vf9 + c->vmove(DEST::xyzw, vf14, vf10); // vmove.xyzw vf14, vf10 + c->or_(a2, a2, a3); // or a2, a2, a3 + bc = c->sgpr64(a2) == 0; // beq a2, r0, L219 + // nop // sll r0, r0, 0 + if (bc) {goto block_9;} // branch non-likely + + c->mov128_gpr_vf(a2, vf11); // qmfc2.i a2, vf11 + c->mov128_gpr_vf(a3, vf12); // qmfc2.i a3, vf12 + c->mtc1(f0, r0); // mtc1 f0, r0 + c->mtc1(f1, r0); // mtc1 f1, r0 + c->lui(t0, 16256); // lui t0, 16256 + c->mtc1(f2, t0); // mtc1 f2, t0 + c->addiu(t0, r0, 3); // addiu t0, r0, 3 + // Unknown instr: mtsab r0, 4 + + block_3: + c->mtc1(f3, a2); // mtc1 f3, a2 + c->mtc1(f4, a3); // mtc1 f4, a3 + c->subs(f5, f3, f4); // sub.s f5, f3, f4 + cop1_bc = c->fprs[f3] < c->fprs[f0]; // c.lt.s f3, f0 + bc = !cop1_bc; // bc1f L217 + // nop // sll r0, r0, 0 + if (bc) {goto block_5;} // branch non-likely + + c->divs(f6, f3, f5); // div.s f6, f3, f5 + c->maxs(f1, f6, f1); // max.s f1, f6, f1 + + block_5: + cop1_bc = c->fprs[f4] < c->fprs[f0]; // c.lt.s f4, f0 + bc = !cop1_bc; // bc1f L218 + // nop // sll r0, r0, 0 + if (bc) {goto block_7;} // branch non-likely + + c->divs(f3, f3, f5); // div.s f3, f3, f5 + c->mins(f2, f3, f2); // min.s f2, f3, f2 + + block_7: + // Unknown instr: qfsrv a2, a2, a2 + qfsrv_same_mtsab_4(c, a2); + // Unknown instr: qfsrv a3, a3, a3 + qfsrv_same_mtsab_4(c, a3); + bc = c->sgpr64(t0) != 0; // bne t0, r0, L216 + c->daddiu(t0, t0, -1); // daddiu t0, t0, -1 + if (bc) {goto block_3;} // branch non-likely + + c->mfc1(a2, f1); // mfc1 a2, f1 + c->mfc1(a3, f2); // mfc1 a3, f2 + c->mov128_vf_gpr(vf20, a2); // qmtc2.i vf20, a2 + c->mov128_vf_gpr(vf21, a3); // qmtc2.i vf21, a3 + c->vsub(DEST::xyzw, vf15, vf10, vf9); // vsub.xyzw vf15, vf10, vf9 + c->vmul_bc(DEST::xyzw, BC::x, vf13, vf15, vf20); // vmulx.xyzw vf13, vf15, vf20 + c->vadd(DEST::xyzw, vf13, vf9, vf13); // vadd.xyzw vf13, vf9, vf13 + c->vmul_bc(DEST::xyzw, BC::x, vf14, vf15, vf21); // vmulx.xyzw vf14, vf15, vf21 + c->vadd(DEST::xyzw, vf14, vf9, vf14); // vadd.xyzw vf14, vf9, vf14 + + block_9: + c->sqc2(vf13, 0, a0); // sqc2 vf13, 0(a0) + c->sqc2(vf14, 0, a1); // sqc2 vf14, 0(a1) + + block_10: + c->daddiu(v0, s7, 4); // daddiu v0, s7, 4 + c->movn(v0, s7, v1); // movn v0, s7, v1 + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +void link() { + cache.math_camera = intern_from_c("*math-camera*").c(); + gLinkedFunctionTable.reg("debug-line-clip?", execute, 32); +} + +} // namespace debug_line_clip +} // namespace Mips2C + +//--------------------------MIPS2C--------------------- +// clang-format off +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace init_boundary_regs { +struct Cache { + void* math_camera; // *math-camera* + void* sky_work; // *sky-work* +} cache; + +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + c->load_symbol2(v1, cache.math_camera); // lw v1, *math-camera*(s7) + c->load_symbol2(a0, cache.sky_work); // lw a0, *sky-work*(s7) + c->daddiu(a0, a0, 1008); // daddiu a0, a0, 1008 + c->lwc1(f0, 908, v1); // lwc1 f0, 908(v1) + c->swc1(f0, 0, a0); // swc1 f0, 0(a0) + c->lwc1(f0, 128, v1); // lwc1 f0, 128(v1) + c->swc1(f0, 4, a0); // swc1 f0, 4(a0) + c->lwc1(f0, 124, v1); // lwc1 f0, 124(v1) + c->swc1(f0, 8, a0); // swc1 f0, 8(a0) + c->lui(a1, 17727); // lui a1, 17727 + c->ori(a1, a1, 61440); // ori a1, a1, 61440 + c->mtc1(f0, a1); // mtc1 f0, a1 + c->swc1(f0, 12, a0); // swc1 f0, 12(a0) + c->lqc2(vf31, 572, v1); // lqc2 vf31, 572(v1) + c->lqc2(vf30, 588, v1); // lqc2 vf30, 588(v1) + c->lqc2(vf29, 604, v1); // lqc2 vf29, 604(v1) + c->lqc2(vf28, 620, v1); // lqc2 vf28, 620(v1) + c->lqc2(vf14, 780, v1); // lqc2 vf14, 780(v1) + c->lqc2(vf26, 796, v1); // lqc2 vf26, 796(v1) + c->lqc2(vf25, 812, v1); // lqc2 vf25, 812(v1) + c->load_symbol2(v1, cache.sky_work); // lw v1, *sky-work*(s7) + c->lqc2(vf13, 1008, v1); // lqc2 vf13, 1008(v1) + c->vmul(DEST::xyzw, vf31, vf31, vf14); // vmul.xyzw vf31, vf31, vf14 + c->vmul(DEST::xyzw, vf30, vf30, vf14); // vmul.xyzw vf30, vf30, vf14 + c->vmul(DEST::xyzw, vf29, vf29, vf14); // vmul.xyzw vf29, vf29, vf14 + c->vmul(DEST::xyzw, vf28, vf28, vf14); // vmul.xyzw vf28, vf28, vf14 + c->vmove(DEST::xyzw, vf24, vf0); // vmove.xyzw vf24, vf0 + c->mov128_gpr_vf(v1, vf24); // qmfc2.i v1, vf24 + c->gprs[v0].du64[0] = 0; // or v0, r0, r0 + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + sky_regs_vfs.copy_vfs_from_other(c); + return c->gprs[v0].du64[0]; +} + +void link() { + cache.math_camera = intern_from_c("*math-camera*").c(); + cache.sky_work = intern_from_c("*sky-work*").c(); + gLinkedFunctionTable.reg("init-boundary-regs", execute, 128); +} + +} // namespace init_boundary_regs +} // namespace Mips2C + +//--------------------------MIPS2C--------------------- +// clang-format off +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace draw_boundary_polygon { +struct Cache { + void* clip_polygon_against_negative_hyperplane; // clip-polygon-against-negative-hyperplane + void* clip_polygon_against_positive_hyperplane; // clip-polygon-against-positive-hyperplane +} cache; + +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + bool bc = false; + u32 call_addr = 0; + // nop // sll r0, r0, 0 + c->daddiu(sp, sp, -8); // daddiu sp, sp, -8 + // nop // sll r0, r0, 0 + c->sd(ra, 0, sp); // sd ra, 0(sp) + c->load_symbol2(t9, cache.clip_polygon_against_positive_hyperplane);// lw t9, clip-polygon-against-positive-hyperplane(s7) + c->mov64(a2, t4); // or a2, t4, r0 + c->mov64(a3, t5); // or a3, t5, r0 + call_addr = c->gprs[t9].du32[0]; // function call: + c->daddu(t2, a2, r0); // daddu t2, a2, r0 + // c->jalr(call_addr); // jalr ra, t9 + clip_polygon_against_positive_hyperplane::execute(ctxt); + bc = c->sgpr64(t0) == 0; // beq t0, r0, L32 + // nop // sll r0, r0, 0 + if (bc) {goto block_7;} // branch non-likely + + c->mov64(a2, t5); // or a2, t5, r0 + c->mov64(a3, t4); // or a3, t4, r0 + call_addr = c->gprs[t9].du32[0]; // function call: + c->daddiu(t2, a2, 4); // daddiu t2, a2, 4 + // c->jalr(call_addr); // jalr ra, t9 + clip_polygon_against_positive_hyperplane::execute(ctxt); + bc = c->sgpr64(t0) == 0; // beq t0, r0, L32 + c->load_symbol2(t9, cache.clip_polygon_against_negative_hyperplane);// lw t9, clip-polygon-against-negative-hyperplane(s7) + if (bc) {goto block_7;} // branch non-likely + + c->mov64(a2, t4); // or a2, t4, r0 + c->mov64(a3, t5); // or a3, t5, r0 + call_addr = c->gprs[t9].du32[0]; // function call: + c->daddu(t2, a2, r0); // daddu t2, a2, r0 + // c->jalr(call_addr); // jalr ra, t9 + clip_polygon_against_negative_hyperplane::execute(ctxt); + bc = c->sgpr64(t0) == 0; // beq t0, r0, L32 + // nop // sll r0, r0, 0 + if (bc) {goto block_7;} // branch non-likely + + c->mov64(a2, t5); // or a2, t5, r0 + c->mov64(a3, t4); // or a3, t4, r0 + call_addr = c->gprs[t9].du32[0]; // function call: + c->daddiu(t2, a2, 4); // daddiu t2, a2, 4 + // c->jalr(call_addr); // jalr ra, t9 + clip_polygon_against_negative_hyperplane::execute(ctxt); + bc = c->sgpr64(t0) == 0; // beq t0, r0, L32 + c->lw(a3, 4, a1); // lw a3, 4(a1) + if (bc) {goto block_7;} // branch non-likely + + c->mov64(a2, t4); // or a2, t4, r0 + // nop // sll r0, r0, 0 + c->sqc2(vf27, 0, a3); // sqc2 vf27, 0(a3) + c->daddiu(a3, a3, 16); // daddiu a3, a3, 16 + c->sw(t0, -16, a3); // sw t0, -16(a3) + // nop // sll r0, r0, 0 + + block_5: + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, a2); // lqc2 vf2, 16(a2) + // nop // sll r0, r0, 0 + c->lqc2(vf3, 32, a2); // lqc2 vf3, 32(a2) + c->vdiv(vf0, BC::w, vf1, BC::w); // vdiv Q, vf0.w, vf1.w + c->vmul(DEST::xyzw, vf1, vf1, vf26); // vmul.xyzw vf1, vf1, vf26 + // nop // sll r0, r0, 0 + c->vftoi0(DEST::xyzw, vf3, vf3); // vftoi0.xyzw vf3, vf3 + // nop // sll r0, r0, 0 + c->vadd(DEST::xyzw, vf2, vf2, vf24); // vadd.xyzw vf2, vf2, vf24 + // nop // sll r0, r0, 0 + c->vwaitq(); // vwaitq + // nop // sll r0, r0, 0 + c->vmulq(DEST::xyz, vf1, vf1); // vmulq.xyz vf1, vf1, Q + c->sqc2(vf3, 16, a3); // sqc2 vf3, 16(a3) + c->vmulq(DEST::xyzw, vf2, vf2); // vmulq.xyzw vf2, vf2, Q + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + c->vadd(DEST::xyzw, vf1, vf1, vf25); // vadd.xyzw vf1, vf1, vf25 + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->vmax_bc(DEST::z, BC::z, vf1, vf1, vf0); // vmaxz.z vf1, vf1, vf0 + // nop // sll r0, r0, 0 + c->vmini_bc(DEST::w, BC::z, vf1, vf1, vf13); // vminiz.w vf1, vf1, vf13 + // nop // sll r0, r0, 0 + c->vmax_bc(DEST::w, BC::y, vf1, vf1, vf13); // vmaxy.w vf1, vf1, vf13 + // nop // sll r0, r0, 0 + c->sqc2(vf2, -48, a3); // sqc2 vf2, -48(a3) + c->daddiu(t0, t0, -1); // daddiu t0, t0, -1 + c->vftoi4(DEST::xyzw, vf1, vf1); // vftoi4.xyzw vf1, vf1 + // nop // sll r0, r0, 0 + bc = c->sgpr64(t0) != 0; // bne t0, r0, L31 + c->sqc2(vf1, -16, a3); // sqc2 vf1, -16(a3) + if (bc) {goto block_5;} // branch non-likely + + c->sw(a3, 4, a1); // sw a3, 4(a1) + // nop // sll r0, r0, 0 + c->ld(ra, 0, sp); // ld ra, 0(sp) + c->daddiu(v0, s7, 4); // daddiu v0, s7, 4 + //jr ra // jr ra + c->daddiu(sp, sp, 8); // daddiu sp, sp, 8 + goto end_of_function; // return + + + block_7: + c->ld(ra, 0, sp); // ld ra, 0(sp) + c->mov64(v0, s7); // or v0, s7, r0 + //jr ra // jr ra + c->daddiu(sp, sp, 8); // daddiu sp, sp, 8 + goto end_of_function; // return + + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +void link() { + cache.clip_polygon_against_negative_hyperplane = intern_from_c("clip-polygon-against-negative-hyperplane").c(); + cache.clip_polygon_against_positive_hyperplane = intern_from_c("clip-polygon-against-positive-hyperplane").c(); + gLinkedFunctionTable.reg("draw-boundary-polygon", execute, 1024); +} + +} // namespace draw_boundary_polygon +} // namespace Mips2C + + +//--------------------------MIPS2C--------------------- +// clang-format off +#include "game/mips2c/mips2c_private.h" +#include "game/kernel/jak2/kscheme.h" +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace render_boundary_quad { +struct Cache { + void* fake_scratchpad_data; // *fake-scratchpad-data* + void* math_camera; // *math-camera* + void* draw_boundary_polygon; // draw-boundary-polygon +} cache; + +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + c->copy_vfs_from_other(&sky_regs_vfs); + bool bc = false; + c->mov64(v1, a0); // or v1, a0, r0 + c->load_symbol2(v1, cache.math_camera); // lw v1, *math-camera*(s7) + c->lqc2(vf14, 780, v1); // lqc2 vf14, 780(v1) + get_fake_spad_addr2(t4, cache.fake_scratchpad_data, 0, c);// lui t4, 28672 + c->ori(t4, t4, 12288); // ori t4, t4, 12288 + get_fake_spad_addr2(t5, cache.fake_scratchpad_data, 0, c);// lui t5, 28672 + c->ori(t5, t5, 14336); // ori t5, t5, 14336 + c->mov64(a3, t4); // or a3, t4, r0 + // nop // sll r0, r0, 0 + c->lqc2(vf1, 0, a0); // lqc2 vf1, 0(a0) + c->addiu(t0, r0, 4); // addiu t0, r0, 4 + c->lqc2(vf2, 16, a0); // lqc2 vf2, 16(a0) + // nop // sll r0, r0, 0 + c->lqc2(vf3, 32, a0); // lqc2 vf3, 32(a0) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf1); // vmulax.xyzw acc, vf31, vf1 + c->lqc2(vf4, 48, a0); // lqc2 vf4, 48(a0) + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf1); // vmadday.xyzw acc, vf30, vf1 + c->lqc2(vf5, 64, a0); // lqc2 vf5, 64(a0) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf1); // vmaddaz.xyzw acc, vf29, vf1 + c->lqc2(vf6, 80, a0); // lqc2 vf6, 80(a0) + c->vmadd_bc(DEST::xyzw, BC::w, vf1, vf28, vf1); // vmaddw.xyzw vf1, vf28, vf1 + c->lqc2(vf7, 96, a0); // lqc2 vf7, 96(a0) + // nop // sll r0, r0, 0 + c->lqc2(vf8, 112, a0); // lqc2 vf8, 112(a0) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf4); // vmulax.xyzw acc, vf31, vf4 + // nop // sll r0, r0, 0 + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf4); // vmadday.xyzw acc, vf30, vf4 + c->lqc2(vf10, 144, a0); // lqc2 vf10, 144(a0) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf4); // vmaddaz.xyzw acc, vf29, vf4 + c->lqc2(vf11, 160, a0); // lqc2 vf11, 160(a0) + c->vmadd_bc(DEST::xyzw, BC::w, vf4, vf28, vf4); // vmaddw.xyzw vf4, vf28, vf4 + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + c->sqc2(vf2, 16, a3); // sqc2 vf2, 16(a3) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf7); // vmulax.xyzw acc, vf31, vf7 + c->sqc2(vf3, 32, a3); // sqc2 vf3, 32(a3) + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf7); // vmadday.xyzw acc, vf30, vf7 + c->sqc2(vf5, 64, a3); // sqc2 vf5, 64(a3) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf7); // vmaddaz.xyzw acc, vf29, vf7 + c->sqc2(vf3, 80, a3); // sqc2 vf3, 80(a3) + c->vmadd_bc(DEST::xyzw, BC::w, vf7, vf28, vf7); // vmaddw.xyzw vf7, vf28, vf7 + c->sqc2(vf8, 112, a3); // sqc2 vf8, 112(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf3, 128, a3); // sqc2 vf3, 128(a3) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf10); // vmulax.xyzw acc, vf31, vf10 + c->sqc2(vf11, 160, a3); // sqc2 vf11, 160(a3) + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf10); // vmadday.xyzw acc, vf30, vf10 + c->sqc2(vf3, 176, a3); // sqc2 vf3, 176(a3) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf10); // vmaddaz.xyzw acc, vf29, vf10 + c->sqc2(vf2, 208, a3); // sqc2 vf2, 208(a3) + c->vmadd_bc(DEST::xyzw, BC::w, vf10, vf28, vf10); // vmaddw.xyzw vf10, vf28, vf10 + c->sqc2(vf3, 224, a3); // sqc2 vf3, 224(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 192, a3); // sqc2 vf1, 192(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf4, 48, a3); // sqc2 vf4, 48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf7, 96, a3); // sqc2 vf7, 96(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf10, 144, a3); // sqc2 vf10, 144(a3) + c->load_symbol2(t9, cache.draw_boundary_polygon); // lw t9, draw-boundary-polygon(s7) + c->vsub(DEST::xyzw, vf4, vf4, vf1); // vsub.xyzw vf4, vf4, vf1 + // nop // sll r0, r0, 0 + c->vsub(DEST::xyzw, vf7, vf7, vf1); // vsub.xyzw vf7, vf7, vf1 + // nop // sll r0, r0, 0 + c->vopmula(vf4, vf7); // vopmula.xyz acc, vf4, vf7 + // nop // sll r0, r0, 0 + c->vopmsub(vf10, vf7, vf4); // vopmsub.xyz vf10, vf7, vf4 + // nop // sll r0, r0, 0 + c->vmul(DEST::xyzw, vf10, vf10, vf1); // vmul.xyzw vf10, vf10, vf1 + // nop // sll r0, r0, 0 + c->vadd_bc(DEST::y, BC::x, vf10, vf10, vf10); // vaddx.y vf10, vf10, vf10 + // nop // sll r0, r0, 0 + c->vadd_bc(DEST::y, BC::z, vf10, vf10, vf10); // vaddz.y vf10, vf10, vf10 + // nop // sll r0, r0, 0 + c->mov128_gpr_vf(v0, vf10); // qmfc2.i v0, vf10 + // nop // sll r0, r0, 0 + bc = ((s64)c->sgpr64(v0)) >= 0; // bgez v0, L29 + // nop // sll r0, r0, 0 + if (bc) {goto block_2;} // branch non-likely + + // Unknown instr: jr t9 + // nop // sll r0, r0, 0 + draw_boundary_polygon::execute(ctxt); + goto end_of_function; + + block_2: + c->sqc2(vf6, 32, a3); // sqc2 vf6, 32(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 80, a3); // sqc2 vf6, 80(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 128, a3); // sqc2 vf6, 128(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 176, a3); // sqc2 vf6, 176(a3) + // nop // sll r0, r0, 0 + // Unknown instr: jr t9 + draw_boundary_polygon::execute(ctxt); + goto end_of_function; + // nop // sll r0, r0, 0 + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +void link() { + cache.fake_scratchpad_data = intern_from_c("*fake-scratchpad-data*").c(); + cache.math_camera = intern_from_c("*math-camera*").c(); + cache.draw_boundary_polygon = intern_from_c("draw-boundary-polygon").c(); + gLinkedFunctionTable.reg("render-boundary-quad", execute, 32); +} + +} // namespace render_boundary_quad +} // namespace Mips2C + +//--------------------------MIPS2C--------------------- +// clang-format off +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace render_boundary_tri { +struct Cache { + void* fake_scratchpad_data; // *fake-scratchpad-data* + void* draw_boundary_polygon; // draw-boundary-polygon +} cache; + +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + c->copy_vfs_from_other(&sky_regs_vfs); + bool bc = false; + c->mov64(v1, a0); // or v1, a0, r0 + get_fake_spad_addr2(t4, cache.fake_scratchpad_data, 0, c);// lui t4, 28672 + c->ori(t4, t4, 12288); // ori t4, t4, 12288 + get_fake_spad_addr2(t5, cache.fake_scratchpad_data, 0, c);// lui t5, 28672 + c->ori(t5, t5, 14336); // ori t5, t5, 14336 + c->mov64(a3, t4); // or a3, t4, r0 + // nop // sll r0, r0, 0 + c->lqc2(vf1, 0, a0); // lqc2 vf1, 0(a0) + c->addiu(t0, r0, 3); // addiu t0, r0, 3 + c->lqc2(vf2, 16, a0); // lqc2 vf2, 16(a0) + // nop // sll r0, r0, 0 + c->lqc2(vf3, 32, a0); // lqc2 vf3, 32(a0) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf1); // vmulax.xyzw acc, vf31, vf1 + c->lqc2(vf4, 48, a0); // lqc2 vf4, 48(a0) + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf1); // vmadday.xyzw acc, vf30, vf1 + c->lqc2(vf5, 64, a0); // lqc2 vf5, 64(a0) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf1); // vmaddaz.xyzw acc, vf29, vf1 + c->lqc2(vf6, 80, a0); // lqc2 vf6, 80(a0) + c->vmadd_bc(DEST::xyzw, BC::w, vf1, vf28, vf1); // vmaddw.xyzw vf1, vf28, vf1 + c->lqc2(vf7, 96, a0); // lqc2 vf7, 96(a0) + // nop // sll r0, r0, 0 + c->lqc2(vf8, 112, a0); // lqc2 vf8, 112(a0) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf4); // vmulax.xyzw acc, vf31, vf4 + // nop // sll r0, r0, 0 + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf4); // vmadday.xyzw acc, vf30, vf4 + c->sqc2(vf2, 16, a3); // sqc2 vf2, 16(a3) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf4); // vmaddaz.xyzw acc, vf29, vf4 + c->sqc2(vf3, 32, a3); // sqc2 vf3, 32(a3) + c->vmadd_bc(DEST::xyzw, BC::w, vf4, vf28, vf4); // vmaddw.xyzw vf4, vf28, vf4 + c->sqc2(vf5, 64, a3); // sqc2 vf5, 64(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf3, 80, a3); // sqc2 vf3, 80(a3) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf7); // vmulax.xyzw acc, vf31, vf7 + c->sqc2(vf8, 112, a3); // sqc2 vf8, 112(a3) + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf7); // vmadday.xyzw acc, vf30, vf7 + c->sqc2(vf3, 128, a3); // sqc2 vf3, 128(a3) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf7); // vmaddaz.xyzw acc, vf29, vf7 + c->sqc2(vf2, 160, a3); // sqc2 vf2, 160(a3) + c->vmadd_bc(DEST::xyzw, BC::w, vf7, vf28, vf7); // vmaddw.xyzw vf7, vf28, vf7 + c->sqc2(vf3, 176, a3); // sqc2 vf3, 176(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 144, a3); // sqc2 vf1, 144(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf4, 48, a3); // sqc2 vf4, 48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf7, 96, a3); // sqc2 vf7, 96(a3) + c->load_symbol2(t9, cache.draw_boundary_polygon); // lw t9, draw-boundary-polygon(s7) + c->vsub(DEST::xyzw, vf4, vf4, vf1); // vsub.xyzw vf4, vf4, vf1 + // nop // sll r0, r0, 0 + c->vsub(DEST::xyzw, vf7, vf7, vf1); // vsub.xyzw vf7, vf7, vf1 + // nop // sll r0, r0, 0 + c->vopmula(vf4, vf7); // vopmula.xyz acc, vf4, vf7 + // nop // sll r0, r0, 0 + c->vopmsub(vf10, vf7, vf4); // vopmsub.xyz vf10, vf7, vf4 + // nop // sll r0, r0, 0 + c->vmul(DEST::xyzw, vf10, vf10, vf1); // vmul.xyzw vf10, vf10, vf1 + // nop // sll r0, r0, 0 + c->vadd_bc(DEST::y, BC::x, vf10, vf10, vf10); // vaddx.y vf10, vf10, vf10 + // nop // sll r0, r0, 0 + c->vadd_bc(DEST::y, BC::z, vf10, vf10, vf10); // vaddz.y vf10, vf10, vf10 + // nop // sll r0, r0, 0 + c->mov128_gpr_vf(v0, vf10); // qmfc2.i v0, vf10 + // nop // sll r0, r0, 0 + bc = ((s64)c->sgpr64(v0)) >= 0; // bgez v0, L27 + // nop // sll r0, r0, 0 + if (bc) {goto block_2;} // branch non-likely + + // Unknown instr: jr t9 + draw_boundary_polygon::execute(ctxt); + goto end_of_function; + // nop // sll r0, r0, 0 + + block_2: + c->sqc2(vf6, 32, a3); // sqc2 vf6, 32(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 80, a3); // sqc2 vf6, 80(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 128, a3); // sqc2 vf6, 128(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 176, a3); // sqc2 vf6, 176(a3) + // nop // sll r0, r0, 0 + // Unknown instr: jr t9 + draw_boundary_polygon::execute(ctxt); + // nop // sll r0, r0, 0 + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +void link() { + cache.fake_scratchpad_data = intern_from_c("*fake-scratchpad-data*").c(); + cache.draw_boundary_polygon = intern_from_c("draw-boundary-polygon").c(); + gLinkedFunctionTable.reg("render-boundary-tri", execute, 32); +} + +} // namespace render_boundary_tri +} // namespace Mips2C diff --git a/game/mips2c/jak2_functions/sky.cpp b/game/mips2c/jak2_functions/sky.cpp new file mode 100644 index 0000000000..ad38a561b4 --- /dev/null +++ b/game/mips2c/jak2_functions/sky.cpp @@ -0,0 +1,599 @@ +#include "sky.h" + +#include "game/kernel/jak2/kscheme.h" +#include "game/mips2c/mips2c_private.h" + +namespace Mips2C::jak2 { + +ExecutionContext sky_regs_vfs; + +namespace set_sky_vf27 { +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + // sky_regs_vfs.vfs[27] + memcpy(&sky_regs_vfs.vfs[27].f[0], g_ee_main_mem + c->gpr_addr(a0), 16); + return 0; +} + +void link() { + gLinkedFunctionTable.reg("set-sky-vf27", execute, 64); +} + +} // namespace set_sky_vf27 + +} // namespace Mips2C::jak2 + +//--------------------------MIPS2C--------------------- +// clang-format off +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace clip_polygon_against_positive_hyperplane { +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + bool bc = false; + bool cop1_bc = false; + // nop // sll r0, r0, 0 + c->mov64(t1, t0); // or t1, t0, r0 + c->addiu(t0, r0, 0); // addiu t0, r0, 0 + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->mov64(t3, a3); // or t3, a3, r0 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1 + c->lqc2(vf2, -32, a2); // lqc2 vf2, -32(a2) + bc = !cop1_bc; // bc1f L112 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_9;} // branch non-likely + + + block_1: + c->lwc1(f3, 0, t2); // lwc1 f3, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lwc1(f2, 12, a2); // lwc1 f2, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lqc2(vf4, 0, a2); // lqc2 vf4, 0(a2) + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + cop1_bc = c->fprs[f2] < c->fprs[f3]; // c.lt.s f2, f3 + c->lqc2(vf5, -32, a2); // lqc2 vf5, -32(a2) + bc = !cop1_bc; // bc1f L110 + c->lqc2(vf6, -16, a2); // lqc2 vf6, -16(a2) + if (bc) {goto block_6;} // branch non-likely + + bc = c->sgpr64(t1) == 0; // beq t1, r0, L116 + // nop // sll r0, r0, 0 + if (bc) {goto block_17;} // branch non-likely + + + block_3: + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1 + c->lqc2(vf2, -32, a2); // lqc2 vf2, -32(a2) + bc = !cop1_bc; // bc1f L111 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_8;} // branch non-likely + + bc = c->sgpr64(t1) != 0; // bne t1, r0, L108 + // nop // sll r0, r0, 0 + if (bc) {goto block_1;} // branch non-likely + + //beq r0, r0, L116 // beq r0, r0, L116 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_6: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf4, vf1); // vsub.xyzw vf7, vf4, vf1 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf5, vf2); // vsub.xyzw vf8, vf5, vf2 + c->subs(f5, f7, f8); // sub.s f5, f7, f8 + c->vsub(DEST::xyzw, vf9, vf6, vf3); // vsub.xyzw vf9, vf6, vf3 + c->divs(f6, f7, f5); // div.s f6, f7, f5 + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + c->vmula_bc(DEST::xyzw, BC::w, vf1, vf0); // vmulaw.xyzw acc, vf1, vf0 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf2, vf0); // vmulaw.xyzw acc, vf2, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf3, vf0); // vmulaw.xyzw acc, vf3, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L113 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_11;} // branch non-likely + + //beq r0, r0, L116 // beq r0, r0, L116 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_8: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf1, vf4); // vsub.xyzw vf7, vf1, vf4 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf2, vf5); // vsub.xyzw vf8, vf2, vf5 + c->subs(f5, f8, f7); // sub.s f5, f8, f7 + c->vsub(DEST::xyzw, vf9, vf3, vf6); // vsub.xyzw vf9, vf3, vf6 + c->divs(f6, f8, f5); // div.s f6, f8, f5 + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf5, vf0); // vmulaw.xyzw acc, vf5, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf6, vf0); // vmulaw.xyzw acc, vf6, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) == 0; // beq t1, r0, L116 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_17;} // branch non-likely + + + block_9: + c->lwc1(f3, 0, t2); // lwc1 f3, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lwc1(f2, 12, a2); // lwc1 f2, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lqc2(vf4, 0, a2); // lqc2 vf4, 0(a2) + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + cop1_bc = c->fprs[f2] < c->fprs[f3]; // c.lt.s f2, f3 + c->lqc2(vf5, -32, a2); // lqc2 vf5, -32(a2) + bc = cop1_bc; // bc1t L114 + c->lqc2(vf6, -16, a2); // lqc2 vf6, -16(a2) + if (bc) {goto block_14;} // branch non-likely + + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->sqc2(vf2, -32, a3); // sqc2 vf2, -32(a3) + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + bc = c->sgpr64(t1) == 0; // beq t1, r0, L116 + c->sqc2(vf3, -16, a3); // sqc2 vf3, -16(a3) + if (bc) {goto block_17;} // branch non-likely + + + block_11: + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1 + c->lqc2(vf2, -32, a2); // lqc2 vf2, -32(a2) + bc = cop1_bc; // bc1t L115 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_16;} // branch non-likely + + c->sqc2(vf4, 0, a3); // sqc2 vf4, 0(a3) + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->sqc2(vf5, -32, a3); // sqc2 vf5, -32(a3) + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L112 + c->sqc2(vf6, -16, a3); // sqc2 vf6, -16(a3) + if (bc) {goto block_9;} // branch non-likely + + //beq r0, r0, L116 // beq r0, r0, L116 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_14: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf1, vf4); // vsub.xyzw vf7, vf1, vf4 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf2, vf5); // vsub.xyzw vf8, vf2, vf5 + c->subs(f5, f8, f7); // sub.s f5, f8, f7 + c->vsub(DEST::xyzw, vf9, vf3, vf6); // vsub.xyzw vf9, vf3, vf6 + c->divs(f6, f8, f5); // div.s f6, f8, f5 + c->daddiu(a3, a3, 96); // daddiu a3, a3, 96 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->sqc2(vf1, -96, a3); // sqc2 vf1, -96(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0 + c->sqc2(vf2, -80, a3); // sqc2 vf2, -80(a3) + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + c->sqc2(vf3, -64, a3); // sqc2 vf3, -64(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf5, vf0); // vmulaw.xyzw acc, vf5, vf0 + c->daddiu(t0, t0, 2); // daddiu t0, t0, 2 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmula_bc(DEST::xyzw, BC::w, vf6, vf0); // vmulaw.xyzw acc, vf6, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L109 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_3;} // branch non-likely + + //beq r0, r0, L116 // beq r0, r0, L116 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_16: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf4, vf1); // vsub.xyzw vf7, vf4, vf1 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf5, vf2); // vsub.xyzw vf8, vf5, vf2 + c->subs(f5, f7, f8); // sub.s f5, f7, f8 + c->vsub(DEST::xyzw, vf9, vf6, vf3); // vsub.xyzw vf9, vf6, vf3 + c->divs(f6, f7, f5); // div.s f6, f7, f5 + c->daddiu(a3, a3, 96); // daddiu a3, a3, 96 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->sqc2(vf4, -96, a3); // sqc2 vf4, -96(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf1, vf0); // vmulaw.xyzw acc, vf1, vf0 + c->sqc2(vf5, -80, a3); // sqc2 vf5, -80(a3) + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + c->sqc2(vf6, -64, a3); // sqc2 vf6, -64(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf2, vf0); // vmulaw.xyzw acc, vf2, vf0 + c->daddiu(t0, t0, 2); // daddiu t0, t0, 2 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmula_bc(DEST::xyzw, BC::w, vf3, vf0); // vmulaw.xyzw acc, vf3, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L108 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_1;} // branch non-likely + + + block_17: + c->lqc2(vf1, 0, t3); // lqc2 vf1, 0(t3) + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, t3); // lqc2 vf2, 16(t3) + // nop // sll r0, r0, 0 + c->lqc2(vf3, 32, t3); // lqc2 vf3, 32(t3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf2, 16, a3); // sqc2 vf2, 16(a3) + // nop // sll r0, r0, 0 + //jr ra // jr ra + c->sqc2(vf3, 32, a3); // sqc2 vf3, 32(a3) + goto end_of_function; // return + + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +} // namespace clip_polygon_against_positive_hyperplane +} // namespace Mips2C + +//--------------------------MIPS2C--------------------- +// clang-format off +#include "game/mips2c/mips2c_private.h" +#include "game/kernel/jak2/kscheme.h" +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace clip_polygon_against_negative_hyperplane { +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + bool bc = false; + bool cop1_bc = false; + // nop // sll r0, r0, 0 + c->mov64(t1, t0); // or t1, t0, r0 + c->addiu(t0, r0, 0); // addiu t0, r0, 0 + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->mov64(t3, a3); // or t3, a3, r0 + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->negs(f0, f0); // neg.s f0, f0 + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, a2); // lqc2 vf2, 16(a2) + cop1_bc = c->fprs[f1] < c->fprs[f0]; // c.lt.s f1, f0 + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + bc = !cop1_bc; // bc1f L102 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_9;} // branch non-likely + + + block_1: + c->lwc1(f2, 12, a2); // lwc1 f2, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lwc1(f3, 0, t2); // lwc1 f3, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lqc2(vf4, 0, a2); // lqc2 vf4, 0(a2) + c->negs(f2, f2); // neg.s f2, f2 + // nop // sll r0, r0, 0 + c->lqc2(vf5, 16, a2); // lqc2 vf5, 16(a2) + cop1_bc = c->fprs[f3] < c->fprs[f2]; // c.lt.s f3, f2 + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + bc = !cop1_bc; // bc1f L100 + c->lqc2(vf6, -16, a2); // lqc2 vf6, -16(a2) + if (bc) {goto block_6;} // branch non-likely + + bc = c->sgpr64(t1) == 0; // beq t1, r0, L106 + // nop // sll r0, r0, 0 + if (bc) {goto block_17;} // branch non-likely + + + block_3: + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->negs(f0, f0); // neg.s f0, f0 + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, a2); // lqc2 vf2, 16(a2) + cop1_bc = c->fprs[f1] < c->fprs[f0]; // c.lt.s f1, f0 + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + bc = !cop1_bc; // bc1f L101 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_8;} // branch non-likely + + bc = c->sgpr64(t1) != 0; // bne t1, r0, L98 + // nop // sll r0, r0, 0 + if (bc) {goto block_1;} // branch non-likely + + //beq r0, r0, L106 // beq r0, r0, L106 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_6: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf4, vf1); // vsub.xyzw vf7, vf4, vf1 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf5, vf2); // vsub.xyzw vf8, vf5, vf2 + c->subs(f5, f7, f8); // sub.s f5, f7, f8 + c->vsub(DEST::xyzw, vf9, vf6, vf3); // vsub.xyzw vf9, vf6, vf3 + c->divs(f6, f7, f5); // div.s f6, f7, f5 + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + c->vmula_bc(DEST::xyzw, BC::w, vf1, vf0); // vmulaw.xyzw acc, vf1, vf0 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf2, vf0); // vmulaw.xyzw acc, vf2, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf3, vf0); // vmulaw.xyzw acc, vf3, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L103 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_11;} // branch non-likely + + //beq r0, r0, L106 // beq r0, r0, L106 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_8: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf1, vf4); // vsub.xyzw vf7, vf1, vf4 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf2, vf5); // vsub.xyzw vf8, vf2, vf5 + c->subs(f5, f8, f7); // sub.s f5, f8, f7 + c->vsub(DEST::xyzw, vf9, vf3, vf6); // vsub.xyzw vf9, vf3, vf6 + c->divs(f6, f8, f5); // div.s f6, f8, f5 + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf5, vf0); // vmulaw.xyzw acc, vf5, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf6, vf0); // vmulaw.xyzw acc, vf6, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) == 0; // beq t1, r0, L106 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_17;} // branch non-likely + + + block_9: + c->lwc1(f2, 12, a2); // lwc1 f2, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lwc1(f3, 0, t2); // lwc1 f3, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lqc2(vf4, 0, a2); // lqc2 vf4, 0(a2) + c->negs(f2, f2); // neg.s f2, f2 + // nop // sll r0, r0, 0 + c->lqc2(vf5, 16, a2); // lqc2 vf5, 16(a2) + cop1_bc = c->fprs[f3] < c->fprs[f2]; // c.lt.s f3, f2 + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + bc = cop1_bc; // bc1t L104 + c->lqc2(vf6, -16, a2); // lqc2 vf6, -16(a2) + if (bc) {goto block_14;} // branch non-likely + + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->sqc2(vf2, -32, a3); // sqc2 vf2, -32(a3) + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + bc = c->sgpr64(t1) == 0; // beq t1, r0, L106 + c->sqc2(vf3, -16, a3); // sqc2 vf3, -16(a3) + if (bc) {goto block_17;} // branch non-likely + + + block_11: + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->negs(f0, f0); // neg.s f0, f0 + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, a2); // lqc2 vf2, 16(a2) + cop1_bc = c->fprs[f1] < c->fprs[f0]; // c.lt.s f1, f0 + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + bc = cop1_bc; // bc1t L105 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_16;} // branch non-likely + + c->sqc2(vf4, 0, a3); // sqc2 vf4, 0(a3) + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->sqc2(vf5, -32, a3); // sqc2 vf5, -32(a3) + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L102 + c->sqc2(vf6, -16, a3); // sqc2 vf6, -16(a3) + if (bc) {goto block_9;} // branch non-likely + + //beq r0, r0, L106 // beq r0, r0, L106 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_14: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf1, vf4); // vsub.xyzw vf7, vf1, vf4 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf2, vf5); // vsub.xyzw vf8, vf2, vf5 + c->subs(f5, f8, f7); // sub.s f5, f8, f7 + c->vsub(DEST::xyzw, vf9, vf3, vf6); // vsub.xyzw vf9, vf3, vf6 + c->divs(f6, f8, f5); // div.s f6, f8, f5 + c->daddiu(a3, a3, 96); // daddiu a3, a3, 96 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->sqc2(vf1, -96, a3); // sqc2 vf1, -96(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0 + c->sqc2(vf2, -80, a3); // sqc2 vf2, -80(a3) + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + c->sqc2(vf3, -64, a3); // sqc2 vf3, -64(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf5, vf0); // vmulaw.xyzw acc, vf5, vf0 + c->daddiu(t0, t0, 2); // daddiu t0, t0, 2 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmula_bc(DEST::xyzw, BC::w, vf6, vf0); // vmulaw.xyzw acc, vf6, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L99 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_3;} // branch non-likely + + //beq r0, r0, L106 // beq r0, r0, L106 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_16: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf4, vf1); // vsub.xyzw vf7, vf4, vf1 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf5, vf2); // vsub.xyzw vf8, vf5, vf2 + c->subs(f5, f7, f8); // sub.s f5, f7, f8 + c->vsub(DEST::xyzw, vf9, vf6, vf3); // vsub.xyzw vf9, vf6, vf3 + c->divs(f6, f7, f5); // div.s f6, f7, f5 + c->daddiu(a3, a3, 96); // daddiu a3, a3, 96 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->sqc2(vf4, -96, a3); // sqc2 vf4, -96(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf1, vf0); // vmulaw.xyzw acc, vf1, vf0 + c->sqc2(vf5, -80, a3); // sqc2 vf5, -80(a3) + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + c->sqc2(vf6, -64, a3); // sqc2 vf6, -64(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf2, vf0); // vmulaw.xyzw acc, vf2, vf0 + c->daddiu(t0, t0, 2); // daddiu t0, t0, 2 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmula_bc(DEST::xyzw, BC::w, vf3, vf0); // vmulaw.xyzw acc, vf3, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L98 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_1;} // branch non-likely + + + block_17: + c->lqc2(vf1, 0, t3); // lqc2 vf1, 0(t3) + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, t3); // lqc2 vf2, 16(t3) + // nop // sll r0, r0, 0 + c->lqc2(vf3, 32, t3); // lqc2 vf3, 32(t3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf2, 16, a3); // sqc2 vf2, 16(a3) + // nop // sll r0, r0, 0 + //jr ra // jr ra + c->sqc2(vf3, 32, a3); // sqc2 vf3, 32(a3) + goto end_of_function; // return + + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +} // namespace clip_polygon_against_negative_hyperplane +} // namespace Mips2C + diff --git a/game/mips2c/jak2_functions/sky.h b/game/mips2c/jak2_functions/sky.h new file mode 100644 index 0000000000..2fd1e7510e --- /dev/null +++ b/game/mips2c/jak2_functions/sky.h @@ -0,0 +1,14 @@ +#pragma once +#include "game/mips2c/mips2c_private.h" + +namespace Mips2C::jak2 { +extern ExecutionContext sky_regs_vfs; + +namespace clip_polygon_against_positive_hyperplane { +extern u64 execute(void* ctxt); +} + +namespace clip_polygon_against_negative_hyperplane { +extern u64 execute(void* ctxt); +} +} // namespace Mips2C::jak2 \ No newline at end of file diff --git a/game/mips2c/jak2_functions/texture.cpp b/game/mips2c/jak2_functions/texture.cpp index 2d46af7838..7ef876ed79 100644 --- a/game/mips2c/jak2_functions/texture.cpp +++ b/game/mips2c/jak2_functions/texture.cpp @@ -8,7 +8,6 @@ namespace adgif_shader_texture_with_update { u64 execute(void* ctxt) { auto* c = (ExecutionContext*)ctxt; bool bc = false; - u32 call_addr = 0; c->ld(a2, 16, a0); // ld a2, 16(a0) c->addiu(v1, r0, 256); // addiu v1, r0, 256 c->andi(a2, a2, 513); // andi a2, a2, 513 diff --git a/game/mips2c/mips2c_private.h b/game/mips2c/mips2c_private.h index bb9895a3d3..a5da76deb9 100644 --- a/game/mips2c/mips2c_private.h +++ b/game/mips2c/mips2c_private.h @@ -1289,10 +1289,15 @@ struct ExecutionContext { fprs[dst] = fprs[src0] / fprs[src1]; } } + void divs(int dst, int src0, int src1) { // ASSERT(fprs[src1] != 0); fprs[dst] = fprs[src0] / fprs[src1]; } + + void mins(int dst, int src0, int src1) { fprs[dst] = std::min(fprs[src0], fprs[src1]); } + void maxs(int dst, int src0, int src1) { fprs[dst] = std::max(fprs[src0], fprs[src1]); } + void negs(int dst, int src) { u32 v; memcpy(&v, &fprs[src], 4); @@ -1439,6 +1444,12 @@ inline void get_fake_spad_addr(int dst, void* sym_addr, u32 offset, ExecutionCon c->gprs[dst].du64[0] = val + offset; } +inline void get_fake_spad_addr2(int dst, void* sym_addr, u32 offset, ExecutionContext* c) { + u32 val; + memcpy(&val, (u8*)sym_addr - 1, 4); + c->gprs[dst].du64[0] = val + offset; +} + inline void spad_to_dma(void* spad_sym_addr, u32 madr, u32 sadr, u32 qwc) { u32 spad_addr_goal; memcpy(&spad_addr_goal, spad_sym_addr, 4); diff --git a/game/mips2c/mips2c_table.cpp b/game/mips2c/mips2c_table.cpp index 8befad053c..41feb5b73d 100644 --- a/game/mips2c/mips2c_table.cpp +++ b/game/mips2c/mips2c_table.cpp @@ -123,6 +123,12 @@ namespace draw_string_asm { extern void link(); } namespace draw_string { extern void link(); } namespace get_string_length { extern void link(); } namespace adgif_shader_texture_with_update { extern void link(); } +namespace debug_line_clip { extern void link(); } +namespace init_boundary_regs { extern void link(); } +namespace render_boundary_tri { extern void link(); } +namespace render_boundary_quad { extern void link(); } +namespace set_sky_vf27 { extern void link(); } +namespace draw_boundary_polygon { extern void link(); } } // clang-format on @@ -203,7 +209,11 @@ PerGameVersion>> gMips2C {"joint", {jak2::calc_animation_from_spr::link, jak2::cspace_parented_transformq_joint::link}}, {"font", {jak2::draw_string::link, jak2::get_string_length::link, jak2::draw_string_asm::link}}, - {"texture", {jak2::adgif_shader_texture_with_update::link}}}, + {"texture", {jak2::adgif_shader_texture_with_update::link}}, + {"debug", + {jak2::debug_line_clip::link, jak2::init_boundary_regs::link, + jak2::render_boundary_quad::link, jak2::render_boundary_tri::link, jak2::set_sky_vf27::link, + jak2::draw_boundary_polygon::link}}}, }; void LinkedFunctionTable::reg(const std::string& name, u64 (*exec)(void*), u32 stack_size) { @@ -283,7 +293,7 @@ void LinkedFunctionTable::reg(const std::string& name, u64 (*exec)(void*), u32 s u32 LinkedFunctionTable::get(const std::string& name) { auto it = m_executes.find(name); if (it == m_executes.end()) { - ASSERT(false); + ASSERT_NOT_REACHED_MSG(fmt::format("mips2c function {} is unknown", name)); } return it->second.goal_trampoline.offset; } diff --git a/game/overlord/iso.cpp b/game/overlord/iso.cpp index cd7acaaef9..0f70c74fbf 100644 --- a/game/overlord/iso.cpp +++ b/game/overlord/iso.cpp @@ -734,9 +734,6 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { // if we are done with header if (cmd->bytes_processed == sizeof(DgoHeader)) { - // printf("[Overlord DGO] Got DGO file header for %s with %d objects\n", - // cmd->dgo_header.name, - // cmd->dgo_header.object_count); // added lg::info("[Overlord DGO] Got DGO file header for {} with {} objects", cmd->dgo_header.name, cmd->dgo_header.object_count); cmd->bytes_processed = 0; @@ -758,9 +755,23 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { case DgoState::Finish_Obj: // we have reached the end of an object file! { // EE synchronization occurs here. + // we "Return" the command to tell the EE that we've loaded stuff + // EE sends us data that we read with LookMbx so we keep loading. + // the order is that we wait for the EE to tell us the next location before we return + // the most recently loaded object. + // we skip this if we're loading the first object so we can double buffer the // linking/loading process and have two in flight at a time (one loading, other linking) + // this fills the pipeline. + + // for jak 2, double buffered is disabled for the "borrow" style loads. + // this is detected by seeing that buffer1 and buffer2 are the same address. + // this function decompiles poorly in ghidra, so this is a best guess. + // in this mode, the order is swapped - the overlord returns the message once loading + // is done, then waits for the next loaddgo. + if (cmd->finished_first_obj) { + // in all cases, need sync after the first object. s32 isSync = LookMbx(sync_mbx); // did we get a "sync" message? if (isSync) { // if so, this means we got a CancelDGO or NextDGO @@ -775,21 +786,35 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { } } - cmd->finished_first_obj = 1; - cmd->status = CMD_STATUS_IN_PROGRESS; + if (cmd->buffer1 != cmd->buffer2) { + // normal double buffered case. + cmd->finished_first_obj = 1; + cmd->status = CMD_STATUS_IN_PROGRESS; - // select a buffer for next time. - if (cmd->buffer_toggle == 1) { - cmd->selectedBuffer = cmd->buffer1; + // select a buffer for next time. + if (cmd->buffer_toggle == 1) { + cmd->selectedBuffer = cmd->buffer1; + } else { + cmd->selectedBuffer = cmd->buffer2; + } + + // we've processed the command, go wake up the DGO RPC thread. + // doesn't terminate the command (ReleaseMessage does this, ReturnMessage just + // wakes up the caller while keeping the command alive). + ReturnMessage(cmd); } else { - cmd->selectedBuffer = cmd->buffer2; + // single buffer mode. before we can move on, we need to wait for the EE to send us + // an update load location. We've already informed the EE where we loaded the most + // recent object, and it is busy linking... + if (cmd->finished_first_obj == 0) { + s32 isSync = LookMbx(sync_mbx); // did we get a "sync" message? + if (!isSync) { + goto cleanup_and_return; + } + cmd->finished_first_obj = 1; + } } - // we've processed the command, go wake up the DGO RPC thread. - // doesn't terminate the command (ReleaseMessage does this, ReturnMessage just - // wakes up the caller while keeping the command alive). - ReturnMessage(cmd); - // toggle buffer if (cmd->buffer_toggle == 1) { cmd->ee_destination_buffer = cmd->buffer2; @@ -800,7 +825,8 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { } // setup for next run - if (cmd->objects_loaded + 1 == cmd->dgo_header.object_count) { + if (cmd->objects_loaded + 1 == cmd->dgo_header.object_count && + cmd->buffer1 != cmd->buffer2) { cmd->dgo_state = DgoState::Read_Last_Obj; } else { cmd->dgo_state = DgoState::Read_Obj_Header; @@ -873,7 +899,10 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { if (cmd->objects_loaded == cmd->dgo_header.object_count) { cmd->dgo_state = DgoState::Finish_Dgo; } else { - cmd->dgo_state = DgoState::Finish_Obj; + // this logic makes jak 2 single buffer loads go to NoDoubleBuffer to return the + // command as soon as loading is done. + cmd->dgo_state = (cmd->buffer1 == cmd->buffer2) ? DgoState::Finish_Obj_NoDoubleBuffer + : DgoState::Finish_Obj; cmd->bytes_processed = 0; } } @@ -885,6 +914,18 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { goto cleanup_and_return; } + case DgoState::Finish_Obj_NoDoubleBuffer: { + // new, added for jak2 - here we return the message once loading finishes. + cmd->status = CMD_STATUS_IN_PROGRESS; + if (cmd->buffer_toggle == 1) { + cmd->selectedBuffer = cmd->buffer1; + } else { + cmd->selectedBuffer = cmd->buffer2; + } + ReturnMessage(cmd); + cmd->dgo_state = DgoState::Finish_Obj; + } break; + default: printf("unknown dgoState!\n"); } @@ -1339,6 +1380,8 @@ void LoadDGO(RPC_Dgo_Cmd* cmd) { scmd.buffer_heaptop = (u8*)(u64)(cmd->buffer_heap_top); scmd.fr = fr; + // printf("LOAD DGO -- 0x%x\n", cmd->buffer1); + // send the command to ISO Thread SendMbx(iso_mbx, &scmd); @@ -1368,12 +1411,18 @@ void LoadDGO(RPC_Dgo_Cmd* cmd) { * This will return when there's another loaded obj. */ void LoadNextDGO(RPC_Dgo_Cmd* cmd) { + // printf("LOAD NEXT DGO -- 0x%x\n", cmd->buffer1); + if (scmd.cmd_id == 0) { // something went wrong. cmd->result = DGO_RPC_RESULT_ERROR; } else { // update heap location scmd.buffer_heaptop = (u8*)(u64)cmd->buffer_heap_top; + if (g_game_version != GameVersion::Jak1) { + scmd.buffer1 = (u8*)(u64)cmd->buffer1; + scmd.buffer2 = (u8*)(u64)cmd->buffer2; + } // allow DGO state machine to advance SendMbx(sync_mbx, nullptr); // wait for another load to finish. diff --git a/game/overlord/iso_api.cpp b/game/overlord/iso_api.cpp index 77bda54f31..bcab1e3950 100644 --- a/game/overlord/iso_api.cpp +++ b/game/overlord/iso_api.cpp @@ -56,7 +56,7 @@ s32 LoadISOFileToEE(FileRecord* file, uint32_t addr, uint32_t length) { } s32 LoadISOFileChunkToEE(FileRecord* file, uint32_t dest_addr, uint32_t length, uint32_t offset) { - lg::debug("[OVERLORD] LoadISOFileChunkToEE {} : {} offset {}\n", file->name, length, offset); + lg::debug("[OVERLORD] LoadISOFileChunkToEE {} : {} offset {}", file->name, length, offset); IsoCommandLoadSingle cmd; cmd.cmd_id = LOAD_TO_EE_OFFSET_CMD_ID; cmd.messagebox_to_reply = 0; diff --git a/game/overlord/iso_cd.cpp b/game/overlord/iso_cd.cpp index ac3e305054..17ca97acbf 100644 --- a/game/overlord/iso_cd.cpp +++ b/game/overlord/iso_cd.cpp @@ -390,7 +390,7 @@ void LoadDiscID() { for (uint32_t i = 0; i < SECTOR_SIZE / 4; i++) { CD_ID_SectorSum += CD_ID_Sector[i]; } - lg::info("[OVERLORD] DISK_ID.DIZ OK 0x{:x}\n", CD_ID_SectorSum); + lg::info("[OVERLORD] DISK_ID.DIZ OK 0x{:x}", CD_ID_SectorSum); } /*! diff --git a/game/overlord/isocommon.h b/game/overlord/isocommon.h index 85ffcefdbe..3531502208 100644 --- a/game/overlord/isocommon.h +++ b/game/overlord/isocommon.h @@ -158,7 +158,8 @@ enum class DgoState { Read_Last_Obj = 3, Read_Obj_Header = 4, Read_Obj_data = 5, - Finish_Dgo = 6 + Finish_Dgo = 6, + Finish_Obj_NoDoubleBuffer = 7, // jak 2 only }; /*! diff --git a/game/sce/libgraph.cpp b/game/sce/libgraph.cpp index dbfc64b72a..aa7df6d01b 100644 --- a/game/sce/libgraph.cpp +++ b/game/sce/libgraph.cpp @@ -5,6 +5,6 @@ namespace ee { void sceGsResetPath() {} void sceGsResetGraph(int mode, int inter, int omode, int ffmode) { - lg::warn("sceGsResetGraph: mode {} inter {} omode {} fmode {}\n", mode, inter, omode, ffmode); + lg::warn("sceGsResetGraph: mode {} inter {} omode {} fmode {}", mode, inter, omode, ffmode); } -} // namespace ee \ No newline at end of file +} // namespace ee diff --git a/game/sound/989snd/ame_handler.cpp b/game/sound/989snd/ame_handler.cpp index 1be56ecca0..cce42ca856 100644 --- a/game/sound/989snd/ame_handler.cpp +++ b/game/sound/989snd/ame_handler.cpp @@ -2,6 +2,8 @@ // SPDX-License-Identifier: ISC #include "ame_handler.h" +#include "common/log/log.h" + #include "game/sound/989snd/blocksound_handler.h" namespace snd { diff --git a/game/sound/989snd/loader.cpp b/game/sound/989snd/loader.cpp index 5a3f3bc382..237fec6af1 100644 --- a/game/sound/989snd/loader.cpp +++ b/game/sound/989snd/loader.cpp @@ -7,6 +7,8 @@ #include "midi_handler.h" +#include "common/log/log.h" + #include namespace snd { @@ -85,7 +87,7 @@ u32 loader::read_bank(std::fstream& in) { in.read((char*)(&attr), sizeof(attr)); if (attr.type != 1 && attr.type != 3) { - fmt::print("Error: File type {} not supported.", attr.type); + lg::error("Error: File type {} not supported.", attr.type); return -1; } @@ -136,7 +138,7 @@ void loader::load_midi(std::fstream& in) { in.read((char*)midi.get(), attr.where[0].size); auto h = (MIDIBlock*)midi.get(); - fmt::print("Loaded midi {:.4}\n", (char*)&h->ID); + lg::info("Loaded midi {:.4}", (char*)&h->ID); m_midi.emplace(h->ID, (MIDIBlock*)midi.get()); m_midi_chunks.emplace_back(std::move(midi)); diff --git a/game/sound/989snd/midi_handler.cpp b/game/sound/989snd/midi_handler.cpp index 10b24dc382..f891551166 100644 --- a/game/sound/989snd/midi_handler.cpp +++ b/game/sound/989snd/midi_handler.cpp @@ -4,6 +4,8 @@ #include "ame_handler.h" +#include "common/log/log.h" + #include namespace snd { @@ -261,7 +263,7 @@ void midi_handler::channel_pitch() { u32 pitch = (m_seq_ptr[0] << 7) | m_seq_ptr[1]; (void)pitch; (void)channel; - // fmt::print("{}: pitch ch{:01x} {:04x}\n", m_time, channel, pitch); + // lg::debug("{}: pitch ch{:01x} {:04x}", m_time, channel, pitch); m_seq_ptr += 2; } @@ -303,7 +305,7 @@ void midi_handler::system_event() { m_seq_ptr = ptr; if (!cont) { - // fmt::print("{:x} track stopped by ame\n", (u64)this); + // lg::debug("{:x} track stopped by ame", (u64)this); m_track_complete = true; } } else { @@ -325,8 +327,7 @@ bool midi_handler::tick() { step(); } catch (midi_error& e) { m_track_complete = true; - fmt::print("MIDI Error: {}\n", e.what()); - + lg::error("MIDI Error: {}", e.what()); fmt::print("Sequence following: "); for (int i = 0; i < 10; i++) { fmt::print("{:x} ", m_seq_ptr[i]); diff --git a/game/sound/989snd/player.cpp b/game/sound/989snd/player.cpp index fcf92e79dd..750d83f79d 100644 --- a/game/sound/989snd/player.cpp +++ b/game/sound/989snd/player.cpp @@ -10,6 +10,7 @@ #include #include #endif +#include "common/log/log.h" namespace snd { @@ -26,8 +27,8 @@ void player::init_cubeb() { HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); m_coinitialized = SUCCEEDED(hr); if (FAILED(hr) && hr != RPC_E_CHANGED_MODE) { - fmt::print("Couldn't initialize COM\n"); - fmt::print("Cubeb init failed\n"); + lg::error("Couldn't initialize COM"); + lg::error("Cubeb init failed"); return; } #endif @@ -45,20 +46,20 @@ void player::init_cubeb() { u32 latency = 0; err = cubeb_get_min_latency(m_ctx, &outparam, &latency); if (err != CUBEB_OK) { - fmt::print("Cubeb init failed\n"); + lg::error("Cubeb init failed"); return; } err = cubeb_stream_init(m_ctx, &m_stream, "OpenGOAL", nullptr, nullptr, nullptr, &outparam, latency, &sound_callback, &state_callback, this); if (err != CUBEB_OK) { - fmt::print("Cubeb init failed\n"); + lg::error("Cubeb init failed"); return; } err = cubeb_stream_start(m_stream); if (err != CUBEB_OK) { - fmt::print("Cubeb init failed\n"); + lg::error("Cubeb init failed"); return; } } @@ -126,7 +127,7 @@ u32 player::play_sound(u32 bank_id, u32 sound_id, s32 vol, s32 pan, s32 pm, s32 std::scoped_lock lock(m_ticklock); auto bank = m_loader.get_bank_by_handle(bank_id); if (bank == nullptr) { - fmt::print("play_sound: Bank {} does not exist\n", bank_id); + lg::error("play_sound: Bank {} does not exist", bank_id); return 0; } diff --git a/game/sound/989snd/sndplay.cpp b/game/sound/989snd/sndplay.cpp index a39b2d869d..e5ac4dadd6 100644 --- a/game/sound/989snd/sndplay.cpp +++ b/game/sound/989snd/sndplay.cpp @@ -1,5 +1,7 @@ #include "player.h" +#include "common/log/log.h" + int main(int argc, char* argv[]) { snd::player player; unsigned bankid = 0; @@ -9,14 +11,14 @@ int main(int argc, char* argv[]) { if (argc > 2) { bankid = player.load_bank(file, 0); unsigned sound = player.play_sound(bankid, atoi(argv[2]), 0x400, 0, 0, 0); - fmt::print("sound {} started\n", sound); + lg::info("sound {} started", sound); } while (true) { +#ifdef __linux timespec rqtp{}, rmtp{}; rqtp.tv_nsec = 0; rqtp.tv_sec = 1; -#ifdef __linux if (nanosleep(&rqtp, &rmtp) == -1) { break; } diff --git a/game/sound/CMakeLists.txt b/game/sound/CMakeLists.txt index 4dc75ba4a3..f9abcd3df8 100644 --- a/game/sound/CMakeLists.txt +++ b/game/sound/CMakeLists.txt @@ -18,7 +18,7 @@ set(SOUND_SOURCES ) add_library(sound STATIC ${SOUND_SOURCES}) -target_link_libraries(sound PRIVATE fmt cubeb) +target_link_libraries(sound PRIVATE fmt cubeb common) add_executable(sndplay 989snd/sndplay.cpp) if(WIN32) diff --git a/game/system/Deci2Server.cpp b/game/system/Deci2Server.cpp index 54ae18a147..c5a2acf56e 100644 --- a/game/system/Deci2Server.cpp +++ b/game/system/Deci2Server.cpp @@ -21,6 +21,7 @@ #include #include #endif +#include "common/log/log.h" // clang-format on Deci2Server::~Deci2Server() { @@ -37,7 +38,7 @@ Deci2Server::~Deci2Server() { } void Deci2Server::post_init() { - fmt::print("[Deci2Server:{}] awaiting connections\n", tcp_port); + lg::info("[Deci2Server:{}] awaiting connections", tcp_port); accept_thread_running = true; kill_accept_thread = false; accept_thread = std::thread(&Deci2Server::accept_thread_func, this); diff --git a/goal_src/jak2/dgos/lwidea.gd b/goal_src/jak2/dgos/lwidea.gd new file mode 100644 index 0000000000..c19acfce90 --- /dev/null +++ b/goal_src/jak2/dgos/lwidea.gd @@ -0,0 +1,18 @@ +("LWIDEA.DGO" + ("tpage-2929.go" "tpage-2929") + ("tpage-2930.go" "tpage-2930") + ("citizen-fat-ag.go" "citizen-fat") + ("citizen-norm-ag.go" "citizen-norm") + ("crimson-guard-ag.go" "crimson-guard") + ("citizen-chick-ag.go" "citizen-chick") + ("hellcat-ag.go" "hellcat") + ("carc-ag.go" "carc") + ("cara-ag.go" "cara") + ("carb-ag.go" "carb") + ("citizen-norm-rider-ag.go" "citizen-norm-rider") + ("crimson-bike-ag.go" "crimson-bike") + ("bikec-ag.go" "bikec") + ("bikeb-ag.go" "bikeb") + ("bikea-ag.go" "bikea") + ("lwidea.go" "lwidea") + ) \ No newline at end of file diff --git a/goal_src/jak2/dgos/vi1.gd b/goal_src/jak2/dgos/vi1.gd new file mode 100644 index 0000000000..8708b026d7 --- /dev/null +++ b/goal_src/jak2/dgos/vi1.gd @@ -0,0 +1,21 @@ +("VI1.DGO" + ("tpage-3034.go" "tpage-3034") + ("tpage-3037.go" "tpage-3037") + ("tpage-3035.go" "tpage-3035") + ("tpage-3038.go" "tpage-3038") + ("tpage-3036.go" "tpage-3036") + ("tpage-2761.go" "tpage-2761") + ("tpage-3516.go" "tpage-3516") + ("daxter-highres-ag.go" "daxter-highres") + ("darkjak-highres-ag.go" "darkjak-highres") + ("metalkor-torso-ag.go" "metalkor-torso") + ("rift-ring-ag.go" "rift-ring") + ("vil-break-support-ag.go" "vil-break-support") + ("intro-flamer-ag.go" "intro-flamer") + ("rift-rider-donut-ag.go" "rift-rider-donut") + ("vil-windmill-sail-ag.go" "vil-windmill-sail") + ("vil-windspinner-ag.go" "vil-windspinner") + ("vil-sagesail-ag.go" "vil-sagesail") + ("particleman-ag.go" "particleman") + ("village1-vis.go" "village1-vis") + ) diff --git a/goal_src/jak2/engine/ai/enemy-h.gc b/goal_src/jak2/engine/ai/enemy-h.gc index 67838e223f..2b1a9292a9 100644 --- a/goal_src/jak2/engine/ai/enemy-h.gc +++ b/goal_src/jak2/engine/ai/enemy-h.gc @@ -7,3 +7,361 @@ ;; DECOMP BEGINS +(defenum enemy-flag + :type int64 + :bitfield #t + (lock-focus 0) + (death-start 1) + (enable-on-active 2) + (checking-water 3) + (check-water 4) + (spawn-gem 5) + (chase-startup 6) + (attackable-backup 7) + (look-at-focus 8) + (use-notice-distance 9) + (enable-on-notice 10) + (look-at-move-dest 11) + (notice 12) + (auto-reset-penetrate 13) + (jump-check-blocked 14) + (drawn-mirrored 15) + (multi-focus 16) + (alert 17) + (victory 18) + (dangerous-backup 19) + (actor-pause-backup 20) + (trackable 21) + (called-dying 22) + (check-water-backup 23) + (no-initial-move-to-ground 24) + (cam-attack-mode 25) + (trackable-backup 26) + (enable-on-hostile 27) + (directed-ready 28) + (use-trigger 29) + (directed 30) + (dislike-combo 31) + (recover-applied-velocity 32) + (vulnerable-backup 33) + (vulnerable 34) + (recover 35) + ) + +(deftype enemy-focus (focus) + ((aware uint64 :offset-assert 16) + (flags uint64 :offset-assert 24) + ) + :method-count-assert 14 + :size-assert #x20 + :flag-assert #xe00000020 + (:methods + (enemy-focus-method-13 () none 13) + ) + ) + +(deftype enemy-info (basic) + ((fact-defaults basic :offset-assert 4) + (use-die-falling basic :offset-assert 8) + (use-victory basic :offset-assert 12) + (use-jump-blocked basic :offset-assert 16) + (debug-draw-neck basic :offset-assert 20) + (jump-debug-draw basic :offset-assert 24) + (move-to-ground basic :offset-assert 28) + (hover-if-no-ground basic :offset-assert 32) + (idle-anim-script uint32 :offset-assert 36) + (idle-anim int32 :offset-assert 40) + (notice-anim int32 :offset-assert 44) + (hostile-anim int32 :offset-assert 48) + (hit-anim int32 :offset-assert 52) + (knocked-anim int32 :offset-assert 56) + (knocked-land-anim int32 :offset-assert 60) + (die-anim int32 :offset-assert 64) + (die-falling-anim int32 :offset-assert 68) + (victory-anim int32 :offset-assert 72) + (jump-wind-up-anim int32 :offset-assert 76) + (jump-in-air-anim int32 :offset-assert 80) + (jump-land-anim int32 :offset-assert 84) + (neck-joint int32 :offset-assert 88) + (look-at-joint int32 :offset-assert 92) + (bullseye-joint int32 :offset-assert 96) + (sound-hit uint128 :offset-assert 112) + (sound-die uint128 :offset-assert 128) + (notice-distance meters :offset-assert 144) + (notice-distance-delta meters :offset-assert 148) + (proximity-notice-distance meters :offset-assert 152) + (default-hit-points int32 :offset-assert 156) + (gnd-collide-with uint32 :offset-assert 160) + (overlaps-others-collide-with-filter uint32 :offset-assert 164) + (penetrate-flinch uint64 :offset-assert 168) + (penetrate-knocked uint64 :offset-assert 176) + (movement-gravity meters :offset-assert 184) + (friction float :offset-assert 188) + (slip-factor float :offset-assert 192) + (attack-shove-back meters :offset-assert 196) + (attack-shove-up meters :offset-assert 200) + (attack-mode basic :offset-assert 204) + (attack-damage int32 :offset-assert 208) + (recover-gnd-collide-with uint32 :offset-assert 212) + (jump-height-min meters :offset-assert 216) + (jump-height-factor float :offset-assert 220) + (knocked-seek-ry-clamp float :offset-assert 224) + (knocked-soft-vxz-lo float :offset-assert 228) + (knocked-soft-vxz-hi float :offset-assert 232) + (knocked-soft-vy-lo float :offset-assert 236) + (knocked-soft-vy-hi float :offset-assert 240) + (knocked-medium-vxz-lo float :offset-assert 244) + (knocked-medium-vxz-hi float :offset-assert 248) + (knocked-medium-vy-lo float :offset-assert 252) + (knocked-medium-vy-hi float :offset-assert 256) + (knocked-hard-vxz-lo float :offset-assert 260) + (knocked-hard-vxz-hi float :offset-assert 264) + (knocked-hard-vy-lo float :offset-assert 268) + (knocked-hard-vy-hi float :offset-assert 272) + (knocked-huge-vxz-lo float :offset-assert 276) + (knocked-huge-vxz-hi float :offset-assert 280) + (knocked-huge-vy-lo float :offset-assert 284) + (knocked-huge-vy-hi float :offset-assert 288) + (knocked-yellow-vxz-lo float :offset-assert 292) + (knocked-yellow-vxz-hi float :offset-assert 296) + (knocked-yellow-vy-lo float :offset-assert 300) + (knocked-yellow-vy-hi float :offset-assert 304) + (knocked-red-vxz-lo float :offset-assert 308) + (knocked-red-vxz-hi float :offset-assert 312) + (knocked-red-vy-lo float :offset-assert 316) + (knocked-red-vy-hi float :offset-assert 320) + (knocked-blue-vxz-lo float :offset-assert 324) + (knocked-blue-vxz-hi float :offset-assert 328) + (knocked-blue-vy-lo float :offset-assert 332) + (knocked-blue-vy-hi float :offset-assert 336) + (shadow-size meters :offset-assert 340) + (shadow-max-y meters :offset-assert 344) + (shadow-min-y meters :offset-assert 348) + (shadow-locus-dist meters :offset-assert 352) + (gem-joint int32 :offset-assert 356) + (gem-seg uint32 :offset-assert 360) + (gem-no-seg uint32 :offset-assert 364) + (gem-offset sphere :inline :offset-assert 368) + ) + :method-count-assert 10 + :size-assert #x180 + :flag-assert #xa00000180 + (:methods + (enemy-info-method-9 () none 9) + ) + ) + +(deftype enemy-knocked-info (structure) + ((anim-speed float :offset-assert 0) + (on-surface-count int32 :offset-assert 4) + (move-count int32 :offset-assert 8) + (land-can-land-time time-frame :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype enemy-jump-info (structure) + ((flags uint8 :offset-assert 0) + (anim-speed float :offset-assert 4) + (hang-time time-frame :offset-assert 8) + (start-pos vector :inline :offset-assert 16) + (dest-pos vector :inline :offset-assert 32) + (traj trajectory :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) + +(deftype enemy-init-by-other-params (structure) + ((trans vector :inline :offset-assert 0) + (quat quaternion :inline :offset-assert 16) + (entity basic :offset-assert 32) + (directed? basic :offset-assert 36) + (no-initial-move-to-ground? basic :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +(deftype enemy-attack-info (structure) + ((attack-id uint32 :offset-assert 0) + (knocked-type uint8 :offset-assert 4) + (blue-juggle-count uint8 :offset-assert 5) + (attacker-handle uint64 :offset-assert 8) + (attack-time time-frame :offset-assert 16) + (penetrate-using uint64 :offset-assert 24) + (attacker-pos vector :inline :offset-assert 32) + (attack-direction vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype enemy-best-focus (structure) + ((proc basic :offset-assert 0) + (rating float :offset-assert 4) + (aware uint64 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype enemy (process-focusable) + ((enemy-flags enemy-flag :offset-assert 208) + (enemy-info symbol :offset-assert 216) + (hit-points int32 :offset-assert 220) + (gnd-collide uint32 :offset-assert 224) + (attack-id uint32 :offset-assert 228) + (persistent-attack-id uint32 :offset-assert 232) + (water-max-height float :offset-assert 236) + (water-surface-height float :offset-assert 240) + (desired-angle float :offset-assert 244) + (jump-why uint64 :offset-assert 248) + (penetrated-by-all uint64 :offset-assert 256) + (penetrated-flinch uint64 :offset-assert 264) + (penetrated-knocked uint64 :offset-assert 272) + (reaction-time uint64 :offset-assert 280) + (notice-time uint64 :offset-assert 288) + (state-timeout uint64 :offset-assert 296) + (auto-reset-penetrate-time uint64 :offset-assert 304) + (hit-focus-time uint64 :offset-assert 312) + (last-draw-time uint64 :offset-assert 320) + (starting-time uint64 :offset-assert 328) + (fated-time uint64 :offset-assert 336) + (focus-pos vector :inline :offset-assert 352) + (event-param-point vector :inline :offset-assert 368) + (jump-dest vector :inline :offset 368) + (focus enemy-focus :inline :offset-assert 384) + (incoming enemy-attack-info :inline :offset-assert 416) + (actor-group actor-group :offset-assert 480) + (actor-group-count int32 :offset-assert 484) + (neck symbol :offset-assert 488) + (on-notice symbol :offset-assert 492) + (on-active symbol :offset-assert 496) + (on-hostile symbol :offset-assert 500) + (on-death symbol :offset-assert 504) + (idle-anim-player idle-control :inline :offset-assert 512) + (rand-gen symbol :offset-assert 528) + ) + :method-count-assert 137 + :size-assert #x214 + :flag-assert #x8901a00214 + (:methods + (enemy-method-27 () none 27) + (enemy-method-28 () none 28) + (enemy-method-29 () none 29) + (enemy-method-30 () none 30) + (enemy-method-31 () none 31) + (enemy-method-32 () none 32) + (enemy-method-33 () none 33) + (enemy-method-34 () none 34) + (enemy-method-35 () none 35) + (enemy-method-36 () none 36) + (enemy-method-37 () none 37) + (enemy-method-38 () none 38) + (enemy-method-39 () none 39) + (enemy-method-40 () none 40) + (enemy-method-41 () none 41) + (enemy-method-42 () none 42) + (enemy-method-43 () none 43) + (enemy-method-44 () none 44) + (enemy-method-45 () none 45) + (enemy-method-46 () none 46) + (enemy-method-47 () none 47) + (enemy-method-48 () none 48) + (enemy-method-49 () none 49) + (enemy-method-50 () none 50) + (enemy-method-51 () none 51) + (enemy-method-52 () none 52) + (enemy-method-53 () none 53) + (enemy-method-54 () none 54) + (enemy-method-55 () none 55) + (enemy-method-56 () none 56) + (enemy-method-57 () none 57) + (enemy-method-58 () none 58) + (enemy-method-59 () none 59) + (enemy-method-60 () none 60) + (enemy-method-61 () none 61) + (enemy-method-62 () none 62) + (enemy-method-63 () none 63) + (enemy-method-64 () none 64) + (enemy-method-65 () none 65) + (enemy-method-66 () none 66) + (enemy-method-67 () none 67) + (enemy-method-68 () none 68) + (enemy-method-69 () none 69) + (enemy-method-70 () none 70) + (enemy-method-71 () none 71) + (enemy-method-72 () none 72) + (enemy-method-73 () none 73) + (enemy-method-74 () none 74) + (enemy-method-75 () none 75) + (enemy-method-76 () none 76) + (enemy-method-77 () none 77) + (enemy-method-78 () none 78) + (enemy-method-79 () none 79) + (enemy-method-80 () none 80) + (enemy-method-81 () none 81) + (enemy-method-82 () none 82) + (enemy-method-83 () none 83) + (enemy-method-84 () none 84) + (enemy-method-85 () none 85) + (enemy-method-86 () none 86) + (enemy-method-87 () none 87) + (enemy-method-88 () none 88) + (enemy-method-89 () none 89) + (enemy-method-90 () none 90) + (enemy-method-91 () none 91) + (enemy-method-92 () none 92) + (enemy-method-93 () none 93) + (enemy-method-94 () none 94) + (enemy-method-95 () none 95) + (enemy-method-96 () none 96) + (enemy-method-97 () none 97) + (enemy-method-98 () none 98) + (enemy-method-99 () none 99) + (enemy-method-100 () none 100) + (enemy-method-101 () none 101) + (enemy-method-102 () none 102) + (enemy-method-103 () none 103) + (enemy-method-104 () none 104) + (enemy-method-105 () none 105) + (enemy-method-106 () none 106) + (enemy-method-107 () none 107) + (enemy-method-108 () none 108) + (enemy-method-109 () none 109) + (enemy-method-110 () none 110) + (enemy-method-111 () none 111) + (enemy-method-112 () none 112) + (enemy-method-113 () none 113) + (enemy-method-114 () none 114) + (enemy-method-115 () none 115) + (enemy-method-116 () none 116) + (enemy-method-117 () none 117) + (enemy-method-118 () none 118) + (enemy-method-119 () none 119) + (enemy-method-120 () none 120) + (enemy-method-121 () none 121) + (enemy-method-122 () none 122) + (enemy-method-123 () none 123) + (enemy-method-124 () none 124) + (enemy-method-125 () none 125) + (enemy-method-126 () none 126) + (enemy-method-127 () none 127) + (enemy-method-128 () none 128) + (enemy-method-129 () none 129) + (enemy-method-130 () none 130) + (enemy-method-131 () none 131) + (enemy-method-132 () none 132) + (enemy-method-133 () none 133) + (enemy-method-134 () none 134) + (enemy-method-135 () none 135) + (enemy-method-136 () none 136) + ) + ) diff --git a/goal_src/jak2/engine/ai/traffic-h.gc b/goal_src/jak2/engine/ai/traffic-h.gc index 427e460a7a..1e85951d4d 100644 --- a/goal_src/jak2/engine/ai/traffic-h.gc +++ b/goal_src/jak2/engine/ai/traffic-h.gc @@ -14,8 +14,11 @@ ;; DECOMP BEGINS (define *traffic-manager* (the-as process #f)) + (define *ctywide-entity* (the-as object #f)) + (define *lwide-entity* (the-as object #f)) + (define *race-vehicle-entity* (the-as object #f)) (deftype traffic-danger-info (structure) @@ -33,6 +36,7 @@ :flag-assert #x900000036 ) + (deftype traffic-suppression-params (structure) ((bbox bounding-box :inline :offset-assert 0) (duration uint64 :offset-assert 32) @@ -49,6 +53,8 @@ ) ) + +;; WARN: Return type mismatch symbol vs none. (defmethod has-valid-id? traffic-suppression-params ((obj traffic-suppression-params)) (!= (-> obj id) -1) (none) diff --git a/goal_src/jak2/engine/anim/joint-exploder.gc b/goal_src/jak2/engine/anim/joint-exploder.gc index 4ec9f67865..c1cbf44b63 100644 --- a/goal_src/jak2/engine/anim/joint-exploder.gc +++ b/goal_src/jak2/engine/anim/joint-exploder.gc @@ -5,5 +5,26 @@ ;; name in dgo: joint-exploder ;; dgos: GAME, COMMON +;; TODO - for vehicle-h + +(deftype joint-exploder-static-joint-params (structure) + ((joint-index int16 :offset-assert 0) + (parent-joint-index int16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype joint-exploder-static-params (basic) + ((joints (array joint-exploder-static-joint-params) :offset-assert 4) ;; guessed by decompiler + (collide-spec uint32 :offset-assert 8) + (art-level basic :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/anim/joint.gc b/goal_src/jak2/engine/anim/joint.gc index bf3dae8667..7ba0b8c51e 100644 --- a/goal_src/jak2/engine/anim/joint.gc +++ b/goal_src/jak2/engine/anim/joint.gc @@ -1756,7 +1756,7 @@ (set! (-> v1-15 comp-data) (the-as uint (-> s5-0 fixed))) ) (let ((s4-1 (kmalloc (-> obj kheap) (the-as int s3-0) (kmalloc-flags) "malloc"))) - (unpack-comp-lzo s4-1 (-> s5-0 fixed)) + (unpack-comp-lzo (the (pointer uint8) s4-1) (the (pointer uint8) (-> s5-0 fixed))) (set! (-> s5-0 flags) (logand -2 (-> s5-0 flags))) (logior! (-> s5-0 flags) 2) (set! (-> s5-0 fixed) (the-as joint-anim-compressed-fixed s4-1)) diff --git a/goal_src/jak2/engine/camera/cam-update.gc b/goal_src/jak2/engine/camera/cam-update.gc index 648ed75212..0df5e4cb88 100644 --- a/goal_src/jak2/engine/camera/cam-update.gc +++ b/goal_src/jak2/engine/camera/cam-update.gc @@ -5,9 +5,6 @@ ;; name in dgo: cam-update ;; dgos: ENGINE, GAME -;; TODO -;; og:ignore-form:update-visible - ;; DECOMP BEGINS (defun plane-from-points ((arg0 (inline-array plane)) (arg1 vector) (arg2 vector) (arg3 vector) (arg4 int)) @@ -97,7 +94,168 @@ (define *update-leaf-when-outside-bsp* #t) -;; ERROR: failed type prop at 290: Could not figure out load: (set! v1 (l.w s3)) +(defun update-visible ((arg0 math-camera)) + (local-vars (s4-0 level-vis-info)) + (when (not *artist-fix-visible*) + (dotimes (s5-0 (-> *level* length)) + (let ((v1-5 (-> *level* level s5-0))) + (when (= (-> v1-5 status) 'active) + (if (and (nonzero? (-> v1-5 bsp nodes)) (or *update-leaf-when-outside-bsp* (-> v1-5 inside-boxes))) + (bsp-camera-asm (-> v1-5 bsp) (-> arg0 trans)) + ) + ) + ) + ) + (dotimes (gp-1 (-> *level* length)) + (let ((s5-1 (-> *level* level gp-1))) + (when (= (-> s5-1 status) 'active) + (let ((a2-0 (/ (+ (-> s5-1 bsp visible-list-length) 15) 16))) + (set! (-> s5-1 all-visible?) (if (-> s5-1 all-visible?) + (-> s5-1 all-visible?) + #t + ) + ) + (cond + ((or (not (-> s5-1 force-all-visible?)) (-> s5-1 inside-boxes)) + (cond + ((or *artist-all-visible* (not (-> s5-1 vis-info 0))) + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) + (if (= (-> s5-1 all-visible?) 'loading) + (set! (-> s5-1 all-visible?) #t) + ) + ) + ((begin + (set! s4-0 (-> s5-1 vis-info (-> s5-1 vis-self-index))) + (let ((v1-32 #f)) + (when (and s4-0 (-> s4-0 from-bsp)) + (set! v1-32 (logtest? (vis-info-flag vis-valid) (-> s4-0 flags))) + (if (< (-> s4-0 length) (-> s4-0 from-bsp current-leaf-idx)) + (set! v1-32 #f) + ) + ) + v1-32 + ) + ) + (if (!= (-> s5-1 all-visible?) 'loading) + (set! (-> s5-1 all-visible?) #f) + ) + (when (update-vis! s5-1 s4-0 (-> s4-0 ramdisk) (the-as (pointer uint8) (-> s4-0 string-block))) + (countdown (v1-40 8) + (let ((a0-27 (-> s5-1 vis-info v1-40))) + (when a0-27 + (if (!= a0-27 s4-0) + (set! (-> a0-27 current-vis-string) (the-as uint -1)) + ) + ) + ) + ) + (set! (-> s5-1 all-visible?) #f) + ) + ) + ((and (= (-> s5-1 all-visible?) 'loading) (-> *level* play?)) + ) + (else + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) + ) + ) + ) + (else + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) + ) + ) + ) + ) + ) + ) + ) + (if (and *artist-fix-visible* (cpad-pressed? 0 r2)) + (set! *fix-visible-level-mask* (logand (+ *fix-visible-level-mask* 1) 63)) + ) + (dotimes (gp-2 (-> *level* length)) + (let ((s5-2 (-> *level* level gp-2))) + (when (= (-> s5-2 status) 'active) + (cond + ((or *artist-fix-visible* *stats-bsp*) + (set! (-> s5-2 render?) (zero? (logand *fix-visible-level-mask* (ash 1 (-> s5-2 index))))) + (format + *stdcon* + "~0kleaf-index ~8S ~C = ~d node ~d ~S ~S~%" + (-> s5-2 name) + (if (not (logtest? *fix-visible-level-mask* (ash 1 (-> s5-2 index)))) + 88 + 32 + ) + (-> s5-2 bsp current-leaf-idx) + (-> s5-2 bsp cam-box-idx) + (if (zero? (-> s5-2 bsp cam-using-back)) + "front" + "back" + ) + (if (nonzero? (-> s5-2 bsp cam-outside-bsp)) + "outside" + "" + ) + ) + ) + (else + (set! (-> s5-2 render?) #t) + ) + ) + (when (and *artist-fix-visible* (zero? (logand *fix-visible-level-mask* (ash 1 (-> s5-2 index))))) + (let ((s4-1 (-> s5-2 bsp current-leaf-idx)) + (s3-0 (-> s5-2 bsp vis-spheres)) + ) + (-> s5-2 bsp unk-data 17) + (when (nonzero? s3-0) + (dotimes (s2-0 (-> s3-0 length)) + (let* ((v1-93 (the int (-> s3-0 data s2-0 w))) + (a0-43 (abs v1-93)) + ) + (when (= a0-43 s4-1) + (if (>= v1-93 0) + (add-debug-sphere #t (bucket-id debug2) (-> s3-0 data s2-0) (meters 1) (new 'static 'rgba :b #xff :a #x80)) + (add-debug-sphere #t (bucket-id debug2) (-> s3-0 data s2-0) (meters 1) (new 'static 'rgba :r #xff :a #x80)) + ) + ) + ) + ) + ) + ) + (when (nonzero? (-> s5-2 bsp nodes)) + (let ((v1-107 (-> s5-2 bsp nodes (-> s5-2 bsp cam-box-idx))) + (a2-9 (new 'stack-no-clear 'vector)) + ) + (set! (-> a2-9 quad) (-> s5-2 bsp bsp-offset quad)) + (let ((a3-6 (new 'stack-no-clear 'vector))) + (set! (-> a3-6 quad) (-> s5-2 bsp bsp-offset quad)) + (cond + ((zero? (-> s5-2 bsp cam-using-back)) + (+! (-> a2-9 x) (the float (* (the-as int (-> v1-107 front-box-min x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a2-9 y) (the float (* (the-as int (-> v1-107 front-box-min y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a2-9 z) (the float (* (the-as int (-> v1-107 front-box-min z)) (the int (-> s5-2 bsp bsp-scale z))))) + (+! (-> a3-6 x) (the float (* (the-as int (-> v1-107 front-box-max x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a3-6 y) (the float (* (the-as int (-> v1-107 front-box-max y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a3-6 z) (the float (* (the-as int (-> v1-107 front-box-max z)) (the int (-> s5-2 bsp bsp-scale z))))) + ) + (else + (+! (-> a2-9 x) (the float (* (the-as int (-> v1-107 back-box-min x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a2-9 y) (the float (* (the-as int (-> v1-107 back-box-min y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a2-9 z) (the float (* (the-as int (-> v1-107 back-box-min z)) (the int (-> s5-2 bsp bsp-scale z))))) + (+! (-> a3-6 x) (the float (* (the-as int (-> v1-107 back-box-max x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a3-6 y) (the float (* (the-as int (-> v1-107 back-box-max y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a3-6 z) (the float (* (the-as int (-> v1-107 back-box-max z)) (the int (-> s5-2 bsp bsp-scale z))))) + ) + ) + (add-debug-box #t (bucket-id debug2) a2-9 a3-6 (new 'static 'rgba :g #xff :b #xff :a #x80)) + ) + ) + ) + ) + ) + ) + ) + #f + ) (define *save-camera-inv-rot* (new 'global 'matrix)) diff --git a/goal_src/jak2/engine/collide/collide-shape-h.gc b/goal_src/jak2/engine/collide/collide-shape-h.gc index 035f0808a3..c2b93b4b9f 100644 --- a/goal_src/jak2/engine/collide/collide-shape-h.gc +++ b/goal_src/jak2/engine/collide/collide-shape-h.gc @@ -276,7 +276,6 @@ ) -;; WARN: Return type mismatch int vs none. (defmethod prepare collide-rider-pool ((obj collide-rider-pool)) "Gets this pool ready to be used to allow allocations. This should be called once at the start of every frame." (set! (-> obj alloc-count) 0) @@ -446,7 +445,7 @@ (penetrate-using penetrate :offset-assert 168) (penetrated-by penetrate :offset-assert 176) (backup-collide-as collide-spec :offset-assert 184) - (backup-collde-with collide-spec :offset-assert 188) + (backup-collide-with collide-spec :offset-assert 188) (event-priority uint8 :offset-assert 192) (rider-max-momentum float :offset-assert 196) ) @@ -455,7 +454,7 @@ :flag-assert #x37000000c8 (:methods (new (symbol type process-drawable collide-list-enum) _type_ 0) - (collide-shape-method-28 () none 28) + (move-by-vector! (_type_ vector) none 28) (collide-shape-method-29 (_type_ vector) none 29) (collide-shape-method-30 () none 30) (collide-shape-method-31 () none 31) @@ -674,9 +673,3 @@ ) (define-perm *collide-rider-pool* collide-rider-pool (new 'global 'collide-rider-pool)) - -0 - - - - diff --git a/goal_src/jak2/engine/collide/collide-touch-h.gc b/goal_src/jak2/engine/collide/collide-touch-h.gc index 984348f980..5f3468bfff 100644 --- a/goal_src/jak2/engine/collide/collide-touch-h.gc +++ b/goal_src/jak2/engine/collide/collide-touch-h.gc @@ -17,6 +17,7 @@ :flag-assert #x900000068 ) + (deftype touching-prims-entry (structure) ((next touching-prims-entry :offset-assert 0) (prev touching-prims-entry :offset-assert 4) @@ -35,6 +36,7 @@ ) ) + (deftype touching-prims-entry-pool (structure) ((head touching-prims-entry :offset-assert 0) (nodes touching-prims-entry 64 :inline :offset-assert 16) @@ -51,6 +53,7 @@ ) ) + (defmethod init-list! touching-prims-entry-pool ((obj touching-prims-entry-pool)) (let ((v1-0 (the-as touching-prims-entry #f))) (let ((a1-0 (the-as touching-prims-entry (-> obj nodes)))) @@ -71,6 +74,7 @@ (none) ) +;; WARN: Return type mismatch structure vs touching-prims-entry-pool. (defmethod new touching-prims-entry-pool ((allocation symbol) (type-to-make type)) (let ((t9-0 (method-of-type structure new)) (v1-1 type-to-make) @@ -100,11 +104,12 @@ (get-next (_type_ touching-shapes-entry) touching-prims-entry 10) (touching-shapes-entry-method-11 () none 11) (touching-shapes-entry-method-12 (_type_ collide-shape uint) touching-prims-entry 12) - (touching-shapes-entry-method-13 () none 13) + (touching-shapes-entry-method-13 (_type_ collide-shape uint uint) basic 13) (touching-shapes-entry-method-14 () none 14) ) ) + (deftype touching-list (structure) ((num-touching-shapes int32 :offset-assert 0) (resolve-u int8 :offset-assert 4) @@ -123,6 +128,8 @@ ) ) + +;; WARN: Return type mismatch structure vs touching-list. (defmethod new touching-list ((allocation symbol) (type-to-make type)) (let ((t9-0 (method-of-type structure new)) (v1-1 type-to-make) @@ -140,6 +147,7 @@ (-> obj head) ) +;; WARN: Return type mismatch collide-shape vs touching-prims-entry. (defmethod get-next touching-shapes-entry ((obj touching-shapes-entry) (arg0 touching-shapes-entry)) (the-as touching-prims-entry (-> arg0 cshape1)) ) @@ -147,10 +155,7 @@ (kmemopen global "collide-touching-lists") (define-perm *touching-prims-entry-pool* touching-prims-entry-pool (new 'global 'touching-prims-entry-pool)) + (define-perm *touching-list* touching-list (new 'global 'touching-list)) (kmemclose) - - - - diff --git a/goal_src/jak2/engine/common_objs/base-plat.gc b/goal_src/jak2/engine/common_objs/base-plat.gc index 3387f925ad..266af63c93 100644 --- a/goal_src/jak2/engine/common_objs/base-plat.gc +++ b/goal_src/jak2/engine/common_objs/base-plat.gc @@ -5,5 +5,413 @@ ;; name in dgo: base-plat ;; dgos: GAME, COMMON +;; +++eco-door-flags +(defenum eco-door-flags + :bitfield #t + :type int32 + (ecdf00) + (ecdf01) + (auto-close) + (one-way) + ) +;; ---eco-door-flags + + ;; DECOMP BEGINS +(deftype base-plat (process-focusable) + ((root-override collide-shape-moving :offset 128) + (smush smush-control :inline :offset-assert 208) + (basetrans vector :inline :offset-assert 240) + (bounce-time time-frame :offset-assert 256) + (bouncing symbol :offset-assert 264) + (bounce-scale meters :offset-assert 268) + ) + :heap-base #x90 + :method-count-assert 34 + :size-assert #x110 + :flag-assert #x2200900110 + (:methods + (execute-effects (_type_) none 27) + (stop-bouncing! (_type_) none 28) + (start-bouncing! (_type_) none :behavior base-plat 29) + (get-art-group (_type_) art-group 30) + (base-plat-method-31 (_type_) none 31) + (base-plat-method-32 (_type_) none 32) + (base-plat-method-33 (_type_) none 33) + ) + ) + + +(defmethod base-plat-method-33 base-plat ((obj base-plat)) + 0 + (none) + ) + +(defmethod stop-bouncing! base-plat ((obj base-plat)) + "Sets `bouncing` to false and resets related settings to their defaults" + (set! (-> obj basetrans quad) (-> obj root-override trans quad)) + (set! (-> obj bouncing) #f) + (set! (-> obj bounce-scale) 819.2) + 0 + (none) + ) + +(defmethod start-bouncing! base-plat ((obj base-plat)) + "Sets `bouncing` to [[#t]] and sets up the clock to periodically bounce + and translate the platform via the `smush` + @see [[smush-control]]" + (activate! (-> obj smush) -1.0 60 150 1.0 1.0 (-> self clock)) + (set! (-> obj bounce-time) (-> self clock frame-counter)) + (set! (-> obj bouncing) #t) + (sound-play "plat-bounce" :position (-> obj root-override trans)) + (logclear! (-> obj mask) (process-mask sleep)) + (logclear! (-> obj mask) (process-mask sleep-code)) + 0 + (none) + ) + +;; WARN: Return type mismatch symbol vs none. +;; WARN: new jak 2 until loop case, check carefully +(defbehavior plat-code base-plat () + "After calling [[transform-post]] for 2 consecutive frames, put the process to sleep if it's not bouncing + otherwise, continue bouncing...forever! + @see [[transform-post]]" + (transform-post) + (suspend) + (transform-post) + (suspend) + (until #f + (when (not (-> self bouncing)) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + ) + (while (-> self bouncing) + (suspend) + ) + ) + #f + (none) + ) + +(defbehavior plat-trans base-plat () + "If the platform is `bouncing`, move the platform accordingly with the [[smush-control]] + - If the amplitude of the `smush` has hit `0.0` then stop bouncing + + If we aren't bouncing however, TODO - CSHAPE" + (rider-trans) + (cond + ((-> self bouncing) + (let ((trans (new 'stack-no-clear 'vector))) + (set! (-> trans quad) (-> self basetrans quad)) + (+! (-> trans y) (* (-> self bounce-scale) (update! (-> self smush)))) + (collide-shape-method-29 (-> self root-override) trans) + ) + (if (not (!= (-> self smush amp) 0.0)) + (set! (-> self bouncing) #f) + ) + ) + (else + (collide-shape-method-29 (-> self root-override) (-> self basetrans)) + ) + ) + (none) + ) + +(defbehavior plat-post base-plat () + (execute-effects self) + (rider-post) + (none) + ) + +(defmethod base-plat-method-32 base-plat ((obj base-plat)) + 0 + (none) + ) + +(defmethod execute-effects base-plat ((obj base-plat)) + "Executes various ancillary tasks with the platform, such as spawning particles or playing the associated sound" + (if (nonzero? (-> obj part)) + (spawn (-> obj part) (-> obj root-override trans)) + ) + (when (nonzero? (-> obj sound)) + (set! (-> obj sound trans quad) (-> obj root-override trans quad)) + (update! (-> obj sound)) + ) + (none) + ) + +;; WARN: Return type mismatch none vs object. +(defbehavior plat-event base-plat ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + "Handles platform related events. Presently all this does is: + - if `event-type` is [['bonk]], then call [[base-plat:29]]" + (let ((evt-type event-type)) + (the-as object (if (= evt-type 'bonk) + (start-bouncing! self) + ) + ) + ) + ) + +(deftype eco-door (process-drawable) + "@unused - Likely a left-over from Jak 1" + ((root-override collide-shape :offset 128) + (speed float :offset-assert 200) + (open-distance float :offset-assert 204) + (close-distance float :offset-assert 208) + (out-dir vector :inline :offset-assert 224) + (open-sound sound-name :offset-assert 240) + (close-sound sound-name :offset-assert 256) + (state-actor entity-actor :offset-assert 272) + (flags eco-door-flags :offset-assert 276) + (locked symbol :offset-assert 280) + (auto-close symbol :offset-assert 284) + (one-way symbol :offset-assert 288) + ) + :heap-base #xb0 + :method-count-assert 27 + :size-assert #x124 + :flag-assert #x1b00b00124 + (:methods + (door-closed () _type_ :state 20) + (door-opening () _type_ :state 21) + (door-open () _type_ :state 22) + (door-closing () _type_ :state 23) + (lock-according-to-task! (_type_) none 24) + (eco-door-method-25 (_type_) none 25) + (stub (_type_) none 26) + ) + ) + + +;; WARN: Return type mismatch symbol vs object. +(defbehavior eco-door-event-handler eco-door ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + "If the `event-type` is `'trigger`, flip the `locked` flag on the door + and play the respective sound + + @unused - likely a leftover from Jak 1" + (let ((evt-type event-type)) + (the-as object (when (= evt-type 'trigger) + (set! (-> self locked) (not (-> self locked))) + (cond + ((-> self locked) + (if (and (-> self next-state) (= (-> self next-state name) 'door-closed)) + (sound-play "door-lock") + ) + ) + (else + (sound-play "door-unlock") + ) + ) + #t + ) + ) + ) + ) + +eco-door-event-handler + +(defstate door-closed (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (ja :num-func num-func-identity :frame-num 0.0) + (suspend) + (collide-shape-method-46 (-> self root-override)) + (ja-post) + (until #f + (when (and *target* (and (>= (-> self open-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + (zero? (logand (focus-status teleporting) (-> *target* focus-status))) + ) + ) + (lock-according-to-task! self) + (if (and (not (-> self locked)) + (or (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status subtask-complete))) + (send-event *target* 'query 'powerup (pickup-type eco-blue)) + (and (-> self one-way) (< (vector4-dot (-> self out-dir) (target-pos 0)) -8192.0)) + ) + ) + (go-virtual door-opening) + ) + ) + (suspend) + ) + #f + (none) + ) + ) + +(defstate door-opening (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (if (and (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status subtask-complete))) + ) + (send-event *target* 'query 'powerup (pickup-type eco-blue)) + ) + (sound-play "blue-eco-on" :position (-> self root-override trans)) + ) + (sound-play-by-name (-> self open-sound) (new-sound-id) 1024 0 0 (sound-group sfx) #t) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (collide-spec)) + (set! (-> prim prim-core collide-with) (collide-spec)) + ) + 0 + (until (ja-done? 0) + (ja :num! (seek! max (-> self speed))) + (suspend) + ) + (go-virtual door-open) + (none) + ) + :post (the-as (function none :behavior eco-door) transform-post) + ) + +(defstate door-open (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (collide-spec)) + (set! (-> prim prim-core collide-with) (collide-spec)) + ) + 0 + (ja :num-func num-func-identity :frame-num max) + (logior! (-> self draw status) (draw-control-status no-draw)) + (suspend) + (collide-shape-method-46 (-> self root-override)) + (ja-post) + (until #f + (let ((dist-from-target (vector4-dot (-> self out-dir) (target-pos 0))) + (dist-from-camera (vector4-dot (-> self out-dir) (camera-pos))) + ) + (when (and (-> self auto-close) + (or (not *target*) (or (< (-> self close-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + (logtest? (focus-status teleporting) (-> *target* focus-status)) + ) + ) + ) + (if (and (>= (* dist-from-target dist-from-camera) 0.0) (< 16384.0 (fabs dist-from-camera))) + (go-virtual door-closing) + ) + ) + ) + (suspend) + ) + #f + (none) + ) + ) + +(defstate door-closing (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (-> self root-override backup-collide-as)) + (set! (-> v1-1 prim-core collide-with) (-> self root-override backup-collide-with)) + ) + (logclear! (-> self draw status) (draw-control-status no-draw)) + (let ((params (new 'stack 'overlaps-others-params))) + (set! (-> params options) (overlaps-others-options oo0)) + (set! (-> params tlist) #f) + (while (find-overlapping-shapes (-> self root-override) params) + (suspend) + ) + ) + (sound-play-by-name (-> self close-sound) (new-sound-id) 1024 0 0 (sound-group sfx) #t) + (until (ja-done? 0) + (ja :num! (seek! 0.0 (-> self speed))) + (suspend) + ) + (if (-> self locked) + (sound-play "door-lock") + ) + (go-virtual door-closed) + (none) + ) + :post (the-as (function none :behavior eco-door) transform-post) + ) + +(defmethod lock-according-to-task! eco-door ((obj eco-door)) + "If the associated subtask is completed, lock the door if [[eco-door-flags:0]] is set + otherwise, lock it if [[eco-door-flags:0]] is set" + (when (-> obj state-actor) + (if (logtest? (-> obj state-actor extra perm status) (entity-perm-status subtask-complete)) + (set! (-> obj locked) (logtest? (-> obj flags) (eco-door-flags ecdf01))) + (set! (-> obj locked) (logtest? (-> obj flags) (eco-door-flags ecdf00))) + ) + ) + 0 + (none) + ) + +(defmethod eco-door-method-25 eco-door ((obj eco-door)) + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec obstacle)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 16384.0) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root-override) collision-shape) + ) + 0 + (none) + ) + +(defmethod stub eco-door ((obj eco-door)) + "@unused - Stub with no overrides" + 0 + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! eco-door ((obj eco-door) (arg0 entity-actor)) + (eco-door-method-25 obj) + (process-drawable-from-entity! obj arg0) + (let ((door-scale (res-lump-float (-> obj entity) 'scale :default 1.0))) + (set-vector! (-> obj root-override scale) door-scale door-scale door-scale 1.0) + ) + (set! (-> obj open-distance) 32768.0) + (set! (-> obj close-distance) 49152.0) + (set! (-> obj speed) 1.0) + (set! (-> obj state-actor) #f) + (let ((state-actor (entity-actor-lookup arg0 'state-actor 0))) + (if state-actor + (set! (-> obj state-actor) state-actor) + ) + ) + (set! (-> obj locked) #f) + (set! (-> obj flags) (res-lump-value arg0 'flags eco-door-flags :time -1000000000.0)) + (lock-according-to-task! obj) + (set! (-> obj auto-close) (logtest? (-> obj flags) (eco-door-flags auto-close))) + (set! (-> obj one-way) (logtest? (-> obj flags) (eco-door-flags one-way))) + (vector-z-quaternion! (-> obj out-dir) (-> obj root-override quat)) + (set! (-> obj out-dir w) (- (vector-dot (-> obj out-dir) (-> obj root-override trans)))) + (collide-shape-method-46 (-> obj root-override)) + (stub obj) + (if (and (not (-> obj auto-close)) + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete)) + ) + (go (method-of-object obj door-open)) + (go (method-of-object obj door-closed)) + ) + (none) + ) diff --git a/goal_src/jak2/engine/common_objs/basebutton.gc b/goal_src/jak2/engine/common_objs/basebutton.gc index f3fea366d4..ac2d9c73ad 100644 --- a/goal_src/jak2/engine/common_objs/basebutton.gc +++ b/goal_src/jak2/engine/common_objs/basebutton.gc @@ -5,5 +5,502 @@ ;; name in dgo: basebutton ;; dgos: GAME, COMMON +;; +++button-status +(defenum button-status + :type uint16 + :bitfield #t + (pressed) + (button-status-1) + (button-status-2) + (button-status-3) + (button-status-4)) +;; ---button-status + + ;; DECOMP BEGINS +(deftype basebutton (process-focusable) + ((button-status button-status :offset-assert 204) + (notify-actor entity :offset-assert 208) + (actor-group (pointer actor-group) :offset-assert 212) + (actor-group-count int32 :offset-assert 216) + (timeout float :offset-assert 220) + (button-id int32 :offset-assert 224) + (event-going-down symbol :offset-assert 228) + (event-down symbol :offset-assert 232) + (event-going-up symbol :offset-assert 236) + (event-up symbol :offset-assert 240) + (anim-speed float :offset-assert 244) + (move-to-pos vector :inline :offset-assert 256) + (move-to-quat quaternion :inline :offset-assert 272) + ) + :heap-base #xa0 + :method-count-assert 39 + :size-assert #x120 + :flag-assert #x2700a00120 + (:methods + (down-idle () _type_ :state 27) + (going-down () _type_ :state 28) + (going-up () _type_ :state 29) + (up-idle () _type_ :state 30) + (reset! (_type_) none 31) + (idle-state-transition (_type_) object 32) + (basebutton-method-33 (_type_) none 33) + (basebutton-method-34 (_type_) none 34) + (prepare-trigger-event! (_type_) none 35) + (send-event! (_type_ symbol) none :behavior basebutton 36) + (move-to! (_type_ vector quaternion) none 37) + (press! (_type_ symbol) entity-perm-status 38) + ) + ) + + +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-generic-button" + :extra #f + :info #f + :art-group-name "mtn-dice-button" + :bounds (new 'static 'vector :w 12288.0) + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 3) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-2) + ) + +(defmethod move-to! basebutton ((obj basebutton) (vec vector) (quat quaternion)) + (logclear! (-> obj button-status) (button-status button-status-2)) + (if vec + (set! (-> obj move-to-pos quad) (-> vec quad)) + (set! (-> obj move-to-pos quad) (-> obj root trans quad)) + ) + (if quat + (quaternion-copy! (-> obj move-to-quat) quat) + (quaternion-copy! (-> obj move-to-quat) (-> obj root quat)) + ) + 0 + (none) + ) + +(defmethod idle-state-transition basebutton ((obj basebutton)) + "If `button-status` has [[button-status:0]] set, transition to [[basebutton::27]] otherwise, [[basebutton::30]]" + (if (logtest? (-> obj button-status) (button-status pressed)) + (go (method-of-object obj down-idle)) + (go (method-of-object obj up-idle)) + ) + ) + +(defstate up-idle (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (cond + ((= v1-0 'attack) + (let ((attack (the-as attack-info (-> event param 1)))) + (case (-> attack mode) + (('flop 'spin 'punch 'eco-yellow 'eco-red 'eco-blue 'eco-dark) + (when (or (not (or (= (-> attack mode) 'spin) (= (-> attack mode) 'punch))) + (logtest? (-> self button-status) (button-status button-status-3)) + ) + (send-event! self (-> self event-going-down)) + (go-virtual going-down) + ) + ) + ) + ) + ) + ((= v1-0 'trigger) + (sound-play "silo-button") + (go-virtual going-down) + ) + ((= v1-0 'touch) + (when (logtest? (-> self button-status) (button-status button-status-4)) + (send-event! self (-> self event-going-down)) + (go-virtual going-down) + ) + ) + ((= v1-0 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #f) + (none) + ) + :trans (behavior () + (if (logtest? (-> self button-status) (button-status button-status-2)) + (rider-trans) + ) + (none) + ) + :code (the-as (function none :behavior basebutton) sleep-code) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + (rider-post) + ) + (none) + ) + ) + +(defstate going-down (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'untrigger) + (go-virtual going-up) + ) + ((= evt-type 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #t) + (none) + ) + :trans (the-as (function none :behavior basebutton) rider-trans) + :code (behavior () + (ja-no-eval :num! (seek! max (-> self anim-speed))) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! max (-> self anim-speed))) + ) + (send-event! self (-> self event-down)) + (let ((activation-script (res-lump-struct (-> self entity) 'on-activate structure))) + (if activation-script + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f)) + (the-as pair activation-script) + ) + ) + ) + (go-virtual down-idle) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + ) + (rider-post) + (none) + ) + ) + +(defstate down-idle (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'untrigger) + (go-virtual going-up) + ) + ((= evt-type 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #t) + (set! (-> self state-time) (-> self clock frame-counter)) + (none) + ) + :trans (behavior () + (if (logtest? (-> self button-status) (button-status button-status-2)) + (rider-trans) + ) + (none) + ) + :code (behavior () + (cond + ((= (-> self timeout) 0.0) + (sleep-code) + ) + (else + (until (>= (- (-> self clock frame-counter) (-> self state-time)) (the int (* 300.0 (-> self timeout)))) + (suspend) + ) + (send-event! self (-> self event-going-up)) + (sound-play "silo-button") + (go-virtual going-up) + ) + ) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + (rider-post) + ) + (none) + ) + ) + +(defstate going-up (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (cond + ((= v1-0 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ((= v1-0 'trigger) + (go-virtual going-down) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #f) + (none) + ) + :trans (the-as (function none :behavior basebutton) rider-trans) + :code (behavior () + (ja-no-eval :num! (seek! 0.0 (-> self anim-speed))) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! 0.0 (-> self anim-speed))) + ) + (send-event! self (-> self event-up)) + (go-virtual up-idle) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + ) + (rider-post) + (none) + ) + ) + +(defmethod press! basebutton ((obj basebutton) (pressed? symbol)) + (if pressed? + (logior! (-> obj button-status) (button-status pressed)) + (logclear! (-> obj button-status) (button-status pressed)) + ) + (when (not (logtest? (-> obj button-status) (button-status button-status-1))) + (if pressed? + (process-entity-status! obj (entity-perm-status subtask-complete) #t) + (process-entity-status! obj (entity-perm-status subtask-complete) #f) + ) + ) + ) + +(defmethod send-event! basebutton ((obj basebutton) (event-type symbol)) + "Prepares an [[event-message-block]] using the provided type to send an event to: + - the `notify-actor` + - every [[entity-actor]] in the `actor-group` array + @see [[entity-actor]]" + (when event-type + (let ((event (new 'stack-no-clear 'event-message-block))) + (set! (-> event from) (process->ppointer self)) + (set! (-> event num-params) 0) + (set! (-> event message) event-type) + (let ((func send-event-function) + (actor (-> obj notify-actor)) + ) + (func + (if actor + (-> actor extra process) + ) + event + ) + (dotimes (actor-group-idx (-> obj actor-group-count)) + (let ((actor-group (-> obj actor-group actor-group-idx))) + (dotimes (actor-idx (-> actor-group length)) + (set! event (new 'stack-no-clear 'event-message-block)) + (set! (-> event from) (process->ppointer self)) + (set! (-> event num-params) 0) + (set! (-> event message) event-type) + (set! func send-event-function) + (set! actor (-> actor-group data actor-idx actor)) + (func + (if actor + (-> actor extra process) + ) + event + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +(defmethod reset! basebutton ((obj basebutton)) + (set! (-> obj button-status) (button-status)) + (set! (-> obj notify-actor) #f) + (set! (-> obj timeout) 0.0) + (set! (-> obj event-going-down) #f) + (set! (-> obj event-down) #f) + (set! (-> obj event-going-up) #f) + (set! (-> obj event-up) #f) + (set! (-> obj anim-speed) 1.0) + 0 + (none) + ) + +(defmethod prepare-trigger-event! basebutton ((obj basebutton)) + "Sets `event-going-down` to `'trigger`" + (set! (-> obj event-going-down) 'trigger) + 0 + (none) + ) + +(defmethod basebutton-method-33 basebutton ((obj basebutton)) + "TODO - joint stuff" + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-generic-button" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (ja-channel-set! 1) + (cond + ((logtest? (-> obj button-status) (button-status pressed)) + (let ((channel-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + channel-0 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> channel-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> obj draw art-group data 3)) frames num-frames) -1)) + ) + ) + ) + (else + (let ((channel-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + channel-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> channel-1 frame-num) 0.0) + ) + ) + ) + (set! (-> obj anim-speed) 2.0) + (transform-post) + (none) + ) + +(defmethod basebutton-method-34 basebutton ((obj basebutton)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec obstacle pusher)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid rideable)) + (set! (-> collision-mesh transform-index) 3) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 12288.0) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + ((method-of-object collision-shape collide-shape-method-54)) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root) collision-shape) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! basebutton ((obj basebutton) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (reset! obj) + (set! (-> obj button-id) -1) + (let ((v1-4 (res-lump-value (-> obj entity) 'extra-id uint128 :default (the-as uint128 -1) :time -1000000000.0))) + (if (>= (the-as int v1-4) 0) + (set! (-> obj button-id) (the-as int v1-4)) + ) + ) + (basebutton-method-34 obj) + (process-drawable-from-entity! obj arg0) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete))) + (logior! (-> obj button-status) (button-status pressed)) + (logclear! (-> obj button-status) (button-status pressed)) + ) + (set! (-> obj notify-actor) (entity-actor-lookup arg0 'alt-actor 0)) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-15 (res-lump-data (-> obj entity) 'actor-groups pointer :tag-ptr (& sv-16)))) + (cond + ((and v1-15 (nonzero? (-> sv-16 elt-count))) + (set! (-> obj actor-group) (the-as (pointer actor-group) v1-15)) + (set! (-> obj actor-group-count) (the-as int (-> sv-16 elt-count))) + ) + (else + (set! (-> obj actor-group) (the-as (pointer actor-group) #f)) + (set! (-> obj actor-group-count) 0) + 0 + ) + ) + ) + (set! (-> obj timeout) (res-lump-float arg0 'timeout)) + (if (not (logtest? (-> obj button-status) (button-status button-status-1))) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh obj)) + ) + (prepare-trigger-event! obj) + (basebutton-method-33 obj) + (idle-state-transition obj) + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior basebutton-init-by-other basebutton ((process-actor entity-actor) + (vec vector) + (quat quaternion) + (notify-actor entity-actor) + (pressed? symbol) + (timeout float) + ) + (reset! self) + (logior! (-> self button-status) (button-status button-status-1)) + (set! (-> self button-id) -1) + (if pressed? + (logior! (-> self button-status) (button-status pressed)) + ) + (set! (-> self notify-actor) notify-actor) + (set! (-> self timeout) timeout) + (if process-actor + (process-entity-set! self process-actor) + ) + (set! (-> self actor-group) (the-as (pointer actor-group) #f)) + (set! (-> self actor-group-count) 0) + (basebutton-method-34 self) + (set! (-> self root trans quad) (-> vec quad)) + (quaternion-copy! (-> self root quat) quat) + (set-vector! (-> self root scale) 1.0 1.0 1.0 1.0) + (prepare-trigger-event! self) + (basebutton-method-33 self) + (idle-state-transition self) + (none) + ) diff --git a/goal_src/jak2/engine/common_objs/blocking-plane.gc b/goal_src/jak2/engine/common_objs/blocking-plane.gc index ec0670b009..bfe8c08e81 100644 --- a/goal_src/jak2/engine/common_objs/blocking-plane.gc +++ b/goal_src/jak2/engine/common_objs/blocking-plane.gc @@ -7,3 +7,237 @@ ;; DECOMP BEGINS +(deftype blocking-plane (process-drawable) + ((root-override collide-shape :offset 128) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xc8 + :flag-assert #x16005000c8 + (:methods + (idle () _type_ :state 20) + (init! (_type_ (inline-array vector) float) none 21) + ) + ) + + +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-blocking-plane" + :extra #f + :info #f + :art-group-name "blocking-plane" + :bounds (new 'static 'vector :w 410009.6) + :texture-level #x6 + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 2) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-2) + ) + +(defstate idle (blocking-plane) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'on) + (cond + ((nonzero? (-> self root-override)) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (-> self root-override backup-collide-as)) + (let ((v0-0 (the-as int (-> self root-override backup-collide-with)))) + (set! (-> prim prim-core collide-with) (the-as collide-spec v0-0)) + v0-0 + ) + ) + ) + (else + (let ((proc-child-ptr-0 (-> self child))) + (while proc-child-ptr-0 + (let ((proc-child-0 (ppointer->process proc-child-ptr-0))) + (set! proc-child-ptr-0 (-> proc-child-ptr-0 0 brother)) + (if (type? proc-child-0 blocking-plane) + (send-event proc-child-0 'on) + ) + ) + ) + ) + (the-as int #f) + ) + ) + ) + ((= evt-type 'off) + (cond + ((nonzero? (-> self root-override)) + (let ((v1-13 (-> self root-override root-prim))) + (set! (-> v1-13 prim-core collide-as) (collide-spec)) + (set! (-> v1-13 prim-core collide-with) (collide-spec)) + ) + 0 + ) + (else + (let ((proc-child-ptr-1 (-> self child))) + (while proc-child-ptr-1 + (let ((proc-child-1 (ppointer->process proc-child-ptr-1))) + (set! proc-child-ptr-1 (-> proc-child-ptr-1 0 brother)) + (if (type? proc-child-1 blocking-plane) + (send-event proc-child-1 'off) + ) + ) + ) + ) + (the-as int #f) + ) + ) + ) + ) + ) + ) + ) + :code (the-as (function none :behavior blocking-plane) sleep-code) + ) + +(defmethod init! blocking-plane ((obj blocking-plane) (vec-pair (inline-array vector)) (height float)) + "TODO - but sets up the plane given 2 vectors and a height" + (let ((s3-0 (-> vec-pair 0)) + (s4-0 (-> vec-pair 1)) + ) + 0.0 + (* 0.5 (vector-vector-distance s3-0 s4-0)) + (let ((s2-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((v1-3 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-3 prim-core collide-as) (collide-spec blocking-plane)) + (set! (-> v1-3 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-3 prim-core action) (collide-action solid)) + (set! (-> v1-3 transform-index) 3) + (set! (-> s2-0 total-prims) (the-as uint 1)) + (set! (-> s2-0 root-prim) v1-3) + ) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (let ((v1-6 (-> s2-0 root-prim))) + (set! (-> s2-0 backup-collide-as) (-> v1-6 prim-core collide-as)) + (set! (-> s2-0 backup-collide-with) (-> v1-6 prim-core collide-with)) + ) + (set! (-> obj root-override) s2-0) + ) + (let ((s1-0 (new 'stack-no-clear 'matrix)) + (s2-1 (-> obj root-override)) + ) + (vector+! (-> s2-1 trans) s3-0 s4-0) + (vector-float*! (-> s2-1 trans) (-> s2-1 trans) 0.5) + (+! (-> s2-1 trans y) (* 0.5 height)) + (vector-! (the-as vector (-> s1-0 vector)) s4-0 s3-0) + (let ((f30-1 (vector-normalize-ret-len! (the-as vector (-> s1-0 vector)) 1.0))) + (set! (-> s2-1 scale x) (* 0.00024414062 f30-1)) + (set! (-> s2-1 scale y) (* 0.00024414062 height)) + (set! (-> s2-1 scale z) 0.0) + (set! (-> s1-0 vector 1 quad) (-> (new 'static 'vector :y 1.0 :w 1.0) quad)) + (vector-cross! (-> s1-0 vector 2) (the-as vector (-> s1-0 vector)) (-> s1-0 vector 1)) + (vector-normalize! (-> s1-0 vector 2) 1.0) + (matrix->quaternion (-> s2-1 quat) s1-0) + (let ((v1-20 (-> obj root-override root-prim local-sphere))) + (set! (-> v1-20 x) 0.0) + (set! (-> v1-20 y) (* 0.00024414062 (* 0.5 height))) + (set! (-> v1-20 z) 0.0) + (let ((f0-17 0.5) + (f1-7 (* f30-1 f30-1)) + (f2-2 height) + ) + (set! (-> v1-20 w) (* f0-17 (sqrtf (+ f1-7 (* f2-2 f2-2))))) + ) + ) + ) + ) + ) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-blocking-plane" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (logior! (-> obj draw status) (draw-control-status no-draw-bounds)) + (transform-post) + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior blocking-plane-init-by-other blocking-plane ((vec-pair (inline-array vector)) (height float)) + "Calls [[blocking-plane::21]] with the given args" + (if (not vec-pair) + (deactivate self) + ) + (init! self vec-pair height) + (go-virtual idle) + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! blocking-plane ((obj blocking-plane) (arg0 entity-actor)) + (let ((s5-0 (new 'process 'path-control obj 'path 0.0 (the-as entity #f) #f)) + (f30-0 (res-lump-float (-> obj entity) 'height :default 122880.0)) + ) + (set! (-> obj path) s5-0) + (if (or (not s5-0) (< (-> s5-0 curve num-cverts) 2)) + (go process-drawable-art-error "bad path") + ) + (logior! (-> s5-0 flags) (path-control-flag display draw-line draw-point draw-text)) + (let ((s4-0 (+ (-> s5-0 curve num-cverts) -1)) + (s3-0 (new 'stack-no-clear 'inline-array 'vector 2)) + ) + (dotimes (v1-12 2) + (set! (-> s3-0 v1-12 quad) (the-as uint128 0)) + ) + (dotimes (s2-0 s4-0) + (get-point-in-path! s5-0 (-> s3-0 0) (the float s2-0) 'interp) + (get-point-in-path! s5-0 (-> s3-0 1) (the float (+ s2-0 1)) 'interp) + (process-spawn blocking-plane s3-0 f30-0 :to obj) + ) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + +(defbehavior blocking-plane-spawn process ((arg0 curve-control) (arg1 (inline-array vector)) (arg2 float)) + (cond + ((and arg1 (or (not arg0) (logtest? (-> arg0 flags) (path-control-flag not-found)))) + (process-spawn blocking-plane arg1 arg2 :to self) + ) + (else + (let ((s4-1 (the int (get-num-segments arg0))) + (s3-0 0) + (s2-0 (new 'stack-no-clear 'inline-array 'vector 2)) + ) + (dotimes (v1-10 2) + (set! (-> s2-0 v1-10 quad) (the-as uint128 0)) + ) + (while (< s3-0 s4-1) + (get-point-in-path! arg0 (-> s2-0 0) (the float s3-0) 'interp) + (get-point-in-path! arg0 (-> s2-0 1) (the float (+ s3-0 1)) 'interp) + (process-spawn blocking-plane s2-0 arg2 :to self) + (+! s3-0 2) + ) + ) + ) + ) + 0 + (none) + ) + +(defbehavior blocking-plane-destroy blocking-plane () + (let ((child-proc-ptr (-> self child))) + (while child-proc-ptr + (let ((child-proc (ppointer->process child-proc-ptr))) + (set! child-proc-ptr (-> child-proc-ptr 0 brother)) + (if (type? child-proc blocking-plane) + (deactivate child-proc) + ) + ) + ) + ) + 0 + (none) + ) diff --git a/goal_src/jak2/engine/common_objs/conveyor.gc b/goal_src/jak2/engine/common_objs/conveyor.gc index 9391fdee39..3674ed8998 100644 --- a/goal_src/jak2/engine/common_objs/conveyor.gc +++ b/goal_src/jak2/engine/common_objs/conveyor.gc @@ -7,3 +7,492 @@ ;; DECOMP BEGINS +(deftype conveyor-section (structure) + ((start vector :inline :offset-assert 0) + (trailing plane :inline :offset-assert 16) + (pull-dir vector :inline :offset-assert 32) + (radial-dir vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + + +(deftype conveyor-section-array (inline-array-class) + ((data conveyor-section :inline :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(set! (-> conveyor-section-array heap-base) (the-as uint 64)) + +(deftype conveyor (process-drawable) + ((speed float :offset-assert 200) + (belt-radius float :offset-assert 204) + (pull-y-threshold float :offset-assert 208) + (speed-mult-array (array float) :offset-assert 212) + (speed-mult-array-len int8 :offset-assert 216) + (sections conveyor-section-array :offset-assert 220) + (leading plane :inline :offset-assert 224) + (collide-bounds sphere :inline :offset-assert 240) + ) + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + (:methods + (idle () _type_ :state 20) + (conveyor-method-21 (_type_) float 21) + (get-art-group (_type_) art-group 22) + (reset-root! (_type_) none 23) + (init! (_type_) none 24) + (set-and-get-ambient-sound! (_type_) ambient-sound 25) + (conveyor-method-26 (_type_ process-focusable) symbol :behavior conveyor 26) + (conveyor-method-27 (_type_) symbol 27) + ) + ) + + +;; WARN: Return type mismatch process-drawable vs conveyor. +(defmethod relocate conveyor ((obj conveyor) (new-addr int)) + (&+! (-> obj sections) new-addr) + (the-as + conveyor + ((the-as (function process-drawable int process-drawable) (find-parent-method conveyor 7)) obj new-addr) + ) + ) + +;; WARN: Return type mismatch symbol vs art-group. +(defmethod get-art-group conveyor ((obj conveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (go process-drawable-art-error "invalid type") + (the-as art-group #f) + ) + +(defmethod reset-root! conveyor ((obj conveyor)) + "Re-initializes the `root` [[trsqv]]" + (set! (-> obj root) (new 'process 'trsqv)) + 0 + (none) + ) + +(defmethod init! conveyor ((obj conveyor)) + "Initializes defaults for things like the `speed` and `belt-radius`" + (local-vars (tag res-tag)) + (set! (-> obj speed) 24576.0) + (set! (-> obj belt-radius) 11878.4) + (set! (-> obj pull-y-threshold) 10240.0) + (set! (-> obj speed-mult-array) #f) + (set! (-> obj speed-mult-array-len) 0) + (let ((entity (-> obj entity))) + (set! tag (new 'static 'res-tag)) + (let ((scale-factor (res-lump-data entity 'scale-factor pointer :tag-ptr (& tag)))) + (when scale-factor + (set! (-> obj speed-mult-array) (the-as (array float) scale-factor)) + (set! (-> obj speed-mult-array-len) (the-as int (-> tag elt-count))) + ) + ) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch object vs ambient-sound. +(defmethod set-and-get-ambient-sound! conveyor ((obj conveyor)) + "So long as [[actor-option::16]] is not set, fetch the [[ambient-sound]] for the [[conveyor]] + and return it as well. Otherwise, set it to `0`" + (let ((actor-options (res-lump-value (-> obj entity) 'options actor-option :time -1000000000.0))) + (the-as + ambient-sound + (cond + ((not (logtest? (actor-option no-amb-sound) actor-options)) + (let ((sound + (the-as object (new 'process 'ambient-sound (static-sound-spec "conveyor" :fo-max 80) (-> obj root trans))) + ) + ) + (set! (-> obj sound) (the-as ambient-sound sound)) + sound + ) + ) + (else + (set! (-> obj sound) (the-as ambient-sound 0)) + 0 + ) + ) + ) + ) + ) + +(defmethod conveyor-method-26 conveyor ((obj conveyor) (proc-focus process-focusable)) + "TODO - conveyor section related, perhaps related to moving the process along the belt?" + (let ((vec (new 'stack-no-clear 'vector))) + (set! (-> vec quad) (-> (get-trans proc-focus 0) quad)) + (set! (-> vec w) 1.0) + (when (>= (vector4-dot vec (the-as vector (-> obj leading))) 0.0) + (let* ((sections (-> obj sections)) + (section-count (-> sections length)) + ) + (dotimes (section-idx section-count) + (let ((section (-> sections data section-idx))) + (when (< (vector4-dot vec (the-as vector (-> section trailing))) 0.0) + (let ((vec-temp (new 'stack-no-clear 'vector))) + (vector-! vec-temp vec (-> section start)) + (when (>= (-> obj belt-radius) (fabs (vector-dot vec-temp (-> section radial-dir)))) + (let* ((f0-7 (vector-dot vec-temp (-> section pull-dir))) + (f1-6 (- (-> vec-temp y) (* (-> section pull-dir y) f0-7))) + ) + (when (>= (-> obj pull-y-threshold) (fabs f1-6)) + (let ((a2-8 (new 'stack-no-clear 'vector))) + (let ((f0-10 (-> obj speed))) + (if (< section-idx (-> obj speed-mult-array-len)) + (set! f0-10 + (* f0-10 (-> (the-as (pointer float) (+ (the-as uint (-> obj speed-mult-array)) (* section-idx 4))))) + ) + ) + (vector-float*! a2-8 (-> section pull-dir) (* f0-10 (-> self clock seconds-per-frame))) + ) + (send-event proc-focus 'push-trans a2-8 3000) + ) + ) + ) + ) + ) + (return #f) + ) + ) + ) + ) + #f + ) + ) + ) + +(defmethod conveyor-method-27 conveyor ((obj conveyor)) + "TODO - collision related, has some dead code as well (previous iteration?)" + (local-vars (a0-10 float) (a2-5 float) (a2-12 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + ) + (init-vf0-vector) + (set! *actor-list-length* 0) + (if #t + (set! *actor-list-length* (spatial-hash-method-36 *actor-hash* (-> obj collide-bounds) *actor-list* 256)) + ) + (when #t + (let ((a0-2 (-> *collide-player-list* alive-list next0))) + *collide-player-list* + (let ((v1-11 (-> a0-2 next0))) + (while (!= a0-2 (-> *collide-player-list* alive-list-end)) + (let* ((a0-3 (-> (the-as connection a0-2) param1)) + (a1-1 (-> (the-as collide-shape a0-3) root-prim)) + ) + (when (logtest? (-> a1-1 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (let ((a1-2 (-> a1-1 prim-core))) + (let ((a2-4 a1-2) + (a3-1 (-> obj collide-bounds)) + ) + (.lvf vf2 (&-> a2-4 world-sphere quad)) + (.lvf vf3 (&-> a3-1 quad)) + ) + (.sub.vf vf1 vf3 vf2) + (.mul.vf vf1 vf1 vf1) + (.add.y.vf vf1 vf1 vf1 :mask #b1) + (.add.z.vf vf1 vf1 vf1 :mask #b1) + (.mov a2-5 vf1) + (let ((f0-0 a2-5) + (f1-1 (+ (-> a1-2 world-sphere w) (-> obj collide-bounds r))) + ) + (b! (>= f0-0 (* f1-1 f1-1)) cfg-8 :delay #f) + ) + ) + (when (< *actor-list-length* 256) + (set! (-> *actor-list* *actor-list-length*) (the-as collide-shape a0-3)) + (set! *actor-list-length* (+ *actor-list-length* 1)) + ) + ) + ) + (label cfg-8) + (set! a0-2 v1-11) + *collide-player-list* + (set! v1-11 (-> v1-11 next0)) + ) + ) + ) + ) + (when #f + (let ((a0-5 (-> *collide-hit-by-player-list* alive-list next0))) + *collide-hit-by-player-list* + (let ((v1-18 (-> a0-5 next0))) + (while (!= a0-5 (-> *collide-hit-by-player-list* alive-list-end)) + (let* ((a0-6 (-> (the-as connection a0-5) param1)) + (a1-13 (-> (the-as collide-shape a0-6) root-prim)) + ) + (when (logtest? (-> a1-13 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (let ((a1-14 (-> a1-13 prim-core))) + (let ((a2-11 a1-14) + (a3-2 (-> obj collide-bounds)) + ) + (.lvf vf2 (&-> a2-11 world-sphere quad)) + (.lvf vf3 (&-> a3-2 quad)) + ) + (.sub.vf vf1 vf3 vf2) + (.mul.vf vf1 vf1 vf1) + (.add.y.vf vf1 vf1 vf1 :mask #b1) + (.add.z.vf vf1 vf1 vf1 :mask #b1) + (.mov a2-12 vf1) + (let ((f0-1 a2-12) + (f1-5 (+ (-> a1-14 world-sphere w) (-> obj collide-bounds r))) + ) + (b! (>= f0-1 (* f1-5 f1-5)) cfg-17 :delay #f) + ) + ) + (when (< *actor-list-length* 256) + (set! (-> *actor-list* *actor-list-length*) (the-as collide-shape a0-6)) + (set! *actor-list-length* (+ *actor-list-length* 1)) + ) + ) + ) + (label cfg-17) + (set! a0-5 v1-18) + *collide-hit-by-player-list* + (set! v1-18 (-> v1-18 next0)) + ) + ) + ) + ) + (dotimes (s5-0 *actor-list-length*) + (let* ((v1-23 (-> *actor-list* s5-0)) + (a0-9 (-> v1-23 root-prim)) + ) + (when (logtest? (-> a0-9 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (.lvf vf1 (&-> obj collide-bounds quad)) + (.lvf vf2 (&-> a0-9 prim-core world-sphere quad)) + (.sub.vf vf3 vf1 vf2) + (.add.w.vf vf4 vf1 vf2 :mask #b1000) + (.mul.vf vf3 vf3 vf3 :mask #b111) + (.mul.w.vf vf4 vf4 vf4 :mask #b1000) + (.mul.x.vf acc vf0 vf3 :mask #b1000) + (.add.mul.y.vf acc vf0 vf3 acc :mask #b1000) + (.add.mul.z.vf vf3 vf0 vf3 acc :mask #b1000) + (.sub.w.vf vf3 vf3 vf4 :mask #b1000) + (let ((f0-2 0.0)) + (.add.w.vf vf3 vf0 vf3 :mask #b1) + (.mov a0-10 vf3) + (let ((s4-0 (-> v1-23 process))) + (b! (< f0-2 a0-10) cfg-27) + (let ((a1-29 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (if a1-29 + (conveyor-method-26 obj a1-29) + ) + ) + ) + ) + (label cfg-27) + 0 + ) + ) + ) + #f + ) + ) + +(defmethod conveyor-method-21 conveyor ((obj conveyor)) + "TODO - quite dense, has to do with the conveyor sections and the path they are associated with" + (local-vars (sv-32 conveyor-section) (sv-48 conveyor-section)) + (let* ((s5-0 (-> obj path)) + (s4-0 (-> s5-0 curve num-cverts)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (let ((s2-0 (new 'process 'conveyor-section-array (+ s4-0 -1)))) + (set! (-> obj sections) s2-0) + (set! (-> obj collide-bounds quad) (the-as uint128 0)) + (get-point-in-path! s5-0 s3-0 0.0 'exact) + (vector+! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) s3-0) + (let ((s1-0 (+ s4-0 -1))) + (set! sv-32 (the-as conveyor-section #f)) + (dotimes (s0-0 s1-0) + (set! sv-48 (-> s2-0 data s0-0)) + (set! (-> sv-48 start quad) (-> s3-0 quad)) + (get-point-in-path! s5-0 s3-0 (the float (+ s0-0 1)) 'exact) + (vector+! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) s3-0) + (vector-! (-> sv-48 pull-dir) s3-0 (-> sv-48 start)) + (vector-normalize! (-> sv-48 pull-dir) 1.0) + (set! (-> sv-48 trailing quad) (-> sv-48 pull-dir quad)) + (set! (-> sv-48 trailing y) 0.0) + (vector-normalize! (-> sv-48 trailing) 1.0) + (set-vector! (-> sv-48 radial-dir) (- (-> sv-48 trailing z)) 0.0 (-> sv-48 trailing x) 1.0) + (set! (-> sv-48 trailing w) (- (vector-dot s3-0 (the-as vector (-> sv-48 trailing))))) + (when (the-as vector sv-32) + (vector+! (&+ (the-as vector sv-32) 16) (&+ (the-as vector sv-32) 16) (the-as vector (-> sv-48 trailing))) + (vector-normalize! (&+ (the-as vector sv-32) 16) 1.0) + (set! (-> sv-32 trailing w) (- (vector-dot (-> sv-48 start) (&+ (the-as vector sv-32) 16)))) + ) + (set! sv-32 sv-48) + sv-32 + ) + ) + ) + (let ((s2-1 (-> obj sections data))) + (set! (-> obj leading quad) (-> s2-1 0 pull-dir quad)) + (set! (-> obj leading y) 0.0) + (vector-normalize! (-> obj leading) 1.0) + (set! (-> obj leading w) (- (vector-dot (the-as vector (-> s2-1 0)) (the-as vector (-> obj leading))))) + ) + (let ((f0-19 (/ 1.0 (the float s4-0))) + (f30-0 0.0) + ) + (vector-float*! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) f0-19) + (dotimes (s2-2 s4-0) + (get-point-in-path! s5-0 s3-0 (the float s2-2) 'exact) + (let ((f0-22 (vector-vector-distance-squared s3-0 (-> obj collide-bounds)))) + (if (< f30-0 f0-22) + (set! f30-0 f0-22) + ) + ) + ) + (set! (-> obj collide-bounds r) (+ (sqrtf f30-0) (-> obj belt-radius))) + ) + ) + ) + +(defstate idle (conveyor) + :virtual #t + :code (the-as (function none :behavior conveyor) sleep-code) + :post (behavior () + (conveyor-method-27 self) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! conveyor ((obj conveyor) (arg0 entity-actor)) + (reset-root! obj) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0 (the-as entity #f) #f)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (if (< (-> obj path curve num-cverts) 2) + (go process-drawable-art-error "bad path") + ) + (init! obj) + (set-and-get-ambient-sound! obj) + (conveyor-method-21 obj) + (ja-post) + (go (method-of-object obj idle)) + (none) + ) + +(deftype strip-conveyor (conveyor) + () + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + ) + + +(let ((a0-19 (new 'static 'skeleton-group + :name "skel-strip-conveyor" + :extra #f + :info #f + :art-group-name "strip-conveyor" + :bounds (new 'static 'vector :w 147456.0) + :version #x7 + ) + ) + ) + (set! (-> a0-19 jgeo) 0) + (set! (-> a0-19 janim) 2) + (set! (-> a0-19 mgeo 0) 1) + (set! (-> a0-19 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-19) + ) + +(defmethod get-art-group strip-conveyor ((obj strip-conveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (art-group-get-by-name *level* "skel-strip-conveyor" (the-as (pointer uint32) #f)) + ) + +(deftype lgconveyor (conveyor) + () + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + ) + + +(let ((a0-23 (new 'static 'skeleton-group + :name "skel-lgconveyor" + :extra #f + :info #f + :art-group-name "lgconveyor" + :bounds (new 'static 'vector :y 12288.0 :w 61440.0) + :longest-edge (meters 24.7389) + :version #x7 + :origin-joint-index 3 + ) + ) + ) + (set! (-> a0-23 jgeo) 0) + (set! (-> a0-23 janim) 3) + (set! (-> a0-23 mgeo 0) 1) + (set! (-> a0-23 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-23) + ) + +(defmethod get-art-group lgconveyor ((obj lgconveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (art-group-get-by-name *level* "skel-lgconveyor" (the-as (pointer uint32) #f)) + ) + +;; WARN: Return type mismatch float vs none. +(defmethod init! lgconveyor ((obj lgconveyor)) + "Initializes defaults for things like the `speed` and `belt-radius`" + (set! (-> obj speed) 30720.0) + (set! (-> obj belt-radius) 11878.4) + (set! (-> obj pull-y-threshold) 10240.0) + (none) + ) + +(defstate idle (lgconveyor) + :virtual #t + :code (behavior () + (until #f + (ja-no-eval :group! (-> self draw art-group data 3) + :num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (behavior () + (let ((t9-0 (-> (method-of-type conveyor idle) post))) + (if t9-0 + ((the-as (function none) t9-0)) + ) + ) + (ja-post) + (none) + ) + ) diff --git a/goal_src/jak2/engine/common_objs/elevator.gc b/goal_src/jak2/engine/common_objs/elevator.gc index f393096fd5..b7da9c4d47 100644 --- a/goal_src/jak2/engine/common_objs/elevator.gc +++ b/goal_src/jak2/engine/common_objs/elevator.gc @@ -5,5 +5,885 @@ ;; name in dgo: elevator ;; dgos: GAME, COMMON +;; +++elevator-flags +(defenum elevator-flags + :type uint64 + :bitfield #t + (elevator-flags-0) + (elevator-flags-1) + (elevator-flags-2) + (elevator-flags-3) + (elevator-flags-4) + (prevent-jump) + (elevator-flags-6) + (elevator-flags-7) + ) +;; ---elevator-flags + + +;; +++elevator-status +(defenum elevator-status + :type uint64 + :bitfield #t + (elevator-status-0) + (elevator-status-1) + (moving) + ) +;; ---elevator-status + + ;; DECOMP BEGINS +(deftype elevator-params (structure) + ((xz-threshold float :offset-assert 0) + (y-threshold float :offset-assert 4) + (start-pos float :offset-assert 8) + (move-rate float :offset-assert 12) + (flags elevator-flags :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + + +(deftype path-step (structure) + ((next-pos float :offset-assert 0) + (dist float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + + +(deftype path-step-inline-array (inline-array-class) + ((data path-step :inline :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(set! (-> path-step-inline-array heap-base) (the-as uint 16)) + +(deftype elevator (base-plat) + ((params elevator-params :inline :offset-assert 272) + (path-seq path-step-inline-array :offset-assert 296) + (path-dest float :offset-assert 300) + (bottom-top float 2 :offset-assert 304) + (move-pos float 2 :offset-assert 312) + (move-dist float :offset-assert 320) + (path-pos float :offset-assert 324) + (path-eased-pos float :offset-assert 328) + (ride-timer uint64 :offset-assert 336) + (sticky-player-last-ride-time time-frame :offset-assert 344) + (elevator-status elevator-status :offset-assert 352) + (on-activate basic :offset-assert 360) + (on-deactivate basic :offset-assert 364) + ) + :heap-base #xf0 + :method-count-assert 49 + :size-assert #x170 + :flag-assert #x3100f00170 + (:methods + (dormant () _type_ :state 34) + (waiting () _type_ :state 35) + (running () _type_ :state 36) + (arrived () _type_ :state 37) + (elevator-method-38 (_type_) none 38) + (calc-dist-between-points! (_type_ int int) none 39) + (elevator-method-40 (_type_) object 40) + (init-defaults! (_type_) none 41) + (clear-ambient-sound! (_type_) none 42) + (elevator-method-43 (_type_ vector float float) symbol 43) + (elevator-method-44 (_type_) symbol 44) + (elevator-method-45 (_type_) symbol 45) + (move-to-next-point! (_type_) none 46) + (find-closest-point-in-path! (_type_ vector path-step symbol symbol) symbol 47) + (elevator-method-48 (_type_) none 48) + ) + ) + + +(defmethod elevator-method-43 elevator ((obj elevator) (arg0 vector) (arg1 float) (arg2 float)) + #f + ) + +(defmethod elevator-method-48 elevator ((obj elevator)) + "TODO - collision related" + (let ((target *target*)) + (when target + (let ((s4-0 (-> target control unknown-sphere-array00 0)) + (s5-0 (new 'stack-no-clear 'collide-query)) + ) + (set! (-> s5-0 start-pos quad) (-> s4-0 prim-core world-sphere quad)) + (set! (-> s5-0 start-pos y) (+ 8192.0 (-> s5-0 start-pos y))) + (set! (-> s5-0 start-pos w) 1.0) + (vector-reset! (-> s5-0 move-dist)) + (set! (-> s5-0 move-dist y) -90112.0) + (let ((collide-query s5-0)) + (set! (-> collide-query radius) (-> s4-0 local-sphere w)) + (set! (-> collide-query collide-with) (collide-spec hit-by-others-list pusher)) + (set! (-> collide-query ignore-process0) target) + (set! (-> collide-query ignore-process1) #f) + (set! (-> collide-query ignore-pat) (-> target control pat-ignore-mask)) + (set! (-> collide-query action-mask) (collide-action solid)) + ) + (let ((f0-5 (fill-and-probe-using-line-sphere *collide-cache* s5-0))) + (when (< 0.0 f0-5) + (vector-float*! (-> s5-0 move-dist) (-> s5-0 move-dist) f0-5) + (vector+! (-> s5-0 move-dist) (-> s5-0 move-dist) (-> s5-0 start-pos)) + (vector-! (-> s5-0 move-dist) (-> s5-0 move-dist) (the-as vector (-> s4-0 prim-core))) + (move-by-vector! (-> target control) (-> s5-0 move-dist)) + ) + ) + ) + ) + ) + (none) + ) + +(defmethod init-defaults! elevator ((obj elevator)) + "Initializes default settings related to the [[elevator]]: + - `elevator-xz-threshold` + - `elevator-y-threshold` + - `elevator-start-pos` + - `elevator-move-rate` + - `elevator-flags`" + (let ((entity (-> obj entity))) + (set! (-> obj params xz-threshold) ((method-of-object entity get-property-value-float) + entity + 'elevator-xz-threshold + 'interp + -1000000000.0 + 81920.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params y-threshold) ((method-of-object entity get-property-value-float) + entity + 'elevator-y-threshold + 'interp + -1000000000.0 + 20480.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params start-pos) ((method-of-object entity get-property-value-float) + entity + 'elevator-start-pos + 'interp + -1000000000.0 + 0.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params move-rate) ((method-of-object entity get-property-value-float) + entity + 'elevator-move-rate + 'interp + -1000000000.0 + 25600.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params flags) (the-as elevator-flags ((method-of-object entity get-property-value) + entity + 'elevator-flags + 'interp + -1000000000.0 + (the-as uint128 1) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) + ) + 0 + (none) + ) + +(defun ease-value-in-out ((value float) (step-amount float)) + "TODO - the math in this function is full of duplication and isn't totally clear + but if the name is to be believed, it's to slow a values grow at the beginning and end of it's range + which is obviously useful for an elevator." + (let* ((step step-amount) + (f4-0 (- 1.0 step-amount)) + (f3-0 (/ step (- 1.0 f4-0))) + (f2-1 (* step step)) + (f1-6 (+ (* 2.0 step (- f4-0 step)) f2-1)) + (f1-7 (+ (* (- 1.0 f4-0) (- 1.0 f4-0) f3-0) f1-6)) + ) + (/ (cond + ((< value step) + (* value value) + ) + ((< value f4-0) + (+ (* 2.0 step (- value step)) f2-1) + ) + (else + (let ((f0-7 (- 1.0 value))) + (- f1-7 (* f0-7 f0-7 f3-0)) + ) + ) + ) + f1-7 + ) + ) + ) + +;; WARN: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 18] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 119] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 209] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 222] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 236] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 246] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 257] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 264] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 276] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 301] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 326] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 334] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 337] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 174] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 40] +;; WARN: disable def twice: 11. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +(defbehavior elevator-event elevator ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as + object + (cond + ((= evt-type 'status?) + (and (= (the float (/ (the-as int (-> event param 0)) 8)) (-> self move-pos 0)) + (= (the float (/ (the-as int (-> event param 1)) 8)) (-> self move-pos 1)) + ) + ) + ((= evt-type 'ridden) + (let ((proc-focus (handle->process (-> (the-as focus (-> event param 0)) handle)))) + (if (= (-> proc-focus type) target) + (set! (-> self sticky-player-last-ride-time) (-> self clock frame-counter)) + ) + ) + #t + ) + ((= evt-type 'use-camera) + (if (-> event param 0) + (set-setting! 'entity-name (-> event param 0) 0 0) + (remove-setting! 'entity-name) + ) + ) + ((= evt-type 'move-to) + (when (and (-> self next-state) (let ((next-state-0 (-> self next-state name))) + (or (= next-state-0 'waiting) (= next-state-0 'arrived)) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (cond + ((not (logtest? (-> event param 0) 7)) + (let ((gp-0 (the-as number (-> event param 0)))) + (set! (-> self move-pos 1) (if (type? (the-as uint gp-0) float) + (the-as float gp-0) + ) + ) + ) + ) + (else + (case (-> event param 0) + (('quote 'bottom) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + (('quote 'top) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ) + ) + ) + (go-virtual running) + ) + ) + ((= evt-type 'jump-to) + (cond + ((not (logtest? (-> event param 0) 7)) + (let ((gp-1 (the-as number (-> event param 0)))) + (set! (-> self move-pos 1) (if (type? (the-as uint gp-1) float) + (the-as float gp-1) + ) + ) + ) + ) + (else + (case (-> event param 0) + (('quote 'bottom) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + (('quote 'top) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (get-point-in-path! (-> self path) (-> self basetrans) (-> self move-pos 0) 'interp) + (go-virtual waiting) + ) + ((= evt-type 'trigger) + (when (and (-> self next-state) (let ((next-state-1 (-> self next-state name))) + (or (= next-state-1 'waiting) (= next-state-1 'arrived)) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (cond + ((= (-> self move-pos 0) (-> self bottom-top 0)) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ((= (-> self move-pos 0) (-> self bottom-top 1)) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + ) + (go-virtual running) + ) + ) + ((= evt-type 'query) + (case (-> event param 0) + (('waiting?) + (and (-> self next-state) (= (-> self next-state name) 'waiting)) + ) + (('arrived?) + (and (-> self next-state) (let ((v1-61 (-> self next-state name))) + (or (= v1-61 'arrived) (= v1-61 'waiting)) + ) + ) + ) + (('running?) + (and (-> self next-state) (= (-> self next-state name) 'running)) + ) + (('path-pos?) + (+ (-> self move-pos 0) (* (-> self path-pos) (- (-> self move-pos 1) (-> self move-pos 0)))) + ) + (('player-standing-on?) + (= (-> self sticky-player-last-ride-time) (-> self clock frame-counter)) + ) + (('point-inside-shaft?) + (elevator-method-43 self (the-as vector (-> event param 1)) (-> self bottom-top 1) (-> self bottom-top 0)) + ) + (('going-down?) + (< (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 1) 'interp) y) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 0) 'interp) y) + ) + ) + (('going-up?) + (< (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 0) 'interp) y) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 1) 'interp) y) + ) + ) + ) + ) + ((= evt-type 'go-dormant) + (go-virtual dormant) + ) + (else + (plat-event proc arg1 event-type event) + ) + ) + ) + ) + ) + +(defmethod find-closest-point-in-path! elevator ((obj elevator) (arg0 vector) (arg1 path-step) (arg2 symbol) (arg3 symbol)) + "Finds and sets the provided [[path-step]]'s `next-pos` field to the vertex index in the path which is closest to + the provided [[vector]] + + @param vec The point at which distance calculations are based off + @param! next-step If a point is found, `next-pos` will be set to the correct point + @param arg2 TODO + @param arg3 TODO + @returns [[#t]] if a point in the path was found" + (local-vars (path-point vector)) + (let ((elev-params (-> obj params)) + (smallest-dist 0.0) + (point-idx-tracker -1.0) + ) + (dotimes (path-vertex-idx (-> obj path curve num-cverts)) + (set! path-point + (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-vertex-idx) 'interp) + ) + (when (and (or (not arg2) (< (vector-vector-xz-distance path-point arg0) (-> elev-params xz-threshold))) + (or (not arg3) + (< (fabs (- (-> path-point y) (-> arg0 y))) (-> elev-params y-threshold)) + (and (= path-vertex-idx (the int (-> obj bottom-top 0))) (< (-> arg0 y) (-> path-point y))) + (and (= path-vertex-idx (the int (-> obj bottom-top 1))) (< (-> path-point y) (-> arg0 y))) + ) + ) + (let* ((t9-2 vector-vector-distance) + (a1-3 arg0) + (dist (t9-2 path-point a1-3)) + ) + (when (or (= point-idx-tracker -1.0) (< dist smallest-dist)) + (set! smallest-dist dist) + (set! point-idx-tracker (the float path-vertex-idx)) + ) + ) + ) + ) + (when (!= point-idx-tracker -1.0) + (set! (-> arg1 next-pos) point-idx-tracker) + #t + ) + ) + ) + +;; WARN: Return type mismatch object vs symbol. +(defmethod elevator-method-44 elevator ((obj elevator)) + (let* ((target-temp *target*) + (target (if (type? target-temp process-focusable) + target-temp + ) + ) + ) + (the-as + symbol + (and target (elevator-method-43 obj (get-trans target 0) (-> obj move-pos 0) (-> obj move-pos 1))) + ) + ) + ) + +(defmethod elevator-method-45 elevator ((obj elevator)) + "@returns Stub, or always returns [[#t]]" + #t + ) + +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +(defmethod move-to-next-point! elevator ((obj elevator)) + "If the [[*target*]] is in a valid state and there is a point to transition to in the elevator's path + do so. + @see [[elevator::47]]" + (local-vars (zero float)) + (let ((target *target*)) + (when (and target + (zero? (logand (focus-status dead inactive in-air grabbed edge-grab pole pilot-riding pilot teleporting) + (-> target focus-status) + ) + ) + ) + (set! zero (the-as float 0.0)) + (when (and (find-closest-point-in-path! obj (get-trans target 0) (new 'stack-no-clear 'path-step) #t #t) + (!= (-> obj move-pos 1) zero) + ) + (set! (-> obj move-pos 0) (-> obj move-pos 1)) + (set! (-> obj move-pos 1) zero) + (logior! (-> obj elevator-status) (elevator-status moving)) + (go (method-of-object obj running)) + ) + ) + ) + 0 + (none) + ) + +(defbehavior move-post elevator () + (when (nonzero? (-> self sound)) + (let ((f0-3 (sqrtf (sin-rad (* 3.1415925 (-> self path-pos)))))) + (update-vol! (-> self sound) f0-3) + ) + (update-trans! (-> self sound) (-> self root-override trans)) + (update! (-> self sound)) + ) + (plat-post) + (none) + ) + +(defstate dormant (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (go-virtual waiting) + ) + (('bonk) + #f + ) + (else + (plat-event proc arg1 event-type event) + ) + ) + ) + :trans (the-as (function none :behavior elevator) plat-trans) + :code (the-as (function none :behavior elevator) sleep-code) + :post (the-as (function none :behavior elevator) plat-post) + ) + +(defstate waiting (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('ridden) + (if (elevator-method-45 self) + (logior! (-> self elevator-status) (elevator-status elevator-status-0)) + ) + (elevator-event proc arg1 event-type event) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (logclear! (-> self elevator-status) (elevator-status elevator-status-0 moving)) + (logior! (-> self mask) (process-mask actor-pause)) + (if (nonzero? (-> self sound)) + (update-vol! (-> self sound) 0.0) + ) + (none) + ) + :trans (behavior () + (plat-trans) + (when (not (logtest? (-> self elevator-status) (elevator-status elevator-status-0))) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (-> self params) + (if (and (logtest? (-> self params flags) (elevator-flags elevator-flags-0)) + (zero? (logand (-> self params flags) (elevator-flags elevator-flags-3))) + ) + (move-to-next-point! self) + ) + ) + (when (and (not (logtest? (-> self params flags) (elevator-flags elevator-flags-3))) + (>= (- (-> self clock frame-counter) (the-as int (-> self ride-timer))) (seconds 1)) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (set! (-> self move-pos 1) (-> self path-seq data (the int (-> self move-pos 1)) next-pos)) + (go-virtual running) + ) + (none) + ) + :code (the-as (function none :behavior elevator) sleep-code) + :post (behavior () + (logclear! (-> self elevator-status) (elevator-status elevator-status-0)) + (debug-draw (-> self path)) + (plat-post) + (none) + ) + ) + +(defstate running (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('running?) + #t + ) + (('player-ridden?) + (logtest? (-> self elevator-status) (elevator-status elevator-status-0)) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (if (not (logtest? (-> self params flags) (elevator-flags elevator-flags-7))) + (process-entity-status! self (entity-perm-status no-kill) #t) + ) + (logclear! (-> self elevator-status) (elevator-status elevator-status-1)) + (when (logtest? (-> self params flags) (elevator-flags elevator-flags-2)) + (logclear! (-> self params flags) (elevator-flags elevator-flags-2)) + (logior! (-> self params flags) (elevator-flags elevator-flags-0)) + ) + (set! (-> self move-dist) 0.0) + (let ((v1-13 (the int (-> self move-pos 0))) + (a0-3 (the int (-> self move-pos 1))) + (a1-1 0) + ) + (while (let ((a2-3 (abs (- a0-3 v1-13)))) + (< a1-1 a2-3) + ) + (+! (-> self move-dist) (-> self path-seq data (+ (min v1-13 a0-3) a1-1) dist)) + (+! a1-1 1) + ) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (set-setting! 'board #f 0 0) + (let ((gp-0 (-> self on-activate))) + (if gp-0 + (eval! + (new + 'stack + 'script-context + (the-as basic (* (the int (-> self move-pos 0)) 8)) + self + (-> self root-override trans) + ) + (the-as pair gp-0) + ) + ) + ) + (set! (-> self path-pos) 0.0) + (if (nonzero? (-> self sound)) + (update-vol! (-> self sound) 0.0) + ) + (when (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (set-setting! 'jump #f 0 0) + (apply-settings *setting-control*) + ) + (none) + ) + :exit (behavior () + (if (not (logtest? (-> self params flags) (elevator-flags elevator-flags-7))) + (process-entity-status! self (entity-perm-status no-kill) #f) + ) + (remove-setting! 'board) + (if (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (remove-setting! 'jump) + ) + (none) + ) + :trans (behavior () + (if (and (not (logtest? (-> self elevator-status) (elevator-status elevator-status-1))) + (= (-> self path-pos) 1.0) + ) + (go-virtual arrived) + ) + (if (elevator-method-44 self) + (set! (-> self path-dest) 0.0) + (set! (-> self path-dest) 1.0) + ) + (if (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (elevator-method-48 self) + ) + (plat-trans) + (none) + ) + :code (behavior () + (logior! (-> self elevator-status) (elevator-status elevator-status-1)) + (until #f + (suspend) + (if (= (-> self path-pos) 1.0) + (logclear! (-> self elevator-status) (elevator-status elevator-status-1)) + ) + ) + #f + (none) + ) + :post (behavior () + (when (logtest? (-> self elevator-status) (elevator-status elevator-status-1)) + (seek! + (-> self path-pos) + (-> self path-dest) + (* (/ (-> self params move-rate) (-> self move-dist)) (-> self clock seconds-per-frame)) + ) + (let* ((f30-0 (-> self move-pos 0)) + (f28-0 (-> self move-pos 1)) + (f0-9 (+ f30-0 (* (ease-value-in-out (-> self path-pos) 0.08) (- f28-0 f30-0)))) + ) + (get-point-in-path! (-> self path) (-> self basetrans) f0-9 'interp) + ) + ) + (move-post) + (none) + ) + ) + +(defstate arrived (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('ridden) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (elevator-event proc arg1 event-type event) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (if (not (-> *setting-control* user-current jump)) + (remove-setting! 'jump) + ) + (let ((gp-0 (-> self on-deactivate))) + (if gp-0 + (eval! + (new + 'stack + 'script-context + (the-as basic (* (the int (-> self move-pos 1)) 8)) + self + (-> self root-override trans) + ) + (the-as pair gp-0) + ) + ) + ) + (none) + ) + :trans (behavior () + (if (and (< (the-as int (- (-> self ride-timer) (the-as uint (-> self sticky-player-last-ride-time)))) 600) + (begin *target* *target*) + (logtest? (-> *target* focus-status) (focus-status in-air)) + ) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + ) + (when (or (logtest? (-> self elevator-status) (elevator-status moving)) + (>= (- (-> self clock frame-counter) (the-as int (-> self ride-timer))) (seconds 0.5)) + ) + (cond + ((and (logtest? (-> self params flags) (elevator-flags elevator-flags-1)) + (!= (-> self move-pos 1) (-> self params start-pos)) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (set! (-> self move-pos 1) (-> self params start-pos)) + (go-virtual running) + ) + (else + (go-virtual waiting) + ) + ) + ) + (plat-trans) + (none) + ) + :code (the-as (function none :behavior elevator) sleep-code) + :post (the-as (function none :behavior elevator) plat-post) + ) + +(defmethod calc-dist-between-points! elevator ((obj elevator) (path-point-x int) (path-point-y int)) + "Calculates the distance between two points in the elevator's path. + + @param path-point-x The index of the first point in the distance calculation, and where `next-pos` and `dist` are stored in the `path-seq` array + @param path-point-y The second point in the distance calculation" + (set! (-> obj path-seq data path-point-x next-pos) (the float path-point-y)) + (let ((point-x (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-x) 'interp)) + (point-y (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-y) 'interp)) + ) + (set! (-> obj path-seq data path-point-x dist) (vector-vector-distance point-x point-y)) + ) + 0 + (none) + ) + +(defmethod clear-ambient-sound! elevator ((obj elevator)) + "Might be a virtual function, but clears the object's [[ambient-sound]]" + (set! (-> obj sound) (the-as ambient-sound 0)) + 0 + (none) + ) + +(defmethod base-plat-method-33 elevator ((obj elevator)) + 0 + (none) + ) + +;; WARN: Return type mismatch base-plat vs elevator. +(defmethod relocate elevator ((obj elevator) (arg0 int)) + (if (nonzero? (-> obj path-seq)) + (&+! (-> obj path-seq) arg0) + ) + (the-as elevator ((the-as (function base-plat int base-plat) (find-parent-method elevator 7)) obj arg0)) + ) + +(defmethod elevator-method-40 elevator ((obj elevator)) + "TODO - need to figure out some flags to be confident about this" + (if (logtest? (-> obj params flags) (elevator-flags elevator-flags-6)) + (go (method-of-object obj arrived)) + (go (method-of-object obj waiting)) + ) + ) + +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! elevator ((obj elevator) (entity entity-actor)) + (local-vars (sv-32 float) (sv-36 path-control) (sv-40 target)) + (base-plat-method-31 obj) + (process-drawable-from-entity! obj entity) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (stop-bouncing! obj) + (set! (-> obj elevator-status) (elevator-status)) + (collide-shape-method-46 (-> obj root-override)) + (base-plat-method-32 obj) + (init-defaults! obj) + (set! (-> obj on-activate) (res-lump-struct (-> obj entity) 'on-activate basic)) + (set! (-> obj on-deactivate) (res-lump-struct (-> obj entity) 'on-deactivate basic)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0 entity #f)) + (if (logtest? (-> obj path flags) (path-control-flag not-found)) + (go process-drawable-art-error "error in path") + ) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (let ((num-path-points (-> obj path curve num-cverts)) + (s4-1 0) + (f30-0 0.0) + (f28-0 0.0) + ) + (set! (-> obj path-seq) (new 'process 'path-step-inline-array num-path-points)) + (dotimes (path-point-idx num-path-points) + (calc-dist-between-points! obj path-point-idx (mod (+ path-point-idx 1) num-path-points)) + (let ((v1-31 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-idx) 'interp))) + (when (or (not (logtest? s4-1 1)) (< (-> v1-31 y) f28-0)) + (set! (-> obj bottom-top 0) (the float path-point-idx)) + (set! f28-0 (-> v1-31 y)) + (set! s4-1 (logior s4-1 1)) + ) + (when (or (not (logtest? s4-1 2)) (< f30-0 (-> v1-31 y))) + (set! (-> obj bottom-top 1) (the float path-point-idx)) + (set! f30-0 (-> v1-31 y)) + (set! s4-1 (logior s4-1 2)) + ) + ) + ) + ) + (set! sv-32 (the-as float 0.0)) + (set! sv-36 (-> obj path)) + (let ((s5-2 *target*)) + (set! sv-40 (if (type? s5-2 process-focusable) + s5-2 + ) + ) + ) + (if (not (and sv-40 + (logtest? (-> obj params flags) (elevator-flags elevator-flags-4)) + (find-closest-point-in-path! obj (get-trans sv-40 0) (the-as path-step (& sv-32)) #f #t) + ) + ) + (set! sv-32 (-> obj params start-pos)) + ) + (set! (-> obj move-pos 0) sv-32) + (set! (-> obj move-pos 1) sv-32) + (get-point-in-path! sv-36 (-> obj basetrans) sv-32 'interp) + (set! (-> obj root-override pause-adjust-distance) + (+ 122880.0 (-> obj params xz-threshold) (total-distance (-> obj path))) + ) + (clear-ambient-sound! obj) + (base-plat-method-33 obj) + (elevator-method-40 obj) + (none) + ) diff --git a/goal_src/jak2/engine/common_objs/plat.gc b/goal_src/jak2/engine/common_objs/plat.gc index 1f07c5b465..98c7ca4c77 100644 --- a/goal_src/jak2/engine/common_objs/plat.gc +++ b/goal_src/jak2/engine/common_objs/plat.gc @@ -7,3 +7,358 @@ ;; DECOMP BEGINS +(deftype plat (base-plat) + ((path-pos float :offset-assert 272) + (sound-id sound-id :offset-assert 276) + (sync sync-eased :inline :offset-assert 280) + ) + :heap-base #xd0 + :method-count-assert 37 + :size-assert #x144 + :flag-assert #x2500d00144 + (:methods + (plat-idle () _type_ :state 34) + (plat-path-active () _type_ :state 35) + (plat-path-sync (_type_) object 36) + ) + ) + + +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-plat" + :extra #f + :info #f + :art-group-name "plat" + :bounds (new 'static 'vector :y -2048.0 :w 12288.0) + :max-lod 2 + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 4) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 81920.0) + (set! (-> a0-2 mgeo 1) 2) + (set! (-> a0-2 lod-dist 1) 163840.0) + (set! (-> a0-2 mgeo 2) 3) + (set! (-> a0-2 lod-dist 2) 4095996000.0) + (add-to-loading-level a0-2) + ) + +(defmethod get-art-group plat ((obj plat)) + "@returns The associated [[art-group]]" + (art-group-get-by-name *level* "skel-plat" (the-as (pointer uint32) #f)) + ) + +(defmethod base-plat-method-31 plat ((obj plat)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec pusher)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid rideable)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 13107.2) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + ((method-of-object collision-shape collide-shape-method-54)) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root-override) (the-as collide-shape-moving collision-shape)) + ) + 0 + (none) + ) + +(defmethod base-plat-method-33 plat ((obj plat)) + 0 + (none) + ) + +(defmethod base-plat-method-32 plat ((obj plat)) + 0 + (none) + ) + +(defmethod plat-path-sync plat ((obj plat)) + "If the `sync` period is greater than `0` then transition the state to [[plat::35]] + otherwise, [[plat::34]] + + @see [[sync-eased]]" + (cond + ((logtest? (-> obj path flags) (path-control-flag not-found)) + (go (method-of-object obj plat-idle)) + ) + ((> (-> obj sync period) 0) + (go (method-of-object obj plat-path-active)) + ) + (else + (go (method-of-object obj plat-idle)) + ) + ) + ) + +(defstate plat-idle (plat) + :virtual #t + :event (the-as (function process int symbol event-message-block object :behavior plat) plat-event) + :trans (behavior () + (execute-effects self) + (none) + ) + :code (behavior () + (plat-trans) + (rider-post) + (suspend) + (until #f + (when (not (-> self bouncing)) + (plat-trans) + (rider-post) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + ) + (while (-> self bouncing) + (plat-trans) + (rider-post) + (suspend) + ) + ) + #f + (none) + ) + ) + +(defstate plat-path-active (plat) + :virtual #t + :event (the-as (function process int symbol event-message-block object :behavior plat) plat-event) + :exit (behavior () + (sound-stop (-> self sound-id)) + (none) + ) + :trans (behavior () + (set! (-> self path-pos) (get-norm! (-> self sync) 0)) + (get-point-at-percent-along-path! (-> self path) (-> self basetrans) (-> self path-pos) 'interp) + (if (< (vector-vector-distance (-> self root-override trans) (ear-trans 0)) 81920.0) + (sound-play "eco-plat-hover" :id (-> self sound-id) :position (-> self root-override trans)) + ) + (plat-trans) + (none) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior plat) plat-post) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! plat ((obj plat) (entity entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (base-plat-method-31 obj) + (process-drawable-from-entity! obj entity) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (collide-shape-method-46 (-> obj root-override)) + (stop-bouncing! obj) + (base-plat-method-32 obj) + (set! (-> obj fact) + (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-eco-pill-green-inc)) + ) + (let ((params (new 'stack-no-clear 'sync-info-params))) + (let ((v1-15 0)) + (if (not (logtest? (-> obj fact options) (actor-option loop))) + (set! v1-15 (logior v1-15 1)) + ) + (set! (-> params sync-type) (the-as basic 'sync-eased)) + (set! (-> params sync-flags) (the-as sync-flags v1-15)) + ) + (set! (-> params period) (the-as uint 1200)) + (set! (-> params entity) entity) + (set! (-> params percent) 0.0) + (set! (-> params ease-in) 0.15) + (set! (-> params ease-out) 0.15) + (set! (-> params pause-in) 0.0) + (set! (-> params pause-out) 0.0) + (initialize! (-> obj sync) params) + ) + (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj sound-id) (new-sound-id)) + (cond + ((logtest? (-> obj path flags) (path-control-flag not-found)) + (set! (-> obj path-pos) 0.0) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + ((> (-> obj sync period) 0) + (set! (-> obj path-pos) (get-norm! (-> obj sync) 0)) + (get-point-at-percent-along-path! (-> obj path) (-> obj root-override trans) (-> obj path-pos) 'interp) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + (else + (set! (-> obj path-pos) 0.0) + (get-point-at-percent-along-path! (-> obj path) (-> obj root-override trans) (-> obj path-pos) 'interp) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + ) + (none) + ) + +(deftype drop-plat (base-plat) + ((art-name string :offset-assert 272) + (anim spool-anim :offset-assert 276) + (break-anim-name string :offset-assert 280) + (safe-time time-frame :offset-assert 288) + (hit-point vector :inline :offset-assert 304) + ) + :heap-base #xc0 + :method-count-assert 36 + :size-assert #x140 + :flag-assert #x2400c00140 + (:methods + (idle () _type_ :state 34) + (fall (symbol) _type_ :state 35) + ) + ) + + +;; WARN: Return type mismatch base-plat vs drop-plat. +(defmethod relocate drop-plat ((obj drop-plat) (arg0 int)) + (if (nonzero? (-> obj break-anim-name)) + (&+! (-> obj break-anim-name) arg0) + ) + (let ((v1-5 (-> obj anim buffer))) + (if (and (>= (the-as int v1-5) (-> *kernel-context* relocating-min)) + (< (the-as int v1-5) (-> *kernel-context* relocating-max)) + ) + (&+! (-> obj anim buffer) arg0) + ) + ) + (the-as drop-plat ((method-of-type base-plat relocate) obj arg0)) + ) + +(defstate idle (drop-plat) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack 'bonk) + (let* ((proc-temp proc) + (proc-focus (if (type? proc-temp process-focusable) + (the-as process-focusable proc-temp) + ) + ) + ) + (cond + ((and proc-focus (logtest? (-> proc-focus focus-status) (focus-status edge-grab))) + (set! (-> self safe-time) (+ (-> self clock frame-counter) (seconds 0.2))) + (return (the-as object #f)) + ) + ((< (- (-> self clock frame-counter) (-> self safe-time)) (seconds 0.05)) + (return (the-as object #f)) + ) + ) + (set! (-> self hit-point quad) (-> self root-override trans quad)) + (set! proc-focus (if (type? proc process-focusable) + (the-as process-focusable proc) + ) + ) + (set! (-> self hit-point quad) (-> (get-trans proc-focus 0) quad)) + ) + (if (zero? (-> self bounce-time)) + (start-bouncing! self) + ) + #f + ) + ) + ) + :trans (the-as (function none :behavior drop-plat) plat-trans) + :code (behavior () + (gui-control-method-9 + *gui-control* + self + (gui-channel art-load) + (gui-action queue) + (-> self anim name) + -99.0 + 0 + ) + (until #f + (when (not (-> self bouncing)) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + ) + (while (-> self bouncing) + (suspend) + ) + (go-virtual fall #f) + ) + #f + (none) + ) + :post (the-as (function none :behavior drop-plat) plat-post) + ) + +(defstate fall (drop-plat) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('edge-grabbed) + (if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.5)) + (send-event proc 'end-mode) + ) + ) + (('die) + (go-virtual fall #t) + ) + ) + ) + :enter (behavior ((arg0 symbol)) + (set! (-> self state-time) (-> self clock frame-counter)) + (none) + ) + :exit (behavior () + (ja-abort-spooled-anim (-> self anim) (the-as art-joint-anim #f) -1) + (none) + ) + :trans (the-as (function none :behavior drop-plat) rider-trans) + :code (behavior ((arg0 symbol)) + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (collide-spec)) + (set! (-> v1-1 prim-core collide-with) (collide-spec)) + ) + 0 + (if (not arg0) + (ja-play-spooled-anim + (-> self anim) + (ja-group) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + ) + (ja-channel-set! 0) + (suspend) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + :post (the-as (function none :behavior drop-plat) rider-post) + ) diff --git a/goal_src/jak2/engine/debug/debug-h.gc b/goal_src/jak2/engine/debug/debug-h.gc index d9edc437cc..7a1ed713b7 100644 --- a/goal_src/jak2/engine/debug/debug-h.gc +++ b/goal_src/jak2/engine/debug/debug-h.gc @@ -13,7 +13,6 @@ ;; NOTE - for editable (define-extern add-debug-x (function symbol bucket-id vector rgba symbol)) (define-extern add-debug-vector (function symbol bucket-id vector vector meters rgba symbol)) -(define-extern add-debug-bound (function int transform int rgba rgba int none)) (define-extern add-debug-line2d (function symbol bucket-id vector vector vector symbol)) (define-extern add-debug-text-3d (function symbol bucket-id string vector font-color vector2h symbol)) diff --git a/goal_src/jak2/engine/debug/debug.gc b/goal_src/jak2/engine/debug/debug.gc index 25965e4b20..1ff0cb3b87 100644 --- a/goal_src/jak2/engine/debug/debug.gc +++ b/goal_src/jak2/engine/debug/debug.gc @@ -194,14 +194,8 @@ #f ) -;;(define-extern debug-line-clip? (function vector vector vector vector symbol)) -;; TODO: doesn't actually do any clipping. -(defun debug-line-clip? ((arg0 vector) (arg1 vector) (arg2 vector) (arg3 vector)) - (vector-copy! arg0 arg2) - (vector-copy! arg1 arg3) - #t - ) +(def-mips2c debug-line-clip? (function vector vector vector vector symbol)) (defun-debug internal-draw-debug-line ((bucket bucket-id) (start vector) (end vector) (start-color rgba) (mode symbol) (end-color rgba)) "Draw a debug line from p0 to p1. Mode can be: @@ -544,23 +538,6 @@ :flag-assert #x90000003c ) -(defmethod inspect debug-line ((obj debug-line)) - (when (not obj) - (set! obj obj) - (goto cfg-4) - ) - (format #t "[~8x] ~A~%" obj 'debug-line) - (format #t "~1Tflags: ~D~%" (-> obj flags)) - (format #t "~1Tbucket: ~D~%" (-> obj bucket)) - (format #t "~1Tv1: #~%" (-> obj v1)) - (format #t "~1Tv2: #~%" (-> obj v2)) - (format #t "~1Tcolor: ~D~%" (-> obj color)) - (format #t "~1Tmode: ~A~%" (-> obj mode)) - (format #t "~1Tcolor2: ~D~%" (-> obj color2)) - (label cfg-4) - obj - ) - (deftype debug-text-3d (structure) ((flags int32 :offset-assert 0) (bucket bucket-id :offset-assert 4) @@ -574,22 +551,6 @@ :flag-assert #x90000002c ) -(defmethod inspect debug-text-3d ((obj debug-text-3d)) - (when (not obj) - (set! obj obj) - (goto cfg-4) - ) - (format #t "[~8x] ~A~%" obj 'debug-text-3d) - (format #t "~1Tflags: ~D~%" (-> obj flags)) - (format #t "~1Tbucket: ~D~%" (-> obj bucket)) - (format #t "~1Tpos: #~%" (-> obj pos)) - (format #t "~1Tcolor: ~D~%" (-> obj color)) - (format #t "~1Toffset: #~%" (-> obj offset)) - (format #t "~1Tstr: ~A~%" (-> obj str)) - (label cfg-4) - obj - ) - (deftype debug-tracking-thang (basic) ((length int32 :offset-assert 4) (allocated-length int32 :offset-assert 8) @@ -599,17 +560,6 @@ :flag-assert #x90000000c ) -(defmethod inspect debug-tracking-thang ((obj debug-tracking-thang)) - (when (not obj) - (set! obj obj) - (goto cfg-4) - ) - (format #t "[~8x] ~A~%" obj (-> obj type)) - (format #t "~1Tlength: ~D~%" (-> obj length)) - (format #t "~1Tallocated-length: ~D~%" (-> obj allocated-length)) - (label cfg-4) - obj - ) (define *debug-lines* (the-as (inline-array debug-line) (malloc 'debug #x100000))) (define *debug-lines-trk* (new 'debug 'debug-tracking-thang)) @@ -1795,11 +1745,20 @@ ;; Boundary Debug ;;;;;;;;;;;;;;;;;; -;; TODO: missing a bunch of functions here +;; the debug drawing for boundaries reuses the sky polygon drawing code. +;; this does a bunch of crazy that violate calling conventions, so it's all in C++ and patched. -(define-extern init-boundary-regs (function none)) +(when *debug-segment* + (define *boundary-polygon* (the-as (inline-array sky-vertex) (malloc 'debug 768))) + ) -(defun-debug add-boundary-shader ((tex-id texture-id) (buf dma-buffer)) +;; init-boundary-regs loads vf registers with math camera values and stuff from sky-work +(def-mips2c init-boundary-regs (function none)) + +;; add-boundary-shader +(defun add-boundary-shader ((tex-id texture-id) (buf dma-buffer)) + "Generate adgif shader data (including GIF tag, but not VIF/DMA) for the given + texture, and write to the given dma-buffer." (let ((tex (lookup-texture-by-id tex-id))) (when tex (let* ((v1-0 buf) @@ -1830,14 +1789,158 @@ (none) ) +;; draw-boundary-polygon : this is handled entirely in mips2c +;; render-boundary-quad +;; render-boundary-tri +(def-mips2c render-boundary-tri (function sky-vertex dma-buffer none)) -;;;;;;;;;;;;;;;;;; -;; More Misc -;;;;;;;;;;;;;;;;;; +;; add-debug-bound-internal sneaks an extra value in vf27 - so this set-sky-vf27 function +;; was added so we can pass this value down to c++. +(def-mips2c set-sky-vf27 (function object none)) -(define-extern cpu-delay (function int none)) +(defun add-debug-bound-internal ((buf dma-buffer) (pts (inline-array vector)) (num-pts int) (color0 rgba) (color1 rgba) (flip-tex int)) + "Draw a boundary polygon using the boundary renderer. This renderer reuses components of the sky render + to properly clip (and subdivide) very large polgons. + This is intended to be called by add-debug-bound, after it has set up dma buffers for the boundary rendering." + (rlet ((vf27 :class vf)) + (set-vector! + (-> *boundary-polygon* 0 col) + (the float (-> color0 r)) + (the float (-> color0 g)) + (the float (-> color0 b)) + (the float (-> color0 a)) + ) + (set-vector! + (-> *boundary-polygon* 1 col) + (the float (-> color1 r)) + (the float (-> color1 g)) + (the float (-> color1 b)) + (the float (-> color1 a)) + ) + (init-boundary-regs) + ;;(.lvf vf27 (&-> *sky-work* giftag-roof quad)) + (set-sky-vf27 (&-> *sky-work* giftag-roof quad)) + (let ((s3-0 0) + (s2-1 (if (nonzero? flip-tex) + (new 'static 'matrix :vector (new 'static 'inline-array vector 4 + (new 'static 'vector :x 1.0 :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :z 1.0 :w 1.0) + (new 'static 'vector :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :z 1.0 :w 1.0) + ) + ) + (new 'static 'matrix :vector (new 'static 'inline-array vector 4 + (new 'static 'vector :z 1.0 :w 1.0) + (new 'static 'vector :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :y 8.0 :z 1.0 :w 1.0) + ) + ) + ) + ) + ) + (while (< s3-0 (+ num-pts -2)) + (cond + ((not (logtest? s3-0 1)) + (dotimes (v1-6 3) + (set! (-> *boundary-polygon* v1-6 pos quad) (-> pts (+ s3-0 v1-6) quad)) + (set! (-> *boundary-polygon* v1-6 stq quad) (-> s2-1 vector (+ s3-0 v1-6) quad)) + ) + ) + (else + (set! (-> *boundary-polygon* 0 pos quad) (-> pts (+ s3-0 1) quad)) + (set! (-> *boundary-polygon* 1 pos quad) (-> pts s3-0 quad)) + (set! (-> *boundary-polygon* 2 pos quad) (-> pts (+ s3-0 2) quad)) + (set! (-> *boundary-polygon* 0 stq quad) (-> s2-1 vector (+ s3-0 1) quad)) + (set! (-> *boundary-polygon* 1 stq quad) (-> s2-1 vector s3-0 quad)) + (set! (-> *boundary-polygon* 2 stq quad) (-> s2-1 vector (+ s3-0 2) quad)) + ) + ) + (render-boundary-tri (-> *boundary-polygon* 0) buf) + (+! s3-0 1) + ) + ) + (none) + ) + ) -(define-extern qword-read-time (function (array uint128) int int)) - -;; Returns whether some workaround for an EE memory controller bug is enabled. -(define-extern bugfix? (function symbol)) +(defun add-debug-bound ((buf bucket-id) (pts (inline-array vector)) (c0 int) (c1 rgba) (flash rgba) (arg5 int)) + "Draw a debug boundary polygon." + (local-vars (sv-16 pointer) (sv-32 int)) + (set! sv-32 arg5) + (if (< c0 3) + (return 0) + ) + (case sv-32 + ((1) + (if (logtest? (-> *display* real-frame-clock integral-frame-counter) 4) + (set! sv-32 1) + (set! sv-32 0) + ) + sv-32 + ) + ) + (let* ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf)) + (s5-0 (-> s4-0 base)) + ) + (let* ((v1-16 s4-0) + (a0-3 (the-as dma-packet (-> v1-16 base))) + ) + (set! (-> a0-3 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt))) + (set! (-> a0-3 vif0) (new 'static 'vif-tag)) + (set! (-> a0-3 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1)) + (set! (-> v1-16 base) (the-as pointer (the-as dma-packet (&+ a0-3 16)))) + ) + (let* ((v1-17 s4-0) + (a0-5 (the-as gs-gif-tag (-> v1-17 base))) + ) + (set! (-> a0-5 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3)) + (set! (-> a0-5 regs) GIF_REGS_ALL_AD) + (set! (-> v1-17 base) (the-as pointer (the-as gs-gif-tag (&+ a0-5 16)))) + ) + (let* ((v1-18 s4-0) + (a0-7 (-> v1-18 base)) + ) + (set! (-> (the-as (pointer gs-zbuf) a0-7) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24))) + (set! (-> (the-as (pointer gs-reg64) a0-7) 1) (gs-reg64 zbuf-1)) + (set! (-> (the-as (pointer gs-test) a0-7) 2) (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + ) + (set! (-> (the-as (pointer gs-reg64) a0-7) 3) (gs-reg64 test-1)) + (set! (-> (the-as (pointer gs-alpha) a0-7) 4) (new 'static 'gs-alpha :b #x1 :d #x1)) + (set! (-> (the-as (pointer gs-reg64) a0-7) 5) (gs-reg64 alpha-1)) + (set! (-> v1-18 base) (&+ a0-7 48)) + ) + (set! sv-16 (-> s4-0 base)) + (&+! (-> s4-0 base) 16) + (add-boundary-shader (new 'static 'texture-id :index #x3 :page #x70c) s4-0) + (add-debug-bound-internal s4-0 pts c0 c1 flash sv-32) + (close-sky-buffer s4-0) + (let ((v1-25 (/ (the-as int (+ (- -16 (the-as int sv-16)) (the-as int (-> s4-0 base)))) 16))) + (set! (-> (the-as dma-packet sv-16) dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc v1-25)) + (set! (-> (the-as dma-packet sv-16) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet sv-16) vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1 :imm v1-25)) + ) + (let ((a3-2 (-> s4-0 base))) + (let ((v1-29 (the-as dma-packet (-> s4-0 base)))) + (set! (-> v1-29 dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> v1-29 vif0) (new 'static 'vif-tag)) + (set! (-> v1-29 vif1) (new 'static 'vif-tag)) + (set! (-> s4-0 base) (the-as pointer (the-as dma-packet (&+ v1-29 16)))) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) bucket-group) + buf + s5-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + 0 + (none) + ) \ No newline at end of file diff --git a/goal_src/jak2/engine/debug/editable.gc b/goal_src/jak2/engine/debug/editable.gc index 6b0126dd9f..20e76990f7 100644 --- a/goal_src/jak2/engine/debug/editable.gc +++ b/goal_src/jak2/engine/debug/editable.gc @@ -1164,14 +1164,14 @@ ) ) (add-debug-bound - 324 - (the-as transform gp-0) + (bucket-id debug2) + gp-0 sv-112 (if (logtest? (-> obj flags) (editable-flag orient)) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) - (if (zero? (logand (-> obj flags) (editable-flag orient))) + (if (not (logtest? (-> obj flags) (editable-flag orient))) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) @@ -1454,14 +1454,14 @@ (the-as rgba -1) ) (add-debug-bound - 324 - (the-as transform gp-0) + (bucket-id debug2) + (the-as (inline-array vector) gp-0) s4-0 (if (logtest? (-> obj flags) (editable-flag orient)) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) - (if (zero? (logand (-> obj flags) (editable-flag orient))) + (if (not (logtest? (-> obj flags) (editable-flag orient))) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) diff --git a/goal_src/jak2/engine/debug/sampler.gc b/goal_src/jak2/engine/debug/sampler.gc index 46f8f5fa3b..c6a063a793 100644 --- a/goal_src/jak2/engine/debug/sampler.gc +++ b/goal_src/jak2/engine/debug/sampler.gc @@ -5,5 +5,49 @@ ;; name in dgo: sampler ;; dgos: ENGINE, GAME +;; og:ignore-form:install-handler 9 timer0-handler + ;; DECOMP BEGINS +;; this file is debug only +(declare-file (debug)) +(when *debug-segment* +(define *sampler-mem* "A pointer to where the sampled data should be stored" (the-as pointer #f)) + +(define *sampler-compare* + "The value used to set the EE register's `Timer 0 Compare Value`. Always `1`" + (the-as uint 1) + ) + +(define *sampler-count* "Incremented everytime a metric is sampled + @see [[timer0-handler]]" 0) + +(defun-debug sampler-start () + "Reset the [[timer-bank]] EE registers. + - If [[*sampler-mem*]] is undefined, allocate 16.7MB in the debug segment + - and when [[*sampler-mem*]] is defined, initialize the [[timer-bank]] fully. Reset [[*sampler-count*]] to 0 as well" + (set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode)) + (set! (-> (the-as timer-bank #x10000000) count) (the-as uint 0)) + (set! (-> (the-as timer-bank #x10000000) comp) *sampler-compare*) + (if (not *sampler-mem*) + (set! *sampler-mem* (malloc 'debug #x1000000)) + ) + (when (nonzero? *sampler-mem*) + (mem-set32! *sampler-mem* #x400000 0) + (set! (-> (the-as timer-bank #x10000000) mode) + (new 'static 'timer-mode :clks (timer-clock-selection busclk/256) :zret #x1 :cue #x1 :cmpe #x1 :equf #x1) + ) + (set! *sampler-count* 0) + 0 + ) + (none) + ) + +(defun-debug sampler-stop () + "Sets the [[timer-bank]] mode EE register to 0" + (set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode)) + 0 + (none) + ) + +) diff --git a/goal_src/jak2/engine/draw/drawable.gc b/goal_src/jak2/engine/draw/drawable.gc index e8f121a6da..947af10092 100644 --- a/goal_src/jak2/engine/draw/drawable.gc +++ b/goal_src/jak2/engine/draw/drawable.gc @@ -322,17 +322,17 @@ ; (foreground-initialize-engines) ;; update time of day and wind effects. - ; (let ((gp-2 (-> pp clock))) - ; (if (= (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) - ; (set! (-> pp clock) (-> *display* bg-clock)) - ; (set! (-> pp clock) (-> *display* real-clock)) - ; ) + (let ((gp-2 (-> pp clock))) + (if (= (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + (set! (-> pp clock) (-> *display* bg-clock)) + (set! (-> pp clock) (-> *display* real-clock)) + ) ; (if (not (paused?)) ; (update-wind *wind-work* *wind-scales*) ; ) - ; (update-time-of-day *time-of-day-context*) - ; (set! (-> pp clock) gp-2) - ; ) + (update-time-of-day *time-of-day-context*) + (set! (-> pp clock) gp-2) + ) ;; draw the sky diff --git a/goal_src/jak2/engine/engine/connect.gc b/goal_src/jak2/engine/engine/connect.gc index c27d5f51c8..d0783a1643 100644 --- a/goal_src/jak2/engine/engine/connect.gc +++ b/goal_src/jak2/engine/engine/connect.gc @@ -60,7 +60,7 @@ (deftype connection (connectable) ((param0 basic :offset-assert 16) - (param1 int32 :offset-assert 20) + (param1 basic :offset-assert 20) (param2 int32 :offset-assert 24) (param3 int32 :offset-assert 28) (quad uint128 2 :offset 0) @@ -394,7 +394,7 @@ (let ((v1-0 (the-as connection (-> obj dead-list next0)))) (when (not (or (not arg0) (= v1-0 (-> obj dead-list-end)))) (set! (-> v1-0 param0) (the-as basic arg1)) - (set! (-> v1-0 param1) (the-as int arg2)) + (set! (-> v1-0 param1) (the-as basic arg2)) (set! (-> v1-0 param2) (the-as int arg3)) (set! (-> v1-0 param3) (the-as int arg4)) (set! (-> obj dead-list next0) (-> v1-0 next0)) diff --git a/goal_src/jak2/engine/entity/entity-h.gc b/goal_src/jak2/engine/entity/entity-h.gc index 504dd0abf7..9ceec646c7 100644 --- a/goal_src/jak2/engine/entity/entity-h.gc +++ b/goal_src/jak2/engine/entity/entity-h.gc @@ -29,7 +29,7 @@ (define-extern reset-cameras (function none)) ;; NOTE - for airlock -(define-extern process-entity-status! (function process entity-perm-status symbol int)) +(define-extern process-entity-status! (function process entity-perm-status symbol entity-perm-status)) (define-extern process-drawable-from-entity! (function process-drawable entity-actor none)) (declare-type nav-poly structure) @@ -191,8 +191,8 @@ ) (deftype actor-reference (structure) - ((actor entity :offset-assert 0) - (id uint32 :offset-assert 4) + ((actor entity :offset-assert 0) + (id uint32 :offset-assert 4) ) :pack-me :method-count-assert 9 diff --git a/goal_src/jak2/engine/entity/entity.gc b/goal_src/jak2/engine/entity/entity.gc index 124882d030..9fc0c69dde 100644 --- a/goal_src/jak2/engine/entity/entity.gc +++ b/goal_src/jak2/engine/entity/entity.gc @@ -435,7 +435,7 @@ ) (let ((s5-1 format) (s4-0 "~C~C~C") - (a2-0 (if (and arg0 (zero? (logand (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) + (a2-0 (if (and arg0 (not (logtest? (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) 114 32 ) @@ -1989,7 +1989,7 @@ ) ) ) - (when (zero? (logand (-> obj status) (entity-perm-status bit-5))) + (when (not (logtest? (-> obj status) (entity-perm-status bit-5))) (set! (-> obj user-uint64) (the-as uint 0)) 0 ) @@ -2048,7 +2048,7 @@ ) ) (let ((s5-1 (lambda ((arg0 process)) - (if (zero? (logand (-> arg0 mask) (process-mask no-kill))) + (if (not (logtest? (-> arg0 mask) (process-mask no-kill))) (deactivate arg0) ) (none) @@ -2100,7 +2100,7 @@ ) (defmethod run-logic? process-drawable ((obj process-drawable)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root pause-adjust-distance)) (vector-vector-distance (-> obj root trans) (math-camera-pos)) ) @@ -2111,7 +2111,7 @@ ) (defmethod birth? entity-links ((obj entity-links) (arg0 vector)) - (and (zero? (logand (-> obj perm status) (entity-perm-status bit-0 dead))) + (and (not (logtest? (-> obj perm status) (entity-perm-status bit-0 dead))) (< (vector-vector-distance (-> obj trans) arg0) (-> *ACTOR-bank* birth-dist)) ) ) @@ -2196,7 +2196,7 @@ ) (else (if (and (-> v1-54 process) - (zero? (logand (-> v1-54 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> v1-54 perm status) (entity-perm-status no-kill))) (zero? (logand (-> v1-54 process mask) (process-mask no-kill))) ) (kill! (-> v1-54 entity)) @@ -2214,7 +2214,7 @@ (dotimes (s2-1 s3-2) (let ((v1-67 (-> s4-3 data s2-1))) (cond - ((zero? (logand (-> v1-67 kill-mask) sv-32)) + ((not (logtest? (-> v1-67 kill-mask) sv-32)) (when (not (or (-> v1-67 process) (logtest? (-> v1-67 perm status) (entity-perm-status bit-0 dead)))) (birth! (-> v1-67 entity)) (set! sv-24 (+ sv-24 1)) @@ -2225,7 +2225,7 @@ ) (else (if (and (-> v1-67 process) - (zero? (logand (-> v1-67 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> v1-67 perm status) (entity-perm-status no-kill))) (zero? (logand (-> v1-67 process mask) (process-mask no-kill))) ) (kill! (-> v1-67 entity)) @@ -2244,7 +2244,7 @@ (let ((s1-0 (-> s4-4 data s2-2))) (cond ((and (< (vector-vector-distance (-> s1-0 trans) sv-16) (-> *ACTOR-bank* birth-dist)) - (zero? (logand (-> s1-0 perm status) (entity-perm-status bit-9 bit-10))) + (not (logtest? (-> s1-0 perm status) (entity-perm-status bit-9 bit-10))) (zero? (logand (-> s1-0 kill-mask) sv-32)) ) (when (not (or (-> s1-0 process) (logtest? (-> s1-0 perm status) (entity-perm-status bit-0 dead)))) @@ -2257,7 +2257,7 @@ ) (else (if (and (-> s1-0 process) - (zero? (logand (-> s1-0 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> s1-0 perm status) (entity-perm-status no-kill))) (zero? (logand (-> s1-0 process mask) (process-mask no-kill))) ) (kill! (-> s1-0 entity)) @@ -2278,8 +2278,8 @@ (set! sv-48 (-> s3-4 data s1-1)) (cond ((and (is-object-visible? s4-1 (-> sv-48 vis-id)) - (zero? (logand (-> sv-48 perm status) (entity-perm-status bit-9 bit-10))) - (zero? (logand (-> sv-48 kill-mask) sv-32)) + (not (logtest? (-> sv-48 perm status) (entity-perm-status bit-9 bit-10))) + (not (logtest? (-> sv-48 kill-mask) sv-32)) (or (-> s4-1 vis-info 0) (< (vector-vector-distance (-> sv-48 trans) sv-16) (-> sv-48 vis-dist))) ) (when (not (or (-> sv-48 process) (logtest? (-> sv-48 perm status) (entity-perm-status bit-0 dead)) s0-0)) @@ -2302,7 +2302,7 @@ ) (else (when (and (-> sv-48 process) - (zero? (logand (-> sv-48 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> sv-48 perm status) (entity-perm-status no-kill))) (zero? (logand (-> sv-48 process mask) (process-mask no-kill))) ) (kill! (-> sv-48 entity)) @@ -2369,21 +2369,23 @@ (none) ) +;; WARN: Return type mismatch int vs entity-perm-status. (defun process-entity-status! ((arg0 process) (arg1 entity-perm-status) (arg2 symbol)) - (cond - ((and (-> arg0 entity) arg0 (= arg0 (-> arg0 entity extra process))) - (let ((v1-6 (-> arg0 entity extra))) - (if arg2 - (logior! (-> v1-6 perm status) arg1) - (logclear! (-> v1-6 perm status) arg1) - ) - (the-as int (-> v1-6 perm status)) - ) - ) - (else - 0 - ) - ) + (the-as entity-perm-status (cond + ((and (-> arg0 entity) arg0 (= arg0 (-> arg0 entity extra process))) + (let ((v1-6 (-> arg0 entity extra))) + (if arg2 + (logior! (-> v1-6 perm status) arg1) + (logclear! (-> v1-6 perm status) arg1) + ) + (the-as int (-> v1-6 perm status)) + ) + ) + (else + 0 + ) + ) + ) ) ;; WARN: Return type mismatch entity-actor vs entity. @@ -2447,7 +2449,6 @@ (kill! gp-0) ) ) - (none) ) (defun-debug dump-entity-remap ((arg0 object) (arg1 object)) diff --git a/goal_src/jak2/engine/entity/relocate.gc b/goal_src/jak2/engine/entity/relocate.gc index 8d3e97014f..8f08c4c075 100644 --- a/goal_src/jak2/engine/entity/relocate.gc +++ b/goal_src/jak2/engine/entity/relocate.gc @@ -32,8 +32,10 @@ ) ) (let ((a0-19 (-> (the-as connection v1-7) param1))) - (if (and (>= a0-19 (-> *kernel-context* relocating-min)) (< a0-19 (-> *kernel-context* relocating-max))) - (+! (-> (the-as connection v1-7) param1) arg0) + (if (and (>= (the-as int a0-19) (-> *kernel-context* relocating-min)) + (< (the-as int a0-19) (-> *kernel-context* relocating-max)) + ) + (&+! (-> (the-as connection v1-7) param1) arg0) ) ) (let ((a0-24 (-> (the-as connection v1-7) param2))) @@ -98,6 +100,7 @@ obj ) +;; WARN: Return type mismatch process vs process-drawable. (defmethod relocate process-drawable ((obj process-drawable) (arg0 int)) (let ((v1-0 *kernel-context*)) (set! (-> v1-0 relocating-process) obj) @@ -163,6 +166,7 @@ obj ) +;; WARN: Return type mismatch collide-shape vs collide-shape-moving. (defmethod relocate collide-shape-moving ((obj collide-shape-moving) (arg0 int)) (if (-> obj dynam) (&+! (-> obj dynam) arg0) @@ -322,6 +326,7 @@ obj ) +;; WARN: Return type mismatch process vs camera-master. (defmethod relocate camera-master ((obj camera-master) (arg0 int)) (if (nonzero? (-> obj water-drip)) (&+! (-> obj water-drip) arg0) @@ -329,6 +334,7 @@ (the-as camera-master ((method-of-type process relocate) obj arg0)) ) +;; WARN: Return type mismatch process vs time-of-day-proc. (defmethod relocate time-of-day-proc ((obj time-of-day-proc) (arg0 int)) (if (nonzero? (-> obj sun)) (&+! (-> obj sun) arg0) @@ -342,6 +348,7 @@ (the-as time-of-day-proc ((method-of-type process relocate) obj arg0)) ) +;; WARN: Return type mismatch process vs part-tracker. (defmethod relocate part-tracker ((obj part-tracker) (arg0 int)) (if (nonzero? (-> obj root)) (&+! (-> obj root) arg0) @@ -352,6 +359,7 @@ (the-as part-tracker ((method-of-type process relocate) obj arg0)) ) +;; WARN: Return type mismatch process vs part-spawner. (defmethod relocate part-spawner ((obj part-spawner) (arg0 int)) (if (nonzero? (-> obj root)) (&+! (-> obj root) arg0) @@ -365,6 +373,7 @@ (the-as part-spawner ((method-of-type process relocate) obj arg0)) ) +;; WARN: Return type mismatch process vs lightning-tracker. (defmethod relocate lightning-tracker ((obj lightning-tracker) (arg0 int)) (if (nonzero? (-> obj root)) (&+! (-> obj root) arg0) @@ -375,6 +384,7 @@ (the-as lightning-tracker ((method-of-type process relocate) obj arg0)) ) +;; WARN: Return type mismatch process-drawable vs manipy. (defmethod relocate manipy ((obj manipy) (arg0 int)) (if (nonzero? (-> obj joint 0)) (&+! (-> obj joint 0) arg0) diff --git a/goal_src/jak2/engine/game/game-info-h.gc b/goal_src/jak2/engine/game/game-info-h.gc index a3d9809378..46e4825ee8 100644 --- a/goal_src/jak2/engine/game/game-info-h.gc +++ b/goal_src/jak2/engine/game/game-info-h.gc @@ -45,6 +45,7 @@ (cf30 30) ) +;; +++game-secrets (defenum game-secrets :type uint32 :bitfield #t @@ -65,7 +66,9 @@ (reverse-races) (hero-mode) (big-head) - (little-head)) + (little-head) + (game-secret-unknown)) +;; ---game-secrets (defenum game-score (none) diff --git a/goal_src/jak2/engine/game/idle-control.gc b/goal_src/jak2/engine/game/idle-control.gc index d9a02fa7f5..b5abcdb312 100644 --- a/goal_src/jak2/engine/game/idle-control.gc +++ b/goal_src/jak2/engine/game/idle-control.gc @@ -7,3 +7,28 @@ ;; DECOMP BEGINS +(deftype idle-control-frame (uint32) + ((command uint8 :offset 0) + (anim uint8 :offset 8) + (param0 uint8 :offset 16) + (param1 uint8 :offset 24) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype idle-control (structure) + ((anim uint32 :offset-assert 0) + (current uint32 :offset-assert 4) + (counter int32 :offset-assert 8) + (target int32 :offset-assert 12) + ) + :method-count-assert 11 + :size-assert #x10 + :flag-assert #xb00000010 + (:methods + (idle-control-method-9 () none 9) + (idle-control-method-10 () none 10) + ) + ) \ No newline at end of file diff --git a/goal_src/jak2/engine/game/main-h.gc b/goal_src/jak2/engine/game/main-h.gc index 1b83581bf1..120206cdfc 100644 --- a/goal_src/jak2/engine/game/main-h.gc +++ b/goal_src/jak2/engine/game/main-h.gc @@ -27,15 +27,14 @@ ;; +++scene-controls (defenum scene-controls :type int64 - (all-off 0) - (channel 1) - (anim-name 2) - (dma-size 4) - (bounds-spheres 8) - (actors 16) - (actor-marks 32) - (special-fma-spheres 64) - (all-on 95)) + :bitfield #t + (channel) + (anim-name) + (dma-size) + (bounds-spheres) + (actors) + (actor-marks) + (special-fma-spheres)) ;; ---scene-controls ;; +++bot-marks-controls diff --git a/goal_src/jak2/engine/game/main.gc b/goal_src/jak2/engine/game/main.gc index ad4024b029..9979c6c998 100644 --- a/goal_src/jak2/engine/game/main.gc +++ b/goal_src/jak2/engine/game/main.gc @@ -507,9 +507,9 @@ ) ;; using the position of the in-game camera, update visiblity and matrices for rendering. - ; (with-profiler 'camera *profile-camera-color* - ; (update-camera) - ; ) + (with-profiler 'camera *profile-camera-color* + (update-camera) + ) ;; map texture stuff ; (update *bigmap*) @@ -720,7 +720,7 @@ (let ((gp-1 *display*)) (set! *teleport* #t) (update *setting-control*) - ; (init-time-of-day-context *time-of-day-context*) + (init-time-of-day-context *time-of-day-context*) (format 0 "about to display-sync~%") (display-sync gp-1) (format 0 "about to swap-display~%") diff --git a/goal_src/jak2/engine/gfx/background/background.gc b/goal_src/jak2/engine/gfx/background/background.gc index 40a7fbb150..9e99aa7702 100644 --- a/goal_src/jak2/engine/gfx/background/background.gc +++ b/goal_src/jak2/engine/gfx/background/background.gc @@ -229,13 +229,68 @@ (none) ) +(defun add-pc-port-background-data ((dma-buf dma-buffer)) + "PC Port added" + ;; loop over levels + (dotimes (lev-idx 6) + (let ((lev (-> *level* draw-level lev-idx)) + (dma-start (-> dma-buf base))) + (cond + ((and lev (= (-> lev status) 'active)) + ;; the level is active. + (let ((packet (the-as dma-packet (-> dma-buf base)))) + (set! (-> packet dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc 128)) + (set! (-> packet vif0) (new 'static 'vif-tag)) + (set! (-> packet vif1) (new 'static 'vif-tag :cmd (vif-cmd pc-port))) + (set! (-> dma-buf base) (the pointer (&+ packet 16))) + ) + (quad-copy! (-> dma-buf base) (-> lev vis-bits) 128) + (&+! (-> dma-buf base) (* 16 128)) + ) + (else + (let ((packet (the-as dma-packet (-> dma-buf base)))) + (set! (-> packet dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc 1)) + (set! (-> packet vif0) (new 'static 'vif-tag)) + (set! (-> packet vif1) (new 'static 'vif-tag :cmd (vif-cmd pc-port))) + (set! (-> dma-buf base) (the pointer (&+ packet 16))) + ) + (set! (-> (the (pointer uint128) (-> dma-buf base))) (the uint128 0)) + (&+! (-> dma-buf base) (* 16 1)) + ) + ) + + + (let ((a3-3 (-> dma-buf base))) + (let ((v1-38 (the-as object (-> dma-buf base)))) + (set! (-> (the-as dma-packet v1-38) dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> (the-as dma-packet v1-38) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-38) vif1) (new 'static 'vif-tag)) + (set! (-> dma-buf base) (&+ (the-as pointer v1-38) 16)) + ) + (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) + (bucket-id bucket-2) + dma-start + (the-as (pointer dma-tag) a3-3) + ) + ) + + ) + ) + ) + (defun finish-background () "Main function for drawing the background (wind, shrub, tie, tfrag)" + + (#when PC_PORT + (add-pc-port-background-data + (-> *display* frames (-> *display* on-screen) global-buf) + ) + ) + (if (-> *blit-displays-work* menu-mode) (return #f) ) - ;; update wind! (when (not (paused?)) (flush-cache 0) @@ -564,20 +619,10 @@ (set! (-> data-ptr 1) (-> *math-camera* plane 1 quad)) (set! (-> data-ptr 2) (-> *math-camera* plane 2 quad)) (set! (-> data-ptr 3) (-> *math-camera* plane 3 quad)) - - ;; hack to set time of day to something. - (let ((hack-itimes (new 'stack 'vector4w))) - (dotimes (i 4) - (set! (-> hack-itimes data i) #x60) - ) - (dotimes (i 4) - (set! (-> data-ptr (+ 4 i)) (-> hack-itimes quad)) - ) - ) - ; (set! (-> data-ptr 4) (-> lev mood itimes 0 quad)) todo, time of day - ; (set! (-> data-ptr 5) (-> lev mood itimes 1 quad)) - ; (set! (-> data-ptr 6) (-> lev mood itimes 2 quad)) - ; (set! (-> data-ptr 7) (-> lev mood itimes 3 quad)) + (set! (-> data-ptr 4) (-> lev mood-context itimes 0 quad)) + (set! (-> data-ptr 5) (-> lev mood-context itimes 1 quad)) + (set! (-> data-ptr 6) (-> lev mood-context itimes 2 quad)) + (set! (-> data-ptr 7) (-> lev mood-context itimes 3 quad)) (set! (-> data-ptr 8) (-> *math-camera* camera-temp vector 0 quad)) (set! (-> data-ptr 9) (-> *math-camera* camera-temp vector 1 quad)) (set! (-> data-ptr 10) (-> *math-camera* camera-temp vector 2 quad)) diff --git a/goal_src/jak2/engine/gfx/background/subdivide-h.gc b/goal_src/jak2/engine/gfx/background/subdivide-h.gc index 7f822a6f57..621b76f6dd 100644 --- a/goal_src/jak2/engine/gfx/background/subdivide-h.gc +++ b/goal_src/jak2/engine/gfx/background/subdivide-h.gc @@ -30,6 +30,7 @@ ) ) + (defmethod new subdivide-settings ((allocation symbol) (type-to-make type) (arg0 meters) (arg1 meters)) (let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) (dotimes (v1-2 6) @@ -51,6 +52,7 @@ :flag-assert #x900000080 ) + (deftype terrain-stats (structure) ((pris tr-stat :inline :offset-assert 0) (tie-generic tr-stat :inline :offset-assert 16) @@ -88,6 +90,7 @@ :flag-assert #x9000001e0 ) + (deftype dma-area (structure) ((instance-shrub-dma instance-shrub-dma :inline :offset 0) (draw-node-dma draw-node-dma :inline :offset 0) @@ -104,6 +107,7 @@ :flag-assert #x9000038a0 ) + (deftype background-area (structure) ((dma-area dma-area :inline :offset-assert 0) (vis-list uint8 2048 :offset-assert 14496) @@ -113,6 +117,7 @@ :flag-assert #x9000040a0 ) + (deftype foreground-area (structure) ((generic-work generic-work :inline :offset-assert 0) (foreground-work foreground-work :inline :offset 0) @@ -125,34 +130,38 @@ :flag-assert #x900003fe0 ) + (deftype region-prim-area (structure) - ((region-prim-list region-prim-list :inline :offset-assert 0) - (pos vector :inline :offset-assert 1296) - (ray vector :inline :offset 1328) - (region-enter-count int32 :offset 1360) - (region-enter-list uint32 320 :offset-assert 1364) - (region-enter-prim-list uint32 320 :offset-assert 2644) - (region-exit-count int32 :offset-assert 3924) - (region-exit-list uint32 320 :offset-assert 3928) - (region-exit-prim-list uint32 320 :offset-assert 5208) - (region-inside-count int32 :offset-assert 6488) - (region-inside-list uint32 320 :offset-assert 6492) - (region-inside-prim-list uint32 320 :offset-assert 7772) - (region-start-count int32 :offset-assert 9052) - (region-start-list uint32 320 :offset-assert 9056) - (region-start-prim-list uint32 320 :offset-assert 10336) + ((region-prim-list region-prim-list :inline :offset-assert 0) + (pos vector :inline :offset-assert 1296) + (unknown-vector-uiyb1 vector :inline :offset-assert 1312) + (ray vector :inline :offset 1328) + (unknown-vector-t3edh vector :inline :offset-assert 1344) + (region-enter-count int32 :offset 1360) + (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) + (region-exit-count int32 :offset-assert 3924) + (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) + (region-inside-count int32 :offset-assert 6488) + (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) + (region-start-count int32 :offset-assert 9052) + (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 :size-assert #x2d60 :flag-assert #xd00002d60 (:methods - (region-prim-area-method-9 () none 9) - (region-prim-area-method-10 () none 10) - (region-prim-area-method-11 () none 11) - (region-prim-area-method-12 () none 12) + (track-entered-region! (_type_ drawable-region-sphere) none 9) + (track-exited-region! (_type_ drawable-region-sphere) none 10) + (track-inside-region! (_type_ drawable-region-sphere) none 11) + (track-start-region! (_type_ drawable-region-sphere) none 12) ) ) + (deftype sprite-area (structure) ((clock-data vector 13 :inline :offset-assert 0) (buffer uint8 :dynamic :offset-assert 208) @@ -162,6 +171,7 @@ :flag-assert #x9000000d0 ) + (deftype work-area (structure) ((background background-area :inline :offset-assert 0) (foreground foreground-area :inline :offset 0) @@ -173,6 +183,7 @@ :flag-assert #x9000040a0 ) + (deftype terrain-context (structure) ((work work-area :inline :offset-assert 0) ) @@ -181,7 +192,7 @@ :flag-assert #x9000040a0 ) + (define *terrain-stats* (new 'global 'terrain-stats)) (define *collide-stats* (new 'global 'collide-stats)) - diff --git a/goal_src/jak2/engine/gfx/lightning-h.gc b/goal_src/jak2/engine/gfx/lightning-h.gc index d30df310f8..cf5a66fbee 100644 --- a/goal_src/jak2/engine/gfx/lightning-h.gc +++ b/goal_src/jak2/engine/gfx/lightning-h.gc @@ -5,6 +5,9 @@ ;; name in dgo: lightning-h ;; dgos: ENGINE, GAME +(define-extern unlink-lightning-spec-by-heap (function kheap none)) + +;; +++lightning-spec-flags (defenum lightning-spec-flags :type uint16 :bitfield #t @@ -14,17 +17,22 @@ (lsf3 3) (size-from-adjust-dist 4) ) +;; ---lightning-spec-flags + +;; +++lightning-mode (defenum lightning-mode :type uint8 + (lm-1 -1) (lm0 0) (lm1 1) (lm2 2) (lm3 3) ) +;; ---lightning-mode -(define-extern unlink-lightning-spec-by-heap (function kheap none)) - +(declare-type lightning-spec basic) +(define-extern *lightning-spec-id-table* (array lightning-spec)) ;; DECOMP BEGINS @@ -56,8 +64,6 @@ :flag-assert #x900000050 ) -(define-extern *lightning-spec-id-table* (array lightning-spec)) - (defun lookup-lightning-spec-by-name ((arg0 string)) (let* ((s5-0 *lightning-spec-id-table*) (s4-0 (-> s5-0 length)) @@ -90,6 +96,7 @@ :flag-assert #x900000094 ) + (deftype lightning-control (basic) ((spec lightning-spec :offset-assert 4) (process process :offset-assert 8) @@ -102,12 +109,13 @@ (new (symbol type lightning-spec process float) _type_ 0) (change-mode (_type_ lightning-mode) lightning-mode 9) (get-mode (_type_) lightning-mode 10) - (set-point (_type_ int vector) none 11) + (set-point! (_type_ int vector) none 11) (set-first-meet-point (_type_ vector) none 12) (set-last-meet-point (_type_ vector) none 13) ) ) + (defmethod change-mode lightning-control ((obj lightning-control) (arg0 lightning-mode)) (let ((v1-1 (!= arg0 (-> obj state mode)))) (case arg0 @@ -130,7 +138,7 @@ (-> obj state mode) ) -(defmethod set-point lightning-control ((obj lightning-control) (arg0 int) (arg1 vector)) +(defmethod set-point! lightning-control ((obj lightning-control) (arg0 int) (arg1 vector)) (let ((v1-0 (-> obj state))) (when (and (-> v1-0 path) (>= arg0 0) (< arg0 (-> v1-0 path length))) (set! (-> v1-0 path data arg0 quad) (-> arg1 quad)) @@ -152,11 +160,13 @@ (none) ) +;; WARN: Return type mismatch (inline-array vector) vs none. (defmethod set-first-meet-point lightning-control ((obj lightning-control) (arg0 vector)) (set! (-> obj state meet data 0 quad) (-> arg0 quad)) (none) ) +;; WARN: Return type mismatch vector vs none. (defmethod set-last-meet-point lightning-control ((obj lightning-control) (arg0 vector)) (set! (-> obj state meet data (+ (-> obj state points-to-draw) -1) quad) (-> arg0 quad)) (none) @@ -178,6 +188,7 @@ obj ) +;; WARN: Return type mismatch object vs lightning-control. (defmethod new lightning-control ((allocation symbol) (type-to-make type) (arg0 lightning-spec) (arg1 process) (arg2 float)) (with-pp (let ((obj (object-new allocation type-to-make (the-as int (-> type-to-make size))))) diff --git a/goal_src/jak2/engine/gfx/mood/mood.gc b/goal_src/jak2/engine/gfx/mood/mood.gc index 09eec9d249..bf6f1d1a38 100644 --- a/goal_src/jak2/engine/gfx/mood/mood.gc +++ b/goal_src/jak2/engine/gfx/mood/mood.gc @@ -144,8 +144,64 @@ ) ) -;; ERROR: Expression building failed: In update-mood-direction: Failed to match non-power of two case: t3-14 - +(defun update-mood-direction ((arg0 mood-context-core3) (arg1 mood-table) (arg2 float)) + (local-vars (sv-16 light-group)) + (let* ((v1-0 (-> arg1 mood-channel-group)) + (a2-1 (-> arg1 mood-direction-table)) + (a3-0 (the int arg2)) + (t0-1 (mod (+ a3-0 1) 24)) + (f0-3 (- arg2 (the float a3-0))) + (f1-3 (- 1.0 f0-3)) + (t1-0 0) + (a1-3 (-> arg0 light-group)) + ) + (set! sv-16 (-> arg0 light-group 1)) + (set! (-> a1-3 0 ambi extra x) 1.0) + (set! (-> a1-3 0 dir0 extra x) 0.0) + (set! (-> a1-3 0 dir1 extra x) 0.0) + (set! (-> a1-3 0 dir2 extra x) 0.0) + (dotimes (t2-2 4) + (let ((f2-6 (+ (* f1-3 (-> (the-as (pointer float) (+ (+ (* a3-0 4) (* 96 t2-2)) (the-as int v1-0))))) + (* f0-3 (-> (the-as (pointer float) (+ (+ (* t0-1 4) (* 96 t2-2)) (the-as int v1-0))))) + ) + ) + ) + (when (!= f2-6 0.0) + (set! (-> a1-3 0 lights t1-0 extra x) f2-6) + (set! (-> a1-3 0 lights t1-0 mask) (the-as uint (ash 2 t2-2))) + (set! (-> a1-3 0 lights t1-0 palette-index) (+ t2-2 1)) + (set! (-> a1-3 0 lights t1-0 direction quad) (-> a2-1 data t2-2 quad)) + (set! (-> (the-as (pointer uint128) (+ (the-as uint (-> a1-3 0 dir0 color)) (* 48 t1-0)))) + (-> arg0 times (+ t2-2 1) quad) + ) + (set! (-> arg0 times (+ t2-2 1) w) f2-6) + (+! t1-0 1) + ) + ) + ) + (set! (-> a1-3 0 ambi mask) (the-as uint 1)) + (set! (-> a1-3 0 ambi palette-index) 0) + (mem-copy! (the-as pointer sv-16) (the-as pointer a1-3) 192) + ) + (let ((f0-4 1.0)) + (let ((f1-4 1.1)) + (cond + ((or (>= 6.0 arg2) (>= arg2 18.0)) + (set! f0-4 f1-4) + ) + ((and (< 6.0 arg2) (< arg2 7.0)) + (+! f0-4 (* (- f1-4 f0-4) (- 7.0 arg2))) + ) + ((and (< 17.0 arg2) (< arg2 18.0)) + (+! f0-4 (* (- f1-4 f0-4) (+ -17.0 arg2))) + ) + ) + ) + (set! (-> sv-16 dir0 extra x) (* (-> sv-16 dir0 extra x) f0-4)) + (set! (-> sv-16 dir1 extra x) (* (-> sv-16 dir1 extra x) f0-4)) + (set! (-> sv-16 dir2 extra x) (* (-> sv-16 dir2 extra x) f0-4)) + ) + ) (defun update-mood-exterior ((arg0 mood-context-core3) (arg1 mood-table) (arg2 float) (arg3 int)) (local-vars (v0-1 object) (sv-32 mood-color) (sv-48 mood-color) (sv-64 vector)) (cond diff --git a/goal_src/jak2/engine/gfx/mood/time-of-day.gc b/goal_src/jak2/engine/gfx/mood/time-of-day.gc index 71c4c73b93..20a36790b7 100644 --- a/goal_src/jak2/engine/gfx/mood/time-of-day.gc +++ b/goal_src/jak2/engine/gfx/mood/time-of-day.gc @@ -5,7 +5,697 @@ ;; name in dgo: time-of-day ;; dgos: ENGINE, GAME +(define-extern time-of-day-effect (function none)) + ;; DECOMP BEGINS +;; definition for method 5 of type time-of-day-palette +;; WARN: Return type mismatch uint vs int. +(defmethod asize-of time-of-day-palette ((obj time-of-day-palette)) + (the-as int (+ (-> obj type size) (* (* (-> obj height) (-> obj width)) 4))) + ) + +;; definition for method 10 of type time-of-day-proc +(defmethod deactivate time-of-day-proc ((obj time-of-day-proc)) + (if (nonzero? (-> obj sun)) + (kill-and-free-particles (-> obj sun)) + ) + (if (nonzero? (-> obj green-sun)) + (kill-and-free-particles (-> obj green-sun)) + ) + (if (nonzero? (-> obj moon)) + (kill-and-free-particles (-> obj moon)) + ) + ((method-of-type process deactivate) obj) + (none) + ) + +;; failed to figure out what this is: +(if (zero? time-of-day-effect) + (set! time-of-day-effect nothing) + ) + +;; definition for function time-of-day-update +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defbehavior time-of-day-update time-of-day-proc () + (time-of-day-effect) + (let ((gp-0 #t)) + (dotimes (v1-0 (-> *level* length)) + (let ((a0-3 (-> *level* level v1-0))) + (when (= (-> a0-3 status) 'active) + (if (-> a0-3 info use-camera-other) + (set! gp-0 #f) + ) + ) + ) + ) + (when (and (-> *setting-control* user-current weather) gp-0) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (v1-8 (-> *math-camera* inv-camera-rot vector 2)) + ) + (set! (-> s5-0 quad) (-> *math-camera* trans quad)) + (vector-! s4-0 s5-0 (-> *math-camera* prev-trans)) + (let ((f0-1 (vector-dot s4-0 v1-8))) + (vector+float*! s5-0 s5-0 v1-8 (* 25.0 f0-1)) + ) + ) + (set! (-> s5-0 y) (-> *math-camera* trans y)) + ) + (if (< 0.0 (-> *setting-control* user-current rain)) + (update-rain (the-as target (-> *setting-control* user-current rain))) + ) + (if (< 0.0 (-> *setting-control* user-current snow)) + (update-snow (the-as target (-> *setting-control* user-current snow))) + ) + ) + (cond + ((and (>= (-> self time-of-day) 6.25) + (and (< (-> self time-of-day) 18.75) (-> *time-of-day-context* sky) gp-0) + ) + (when (and *dproc* (zero? (-> self sun-count))) + (spawn (-> self sun) (math-camera-pos)) + (+! (-> self sun-count) 1) + ) + ) + ((> (-> self sun-count) 0) + (kill-and-free-particles (-> self sun)) + (set! (-> self sun-count) 0) + 0 + ) + ) + (cond + ((and (or (>= (-> self time-of-day) 21.75) (>= 10.25 (-> self time-of-day))) + (-> *time-of-day-context* sky) + gp-0 + ) + (when (and *dproc* (zero? (-> self green-sun-count))) + (spawn (-> self green-sun) (math-camera-pos)) + (+! (-> self green-sun-count) 1) + ) + ) + ((> (-> self green-sun-count) 0) + (kill-and-free-particles (-> self green-sun)) + (set! (-> self green-sun-count) 0) + 0 + ) + ) + (set! gp-0 (and (or (>= 7.0 (-> self time-of-day)) (>= (-> self time-of-day) 17.0)) + (and (-> *time-of-day-context* sky) gp-0) + ) + ) + (cond + (gp-0 + (when (and *dproc* (zero? (-> self moon-count))) + (spawn (-> self moon) (math-camera-pos)) + (+! (-> self moon-count) 1) + ) + ) + ((> (-> self moon-count) 0) + (kill-and-free-particles (-> self moon)) + (set! (-> self moon-count) 0) + 0 + ) + ) + ) + (update-time-and-speed *sky-work* (-> self time-of-day) (-> self time-ratio)) + 0 + (none) + ) + +;; definition for function update-counters +(defbehavior update-counters time-of-day-proc () + (let ((v1-2 (-> *display* bg-clock frame-counter))) + 0 + (let ((v1-3 (* 60 v1-2))) + (set! (-> self old-frame) (-> self current-frame)) + (set! (-> self current-frame) (the-as uint v1-3)) + (set! (-> self frames) (the-as uint v1-3)) + (set! (-> self hours) (/ v1-3 #x107ac0)) + (let ((v1-4 (- v1-3 (* #x107ac0 (-> self hours))))) + (set! (-> self minutes) (/ v1-4 #x4650)) + (let ((v1-5 (- v1-4 (* #x4650 (-> self minutes))))) + (set! (-> self seconds) (/ v1-5 300)) + (- v1-5 (* 300 (-> self seconds))) + ) + ) + ) + ) + (let ((f0-1 (* 0.0000009259259 (the float (mod (the-as int (-> self frames)) #x18b8200))))) + (set! (-> self time-of-day) f0-1) + (set! (-> *time-of-day-context* time) f0-1) + f0-1 + ) + ) + +;; failed to figure out what this is: +(defstate time-of-day-tick (time-of-day-proc) + :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'change) + (case (-> arg3 param 0) + (('ratio) + (let ((a0-5 (-> *display* bg-clock)) + (f0-0 (the-as float (-> arg3 param 1))) + ) + (set! (-> self time-ratio) f0-0) + (set! (-> self dest-time-ratio) f0-0) + (update-rates! a0-5 f0-0) + ) + ) + (('hour) + (update-counters) + (let ((v1-7 (-> *display* bg-clock frame-counter)) + (a0-7 #x69780) + (a1-5 (/ (the int (* 1080000.0 (the float (-> arg3 param 1)))) 60)) + ) + (set! (-> *display* bg-clock frame-counter) (+ (- v1-7 (the-as time-frame (mod v1-7 a0-7))) a0-7 a1-5)) + ) + (update-counters) + (-> self hours) + (kill-and-free-particles (-> self sun)) + (spawn (-> self sun) (math-camera-pos)) + (set! (-> self sun-count) 1) + (kill-and-free-particles (-> self green-sun)) + (spawn (-> self green-sun) (math-camera-pos)) + (set! (-> self green-sun-count) 1) + (kill-and-free-particles (-> self moon)) + (spawn (-> self moon) (math-camera-pos)) + (let ((v0-0 (the-as number 1))) + (set! (-> self moon-count) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + ((= v1-0 'ratio) + (-> self time-ratio) + ) + ((= v1-0 'day-length) + (if (= (-> self time-ratio) 0.0) + 0 + (/ 25920000.0 (-> self time-ratio)) + ) + ) + ((= v1-0 'time-frame) + (-> self frames) + ) + ((= v1-0 'time-of-day) + (-> self time-of-day) + ) + ((= v1-0 'time-of-day-norm) + (* 0.041666668 (-> self time-of-day)) + ) + ((= v1-0 'hour) + (-> self hours) + ) + ((= v1-0 'minute) + (-> self minutes) + ) + ((= v1-0 'second) + (-> self seconds) + ) + ((= v1-0 'dest-clock-ratio-set) + (set! (-> self dest-time-ratio) (the-as float (-> arg3 param 0))) + (let ((f0-12 (-> self time-ratio)) + (f1-5 (-> self dest-time-ratio)) + (f2-1 (/ 300.0 (the float (-> arg3 param 1)))) + ) + (set! (-> self dest-time-delta) (* (fabs (- f0-12 f1-5)) f2-1 (-> *display* real-clock seconds-per-frame))) + ) + (-> self dest-time-ratio) + ) + ) + ) + ) + ) + :code (behavior () + (until #f + (if (!= (-> self time-ratio) 0.0) + (set! (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + ) + (when (!= (-> self time-ratio) (-> self dest-time-ratio)) + (seek! (-> self time-ratio) (-> self dest-time-ratio) (-> self dest-time-delta)) + (update-rates! (-> *display* bg-clock) (-> self time-ratio)) + ) + (update-counters) + (suspend) + ) + #f + (none) + ) + :post time-of-day-update + ) + +;; definition for function init-time-of-day +(defbehavior init-time-of-day time-of-day-proc () + (stack-size-set! (-> self main-thread) 128) + (set! (-> self hours) 0) + (set! (-> self minutes) 0) + (set! (-> self seconds) 0) + (set! (-> self frames) (the-as uint 0)) + (set! (-> self time-of-day) 0.0) + (cond + (*time-of-day-fast* + (set! (-> self time-ratio) 60.0) + (set! (-> self dest-time-ratio) 60.0) + ) + (else + (set! (-> self time-ratio) 1.0) + (set! (-> self dest-time-ratio) 1.0) + ) + ) + (update-rates! (-> *display* bg-clock) (-> self time-ratio)) + (set! (-> self sun) (create-launch-control (-> *part-group-id-table* 3) self)) + (set! (-> self green-sun) (create-launch-control (-> *part-group-id-table* 4) self)) + (set! (-> self moon) (create-launch-control (-> *part-group-id-table* 5) self)) + (set! (-> self event-hook) (-> time-of-day-tick event)) + (go time-of-day-tick) + ) + +;; definition for function start-time-of-day +;; WARN: Return type mismatch (pointer time-of-day-proc) vs (pointer process). +(defun start-time-of-day () + (kill-by-name "time-of-day-proc" *active-pool*) + (set! *time-of-day* (process-spawn time-of-day-proc :init init-time-of-day :to *bg-pool*)) + (the-as (pointer process) *time-of-day*) + ) + +;; definition for function time-of-day-setup (defun time-of-day-setup ((arg0 symbol)) - #f) \ No newline at end of file + (when arg0 + (when (= (-> *time-of-day* 0 time-ratio) 0.0) + (send-event (ppointer->process *time-of-day*) 'change 'ratio (if *time-of-day-fast* + #x42700000 + #x3f800000 + ) + ) + (set! (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + ) + ) + (!= (-> *time-of-day* 0 time-ratio) 0.0) + ) + +;; definition for function time-of-day-interp-colors +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function time-of-day-interp-colors-scratch +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function init-time-of-day-context +(defun init-time-of-day-context ((arg0 time-of-day-context)) + (set-vector! (-> arg0 title-light-group dir0 color) 0.82 0.82 0.82 1.0) + (set-vector! (-> arg0 title-light-group dir1 color) 2.0 2.0 2.0 1.0) + (set-vector! (-> arg0 title-light-group ambi color) 0.4 0.4 0.4 1.0) + (set! (-> arg0 title-light-group dir0 extra x) 1.0) + (set! (-> arg0 title-light-group dir1 extra x) 1.0) + (set! (-> arg0 title-light-group ambi extra x) 1.0) + (set-vector! (-> arg0 filter-color) 1.0 1.0 1.0 1.0) + (set! (-> arg0 overide-enable) #f) + (when *debug-segment* + (mem-copy! (the-as pointer *overide-mood-color-table*) (the-as pointer *no-cloud-mood-color-table*) 256) + (mem-copy! (the-as pointer *overide-mood-fog-table*) (the-as pointer *no-cloud-clear-mood-fog-table*) 384) + (dotimes (v1-8 8) + (set! (-> *overide-mood-color-table* data v1-8 lgt-color w) 1.0) + (set! (-> *overide-mood-color-table* data v1-8 amb-color w) 1.0) + (set! (-> *overide-mood-fog-table* data v1-8 fog-color w) 1.0) + (set! (-> *overide-mood-fog-table* data v1-8 fog-dists x) + (* 0.00024414062 (-> *overide-mood-fog-table* data v1-8 fog-dists x)) + ) + (set! (-> *overide-mood-fog-table* data v1-8 fog-dists y) + (* 0.00024414062 (-> *overide-mood-fog-table* data v1-8 fog-dists y)) + ) + (set-vector! (-> *time-of-day-context* times v1-8) 1.0 1.0 1.0 1.0) + ) + #f + ) + ) + +;; definition for function set-filter-color! +;; WARN: Return type mismatch int vs none. +(defun set-filter-color! ((arg0 float) (arg1 float) (arg2 float)) + (set-vector! (-> *time-of-day-context* filter-color) arg0 arg1 arg2 1.0) + 0 + (none) + ) + +;; definition for function tod-madd! +(defun tod-madd! ((arg0 vector) (arg1 vector) (arg2 vector)) + (local-vars (v0-0 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (.mov vf6 arg2) + (.lvf vf4 (&-> arg0 quad)) + (.lvf vf5 (&-> arg1 quad)) + (.mul.w.vf acc vf4 vf0) + (.add.mul.x.vf vf4 vf5 vf6 acc) + (.svf (&-> arg0 quad) vf4) + (.mov v0-0 vf4) + v0-0 + ) + ) + +;; definition for function update-environment-colors +(defun update-environment-colors ((arg0 time-of-day-context)) + (let* ((v1-0 (-> arg0 light-group)) + (s4-0 (-> v1-0 0 ambi color)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (let ((s2-0 (-> arg0 current-prt-color)) + (s3-0 (-> arg0 current-env-color)) + ) + (vector4-lerp! s5-0 (-> v1-0 0 dir0 color) (-> v1-0 0 dir1 color) (-> v1-0 0 dir1 extra x)) + (when (and (= (-> s2-0 x) 0.0) (= (-> s2-0 y) 0.0) (= (-> s2-0 z) 0.0)) + (set! (-> s2-0 x) (* 0.5 (+ (-> s4-0 x) (* 0.5 (+ (-> s4-0 x) (-> s5-0 x)))))) + (set! (-> s2-0 y) (* 0.5 (+ (-> s4-0 y) (* 0.5 (+ (-> s4-0 y) (-> s5-0 y)))))) + (set! (-> s2-0 z) (* 0.5 (+ (-> s4-0 z) (* 0.5 (+ (-> s4-0 z) (-> s5-0 z)))))) + (set! (-> s2-0 w) 1.0) + ) + (when (and (= (-> s3-0 x) 0.0) (= (-> s3-0 y) 0.0) (= (-> s3-0 z) 0.0)) + (set! (-> s3-0 x) (* 48.0 (+ (-> s5-0 x) (* 0.5 (+ (-> s4-0 x) (-> s5-0 x)))))) + (set! (-> s3-0 y) (* 48.0 (+ (-> s5-0 y) (* 0.5 (+ (-> s4-0 y) (-> s5-0 y)))))) + (set! (-> s3-0 z) (* 48.0 (+ (-> s5-0 z) (* 0.5 (+ (-> s4-0 z) (-> s5-0 z)))))) + (set! (-> s3-0 w) 128.0) + ) + ) + (let* ((f0-23 (fmax (fmax (-> s4-0 x) (-> s4-0 y)) (-> s4-0 z))) + (f2-14 (fmax (fmax (-> s5-0 x) (-> s5-0 y)) (-> s5-0 z))) + (f0-27 (fmin 0.85 (- 1.0 (/ (* 0.5 f2-14) (+ f0-23 f2-14))))) + (v0-1 (-> arg0 current-shadow-color)) + ) + (set! (-> v0-1 x) f0-27) + (set! (-> v0-1 y) f0-27) + (set! (-> v0-1 z) f0-27) + (set! (-> v0-1 w) 1.0) + v0-1 + ) + ) + ) + +;; definition for function update-time-of-day +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun update-time-of-day ((arg0 time-of-day-context)) + (with-pp + (set! (-> arg0 exterior-level) #f) + (init-weather! *mood-control*) + (update-colors-for-time *sky-work* (-> arg0 time)) + (cond + ((-> arg0 overide-enable) + (mem-copy! (the-as pointer (-> *overide-table* mood-fog-table)) (the-as pointer *overide-mood-fog-table*) 384) + (mem-copy! + (the-as pointer (-> *overide-table* mood-color-table)) + (the-as pointer *overide-mood-color-table*) + 256 + ) + (dotimes (v1-7 8) + (vector-float*! + (the-as vector (-> *overide-table* mood-fog-table data v1-7)) + (the-as vector (-> *overide-table* mood-fog-table data v1-7)) + (-> *overide-table* mood-fog-table data v1-7 fog-color w) + ) + (vector-float*! + (the-as vector (-> *overide-table* mood-color-table data v1-7)) + (the-as vector (-> *overide-table* mood-color-table data v1-7)) + (-> *overide-table* mood-color-table data v1-7 lgt-color w) + ) + (vector-float*! + (the-as vector (+ (the-as uint (-> *overide-table* mood-color-table data 0 amb-color)) (* v1-7 32))) + (the-as vector (+ (the-as uint (-> *overide-table* mood-color-table data 0 amb-color)) (* v1-7 32))) + (-> *overide-table* mood-color-table data v1-7 amb-color w) + ) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-color w) 128.0) + (set! (-> *overide-table* mood-color-table data v1-7 lgt-color w) 0.0) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-dists x) + (* 4096.0 (-> *overide-table* mood-fog-table data v1-7 fog-dists x)) + ) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-dists y) + (* 4096.0 (-> *overide-table* mood-fog-table data v1-7 fog-dists y)) + ) + ) + (let ((s5-0 (-> *level* default-level mood-context))) + (clear-mood-times s5-0) + (update-mood-exterior s5-0 *overide-table* (-> arg0 time) 6) + (update-mood-itimes s5-0) + ) + ) + (else + (let ((s5-1 *mood-control*)) + (set! (-> arg0 current-clouds cloud-min) (-> s5-1 mood-clouds cloud-min)) + (set! (-> arg0 current-clouds cloud-max) (-> s5-1 mood-clouds cloud-max)) + (let ((s4-0 (-> *level* default-level mood-context))) + (clear-mood-times s4-0) + (update-mood-exterior s4-0 s5-1 (-> arg0 time) 6) + (update-mood-itimes s4-0) + ) + ) + ) + ) + (vector-float*! (-> arg0 filter) (-> arg0 filter-color) (-> arg0 filter-color w)) + (set! (-> arg0 sky) #f) + (set! (-> arg0 use-camera-other) #f) + (set! (-> arg0 target-interp) 0.0) + (let ((f0-16 4096000.0)) + (dotimes (v1-19 (-> *level* length)) + (let ((a0-50 (-> *level* level v1-19))) + (when (= (-> a0-50 status) 'active) + (if (-> a0-50 info sky) + (set! (-> arg0 sky) #t) + ) + (if (-> a0-50 info use-camera-other) + (set! (-> arg0 use-camera-other) (the-as basic #t)) + ) + (set! f0-16 (fmin f0-16 (-> a0-50 info fog-height))) + ) + ) + ) + (set-fog-height! f0-16) + ) + (if (-> arg0 sky) + (set! (-> (&-> *level* default-level texture-anim-array 9) 0) *sky-texture-anim-array*) + (set! (-> (&-> *level* default-level texture-anim-array 9) 0) #f) + ) + (let ((s5-2 (level-get-target-inside *level*))) + (dotimes (s4-1 6) + (let ((s3-0 (-> *level* level s4-1))) + (case (-> s3-0 status) + (('active 'loaded) + (when (not (paused?)) + (cond + ((= s3-0 s5-2) + (if *teleport* + (set! (-> arg0 interp s4-1) 1.0) + (set! (-> arg0 interp s4-1) (fmin 1.0 (+ 0.0166 (-> arg0 interp s4-1)))) + ) + ) + (*teleport* + (set! (-> arg0 interp s4-1) 0.0) + ) + (else + (set! (-> arg0 interp s4-1) (fmax 0.0 (+ -0.0166 (-> arg0 interp s4-1)))) + ) + ) + ) + (let ((s2-0 (-> pp clock))) + (set! (-> pp clock) (-> *display* real-clock)) + (clear-mood-times (-> s3-0 mood-context)) + ((-> s3-0 mood-func) (-> s3-0 mood-context) (-> arg0 time) s4-1) + (when (-> arg0 overide-enable) + (let ((s1-0 (new 'stack-no-clear 'vector))) + (dotimes (s0-0 8) + (let ((a1-48 (-> s3-0 mood-context times s0-0))) + (vector-float*! (the-as vector s1-0) (-> arg0 times s0-0) (-> arg0 times s0-0 w)) + (vector4-mul! (the-as vector4 a1-48) (the-as vector4 a1-48) (the-as vector4 s1-0)) + ) + ) + ) + ) + (update-mood-itimes (-> s3-0 mood-context)) + (set! (-> pp clock) s2-0) + ) + ) + (else + (set! (-> arg0 interp s4-1) 0.0) + ) + ) + ) + ) + ) + (if (and (-> arg0 exterior-level) (!= (-> *mood-control* lightning-flash) 0.0)) + (set! (-> *display* force-sync) (the-as uint 2)) + ) + (let ((f0-27 0.0)) + (dotimes (v1-79 6) + (+! f0-27 (-> arg0 interp v1-79)) + ) + (when (!= f0-27 0.0) + (dotimes (v1-83 6) + (set! (-> arg0 interp v1-83) (/ (-> arg0 interp v1-83) f0-27)) + ) + (let ((v1-86 (-> arg0 current-fog))) + (dotimes (a0-76 103) + (set! (-> (the-as (pointer int128) (+ (* a0-76 16) (the-as int v1-86)))) (the int128 0)) + ) + ) + (let ((s5-3 (-> arg0 current-fog)) + (s4-2 (-> *mood-control* range)) + ) + (set! (-> s4-2 quad) (the-as uint128 0)) + (set! (-> arg0 max-rain) 0.0) + (set! (-> arg0 fog-mult) 0.0) + (set! (-> arg0 ocean-alpha) 0.0) + (dotimes (s3-1 6) + (let ((f30-0 (-> arg0 interp s3-1)) + (s2-1 *level*) + ) + (when (!= f30-0 0.0) + (let ((a2-20 (+ (the-as uint (-> s2-1 level0 mood-context)) (* 5232 s3-1)))) + (vector4-array-madd! + (the-as (inline-array vector4) s5-3) + (the-as (inline-array vector4) s5-3) + (the-as (inline-array vector4) a2-20) + f30-0 + 103 + ) + ) + (let ((a2-21 (-> s2-1 level s3-1 info mood-range))) + (vector4-madd! (the-as vector4 s4-2) (the-as vector4 s4-2) (the-as vector4 a2-21) f30-0) + ) + (+! (-> arg0 max-rain) (* (-> s2-1 level s3-1 info max-rain) f30-0)) + (+! (-> arg0 fog-mult) (* (-> s2-1 level s3-1 info fog-mult) f30-0)) + (+! (-> arg0 ocean-alpha) (* (-> s2-1 level s3-1 info ocean-alpha) f30-0)) + ) + ) + ) + ) + (dotimes (s5-4 8) + (dotimes (s4-3 3) + (let ((v1-119 (+ (+ (* 48 s4-3) 140 (* 192 s5-4)) (the-as int arg0)))) + (vector-normalize! (the-as vector (+ v1-119 0)) 1.0) + ) + ) + ) + ) + ) + (if (and (-> arg0 overide-enable) (!= (-> *time-of-day-context* mode) 8)) + (mem-copy! + (the-as pointer (-> arg0 current-fog)) + (the-as + pointer + (-> *overide-table* + mood-fog-table + data + (the-as uint (logand (-> *time-of-day-context* mode) (time-of-day-palette-id unk0 unk1 unk2))) + ) + ) + 48 + ) + ) + (update-environment-colors arg0) + (let ((v1-134 (-> arg0 current-fog))) + (let ((a0-87 (-> v1-134 fog-color))) + (set! *fog-color* + (new 'static 'rgba :r (the int (-> a0-87 x)) :g (the int (-> a0-87 y)) :b (the int (-> a0-87 z))) + ) + (set! (-> *fog-texture-work* color) + (the-as + uint + (logior (logior (logior (shr (shl (the int (-> a0-87 z)) 56) 40) (shr (shl (the int (-> a0-87 y)) 56) 48)) + (shr (shl (the int (-> a0-87 x)) 56) 56) + ) + (shr (shl (the int (-> a0-87 x)) 56) 56) + ) + ) + ) + ) + (let ((a0-92 (-> v1-134 erase-color))) + (set! (-> arg0 erase-color) + (new 'static 'rgba :a #x80 :b (the int (-> a0-92 z)) :g (the int (-> a0-92 y)) :r (the int (-> a0-92 x))) + ) + ) + (let ((f0-58 (-> v1-134 fog-dists x)) + (f1-18 (-> v1-134 fog-dists y)) + ) + (let ((f3-0 (-> v1-134 fog-dists z)) + (f2-2 (-> v1-134 fog-dists w)) + ) + (set! (-> *math-camera* fog-start) f0-58) + (set! (-> *math-camera* fog-end) f1-18) + (set! (-> *math-camera* fog-max) f3-0) + (set! (-> *math-camera* fog-min) f2-2) + (set! (-> *fog-texture-work* alpha-near) (* 0.003921569 (the float (- 255 (the int f3-0))))) + (set! (-> *fog-texture-work* alpha-far) (* 0.003921569 (the float (- 255 (the int f2-2))))) + ) + (set! (-> *fog-texture-work* alpha-delta) + (- (-> *fog-texture-work* alpha-far) (-> *fog-texture-work* alpha-near)) + ) + (set! (-> *fog-texture-work* fog-near) f0-58) + (set! (-> *fog-texture-work* fog-far) f1-18) + (set! (-> *fog-texture-work* fog-delta) (- f1-18 f0-58)) + ) + ) + (set-cloud-minmax! (-> arg0 current-clouds cloud-min) (-> arg0 current-clouds cloud-max)) + (reset! *palette-fade-controls*) + 0 + (none) + ) + ) + +;; definition for function calc-fade-from-fog +(defun calc-fade-from-fog ((arg0 vector)) + (let* ((f0-0 (vector-vector-distance (math-camera-pos) arg0)) + (v1-1 (-> *time-of-day-context* current-fog)) + (f1-0 (-> v1-1 fog-dists x)) + (f2-0 (-> v1-1 fog-dists y)) + (f3-1 (* 0.003921569 (-> v1-1 fog-dists w))) + (f4-2 (* 0.003921569 (-> v1-1 fog-dists z))) + ) + (+ f4-2 (* (fmax 0.0 (fmin 1.0 (/ (- f0-0 f1-0) (- f2-0 f1-0)))) (- f3-1 f4-2))) + ) + ) + +;; definition for method 10 of type palette-fade-controls +;; INFO: Used lq/sq +(defmethod set-fade! palette-fade-controls ((obj palette-fade-controls) (arg0 int) (arg1 float) (arg2 float) (arg3 vector)) + (cond + ((and (>= arg0 0) (< arg0 8)) + (let ((v1-3 (-> obj control arg0))) + (when (< arg2 (-> v1-3 actor-dist)) + (if arg3 + (set! (-> v1-3 trans quad) (-> arg3 quad)) + ) + (set! (-> v1-3 fade) (fmax 0.0 (fmin 1.993 arg1))) + (set! (-> v1-3 actor-dist) arg2) + ) + ) + ) + (else + (format 0 "ERROR: Bogus palette-fade-control index!~%") + ) + ) + ) + +;; definition for method 9 of type palette-fade-controls +;; WARN: Return type mismatch int vs none. +(defmethod reset! palette-fade-controls ((obj palette-fade-controls)) + (countdown (v1-0 8) + (let ((a1-2 (-> obj control v1-0))) + (set! (-> a1-2 fade) 0.0) + (set! (-> a1-2 actor-dist) 4096000000.0) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(start-time-of-day) diff --git a/goal_src/jak2/engine/gfx/mood/weather-part.gc b/goal_src/jak2/engine/gfx/mood/weather-part.gc index 7307116d00..8dcc745bb0 100644 --- a/goal_src/jak2/engine/gfx/mood/weather-part.gc +++ b/goal_src/jak2/engine/gfx/mood/weather-part.gc @@ -7,3 +7,56 @@ ;; DECOMP BEGINS +;; all these are stubbed out + +(defun update-rain ((a0-0 target)) + (none) + ) + +(defun update-snow ((arg target)) + (none)) + +(set! (-> *part-group-id-table* 4) + (new 'static 'sparticle-launch-group + :length 0 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag always-draw) + :name "group-green-sun" + :launcher (new 'static 'inline-array sparticle-group-item 0) + :scale-x 1.0 + :scale-y 1.0 + :scale-z 1.0 + :bounds (new 'static 'sphere :w 286720.0) + ) + ) + +(set! (-> *part-group-id-table* 3) + (new 'static 'sparticle-launch-group + :length 0 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag always-draw) + :name "group-sun" + :launcher (new 'static 'inline-array sparticle-group-item 0) + :scale-x 1.0 + :scale-y 1.0 + :scale-z 1.0 + :bounds (new 'static 'sphere :w 286720.0) + ) + ) + +(set! (-> *part-group-id-table* 5) + (new 'static 'sparticle-launch-group + :length 0 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag always-draw) + :name "group-moon" + :launcher (new 'static 'inline-array sparticle-group-item 0) + :scale-x 1.0 + :scale-y 1.0 + :scale-z 1.0 + :bounds (new 'static 'sphere :w 286720.0) + ) + ) diff --git a/goal_src/jak2/engine/gfx/sky/sky-h.gc b/goal_src/jak2/engine/gfx/sky/sky-h.gc index 8f9cfc0aaa..66cd6d016f 100644 --- a/goal_src/jak2/engine/gfx/sky/sky-h.gc +++ b/goal_src/jak2/engine/gfx/sky/sky-h.gc @@ -5,6 +5,8 @@ ;; name in dgo: sky-h ;; dgos: ENGINE, GAME +(define-extern close-sky-buffer (function dma-buffer none)) + ;; DECOMP BEGINS (deftype sky-color-hour (structure) @@ -231,8 +233,8 @@ (:methods (init-sun-data! (_type_ int float float float) none 9) (init-orbit-settings! (_type_ int float float float float float float) none 10) - (sky-work-method-11 () none 11) - (sky-work-method-12 () none 12) + (update-colors-for-time (_type_ float) none 11) + (update-time-and-speed (_type_ float float) none 12) (draw (_type_) none 13) (sky-work-method-14 () none 14) (sky-work-method-15 () none 15) @@ -263,6 +265,4 @@ 0 - - - +(define-extern *sky-work* sky-work) \ No newline at end of file diff --git a/goal_src/jak2/engine/gfx/sky/sky-tng.gc b/goal_src/jak2/engine/gfx/sky/sky-tng.gc index 712a2c422d..0f4703e23d 100644 --- a/goal_src/jak2/engine/gfx/sky/sky-tng.gc +++ b/goal_src/jak2/engine/gfx/sky/sky-tng.gc @@ -7,3 +7,84 @@ ;; DECOMP BEGINS + +;; TODO + +(defun close-sky-buffer ((arg0 dma-buffer)) + (nop!) + (let ((v1-0 #x8000) + (v0-0 (-> arg0 base)) + ) + (set! (-> (the-as (pointer uint128) v0-0)) (the uint128 0)) + (nop!) + (set! (-> (the-as (pointer int32) v0-0)) v1-0) + (let ((v0-1 (&+ v0-0 16))) + ;; to save like 1 instruction they put this in the delay slot of the jr-ra + ;;(.jr ra-0) + (set! (-> arg0 base) v0-1) + ) + ) + (none) + ) + +(defmethod update-time-and-speed sky-work ((obj sky-work) (arg0 float) (arg1 float)) + (if (and (level-get-target-inside *level*) (= (-> (level-get-target-inside *level*) info taskname) 'nest)) + (set! arg1 (* 10.0 arg1)) + ) + (sky-make-sun-data obj 0 arg0) + (sky-make-sun-data obj 1 arg0) + (sky-make-moon-data obj arg0) + (+! (-> obj off-s) (the int (* -8.0 arg1))) + (+! (-> obj off-t) (the int (* 2.0 arg1))) + (set! (-> obj time) arg0) + 0 + (none) + ) + +(defmethod update-colors-for-time sky-work ((obj sky-work) (arg0 float)) + 0 + 0 + 0.0 + (let ((s5-0 *no-cloud-mood-color-table*)) + (let ((s3-0 (-> *level* default-level mood-context)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (let* ((v1-3 (the int arg0)) + (f0-4 (- arg0 (the float v1-3))) + (f1-3 (- 1.0 f0-4)) + (a0-3 (/ v1-3 24)) + (a1-2 (-> *mood-interp-table* hour (- v1-3 (* 24 a0-3)))) + (a0-6 (-> a1-2 snapshot1)) + (v1-7 (-> a1-2 snapshot2)) + (f0-6 (+ (* f1-3 (-> a1-2 morph-start)) (* f0-4 (-> a1-2 morph-end)))) + ) + (cond + ((= a0-6 v1-7) + (set! (-> obj sun0-color quad) (-> s5-0 data a0-6 lgt-color quad)) + ) + (else + (let ((a1-5 (-> s5-0 data a0-6)) + (v1-11 (-> s5-0 data v1-7)) + ) + (vector4-lerp! (the-as vector (-> obj sun0-color)) (-> a1-5 lgt-color) (-> v1-11 lgt-color) f0-6) + ) + ) + ) + ) + (set! (-> obj sun0-color-lower quad) (-> s3-0 times 1 quad)) + (set! (-> obj ambi-color-lower quad) (-> s3-0 times 0 quad)) + (set-vector! s4-0 1.9921875 1.9921875 1.9921875 1.0) + (vector4-lerp! + (the-as vector (-> obj ambi-color)) + (the-as vector (-> obj ambi-color-lower)) + s4-0 + (-> *mood-control* lightning-flash) + ) + ) + (set! (-> obj sun0-color quad) (-> obj sun0-color quad)) + (set! (-> obj sun1-color quad) (-> s5-0 data 7 lgt-color quad)) + (set! (-> obj moon-color quad) (-> s5-0 data 6 lgt-color quad)) + ) + 0 + (none) + ) \ No newline at end of file diff --git a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc index 2c81c626d5..1257ff51e3 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc @@ -109,6 +109,7 @@ (start-dead 2) (launch-asap 3) (bit6 6) + (bit7 7) ) (defenum sp-launch-state-flags @@ -279,7 +280,7 @@ (:methods (initialize (_type_ sparticle-launch-group process) none 9) (sparticle-launch-control-method-10 (_type_ vector) symbol 10) - (sparticle-launch-control-method-11 (_type_ vector) none 11) + (spawn (_type_ vector) none 11) (sparticle-launch-control-method-12 (_type_ matrix) none 12) (sparticle-launch-control-method-13 (_type_ cspace) none 13) (kill-and-free-particles (_type_) none 14) diff --git a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc index efc800725a..da3aabcdba 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc @@ -569,6 +569,11 @@ ;; ERROR: failed type prop at 32: Could not figure out load: (set! a1 (l.w (+ gp 104))) +;; TODO stub +(defmethod spawn sparticle-launch-control ((obj sparticle-launch-control) (arg0 vector)) + (none) + ) + (defmethod initialize sparticle-launch-control ((obj sparticle-launch-control) (arg0 sparticle-launch-group) (arg1 process)) (with-pp (let ((s5-0 0)) @@ -655,6 +660,7 @@ ;; WARN: Return type mismatch object vs sparticle-launch-control. (defmethod create-launch-control sparticle-launch-group ((obj sparticle-launch-group) (arg0 process)) + (format 0 "create launch control: ~A ~D~%" arg0 (-> obj length)) (let ((gp-0 (the-as object (new 'process 'sparticle-launch-control (-> obj length))))) (when (zero? (the-as sparticle-launch-control gp-0)) (go process-drawable-art-error "memory") @@ -762,7 +768,7 @@ ) ) ) - (sparticle-launch-control-method-11 obj (-> arg0 trans)) + (spawn obj (-> arg0 trans)) (none) ) @@ -808,7 +814,7 @@ ) ) ) - (sparticle-launch-control-method-11 obj (vector<-cspace! (-> obj origin trans) arg0)) + (spawn obj (vector<-cspace! (-> obj origin trans) arg0)) (none) ) diff --git a/goal_src/jak2/engine/gfx/texture/texture-anim-funcs.gc b/goal_src/jak2/engine/gfx/texture/texture-anim-funcs.gc index eca1afd870..871fbe1116 100644 --- a/goal_src/jak2/engine/gfx/texture/texture-anim-funcs.gc +++ b/goal_src/jak2/engine/gfx/texture/texture-anim-funcs.gc @@ -5,5 +5,8 @@ ;; name in dgo: texture-anim-funcs ;; dgos: ENGINE, GAME +;; temp +(define *fog-texture-work* (new 'static 'fog-texture-work :const (new 'static 'vector :x 0.00390625))) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/gfx/texture/texture-anim-h.gc b/goal_src/jak2/engine/gfx/texture/texture-anim-h.gc index 685ad33d4a..90094ac4d0 100644 --- a/goal_src/jak2/engine/gfx/texture/texture-anim-h.gc +++ b/goal_src/jak2/engine/gfx/texture/texture-anim-h.gc @@ -47,22 +47,22 @@ ) (deftype texture-anim (structure) - ((num-layers uint32 :offset-assert 0) - (func basic :offset-assert 4) - (func-id basic :offset 4) - (init-func basic :offset-assert 8) - (init-func-id basic :offset 8) - (tex basic :offset-assert 12) - (tex-name basic :offset-assert 16) - (extra vector :inline :offset-assert 32) - (color uint32 :offset-assert 48) - (frame-time float :offset-assert 52) - (frame-delta float :offset-assert 56) - (frame-mod float :offset-assert 60) - (test uint64 :offset-assert 64) - (alpha uint64 :offset-assert 72) - (clamp uint64 :offset-assert 80) - (data uint8 :dynamic :offset-assert 88) + ((num-layers uint32 :offset-assert 0) + (func basic :offset-assert 4) + (func-id basic :offset 4) + (init-func basic :offset-assert 8) + (init-func-id basic :offset 8) + (tex basic :offset-assert 12) + (tex-name basic :offset-assert 16) + (extra vector :inline :offset-assert 32) + (color rgba :offset-assert 48) + (frame-time float :offset-assert 52) + (frame-delta float :offset-assert 56) + (frame-mod float :offset-assert 60) + (test gs-test :offset-assert 64) + (alpha gs-alpha :offset-assert 72) + (clamp gs-clamp :offset-assert 80) + (data texture-anim-layer :dynamic :offset-assert 88) ) :method-count-assert 11 :size-assert #x58 diff --git a/goal_src/jak2/engine/gfx/texture/texture-anim-tables.gc b/goal_src/jak2/engine/gfx/texture/texture-anim-tables.gc index dec86f7299..71bc356cd4 100644 --- a/goal_src/jak2/engine/gfx/texture/texture-anim-tables.gc +++ b/goal_src/jak2/engine/gfx/texture/texture-anim-tables.gc @@ -12,4 +12,12 @@ (define-extern *skull-gem-texture-anim-array* texture-anim-array) (define-extern *waterfall-texture-anim-array* texture-anim-array) (define-extern *waterfall-b-texture-anim-array* texture-anim-array) -(define-extern *bomb-texture-anim-array* texture-anim-array) \ No newline at end of file +(define-extern *bomb-texture-anim-array* texture-anim-array) + +(defun set-fog-height! ((arg0 float)) + (none) + ) + +(defun set-cloud-minmax! ((a0-0 float) (a1-0 float)) + (none) + ) \ No newline at end of file diff --git a/goal_src/jak2/engine/level/bsp-h.gc b/goal_src/jak2/engine/level/bsp-h.gc index ae1878a345..f80989ba7c 100644 --- a/goal_src/jak2/engine/level/bsp-h.gc +++ b/goal_src/jak2/engine/level/bsp-h.gc @@ -49,6 +49,7 @@ ;; 0 28 (all-visible-list (pointer uint16) :offset-assert 32) (visible-list-length int16 :offset-assert 36) + (extra-vis-list-length int16 :offset-assert 38) (drawable-trees drawable-tree-array :offset-assert 40) (pat pointer :offset-assert 44) (pat-length int32 :offset-assert 48) @@ -82,8 +83,9 @@ (collide-hash collide-hash :offset-assert 196) ;; 200 is some array (wind-array-length int32 :offset 204) - ;; 216 is a vector array - ;; (vec-array (pointer vector) :offset 216) ; TODO see - `update-visible` hits assertion + + (vis-spheres vector-array :offset 216) + (region-tree drawable-tree-region-prim :offset 252) (tfrag-masks texture-masks-array :offset-assert 256) (tfrag-closest (pointer float) :offset-assert 260) diff --git a/goal_src/jak2/engine/level/level-h.gc b/goal_src/jak2/engine/level/level-h.gc index 1d7b03420a..31685b506b 100644 --- a/goal_src/jak2/engine/level/level-h.gc +++ b/goal_src/jak2/engine/level/level-h.gc @@ -314,7 +314,7 @@ (bsp-name (_type_) symbol 13) (compute-memory-usage! (_type_ symbol) memory-usage-block 14) (inside-boxes-check (_type_ vector) symbol 15) - (level-method-16 () none 16) + (update-vis! (_type_ level-vis-info uint (pointer uint8)) symbol 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) (login-begin (_type_) _type_ 19) diff --git a/goal_src/jak2/engine/level/level.gc b/goal_src/jak2/engine/level/level.gc index 6cebee6023..4dd66fb800 100644 --- a/goal_src/jak2/engine/level/level.gc +++ b/goal_src/jak2/engine/level/level.gc @@ -519,7 +519,6 @@ ;; if any linking is in progress, do that first. (when (-> obj linking) - (start-debug "load-continue: run linker~%") (when (nonzero? (link-resume)) ;; run linker ;; linker return is nonzero, we're done! (start-debug "link done!~%") @@ -531,6 +530,7 @@ (cond ((= (-> obj load-buffer-mode) (load-buffer-mode borrow)) ;; in this "borrow" mode, load directly to the heap. + (start-debug "kick load borrow case~%") (let ((a2-0 (logand -64 (&+ (-> obj heap current) 63)))) (dgo-load-continue a2-0 a2-0 a2-0) ) diff --git a/goal_src/jak2/engine/level/region-h.gc b/goal_src/jak2/engine/level/region-h.gc index 9802c3e757..b0a056e98e 100644 --- a/goal_src/jak2/engine/level/region-h.gc +++ b/goal_src/jak2/engine/level/region-h.gc @@ -5,6 +5,8 @@ ;; name in dgo: region-h ;; dgos: ENGINE, GAME +(declare-type region-prim-area structure) + ;; DECOMP BEGINS (deftype region (structure) @@ -17,10 +19,11 @@ :size-assert #x10 :flag-assert #xa00000010 (:methods - (region-method-9 () none 9) + (region-method-9 (_type_ vector) symbol 9) ) ) + (deftype region-array (inline-array-class) ((data region :inline :dynamic :offset-assert 16) ) @@ -28,6 +31,8 @@ :size-assert #x10 :flag-assert #x900000010 ) + + (set! (-> region-array heap-base) (the-as uint 16)) (deftype drawable-region-prim (drawable) @@ -38,11 +43,12 @@ :flag-assert #x1400000020 (:methods (debug-draw-region (_type_ int) none 17) - (drawable-region-prim-method-18 () none 18) - (drawable-region-prim-method-19 () none 19) + (track-region (_type_ region-prim-area) symbol 18) + (within-area? (_type_ region-prim-area) symbol 19) ) ) + (deftype drawable-tree-region-prim (drawable-tree) ((name basic :offset 8) (data2 drawable-inline-array :dynamic :offset 32) @@ -51,27 +57,11 @@ :size-assert #x20 :flag-assert #x1300000020 (:methods - (drawable-tree-region-prim-method-17 () none 17) + (drawable-tree-region-prim-method-17 (_type_ vector) symbol 17) (debug-print (_type_ vector object) none 18) ) ) -(defmethod inspect drawable-tree-region-prim ((obj drawable-tree-region-prim)) - (when (not obj) - (return obj) - ) - (format #t "[~8x] ~A~%" obj (-> obj type)) - (format #t "~1Tid: ~D~%" (-> obj id)) - (format #t "~1Tbsphere: ~`vector`P~%" (-> obj bsphere)) - (format #t "~1Tlength: ~D~%" (-> obj length)) - (format #t "~1Tdata[0] @ #x~X~%" (-> obj data)) - (dotimes (s5-0 (-> obj length)) - (format #t "~T [~D]~1Tdata: ~A~%" s5-0 (-> obj data s5-0)) - ) - (format #t "~1Tname: ~A~%" (-> obj name)) - obj - ) - (deftype drawable-inline-array-region-prim (drawable-inline-array) ((data drawable-region-prim 1 :inline :offset-assert 32) @@ -89,6 +79,7 @@ :flag-assert #x1400000020 ) + (deftype region-face-data (structure) ((normal vector :inline :offset-assert 0) (normal-offset float :offset 12) @@ -100,6 +91,7 @@ :flag-assert #x900000020 ) + (deftype drawable-region-face (drawable-region-prim) ((data region-face-data :offset 12) ) @@ -108,6 +100,7 @@ :flag-assert #x1400000020 ) + (deftype region-face-array (inline-array-class) ((data region-face-data :dynamic :offset 20) ) @@ -115,6 +108,8 @@ :size-assert #x14 :flag-assert #x900000014 ) + + (set! (-> region-face-array heap-base) (the-as uint 32)) (deftype drawable-region-volume (drawable-region-prim) @@ -125,6 +120,7 @@ :flag-assert #x1400000020 ) + (deftype region-prim-list (structure) ((num-items int32 :offset-assert 0) (items drawable-region-prim 320 :offset-assert 4) @@ -133,8 +129,3 @@ :size-assert #x504 :flag-assert #x900000504 ) - - -(define-extern region-prim-lookup-by-id (function int drawable-region-prim)) -(define-extern region-lookup-by-id (function int region)) - diff --git a/goal_src/jak2/engine/level/region.gc b/goal_src/jak2/engine/level/region.gc index 7023cffacd..1806e1b8d9 100644 --- a/goal_src/jak2/engine/level/region.gc +++ b/goal_src/jak2/engine/level/region.gc @@ -7,3 +7,706 @@ ;; DECOMP BEGINS +;; WARN: Return type mismatch int vs drawable-region-prim. +(defmethod mem-usage drawable-region-prim ((obj drawable-region-prim) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 50 (-> arg0 length))) + (set! (-> arg0 data 49 name) "region") + (+! (-> arg0 data 49 count) 1) + (let ((v1-6 (asize-of obj))) + (+! (-> arg0 data 49 used) v1-6) + (+! (-> arg0 data 49 total) (logand -16 (+ v1-6 15))) + ) + (mem-usage (-> obj region) arg0 (logior arg1 128)) + (the-as drawable-region-prim 0) + ) + +;; WARN: Return type mismatch int vs drawable-inline-array-region-prim. +(defmethod mem-usage drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 1 (-> arg0 length))) + (set! (-> arg0 data 0 name) (symbol->string 'drawable-group)) + (+! (-> arg0 data 0 count) 1) + (let ((v1-7 32)) + (+! (-> arg0 data 0 used) v1-7) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-7 15))) + ) + (dotimes (s3-0 (-> obj length)) + (mem-usage (-> obj data s3-0) arg0 arg1) + ) + (the-as drawable-inline-array-region-prim 0) + ) + +(defmethod draw drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 drawable-tree-region-prim) (arg1 display-frame)) + 0 + (none) + ) + +(defmethod unpack-vis drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 (pointer int8)) (arg1 (pointer int8))) + arg1 + ) + +(defmethod collect-regions drawable-region-prim ((obj drawable-region-prim) (area-of-interest sphere) (_count int) (region-list region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (dotimes (count _count) + (when (spheres-overlap? area-of-interest (the-as sphere (-> obj bsphere))) + (set! (-> region-list items (-> region-list num-items)) obj) + (+! (-> region-list num-items) 1) + ) + (&+! obj 32) + ) + 0 + (none) + ) + +(defmethod collect-regions drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (the-as drawable-region-prim (-> obj data)) arg0 (-> obj length) arg2) + 0 + (none) + ) + +(defmethod collect-regions drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (-> obj data2 0) arg0 (-> obj length) arg2) + 0 + (none) + ) + +(defmethod debug-draw-region drawable-region-prim ((obj drawable-region-prim) (arg0 int)) + (local-vars (sv-32 vector2h) (sv-36 vector)) + (set! sv-32 (new 'stack 'vector2h)) + (set! sv-36 (-> obj bsphere)) + (add-debug-x #t (bucket-id debug-no-zbuf1) sv-36 (new 'static 'rgba :r #xff :g #xff :a #x80)) + (when (nonzero? (-> obj region)) + (let ((s5-0 add-debug-text-3d) + (s4-0 #t) + (s3-0 318) + ) + (format (clear *temp-string*) "region-~D~%" (-> obj region id)) + (s5-0 s4-0 (the-as bucket-id s3-0) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + (let ((s5-1 (-> obj region on-enter))) + (when s5-1 + (let ((s4-1 add-debug-text-3d) + (s3-1 #t) + (s2-1 318) + ) + (format (clear *temp-string*) "(on-enter ~S)" s5-1) + (s4-1 s3-1 (the-as bucket-id s2-1) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((s5-2 (-> obj region on-inside))) + (when s5-2 + (let ((s4-2 add-debug-text-3d) + (s3-2 #t) + (s2-2 318) + ) + (format (clear *temp-string*) "(on-inside ~S)" s5-2) + (s4-2 s3-2 (the-as bucket-id s2-2) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((gp-1 (-> obj region on-exit))) + (when gp-1 + (let ((s5-3 add-debug-text-3d) + (s4-3 #t) + (s3-3 318) + ) + (format (clear *temp-string*) "(on-exit ~S)" gp-1) + (s5-3 s4-3 (the-as bucket-id s3-3) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "TODO" + #f + ) + +(defmethod within-area? drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + #f + ) + +;; WARN: Function (method 9 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-entered-region! region-prim-area ((obj region-prim-area) (region-sphere drawable-region-sphere)) + "Enumerates through the objects `region-enter-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and increment `region-enter-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-entered (-> obj region-enter-count))) + (let ((region (-> region-sphere region))) + (countdown (idx regions-entered) + (if (= (-> obj region-enter-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-enter-list regions-entered) (the-as region-prim-area region)) + ) + (set! (-> obj region-enter-prim-list regions-entered) region-sphere) + (set! (-> obj region-enter-count) (+ regions-entered 1)) + ) + 0 + (none) + ) + +;; WARN: Function (method 10 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-exited-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-exit-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and increment `region-exit-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-exited (-> obj region-exit-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-exited) + (if (= (-> obj region-exit-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-exit-list regions-exited) (the-as region-prim-area region)) + ) + (set! (-> obj region-exit-prim-list regions-exited) arg0) + (set! (-> obj region-exit-count) (+ regions-exited 1)) + ) + 0 + (none) + ) + +;; WARN: Function (method 11 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-inside-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-inside-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and increment `region-inside-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-inside (-> obj region-inside-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-inside) + (if (= (-> obj region-inside-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-inside-list regions-inside) (the-as region-prim-area region)) + ) + (set! (-> obj region-inside-prim-list regions-inside) arg0) + (set! (-> obj region-inside-count) (+ regions-inside 1)) + ) + 0 + (none) + ) + +;; WARN: Function (method 12 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-start-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-start-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and increment `region-start-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-started (-> obj region-start-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-started) + (if (= (-> obj region-start-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-start-list regions-started) (the-as region-prim-area region)) + ) + (set! (-> obj region-start-prim-list regions-started) arg0) + (set! (-> obj region-start-count) (+ regions-started 1)) + ) + 0 + (none) + ) + +(defmethod debug-draw-region drawable-region-sphere ((obj drawable-region-sphere) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let ((a2-0 (-> obj bsphere))) + (add-debug-sphere #t (bucket-id debug2) a2-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x80)) + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "TODO" + (-> obj region) + (let ((area-of-interest (-> obj bsphere))) + (if (< 0.0 (ray-sphere-intersect (-> area pos) (-> area ray) area-of-interest (-> area-of-interest w))) + (track-entered-region! area obj) + ) + (if (< 0.0 (ray-sphere-intersect + (-> area unknown-vector-uiyb1) + (-> area unknown-vector-t3edh) + area-of-interest + (-> area-of-interest w) + ) + ) + (track-exited-region! area obj) + ) + (if (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere area-of-interest)) + (track-start-region! area obj) + ) + (when (spheres-overlap? (the-as sphere (-> area unknown-vector-uiyb1)) (the-as sphere area-of-interest)) + (track-inside-region! area obj) + #t + ) + ) + ) + +(defmethod within-area? drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere (-> obj bsphere))) + ) + +(defmethod debug-draw-region drawable-region-face ((obj drawable-region-face) (arg0 int)) + (when (zero? arg0) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + ) + (let ((s5-0 (-> obj bsphere))) + (add-debug-vector + #t + (bucket-id debug-no-zbuf1) + s5-0 + (-> obj data normal) + (meters 2) + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) + ) + (add-debug-bound + (bucket-id debug2) + (-> obj data points) + (the-as int (-> obj data num-points)) + (new 'static 'rgba :r #xff :g #xff :a #x80) + (new 'static 'rgba :r #xff :a #x80) + 0 + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-face ((obj drawable-region-face) (arg0 region-prim-area)) + "TODO" + (local-vars (sv-48 vector) (sv-52 vector) (sv-56 object)) + (-> obj region) + (let* ((s4-0 (-> obj data)) + (v1-1 (-> s4-0 normal)) + (a0-3 (>= 0.0 (- (vector-dot (-> arg0 pos) v1-1) (-> v1-1 w)))) + (s3-0 (>= 0.0 (- (vector-dot (-> arg0 unknown-vector-uiyb1) v1-1) (-> v1-1 w)))) + ) + (when (!= a0-3 s3-0) + (when (nonzero? (-> s4-0 num-points)) + (set! sv-48 (new 'stack-no-clear 'vector)) + (set! sv-52 (new 'stack-no-clear 'vector)) + (set! sv-56 (the-as (inline-array vector) (-> s4-0 points))) + (ray-plane-intersect + sv-48 + sv-52 + (-> arg0 pos) + (-> arg0 ray) + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (let ((s4-1 (-> s4-0 num-points)) + (s2-0 0) + (s1-0 (vector-negate! (new 'stack-no-clear 'vector) sv-52)) + ) + (while (< (+ s2-0 2) (the-as int s4-1)) + (if (the-as + (inline-array vector) + (or (point-in-triangle-cross + sv-48 + sv-52 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (the-as (inline-array vector) (point-in-triangle-cross + sv-48 + s1-0 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + ) + ) + ) + (goto cfg-17) + ) + (+! s2-0 1) + (set! sv-56 (-> (the-as (inline-array vector) sv-56) 1)) + ) + ) + (set! s3-0 s3-0) + (goto cfg-20) + ) + (label cfg-17) + (if s3-0 + (track-entered-region! arg0 (the-as drawable-region-sphere obj)) + (track-exited-region! arg0 (the-as drawable-region-sphere obj)) + ) + ) + (label cfg-20) + s3-0 + ) + ) + +(defmethod debug-draw-region drawable-region-volume ((obj drawable-region-volume) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let* ((s5-0 (-> obj faces length)) + (s4-0 0) + (a0-3 (the-as object (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s4-0 s5-0) + (debug-draw-region (the-as drawable-region-face a0-3) 1) + (+! s4-0 1) + (set! a0-3 (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-volume ((obj drawable-region-volume) (area region-prim-area)) + "TODO" + (if (within-area? obj area) + (track-start-region! area (the-as drawable-region-sphere obj)) + ) + (let* ((s4-0 (-> obj faces length)) + (s3-0 0) + (a0-4 (the-as object (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s3-0 s4-0) + (if (not (track-region (the-as drawable-region-face a0-4) area)) + (return #f) + ) + (+! s3-0 1) + (set! a0-4 (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + (track-inside-region! area (the-as drawable-region-sphere obj)) + #t + ) + +(defmethod within-area? drawable-region-volume ((obj drawable-region-volume) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (let* ((v1-1 (-> obj faces length)) + (a2-0 0) + (a3-2 (the-as object (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< a2-0 v1-1) + (let ((a3-4 (-> (the-as drawable-region-face a3-2) data normal))) + (if (< 0.0 (- (vector-dot (-> arg0 pos) a3-4) (-> a3-4 w))) + (return #f) + ) + ) + (+! a2-0 1) + (set! a3-2 (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + #t + ) + +(defmethod drawable-tree-region-prim-method-17 drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (let* ((s5-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s4-0 0) + (a0-8 (the-as object (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s4-0 s5-0) + (if (within-area? (the-as drawable-region-prim a0-8) (the-as region-prim-area (+ #x70000000 0))) + (return #t) + ) + (+! s4-0 1) + (set! a0-8 (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + #f + ) + +;; WARN: Return type mismatch int vs symbol. +(defmethod region-method-9 region ((obj region) (arg0 vector)) + (local-vars (sv-16 int) (sv-32 int)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (dotimes (s5-0 (-> *level* length)) + (let ((s4-0 (-> *level* level s5-0))) + (when (= (-> s4-0 status) 'active) + (when (nonzero? (-> s4-0 bsp region-trees)) + (let* ((s3-0 (-> s4-0 bsp region-trees length)) + (s2-0 0) + (s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + (while (< s2-0 s3-0) + (let ((s0-0 (-> s1-0 data2 (+ (-> s1-0 length) -1) length))) + (set! sv-16 0) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + (while (< sv-16 s0-0) + (if (and (= (-> (the-as drawable-region-prim sv-32) region) obj) + (within-area? + (the-as drawable-region-prim sv-32) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (return (the-as symbol sv-32)) + ) + (set! sv-16 (+ sv-16 1)) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + ) + ) + (+! s2-0 1) + (set! s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + ) + ) + ) + ) + ) + (the-as symbol #f) + ) + +(defmethod debug-print drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector) (arg1 object)) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg0 0.0) + (let* ((s4-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s3-0 0) + (s2-0 (the-as object (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s3-0 s4-0) + (if (within-area? (the-as drawable-region-prim s2-0) (the-as region-prim-area (+ #x70000000 0))) + (format + arg1 + " splitbox-~D ~A~%" + (-> (the-as drawable-region-prim s2-0) id) + (the-as drawable-region-prim s2-0) + ) + ) + (+! s3-0 1) + (set! s2-0 (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + 0 + (none) + ) + +(defun region-tree-execute ((arg0 symbol) (arg1 vector) (arg2 vector)) + (local-vars (sv-32 vector)) + (with-pp + (set! sv-32 (vector-average! (new 'stack-no-clear 'vector) arg1 arg2)) + (set! (-> sv-32 w) (* 0.5 (vector-vector-distance arg1 arg2))) + (set! (-> (the-as region-prim-area #x70000000) region-prim-list num-items) 0) + (set! (-> (the-as region-prim-area #x70000000) region-enter-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-exit-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-inside-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-start-count) 0) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg1 0.0) + (sphere<-vector+r! (the-as sphere (+ 1312 #x70000000)) arg2 0.0) + (vector-! (the-as vector (+ 1328 #x70000000)) arg2 arg1) + (vector-! (the-as vector (+ 1344 #x70000000)) arg1 arg2) + (dotimes (s5-1 (-> *level* length)) + (let ((v1-17 (-> *level* level s5-1))) + (when (= (-> v1-17 status) 'active) + (let ((s4-1 (-> v1-17 bsp region-trees))) + (when (nonzero? s4-1) + (let* ((s3-0 (-> s4-1 length)) + (s2-0 0) + (a0-14 (-> s4-1 s2-0)) + ) + (while (< s2-0 s3-0) + (if (= (-> a0-14 name) arg0) + (collect-regions a0-14 (the-as sphere sv-32) 0 (the-as region-prim-list (+ #x70000000 0))) + ) + (+! s2-0 1) + (set! a0-14 (-> s4-1 s2-0)) + ) + ) + ) + ) + ) + ) + ) + (countdown (gp-1 (-> (the-as region-prim-area #x70000000) region-prim-list num-items)) + (track-region + (-> (the-as region-prim-area (+ (* gp-1 4) #x70000000)) region-prim-list items 0) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (let ((gp-2 (-> (the-as region-prim-area #x70000000) region-enter-count))) + (while (begin (label cfg-22) (nonzero? gp-2)) + (+! gp-2 -1) + (let* ((a2-5 (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-list 0)) + (s5-2 (-> a2-5 region-prim-list items 0)) + ) + (when s5-2 + (countdown (v1-47 (-> (the-as region-prim-area #x70000000) region-start-count)) + (if (= a2-5 (-> (the-as region-prim-area #x70000000) region-start-list v1-47)) + (goto cfg-22) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-5) + pp + (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-prim-list 0 bsphere) + ) + (the-as pair s5-2) + ) + ) + ) + ) + ) + (let ((gp-3 (-> (the-as region-prim-area #x70000000) region-exit-count))) + (while (begin (label cfg-31) (nonzero? gp-3)) + (+! gp-3 -1) + (let* ((a2-6 (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-list 0)) + (s5-3 (-> a2-6 region-prim-list items 2)) + ) + (when s5-3 + (countdown (v1-64 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (if (= a2-6 (-> (the-as region-prim-area (+ (* v1-64 4) #x70000000)) region-inside-list 0)) + (goto cfg-31) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-6) + pp + (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-prim-list 0 bsphere) + ) + (the-as pair s5-3) + ) + ) + ) + ) + ) + (countdown (gp-4 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (let* ((a2-7 (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-list 0)) + (s5-4 (-> a2-7 region-prim-list items 1)) + ) + (if s5-4 + (eval! + (new + 'stack + 'script-context + (the-as basic a2-7) + pp + (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-prim-list 0 bsphere) + ) + (the-as pair s5-4) + ) + ) + ) + ) + 0 + (none) + ) + ) + +(defun region-execute () + (set! (-> *level* camera-pos 1 quad) (-> *level* camera-pos 0 quad)) + (set! (-> *level* camera-pos 0 quad) (-> (camera-pos) quad)) + (set! (-> *level* target-pos 1 quad) (-> *level* target-pos 0 quad)) + (set! (-> *level* target-pos 0 quad) (-> (target-pos 0) quad)) + (when (and *execute-regions* (-> *setting-control* user-current region-mode) (not (paused?))) + (region-tree-execute 'camera (-> *level* camera-pos 1) (the-as vector (-> *level* camera-pos))) + (region-tree-execute 'target (-> *level* target-pos 1) (the-as vector (-> *level* target-pos))) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch int vs drawable-region-prim. +(defun region-prim-lookup-by-id ((arg0 int) (arg1 symbol) (arg2 symbol)) + (let ((v1-0 -1)) + (dotimes (a3-0 (-> *level* length)) + (let ((t0-3 (-> *level* level a3-0))) + (when (= (-> t0-3 status) 'active) + (when (nonzero? (-> t0-3 bsp region-trees)) + (let* ((t1-8 (-> t0-3 bsp region-trees length)) + (t2-1 0) + (t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + (while (< t2-1 t1-8) + (when (or (not arg1) (= (-> t3-2 name) arg1)) + (let* ((t4-10 (-> t3-2 data2 (+ (-> t3-2 length) -1) length)) + (t5-0 0) + (t6-2 (the-as object (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1)))))) + ) + (while (< t5-0 t4-10) + (when (= (-> (the-as drawable-region-prim t6-2) region id) arg0) + (+! v1-0 1) + (if (= v1-0 arg2) + (return (the-as drawable-region-prim t6-2)) + ) + ) + (+! t5-0 1) + (set! t6-2 (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1))))) + ) + ) + ) + (+! t2-1 1) + (set! t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + ) + ) + ) + ) + ) + ) + (the-as drawable-region-prim #f) + ) + +(defun region-lookup-by-id ((arg0 int)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (when (nonzero? (-> a1-3 bsp region-array)) + (let* ((a2-8 (-> a1-3 bsp region-array length)) + (a3-1 0) + (t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + (while (< a3-1 a2-8) + (if (= (-> t0-2 id) arg0) + (return t0-2) + ) + (+! a3-1 1) + (set! t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + ) + ) + ) + ) + ) + (the-as region #f) + ) diff --git a/goal_src/jak2/engine/load/decomp-h.gc b/goal_src/jak2/engine/load/decomp-h.gc index fe4cb6027a..7aa7d6b309 100644 --- a/goal_src/jak2/engine/load/decomp-h.gc +++ b/goal_src/jak2/engine/load/decomp-h.gc @@ -5,7 +5,7 @@ ;; name in dgo: decomp-h ;; dgos: ENGINE, GAME -(define-extern unpack-comp-lzo (function object object none)) +(define-extern unpack-comp-lzo (function (pointer uint8) (pointer uint8) none)) ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/load/decomp.gc b/goal_src/jak2/engine/load/decomp.gc index bfed7967b3..1446a1ef1b 100644 --- a/goal_src/jak2/engine/load/decomp.gc +++ b/goal_src/jak2/engine/load/decomp.gc @@ -5,5 +5,547 @@ ;; name in dgo: decomp ;; dgos: ENGINE, GAME +;; This file has compression/decompression functions used for compressed visibility data, bigmap data, and +;; joint animations (not the joint-anim-compressed stuff, an outer layer of lzo compression of those) +;; It also has the update-vis! method of level, which handles the details of decompression. +;; Luckily for us, the IOP ramdisk vis stuff from Jak 1 is gone! +;; It's not super clear to me why they ditched this system. Maybe the visibility data is a lot smaller in jak 2. + ;; DECOMP BEGINS +;; definition for function unpack-comp-rle +;; WARN: Return type mismatch (pointer int8) vs none. +(defun unpack-comp-rle ((arg0 (pointer int8)) (arg1 (pointer int8))) + (local-vars (v1-2 int) (v1-3 uint)) + (nop!) + (loop + (loop + (set! v1-2 (-> arg1 0)) + (set! arg1 (&-> arg1 1)) + (b! (<= v1-2 0) cfg-5 :delay (nop!)) + (let ((a2-0 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (label cfg-3) + (nop!) + (nop!) + (nop!) + (nop!) + (set! (-> arg0 0) a2-0) + ) + (set! arg0 (&-> arg0 1)) + (b! (> v1-2 0) cfg-3 :delay (set! v1-2 (+ v1-2 -1))) + ) + (label cfg-5) + (b! (zero? v1-2) cfg-8 :delay (set! v1-3 (the-as uint (- v1-2)))) + (label cfg-6) + (let ((a2-1 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (nop!) + (nop!) + (set! (-> arg0 0) a2-1) + ) + (+! v1-3 -1) + (b! (> (the-as int v1-3) 0) cfg-6 :delay (set! arg0 (&-> arg0 1))) + ) + (label cfg-8) + (none) + ) + +;; definition of type huf-dictionary-node +(deftype huf-dictionary-node (structure) + ((zero uint16 :offset-assert 0) + (one uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +;; definition for method 3 of type huf-dictionary-node +(defmethod inspect huf-dictionary-node ((obj huf-dictionary-node)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'huf-dictionary-node) + (format #t "~1Tzero: ~D~%" (-> obj zero)) + (format #t "~1Tone: ~D~%" (-> obj one)) + (label cfg-4) + obj + ) + +;; definition for function unpack-comp-huf +;; WARN: Return type mismatch int vs none. +(defun unpack-comp-huf ((arg0 (pointer uint8)) (arg1 (pointer uint8)) (arg2 uint) (arg3 huf-dictionary-node)) + (local-vars (t1-1 uint) (t3-2 (pointer uint16))) + (nop!) + (let ((t1-0 (-> arg3 zero)) + (a2-1 (+ arg2 -1028)) + (t2-0 (-> arg3 one)) + ) + (nop!) + (label cfg-1) + (let ((v1-4 128)) + (nop!) + (let ((t0-0 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (label cfg-2) + (let ((t3-0 (logand t0-0 v1-4))) + (shift-arith-right-32 v1-4 v1-4 1) + (b! (zero? t3-0) cfg-4 :delay (set! t1-1 t1-0)) + ) + ) + (nop!) + (set! t1-1 t2-0) + (label cfg-4) + (let ((t2-1 (+ t1-1 -256))) + (let ((t3-1 (* t1-1 4))) + (b! (< (the-as int t2-1) 0) cfg-8 :delay (set! t3-2 (the-as (pointer uint16) (+ t3-1 a2-1)))) + ) + (b! (zero? t2-1) cfg-10 :delay (set! t1-0 (-> t3-2 0))) + ) + (b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> t3-2 1))) + (b! #t cfg-1 :delay (nop!)) + (label cfg-8) + (set! (-> arg0 0) t1-1) + (set! arg0 (&-> arg0 1)) + (nop!) + (set! t1-0 (-> arg3 zero)) + (b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> arg3 one))) + ) + ) + (b! #t cfg-1 :delay (nop!)) + (label cfg-10) + (nop!) + (nop!) + 0 + (none) + ) + +;; definition for function unpack-comp-lzo +;; WARN: Return type mismatch int vs none. +(defun unpack-comp-lzo ((arg0 (pointer uint8)) (arg1 (pointer uint8))) + 0 + (let ((v1-1 arg0)) + (b! (>= (the-as uint 17) (-> arg1 0)) cfg-5 :delay #f) + (let ((a2-4 (the-as int (+ (-> arg1 0) -17)))) + (set! arg1 (&-> arg1 1)) + (b! (< a2-4 4) cfg-41) + (until (<= a2-4 0) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (+! a2-4 -1) + ) + (b! #t cfg-15 :delay (nop!)) + (label cfg-5) + (b! #t cfg-45 :delay (nop!)) + (label cfg-6) + (let ((a2-6 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (b! (>= (the-as int a2-6) 16) cfg-18) + (b! (nonzero? a2-6) cfg-12 :delay (empty-form)) + (while (zero? (-> arg1 0)) + (+! a2-6 255) + (set! arg1 (&-> arg1 1)) + ) + (set! a2-6 (+ (-> arg1 0) 15 a2-6)) + (set! arg1 (&-> arg1 1)) + (label cfg-12) + (set! (-> arg0 0) (-> arg1 0)) + (set! (-> arg0 1) (-> arg1 1)) + (set! (-> arg0 2) (-> arg1 2)) + (set! arg0 (&-> arg0 3)) + (set! arg1 (&-> arg1 3)) + (until (<= (the-as int a2-6) 0) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (+! a2-6 -1) + ) + (label cfg-15) + (set! a2-6 (-> arg1 0)) + (set! arg1 (&-> arg1 1)) + (b! (>= (the-as int a2-6) 16) cfg-18) + (let ((a2-10 (the-as (pointer uint8) (&- (&- (&-> arg0 -2049) (the-as uint (/ (the-as int a2-6) 4))) (the-as uint (* (-> arg1 0) 4)))))) + (set! arg1 (&-> arg1 1)) + (set! (-> arg0 0) (-> a2-10 0)) + (set! (-> arg0 1) (-> a2-10 1)) + (set! (-> arg0 2) (-> a2-10 2)) + (set! arg0 (&-> arg0 3)) + (&-> a2-10 2) + ) + (b! #t cfg-39 :delay (nop!)) + (b! #t cfg-43 :delay (nop!)) + (label cfg-18) + (b! (< (the-as int a2-6) 64) cfg-20) + (let ((a3-23 + (the-as (pointer uint8) (&- (&- (&-> arg0 -1) (the-as uint (logand (/ (the-as int a2-6) 4) 7))) (the-as uint (* (-> arg1 0) 8)))) + ) + ) + (set! arg1 (&-> arg1 1)) + (let ((a2-13 (+ (/ (the-as int a2-6) 32) -1))) + (b! #t cfg-36 :delay (nop!)) + (label cfg-20) + (b! (< (the-as int a2-6) 32) cfg-27) + (set! a2-13 (the-as int (logand a2-6 31))) + (b! (nonzero? a2-13) cfg-26 :delay (empty-form)) + (b! #t cfg-24 :delay (nop!)) + (label cfg-23) + (+! a2-13 255) + (set! arg1 (&-> arg1 1)) + (label cfg-24) + (b! (zero? (-> arg1 0)) cfg-23 :delay (nop!)) + (set! a2-13 (the-as int (+ (-> arg1 0) 31 a2-13))) + (set! arg1 (&-> arg1 1)) + (label cfg-26) + (set! a3-23 (the-as (pointer uint8) (&- (&-> arg0 -1) (the-as uint (+ (shr (-> arg1 0) 2) (* (-> arg1 1) 64)))))) + (set! arg1 (&-> arg1 2)) + (b! #t cfg-36 :delay (nop!)) + (label cfg-27) + (b! (< (the-as int a2-6) 16) cfg-35) + (let ((a3-32 (the-as (pointer uint8) (&- arg0 (the-as uint (shl (logand a2-6 8) 11)))))) + (set! a2-13 (the-as int (logand a2-6 7))) + (b! (nonzero? a2-13) cfg-33 :delay (empty-form)) + (b! #t cfg-31 :delay (nop!)) + (label cfg-30) + (+! a2-13 255) + (set! arg1 (&-> arg1 1)) + (label cfg-31) + (b! (zero? (-> arg1 0)) cfg-30 :delay (nop!)) + (set! a2-13 (the-as int (+ (-> arg1 0) 7 a2-13))) + (set! arg1 (&-> arg1 1)) + (label cfg-33) + (let ((a3-33 (&- a3-32 (the-as uint (+ (shr (-> arg1 0) 2) (* (-> arg1 1) 64)))))) + (set! arg1 (&-> arg1 2)) + (b! (= a3-33 arg0) cfg-47 :delay (nop!)) + (set! a3-23 (&-> (the-as (pointer uint8) a3-33) -16384)) + ) + ) + (b! #t cfg-36 :delay (nop!)) + (label cfg-35) + (let ((a2-16 (the-as (pointer uint8) (&- (&- (&-> arg0 -1) (the-as uint (/ (the-as int a2-6) 4))) (the-as uint (* (-> arg1 0) 4)))))) + (set! arg1 (&-> arg1 1)) + (set! (-> arg0 0) (-> a2-16 0)) + (set! (-> arg0 1) (-> a2-16 1)) + (set! arg0 (&-> arg0 2)) + (&-> a2-16 1) + ) + (b! #t cfg-39 :delay (nop!)) + (label cfg-36) + (set! (-> arg0 0) (-> a3-23 0)) + (set! (-> arg0 1) (-> a3-23 1)) + (set! arg0 (&-> arg0 2)) + (let ((a3-39 (&-> a3-23 2))) + (until (<= (the-as int a2-13) 0) + (set! (-> arg0 0) (-> a3-39 0)) + (set! arg0 (&-> arg0 1)) + (set! a3-39 (&-> a3-39 1)) + (+! a2-13 -1) + ) + ) + ) + ) + (label cfg-39) + (set! a2-4 (the-as int (logand (-> arg1 -2) 3))) + (b! (zero? (the-as uint a2-4)) cfg-45 :delay (nop!)) + (until (<= a2-4 0) + (label cfg-41) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (set! a2-4 (the-as int (+ (the-as uint a2-4) -1))) + ) + (set! a2-6 (-> arg1 0)) + ) + ) + (set! arg1 (&-> arg1 1)) + (label cfg-43) + (b! #t cfg-18 :delay (nop!)) + (label cfg-45) + (b! #t cfg-6 :delay (nop!)) + (label cfg-47) + (&- arg0 (the-as uint v1-1)) + ) + (none) + ) + +;; definition for method 16 of type level +;; INFO: Used lq/sq +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 138] +(defmethod update-vis! level ((obj level) (vis-info level-vis-info) (unused uint) (in-bsp-vis-string (pointer uint8))) + (local-vars (t0-3 uint128) (extra-vis-length int) (extra-vis-dest (pointer int8))) + (let* ((cam-leaf-idx (-> vis-info from-bsp current-leaf-idx)) + (curr-vis-string-offset (-> vis-info current-vis-string)) + (desired-vis-string-offset (-> vis-info vis-string cam-leaf-idx)) + ) + 0 + (+ #x70000000 0) + (+ 2048 #x70000000) + (b! (!= curr-vis-string-offset desired-vis-string-offset) cfg-8 :delay (empty-form)) + (b! (not (logtest? (vis-info-flag loading) (-> vis-info flags))) cfg-6 :delay (empty-form)) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (logclear! (-> vis-info flags) (vis-info-flag loading)) + (let ((vis-buf (the-as (pointer integer) (-> obj vis-buffer)))) + (b! #t cfg-16 :delay (nop!)) + (label cfg-6) + (return #t) + (label cfg-8) + (when (logtest? (vis-info-flag loading) (-> vis-info flags)) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (logclear! (-> vis-info flags) (vis-info-flag loading)) + ) + (set! (-> vis-info current-vis-string) desired-vis-string-offset) + (b! (logtest? (vis-info-flag in-iop) (-> vis-info flags)) cfg-15 :delay (empty-form)) + (set! vis-buf (&+ in-bsp-vis-string desired-vis-string-offset)) + (b! #t cfg-16 :delay (nop!)) + (label cfg-15) + (format 0 "ERROR: ramdisk vis for level ~A, this is not supported~%" (-> obj name)) + (let ((v0-1 #f)) + (b! #t cfg-49 :delay (nop!)) + (label cfg-16) + (let ((lower-flag-bits (the-as int (logand (vis-info-flag + dummy0 + dummy1 + dummy2 + dummy3 + dummy4 + dummy5 + dummy6 + dummy7 + dummy8 + dummy9 + dummy10 + dummy11 + dummy12 + dummy13 + dummy14 + dummy15 + dummy16 + dummy17 + dummy18 + dummy19 + dummy20 + dummy21 + dummy22 + dummy23 + dummy24 + dummy25 + dummy26 + dummy27 + dummy28 + ) + (-> vis-info flags) + ) + ) + ) + (spad-start (&-> (the-as (pointer int8) *fake-scratchpad-data*) 0)) + (spad-end (the-as (pointer int8) (&+ *fake-scratchpad-data* 2048))) + (list-len (-> obj bsp visible-list-length)) + ) + (when (zero? (the-as vis-info-flag lower-flag-bits)) + (let ((qwc (/ (+ list-len 15) 16))) + (dotimes (a0-19 qwc) + (set! (-> (the-as (pointer int128) (&+ spad-start (* a0-19 16)))) (the int128 0)) + ) + ) + (mem-copy! spad-start (the-as (pointer uint8) vis-buf) list-len) + ) + (while (nonzero? lower-flag-bits) + (let ((comp-mode (logand lower-flag-bits 7))) + (cond + ((= comp-mode 1) + (let ((qwc2 (/ (+ list-len 15) 16))) + (dotimes (a0-23 qwc2) + (set! (-> (the-as (pointer int128) (&+ spad-start (* a0-23 16)))) (the int128 0)) + ) + ) + (set! extra-vis-length (-> obj bsp extra-vis-list-length)) + (set! extra-vis-dest (&+ spad-start (- list-len extra-vis-length))) + (let ((extra-vis-in (unpack-vis (-> obj bsp drawable-trees) spad-start (the-as (pointer int8) vis-buf)))) + (dotimes (extra-vis-idx extra-vis-length) + (let ((vis-byte (-> extra-vis-in 0))) + (set! extra-vis-in (&-> extra-vis-in 1)) + (set! (-> extra-vis-dest 0) vis-byte) + ) + (set! extra-vis-dest (&-> extra-vis-dest 1)) + ) + ) + #f + ) + ((= comp-mode 2) + (unpack-comp-rle spad-start (the-as (pointer int8) vis-buf)) + ) + ((= comp-mode 3) + (unpack-comp-huf + (the-as (pointer uint8) spad-start) + (the-as (pointer uint8) vis-buf) + (-> vis-info dictionary) + (the-as huf-dictionary-node (+ (-> vis-info dictionary) (-> vis-info dictionary-length) -4)) + ) + ) + ((= comp-mode 4) + (unpack-comp-lzo (the-as (pointer uint8) spad-start) (the-as (pointer uint8) vis-buf)) + ) + ) + ) + (set! vis-buf spad-start) + (set! spad-start spad-end) + (set! spad-end (the-as (pointer int8) vis-buf)) + (shift-arith-right-32 lower-flag-bits lower-flag-bits 3) + ) + (let ((vis-ptr (the-as (pointer uint8) vis-buf)) + (all-vis-ptr (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (vis-error #f) + ) + (dotimes (s0-1 list-len) + (when (!= (logand (-> vis-ptr 0) (-> (the-as (pointer uint8) all-vis-ptr) 0)) (-> vis-ptr 0)) + (format + #t + "ERROR: illegal vis bits set [byte ~X] ~X -> ~X~%" + s0-1 + (-> vis-ptr 0) + (-> (the-as (pointer uint8) all-vis-ptr) 0) + ) + (set! vis-error #t) + ) + (set! vis-ptr (&-> vis-ptr 1)) + (set! all-vis-ptr (&+ (the-as (pointer uint16) all-vis-ptr) 1)) + ) + (when vis-error + (format + #t + "src = #x~x dest = #x~x ~s ~s~%" + vis-buf + (-> vis-info vis-bits) + (-> vis-info level) + (-> vis-info from-level) + ) + (format #t "leaf-index = ~d~%" (-> vis-info from-bsp current-leaf-idx)) + 0 + ) + ) + (let ((unpacked-vis-ptr vis-buf) + (final-vis-ptr (the-as object (-> vis-info vis-bits))) + (all-vis (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (vis-qwc (/ (+ list-len 15) 16)) + ) + (dotimes (a3-6 vis-qwc) + (let ((t0-2 (-> (the-as (pointer uint128) unpacked-vis-ptr) 0)) + (t1-1 (-> (the-as (pointer uint128) all-vis) 0)) + ) + (.pand t0-3 t0-2 t1-1) + ) + (set! (-> (the-as (pointer uint128) final-vis-ptr) 0) t0-3) + (set! final-vis-ptr (+ (the-as uint final-vis-ptr) 16)) + (set! unpacked-vis-ptr (&-> (the-as (pointer uint8) unpacked-vis-ptr) 16)) + (set! all-vis (&-> (the-as (pointer uint16) all-vis) 8)) + ) + ) + ) + (set! v0-1 #t) + (label cfg-49) + v0-1 + ) + ) + ) + ) + +;; definition for function pack-comp-rle +;; WARN: Return type mismatch int vs none. +(defun pack-comp-rle ((arg0 (pointer uint8)) (arg1 (pointer uint8)) (arg2 int) (arg3 int)) + (let ((s4-0 0)) + 0 + (while (and (> arg2 0) (< (+ s4-0 131) arg3)) + (cond + ((= (-> arg1 0) (-> arg1 1)) + (let ((v1-2 (-> arg1 0))) + (set! arg1 (&-> arg1 2)) + (let ((a0-2 2)) + (+! arg2 -2) + (while (> arg2 0) + (cond + ((= v1-2 (-> arg1 0)) + (+! a0-2 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (if (>= a0-2 128) + (goto cfg-12) + ) + ) + (else + (goto cfg-12) + ) + ) + ) + (label cfg-12) + (set! (-> arg0 0) (the-as uint (+ a0-2 -1))) + ) + (set! (-> arg0 1) v1-2) + ) + (set! arg0 (&-> arg0 2)) + (+! s4-0 2) + ) + (else + (let ((a0-4 arg1) + (v1-4 1) + ) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (while (< 1 arg2) + (when (and (= (-> arg1 0) (-> arg1 1)) (< 2 arg2)) + (if (= (-> arg1 0) (-> arg1 2)) + (goto cfg-26) + ) + ) + (+! v1-4 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (if (>= v1-4 127) + (goto cfg-26) + ) + ) + (label cfg-26) + (when (= arg2 1) + (+! v1-4 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + ) + (set! (-> arg0 0) (the-as uint (- v1-4))) + (let ((a1-21 (&-> arg0 1)) + (a2-4 (+ s4-0 1)) + ) + (dotimes (t0-0 v1-4) + (set! (-> a1-21 t0-0) (-> a0-4 t0-0)) + ) + (set! arg0 (&+ a1-21 v1-4)) + (set! s4-0 (+ a2-4 v1-4)) + ) + ) + ) + ) + ) + (if (< arg3 (+ s4-0 131)) + (format 0 "(GOMI) Warning: May have run out of bigmap bit mask compression memory~%") + ) + (when (= arg2 1) + (set! (-> arg0 0) (the-as uint -1)) + (set! (-> arg0 1) (-> arg1 0)) + (set! arg0 (&-> arg0 2)) + (+! s4-0 2) + (&-> arg1 1) + ) + (set! (-> arg0 0) (the-as uint 0)) + (&-> arg0 1) + (+ s4-0 1) + ) + (none) + ) + + + + diff --git a/goal_src/jak2/engine/nav/nav-enemy-h.gc b/goal_src/jak2/engine/nav/nav-enemy-h.gc index 113a8b34b6..f663edd09e 100644 --- a/goal_src/jak2/engine/nav/nav-enemy-h.gc +++ b/goal_src/jak2/engine/nav/nav-enemy-h.gc @@ -7,3 +7,263 @@ ;; DECOMP BEGINS +(defenum enemy-flag + :type int64 + :bitfield #t + (lock-focus 0) + (death-start 1) + (enable-on-active 2) + (checking-water 3) + (check-water 4) + (spawn-gem 5) + (chase-startup 6) + (attackable-backup 7) + (look-at-focus 8) + (use-notice-distance 9) + (enable-on-notice 10) + (look-at-move-dest 11) + (notice 12) + (auto-reset-penetrate 13) + (jump-check-blocked 14) + (drawn-mirrored 15) + (multi-focus 16) + (alert 17) + (victory 18) + (dangerous-backup 19) + (actor-pause-backup 20) + (trackable 21) + (called-dying 22) + (check-water-backup 23) + (no-initial-move-to-ground 24) + (cam-attack-mode 25) + (trackable-backup 26) + (enable-on-hostile 27) + (directed-ready 28) + (use-trigger 29) + (directed 30) + (dislike-combo 31) + (recover-applied-velocity 32) + (vulnerable-backup 33) + (vulnerable 34) + (recover 35) + ) + +(deftype enemy-focus (focus) + ((aware uint64 :offset-assert 16) + (flags uint64 :offset-assert 24) + ) + :method-count-assert 14 + :size-assert #x20 + :flag-assert #xe00000020 + (:methods + (enemy-focus-method-13 () none 13) + ) + ) + +(deftype enemy-info (basic) + ((fact-defaults basic :offset-assert 4) + (use-die-falling basic :offset-assert 8) + (use-victory basic :offset-assert 12) + (use-jump-blocked basic :offset-assert 16) + (debug-draw-neck basic :offset-assert 20) + (jump-debug-draw basic :offset-assert 24) + (move-to-ground basic :offset-assert 28) + (hover-if-no-ground basic :offset-assert 32) + (idle-anim-script uint32 :offset-assert 36) + (idle-anim int32 :offset-assert 40) + (notice-anim int32 :offset-assert 44) + (hostile-anim int32 :offset-assert 48) + (hit-anim int32 :offset-assert 52) + (knocked-anim int32 :offset-assert 56) + (knocked-land-anim int32 :offset-assert 60) + (die-anim int32 :offset-assert 64) + (die-falling-anim int32 :offset-assert 68) + (victory-anim int32 :offset-assert 72) + (jump-wind-up-anim int32 :offset-assert 76) + (jump-in-air-anim int32 :offset-assert 80) + (jump-land-anim int32 :offset-assert 84) + (neck-joint int32 :offset-assert 88) + (look-at-joint int32 :offset-assert 92) + (bullseye-joint int32 :offset-assert 96) + (sound-hit uint128 :offset-assert 112) + (sound-die uint128 :offset-assert 128) + (notice-distance meters :offset-assert 144) + (notice-distance-delta meters :offset-assert 148) + (proximity-notice-distance meters :offset-assert 152) + (default-hit-points int32 :offset-assert 156) + (gnd-collide-with uint32 :offset-assert 160) + (overlaps-others-collide-with-filter uint32 :offset-assert 164) + (penetrate-flinch uint64 :offset-assert 168) + (penetrate-knocked uint64 :offset-assert 176) + (movement-gravity meters :offset-assert 184) + (friction float :offset-assert 188) + (slip-factor float :offset-assert 192) + (attack-shove-back meters :offset-assert 196) + (attack-shove-up meters :offset-assert 200) + (attack-mode basic :offset-assert 204) + (attack-damage int32 :offset-assert 208) + (recover-gnd-collide-with uint32 :offset-assert 212) + (jump-height-min meters :offset-assert 216) + (jump-height-factor float :offset-assert 220) + (knocked-seek-ry-clamp float :offset-assert 224) + (knocked-soft-vxz-lo float :offset-assert 228) + (knocked-soft-vxz-hi float :offset-assert 232) + (knocked-soft-vy-lo float :offset-assert 236) + (knocked-soft-vy-hi float :offset-assert 240) + (knocked-medium-vxz-lo float :offset-assert 244) + (knocked-medium-vxz-hi float :offset-assert 248) + (knocked-medium-vy-lo float :offset-assert 252) + (knocked-medium-vy-hi float :offset-assert 256) + (knocked-hard-vxz-lo float :offset-assert 260) + (knocked-hard-vxz-hi float :offset-assert 264) + (knocked-hard-vy-lo float :offset-assert 268) + (knocked-hard-vy-hi float :offset-assert 272) + (knocked-huge-vxz-lo float :offset-assert 276) + (knocked-huge-vxz-hi float :offset-assert 280) + (knocked-huge-vy-lo float :offset-assert 284) + (knocked-huge-vy-hi float :offset-assert 288) + (knocked-yellow-vxz-lo float :offset-assert 292) + (knocked-yellow-vxz-hi float :offset-assert 296) + (knocked-yellow-vy-lo float :offset-assert 300) + (knocked-yellow-vy-hi float :offset-assert 304) + (knocked-red-vxz-lo float :offset-assert 308) + (knocked-red-vxz-hi float :offset-assert 312) + (knocked-red-vy-lo float :offset-assert 316) + (knocked-red-vy-hi float :offset-assert 320) + (knocked-blue-vxz-lo float :offset-assert 324) + (knocked-blue-vxz-hi float :offset-assert 328) + (knocked-blue-vy-lo float :offset-assert 332) + (knocked-blue-vy-hi float :offset-assert 336) + (shadow-size meters :offset-assert 340) + (shadow-max-y meters :offset-assert 344) + (shadow-min-y meters :offset-assert 348) + (shadow-locus-dist meters :offset-assert 352) + (gem-joint int32 :offset-assert 356) + (gem-seg uint32 :offset-assert 360) + (gem-no-seg uint32 :offset-assert 364) + (gem-offset sphere :inline :offset-assert 368) + ) + :method-count-assert 10 + :size-assert #x180 + :flag-assert #xa00000180 + (:methods + (enemy-info-method-9 () none 9) + ) + ) + +(deftype enemy-knocked-info (structure) + ((anim-speed float :offset-assert 0) + (on-surface-count int32 :offset-assert 4) + (move-count int32 :offset-assert 8) + (land-can-land-time time-frame :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype enemy-jump-info (structure) + ((flags uint8 :offset-assert 0) + (anim-speed float :offset-assert 4) + (hang-time time-frame :offset-assert 8) + (start-pos vector :inline :offset-assert 16) + (dest-pos vector :inline :offset-assert 32) + (traj trajectory :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) + +(deftype enemy-init-by-other-params (structure) + ((trans vector :inline :offset-assert 0) + (quat quaternion :inline :offset-assert 16) + (entity basic :offset-assert 32) + (directed? basic :offset-assert 36) + (no-initial-move-to-ground? basic :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +(deftype enemy-attack-info (structure) + ((attack-id uint32 :offset-assert 0) + (knocked-type uint8 :offset-assert 4) + (blue-juggle-count uint8 :offset-assert 5) + (attacker-handle uint64 :offset-assert 8) + (attack-time time-frame :offset-assert 16) + (penetrate-using uint64 :offset-assert 24) + (attacker-pos vector :inline :offset-assert 32) + (attack-direction vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype enemy-best-focus (structure) + ((proc basic :offset-assert 0) + (rating float :offset-assert 4) + (aware uint64 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +(deftype nav-enemy (enemy) + ((frustration-point vector :inline :offset-assert 544) + (move-dest vector :inline :offset-assert 560) + (frustration-time time-frame :offset-assert 576) ;; time-frame + (blocked-start-time time-frame :offset-assert 584) + (restore-nav-radius-time time-frame :offset-assert 592) + (nav-radius-backup float :offset-assert 600) + (circle-radial-dist float :offset 244) + ) + :method-count-assert 178 + :size-assert #x25c + :flag-assert #xb201e0025c + (:methods + (nav-enemy-method-137 () none 137) + (nav-enemy-method-138 () none 138) + (nav-enemy-method-139 () none 139) + (nav-enemy-method-140 () none 140) + (nav-enemy-method-141 () none 141) + (nav-enemy-method-142 () none 142) + (nav-enemy-method-143 () none 143) + (nav-enemy-method-144 () none 144) + (nav-enemy-method-145 () none 145) + (nav-enemy-method-146 () none 146) + (nav-enemy-method-147 () none 147) + (nav-enemy-method-148 () none 148) + (nav-enemy-method-149 () none 149) + (nav-enemy-method-150 () none 150) + (nav-enemy-method-151 () none 151) + (nav-enemy-method-152 () none 152) + (nav-enemy-method-153 () none 153) + (nav-enemy-method-154 () none 154) + (nav-enemy-method-155 () none 155) + (nav-enemy-method-156 () none 156) + (nav-enemy-method-157 () none 157) + (nav-enemy-method-158 () none 158) + (nav-enemy-method-159 () none 159) + (nav-enemy-method-160 () none 160) + (nav-enemy-method-161 () none 161) + (nav-enemy-method-162 () none 162) + (nav-enemy-method-163 () none 163) + (nav-enemy-method-164 () none 164) + (nav-enemy-method-165 () none 165) + (nav-enemy-method-166 () none 166) + (nav-enemy-method-167 () none 167) + (nav-enemy-method-168 () none 168) + (nav-enemy-method-169 () none 169) + (nav-enemy-method-170 () none 170) + (nav-enemy-method-171 () none 171) + (nav-enemy-method-172 () none 172) + (nav-enemy-method-173 () none 173) + (nav-enemy-method-174 () none 174) + (nav-enemy-method-175 () none 175) + (nav-enemy-method-176 () none 176) + (nav-enemy-method-177 () none 177) + ) + ) diff --git a/goal_src/jak2/engine/nav/nav-mesh-h.gc b/goal_src/jak2/engine/nav/nav-mesh-h.gc index 58ffd5e4d4..c3d6ceec1e 100644 --- a/goal_src/jak2/engine/nav/nav-mesh-h.gc +++ b/goal_src/jak2/engine/nav/nav-mesh-h.gc @@ -14,6 +14,9 @@ (declare-type grid-hash basic) (declare-type sphere-hash grid-hash) +;; NOTE - for basebutton +(define-extern nav-mesh-connect-from-ent (function entity-nav-mesh none)) + ;; DECOMP BEGINS (deftype nav-mesh-work-debug (structure) @@ -203,7 +206,7 @@ (user-list engine :offset-assert 36) (next-nav-mesh surface :offset-assert 40) (prev-nav-mesh surface :offset-assert 44) - (bounds sphere :inline :offset-assert 48) + (bounds vector :inline :offset-assert 48) (origin vector :inline :offset 48) (entity entity :offset-assert 64) (link-array (array nav-mesh-link) :offset-assert 68) @@ -329,7 +332,6 @@ #f ) -;; WARN: Return type mismatch int vs none. (defun init-ray ((arg0 nav-ray)) (rlet ((acc :class vf) (Q :class vf) @@ -532,7 +534,6 @@ ;; WARN: Stack slot offset 64 signed mismatch ;; WARN: Stack slot offset 44 signed mismatch ;; WARN: Stack slot offset 48 signed mismatch -;; WARN: Return type mismatch int vs none. (defmethod move-along-nav-ray! nav-mesh ((obj nav-mesh) (ray nav-ray)) (local-vars (next-poly-idx int) @@ -617,7 +618,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defun-debug nav-sphere-from-cam () (let ((v1-0 (camera-pos))) (format #t "SPHEREM(~4,,1M, ~4,,1M, ~4,,1M, 1.0)~%" (-> v1-0 x) (-> v1-0 y) (-> v1-0 z)) @@ -625,7 +625,3 @@ 0 (none) ) - - - - diff --git a/goal_src/jak2/engine/physics/rigid-body-h.gc b/goal_src/jak2/engine/physics/rigid-body-h.gc index 9b20342342..b0a0d755da 100644 --- a/goal_src/jak2/engine/physics/rigid-body-h.gc +++ b/goal_src/jak2/engine/physics/rigid-body-h.gc @@ -5,5 +5,390 @@ ;; name in dgo: rigid-body-h ;; dgos: GAME, COMMON +;; +++rigid-body-flag +(defenum rigid-body-flag + :bitfield #t + :type uint32 + (display-marks 0) + (enable-physics 1) + (enable-collision 2) + (active 3) + (debug 4) + (blocker 5) + ) +;; ---rigid-body-flag + +;; +++rigid-body-object-flag +(defenum rigid-body-object-flag + :bitfield #t + :type uint64 + (enable-collision 0) + (disturbed 1) + (damaged 2) + (dead 3) + (player-touching 4) + (player-edge-grabbing 5) + (player-standing-on 6) + (player-impulse-force 7) + (player-contact-force 8) + (persistent 9) + (in-air 10) + (on-ground 11) + (on-flight-level 12) + (riding 13) + (player-driving 14) + (waiting-for-player 15) + (ignition 16) + (turbo-boost 17) + (reverse-gear 18) + (slide 19) + (hard-turn 20) + (jump 21) + (jump-sound 22) + (ai-driving 23) + (traffic-managed 24) + (flight-level-transition 25) + (flight-level-transition-ending 26) + (camera-bike-mode 27) + (camera-rapid-track-mode 28) + (camera 29) + (alert 30) + (in-pursuit 31) + (target-in-sight 32) + (rammed-target 33) + (draw-marks 34) + (hack-edit-graph-mode 35) + (measure-control-parameters 36) + (lights-on 37) + (lights-update 38) + (lights-dead 39) + (no-hijack 40) + (player-grabbed 41) + (nav-spheres 42) + (idle-sound 43) + ) +;; ---rigid-body-object-flag + ;; DECOMP BEGINS +(deftype rigid-body-info (structure) + ((mass float :offset-assert 0) + (inv-mass float :offset-assert 4) + (linear-damping float :offset-assert 8) + (angular-damping float :offset-assert 12) + (bounce-factor float :offset-assert 16) + (friction-factor float :offset-assert 20) + (bounce-mult-factor float :offset-assert 24) + (cm-offset-joint vector :inline :offset-assert 32) + (inv-inertial-tensor matrix :inline :offset-assert 48) + (inertial-tensor matrix :inline :offset-assert 112) + (inertial-tensor-box meters 3 :offset-assert 176) + ) + :method-count-assert 10 + :size-assert #xbc + :flag-assert #xa000000bc + (:methods + (rigid-body-info-method-9 (_type_) none 9) + ) + ) + + +(deftype rigid-body-object-extra-info (structure) + ((max-time-step float :offset-assert 0) + (gravity meters :offset-assert 4) + (idle-distance meters :offset-assert 8) + (attack-force-scale float :offset-assert 12) + ) + :pack-me + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(deftype rigid-body-object-constants (structure) + ((info rigid-body-info :inline :offset-assert 0) + (mass float :offset 0) + (inv-mass float :offset 4) + (cm-joint-x meters :offset 32) + (cm-joint-y meters :offset 36) + (cm-joint-z meters :offset 40) + (linear-damping float :offset 8) + (angular-damping float :offset 12) + (bounce-factor float :offset 16) + (friction-factor float :offset 20) + (inertial-tensor-x meters :offset 176) + (inertial-tensor-y meters :offset 180) + (inertial-tensor-z meters :offset 184) + (extra rigid-body-object-extra-info :inline :offset-assert 188) + (max-time-step float :offset 188) + (gravity meters :offset 192) + (idle-distance meters :offset 196) + (attack-force-scale float :offset 200) + (name basic :offset-assert 204) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) + + +(deftype rigid-body-impact (structure) + ((point vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (impulse float :offset-assert 48) + (pat uint32 :offset-assert 52) + (rbody basic :offset-assert 56) + (prim-id uint32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + + +(deftype rigid-body (structure) + ((work basic :offset-assert 0) + (info rigid-body-info :offset-assert 4) + (flags rigid-body-flag :offset-assert 8) + (force-callback basic :offset-assert 12) + (blocked-by basic :offset-assert 16) + (time-remaining float :offset-assert 20) + (step-count int16 :offset-assert 24) + (position vector :inline :offset-assert 32) + (rot vector :inline :offset-assert 48) + (rotation quaternion :inline :offset 48) + (lin-momentum vector :inline :offset-assert 64) + (ang-momentum vector :inline :offset-assert 80) + (force vector :inline :offset-assert 96) + (torque vector :inline :offset-assert 112) + (lin-velocity vector :inline :offset-assert 128) + (ang-velocity vector :inline :offset-assert 144) + (matrix matrix :inline :offset-assert 160) + (inv-i-world matrix :inline :offset-assert 224) + ) + :method-count-assert 32 + :size-assert #x120 + :flag-assert #x2000000120 + (:methods + (rigid-body-method-9 (_type_) none 9) + (rigid-body-method-10 (_type_) none 10) + (rigid-body-method-11 (_type_) none 11) + (rigid-body-method-12 (_type_ float) none 12) + (rigid-body-method-13 (_type_) none 13) + (rigid-body-method-14 (_type_ float) none 14) + (rigid-body-method-15 () none 15) + (clear-force-torque! (_type_) none 16) + (clear-momentum! (_type_) none 17) + (rigid-body-method-18 (_type_ vector vector) none 18) + (rigid-body-method-19 (_type_ vector vector) none 19) + (rigid-body-method-20 (_type_ vector) none 20) + (rigid-body-method-21 (_type_ vector vector float) none 21) + (rigid-body-method-22 (_type_ vector vector) vector 22) + (rigid-body-method-23 (_type_ vector) vector 23) + (rigid-body-method-24 (_type_) none 24) + (rigid-body-method-25 (_type_ rigid-body-info vector quaternion basic) none 25) + (rigid-body-method-26 (_type_ vector quaternion) none 26) + (print-physics (_type_ object) none 27) + (print-force-torque (_type_ object) none 28) + (print-position-rotation (_type_ object) none 29) + (print-momentum (_type_ object) none 30) + (print-velocity (_type_ object) none 31) + ) + ) + + +(deftype rigid-body-control (basic) + ((process process :offset-assert 4) + (state rigid-body :inline :offset-assert 16) + (work basic :offset 16) + (info rigid-body-info :offset 20) + (flags rigid-body-flag :offset 24) + (force-callback basic :offset 28) + (blocked-by basic :offset 32) + (time-remaining float :offset 36) + (step-count int16 :offset 40) + (position vector :inline :offset 48) + (rot vector :inline :offset 64) + (rotation quaternion :inline :offset 64) + (lin-momentum vector :inline :offset 80) + (ang-momentum vector :inline :offset 96) + (force vector :inline :offset 112) + (torque vector :inline :offset 128) + (lin-velocity vector :inline :offset 144) + (ang-velocity vector :inline :offset 160) + (matrix matrix :inline :offset 176) + (inv-i-world matrix :inline :offset 240) + ) + :method-count-assert 26 + :size-assert #x130 + :flag-assert #x1a00000130 + (:methods + (rigid-body-control-method-9 (_type_) none 9) + (rigid-body-control-method-10 (_type_) none 10) + (rigid-body-control-method-11 (_type_) none 11) + (rigid-body-control-method-12 (_type_ float) none 12) + (rigid-body-control-method-13 (_type_) none 13) + (rigid-body-control-method-14 (_type_ float) none 14) + (clear-force-torque! (_type_) none 15) + (clear-momentum! (_type_) none 16) + (rigid-body-control-method-17 (_type_ vector vector) none 17) + (rigid-body-control-method-18 (_type_ vector vector) none 18) + (rigid-body-control-method-19 (_type_ vector) none 19) + (rigid-body-control-method-20 (_type_ vector vector float) none 20) + (rigid-body-control-method-21 (_type_ vector vector) vector 21) + (rigid-body-control-method-22 (_type_ vector) vector 22) + (rigid-body-control-method-23 (_type_) none 23) + (rigid-body-control-method-24 (_type_ rigid-body-info vector quaternion basic) none 24) + (rigid-body-control-method-25 (_type_ vector quaternion) none 25) + ) + ) + + +(defmethod rigid-body-control-method-9 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-9 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-10 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-10 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-11 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-11 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-12 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-12 (-> obj state) arg0) + (none) + ) + +(defmethod rigid-body-control-method-13 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-13 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-14 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-14 (-> obj state) arg0) + (none) + ) + +(defmethod clear-force-torque! rigid-body-control ((obj rigid-body-control)) + (clear-force-torque! (-> obj state)) + (none) + ) + +(defmethod clear-momentum! rigid-body-control ((obj rigid-body-control)) + (clear-momentum! (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-17 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-18 (-> obj state) arg0 arg1) + (none) + ) + +(defmethod rigid-body-control-method-18 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-19 (-> obj state) arg0 arg1) + (none) + ) + +(defmethod rigid-body-control-method-19 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-20 (-> obj state) arg0) + (none) + ) + +(defmethod rigid-body-control-method-20 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector) (arg2 float)) + (rigid-body-method-21 (-> obj state) arg0 arg1 arg2) + (none) + ) + +(defmethod rigid-body-control-method-21 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-22 (-> obj state) arg0 arg1) + ) + +(defmethod rigid-body-control-method-22 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-23 (-> obj state) arg0) + ) + +(defmethod rigid-body-control-method-23 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-24 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-24 rigid-body-control ((obj rigid-body-control) (arg0 rigid-body-info) (arg1 vector) (arg2 quaternion) (arg3 basic)) + (rigid-body-method-25 (-> obj state) arg0 arg1 arg2 arg3) + (none) + ) + +(defmethod rigid-body-control-method-25 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 quaternion)) + (rigid-body-method-26 (-> obj state) arg0 arg1) + (none) + ) + +(deftype rigid-body-object (process-focusable) + ((info rigid-body-object-constants :offset-assert 204) + (flags rigid-body-object-flag :offset-assert 208) + (max-time-step float :offset-assert 216) + (incoming-attack-id uint32 :offset-assert 220) + (player-touch-time time-frame :offset-assert 224) + (disturbed-time time-frame :offset-assert 232) + (player-force-position vector :inline :offset-assert 240) + (player-force vector :inline :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 53 + :size-assert #x110 + :flag-assert #x3500900110 + (:methods + (rigid-body-object-method-27 () none 27) + (rigid-body-object-method-28 () none 28) + (rigid-body-object-method-29 () none 29) + (rigid-body-object-method-30 () none 30) + (rigid-body-object-method-31 () none 31) + (rigid-body-object-method-32 () none 32) + (rigid-body-object-method-33 () none 33) + (rigid-body-object-method-34 () none 34) + (rigid-body-object-method-35 () none 35) + (rigid-body-object-method-36 () none 36) + (rigid-body-object-method-37 () none 37) + (rigid-body-object-method-38 () none 38) + (rigid-body-object-method-39 () none 39) + (rigid-body-object-method-40 () none 40) + (rigid-body-object-method-41 () none 41) + (rigid-body-object-method-42 () none 42) + (rigid-body-object-method-43 () none 43) + (rigid-body-object-method-44 () none 44) + (rigid-body-object-method-45 () none 45) + (rigid-body-object-method-46 () none 46) + (rigid-body-object-method-47 () none 47) + (rigid-body-object-method-48 () none 48) + (rigid-body-object-method-49 () none 49) + (rigid-body-object-method-50 () none 50) + (rigid-body-object-method-51 () none 51) + (rigid-body-object-method-52 () none 52) + ) + ) + + +(deftype rigid-body-queue (structure) + ((count int8 :offset-assert 0) + (array uint64 128 :offset 8) + ) + :method-count-assert 17 + :size-assert #x408 + :flag-assert #x1100000408 + (:methods + (rigid-body-queue-method-9 () none 9) + (rigid-body-queue-method-10 () none 10) + (rigid-body-queue-method-11 () none 11) + (rigid-body-queue-method-12 () none 12) + (rigid-body-queue-method-13 () none 13) + (rigid-body-queue-method-14 () none 14) + (rigid-body-queue-method-15 () none 15) + (rigid-body-queue-method-16 () none 16) + ) + ) diff --git a/goal_src/jak2/engine/physics/trajectory.gc b/goal_src/jak2/engine/physics/trajectory.gc index 1fda361bc4..1a4cb82c58 100644 --- a/goal_src/jak2/engine/physics/trajectory.gc +++ b/goal_src/jak2/engine/physics/trajectory.gc @@ -23,7 +23,6 @@ (/ (- (-> obj initial-velocity y)) (-> obj gravity)) ) -;; WARN: Return type mismatch int vs none. (defmethod setup-from-to-duration! trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) (set! (-> obj initial-position quad) (-> arg0 quad)) (set! (-> obj gravity) arg3) @@ -37,7 +36,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defmethod setup-from-to-xz-vel! trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) (let ((f0-1 (/ (vector-vector-xz-distance arg1 arg0) arg2))) (setup-from-to-duration! obj arg0 arg1 f0-1 arg3) @@ -46,7 +44,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defmethod setup-from-to-y-vel! trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) (let* ((f0-0 arg2) (f1-3 (- (* f0-0 f0-0) (* 2.0 (- (-> arg0 y) (-> arg1 y)) arg3))) @@ -63,7 +60,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defmethod setup-from-to-height! trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) (let* ((f0-1 (+ arg2 (fmax (-> arg0 y) (-> arg1 y)))) (f1-4 (* 2.0 (- (-> arg0 y) f0-1) arg3)) @@ -78,7 +74,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. ;; WARN: Function (method 16 trajectory) has a return type of none, but the expression builder found a return statement. (defmethod setup-from-to-duration-and-height! trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) (let ((f0-1 (- (-> arg1 y) (-> arg0 y)))) @@ -112,7 +107,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defmethod debug-draw trajectory ((obj trajectory)) (let ((s5-0 (new 'stack-no-clear 'vector)) (s4-0 (new 'stack-no-clear 'vector)) @@ -124,7 +118,15 @@ (let ((f0-1 (* (-> obj time) (/ (+ 1.0 (the float s2-0)) (the float s3-0))))) (compute-trans-at-time obj f0-1 s4-0) ) - (add-debug-line #t (bucket-id debug-no-zbuf1) s5-0 s4-0 (new 'static 'rgba :r #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line + #t + (bucket-id debug-no-zbuf1) + s5-0 + s4-0 + (new 'static 'rgba :r #xff :a #x80) + #f + (the-as rgba -1) + ) ) ) 0 @@ -142,7 +144,6 @@ obj ) -;; WARN: Return type mismatch int vs none. (defmethod update-from-cspace impact-control ((obj impact-control)) (when (>= (-> obj joint) 0) (set! (-> obj trans 1 quad) (-> obj trans 0 quad)) @@ -254,20 +255,21 @@ ) ) (sphere<-vector+r! s1-0 arg1 arg2) - (let ((t9-4 (method-of-object *actor-hash* spatial-hash-method-36))) - (-> s2-1 data) - (-> s2-1 allocated-length) - (set! (-> s2-1 length) (the-as int (t9-4))) - ) + (set! (-> s2-1 length) (spatial-hash-method-36 + *actor-hash* + s1-0 + (the-as (pointer collide-shape) (-> s2-1 data)) + (-> s2-1 allocated-length) + ) + ) (let ((gp-2 (find-nearest-focusable (the-as (array collide-shape) s2-1) arg1 arg2 - (the-as search-info-flag (if (= arg4 65536.0) - 515 - 595 - ) - ) + (if (= arg4 65536.0) + (search-info-flag crate enemy combo) + (search-info-flag crate enemy prefer-angle cull-angle combo) + ) (search-info-flag) arg3 (the-as vector #f) @@ -390,7 +392,6 @@ ) ) -;; WARN: Return type mismatch int vs none. (defmethod cubic-curve-method-9 cubic-curve ((obj cubic-curve) (arg0 vector) (arg1 vector) (arg2 vector) (arg3 vector)) (rlet ((acc :class vf) (vf0 :class vf) @@ -464,7 +465,6 @@ arg0 ) -;; WARN: Return type mismatch int vs none. (defmethod debug-draw-curve cubic-curve ((obj cubic-curve)) (let ((s5-0 (new 'stack-no-clear 'trajectory)) (s4-0 10) @@ -491,7 +491,3 @@ 0 (none) ) - - - - diff --git a/goal_src/jak2/engine/process-drawable/process-drawable-h.gc b/goal_src/jak2/engine/process-drawable/process-drawable-h.gc index b34e3d9ce8..636c7bce15 100644 --- a/goal_src/jak2/engine/process-drawable/process-drawable-h.gc +++ b/goal_src/jak2/engine/process-drawable/process-drawable-h.gc @@ -20,6 +20,11 @@ (define-extern ja-min? (function int symbol :behavior process-drawable)) (define-extern ja-max? (function int symbol :behavior process-drawable)) +;; NOTE - for basebutton +(define-extern rider-trans (function none :behavior process-drawable)) +;; NOTE - for base-plat +(define-extern rider-post (function none :behavior process-drawable)) + ;; DECOMP BEGINS (defun cspace-by-name-no-fail ((arg0 process-drawable) (arg1 string)) diff --git a/goal_src/jak2/engine/process-drawable/simple-focus.gc b/goal_src/jak2/engine/process-drawable/simple-focus.gc index 0af3042720..3bc35286a5 100644 --- a/goal_src/jak2/engine/process-drawable/simple-focus.gc +++ b/goal_src/jak2/engine/process-drawable/simple-focus.gc @@ -7,3 +7,58 @@ ;; DECOMP BEGINS +(deftype simple-focus (process-focusable) + ((first-time? symbol :offset-assert 204) + ) + :heap-base #x50 + :method-count-assert 28 + :size-assert #xd0 + :flag-assert #x1c005000d0 + (:methods + (idle () _type_ :state 27) + ) + ) + + +(defmethod get-trans simple-focus ((obj simple-focus) (arg0 int)) + "@returns the `trans` [[vector]] from the process's `root` (typically either a [[trsqv]] or a [[collide-shape]]" + (-> obj root trans) + ) + +(defmethod run-logic? simple-focus ((obj simple-focus)) + (when (-> obj first-time?) + (set! (-> obj first-time?) #f) + #t + ) + ) + +(defstate idle (simple-focus) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (when (= v1-0 'move-trans) + (let ((v0-0 (-> self root trans))) + (set! (-> v0-0 quad) (-> (the-as vector (-> event param 0)) quad)) + v0-0 + ) + ) + ) + ) + ) + :code (the-as (function none :behavior simple-focus) sleep-code) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior simple-focus-init-by-other simple-focus () + "Initializes the new [[simple-focus]]. `first-time?` will be set to [[#t]]" + (let ((root (new 'process 'trsqv))) + (set! (-> self root) root) + (vector-identity! (-> root scale)) + (quaternion-identity! (-> root quat)) + ) + (logclear! (-> self mask) (process-mask enemy)) + (set! (-> self first-time?) #t) + (set! (-> self event-hook) (-> (method-of-object self idle) event)) + (go-virtual idle) + (none) + ) diff --git a/goal_src/jak2/engine/process-drawable/simple-nav-sphere.gc b/goal_src/jak2/engine/process-drawable/simple-nav-sphere.gc index 7b58df92de..9bb4311b78 100644 --- a/goal_src/jak2/engine/process-drawable/simple-nav-sphere.gc +++ b/goal_src/jak2/engine/process-drawable/simple-nav-sphere.gc @@ -7,3 +7,142 @@ ;; DECOMP BEGINS +(deftype simple-nav-sphere (process-drawable) + ((root-override collide-shape :offset 128) + (first-time? symbol :offset-assert 200) + (track-joint int32 :offset-assert 204) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xd0 + :flag-assert #x16005000d0 + (:methods + (idle () _type_ :state 20) + (active () _type_ :state 21) + ) + ) + + +;; WARN: Return type mismatch object vs none. +(defbehavior simple-nav-sphere-event-handler simple-nav-sphere ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('die-fast) + (go empty-state) + ) + (('move-trans) + (collide-shape-method-29 (-> self root-override) (the-as vector (-> event param 0))) + #t + ) + (('set-radius) + (let ((radius (the-as float (-> event param 0))) + (collide-shape (-> self root-override)) + ) + (set! (-> collide-shape nav-radius) radius) + (set! (-> collide-shape root-prim local-sphere w) radius) + (collide-shape-method-46 collide-shape) + ) + #t + ) + ) + (none) + ) + +(defmethod run-logic? simple-nav-sphere ((obj simple-nav-sphere)) + (cond + (*display-nav-marks* + #t + ) + ((>= (-> obj track-joint) 0) + #t + ) + ((-> obj first-time?) + (set! (-> obj first-time?) #f) + #t + ) + ) + ) + +(defstate idle (simple-nav-sphere) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior simple-nav-sphere) + simple-nav-sphere-event-handler + ) + :trans (behavior () + (if *display-nav-marks* + (add-debug-sphere + #t + (bucket-id debug2) + (-> self root-override trans) + (-> self root-override nav-radius) + (new 'static 'rgba :r #x80 :g #x40 :a #x80) + ) + ) + (none) + ) + :code (the-as (function none :behavior simple-nav-sphere) sleep-code) + ) + +(defstate active (simple-nav-sphere) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior simple-nav-sphere) + simple-nav-sphere-event-handler + ) + :trans (behavior () + (let ((v1-0 (ppointer->process (-> self parent))) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! gp-0 (-> (the-as process-drawable v1-0) node-list data (-> self track-joint))) + (collide-shape-method-29 (-> self root-override) gp-0) + ) + (none) + ) + :code (the-as (function none :behavior simple-nav-sphere) sleep-code) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior simple-nav-sphere-init-by-other simple-nav-sphere ((arg0 float) (arg1 vector) (arg2 nav-mesh) (arg3 int)) + (set! (-> self track-joint) arg3) + (set! (-> self first-time?) #t) + (let ((s5-0 (new 'process 'collide-shape self (collide-list-enum usually-hit-by-player)))) + (let ((v1-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-3 prim-core collide-as) (collide-spec obstacle)) + (set-vector! (-> v1-3 local-sphere) 0.0 0.0 0.0 4096.0) + (set! (-> s5-0 total-prims) (the-as uint 1)) + (set! (-> s5-0 root-prim) v1-3) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-6 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-6 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-6 prim-core collide-with)) + ) + (set! (-> s5-0 nav-radius) arg0) + (set! (-> s5-0 root-prim local-sphere w) arg0) + (if arg1 + (set! (-> s5-0 trans quad) (-> arg1 quad)) + ) + (vector-identity! (-> s5-0 scale)) + (quaternion-identity! (-> s5-0 quat)) + (let ((v1-11 (-> s5-0 root-prim))) + (set! (-> v1-11 prim-core collide-as) (collide-spec)) + (set! (-> v1-11 prim-core collide-with) (collide-spec)) + ) + 0 + (collide-shape-method-46 s5-0) + (set! (-> self root-override) s5-0) + ) + (logclear! (-> self mask) (process-mask actor-pause enemy)) + (set! (-> self event-hook) + (the-as (function process int symbol event-message-block object) simple-nav-sphere-event-handler) + ) + (if arg2 + (nav-mesh-method-29 arg2 self #f) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh self)) + ) + (if (>= (-> self track-joint) 0) + (go-virtual active) + (go-virtual idle) + ) + (none) + ) diff --git a/goal_src/jak2/engine/scene/scene-h.gc b/goal_src/jak2/engine/scene/scene-h.gc index 25b7b5a55c..276c0bb806 100644 --- a/goal_src/jak2/engine/scene/scene-h.gc +++ b/goal_src/jak2/engine/scene/scene-h.gc @@ -12,12 +12,12 @@ ;; DECOMP BEGINS (deftype scene-actor (basic) - ((name basic :offset-assert 4) + ((name string :offset-assert 4) (level basic :offset-assert 8) - (art-group basic :offset-assert 12) - (prefix basic :offset-assert 16) - (draw-frames basic :offset-assert 20) - (scissor-frames basic :offset-assert 24) + (art-group string :offset-assert 12) + (prefix string :offset-assert 16) + (draw-frames pair :offset-assert 20) + (scissor-frames pair :offset-assert 24) (camera int16 :offset-assert 28) (light-index uint8 :offset-assert 30) (shadow-mask uint8 :offset-assert 31) @@ -28,89 +28,90 @@ (shadow-volume-joint basic :offset-assert 48) (draw-seg uint64 :offset-assert 56) (no-draw-seg uint64 :offset-assert 64) - (process uint64 :offset-assert 72) + (process handle :offset-assert 72) ) :method-count-assert 10 :size-assert #x50 :flag-assert #xa00000050 (:methods - (scene-actor-method-9 () none 9) + (scene-actor-method-9 (_type_ scene-player) (pointer process) 9) ) ) (deftype scene (art-group) - ((mask-to-clear uint32 :offset-assert 32) - (entity basic :offset-assert 36) - (art-group basic :offset-assert 40) - (anim basic :offset-assert 44) - (parts int32 :offset-assert 48) - (command-list basic :offset-assert 52) - (cut-list basic :offset-assert 56) - (wait-max-time time-frame :offset-assert 64) - (wait-air-time time-frame :offset-assert 72) - (wait-ground-time time-frame :offset-assert 80) - (draw-target basic :offset-assert 88) - (abort basic :offset-assert 92) - (actor basic :offset-assert 96) - (load-point basic :offset-assert 100) - (end-point basic :offset-assert 104) - (borrow basic :offset-assert 108) - (sfx-volume float :offset-assert 112) - (ambient-volume float :offset-assert 116) - (music-volume float :offset-assert 120) - (blackout-end basic :offset-assert 124) - (peaceful basic :offset-assert 128) - (music-delay float :offset-assert 132) - (save basic :offset-assert 136) - (scene-task uint16 :offset-assert 140) + ((mask-to-clear uint32 :offset-assert 32) + (entity string :offset-assert 36) + (art-group string :offset-assert 40) + (anim string :offset-assert 44) + (parts int32 :offset-assert 48) + (command-list basic :offset-assert 52) + (cut-list pair :offset-assert 56) + (wait-max-time time-frame :offset-assert 64) + (wait-air-time time-frame :offset-assert 72) + (wait-ground-time time-frame :offset-assert 80) + (draw-target level-load-info :offset-assert 88) + (abort basic :offset-assert 92) + (actor (array scene-actor) :offset-assert 96) + (load-point string :offset-assert 100) + (end-point string :offset-assert 104) + (borrow basic :offset-assert 108) + (sfx-volume float :offset-assert 112) + (ambient-volume float :offset-assert 116) + (music-volume float :offset-assert 120) + (blackout-end basic :offset-assert 124) + (peaceful basic :offset-assert 128) + (music-delay float :offset-assert 132) + (save basic :offset-assert 136) + (scene-task uint16 :offset-assert 140) ) :method-count-assert 17 :size-assert #x8e :flag-assert #x110000008e (:methods - (scene-method-15 () none 15) - (scene-method-16 () none 16) + (scene-method-15 (_type_ spool-anim) none 15) + (scene-method-16 (_type_) _type_ 16) ) ) + (deftype scene-player (process-drawable) - ((scene-list basic :offset-assert 200) - (scene basic :offset-assert 204) - (scene-index int32 :offset-assert 208) - (anim basic :offset-assert 212) - (next-anim basic :offset-assert 216) - (camera uint64 :offset-assert 224) - (main-entity basic :offset-assert 232) - (wait basic :offset-assert 236) - (old-target-pos transformq :inline :offset-assert 240) - (pre-cut-frame basic :offset-assert 288) - (preload-continue basic :offset-assert 292) - (dma-max uint32 :offset-assert 296) - (gui-id uint32 :offset-assert 300) - (aborted? basic :offset-assert 304) - (scene-start-time time-frame :offset-assert 312) - (targ-speed float :offset-assert 320) - (cur-speed float :offset-assert 324) - (speed-change-time time-frame :offset-assert 328) - (speed-press-time time-frame :offset-assert 336) - (speed-change-speed float :offset-assert 344) - (subtitle-change-time time-frame :offset-assert 352) - (user-sound uint32 4 :offset-assert 360) + ((scene-list (pointer symbol) :offset-assert 200) + (scene scene :offset-assert 204) + (scene-index int32 :offset-assert 208) + (anim spool-anim :offset-assert 212) + (next-anim spool-anim :offset-assert 216) + (camera handle :offset-assert 224) + (main-entity entity-actor :offset-assert 232) + (wait basic :offset-assert 236) + (old-target-pos transformq :inline :offset-assert 240) + (pre-cut-frame basic :offset-assert 288) + (preload-continue string :offset-assert 292) + (dma-max uint32 :offset-assert 296) + (gui-id uint32 :offset-assert 300) + (aborted? symbol :offset-assert 304) + (scene-start-time time-frame :offset-assert 312) + (targ-speed float :offset-assert 320) + (cur-speed float :offset-assert 324) + (speed-change-time time-frame :offset-assert 328) + (speed-press-time time-frame :offset-assert 336) + (speed-change-speed float :offset-assert 344) + (subtitle-change-time time-frame :offset-assert 352) + (user-sound uint32 4 :offset-assert 360) ) :heap-base #x100 :method-count-assert 26 :size-assert #x178 :flag-assert #x1a01000178 (:methods - (scene-player-method-20 () none 20) - (scene-player-method-21 () none 21) - (scene-player-method-22 () none 22) - (scene-player-method-23 () none 23) - (scene-player-method-24 () none 24) - (scene-player-method-25 () none 25) + (wait (symbol) _type_ :state 20) + (release () _type_ :state 21) + (play-anim () _type_ :state 22) + (scene-player-method-23 (_type_ string symbol) none 23) + (scene-player-method-24 (_type_ basic symbol) scene 24) + (scene-player-method-25 (_type_ float) none 25) ) ) -(define *scene-player* (the-as scene-player #f)) +(define *scene-player* (the-as scene-player #f)) diff --git a/goal_src/jak2/engine/spatial-hash/actor-hash-h.gc b/goal_src/jak2/engine/spatial-hash/actor-hash-h.gc index fa646d827e..a1a5462728 100644 --- a/goal_src/jak2/engine/spatial-hash/actor-hash-h.gc +++ b/goal_src/jak2/engine/spatial-hash/actor-hash-h.gc @@ -11,6 +11,6 @@ ;; DECOMP BEGINS -(define *actor-list* (malloc 'global 1024)) -(define *actor-list-length* 0) +(define *actor-list* (the-as (pointer collide-shape) (malloc 'global 1024))) +(define *actor-list-length* 0) diff --git a/goal_src/jak2/engine/spatial-hash/spatial-hash-h.gc b/goal_src/jak2/engine/spatial-hash/spatial-hash-h.gc index 4b58a6165c..94e70623c7 100644 --- a/goal_src/jak2/engine/spatial-hash/spatial-hash-h.gc +++ b/goal_src/jak2/engine/spatial-hash/spatial-hash-h.gc @@ -126,17 +126,10 @@ (:methods (spatial-hash-method-34 () none 34) (spatial-hash-method-35 () none 35) - (spatial-hash-method-36 () none 36) + (spatial-hash-method-36 (_type_ sphere (pointer collide-shape) int) int 36) (spatial-hash-method-37 () none 37) (spatial-hash-method-38 () none 38) (spatial-hash-method-39 () none 39) (spatial-hash-method-40 () none 40) ) ) - - -0 - - - - diff --git a/goal_src/jak2/engine/target/board/target-board.gc b/goal_src/jak2/engine/target/board/target-board.gc index e235c915a5..e8362e7fad 100644 --- a/goal_src/jak2/engine/target/board/target-board.gc +++ b/goal_src/jak2/engine/target/board/target-board.gc @@ -52,7 +52,8 @@ (define-extern target-board-clone-anim (state handle target)) (define-extern target-board-hit (state vector target)) -;; definition for symbol *board-walk-mods*, type surface +;; decomp begins + (define *board-walk-mods* (new 'static 'surface :name 'run @@ -144,7 +145,6 @@ ) ) -;; definition for symbol *board-duck-mods*, type surface (define *board-duck-mods* (new 'static 'surface :name 'duck :turnv 21845.334 @@ -180,7 +180,6 @@ (set! (-> *board-duck-mods* mult-hook) (-> *board-walk-mods* mult-hook)) -;; definition for symbol *board-air-mods*, type surface (define *board-air-mods* (new 'static 'surface :name 'air :turnv 49152.0 @@ -215,7 +214,6 @@ ) ) -;; definition for symbol *board-jump-mods*, type surface (define *board-jump-mods* (new 'static 'surface :name 'jump :turnv 49152.0 @@ -244,7 +242,6 @@ ) ) -;; definition for symbol *board-ride-jump-mods*, type surface (define *board-ride-jump-mods* (new 'static 'surface :name 'jump @@ -288,12 +285,10 @@ ) ) -;; definition for symbol *board-duck-jump-mods*, type surface (define *board-duck-jump-mods* *board-jump-mods*) (define *board-spin-mods* (copy *board-jump-mods* 'global)) -;; failed to figure out what this is: (let ((v1-10 *board-spin-mods*)) (set! (-> v1-10 name) 'spin) (set! (-> v1-10 flags) (surface-flag no-turn-around check-edge air)) @@ -328,7 +323,6 @@ (set! *board-flip-mods* v1-14) ) -;; definition for symbol *board-wall-kick-mods*, type surface (define *board-wall-kick-mods* (new 'static 'surface :name 'jump @@ -367,7 +361,6 @@ ) ) -;; definition for symbol *board-halfpipe-mods*, type surface (define *board-halfpipe-mods* (new 'static 'surface :name 'jump :turnv 131072.0 @@ -395,7 +388,6 @@ ) ) -;; definition for symbol *board-turn-to-mods*, type surface (define *board-turn-to-mods* (new 'static 'surface :name 'run :turnv 524288.0 @@ -429,7 +421,6 @@ (set! (-> *board-turn-to-mods* mult-hook) (-> *board-walk-mods* mult-hook)) -;; definition for symbol *board-ride-mods*, type surface (define *board-ride-mods* (new 'static 'surface :name 'run :turnv 218453.33 @@ -471,7 +462,6 @@ ) ) -;; definition for symbol *collide-edge-board-halfpipe-spec*, type collide-edge-spec (define *collide-edge-board-halfpipe-spec* (new 'static 'collide-edge-spec :split-dists (new 'static 'array float 2 1024.0 1433.6) :outward-offset (new 'static 'vector :x 708.608 :y 13312.0 :w 1.0) @@ -542,7 +532,6 @@ (none) ) -;; definition for function target-board-init (defbehavior target-board-init target () (target-gun-end-mode #f) (target-exit) @@ -635,8 +624,6 @@ (none) ) -;; definition for function target-board-exit -;; INFO: Used lq/sq (defbehavior target-board-exit target () (when (not (and (-> self next-state) (let ((v1-3 (-> self next-state name))) @@ -705,8 +692,6 @@ (none) ) -;; definition for function target-board-falling-anim-trans -;; WARN: Return type mismatch int vs none. (defbehavior target-board-falling-anim-trans target () (let ((v1-2 (ja-group))) (cond @@ -725,13 +710,10 @@ (none) ) -;; definition for function board-on-ground? (defbehavior board-on-ground? target () (logtest? (-> self control status) (cshape-moving-flags on-surface)) ) -;; definition for function target-board-smack-surface? -;; INFO: Used lq/sq (defbehavior target-board-smack-surface? target () (when (and (logtest? (-> self control status) (cshape-moving-flags t-wall)) (< (+ (-> self clock frame-counter) (seconds -0.05)) (-> self control unknown-time-frame07)) @@ -748,9 +730,6 @@ ) ) -;; definition for function board-add-thrust -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior board-add-thrust target () (let ((gp-0 (-> self control unknown-vector00))) (let* ((v1-1 gp-0) @@ -883,7 +862,6 @@ (none) ) -;; definition for function segment-array-vector->index (defun segment-array-vector->index ((arg0 (inline-array vector)) (arg1 int) (arg2 float) (arg3 float)) (let ((gp-0 -1) (f30-0 0.0) @@ -901,7 +879,6 @@ ) ) -;; definition for function segment-array-index->vector (defun segment-array-index->vector ((arg0 (inline-array vector)) (arg1 int) (arg2 float) (arg3 vector)) (let ((v0-0 (the int arg2))) (let* ((f0-2 arg2) @@ -921,8 +898,6 @@ ) ) -;; definition for function target-board-exit-check -;; WARN: Return type mismatch int vs none. (defbehavior target-board-exit-check target () (if (and (or (and (cpad-pressed? (-> self control unknown-cpad-info00 number) r2) (or (!= *cheat-mode* 'debug) @@ -947,8 +922,6 @@ (none) ) -;; definition for function target-board-effect -;; WARN: Return type mismatch int vs none. (defbehavior target-board-effect target () (let ((gp-0 0)) (cond @@ -966,7 +939,7 @@ ) (set! gp-0 1) ) - ((zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + ((not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (set! gp-0 2) ) ) @@ -1087,7 +1060,7 @@ ) ) ) - (sparticle-launch-control-method-11 (-> self board part-control) (-> self control trans)) + (spawn (-> self board part-control) (-> self control trans)) (let ((t9-26 (method-of-object (-> self skel effect) effect-control-method-10))) 'effect-board-poof 0 @@ -1111,9 +1084,6 @@ (none) ) -;; definition for function target-board-physics -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-physics target ((arg0 vector)) (let ((f30-0 0.5)) (if (>= (- (-> self clock frame-counter) (-> self board unknown-time-frame02)) (seconds 0.3)) @@ -1224,9 +1194,6 @@ (none) ) -;; definition for function target-board-collision -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-collision target () (let ((gp-0 (new 'stack-no-clear 'vector))) (set! (-> gp-0 quad) (-> self control transv quad)) @@ -1283,7 +1250,7 @@ (set! (-> a2-6 ignore-process1) #f) (set! (-> a2-6 ignore-pat) (-> v1-30 pat-ignore-mask)) (set! (-> a2-6 action-mask) (collide-action solid)) - (collide-shape-method-32 v1-30 (-> v1-30 transv) a2-6 (meters 1.0)) + (collide-shape-method-32 v1-30 (-> v1-30 transv) a2-6 (meters 1)) ) (when (logtest? (-> self control root-prim prim-core action) (collide-action check-edge)) (set! (-> *collide-edge-board-spec* flags) (logand -3 (-> *collide-edge-board-spec* flags))) @@ -1314,7 +1281,7 @@ (when (and (logtest? (-> self control status) (cshape-moving-flags t-wall)) (and (< 16384.0 f30-0) (not (and (-> self next-state) (= (-> self next-state name) 'target-board-smack))) - (zero? (logand (focus-status halfpipe) (-> self focus-status))) + (not (logtest? (focus-status halfpipe) (-> self focus-status))) (!= (-> self control ground-pat mode) 3) (>= (- (-> self clock frame-counter) (-> self board halfpipe-time)) (seconds 0.1)) ) @@ -1421,9 +1388,6 @@ (none) ) -;; definition for function target-board-joint-points -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-joint-points target () (when (-> self board board) (let ((a1-0 (-> self node-list data 25 bone transform))) @@ -1438,9 +1402,6 @@ (none) ) -;; definition for function target-board-pre-move -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-pre-move target () (cond ((and (and (logtest? (-> self control unknown-surface00 flags) (surface-flag air)) @@ -1516,10 +1477,7 @@ (logior! (-> self control root-prim prim-core action) (collide-action check-edge)) (logclear! (-> self control root-prim prim-core action) (collide-action check-edge)) ) - (if (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) - (pad-buttons circle square) - ) - ) + (if (not (cpad-hold? (-> self control unknown-cpad-info00 number) circle square)) (set! (-> self board ride-lock) #f) ) (cond @@ -1627,7 +1585,7 @@ (set! (-> self board unknown-time-frame00) (-> self clock frame-counter)) ) ) - (when (and (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (< 0.0 f28-0) (or (and (or (< (target-height-above-ground) 4096.0) (< (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) @@ -1670,9 +1628,6 @@ (none) ) -;; definition for function target-board-real-post -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-real-post target () (let ((f30-0 (-> self clock clock-ratio))) (let ((gp-1 (max 1 (the int (-> self clock time-adjust-ratio))))) @@ -1711,14 +1666,14 @@ ) (if (and (= (-> self control unknown-float12) 0.0) (>= (-> self clock frame-counter) (-> self control unknown-time-frame00)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) (>= (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) ) (rot->dir-targ! (-> self control)) ) (when (and (< (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (seconds 0.1)) (>= (-> self clock frame-counter) (-> self control unknown-time-frame00)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) (>= (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) ) (let* ((s3-0 @@ -1929,8 +1884,6 @@ (none) ) -;; definition for function probe-test -;; INFO: Used lq/sq (defun probe-test ((arg0 control-info) (arg1 vector) (arg2 pat-surface)) (dotimes (s3-0 3) (let ((s2-0 (new 'stack-no-clear 'collide-query))) @@ -2102,7 +2055,7 @@ ) (if (probe-test (-> self control) s3-5 (new 'static 'pat-surface :noentity #x1 :noboard #x1 :probe #x1)) (set! (-> self control status) (logior (cshape-moving-flags csmf16) (-> self control status))) - ((method-of-object (-> self control) collide-shape-method-28)) + (move-by-vector! (-> self control) s3-5) ) ) ) @@ -2309,9 +2262,10 @@ (set! (-> self control transv quad) (-> s5-0 quad)) ) ) - (when (zero? (logand s4-3 64)) - (vector-float*! (new 'stack-no-clear 'vector) (-> self control dynam gravity-normal) 819.2) - ((method-of-object (-> self control) collide-shape-method-28)) + (when (not (logtest? s4-3 64)) + (let ((a1-83 (vector-float*! (new 'stack-no-clear 'vector) (-> self control dynam gravity-normal) 819.2))) + (move-by-vector! (-> self control) a1-83) + ) ) (send-event self 'end-mode (zero? (logand s4-3 75))) ) @@ -2332,8 +2286,6 @@ ) ) -;; definition for function board-ride-add-thrust -;; WARN: Return type mismatch int vs none. (defbehavior board-ride-add-thrust target ((arg0 vector) (arg1 float)) (let* ((f30-0 (-> self board ride-speed)) (f0-4 @@ -2381,9 +2333,6 @@ (none) ) -;; definition for function target-board-ride-post -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-ride-post target () (let ((f30-0 (-> self clock clock-ratio))) (let ((gp-1 (max 1 (the int (-> self clock time-adjust-ratio))))) @@ -2615,22 +2564,17 @@ (none) ) -;; definition for function target-board-post (defbehavior target-board-post target () (target-board-real-post) (none) ) -;; definition for function target-board-center-anim -;; WARN: Return type mismatch int vs none. (defbehavior target-board-center-anim target () (set! (-> self board turn-anim-frame) 0.0) 0 (none) ) -;; definition for function target-board-turn-anim -;; WARN: Return type mismatch int vs none. (defbehavior target-board-turn-anim target ((arg0 int)) (let ((f30-0 (-> self clock clock-ratio))) (let ((s5-1 (max 1 (the int (-> self clock time-adjust-ratio))))) @@ -2742,8 +2686,6 @@ (none) ) -;; definition for method 9 of type board-info -;; WARN: Return type mismatch int vs none. (defmethod add-to-trick-list board-info ((obj board-info) (arg0 board-tricks) (arg1 float)) "Add specified trick and point amount to trick list." (send-event (handle->process (-> obj process 0 notify)) 'notify 'trick-point arg0) @@ -2862,8 +2804,6 @@ (none) ) -;; definition for method 10 of type board-info -;; WARN: Return type mismatch int vs none. (defmethod flush-trick-list board-info ((obj board-info)) "Flush trick list and give out points." (let ((f30-0 0.0)) diff --git a/goal_src/jak2/engine/target/logic-target.gc b/goal_src/jak2/engine/target/logic-target.gc index 1b38f3200f..741bbce6d4 100644 --- a/goal_src/jak2/engine/target/logic-target.gc +++ b/goal_src/jak2/engine/target/logic-target.gc @@ -673,7 +673,7 @@ (< 0.7 (-> self control unknown-float27)) (and (< (-> self control unknown-float05) 8192.0) (logtest? (-> self control status) (cshape-moving-flags t-wall)) - (zero? (logand (-> self control status) (cshape-moving-flags t-act))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act))) (or (= (-> self control unknown-pat-surface00 event) (pat-event hide)) (let ((a0-2 (level-get-target-inside *level*))) (and a0-2 (logtest? (-> a0-2 info level-flags) 1)) @@ -984,7 +984,7 @@ ) (vector-matrix*! s2-0 s3-1 (-> self control unknown-matrix01)) (let ((f28-0 (vector-vector-xz-distance s3-1 s4-0))) - (when (and (zero? (logand (-> self control status) (cshape-moving-flags t-surface))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags t-surface))) (let ((v1-51 gp-0)) (< (sqrtf (+ (* (-> v1-51 x) (-> v1-51 x)) (* (-> v1-51 z) (-> v1-51 z)))) (sqrtf (+ (* (-> s3-1 x) (-> s3-1 x)) (* (-> s3-1 z) (-> s3-1 z)))) @@ -1000,7 +1000,7 @@ ) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags t-wall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags t-wall))) (logtest? (-> self control old-status) (cshape-moving-flags t-wall)) (logtest? (-> self control unknown-surface00 flags) (surface-flag air)) (< 0.0 (-> gp-0 y)) @@ -1019,7 +1019,7 @@ (if (< (- (-> self clock frame-counter) (-> self control unknown-time-frame09)) (seconds 0.2)) (set! f30-0 (+ 204800.0 f30-0)) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags t-wall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags t-wall))) (and (logtest? (-> self control old-status) (cshape-moving-flags t-wall)) (logtest? (-> self control unknown-surface00 flags) (surface-flag air)) (< 0.0 (-> gp-0 y)) @@ -1163,10 +1163,10 @@ ((logtest? (surface-flag turn-to-alt) (-> self control unknown-surface01 flags)) (-> self control unknown-vector03) ) - ((and (or (zero? (logand (logior (-> self control status) (-> self control old-status)) + ((and (or (not (logtest? (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags on-surface t-surface) ) - ) + ) (< (- (-> self clock frame-counter) (-> self control unknown-time-frame07)) (seconds 0.5)) (not (and (-> self next-state) (let ((v1-15 (-> self next-state name))) (or (= v1-15 'target-walk) (= v1-15 'target-gun-walk)) @@ -1616,7 +1616,7 @@ (set! (-> self control unknown-time-frame06) (-> self clock frame-counter)) (set! (-> self control unknown-vector21 quad) (-> self control trans quad)) (if (and (>= (-> self control coverage) 1.0) - (zero? (logand (-> self control status) (cshape-moving-flags t-act on-water))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act on-water))) (logtest? (-> self control status) (cshape-moving-flags on-ground)) ) (set! (-> self control unknown-vector23 quad) (-> self control trans quad)) @@ -1644,12 +1644,12 @@ ) (when (and (cpad-pressed? (-> self control unknown-cpad-info00 number) r3) (zero? (-> self control unknown-word07)) - (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask movie))) + (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask movie))) (not *pause-lock*) ) (if (and (= (-> self cam-user-mode) 'normal) (logtest? (-> self control unknown-surface00 flags) (surface-flag look-around)) - (zero? (logand (focus-status edge-grab pole flut tube board pilot dark) (-> self focus-status))) + (not (logtest? (focus-status edge-grab pole flut tube board pilot dark) (-> self focus-status))) (-> *setting-control* user-current allow-look-around) (>= (- (-> self clock frame-counter) (the-as int (-> self no-look-around-wait))) (seconds 0.05)) (not (and (= (-> self control ground-pat material) (pat-material ice)) @@ -1710,7 +1710,7 @@ (cpad-hold? (-> self control unknown-cpad-info00 number) r2) (cpad-hold? (-> self control unknown-cpad-info00 number) l2) (not *pause-lock*) - (zero? (logand (focus-status grabbed in-head pilot) (-> self focus-status))) + (not (logtest? (focus-status grabbed in-head pilot) (-> self focus-status))) (not (and (-> self next-state) (let ((v1-167 (-> self next-state name))) (or (= v1-167 'target-darkjak-get-on) (= v1-167 'target-float)) ) @@ -1794,8 +1794,8 @@ (and (or (not (and (= *cheat-mode* 'debug) (cpad-hold? (-> self control unknown-cpad-info00 number) r2))) *pause-lock* ) - (zero? (logand (focus-status flut pilot mech indax) (-> self focus-status))) - (zero? (logand (-> self state-flags) (state-flags sf7))) + (not (logtest? (focus-status flut pilot mech indax) (-> self focus-status))) + (not (logtest? (-> self state-flags) (state-flags sf7))) #t ) ) @@ -2161,8 +2161,9 @@ ) (else (vector-normalize! s4-1 1228.8) - (vector+! (new 'stack-no-clear 'vector) s4-1 (-> self control unknown-vector05)) - ((method-of-object (-> self control) collide-shape-method-28)) + (let ((a1-20 (vector+! (new 'stack-no-clear 'vector) s4-1 (-> self control unknown-vector05)))) + (move-by-vector! (-> self control) a1-20) + ) (vector-float*! (-> self control rider-last-move) s4-1 (-> self clock frames-per-second)) (set! (-> self control rider-time) (-> self clock frame-counter)) (if (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame16)) (seconds 0.5)) @@ -2250,10 +2251,10 @@ ) (let ((a1-15 (vector-! (new-stack-vector0) (-> gp-0 center-hold) (-> gp-0 center-hold-old)))) (vector-float*! (-> self control rider-last-move) a1-15 (-> self clock frames-per-second)) + (set! (-> self control rider-time) (-> self clock frame-counter)) + (move-by-vector! (-> self control) a1-15) ) ) - (set! (-> self control rider-time) (-> self clock frame-counter)) - ((method-of-object (-> self control) collide-shape-method-28)) (set! (-> self control unknown-float33) 0.0) (joint-control-method-10 (-> self skel)) (draw-control-method-14 (-> self draw) (-> self node-list) (-> self skel)) @@ -2330,10 +2331,7 @@ (let ((a0-26 (vector-! (new-stack-vector0) s5-0 (-> self control unknown-vector30)))) (cond ((and (< 2457.6 (vector-length a0-26)) (not (-> self control unknown-symbol02))) - (let ((s4-2 (method-of-object (-> self control) collide-shape-method-28))) - (vector-normalize! a0-26 2457.6) - (s4-2) - ) + (move-by-vector! (-> self control) (vector-normalize! a0-26 2457.6)) ) (else (set! (-> self control unknown-symbol02) (the-as float #t)) @@ -2368,7 +2366,7 @@ ) (cond ((and (and (-> self next-state) (= (-> self next-state name) 'target-clone-anim)) - (and (zero? (logand (-> self draw status) (draw-control-status no-draw))) + (and (not (logtest? (-> self draw status) (draw-control-status no-draw))) (begin (vector<-cspace! s5-0 (-> self node-list data 3)) (set! (-> s5-0 y) (+ -5896.192 (-> s5-0 y))) @@ -3249,7 +3247,7 @@ (set! (-> s0-0 nav-radius) (* 0.75 (-> s0-0 root-prim local-sphere w))) (let ((v1-66 (-> s0-0 root-prim))) (set! (-> s0-0 backup-collide-as) (-> v1-66 prim-core collide-as)) - (set! (-> s0-0 backup-collde-with) (-> v1-66 prim-core collide-with)) + (set! (-> s0-0 backup-collide-with) (-> v1-66 prim-core collide-with)) ) (set! (-> s0-0 event-priority) (the-as uint 9)) (set! (-> obj control) s0-0) @@ -3350,7 +3348,7 @@ (target-collide-set! 'normal 0.0) (let ((v1-163 (-> obj control root-prim))) (set! (-> obj control backup-collide-as) (-> v1-163 prim-core collide-as)) - (set! (-> obj control backup-collde-with) (-> v1-163 prim-core collide-with)) + (set! (-> obj control backup-collide-with) (-> v1-163 prim-core collide-with)) ) (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj control trans))) (set! (-> obj control unknown-sound-id04) (new-sound-id)) diff --git a/goal_src/jak2/engine/util/script.gc b/goal_src/jak2/engine/util/script.gc index fee1ffe9be..4e243e024a 100644 --- a/goal_src/jak2/engine/util/script.gc +++ b/goal_src/jak2/engine/util/script.gc @@ -5,10 +5,13 @@ ;; name in dgo: script ;; dgos: ENGINE, GAME -;; DECOMP BEGINS +(declare-type script-form structure) +(define-extern *script-form* (inline-array script-form)) (with-pp +;; DECOMP BEGINS + (defun command-get-int ((arg0 object) (arg1 int)) (cond ((null? arg0) @@ -570,8 +573,6 @@ (not sv-16) ) -(define-extern *script-form* (inline-array script-form)) - ;; WARN: Using new Jak 2 rtype-of (defmethod eval! script-context ((obj script-context) (arg0 pair)) (let ((s4-0 (the-as object #f))) @@ -1959,15 +1960,11 @@ (set! (-> v1-109 spec) '((return macro (drawable-region-prim)) (function macro (symbol)) (id eval (binteger))) ) - (set! (-> v1-109 func) (lambda ((arg0 script-context)) - "lookup a region by number and return the region-prim." - (let ((gp-0 region-prim-lookup-by-id) - (a0-2 (command-get-int (-> arg0 param 1) 0)) - ) - 0 - (gp-0 a0-2) - ) - ) + (set! (-> v1-109 func) + (lambda ((arg0 script-context)) + "lookup a region by number and return the region-prim." + (region-prim-lookup-by-id (command-get-int (-> arg0 param 1) 0) #f (the-as symbol 0)) + ) ) ) diff --git a/goal_src/jak2/engine/util/sync-info-h.gc b/goal_src/jak2/engine/util/sync-info-h.gc index 66ff356920..fd547c5184 100644 --- a/goal_src/jak2/engine/util/sync-info-h.gc +++ b/goal_src/jak2/engine/util/sync-info-h.gc @@ -12,6 +12,7 @@ ) ;; DECOMP BEGINS + (deftype sync-info-params (structure) ((sync-type basic :offset-assert 0) (sync-flags sync-flags :offset-assert 8) @@ -28,6 +29,7 @@ :flag-assert #x90000002c ) + (deftype sync-info (structure) ((sync-flags sync-flags :offset-assert 0) (offset float :offset-assert 8) @@ -47,6 +49,7 @@ ) ) + (deftype sync-linear (sync-info) () :method-count-assert 16 @@ -54,6 +57,7 @@ :flag-assert #x1000000010 ) + (deftype sync-eased (sync-info) ((tlo float :offset-assert 16) (thi float :offset-assert 20) @@ -63,11 +67,13 @@ (pause-in float :offset-assert 36) (pause-out float :offset-assert 40) ) + :pack-me :method-count-assert 16 :size-assert #x2c :flag-assert #x100000002c ) + (deftype sync-paused (sync-info) ((pause-in float :offset-assert 16) (pause-out float :offset-assert 20) @@ -77,6 +83,7 @@ :flag-assert #x1000000018 ) + (deftype delayed-rand-float (structure) ((min-time int32 :offset-assert 0) (max-time int32 :offset-assert 4) @@ -96,6 +103,7 @@ ) ) + (deftype oscillating-float (structure) ((value float :offset-assert 0) (target float :offset-assert 4) @@ -113,6 +121,7 @@ ) ) + (deftype bouncing-float (structure) ((osc oscillating-float :inline :offset-assert 0) (max-value float :offset-assert 24) @@ -131,6 +140,7 @@ ) ) + (deftype delayed-rand-vector (structure) ((min-time int32 :offset-assert 0) (max-time int32 :offset-assert 4) @@ -151,6 +161,7 @@ ) ) + (deftype oscillating-vector (structure) ((value vector :inline :offset-assert 0) (target vector :inline :offset-assert 16) diff --git a/goal_src/jak2/examples/debug-jak2.gc b/goal_src/jak2/examples/debug-jak2.gc index 46481b56ba..992aa4c464 100644 --- a/goal_src/jak2/examples/debug-jak2.gc +++ b/goal_src/jak2/examples/debug-jak2.gc @@ -36,7 +36,8 @@ ) (matrix*! cam-temp cam-rot (-> *math-camera* perspective)) (set! (-> inv-cam-rot vector 3 quad) (-> cam-trans quad)) - + (matrix-copy! *save-camera-inv-rot* inv-cam-rot) ;; hack + (set! *external-cam-mode* 'pad-1) ;; fixes it! ;(set! (-> *math-camera* camera-temp data 15) -6.) ) @@ -244,4 +245,84 @@ ) ) proc) - ) \ No newline at end of file + ) + +(defun levelname->x11-color ((name symbol)) + (case name + (('city) "khaki") + (('fortress) "salmon") + (('stadium) "yellow") + (('palace) "hotpink") + (('castle) "gray") + (('ruins) "darkkhaki") + (('atoll) "gold") + (('sewer) "turquoise") + (('strip) "white") + (('mountain) "tan") + (('forest) "limegreen") + (('drill) "seagreen") + (('tomb) "chartreuse") + (('dig) "orange") + (('canyon) "#008B8B") + (('consite) "#90EE90") + (('under) "dodgerblue") + (('nest) "violet") + (('default) "white") + (('test) "purple") + (else "magenta") + ) + ) + +(defun print-task-node-tree-graphviz () + + (format #t "digraph G {~%") + (format #t " node [style=filled shape=ellipse]~%~%") + (let ((game-tasks (-> *game-info* play-list))) + (dotimes (t (-> game-tasks length)) + (let ((task (-> game-tasks t))) + (format #t " subgraph cluster_task_~D {~%" t) + (format #t " label = ~A;~%" (-> task name)) + (format #t " style = filled;~%") + (format #t " fontsize = \"25pt\";~%") + (cond + ((and (>= t (game-task fortress-escape)) + (<= t (game-task nest-boss)) + (!= t (game-task city-blue-gun-training)) + (!= t (game-task city-dark-gun-training))) + (format #t " fillcolor = lightgray;~%") + ) + ((and (>= t (game-task city-burning-bush-ring-1)) + (<= t (game-task stadium-burning-bush-race-class1-r))) + (format #t " fillcolor = pink;~%") + ) + (else + (format #t " fillcolor = lightyellow;~%") + ) + ) + (let ((game-nodes (-> *game-info* sub-task-list))) + (dotimes (i (-> game-nodes length)) + (let ((node (-> game-nodes i))) + (when (= t (-> node task)) + ;; iterate through parents + (dotimes (ii 4) + (when (!= (game-task-node none) (-> node parent-node ii)) + (format #t " ~A -> ~A;~%" (game-task-node->string (-> node parent-node ii)) (-> node name)) + ) + ) + (format #t " ~A [fillcolor=~A shape=~S];~%" (-> node name) (levelname->x11-color (-> node level)) + (cond + ((logtest? (-> node flags) (game-task-node-flag close-task)) + "oval") + (else + "box"))) + ) + ) + ) + (format #t " }~%") + ) + ) + ) + ) + (format #t "}~%") + 0) + diff --git a/goal_src/jak2/game.gp b/goal_src/jak2/game.gp index aa1758f98d..159fd8a4b5 100644 --- a/goal_src/jak2/game.gp +++ b/goal_src/jak2/game.gp @@ -683,6 +683,13 @@ "fort-entry-gate-ag" ) +;;;;;;;;;;;;;;;;;;;;; +;; COMMON +;;;;;;;;;;;;;;;;;;;;; + +(copy-gos + "daxter-highres-ag") + ;;;;;;;;;;;;;;;;;;;;; ;; PRISON ;;;;;;;;;;;;;;;;;;;;; @@ -700,7 +707,6 @@ (copy-textures 1578 1950 1579 2647) (copy-gos - "daxter-highres-ag" "prsn-torture-ag" "prsn-chair-shackle-ag" "prsn-hang-cell-ag" @@ -786,6 +792,30 @@ "ctywide-vis" ) +;;;;;;;;;;;;;;;;;;;;; +;; L CITY WIDE A +;;;;;;;;;;;;;;;;;;;;; + +(cgo "LWIDEA.DGO" "lwidea.gd") + +(copy-textures 2929 2930) + +(copy-gos + "citizen-fat-ag" + "citizen-norm-ag" + "crimson-guard-ag" + "citizen-chick-ag" + "hellcat-ag" + "carc-ag" + "cara-ag" + "carb-ag" + "citizen-norm-rider-ag" + "crimson-bike-ag" + "bikec-ag" + "bikeb-ag" + "bikea-ag" + "lwidea") + ;;;;;;;;;;;;;;;;;;;;; ;; CITY SLUM A ;;;;;;;;;;;;;;;;;;;;; @@ -807,6 +837,27 @@ "ctysluma-vis" ) +;;;;;;;;;;;;;;;;;;;;; +;; VILLAGE 1 +;;;;;;;;;;;;;;;;;;;;; + +(cgo "VI1.DGO" "vi1.gd") +(copy-textures 3034 3037 3035 3038 3036 2761 3516) + +(copy-gos +"darkjak-highres-ag" +"metalkor-torso-ag" +"rift-ring-ag" +"vil-break-support-ag" +"intro-flamer-ag" +"rift-rider-donut-ag" +"vil-windmill-sail-ag" +"vil-windspinner-ag" +"vil-sagesail-ag" +"particleman-ag" +"village1-vis" +) + ;;;;;;;;;;;;;;;;;;;;; ;; ISO Group ;;;;;;;;;;;;;;;;;;;;; diff --git a/goal_src/jak2/kernel/gkernel-h.gc b/goal_src/jak2/kernel/gkernel-h.gc index a45b48a116..221019f106 100644 --- a/goal_src/jak2/kernel/gkernel-h.gc +++ b/goal_src/jak2/kernel/gkernel-h.gc @@ -287,7 +287,7 @@ (allocated-length int32 :offset-assert 84) ;; ?? - (pad0 uint32 2) + (pad-unknown-0 uint32 2) ;; had to rename this unfortunately, there is a type that uses this same name "vehicle" ;; process heap (heap-base pointer :offset-assert 96) @@ -728,4 +728,4 @@ (defmacro scratchpad-ptr (type &key (offset 0)) "Create a pointer to an object on the scratchpad." `(the-as (pointer ,type) (&+ *fake-scratchpad-data* ,offset)) - ) \ No newline at end of file + ) diff --git a/goal_src/jak2/kernel/gstate.gc b/goal_src/jak2/kernel/gstate.gc index 1529628934..788460e8a7 100644 --- a/goal_src/jak2/kernel/gstate.gc +++ b/goal_src/jak2/kernel/gstate.gc @@ -105,7 +105,7 @@ It type checks the arguments for the entry function. (with-gensyms (new-proc) `(let ((,new-proc (the-as ,proc-type (get-process ,from ,proc-type ,stack-size)))) (when ,new-proc - ((method-of-type ,proc-type activate) ,new-proc ,to ,(if name name `(symbol->string ,proc-type)) ,stack) + ((method-of-type ,proc-type activate) ,new-proc ,to ,(if name name `(symbol->string ',proc-type)) ,stack) (run-next-time-in-process ,new-proc ,func ,@args) (the (pointer ,proc-type) (-> ,new-proc ppointer)) ) @@ -120,7 +120,7 @@ It type checks the arguments for the entry function. (with-gensyms (new-proc) `(let ((,new-proc (the-as ,proc-type (get-process ,from ,proc-type ,stack-size)))) (when ,new-proc - ((method-of-type ,proc-type activate) ,new-proc ,to ,(if name name `(symbol->string ,proc-type)) ,stack) + ((method-of-type ,proc-type activate) ,new-proc ,to ,(if name name `(symbol->string ',proc-type)) ,stack) (run-now-in-process ,new-proc ,(if init init (string->symbol (fmt #f "{}-init-by-other" proc-type))) ,@args) (the (pointer ,proc-type) (-> ,new-proc ppointer)) ) diff --git a/goal_src/jak2/levels/city/common/citizen-fat.gc b/goal_src/jak2/levels/city/common/citizen-fat.gc index 703477719b..9dd72129a5 100644 --- a/goal_src/jak2/levels/city/common/citizen-fat.gc +++ b/goal_src/jak2/levels/city/common/citizen-fat.gc @@ -7,3 +7,11 @@ ;; DECOMP BEGINS +(deftype citizen-fat (civilian) + () + :method-count-assert 218 + :size-assert #x424 + :flag-assert #xda03b00424 + (:methods + ) + ) \ No newline at end of file diff --git a/goal_src/jak2/levels/city/common/citizen-h.gc b/goal_src/jak2/levels/city/common/citizen-h.gc index 207a61284d..2aef2eeca8 100644 --- a/goal_src/jak2/levels/city/common/citizen-h.gc +++ b/goal_src/jak2/levels/city/common/citizen-h.gc @@ -7,3 +7,36 @@ ;; DECOMP BEGINS +(deftype citizen (nav-enemy) + ( + (pad uint8 :offset 963)) + :method-count-assert 201 + :size-assert #x3c4 + :flag-assert #xc9035003c4 + ;; Failed to read fields. + (:methods + (citizen-method-178 () none 178) + (citizen-method-179 () none 179) + (citizen-method-180 () none 180) + (citizen-method-181 () none 181) + (citizen-method-182 () none 182) + (citizen-method-183 () none 183) + (citizen-method-184 () none 184) + (citizen-method-185 () none 185) + (citizen-method-186 () none 186) + (citizen-method-187 () none 187) + (citizen-method-188 () none 188) + (citizen-method-189 () none 189) + (citizen-method-190 () none 190) + (citizen-method-191 () none 191) + (citizen-method-192 () none 192) + (citizen-method-193 () none 193) + (citizen-method-194 () none 194) + (citizen-method-195 () none 195) + (citizen-method-196 () none 196) + (citizen-method-197 () none 197) + (citizen-method-198 () none 198) + (citizen-method-199 () none 199) + (citizen-method-200 () none 200) + ) + ) \ No newline at end of file diff --git a/goal_src/jak2/levels/city/common/civilian.gc b/goal_src/jak2/levels/city/common/civilian.gc index 6d17cb9709..8041f9d562 100644 --- a/goal_src/jak2/levels/city/common/civilian.gc +++ b/goal_src/jak2/levels/city/common/civilian.gc @@ -7,3 +7,43 @@ ;; DECOMP BEGINS +(deftype civilian (citizen) + ((info basic :offset-assert 964) + (anim-panic-run int32 :offset-assert 968) + (anim-on-ground int32 :offset-assert 972) + (anim-dive int32 :offset-assert 976) + (anim-get-up-front int32 :offset-assert 980) + (anim-get-up-back int32 :offset-assert 984) + (last-second-pos vector :inline :offset-assert 992) + (last-distance float :offset-assert 1008) + (next-time time-frame :offset-assert 1016) + (dive-target-point vector :inline :offset-assert 1024) + (dive-reaction float :offset-assert 1040) + (allow-dive basic :offset-assert 1044) + (dive-finished? basic :offset-assert 1048) + (hit-face uint32 :offset-assert 1052) + (seat int32 :offset-assert 1056) + ) + :method-count-assert 218 + :size-assert #x424 + :flag-assert #xda03b00424 + (:methods + (avoid-danger () _type_ :state 201) + (clear-path () _type_ :state 202) + (on-ground () _type_ :state 203) + (dive () _type_ :state 204) + (get-up-front () _type_ :state 205) + (get-up-back () _type_ :state 206) + (cower-ground () _type_ :state 207) + (wait-for-ride () _type_ :state 208) + (move-to-vehicle () _type_ :state 209) + (board-vehicle () _type_ :state 210) + (ride () _type_ :state 211) + (exit-vehicle () _type_ :state 212) + (wait-at-dest () _type_ :state 213) + (civilian-method-214 () none 214) + (civilian-method-215 () none 215) + (civilian-method-216 () none 216) + (civilian-method-217 () none 217) + ) + ) \ No newline at end of file diff --git a/goal_src/jak2/levels/city/common/ctywide-obs-h.gc b/goal_src/jak2/levels/city/common/ctywide-obs-h.gc index 5e7c096316..44a3065770 100644 --- a/goal_src/jak2/levels/city/common/ctywide-obs-h.gc +++ b/goal_src/jak2/levels/city/common/ctywide-obs-h.gc @@ -7,3 +7,39 @@ ;; DECOMP BEGINS +(deftype city-race-ring-info (structure) + ((pos vector :inline :offset-assert 0) + (angle float :offset 12) + (boost float :offset-assert 16) + (dist float :offset-assert 20) + ) + :method-count-assert 10 + :size-assert #x18 + :flag-assert #xa00000018 + (:methods + (city-race-ring-info-method-9 () none 9) + ) + ) + + +(deftype city-ambush-spot (structure) + ((pos vector :inline :offset-assert 0) + (obj-type uint8 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x11 + :flag-assert #x900000011 + ) + + +(deftype city-ambush-info (structure) + ((count int16 :offset-assert 0) + (array uint32 :offset-assert 4) + ) + :method-count-assert 10 + :size-assert #x8 + :flag-assert #xa00000008 + (:methods + (city-ambush-info-method-9 () none 9) + ) + ) diff --git a/goal_src/jak2/levels/city/common/nav-graph-h.gc b/goal_src/jak2/levels/city/common/nav-graph-h.gc index be4899aae4..4de3ba0b83 100644 --- a/goal_src/jak2/levels/city/common/nav-graph-h.gc +++ b/goal_src/jak2/levels/city/common/nav-graph-h.gc @@ -23,7 +23,7 @@ ;; DECOMP BEGINS (deftype nav-branch (structure) - ((node nav-node 2 :offset-assert 0) + ((node int32 2 :offset-assert 0) (src-node nav-node :offset 0) (dest-node nav-node :offset 4) (temp-dest-node-id int32 :offset 4) @@ -40,51 +40,51 @@ :size-assert #x10 :flag-assert #x1500000010 (:methods - (nav-branch-method-9 () none 9) - (nav-branch-method-10 () none 10) + (nav-branch-method-9 (_type_) none 9) + (nav-branch-method-10 (_type_ object int) none 10) (nav-branch-method-11 (_type_) float 11) (nav-branch-method-12 (_type_) float 12) (nav-branch-method-13 (_type_) float 13) (user-limit-reached? (_type_) symbol 14) (nav-branch-method-15 (_type_) symbol 15) - (nav-branch-method-16 () none 16) - (nav-branch-method-17 () none 17) - (nav-branch-method-18 () none 18) - (nav-branch-method-19 () none 19) - (nav-branch-method-20 () none 20) + (nav-branch-method-16 (_type_ float) none 16) + (nav-branch-method-17 (_type_ float) none 17) + (nav-branch-method-18 (_type_ float) none 18) + (nav-branch-method-19 (_type_ nav-node) none 19) + (nav-branch-method-20 (_type_ nav-node) none 20) ) ) (deftype nav-node (structure) - ((data uint32 8 :offset-assert 0) - (position vector :inline :offset 0) - (pos-x float :offset 0) - (pos-y float :offset 4) - (pos-z float :offset 8) - (angle uint16 :offset 12) - (id uint16 :offset 14) - (radius uint8 :offset 16) - (branch-count int8 :offset 17) - (flags nav-node-flag-byte :offset 18) - (pad0 int8 1 :offset 19) - (branch-array uint32 :offset 20) - (nav-mesh-id uint32 :offset 24) - (level level :offset 28) + ((data uint32 8 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle uint16 :offset 12) + (id uint16 :offset 14) + (radius uint8 :offset 16) + (branch-count int8 :offset 17) + (flags nav-node-flag-byte :offset 18) + (pad0 int8 1 :offset 19) + (branch-array (inline-array nav-branch) :offset 20) + (nav-mesh-id uint32 :offset 24) + (level symbol :offset 28) ) :method-count-assert 22 :size-assert #x20 :flag-assert #x1600000020 (:methods - (nav-node-method-9 () none 9) - (nav-node-method-10 () none 10) - (nav-node-method-11 () none 11) - (nav-node-method-12 () none 12) - (nav-node-method-13 () none 13) - (nav-node-method-14 () none 14) - (nav-node-method-15 () none 15) - (nav-node-method-16 () none 16) - (nav-node-method-17 () none 17) + (nav-node-method-9 (_type_) none 9) + (nav-node-method-10 (_type_ symbol string) none 10) + (nav-node-method-11 (_type_ int) none 11) + (nav-node-method-12 (_type_ vector nav-node) none 12) + (nav-node-method-13 (_type_ vector) none 13) + (nav-node-method-14 (_type_ nav-node) none 14) + (nav-node-method-15 (_type_ uint) none 15) + (nav-node-method-16 (_type_ float) none 16) + (nav-node-method-17 (_type_ float) none 17) (get-position (_type_ vector) vector 18) (calc-sine-and-cosine! (_type_ vector) vector 19) (get-angle (_type_) float 20) @@ -169,59 +169,60 @@ (deftype nav-graph (basic) - ((node-count int16 :offset-assert 4) - (branch-count int16 :offset-assert 6) - (node-array (inline-array nav-node) :offset-assert 8) - (branch-array uint32 :offset-assert 12) - (link-count int16 :offset-assert 16) - (pad2 uint16 :offset-assert 18) - (link-array uint32 :offset-assert 20) - (first-node int16 :offset-assert 24) - (pad0 uint16 :offset-assert 26) - (patched basic :offset-assert 28) - (id uint32 :offset-assert 32) - (pad1 uint32 6 :offset-assert 36) + ((node-count int16 :offset-assert 4) + (branch-count int16 :offset-assert 6) + (node-array (inline-array nav-node) :offset-assert 8) + (branch-array (inline-array nav-branch) :offset-assert 12) + (link-count int16 :offset-assert 16) + (pad2 uint16 :offset-assert 18) + (link-array (inline-array nav-graph-link) :offset-assert 20) + (first-node int16 :offset-assert 24) + (pad0 uint16 :offset-assert 26) + (patched symbol :offset-assert 28) + (id uint32 :offset-assert 32) + (pad1 uint32 6 :offset-assert 36) ) :method-count-assert 45 :size-assert #x3c :flag-assert #x2d0000003c (:methods - (nav-graph-method-9 () none 9) - (nav-graph-method-10 () none 10) - (nav-graph-method-11 () none 11) - (nav-graph-method-12 () none 12) - (nav-graph-method-13 () none 13) - (nav-graph-method-14 () none 14) - (nav-graph-method-15 () none 15) - (nav-graph-method-16 () none 16) - (nav-graph-method-17 () none 17) - (nav-graph-method-18 () none 18) - (nav-graph-method-19 () none 19) - (nav-graph-method-20 () none 20) - (nav-graph-method-21 () none 21) - (nav-graph-method-22 () none 22) - (nav-graph-method-23 () none 23) - (nav-graph-method-24 () none 24) - (nav-graph-method-25 () none 25) - (nav-graph-method-26 () none 26) - (nav-graph-method-27 () none 27) - (nav-graph-method-28 () none 28) - (nav-graph-method-29 () none 29) - (nav-graph-method-30 () none 30) - (nav-graph-method-31 () none 31) - (nav-graph-method-32 () none 32) - (nav-graph-method-33 () none 33) - (nav-graph-method-34 () none 34) - (nav-graph-method-35 () none 35) - (nav-graph-method-36 () none 36) - (nav-graph-method-37 () none 37) + (new (symbol type int int int uint) _type_ 0) + (nav-graph-method-9 (_type_) none 9) + (nav-graph-method-10 (_type_ vector int) none 10) + (nav-graph-method-11 (_type_) none 11) + (nav-graph-method-12 (_type_) none 12) + (nav-graph-method-13 (_type_ int int) none 13) + (nav-graph-method-14 (_type_ int int) none 14) + (nav-graph-method-15 (_type_) none 15) + (nav-graph-method-16 (_type_ int) nav-node 16) + (nav-graph-method-17 (_type_ nav-node) none 17) + (nav-graph-method-18 (_type_ nav-node int) none 18) + (nav-graph-method-19 (_type_ int int int int int int) none 19) + (nav-graph-method-20 (_type_ int int) none 20) + (nav-graph-method-21 (_type_) none 21) + (nav-graph-method-22 (_type_ int int) none 22) + (nav-graph-method-23 (_type_ int int) none 23) + (nav-graph-method-24 (_type_ int int) none 24) + (nav-graph-method-25 (_type_ symbol symbol) none 25) + (nav-graph-method-26 (_type_ symbol symbol) none 26) + (nav-graph-method-27 (_type_) none 27) + (nav-graph-method-28 (_type_) none 28) + (nav-graph-method-29 (_type_ symbol) none 29) + (nav-graph-method-30 (_type_ uint) none 30) + (nav-graph-method-31 (_type_ float) none 31) + (nav-graph-method-32 (_type_ float) none 32) + (nav-graph-method-33 (_type_ float) none 33) + (nav-graph-method-34 (_type_ float) none 34) + (nav-graph-method-35 (_type_ int) none 35) + (nav-graph-method-36 (_type_ int) none 36) + (nav-graph-method-37 (_type_ vector) none 37) (nav-graph-method-38 () none 38) - (nav-graph-method-39 () none 39) - (nav-graph-method-40 () none 40) + (nav-graph-method-39 (_type_) none 39) + (nav-graph-method-40 (_type_ int) int 40) (node-at-idx (_type_ int) nav-node 41) - (nav-graph-method-42 () none 42) - (nav-graph-method-43 () none 43) - (nav-graph-method-44 () none 44) + (nav-graph-method-42 (_type_) none 42) + (nav-graph-method-43 (_type_ nav-graph-link string) none 43) + (from-editor () none 44) ) ) @@ -237,9 +238,3 @@ v0-0 ) ) - -0 - - - - diff --git a/goal_src/jak2/levels/city/common/vehicle-h.gc b/goal_src/jak2/levels/city/common/vehicle-h.gc index 85c19246a8..fa8c8cb802 100644 --- a/goal_src/jak2/levels/city/common/vehicle-h.gc +++ b/goal_src/jak2/levels/city/common/vehicle-h.gc @@ -5,5 +5,434 @@ ;; name in dgo: vehicle-h ;; dgos: CWI +;; +++vehicle-controller-flag +(defenum vehicle-controller-flag + :type uint32 + :bitfield #t + (debug) + (draw-marks) + (left-turn) + (on-straightaway) + (do-turn) + (blocking-dest-node) + (attached) + (off-path) + (ignore-others) + (direct-mode) + (recovery-mode) + (no-slowing-for-turns)) +;; ---vehicle-controller-flag + + ;; DECOMP BEGINS +(deftype vehicle-lookup-info (structure) + ((turn-radius meters :offset-assert 0) + (throttle-turning float :offset-assert 4) + (throttle-straight float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + + +(deftype vehicle-control-point (structure) + ((local-pos vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + + +(deftype vehicle-section-info (structure) + ((damage-seg-array uint64 3 :offset-assert 0) + (damage-seg-count int8 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ) + + +(deftype vehicle-seat-info (structure) + ((data uint8 16 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle int16 :offset 12) + (flags uint8 :offset 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(deftype vehicle-explosion-info (joint-exploder-static-params) + ((skel basic :offset-assert 16) + (skel-name basic :offset-assert 20) + (anim int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + + +(deftype vehicle-grab-rail-info (structure) + ((local-pos vector 2 :inline :offset-assert 0) + (normal vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + + +(deftype rigid-body-vehicle-constants (rigid-body-object-constants) + ((flags uint32 :offset-assert 208) + (object-type uint8 :offset-assert 212) + (guard-type uint8 :offset-assert 213) + (max-engine-thrust meters :offset-assert 216) + (inv-max-engine-thrust float :offset-assert 220) + (engine-response-rate float :offset-assert 224) + (engine-intake-factor float :offset-assert 228) + (brake-factor float :offset-assert 232) + (turbo-boost-factor float :offset-assert 236) + (max-xz-speed meters :offset-assert 240) + (ground-probe-distance meters :offset-assert 244) + (ground-probe-offset meters :offset-assert 248) + (cos-ground-effect-angle float :offset-assert 252) + (spring-lift-factor float :offset-assert 256) + (air-steering-factor float :offset-assert 260) + (air-drag-factor float :offset-assert 264) + (steering-fin-angle float :offset-assert 268) + (steering-thruster-factor float :offset-assert 272) + (steering-thruster-max-gain float :offset-assert 276) + (steering-thruster-half-gain-speed meters :offset-assert 280) + (tire-steering-angle float :offset-assert 284) + (tire-friction-factor float :offset-assert 288) + (tire-static-friction float :offset-assert 292) + (tire-static-friction-speed meters :offset-assert 296) + (tire-dynamic-friction float :offset-assert 300) + (tire-dynamic-friction-speed meters :offset-assert 304) + (tire-inv-max-friction-speed float :offset-assert 308) + (airfoil-factor float :offset-assert 312) + (drag-force-factor float :offset-assert 316) + (speed-scrubbing-drag float :offset-assert 320) + (speed-limiting-drag float :offset-assert 324) + (pitch-control-factor float :offset-assert 328) + (roll-control-factor float :offset-assert 332) + (roll-angle float :offset-assert 336) + (jump-thrust-factor float :offset-assert 340) + (buoyancy-factor float :offset-assert 344) + (player-weight float :offset-assert 348) + (player-shift-x meters :offset-assert 352) + (player-shift-z meters :offset-assert 356) + (target-speed-offset meters :offset-assert 360) + (turning-accel meters :offset-assert 364) + (toughness-factor float :offset-assert 368) + (damage-factor float :offset-assert 372) + (camera-string-min-height meters :offset-assert 376) + (camera-string-max-height meters :offset-assert 380) + (camera-string-min-length meters :offset-assert 384) + (camera-string-max-length meters :offset-assert 388) + (camera-min-fov float :offset-assert 392) + (camera-max-fov float :offset-assert 396) + (camera-head-offset float :offset-assert 400) + (camera-foot-offset float :offset-assert 404) + (camera-normal-max-angle-offset float :offset-assert 408) + (camera-air-max-angle-offset float :offset-assert 412) + (camera-max-lookaround-speed float :offset-assert 416) + (seat-count int8 :offset-assert 420) + (section-count int8 :offset-assert 421) + (rider-stance uint8 :offset-assert 422) + (grab-rail-count int8 :offset-assert 423) + (grab-rail-array uint32 :offset-assert 424) + (seat-array vehicle-seat-info 4 :inline :offset-assert 432) + (rider-hand-offset vector 2 :inline :offset-assert 496) + (section-array vehicle-section-info 4 :inline :offset-assert 528) + (section-bike-front vehicle-section-info :inline :offset 528) + (section-bike-rear vehicle-section-info :inline :offset 560) + (section-car-front-left vehicle-section-info :inline :offset 528) + (section-car-rear-left vehicle-section-info :inline :offset 560) + (section-car-front-right vehicle-section-info :inline :offset 592) + (section-car-rear-right vehicle-section-info :inline :offset 624) + (explosion basic :offset-assert 656) + (engine-pitch-scale float :offset-assert 660) + (engine-pitch-offset float :offset-assert 664) + (engine-pitch-mod-amp float :offset-assert 668) + (engine-sound-select int8 :offset-assert 672) + (engine-sound uint128 :offset-assert 688) + (thrust-sound uint128 :offset-assert 704) + (scrape-sound uint128 :offset-assert 720) + (glance-sound uint128 :offset-assert 736) + (impact-sound uint128 :offset-assert 752) + (extra-sound uint128 :offset-assert 768) + (explosion-part int32 :offset-assert 784) + (headlight-count int8 :offset-assert 788) + (taillight-count int8 :offset-assert 789) + (thruster-flame-width meters :offset-assert 792) + (thruster-flame-length meters :offset-assert 796) + (thruster-local-pos vector 2 :inline :offset-assert 800) + (exhaust-local-pos vector 2 :inline :offset-assert 832) + (exhaust-local-dir vector 2 :inline :offset-assert 864) + (smoke-local-pos vector 2 :inline :offset-assert 896) + (smoke-local-vel vector 2 :inline :offset-assert 928) + (headlight-local-pos vector 3 :inline :offset-assert 960) + (taillight-local-pos vector 2 :inline :offset-assert 1008) + (lift-thruster-count int8 :offset-assert 1040) + (roll-thruster-count int8 :offset-assert 1041) + (steering-thruster-count int8 :offset-assert 1042) + (stabilizer-count int8 :offset-assert 1043) + (inv-lift-thruster-count float :offset-assert 1044) + (pad int8 8 :offset-assert 1048) + (lift-thruster-array vector4w-2 2 :inline :offset-assert 1056) + (roll-thruster-array vector4w-2 2 :inline :offset-assert 1120) + (steering-thruster-array vector4w-2 2 :inline :offset-assert 1184) + (stabilizer-array vector4w-2 6 :inline :offset-assert 1248) + (engine-thrust-local-pos vector :inline :offset-assert 1440) + (brake-local-pos vector :inline :offset-assert 1456) + (particle-system-2d basic :offset-assert 1472) + (particle-system-3d basic :offset-assert 1476) + (part-thruster basic :offset-assert 1480) + (part-thruster-scale-x sp-field-init-spec :offset-assert 1484) + (part-thruster-scale-y sp-field-init-spec :offset-assert 1488) + (part-quat quaternion :offset-assert 1492) + (part-vel vector :offset-assert 1496) + (color-option-count int8 :offset-assert 1500) + (color-option-select int8 :offset-assert 1501) + (color-option-array uint32 :offset-assert 1504) + (sample-dir vector :inline :offset-assert 1520) + (sample-time time-frame :offset-assert 1536) + (sample-index int32 :offset-assert 1544) + ) + :method-count-assert 11 + :size-assert #x60c + :flag-assert #xb0000060c + (:methods + (rigid-body-vehicle-constants-method-9 () none 9) + (rigid-body-vehicle-constants-method-10 () none 10) + ) + ) + + +(deftype vehicle-controller (structure) + ((flags vehicle-controller-flag :offset-assert 0) + (traffic symbol :offset-assert 4) + (branch nav-branch :offset-assert 8) + (target-speed-offset meters :offset-assert 12) + (target-speed meters :offset-assert 16) + (choose-branch-callback symbol :offset-assert 20) + (turn-accel meters :offset-assert 24) + (max-turn-speed meters :offset-assert 28) + (path-prev-point vector :inline :offset-assert 32) + (turn-enter-point vector :inline :offset-assert 48) + (turn-exit-point vector :inline :offset-assert 64) + (path-dest-point vector :inline :offset 64) + (turn-enter-dir vector :inline :offset-assert 80) + (turn-exit-dir vector :inline :offset-assert 96) + (dest-circle vector :inline :offset-assert 112) + (target-point vector :inline :offset-assert 128) + ) + :method-count-assert 22 + :size-assert #x90 + :flag-assert #x1600000090 + (:methods + (vehicle-controller-method-9 () none 9) + (vehicle-controller-method-10 () none 10) + (vehicle-controller-method-11 () none 11) + (vehicle-controller-method-12 () none 12) + (vehicle-controller-method-13 () none 13) + (vehicle-controller-method-14 () none 14) + (vehicle-controller-method-15 () none 15) + (vehicle-controller-method-16 () none 16) + (vehicle-controller-method-17 () none 17) + (vehicle-controller-method-18 () none 18) + (vehicle-controller-method-19 () none 19) + (vehicle-controller-method-20 () none 20) + (vehicle-controller-method-21 () none 21) + ) + ) + + +(deftype vehicle-section (structure) + ((damage float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + + +(deftype vehicle (rigid-body-object) + ((pad uint32 4 :offset-assert 272) + (controls vehicle-controls :inline :offset-assert 288) + (prev-controls vehicle-controls :inline :offset-assert 304) + (up-dir vector :inline :offset-assert 320) + (jump-time float :offset-assert 336) + (jump-thrust float :offset-assert 340) + (engine-thrust float :offset-assert 344) + (engine-power-factor float :offset-assert 348) + (force-scale float :offset-assert 352) + (target-distance2 meters :offset-assert 356) + (pad0 uint32 :offset-assert 360) + (target-acceleration vector :inline :offset-assert 368) + (impact-pos vector :inline :offset-assert 384) + (lin-acceleration vector :inline :offset-assert 400) + (hit-points float :offset-assert 416) + (damage-factor float :offset-assert 420) + (crash-level int8 :offset-assert 424) + (force-level int8 :offset-assert 425) + (traffic-hash-id int8 :offset-assert 426) + (traffic-priority-id int8 :offset-assert 427) + (power-fluctuation-factor float :offset-assert 428) + (power-level float :offset-assert 432) + (flight-level-index int8 :offset-assert 436) + (flight-level-index-prev int8 :offset-assert 437) + (overlap-player-counter uint8 :offset-assert 438) + (physics-counter uint8 :offset-assert 439) + (flight-level float :offset-assert 440) + (brake-factor float :offset-assert 444) + (cam-speed-interp float :offset-assert 448) + (camera-dist2 float :offset-assert 452) + (player-dist2 float :offset-assert 456) + (bound-radius float :offset-assert 460) + (rider-array int64 4 :offset-assert 464) + (lift-thrust float 2 :offset-assert 496) + (roll-thrust float 2 :offset-assert 504) + (sent-attack-time time-frame :offset-assert 512) + (air-time time-frame :offset-assert 520) + (turn-time time-frame :offset-assert 528) + (crash-time time-frame :offset-assert 536) + (transition-time time-frame :offset-assert 544) + (transition-end-time time-frame :offset-assert 552) + (turbo-boost-time time-frame :offset-assert 560) + (crash-duration uint16 :offset-assert 568) + (turbo-boost-duration uint16 :offset-assert 570) + (turbo-boost-factor float :offset-assert 572) + (crash-impulse float :offset-assert 576) + (water-height float :offset-assert 580) + (lights-factor float :offset-assert 584) + (outgoing-attack-id uint32 :offset-assert 588) + (scrape-sound-id sound-id :offset-assert 592) + (engine-sound-id sound-id :offset-assert 596) + (thrust-sound-id sound-id :offset-assert 600) + (roll-sound-id sound-id :offset-assert 604) + (damage-pop-sound-id sound-id :offset-assert 608) + (damage-zap-sound-id sound-id :offset-assert 612) + (extra-sound-id sound-id :offset-assert 616) + (fog-fade float :offset-assert 620) + (scrape-sound-envelope float :offset-assert 624) + (engine-sound-envelope float :offset-assert 628) + (engine-sound-factor float :offset-assert 632) + (sputter-sound-envelope float :offset-assert 636) + (rudder-sound-envelope float :offset-assert 640) + (fins-sound-envelope float :offset-assert 644) + (exhaust-part-accum basic 2 :offset-assert 648) + (smoke-part-accum basic 2 :offset-assert 656) + (controller vehicle-controller :inline :offset-assert 672) + (section-array vehicle-section 4 :inline :offset-assert 816) + ) + :heap-base #x2f0 + :method-count-assert 144 + :size-assert #x370 + :flag-assert #x9002f00370 + (:methods + (vehicle-method-53 () none 53) + (vehicle-method-54 () none 54) + (vehicle-method-55 () none 55) + (vehicle-method-56 () none 56) + (vehicle-method-57 () none 57) + (vehicle-method-58 () none 58) + (vehicle-method-59 () none 59) + (vehicle-method-60 () none 60) + (vehicle-method-61 () none 61) + (vehicle-method-62 () none 62) + (vehicle-method-63 () none 63) + (vehicle-method-64 () none 64) + (vehicle-method-65 () none 65) + (vehicle-method-66 () none 66) + (vehicle-method-67 () none 67) + (vehicle-method-68 () none 68) + (vehicle-method-69 () none 69) + (vehicle-method-70 () none 70) + (vehicle-method-71 () none 71) + (vehicle-method-72 () none 72) + (vehicle-method-73 () none 73) + (vehicle-method-74 () none 74) + (vehicle-method-75 () none 75) + (vehicle-method-76 () none 76) + (vehicle-method-77 () none 77) + (vehicle-method-78 () none 78) + (vehicle-method-79 () none 79) + (vehicle-method-80 () none 80) + (vehicle-method-81 () none 81) + (vehicle-method-82 () none 82) + (vehicle-method-83 () none 83) + (vehicle-method-84 () none 84) + (vehicle-method-85 () none 85) + (vehicle-method-86 () none 86) + (vehicle-method-87 () none 87) + (vehicle-method-88 () none 88) + (vehicle-method-89 () none 89) + (vehicle-method-90 () none 90) + (vehicle-method-91 () none 91) + (vehicle-method-92 () none 92) + (vehicle-method-93 () none 93) + (vehicle-method-94 () none 94) + (vehicle-method-95 () none 95) + (vehicle-method-96 () none 96) + (vehicle-method-97 () none 97) + (vehicle-method-98 () none 98) + (vehicle-method-99 () none 99) + (vehicle-method-100 () none 100) + (vehicle-method-101 () none 101) + (vehicle-method-102 () none 102) + (vehicle-method-103 () none 103) + (vehicle-method-104 () none 104) + (vehicle-method-105 () none 105) + (vehicle-method-106 () none 106) + (vehicle-method-107 () none 107) + (vehicle-method-108 () none 108) + (vehicle-method-109 () none 109) + (vehicle-method-110 () none 110) + (vehicle-method-111 () none 111) + (vehicle-method-112 () none 112) + (vehicle-method-113 () none 113) + (vehicle-method-114 () none 114) + (vehicle-method-115 () none 115) + (vehicle-method-116 () none 116) + (vehicle-method-117 () none 117) + (vehicle-method-118 () none 118) + (vehicle-method-119 () none 119) + (vehicle-method-120 () none 120) + (vehicle-method-121 () none 121) + (vehicle-method-122 () none 122) + (vehicle-method-123 () none 123) + (vehicle-method-124 () none 124) + (vehicle-method-125 () none 125) + (vehicle-method-126 () none 126) + (vehicle-method-127 () none 127) + (vehicle-method-128 () none 128) + (vehicle-method-129 () none 129) + (vehicle-method-130 () none 130) + (vehicle-method-131 () none 131) + (vehicle-method-132 () none 132) + (vehicle-method-133 () none 133) + (vehicle-method-134 () none 134) + (vehicle-method-135 () none 135) + (vehicle-method-136 () none 136) + (vehicle-method-137 () none 137) + (vehicle-method-138 () none 138) + (vehicle-method-139 () none 139) + (vehicle-method-140 () none 140) + (vehicle-method-141 () none 141) + (vehicle-method-142 () none 142) + (vehicle-method-143 () none 143) + ) + ) diff --git a/goal_src/jak2/levels/common/airlock.gc b/goal_src/jak2/levels/common/airlock.gc index c430bfdd98..037e70d201 100644 --- a/goal_src/jak2/levels/common/airlock.gc +++ b/goal_src/jak2/levels/common/airlock.gc @@ -392,31 +392,31 @@ (defstate close (com-airlock) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'close) (set! (-> self latch-closed-time) (+ (-> self clock frame-counter) (if (>= arg1 1) - (the-as int (-> arg3 param 0)) + (the-as int (-> event param 0)) 3000 ) ) ) - (if (and (>= arg1 2) (and (= (-> arg3 param 1) #t) (not (want-cross-airlock? self)))) + (if (and (>= arg1 2) (and (= (-> event param 1) #t) (not (want-cross-airlock? self)))) (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! min) ) (and (-> self next-state) (= (-> self next-state name) 'open)) ) ((= v1-0 'open) (set! (-> self latch-open-time) (+ (-> self clock frame-counter) (if (>= arg1 1) - (the-as int (-> arg3 param 0)) + (the-as int (-> event param 0)) 3000 ) ) ) - (if (and (>= arg1 2) (and (= (-> arg3 param 1) #t) (want-cross-airlock? self) (destination-loaded? self #f))) + (if (and (>= arg1 2) (and (= (-> event param 1) #t) (want-cross-airlock? self) (destination-loaded? self #f))) (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! (identity (the float (+ (-> (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) frames num-frames) -1)) @@ -441,7 +441,7 @@ ) ((= v1-0 'sound) (if (>= (check-crossing-distance self (target-pos 0) #f) 0.0) - (play-city-voice-sound self (the-as symbol (-> arg3 param 0))) + (play-city-voice-sound self (the-as symbol (-> event param 0))) ) ) ((= v1-0 'distance) @@ -880,7 +880,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -944,7 +944,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1033,7 +1033,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1106,7 +1106,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1168,7 +1168,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-5 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-5 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-5 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-5 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1251,7 +1251,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1325,7 +1325,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1399,7 +1399,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1473,7 +1473,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) diff --git a/goal_src/jak2/levels/common/elec-gate.gc b/goal_src/jak2/levels/common/elec-gate.gc index a9173ff16b..f5d02b43eb 100644 --- a/goal_src/jak2/levels/common/elec-gate.gc +++ b/goal_src/jak2/levels/common/elec-gate.gc @@ -7,3 +7,1037 @@ ;; DECOMP BEGINS +(deftype elec-gate-params (structure) + ((bolt-spec lightning-spec :offset-assert 0) + (ring-spec lightning-spec :offset-assert 4) + (ring-radius-min float :offset-assert 8) + (ring-radius-max float :offset-assert 12) + (speed-mult float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + + +(deftype elec-gate-bolt (structure) + ((ring lightning-control 2 :offset-assert 0) + (bolt lightning-control :offset-assert 8) + (ring-radius float :offset-assert 12) + (pos float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + + +(deftype elec-wall (structure) + ((pos vector :inline :offset-assert 0) + (dir vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + + +(deftype elec-gate (process-drawable) + ((params elec-gate-params :offset-assert 200) + (path-l path-control :offset 152) + (path-r path-control :offset-assert 204) + (l-bolt elec-gate-bolt 5 :inline :offset-assert 208) + (part-on sparticle-launch-control :offset 168) + (part-off sparticle-launch-control :offset-assert 368) + (part-spawner-left part-spawner :offset-assert 372) + (part-spawner-right part-spawner :offset-assert 376) + (on-start basic :offset-assert 380) + (on-stop basic :offset-assert 384) + (dividing-wall elec-wall :inline :offset-assert 400) + (plane elec-wall 2 :inline :offset-assert 432) + (wall-y float :offset-assert 496) + (wall-xz float :offset-assert 500) + (lightning-quality float :offset-assert 504) + (quality-enabled? symbol :offset-assert 508) + ) + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + (:methods + (idle () _type_ :state 20) + (active () _type_ :state 21) + (shutdown () _type_ :state 22) + (get-params (_type_) elec-gate-params 23) + (elec-gate-method-24 (_type_) none 24) + (set-palette! (_type_) none 25) + (set-state! (_type_) none 26) + (spawn-particles (_type_ sparticle-launch-control) none 27) + (set-elec-scale-if-close! (_type_ float) none 28) + (set-elec-scale! (_type_ float) none 29) + ) + ) + + +(define *default-elec-gate-params* (new 'static 'elec-gate-params + :bolt-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :start-color #x80ffffff + :end-color #x80000000 + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 16 + :box-size 8601.6 + :merge-factor 0.5 + :merge-count 2 + :radius 4096.0 + :duration -1.0 + :sound #f + ) + :ring-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :rand-func #x3 + :start-color #x80ffffff + :end-color #x80ffffff + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 12 + :box-size 3072.0 + :merge-factor 0.5 + :radius 2048.0 + :duration -1.0 + :sound #f + ) + :ring-radius-min 1638.4 + :ring-radius-max 2867.2 + :speed-mult 1.0 + ) + ) + +(defbehavior elec-gate-post elec-gate () + (local-vars (curr-bolt elec-gate-bolt) (curr-point int)) + (let ((num-points (-> self params ring-spec num-points))) + (dotimes (bolt-idx 5) + (set! curr-bolt (-> self l-bolt bolt-idx)) + (let ((s4-0 + (get-point-at-percent-along-path! (-> self path) (new 'stack-no-clear 'vector) (-> curr-bolt pos) 'interp) + ) + (s3-0 + (get-point-at-percent-along-path! (-> self path-r) (new 'stack-no-clear 'vector) (-> curr-bolt pos) 'interp) + ) + ) + (let ((a0-2 (-> curr-bolt bolt)) + (v1-10 s4-0) + ) + (set! (-> a0-2 state meet data 0 quad) (-> v1-10 quad)) + ) + (let ((a0-5 (-> curr-bolt bolt)) + (v1-13 s3-0) + ) + (set! (-> a0-5 state meet data (+ (-> a0-5 state points-to-draw) -1) quad) (-> v1-13 quad)) + ) + (let ((s2-0 (-> curr-bolt ring 0)) + (s1-0 (-> curr-bolt ring 1)) + (s0-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s0-0 x) 0.0) + (set! (-> s0-0 y) 0.0) + (set! (-> s0-0 z) (-> curr-bolt ring-radius)) + (set! (-> s0-0 w) 0.0) + (let ((f30-0 (* 65536.0 (/ 1.0 (the float (+ num-points -1)))))) + (set! curr-point 0) + (while (< curr-point num-points) + (set-point! s2-0 curr-point (vector+! (new 'stack-no-clear 'vector) s4-0 s0-0)) + (set-point! s1-0 curr-point (vector+! (new 'stack-no-clear 'vector) s3-0 s0-0)) + (vector-rotate-y! s0-0 s0-0 f30-0) + (set! curr-point (+ curr-point 1)) + ) + ) + ) + ) + ) + ) + (debug-draw (-> self path)) + (debug-draw (-> self path-r)) + (none) + ) + +(defstate idle (elec-gate) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (go-virtual active) + ) + ) + ) + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (dotimes (bolt-idx 5) + (let* ((bolt (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm0)) + (mode-diff? (!= mode (-> bolt state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> bolt state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> bolt state start-color) (-> bolt spec start-color)) + (set! (-> bolt state end-color) (-> bolt spec end-color)) + ) + ) + (set! (-> bolt state mode) mode) + (let ((first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm0)) + (set! mode-diff? (!= mode (-> first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> first-ring state start-color) (-> first-ring spec start-color)) + (set! (-> first-ring state end-color) (-> first-ring spec end-color)) + ) + ) + (set! (-> first-ring state mode) mode) + ) + (let ((second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm0)) + (set! mode-diff? (!= mode (-> second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> second-ring state start-color) (-> second-ring spec start-color)) + (set! (-> second-ring state end-color) (-> second-ring spec end-color)) + ) + ) + (set! (-> second-ring state mode) mode) + ) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 0.0) + (if (nonzero? (-> self part-off)) + (spawn-particles self (-> self part-off)) + ) + (none) + ) + ) + +(defstate active (elec-gate) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('shutdown) + (go-virtual shutdown) + ) + ) + ) + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #f) + (if (-> self on-start) + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (-> self root trans)) + (the-as pair (-> self on-start)) + ) + ) + (dotimes (bolt-idx 5) + (let* ((curr-bolt (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm1)) + (mode-diff? (!= mode (-> curr-bolt state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> curr-bolt state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> curr-bolt state start-color) (-> curr-bolt spec start-color)) + (set! (-> curr-bolt state end-color) (-> curr-bolt spec end-color)) + ) + ) + (set! (-> curr-bolt state mode) mode) + (let ((first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm1)) + (set! mode-diff? (!= mode (-> first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> first-ring state start-color) (-> first-ring spec start-color)) + (set! (-> first-ring state end-color) (-> first-ring spec end-color)) + ) + ) + (set! (-> first-ring state mode) mode) + ) + (let ((second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm1)) + (set! mode-diff? (!= mode (-> second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> second-ring state start-color) (-> second-ring spec start-color)) + (set! (-> second-ring state end-color) (-> second-ring spec end-color)) + ) + ) + (set! (-> second-ring state mode) mode) + ) + ) + ) + (let ((vec-pair (new 'stack-no-clear 'inline-array 'vector 2))) + (dotimes (vec-idx 2) + (set! (-> vec-pair vec-idx quad) (the-as uint128 0)) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + 0.0 + (get-point-in-path! (-> self path) (-> vec-pair 0) 0.0 'interp) + (get-point-in-path! (-> self path-r) (-> vec-pair 1) 0.0 'interp) + (vector-! s5-0 (-> vec-pair 1) (-> vec-pair 0)) + (vector-normalize! s5-0 8192.0) + (vector+! (-> vec-pair 1) (-> vec-pair 1) s5-0) + (vector-negate! s5-0 s5-0) + (vector+! (-> vec-pair 0) (-> vec-pair 0) s5-0) + (vector-normalize-copy! s5-0 *up-vector* -8192.0) + (vector+! (-> vec-pair 0) (-> vec-pair 0) s5-0) + (vector+! (-> vec-pair 1) (-> vec-pair 1) s5-0) + ) + (let ((f0-6 + (+ (- 81920.0 (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) 0.0 'interp) y)) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (get-num-segments (-> self path)) 'interp) + y + ) + ) + ) + ) + (blocking-plane-spawn (the-as curve-control #f) vec-pair f0-6) + ) + ) + (none) + ) + :trans (behavior () + (local-vars + (sv-176 (function lightning-spec time-frame symbol process-drawable vector vector none)) + (sv-192 lightning-spec) + (sv-208 int) + (sv-224 symbol) + (sv-240 symbol) + (sv-256 lightning-spec) + (sv-272 int) + (sv-288 symbol) + (sv-304 symbol) + ) + (let* ((target *target*) + (proc-focus (if (type? target process-focusable) + target + ) + ) + ) + (when proc-focus + (let ((focus-trans (get-trans proc-focus 0))) + (let* ((a0-3 (vector-! (new 'stack-no-clear 'vector) focus-trans (the-as vector (-> self dividing-wall)))) + (s4-0 (-> self plane (if (< 0.0 (vector-dot a0-3 (-> self dividing-wall dir))) + 0 + 1 + ) + ) + ) + (s3-1 (vector-! (new 'stack-no-clear 'vector) focus-trans (-> s4-0 pos))) + ) + (when (and (< (vector-dot (vector-normalize-copy! (new 'stack-no-clear 'vector) s3-1 1.0) (-> s4-0 dir)) 0.0) + (let ((v1-13 s3-1)) + (< (sqrtf (+ (* (-> v1-13 x) (-> v1-13 x)) (* (-> v1-13 z) (-> v1-13 z)))) (-> self wall-xz)) + ) + (< (fabs (-> s3-1 y)) (-> self wall-y)) + ) + (let ((evt (new 'stack-no-clear 'event-message-block))) + (set! (-> evt from) (process->ppointer self)) + (set! (-> evt num-params) 2) + (set! (-> evt message) 'attack) + (set! (-> evt param 0) (the-as uint #f)) + (let ((attack (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up control id)))) + (let* ((game-info *game-info*) + (attack-id (+ (-> game-info attack-id) 1)) + ) + (set! (-> game-info attack-id) attack-id) + (set! (-> attack id) attack-id) + ) + (set! (-> attack vector quad) (-> s4-0 dir quad)) + (set! (-> attack shove-back) 24576.0) + (set! (-> attack shove-up) 12288.0) + (set! (-> attack control) (if (logtest? (focus-status board) (-> proc-focus focus-status)) + 1.0 + 0.0 + ) + ) + (set! (-> evt param 1) (the-as uint attack)) + ) + (send-event-function proc-focus evt) + ) + (let* ((s4-1 (-> self l-bolt)) + (s3-2 (get-point-at-percent-along-path! (-> self path) (new 'stack-no-clear 'vector) (-> s4-1 0 pos) 'interp)) + (s4-2 + (get-point-at-percent-along-path! (-> self path-r) (new 'stack-no-clear 'vector) (-> s4-1 0 pos) 'interp) + ) + ) + (let ((s2-0 (get-process *default-dead-pool* lightning-tracker #x4000))) + (when s2-0 + (let ((t9-7 (method-of-type lightning-tracker activate))) + (t9-7 + (the-as lightning-tracker s2-0) + *entity-pool* + (symbol->string (-> lightning-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s1-0 run-function-in-process) + (s0-0 s2-0) + ) + (set! sv-176 lightning-tracker-init) + (set! sv-192 (-> self params bolt-spec)) + (set! sv-208 15) + (set! sv-224 (the-as symbol #f)) + (set! sv-240 (the-as symbol #f)) + (let ((t3-0 (get-trans proc-focus 3))) + ((the-as (function object object object object object object object object none) s1-0) + s0-0 + sv-176 + sv-192 + sv-208 + sv-224 + sv-240 + s3-2 + t3-0 + ) + ) + ) + (-> s2-0 ppointer) + ) + ) + (let ((s3-3 (get-process *default-dead-pool* lightning-tracker #x4000))) + (when s3-3 + (let ((t9-11 (method-of-type lightning-tracker activate))) + (t9-11 + (the-as lightning-tracker s3-3) + *entity-pool* + (symbol->string (-> lightning-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s2-1 run-function-in-process) + (s1-1 s3-3) + (s0-1 lightning-tracker-init) + ) + (set! sv-256 (-> self params bolt-spec)) + (set! sv-272 15) + (set! sv-288 (the-as symbol #f)) + (set! sv-304 (the-as symbol #f)) + (let ((t3-1 (get-trans proc-focus 3))) + ((the-as (function object object object object object object object object none) s2-1) + s1-1 + s0-1 + sv-256 + sv-272 + sv-288 + sv-304 + s4-2 + t3-1 + ) + ) + ) + (-> s3-3 ppointer) + ) + ) + ) + ) + ) + (set! (-> self lightning-quality) + (lerp-scale 0.0 1.0 (vector-vector-distance focus-trans (-> self root trans)) 491520.0 163840.0) + ) + ) + ) + ) + (let ((gp-2 (+ (the int (* 5.0 (-> self lightning-quality))) 1))) + (dotimes (bolt-idx 5) + (let ((s3-5 (-> self l-bolt bolt-idx)) + (s2-2 (-> self params)) + (s4-4 (if (and (-> self quality-enabled?) (zero? (mod bolt-idx gp-2))) + (lightning-mode lm0) + (lightning-mode lm-1) + ) + ) + ) + (seek! (-> s3-5 pos) 1.5 (* (-> s2-2 speed-mult) (+ 0.2 (-> s3-5 pos)) (-> self clock seconds-per-frame))) + (cond + ((>= (-> s3-5 pos) 1.5) + (let ((v1-59 (-> self l-bolt bolt-idx bolt)) + (a0-31 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-19 (!= a0-31 (-> v1-59 state mode)))) + (case a0-31 + (((lightning-mode lm3)) + (if a1-19 + (set! (-> v1-59 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-59 state start-color) (-> v1-59 spec start-color)) + (set! (-> v1-59 state end-color) (-> v1-59 spec end-color)) + ) + ) + ) + (set! (-> v1-59 state mode) a0-31) + ) + (let ((v1-62 (-> self l-bolt bolt-idx ring 0)) + (a0-32 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-29 (!= a0-32 (-> v1-62 state mode)))) + (case a0-32 + (((lightning-mode lm3)) + (if a1-29 + (set! (-> v1-62 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-62 state start-color) (-> v1-62 spec start-color)) + (set! (-> v1-62 state end-color) (-> v1-62 spec end-color)) + ) + ) + ) + (set! (-> v1-62 state mode) a0-32) + ) + (let ((v1-65 (-> self l-bolt bolt-idx ring 1)) + (a0-33 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-39 (!= a0-33 (-> v1-65 state mode)))) + (case a0-33 + (((lightning-mode lm3)) + (if a1-39 + (set! (-> v1-65 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-65 state start-color) (-> v1-65 spec start-color)) + (set! (-> v1-65 state end-color) (-> v1-65 spec end-color)) + ) + ) + ) + (set! (-> v1-65 state mode) a0-33) + ) + (set! (-> s3-5 ring-radius) (rand-vu-float-range (-> s2-2 ring-radius-min) (-> s2-2 ring-radius-max))) + (set! (-> s3-5 pos) 0.0) + ) + ((>= (-> s3-5 pos) 1.0) + (let ((v1-69 (-> self l-bolt bolt-idx bolt)) + (a0-37 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-50 (!= a0-37 (-> v1-69 state mode)))) + (case a0-37 + (((lightning-mode lm3)) + (if a1-50 + (set! (-> v1-69 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-69 state start-color) (-> v1-69 spec start-color)) + (set! (-> v1-69 state end-color) (-> v1-69 spec end-color)) + ) + ) + ) + (set! (-> v1-69 state mode) a0-37) + ) + (let ((v1-72 (-> self l-bolt bolt-idx ring 0)) + (a0-38 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-60 (!= a0-38 (-> v1-72 state mode)))) + (case a0-38 + (((lightning-mode lm3)) + (if a1-60 + (set! (-> v1-72 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-72 state start-color) (-> v1-72 spec start-color)) + (set! (-> v1-72 state end-color) (-> v1-72 spec end-color)) + ) + ) + ) + (set! (-> v1-72 state mode) a0-38) + ) + (let ((v1-75 (-> self l-bolt bolt-idx ring 1)) + (a0-39 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-70 (!= a0-39 (-> v1-75 state mode)))) + (case a0-39 + (((lightning-mode lm3)) + (if a1-70 + (set! (-> v1-75 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-75 state start-color) (-> v1-75 spec start-color)) + (set! (-> v1-75 state end-color) (-> v1-75 spec end-color)) + ) + ) + ) + (set! (-> v1-75 state mode) a0-39) + ) + ) + ) + ) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 1.0) + (if (nonzero? (-> self part)) + (spawn-particles self (-> self part)) + ) + (update! (-> self sound)) + (elec-gate-post) + (none) + ) + ) + +(defstate shutdown (elec-gate) + :virtual #t + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (stop! (-> self sound)) + (sound-play "elec-gate-off") + (blocking-plane-destroy) + (if (-> self on-stop) + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (-> self root trans)) + (the-as pair (-> self on-stop)) + ) + ) + (none) + ) + :trans (behavior () + (let ((go-idle? #t)) + (dotimes (bolt-idx 5) + (let ((left-bolt-0 (-> self l-bolt bolt-idx))) + (seek! (-> left-bolt-0 pos) 0.0 (* (- 1.14 (-> left-bolt-0 pos)) (-> self clock seconds-per-frame))) + (set! go-idle? + (cond + ((or (< 1.0 (-> left-bolt-0 pos)) (>= 0.0 (-> left-bolt-0 pos))) + (let* ((left-bolt-1 (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm3)) + (mode-diff? (!= mode (-> left-bolt-1 state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-1 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-1 state start-color) (-> left-bolt-1 spec start-color)) + (set! (-> left-bolt-1 state end-color) (-> left-bolt-1 spec end-color)) + ) + ) + (set! (-> left-bolt-1 state mode) mode) + (let ((left-bolt-first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm3)) + (set! mode-diff? (!= mode (-> left-bolt-first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-first-ring state start-color) (-> left-bolt-first-ring spec start-color)) + (set! (-> left-bolt-first-ring state end-color) (-> left-bolt-first-ring spec end-color)) + ) + ) + (set! (-> left-bolt-first-ring state mode) mode) + ) + (let ((left-bolt-second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm3)) + (set! mode-diff? (!= mode (-> left-bolt-second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-second-ring state start-color) (-> left-bolt-second-ring spec start-color)) + (set! (-> left-bolt-second-ring state end-color) (-> left-bolt-second-ring spec end-color)) + ) + ) + (set! (-> left-bolt-second-ring state mode) mode) + ) + ) + go-idle? + ) + (else + #f + ) + ) + ) + ) + ) + (if go-idle? + (go-virtual idle) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 0.0) + (if (nonzero? (-> self part-off)) + (spawn-particles self (-> self part-off)) + ) + (elec-gate-post) + (none) + ) + ) + +(defmethod set-elec-scale-if-close! elec-gate ((obj elec-gate) (arg0 float)) + "If [[target]]'s position is within `80` [[meters]], set the scale to the value provided + @see [[elec-gate::29]]" + (if (< (vector-vector-distance (-> obj root trans) (target-pos 0)) 327680.0) + (set-elec-scale! obj arg0) + ) + 0 + (none) + ) + +(defmethod spawn-particles elec-gate ((obj elec-gate) (sparticle-lc sparticle-launch-control)) + "TODO - Calls [[sparticle-launch-control::11]] on `part-spawner-left` and `part-spawner-right` if they are defined" + (if (-> obj part-spawner-left) + (spawn sparticle-lc (the-as vector (&-> (-> obj part-spawner-left child) 8))) + ) + (if (-> obj part-spawner-right) + (spawn sparticle-lc (the-as vector (&-> (-> obj part-spawner-right child) 8))) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch process-drawable vs elec-gate. +(defmethod relocate elec-gate ((obj elec-gate) (new-addr int)) + (dotimes (bolt-idx 5) + (let ((left-bolt (-> obj l-bolt bolt-idx))) + (if (nonzero? (-> left-bolt bolt)) + (&+! (-> left-bolt bolt) new-addr) + ) + (if (nonzero? (-> left-bolt ring 0)) + (&+! (-> left-bolt ring 0) new-addr) + ) + (if (nonzero? (-> left-bolt ring 1)) + (&+! (-> left-bolt ring 1) new-addr) + ) + ) + ) + (if (nonzero? (-> obj path-r)) + (&+! (-> obj path-r) new-addr) + ) + (when (nonzero? (-> obj part-off)) + (if (nonzero? (-> obj part-off)) + (&+! (-> obj part-off) new-addr) + ) + ) + (the-as elec-gate ((method-of-type process-drawable relocate) obj new-addr)) + ) + +(defmethod deactivate elec-gate ((obj elec-gate)) + (set-elec-scale-if-close! obj 0.0) + ((the-as (function process-drawable none) (find-parent-method elec-gate 10)) obj) + (none) + ) + +(defmethod get-params elec-gate ((obj elec-gate)) + "@returns [[*default-elec-gate-params*]] by default" + *default-elec-gate-params* + ) + +(defmethod elec-gate-method-24 elec-gate ((obj elec-gate)) + "virtual" + 0 + (none) + ) + +(defmethod set-palette! elec-gate ((obj elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + 0 + (none) + ) + +(defmethod set-state! elec-gate ((obj elec-gate)) + "If either [[actor-option::17]] is set on the [[elec-gate]] or the related subtask is completed + make the gate `idle`. + + Otherwise, the gate will be `active`." + (if (or (logtest? (actor-option user17) (-> obj fact options)) + (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete))) + ) + (go (method-of-object obj idle)) + (go (method-of-object obj active)) + ) + 0 + (none) + ) + +(defmethod init-from-entity! elec-gate ((obj elec-gate) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! (-> obj entity) arg0) + (set! (-> obj fact) + (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-eco-pill-green-inc)) + ) + (set! (-> obj params) (get-params obj)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj path) (new 'process 'path-control obj 'pathl 0.0 (the-as entity #f) #f)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj path-r) (new 'process 'path-control obj 'pathr 0.0 (the-as entity #f) #f)) + (logior! (-> obj path-r flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj part-spawner-left) (the-as part-spawner (entity-actor-lookup arg0 'alt-actor 0))) + (set! (-> obj part-spawner-right) (the-as part-spawner (entity-actor-lookup arg0 'alt-actor 1))) + (let ((params (-> obj params))) + (dotimes (bolt-idx 5) + (let ((left-bolt (-> obj l-bolt bolt-idx))) + (set! (-> left-bolt bolt) (new 'process 'lightning-control (-> params bolt-spec) obj 0.0)) + (set! (-> left-bolt ring 0) (new 'process 'lightning-control (-> params ring-spec) obj 0.0)) + (set! (-> left-bolt ring 1) (new 'process 'lightning-control (-> params ring-spec) obj 0.0)) + (set! (-> left-bolt ring-radius) + (rand-vu-float-range (-> params ring-radius-min) (-> params ring-radius-max)) + ) + (set! (-> left-bolt pos) (* 0.2 (the float bolt-idx))) + ) + ) + ) + (let* ((s4-1 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp)) + (v1-26 (get-point-in-path! (-> obj path-r) (new 'stack-no-clear 'vector) 0.0 'interp)) + (a1-15 (vector-! (new 'stack-no-clear 'vector) v1-26 s4-1)) + (s5-3 (vector+float*! (new 'stack-no-clear 'vector) s4-1 a1-15 0.5)) + (v1-28 (vector-normalize-copy! (new 'stack-no-clear 'vector) a1-15 1.0)) + ) + (vector-cross! v1-28 v1-28 *up-vector*) + (set! (-> obj dividing-wall pos quad) (-> s5-3 quad)) + (set! (-> obj dividing-wall dir quad) (-> v1-28 quad)) + (vector+float*! (the-as vector (-> obj plane)) s5-3 v1-28 12288.0) + (set! (-> (the-as vector (&-> obj stack 320)) quad) (-> v1-28 quad)) + (vector-float*! v1-28 v1-28 -1.0) + (vector+float*! (the-as vector (&-> obj stack 336)) s5-3 v1-28 12288.0) + (set! (-> (the-as vector (&-> obj stack 352)) quad) (-> v1-28 quad)) + ) + (set! (-> obj wall-xz) + (vector-vector-distance + (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp) + (get-point-in-path! (-> obj path-r) (new 'stack-no-clear 'vector) 0.0 'interp) + ) + ) + (set! (-> obj wall-xz) (* 0.5 (-> obj wall-xz))) + (set! (-> obj wall-xz) (+ 4096.0 (-> obj wall-xz))) + (set! (-> obj wall-y) + (fabs + (- (-> (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (get-num-segments (-> obj path)) 'interp) + y + ) + (-> (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp) y) + ) + ) + ) + (set! (-> obj wall-y) (+ 4096.0 (-> obj wall-y))) + (set! (-> obj quality-enabled?) #t) + (set! (-> obj lightning-quality) 1.0) + (set! (-> obj sound) + (new 'process 'ambient-sound (static-sound-spec "electric-gate" :fo-max 70) (-> obj root trans)) + ) + (set! (-> obj on-start) (res-lump-struct (-> obj entity) 'on-start basic)) + (set! (-> obj on-stop) (res-lump-struct (-> obj entity) 'on-stop basic)) + (elec-gate-method-24 obj) + (set-palette! obj) + (set-state! obj) + (none) + ) + +(deftype fort-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + + +(defmethod set-elec-scale! fort-elec-gate ((obj fort-elec-gate) (scale float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-fordumpa-electricity-scale! scale) + (set-forresca-electricity-scale! scale (-> obj palette-id)) + (set-forrescb-electricity-scale! scale (-> obj palette-id)) + 0 + (none) + ) + +(defmethod set-palette! fort-elec-gate ((obj fort-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) + +(deftype drill-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + + +(defmethod set-elec-scale! drill-elec-gate ((obj drill-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-drill-electricity-scale! arg0 (-> obj palette-id)) + 0 + (none) + ) + +(defmethod set-palette! drill-elec-gate ((obj drill-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) + +(deftype caspad-elec-gate (elec-gate) + () + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + ) + + +(deftype castle-elec-gate (elec-gate) + () + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + ) + + +(defmethod set-elec-scale! castle-elec-gate ((obj castle-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-castle-electricity-scale! arg0) + 0 + (none) + ) + +(define *caspad-elec-gate-params* (new 'static 'elec-gate-params + :bolt-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :start-color #x80ffffff + :end-color #x80000000 + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 16 + :box-size 16793.6 + :merge-factor 0.5 + :merge-count 2 + :radius 18841.6 + :duration -1.0 + :sound #f + ) + :ring-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :rand-func #x3 + :start-color #x80ffffff + :end-color #x80ffffff + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 12 + :box-size 17408.0 + :merge-factor 0.5 + :merge-count 2 + :radius 17612.8 + :duration -1.0 + :sound #f + ) + :ring-radius-min 40960.0 + :ring-radius-max 53248.0 + :speed-mult 0.3 + ) + ) + +(defmethod get-params caspad-elec-gate ((obj caspad-elec-gate)) + "@returns [[*default-elec-gate-params*]] by default" + *caspad-elec-gate-params* + ) + +(deftype palroof-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + + +(defmethod set-elec-scale! palroof-elec-gate ((obj palroof-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-palroof-electricity-scale! arg0 (-> obj palette-id)) + 0 + (none) + ) + +(defmethod set-palette! palroof-elec-gate ((obj palroof-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) diff --git a/goal_src/jak2/levels/common/enemy/bouncer.gc b/goal_src/jak2/levels/common/enemy/bouncer.gc index a16fa61c52..4468d7ee4d 100644 --- a/goal_src/jak2/levels/common/enemy/bouncer.gc +++ b/goal_src/jak2/levels/common/enemy/bouncer.gc @@ -7,3 +7,251 @@ ;; DECOMP BEGINS +(deftype bouncer (process-drawable) + ((spring-height meters :offset-assert 200) + (smush float :offset-assert 204) + (mods basic :offset-assert 208) + ) + :heap-base #x60 + :method-count-assert 25 + :size-assert #xd4 + :flag-assert #x19006000d4 + (:methods + (idle () _type_ :state 20) + (fire () _type_ :state 21) + (smush () _type_ :state 22) + (init-skeleton! (_type_) none 23) + (bouncer-method-24 (_type_) none 24) + ) + ) + + +(method-set! bouncer 12 (method-of-type process run-logic?)) + +(let ((a0-3 (new 'static 'skeleton-group + :name "skel-bouncer" + :extra #f + :info #f + :art-group-name "bounceytarp" + :bounds (new 'static 'vector :w 16384.0) + :version #x7 + ) + ) + ) + (set! (-> a0-3 jgeo) 0) + (set! (-> a0-3 janim) 2) + (set! (-> a0-3 mgeo 0) 1) + (set! (-> a0-3 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-3) + ) + +(defstate idle (bouncer) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as + object + (cond + ((= evt-type 'bonk) + (when ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry (-> event param 0)) + (the-as collide-shape (-> self root)) + (the-as uint 1) + ) + (when (send-event proc 'jump (-> self spring-height) (-> self spring-height) (-> self mods)) + (sound-play "trampoline") + (go-virtual fire) + ) + ) + ) + ((= evt-type 'touch) + (let ((gp-2 (-> event param 0))) + (cond + (((method-of-type touching-shapes-entry touching-shapes-entry-method-13) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 1) + (the-as uint 0) + ) + (when ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 1) + ) + (if (not (and (-> self next-state) (let ((v1-21 (-> self next-state name))) + (or (= v1-21 'smush) (= v1-21 'fire)) + ) + ) + ) + (go-virtual smush) + ) + ) + ) + (((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 4) + ) + (persist-with-delay + *setting-control* + (the-as symbol (process->ppointer self)) + (seconds 0.05) + 'double-jump + #f + 0.0 + 0 + ) + ) + ) + ) + ) + ((= evt-type 'attack) + (let ((v1-28 (the-as object (-> event param 1))) + (a0-17 (-> event param 0)) + (a2-7 0) + ) + (cond + ((= (-> (the-as attack-info v1-28) mode) 'flop) + (set! a2-7 1) + ) + ((= (-> (the-as attack-info v1-28) mode) 'board) + (set! a2-7 9) + ) + ) + (when (and (nonzero? a2-7) + (and ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry a0-17) + (the-as collide-shape (-> self root)) + (the-as uint a2-7) + ) + (send-event proc 'jump (-> self spring-height) (-> self spring-height) (-> self mods)) + ) + ) + (sound-play "trampoline") + (go-virtual fire) + #f + ) + ) + ) + ) + ) + ) + ) + :code (behavior () + (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! min) + (transform-post) + (until #f + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + #f + (none) + ) + ) + +(defstate smush (bouncer) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch) + (set! (-> self state-time) (-> self clock frame-counter)) + #f + ) + (else + ((-> (method-of-object self idle) event) proc arg1 event-type event) + ) + ) + ) + :code (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (set! (-> self smush) 0.0) + (until #f + (if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.2)) + (ja :num! (seek! 0.0 0.1)) + (ja :num! (seek! + (lerp-scale + (ja-aframe 6.0 0) + (ja-aframe 2.0 0) + (vector-vector-xz-distance (target-pos 0) (-> self root trans)) + 0.0 + 4096.0 + ) + 0.2 + ) + ) + ) + (suspend) + (if (ja-min? 0) + (go-virtual idle) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior bouncer) transform-post) + ) + +(defstate fire (bouncer) + :virtual #t + :code (behavior () + (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 178 (seconds 0.1)) + (ja-no-eval :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) + :num! (seek! + (the float (+ (-> (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) frames num-frames) -1)) + ) + :frame-num (ja-aframe 6.0 0) + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + (go-virtual idle) + (none) + ) + :post (the-as (function none :behavior bouncer) transform-post) + ) + +(defmethod init-skeleton! bouncer ((obj bouncer)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-bouncer" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + 0 + (none) + ) + +(defmethod bouncer-method-24 bouncer ((obj bouncer)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec crate)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 3072.0 0.0 6963.2) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root) collision-shape) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! bouncer ((obj bouncer) (arg0 entity-actor)) + (set! (-> obj mods) #f) + (bouncer-method-24 obj) + (process-drawable-from-entity! obj arg0) + (init-skeleton! obj) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh obj)) + (set! (-> obj spring-height) (res-lump-float arg0 'spring-height :default 45056.0)) + (go (method-of-object obj idle)) + (none) + ) diff --git a/goalc/build_level/build_level.cpp b/goalc/build_level/build_level.cpp index 240974794e..5136f31250 100644 --- a/goalc/build_level/build_level.cpp +++ b/goalc/build_level/build_level.cpp @@ -21,10 +21,10 @@ void save_pc_data(const std::string& nickname, data.serialize(ser); auto compressed = compression::compress_zstd(ser.get_save_result().first, ser.get_save_result().second); - fmt::print("stats for {}\n", data.level_name); + lg::print("stats for {}\n", data.level_name); print_memory_usage(data, ser.get_save_result().second); - fmt::print("compressed: {} -> {} ({:.2f}%)\n", ser.get_save_result().second, compressed.size(), - 100.f * compressed.size() / ser.get_save_result().second); + lg::print("compressed: {} -> {} ({:.2f}%)\n", ser.get_save_result().second, compressed.size(), + 100.f * compressed.size() / ser.get_save_result().second); file_util::write_binary_file(fr3_output_dir / fmt::format("{}.fr3", nickname), compressed.data(), compressed.size()); } @@ -104,10 +104,10 @@ bool run_build_level(const std::string& input_file, // Save the GOAL level auto result = file.save_object_file(); - fmt::print("Level bsp file size {} bytes\n", result.size()); + lg::print("Level bsp file size {} bytes\n", result.size()); auto save_path = file_util::get_jak_project_dir() / bsp_output_file; file_util::create_dir_if_needed_for_file(save_path); - fmt::print("Saving to {}\n", save_path.string()); + lg::print("Saving to {}\n", save_path.string()); file_util::write_binary_file(save_path, result.data(), result.size()); // Save the PC level diff --git a/goalc/build_level/collide_bvh.cpp b/goalc/build_level/collide_bvh.cpp index 9e3f4a0e6f..abbab4531e 100644 --- a/goalc/build_level/collide_bvh.cpp +++ b/goalc/build_level/collide_bvh.cpp @@ -108,7 +108,7 @@ void split_along_dim(std::vector& faces, std::sort(faces.begin(), faces.end(), [=](const CollideFace& a, const CollideFace& b) { return a.bsphere[dim] < b.bsphere[dim]; }); - fmt::print("splitting with size: {}\n", faces.size()); + lg::print("splitting with size: {}\n", faces.size()); size_t split_idx = faces.size() / 2; out0->insert(out0->end(), faces.begin(), faces.begin() + split_idx); out1->insert(out1->end(), faces.begin() + split_idx, faces.end()); @@ -304,10 +304,10 @@ CollideTree construct_collide_bvh(const std::vector& tris) { } for (auto [size, count] : size_histogram) { - fmt::print(" [{:3d}] {:3d} ({})\n", size, count, size * count); + lg::print(" [{:3d}] {:3d} ({})\n", size, count, size * count); } return tree; } -} // namespace collide \ No newline at end of file +} // namespace collide diff --git a/goalc/build_level/collide_pack.cpp b/goalc/build_level/collide_pack.cpp index 511e695ab1..3e2f7a421b 100644 --- a/goalc/build_level/collide_pack.cpp +++ b/goalc/build_level/collide_pack.cpp @@ -82,7 +82,7 @@ PackedU16Verts pack_verts_to_u16(const std::vector& input) { math::Vector3f vf14_base_trans_float(result.base[0], result.base[1], result.base[2]); vf13_combo_offset -= vf14_base_trans_float; v -= vf13_combo_offset; - fmt::print("error {}\n", (v - input[i]).to_string_aligned());; + lg::print("error {}\n", (v - input[i]).to_string_aligned());; } */ @@ -201,8 +201,8 @@ CollideFragMeshDataArray pack_collide_frags(const std::vector 128) { - fmt::print("frag with too many vertices: {} had {} tris\n", frag_out.vertex_count, - frag_in.faces.size()); + lg::print("frag with too many vertices: {} had {} tris\n", frag_out.vertex_count, + frag_in.faces.size()); lg::error("SHOULD CRASH\n"); } // the diff --git a/goalc/build_level/color_quantization.cpp b/goalc/build_level/color_quantization.cpp index 5ff39cb519..c36950b9b9 100644 --- a/goalc/build_level/color_quantization.cpp +++ b/goalc/build_level/color_quantization.cpp @@ -24,7 +24,7 @@ QuantizedColors quantize_colors_dumb(const std::vector>& in) result.vtx_to_color.push_back(existing->second); } } - fmt::print("quantize_colors_dumb: {} -> {}\n", in.size(), result.final_colors.size()); + lg::print("quantize_colors_dumb: {} -> {}\n", in.size(), result.final_colors.size()); ASSERT(result.final_colors.size() < 8192); return result; } @@ -205,7 +205,7 @@ QuantizedColors quantize_colors_octree(const std::vector>& i float total_error[3] = {0, 0, 0}; for (size_t i = 0; i < in.size(); i++) { - // fmt::print(" {} -> {}\n", in[i].to_string_hex_byte(), + // lg::print(" {} -> {}\n", in[i].to_string_hex_byte(), // out.final_colors[out.vtx_to_color[i]].to_string_hex_byte()); auto diff = in[i].cast() - out.final_colors[out.vtx_to_color[i]].cast(); @@ -219,4 +219,4 @@ QuantizedColors quantize_colors_octree(const std::vector>& i lg::info("Final palette size: {}", out.final_colors.size()); return out; -} \ No newline at end of file +} diff --git a/goalc/build_level/gltf_mesh_extract.cpp b/goalc/build_level/gltf_mesh_extract.cpp index 7ef450bd7c..82359441e6 100644 --- a/goalc/build_level/gltf_mesh_extract.cpp +++ b/goalc/build_level/gltf_mesh_extract.cpp @@ -138,7 +138,7 @@ ExtractedVertices gltf_vertices(const tinygltf::Model& model, ASSERT_MSG(attrib_accessor.componentType == TINYGLTF_COMPONENT_TYPE_FLOAT, "POSITION wasn't float"); // for (auto& attrib : attributes) { - // fmt::print("attrib: {}\n", attrib.first); + // lg::print("attrib: {}\n", attrib.first); //} auto mesh_verts = extract_vec3f(data_ptr, count, byte_stride); result.reserve(mesh_verts.size()); @@ -796,10 +796,10 @@ void extract(const Input& in, for (int j = 0; j < 3; j++) { float output_dist = face.bsphere.w() - (face.bsphere.xyz() - face.v[j]).length(); if (output_dist < 0) { - fmt::print("{}\n", output_dist); - fmt::print("BAD:\n{}\n{}\n{}\n", face.v[0].to_string_aligned(), - face.v[1].to_string_aligned(), face.v[2].to_string_aligned()); - fmt::print("bsphere: {}\n", face.bsphere.to_string_aligned()); + lg::print("{}\n", output_dist); + lg::print("BAD:\n{}\n{}\n{}\n", face.v[0].to_string_aligned(), + face.v[1].to_string_aligned(), face.v[2].to_string_aligned()); + lg::print("bsphere: {}\n", face.bsphere.to_string_aligned()); } } face.pat = pat.pat; diff --git a/goalc/compiler/Compiler.cpp b/goalc/compiler/Compiler.cpp index c2a449f668..e9364cd683 100644 --- a/goalc/compiler/Compiler.cpp +++ b/goalc/compiler/Compiler.cpp @@ -176,35 +176,35 @@ Val* Compiler::compile_error_guard(const goos::Object& code, Env* env) { bool term; auto loc_info = m_goos.reader.db.get_info_for(code, &term); if (term) { - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Location:\n"); - fmt::print(loc_info); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Location:\n"); + lg::print(loc_info); } - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); - fmt::print("{}\n", pretty_print::to_string(code, 120)); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); + lg::print("{}\n", pretty_print::to_string(code, 120)); if (term) { ce.print_err_stack = false; } std::string line(80, '-'); line.push_back('\n'); - fmt::print(line); + lg::print(line); } throw ce; } catch (std::runtime_error& e) { - fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); - fmt::print(fmt::emphasis::bold, "{}\n", e.what()); + lg::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); + lg::print(fmt::emphasis::bold, "{}\n", e.what()); bool term; auto loc_info = m_goos.reader.db.get_info_for(code, &term); if (term) { - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Location:\n"); - fmt::print(loc_info); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Location:\n"); + lg::print(loc_info); } - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); - fmt::print("{}\n", pretty_print::to_string(code, 120)); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); + lg::print("{}\n", pretty_print::to_string(code, 120)); CompilerException ce("Compiler Exception"); if (term) { @@ -212,7 +212,7 @@ Val* Compiler::compile_error_guard(const goos::Object& code, Env* env) { } std::string line(80, '-'); line.push_back('\n'); - fmt::print(line); + lg::print(line); throw ce; } } @@ -251,13 +251,13 @@ void Compiler::color_object_file(FileEnv* env) { if (regalloc_result_2.ok) { if (regalloc_result_2.num_spilled_vars > 0) { - // fmt::print("Function {} has {} spilled vars.\n", f->name(), + // lg::print("Function {} has {} spilled vars.\n", f->name(), // regalloc_result_2.num_spilled_vars); } num_spills_in_file += regalloc_result_2.num_spills; f->set_allocations(std::move(regalloc_result_2)); } else { - fmt::print( + lg::print( "Warning: function {} failed register allocation with the v2 allocator. Falling back to " "the v1 allocator.\n", f->name()); @@ -281,8 +281,7 @@ std::vector Compiler::codegen_object_file(FileEnv* env) { auto result = gen.run(&m_ts); for (auto& f : env->functions()) { if (f->settings.print_asm) { - fmt::print("{}\n", - debug_info->disassemble_function_by_name(f->name(), &ok, &m_goos.reader)); + lg::print("{}\n", debug_info->disassemble_function_by_name(f->name(), &ok, &m_goos.reader)); } } auto stats = gen.get_obj_stats(); diff --git a/goalc/compiler/Compiler.h b/goalc/compiler/Compiler.h index 74d30abf65..75dff8db8e 100644 --- a/goalc/compiler/Compiler.h +++ b/goalc/compiler/Compiler.h @@ -417,38 +417,38 @@ class Compiler { [[noreturn]] void throw_compiler_error(const goos::Object& code, const std::string& str, Args&&... args) { - fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); + lg::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); if (!str.empty() && str.back() == '\n') { - fmt::print(fmt::emphasis::bold, str, std::forward(args)...); + lg::print(fmt::emphasis::bold, str, std::forward(args)...); } else { - fmt::print(fmt::emphasis::bold, str + '\n', std::forward(args)...); + lg::print(fmt::emphasis::bold, str + '\n', std::forward(args)...); } - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Form:\n"); - fmt::print("{}\n", code.print()); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Form:\n"); + lg::print("{}\n", code.print()); throw CompilerException("Compilation Error"); } template [[noreturn]] void throw_compiler_error_no_code(const std::string& str, Args&&... args) { - fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); + lg::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); if (!str.empty() && str.back() == '\n') { - fmt::print(fmt::emphasis::bold, str, std::forward(args)...); + lg::print(fmt::emphasis::bold, str, std::forward(args)...); } else { - fmt::print(fmt::emphasis::bold, str + '\n', std::forward(args)...); + lg::print(fmt::emphasis::bold, str + '\n', std::forward(args)...); } - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Form:\n"); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Form:\n"); throw CompilerException("Compilation Error"); } template void print_compiler_warning(const std::string& str, Args&&... args) { - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "[Warning] "); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "[Warning] "); if (!str.empty() && str.back() == '\n') { - fmt::print(str, std::forward(args)...); + lg::print(str, std::forward(args)...); } else { - fmt::print(str + '\n', std::forward(args)...); + lg::print(str + '\n', std::forward(args)...); } } diff --git a/goalc/compiler/Env.cpp b/goalc/compiler/Env.cpp index de604c7aa0..7e0ed6ff1e 100644 --- a/goalc/compiler/Env.cpp +++ b/goalc/compiler/Env.cpp @@ -5,6 +5,7 @@ #include "IR.h" #include "common/goos/Reader.h" +#include "common/log/log.h" #include "third-party/fmt/core.h" @@ -157,7 +158,7 @@ void FileEnv::add_top_level_function(std::unique_ptr fe) { void FileEnv::debug_print_tl() { if (m_top_level_func) { for (auto& code : m_top_level_func->code()) { - fmt::print("{}\n", code->print()); + lg::print("{}\n", code->print()); } } else { printf("no top level function.\n"); @@ -294,7 +295,7 @@ StackVarAddrVal* FunctionEnv::allocate_aligned_stack_variable(const TypeSpec& ts int size_bytes, int align_bytes) { if (align_bytes > 16) { - fmt::print("\n\n\nBad stack align: {} bytes for {}\n\n\n\n", align_bytes, ts.print()); + lg::print("\n\n\nBad stack align: {} bytes for {}\n\n\n\n", align_bytes, ts.print()); } auto space = allocate_aligned_stack_space(size_bytes, align_bytes); return alloc_val(ts, space.start_slot, space.slot_count); diff --git a/goalc/compiler/Util.cpp b/goalc/compiler/Util.cpp index f4b57fd969..662f7439cb 100644 --- a/goalc/compiler/Util.cpp +++ b/goalc/compiler/Util.cpp @@ -72,7 +72,7 @@ std::vector Compiler::run_test_from_file(const std::string& source_ } return m_listener.stop_recording_messages(); } catch (std::exception& e) { - fmt::print("[Compiler] Failed to compile test program {}: {}\n", source_code, e.what()); + lg::print("[Compiler] Failed to compile test program {}: {}\n", source_code, e.what()); throw e; } } @@ -98,7 +98,7 @@ std::vector Compiler::run_test_from_string(const std::string& src, } return m_listener.stop_recording_messages(); } catch (std::exception& e) { - fmt::print("[Compiler] Failed to compile test program from string {}: {}\n", src, e.what()); + lg::print("[Compiler] Failed to compile test program from string {}: {}\n", src, e.what()); throw e; } } diff --git a/goalc/compiler/compilation/CompilerControl.cpp b/goalc/compiler/compilation/CompilerControl.cpp index d67b463421..c59b2c3212 100644 --- a/goalc/compiler/compilation/CompilerControl.cpp +++ b/goalc/compiler/compilation/CompilerControl.cpp @@ -16,7 +16,6 @@ #include "goalc/data_compiler/dir_tpages.h" #include "goalc/data_compiler/game_count.h" #include "goalc/data_compiler/game_text_common.h" - /*! * Exit the compiler. Disconnects the listener and tells the target to reset itself. * Will actually exit the next time the REPL runs. @@ -369,10 +368,10 @@ Val* Compiler::compile_get_info(const goos::Object& form, const goos::Object& re auto result = m_symbol_info.lookup_exact_name(args.unnamed.at(0).as_symbol()->name); if (!result) { - fmt::print("No results found.\n"); + lg::print("No results found.\n"); } else { for (auto& info : *result) { - fmt::print("{}", make_symbol_info_description(info)); + lg::print("{}", make_symbol_info_description(info)); } } @@ -496,11 +495,11 @@ Val* Compiler::compile_autocomplete(const goos::Object& form, const goos::Object auto time = timer.getMs(); for (auto& x : result) { - fmt::print(" {}\n", x); + lg::print(" {}\n", x); } - fmt::print("Autocomplete: {}/{} symbols matched, took {:.2f} ms\n", result.size(), - m_symbol_info.symbol_count(), time); + lg::print("Autocomplete: {}/{} symbols matched, took {:.2f} ms\n", result.size(), + m_symbol_info.symbol_count(), time); return get_none(); } @@ -562,12 +561,12 @@ Val* Compiler::compile_print_debug_compiler_stats(const goos::Object& form, auto args = get_va(form, rest); va_check(form, args, {}, {}); - fmt::print("Spill operations (total): {}\n", m_debug_stats.num_spills); - fmt::print("Spill operations (v1 only): {}\n", m_debug_stats.num_spills_v1); - fmt::print("Eliminated moves: {}\n", m_debug_stats.num_moves_eliminated); - fmt::print("Total functions: {}\n", m_debug_stats.total_funcs); - fmt::print("Functions requiring v1: {}\n", m_debug_stats.funcs_requiring_v1_allocator); - fmt::print("Size of autocomplete prefix tree: {}\n", m_symbol_info.symbol_count()); + lg::print("Spill operations (total): {}\n", m_debug_stats.num_spills); + lg::print("Spill operations (v1 only): {}\n", m_debug_stats.num_spills_v1); + lg::print("Eliminated moves: {}\n", m_debug_stats.num_moves_eliminated); + lg::print("Total functions: {}\n", m_debug_stats.total_funcs); + lg::print("Functions requiring v1: {}\n", m_debug_stats.funcs_requiring_v1_allocator); + lg::print("Size of autocomplete prefix tree: {}\n", m_symbol_info.symbol_count()); return get_none(); } diff --git a/goalc/compiler/compilation/ConstantPropagation.cpp b/goalc/compiler/compilation/ConstantPropagation.cpp index 6603c0c95b..59736be3e0 100644 --- a/goalc/compiler/compilation/ConstantPropagation.cpp +++ b/goalc/compiler/compilation/ConstantPropagation.cpp @@ -134,8 +134,8 @@ Compiler::ConstPropResult Compiler::try_constant_propagation(const goos::Object& auto ret = constant_propagation_dispatch(form, env); size_t end_size = code_size(env); if (start_size != end_size) { - fmt::print("Compiler bug in constant propagation. Code was generated: {} vs {}\n", start_size, - end_size); + lg::print("Compiler bug in constant propagation. Code was generated: {} vs {}\n", start_size, + end_size); ASSERT(false); } return ret; @@ -315,4 +315,4 @@ ValOrConstFloat Compiler::get_constant_float_or_variable(const goos::Object& in, return ValOrConstFloat(compile_no_const_prop(prop.value, env)); } } -} \ No newline at end of file +} diff --git a/goalc/compiler/compilation/Debug.cpp b/goalc/compiler/compilation/Debug.cpp index 4d13ec2939..9c4dddb022 100644 --- a/goalc/compiler/compilation/Debug.cpp +++ b/goalc/compiler/compilation/Debug.cpp @@ -1,3 +1,4 @@ +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "goalc/compiler/Compiler.h" @@ -57,19 +58,19 @@ Val* Compiler::compile_dbg(const goos::Object& form, const goos::Object& rest, E (void)rest; (void)env; if (!m_debugger.is_valid()) { - fmt::print("[Debugger] Could not start debugger because there is no valid debugging context\n"); + lg::print("[Debugger] Could not start debugger because there is no valid debugging context\n"); return get_none(); } if (m_debugger.is_attached()) { - fmt::print("[Debugger] Could not start debugger because the debugger is already attached.\n"); + lg::print("[Debugger] Could not start debugger because the debugger is already attached.\n"); return get_none(); } if (m_debugger.attach_and_break()) { - fmt::print("Debugger connected.\n"); + lg::print("Debugger connected.\n"); } else { - fmt::print("ERROR\n"); + lg::print("ERROR\n"); } return get_none(); @@ -81,21 +82,21 @@ Val* Compiler::compile_dbs(const goos::Object& form, const goos::Object& rest, E (void)rest; (void)env; - fmt::print(" Listener connected? {}\n", m_listener.is_connected()); - fmt::print(" Debugger context? {}\n", m_debugger.is_valid()); + lg::print(" Listener connected? {}\n", m_listener.is_connected()); + lg::print(" Debugger context? {}\n", m_debugger.is_valid()); if (m_debugger.is_valid()) { - fmt::print(" Attached? {}\n", m_debugger.is_attached()); + lg::print(" Attached? {}\n", m_debugger.is_attached()); if (m_debugger.is_attached()) { - fmt::print(" Halted? {}\n", m_debugger.is_halted()); + lg::print(" Halted? {}\n", m_debugger.is_halted()); } - fmt::print(" Context: {}\n", m_debugger.get_context_string()); + lg::print(" Context: {}\n", m_debugger.get_context_string()); } if (m_debugger.is_valid()) { } else { - fmt::print("There is no valid debug context from the target."); + lg::print("There is no valid debug context from the target."); } return get_none(); @@ -110,8 +111,8 @@ Val* Compiler::compile_cont(const goos::Object& form, const goos::Object& rest, if (m_debugger.is_valid() && m_debugger.is_attached() && m_debugger.is_halted()) { m_debugger.do_continue(); } else { - fmt::print("Couldn't do :cont. Valid {}, attached {}, halted {}\n", m_debugger.is_valid(), - m_debugger.is_attached(), m_debugger.is_halted()); + lg::print("Couldn't do :cont. Valid {}, attached {}, halted {}\n", m_debugger.is_valid(), + m_debugger.is_attached(), m_debugger.is_halted()); } return get_none(); @@ -126,8 +127,8 @@ Val* Compiler::compile_stop(const goos::Object& form, const goos::Object& rest, if (m_debugger.is_valid() && m_debugger.is_attached() && m_debugger.is_halted()) { m_debugger.detach(); } else { - fmt::print("Couldn't do :stop. Valid {}, attached {}, halted {}\n", m_debugger.is_valid(), - m_debugger.is_attached(), m_debugger.is_halted()); + lg::print("Couldn't do :stop. Valid {}, attached {}, halted {}\n", m_debugger.is_valid(), + m_debugger.is_attached(), m_debugger.is_halted()); } return get_none(); @@ -142,8 +143,8 @@ Val* Compiler::compile_break(const goos::Object& form, const goos::Object& rest, if (m_debugger.is_valid() && m_debugger.is_attached() && m_debugger.is_running()) { m_debugger.do_break(); } else { - fmt::print("Couldn't do :break. Valid {}, attached {}, running {}\n", m_debugger.is_valid(), - m_debugger.is_attached(), m_debugger.is_running()); + lg::print("Couldn't do :break. Valid {}, attached {}, running {}\n", m_debugger.is_valid(), + m_debugger.is_attached(), m_debugger.is_running()); } return get_none(); @@ -152,7 +153,7 @@ Val* Compiler::compile_break(const goos::Object& form, const goos::Object& rest, Val* Compiler::compile_dump_all(const goos::Object& form, const goos::Object& rest, Env* env) { (void)env; if (!m_debugger.is_halted()) { - fmt::print("Couldn't dump memory. Must be attached and halted.\n"); + lg::print("Couldn't dump memory. Must be attached and halted.\n"); return get_none(); } @@ -165,7 +166,7 @@ Val* Compiler::compile_dump_all(const goos::Object& form, const goos::Object& re if (!m_debugger.read_memory(buffer + EE_MAIN_MEM_LOW_PROTECT, EE_MAIN_MEM_SIZE - EE_MAIN_MEM_LOW_PROTECT, EE_MAIN_MEM_LOW_PROTECT)) { - fmt::print("Reading memory failed, not dumping.\n"); + lg::print("Reading memory failed, not dumping.\n"); } else { file_util::write_binary_file(file_util::get_file_path({dest_file}), buffer, EE_MAIN_MEM_SIZE); } @@ -203,18 +204,18 @@ void mem_print(T* data, int count, u32 start_addr, PrintMode mode) { for (int i = 0; i < count; i++) { if ((i % elt_per_line) == 0) { // first in line, so we should print the GOAL address - fmt::print(" 0x{:08x}: ", start_addr + (i * sizeof(T))); + lg::print(" 0x{:08x}: ", start_addr + (i * sizeof(T))); } // print the thing - fmt::print(format_string, data[i]); + lg::print(format_string, data[i]); if ((i % elt_per_line) == (elt_per_line - 1)) { // last in line, newline! - fmt::print("\n"); + lg::print("\n"); } } - fmt::print("\n"); + lg::print("\n"); } } // namespace @@ -363,8 +364,8 @@ Val* Compiler::compile_disasm(const goos::Object& form, const goos::Object& rest addr, addr + size, EE_MAIN_MEM_LOW_PROTECT, EE_MAIN_MEM_SIZE); } - fmt::print("{}\n", m_debugger.get_info_about_addr(addr)); - fmt::print("{}\n", m_debugger.disassemble_x86_with_symbols(size, addr)); + lg::print("{}\n", m_debugger.get_info_about_addr(addr)); + lg::print("{}\n", m_debugger.disassemble_x86_with_symbols(size, addr)); return get_none(); } @@ -417,9 +418,9 @@ Val* Compiler::compile_d_sym_name(const goos::Object& form, const goos::Object& auto sym_name = m_debugger.get_symbol_name_from_offset(ofs); if (sym_name) { - fmt::print("symbol name for symbol {:X}h is {}\n", ofs, sym_name); + lg::print("symbol name for symbol {:X}h is {}\n", ofs, sym_name); } else { - fmt::print("symbol {:X}h is not loaded or is invalid\n", ofs); + lg::print("symbol {:X}h is not loaded or is invalid\n", ofs); } return get_none(); diff --git a/goalc/compiler/compilation/Define.cpp b/goalc/compiler/compilation/Define.cpp index 4b9e4d64ab..4a0da76713 100644 --- a/goalc/compiler/compilation/Define.cpp +++ b/goalc/compiler/compilation/Define.cpp @@ -3,8 +3,6 @@ * Forms which define or set things. */ -#include "common/log/log.h" - #include "goalc/compiler/Compiler.h" /*! diff --git a/goalc/compiler/compilation/Macro.cpp b/goalc/compiler/compilation/Macro.cpp index b2cf1580e4..f324b77b18 100644 --- a/goalc/compiler/compilation/Macro.cpp +++ b/goalc/compiler/compilation/Macro.cpp @@ -49,35 +49,35 @@ Val* Compiler::compile_goos_macro(const goos::Object& o, if (ce.print_err_stack) { bool good_info = false; auto info = m_goos.reader.db.get_info_for(o, &good_info); - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); - fmt::print("{}\n", pretty_print::to_string(goos_result, 120)); - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "From macro: "); - fmt::print(fg(fmt::color::orange), "{}\n", name.print()); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); + lg::print("{}\n", pretty_print::to_string(goos_result, 120)); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "From macro: "); + lg::print(fg(fmt::color::orange), "{}\n", name.print()); if (good_info) { - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Used in:\n"); - fmt::print("{}\n", info); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Used in:\n"); + lg::print("{}\n", info); ce.print_err_stack = false; } std::string line(80, '-'); line.push_back('\n'); - fmt::print(line); + lg::print(line); } throw; } catch (std::runtime_error& e) { bool good_info = false; auto info = m_goos.reader.db.get_info_for(o, &good_info); - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); - fmt::print("{}\n", pretty_print::to_string(goos_result, 120)); - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "From macro: "); - fmt::print(fg(fmt::color::orange), "{}\n", name.print()); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); + lg::print("{}\n", pretty_print::to_string(goos_result, 120)); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "From macro: "); + lg::print(fg(fmt::color::orange), "{}\n", name.print()); if (good_info) { - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Used in:\n"); - fmt::print("{}\n", info); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Used in:\n"); + lg::print("{}\n", info); } std::string line(80, '-'); line.push_back('\n'); - fmt::print(line); + lg::print(line); throw; } diff --git a/goalc/compiler/compilation/Type.cpp b/goalc/compiler/compilation/Type.cpp index 6b40c11262..dcf4e958fe 100644 --- a/goalc/compiler/compilation/Type.cpp +++ b/goalc/compiler/compilation/Type.cpp @@ -1,3 +1,4 @@ +#include "common/log/log.h" #include "common/type_system/defenum.h" #include "common/type_system/deftype.h" #include "common/type_system/state.h" @@ -371,8 +372,8 @@ Val* Compiler::compile_deftype(const goos::Object& form, const goos::Object& res auto kv = m_symbol_types.find(result.type.base_type()); if (kv != m_symbol_types.end() && kv->second.base_type() != "type") { // we already have something that's not a type with the same name, this is bad. - fmt::print("[Warning] deftype will redefine {} from {} to a type.\n", result.type.base_type(), - kv->second.print()); + lg::print("[Warning] deftype will redefine {} from {} to a type.\n", result.type.base_type(), + kv->second.print()); } // remember that this is a type m_symbol_types[result.type.base_type()] = m_ts.make_typespec("type"); @@ -958,7 +959,7 @@ Val* Compiler::compile_print_type(const goos::Object& form, const goos::Object& auto args = get_va(form, rest); va_check(form, args, {{}}, {}); auto result = compile(args.unnamed.at(0), env)->to_reg(form, env); - fmt::print("[TYPE] {} {}\n", result->type().print(), result->print()); + lg::print("[TYPE] {} {}\n", result->type().print(), result->print()); return result; } diff --git a/goalc/data_compiler/game_text_common.cpp b/goalc/data_compiler/game_text_common.cpp index 8615ad2d59..d108f34c1b 100644 --- a/goalc/data_compiler/game_text_common.cpp +++ b/goalc/data_compiler/game_text_common.cpp @@ -152,7 +152,7 @@ void compile_game_text(const std::vector& filenames, const std::string& output_prefix) { goos::Reader reader; for (auto& filename : filenames) { - fmt::print("[Build Game Text] {}\n", filename.c_str()); + lg::print("[Build Game Text] {}\n", filename.c_str()); auto code = reader.read_from_file({filename}); parse_text(code, db); } @@ -164,7 +164,7 @@ void compile_game_subtitle(const std::vector& filenames, const std::string& output_prefix) { goos::Reader reader; for (auto& filename : filenames) { - fmt::print("[Build Game Subtitle] {}\n", filename.c_str()); + lg::print("[Build Game Subtitle] {}\n", filename.c_str()); auto code = reader.read_from_file({filename}); parse_subtitle(code, db, filename); } diff --git a/goalc/debugger/Debugger.cpp b/goalc/debugger/Debugger.cpp index b3adb9e74c..0b41ce22e4 100644 --- a/goalc/debugger/Debugger.cpp +++ b/goalc/debugger/Debugger.cpp @@ -7,6 +7,7 @@ #include "Debugger.h" #include "common/goal_constants.h" +#include "common/log/log.h" #include "common/symbols.h" #include "common/util/Assert.h" #include "common/util/Timer.h" @@ -130,7 +131,7 @@ bool Debugger::attach_and_break() { // this may fail if you crash at exactly the wrong time. todo - remove? if (info.kind != xdbg::SignalInfo::BREAK) { - fmt::print("[Debugger] got signal {} when expecting break.\n", (int)info.kind); + lg::print("[Debugger] got signal {} when expecting break.\n", (int)info.kind); } // open the memory of the process @@ -146,13 +147,13 @@ bool Debugger::attach_and_break() { auto signal_count = get_signal_count(); if (signal_count != 0) { - fmt::print("[Debugger] got signal count of {} in attach_and_break\n", signal_count); + lg::print("[Debugger] got signal count of {} in attach_and_break\n", signal_count); } return true; } } else { - fmt::print("[Debugger] attach_and_break can't be done when valid = {} and attached = {}\n", - is_valid(), m_attached); + lg::print("[Debugger] attach_and_break can't be done when valid = {} and attached = {}\n", + is_valid(), m_attached); } return false; } @@ -221,15 +222,15 @@ InstructionPointerInfo Debugger::get_rip_info(u64 rip) { } std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { - fmt::print("Backtrace:\n"); + lg::print("Backtrace:\n"); std::vector bt; if (rip == m_debug_context.base) { // we jumped to NULL. - fmt::print("Jumped to GOAL 0x0. Attempting to find previous function.\n"); + lg::print("Jumped to GOAL 0x0. Attempting to find previous function.\n"); u64 next_rip = 0; if (!read_memory_if_safe(&next_rip, rsp - m_debug_context.base)) { - fmt::print(" failed to read return address off of the stack\n"); + lg::print(" failed to read return address off of the stack\n"); return {}; } @@ -239,8 +240,8 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { int fails = 0; while (true) { - fmt::print(" rsp: 0x{:x} (#x{:x}) rip: 0x{:x} (#x{:x})\n", rsp, rsp - m_debug_context.base, - rip, rip - m_debug_context.base); + lg::print(" rsp: 0x{:x} (#x{:x}) rip: 0x{:x} (#x{:x})\n", rsp, rsp - m_debug_context.base, + rip, rip - m_debug_context.base); BacktraceFrame frame; frame.rip_info = get_rip_info(rip); frame.rsp_at_rip = rsp; @@ -248,16 +249,16 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { if (frame.rip_info.knows_function && frame.rip_info.func_debug && frame.rip_info.func_debug->stack_usage) { fails = 0; - fmt::print("<====================== CALL STACK ======================>\n"); - fmt::print("{} from {}\n", frame.rip_info.function_name, frame.rip_info.func_debug->obj_name); + lg::print("<====================== CALL STACK ======================>\n"); + lg::print("{} from {}\n", frame.rip_info.function_name, frame.rip_info.func_debug->obj_name); // we're good! auto disasm = disassemble_at_rip(frame.rip_info); - fmt::print("{}\n", disasm.text); + lg::print("{}\n", disasm.text); u64 rsp_at_call = rsp + *frame.rip_info.func_debug->stack_usage; u64 next_rip = 0; if (!read_memory_if_safe(&next_rip, rsp_at_call - m_debug_context.base)) { - fmt::print("Invalid return address encountered!\n"); + lg::print("Invalid return address encountered!\n"); break; } @@ -267,14 +268,14 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { } else { if (!frame.rip_info.knows_function) { if (fails == 0) { - fmt::print("Unknown Function at rip\n"); + lg::print("Unknown Function at rip\n"); } /* bool found = false; if (s32(rip - m_debug_context.base) > 0 && m_symbol_name_to_value_map.find("function") != m_symbol_name_to_value_map.cend()) { - fmt::print("Attempting to find function at this address.\n"); + lg::print("Attempting to find function at this address.\n"); u32 function_sym_val = m_symbol_name_to_value_map.at("function"); u32 goal_pc = u32(rip - m_debug_context.base) & -8; @@ -290,21 +291,21 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { if (wordval == function_sym_val) { // found a function! - fmt::print("Found function after {} bytes!\n", + lg::print("Found function after {} bytes!\n", (rip - m_debug_context.base) - goal_pc); break; } } if (goal_pc <= symtable_end) { - fmt::print("Could not find function within this address.\n"); + lg::print("Could not find function within this address.\n"); } else { rip = goal_pc + m_debug_context.base + BASIC_OFFSET; found = true; } } else*/ if (fails > 70) { - fmt::print( + lg::print( "Backtrace was too long. Exception might have happened outside GOAL code, or the " "stack frame is too long.\n"); break; @@ -312,7 +313,7 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { // attempt to backtrace anyway! if this fails then rip u64 next_rip = 0; if (!read_memory_if_safe(&next_rip, rsp - m_debug_context.base - 8)) { - fmt::print("Invalid return address encountered!\n"); + lg::print("Invalid return address encountered!\n"); break; } @@ -321,10 +322,10 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { ++fails; // break; } else if (!frame.rip_info.func_debug) { - fmt::print("Function {} has no debug info.\n", frame.rip_info.function_name); + lg::print("Function {} has no debug info.\n", frame.rip_info.function_name); break; } else { - fmt::print("Function {} with no stack frame data.\n", frame.rip_info.function_name); + lg::print("Function {} with no stack frame data.\n", frame.rip_info.function_name); break; } } @@ -417,21 +418,21 @@ void Debugger::update_break_info() { // todo adjust rip if break instruction???? m_memory_map = m_listener->build_memory_map(); - // fmt::print("{}", m_memory_map.print()); + // lg::print("{}", m_memory_map.print()); read_symbol_table(); m_regs_valid = false; if (!xdbg::get_regs_now(m_debug_context.tid, &m_regs_at_break)) { - fmt::print("[Debugger] get_regs_now failed after break, something is wrong\n"); + lg::print("[Debugger] get_regs_now failed after break, something is wrong\n"); } else { m_regs_valid = true; - fmt::print("{}", m_regs_at_break.print_gprs()); + lg::print("{}", m_regs_at_break.print_gprs()); } if (regs_valid()) { m_break_info = get_rip_info(m_regs_at_break.rip); update_continue_info(); auto dis = disassemble_at_rip(m_break_info); - fmt::print("{}\n", dis.text); + lg::print("{}\n", dis.text); get_backtrace(m_regs_at_break.rip, m_regs_at_break.gprs[emitter::RSP]); } @@ -528,7 +529,7 @@ void Debugger::read_symbol_table_jak1() { if (!xdbg::read_goal_memory(mem.data(), SYM_TABLE_MEM_SIZE, st_base, m_debug_context, m_memory_handle)) { - fmt::print("Read failed during read_symbol_table\n"); + lg::print("Read failed during read_symbol_table\n"); return; } reads++; @@ -562,8 +563,8 @@ void Debugger::read_symbol_table_jak1() { sym_type = sym->type; } else { if (sym_type != sym->type) { - fmt::print("Got bad symbol type. Expected 0x{:x} got 0x{:x}: addr 0x{:x}\n", sym_type, - sym->type, offset + st_base + (uint64_t)m_debug_context.base); + lg::print("Got bad symbol type. Expected 0x{:x} got 0x{:x}: addr 0x{:x}\n", sym_type, + sym->type, offset + st_base + (uint64_t)m_debug_context.base); return; } } @@ -575,7 +576,7 @@ void Debugger::read_symbol_table_jak1() { char str_buff[128]; if (!xdbg::read_goal_memory((u8*)str_buff, 128, info->str + 4, m_debug_context, m_memory_handle)) { - fmt::print("Read symbol string failed during read_symbol_table\n"); + lg::print("Read symbol string failed during read_symbol_table\n"); return; } reads++; @@ -590,7 +591,7 @@ void Debugger::read_symbol_table_jak1() { std::string str(str_buff); if (str.length() >= 50) { - fmt::print("Invalid symbol #x{:x}!\n", sym_offset); + lg::print("Invalid symbol #x{:x}!\n", sym_offset); continue; } @@ -603,7 +604,7 @@ void Debugger::read_symbol_table_jak1() { // to hide this duplicate symbol, we append "-hack-copy" to the end of it. str += "-hack-copy"; } else { - fmt::print("Symbol {} (#x{:x}) appears multiple times!\n", str, sym_offset); + lg::print("Symbol {} (#x{:x}) appears multiple times!\n", str, sym_offset); continue; // ASSERT(false); } @@ -616,8 +617,8 @@ void Debugger::read_symbol_table_jak1() { } ASSERT(m_symbol_offset_to_name_map.size() == m_symbol_name_to_offset_map.size()); - fmt::print("Read symbol table ({} bytes, {} reads, {} symbols, {:.2f} ms)\n", bytes_read, reads, - m_symbol_name_to_offset_map.size(), timer.getMs()); + lg::print("Read symbol table ({} bytes, {} reads, {} symbols, {:.2f} ms)\n", bytes_read, reads, + m_symbol_name_to_offset_map.size(), timer.getMs()); } void Debugger::read_symbol_table_jak2() { @@ -637,7 +638,7 @@ void Debugger::read_symbol_table_jak2() { if (!xdbg::read_goal_memory(mem.data(), SYM_TABLE_MEM_SIZE, st_base, m_debug_context, m_memory_handle)) { - fmt::print("Read failed during read_symbol_table\n"); + lg::print("Read failed during read_symbol_table\n"); return; } reads++; @@ -659,7 +660,7 @@ void Debugger::read_symbol_table_jak2() { // now get the string. char str_buff[128]; if (!xdbg::read_goal_memory((u8*)str_buff, 128, info + 4, m_debug_context, m_memory_handle)) { - fmt::print("Read symbol string failed during read_symbol_table\n"); + lg::print("Read symbol string failed during read_symbol_table\n"); return; } reads++; @@ -674,7 +675,7 @@ void Debugger::read_symbol_table_jak2() { std::string str(str_buff); if (str.length() >= 50) { - fmt::print("Invalid symbol #x{:x}!\n", sym_offset); + lg::print("Invalid symbol #x{:x}!\n", sym_offset); continue; } @@ -687,7 +688,7 @@ void Debugger::read_symbol_table_jak2() { // to hide this duplicate symbol, we append "-hack-copy" to the end of it. str += "-hack-copy"; } else { - fmt::print("Symbol {} (#x{:x}) appears multiple times!\n", str, sym_offset); + lg::print("Symbol {} (#x{:x}) appears multiple times!\n", str, sym_offset); continue; // ASSERT(false); } @@ -700,8 +701,8 @@ void Debugger::read_symbol_table_jak2() { } ASSERT(m_symbol_offset_to_name_map.size() == m_symbol_name_to_offset_map.size()); - fmt::print("Read symbol table ({} bytes, {} reads, {} symbols, {:.2f} ms)\n", bytes_read, reads, - m_symbol_name_to_offset_map.size(), timer.getMs()); + lg::print("Read symbol table ({} bytes, {} reads, {} symbols, {:.2f} ms)\n", bytes_read, reads, + m_symbol_name_to_offset_map.size(), timer.getMs()); } /*! @@ -941,8 +942,8 @@ void Debugger::add_addr_breakpoint(u32 addr) { std::unique_lock lock(m_watcher_mutex); auto kv = m_addr_breakpoints.find(addr); if (kv != m_addr_breakpoints.end()) { - fmt::print("Breakpoint at address 0x{:08x} already exists as breakpoint {}\n", addr, - kv->second.id); + lg::print("Breakpoint at address 0x{:08x} already exists as breakpoint {}\n", addr, + kv->second.id); return; } @@ -950,13 +951,13 @@ void Debugger::add_addr_breakpoint(u32 addr) { bp.goal_addr = addr; bp.id = m_addr_breakpoints.size(); if (!read_memory(&bp.old_data, 1, addr)) { - fmt::print("Failed to read memory for breakpoint, not adding breakpoint\n"); + lg::print("Failed to read memory for breakpoint, not adding breakpoint\n"); return; } u8 int3 = 0xcc; if (!write_memory(&int3, 1, addr)) { - fmt::print("Failed to write memory for breakpoint, not adding breakpoint\n"); + lg::print("Failed to write memory for breakpoint, not adding breakpoint\n"); return; } @@ -970,12 +971,12 @@ void Debugger::remove_addr_breakpoint(u32 addr) { update_continue_info(); auto kv = m_addr_breakpoints.find(addr); if (kv == m_addr_breakpoints.end()) { - fmt::print("Breakpoint at address 0x{:08x} does not exist\n", addr); + lg::print("Breakpoint at address 0x{:08x} does not exist\n", addr); return; } if (!write_memory(&kv->second.old_data, 1, addr)) { - fmt::print("Failed to remove breakpoint\n"); + lg::print("Failed to remove breakpoint\n"); return; } diff --git a/goalc/listener/Listener.cpp b/goalc/listener/Listener.cpp index 84943bcd99..7804d4fe7d 100644 --- a/goalc/listener/Listener.cpp +++ b/goalc/listener/Listener.cpp @@ -29,6 +29,7 @@ #include "common/cross_sockets/XSocket.h" #include "common/util/Assert.h" #include "common/versions.h" +#include "common/log/log.h" #include "Listener.h" @@ -225,7 +226,7 @@ void Listener::receive_func() { if (hdr->msg_id == last_sent_id) { printf("[Listener] Received ACK for most recent message late.\n"); if (last_recvd_id != hdr->msg_id - 1) { - fmt::print( + lg::print( "[Listener] WARNING: message ID jumped from {} to {}. Some messages may have " "been lost. You must wait for an ACK before sending the next message.\n", last_recvd_id, hdr->msg_id); @@ -252,7 +253,7 @@ void Listener::receive_func() { got_ack = true; last_recvd_id = hdr->msg_id; if (last_recvd_id > last_sent_id) { - fmt::print( + lg::print( "[Listener] ERROR: Got an ack message with id of {}, but the last message sent " "had an ID of {}.\n", last_recvd_id, last_sent_id); @@ -550,7 +551,7 @@ void Listener::handle_output_message(const char* msg) { } add_load(name_str.substr(2, name_str.length() - 3), entry); - // fmt::print("LOAD:\n{}", entry.print()); + // lg::print("LOAD:\n{}", entry.print()); } else { // todo unload printf("[Listener Warning] unknown output message \"%s\"\n", msg); diff --git a/goalc/main.cpp b/goalc/main.cpp index a5e0571fd0..b5cf1d04c1 100644 --- a/goalc/main.cpp +++ b/goalc/main.cpp @@ -138,7 +138,7 @@ int main(int argc, char** argv) { // Poll Terminal while (status != ReplStatus::WANT_EXIT) { if (status == ReplStatus::WANT_RELOAD) { - fmt::print("Reloading compiler...\n"); + lg::info("Reloading compiler..."); std::lock_guard lock(compiler_mutex); if (compiler) { compiler->save_repl_history(); @@ -160,7 +160,7 @@ int main(int argc, char** argv) { } } } catch (std::exception& e) { - fmt::print(stderr, "Compiler Fatal Error: {}\n", e.what()); + lg::error("Compiler Fatal Error: {}", e.what()); status = ReplStatus::WANT_EXIT; } diff --git a/goalc/make/MakeSystem.cpp b/goalc/make/MakeSystem.cpp index efda451b6e..aa29deaeb8 100644 --- a/goalc/make/MakeSystem.cpp +++ b/goalc/make/MakeSystem.cpp @@ -1,6 +1,7 @@ #include "MakeSystem.h" #include "common/goos/ParseHelpers.h" +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "common/util/Timer.h" @@ -89,8 +90,8 @@ void MakeSystem::load_project_file(const std::string& file_path) { auto data = m_goos.reader.read_from_file({file_path}); // interpret it, which will call various handlers. m_goos.eval(data, m_goos.global_environment.as_env_ptr()); - fmt::print("Loaded project {} with {} steps in {} ms\n", file_path, m_output_to_step.size(), - (int)timer.getMs()); + lg::print("Loaded project {} with {} steps in {} ms\n", file_path, m_output_to_step.size(), + (int)timer.getMs()); } goos::Object MakeSystem::handle_defstep(const goos::Object& form, @@ -256,8 +257,8 @@ std::vector MakeSystem::get_dependencies(const std::string& target) get_dependencies(target, target, &result, &added_deps); - fmt::print("Successfully found all {} dependencies for target in {:.3f}s\n", result.size(), - timer.getSeconds()); + lg::print("Successfully found all {} dependencies for target in {:.3f}s\n", result.size(), + timer.getSeconds()); return result; } @@ -312,8 +313,8 @@ std::vector MakeSystem::filter_dependencies(const std::vector& in, char end) { all_names += name; } if (all_names.length() > 70) { - fmt::print("{}...{}", all_names.substr(0, 70 - 3), end); + lg::print("{}...{}", all_names.substr(0, 70 - 3), end); } else { - fmt::print("{}{}{}", all_names, std::string(70 - all_names.length(), ' '), end); + lg::print("{}{}{}", all_names, std::string(70 - all_names.length(), ' '), end); } } } // namespace @@ -338,21 +339,21 @@ void print_input(const std::vector& in, char end) { bool MakeSystem::make(const std::string& target_in, bool force, bool verbose) { std::string target = m_path_map.apply_remaps(target_in); auto deps = get_dependencies(target); - // fmt::print("All deps:\n"); + // lg::print("All deps:\n"); // for (auto& dep : deps) { - // fmt::print("{}\n", dep); + // lg::print("{}\n", dep); // } if (!force) { deps = filter_dependencies(deps); } - // fmt::print("Filt deps:\n"); + // lg::print("Filt deps:\n"); // for (auto& dep : filtered_deps) { - // fmt::print("{}\n", dep); + // lg::print("{}\n", dep); // } Timer make_timer; - fmt::print("Building {} targets...\n", deps.size()); + lg::print("Building {} targets...\n", deps.size()); int i = 0; for (auto& to_make : deps) { Timer step_timer; @@ -360,10 +361,10 @@ bool MakeSystem::make(const std::string& target_in, bool force, bool verbose) { auto& tool = m_tools.at(rule->tool); int percent = (100.0 * (1 + (i++)) / (deps.size())) + 0.5; if (verbose) { - fmt::print("[{:3d}%] [{:8s}] {}{}\n", percent, tool->name(), rule->input.at(0), - rule->input.size() > 1 ? ", ..." : ""); + lg::print("[{:3d}%] [{:8s}] {}{}\n", percent, tool->name(), rule->input.at(0), + rule->input.size() > 1 ? ", ..." : ""); } else { - fmt::print("[{:3d}%] [{:8s}] ", percent, tool->name()); + lg::print("[{:3d}%] [{:8s}] ", percent, tool->name()); print_input(rule->input, '\r'); } @@ -371,35 +372,34 @@ bool MakeSystem::make(const std::string& target_in, bool force, bool verbose) { try { success = tool->run({rule->input, rule->deps, rule->outputs, rule->arg}, m_path_map); } catch (std::exception& e) { - fmt::print("\n"); - fmt::print("Error: {}\n", e.what()); + lg::print("\n"); + lg::print("Error: {}\n", e.what()); } if (!success) { - fmt::print("Build failed on {}{}.\n", rule->input.at(0), - rule->input.size() > 1 ? ", ..." : ""); + lg::print("Build failed on {}{}\n", rule->input.at(0), rule->input.size() > 1 ? ", ..." : ""); throw std::runtime_error("Build failed."); return false; } if (verbose) { if (step_timer.getSeconds() > 0.05) { - fmt::print(fg(fmt::color::yellow), " {:.3f}\n", step_timer.getSeconds()); + lg::print(fg(fmt::color::yellow), " {:.3f}\n", step_timer.getSeconds()); } else { - fmt::print(" {:.3f}\n", step_timer.getSeconds()); + lg::print(" {:.3f}\n", step_timer.getSeconds()); } } else { if (step_timer.getSeconds() > 0.05) { - fmt::print("[{:3d}%] [{:8s}] ", percent, tool->name()); - fmt::print(fg(fmt::color::yellow), "{:.3f} ", step_timer.getSeconds()); + lg::print("[{:3d}%] [{:8s}] ", percent, tool->name()); + lg::print(fg(fmt::color::yellow), "{:.3f} ", step_timer.getSeconds()); print_input(rule->input, '\n'); } else { - fmt::print("[{:3d}%] [{:8s}] {:.3f} ", percent, tool->name(), step_timer.getSeconds()); + lg::print("[{:3d}%] [{:8s}] {:.3f} ", percent, tool->name(), step_timer.getSeconds()); print_input(rule->input, '\n'); } } } - fmt::print("\nSuccessfully built all {} targets in {:.3f}s\n", deps.size(), - make_timer.getSeconds()); + lg::print("\nSuccessfully built all {} targets in {:.3f}s\n", deps.size(), + make_timer.getSeconds()); return true; } diff --git a/goalc/make/Tools.cpp b/goalc/make/Tools.cpp index 2b0657e339..036cba0b05 100644 --- a/goalc/make/Tools.cpp +++ b/goalc/make/Tools.cpp @@ -34,7 +34,7 @@ bool CompilerTool::run(const ToolInput& task, const PathMap& /*path_map*/) { options.write = true; m_compiler->asm_file(options); } catch (std::exception& e) { - fmt::print("Compilation failed: {}\n", e.what()); + lg::print("Compilation failed: {}\n", e.what()); return false; } return true; diff --git a/goalc/regalloc/Allocator.cpp b/goalc/regalloc/Allocator.cpp index fc3d1459c8..948ff7b070 100644 --- a/goalc/regalloc/Allocator.cpp +++ b/goalc/regalloc/Allocator.cpp @@ -7,6 +7,8 @@ #include +#include "common/log/log.h" + #include "goalc/regalloc/allocator_interface.h" #include "third-party/fmt/core.h" @@ -136,7 +138,7 @@ void do_constrained_alloc(RegAllocCache* cache, const AllocationInput& in, bool for (auto& constr : in.constraints) { auto var_id = constr.ireg.id; if (trace_debug) { - fmt::print("[RA] Apply constraint {}\n", constr.to_string()); + lg::print("[RA] Apply constraint {}\n", constr.to_string()); } if (constr.contrain_everywhere) { cache->live_ranges.at(var_id).constrain_everywhere(constr.desired_register); @@ -156,18 +158,18 @@ bool check_constrained_alloc(RegAllocCache* cache, const AllocationInput& in) { auto& lr = cache->live_ranges.at(constr.ireg.id); for (int i = lr.min; i <= lr.max; i++) { if (!lr.conflicts_at(i, constr.desired_register)) { - fmt::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", - constr.ireg.to_string(), constr.desired_register.print(), - cache->live_ranges.at(constr.ireg.id).get(i).to_string()); + lg::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", + constr.ireg.to_string(), constr.desired_register.print(), + cache->live_ranges.at(constr.ireg.id).get(i).to_string()); ok = false; } } } else { if (!cache->live_ranges.at(constr.ireg.id) .conflicts_at(constr.instr_idx, constr.desired_register)) { - fmt::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", - constr.ireg.to_string(), constr.desired_register.print(), - cache->live_ranges.at(constr.ireg.id).get(constr.instr_idx).to_string()); + lg::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", + constr.ireg.to_string(), constr.desired_register.print(), + cache->live_ranges.at(constr.ireg.id).get(constr.instr_idx).to_string()); ok = false; } } @@ -187,7 +189,7 @@ bool check_constrained_alloc(RegAllocCache* cache, const AllocationInput& in) { auto& ass2 = lr2.get(i); if (ass1.occupies_same_reg(ass2)) { // todo, this error won't be helpful - fmt::print( + lg::print( "[RegAlloc Error] Cannot satisfy constraints at instruction {} due to constraints " "on {} and {}\n", i, lr1.var, lr2.var); @@ -719,10 +721,10 @@ namespace { * Print out the state of the RegAllocCache after doing analysis. */ void print_analysis(const AllocationInput& in, RegAllocCache* cache) { - fmt::print("[RegAlloc] Basic Blocks\n"); - fmt::print("-----------------------------------------------------------------\n"); + lg::print("[RegAlloc] Basic Blocks\n"); + lg::print("-----------------------------------------------------------------\n"); for (auto& b : cache->control_flow.basic_blocks) { - fmt::print("{}\n", b.print(in.instructions)); + lg::print("{}\n", b.print(in.instructions)); } printf("[RegAlloc] Alive Info\n"); @@ -797,14 +799,14 @@ AllocationResult allocate_registers(const AllocationInput& input) { // constraint. if (!check_constrained_alloc(&cache, input)) { result.ok = false; - fmt::print("[RegAlloc Error] Register allocation has failed due to bad constraints.\n"); + lg::print("[RegAlloc Error] Register allocation has failed due to bad constraints.\n"); return result; } // do the allocations! if (!run_allocator(&cache, input, input.debug_settings.allocate_log_level)) { result.ok = false; - fmt::print("[RegAlloc Error] Register allocation has failed.\n"); + lg::print("[RegAlloc Error] Register allocation has failed.\n"); return result; } diff --git a/goalc/regalloc/Allocator_v2.cpp b/goalc/regalloc/Allocator_v2.cpp index 7865dd4188..1a6f3c62bc 100644 --- a/goalc/regalloc/Allocator_v2.cpp +++ b/goalc/regalloc/Allocator_v2.cpp @@ -4,6 +4,7 @@ #include #include +#include "common/log/log.h" #include "common/util/Range.h" #include "third-party/fmt/core.h" @@ -522,7 +523,7 @@ void do_constrained_alloc(RACache* cache, const AllocationInput& input, bool tra for (auto& constr : input.constraints) { auto var_id = constr.ireg.id; if (trace_debug) { - fmt::print("[RA] Apply constraint {}\n", constr.to_string()); + lg::print("[RA] Apply constraint {}\n", constr.to_string()); } cache->vars.at(var_id).constrain_to_register(constr.desired_register); } @@ -573,8 +574,8 @@ bool check_constrained_alloc(RACache* cache, const AllocationInput& in) { for (int i = lr.first_live(); i <= lr.last_live(); i++) { if (lr.assigned()) { if (!lr.assigned_to_reg(constr.desired_register)) { - fmt::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", - constr.ireg.to_string(), constr.desired_register.print(), "???"); + lg::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", + constr.ireg.to_string(), constr.desired_register.print(), "???"); ok = false; } } @@ -598,7 +599,7 @@ bool check_constrained_alloc(RACache* cache, const AllocationInput& in) { if (lr1.assigned_to_reg() && lr2.assigned_to_reg()) { if (lr1.reg() == lr2.reg() && !safe_overlap(in, *cache, lr1, lr2, i)) { // todo, this error won't be helpful - fmt::print( + lg::print( "[RegAlloc Error] {} Cannot satisfy constraints at instruction {} due to " "constraints " "on {} and {}, both are assigned to register {}\n", @@ -865,7 +866,7 @@ loop_top: auto& op = input.instructions.at(instr_idx); bool is_read = op.reads(var_idx); bool is_written = op.writes(var_idx); - // fmt::print("op {} {} {}\n", instr_idx, is_read, is_written); + // lg::print("op {} {} {}\n", instr_idx, is_read, is_written); if (!is_read && !is_written) { continue; } @@ -916,7 +917,7 @@ loop_top: } } - fmt::print( + lg::print( "In function {}, register allocator fell back to a highly inefficient strategy to create " "a spill temporary register.\n", input.function_name); @@ -1003,8 +1004,8 @@ bool run_assignment_on_var(const AllocationInput& input, if (vector_contains(allowable_local_var_move_elim, other_var.reg())) { bool worked = check_register_assign(input, *cache, var_idx, other_var.reg()); if (trace) { - fmt::print("m0 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), - other_var.reg().print(), worked); + lg::print("m0 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), + other_var.reg().print(), worked); } if (worked) { @@ -1020,10 +1021,10 @@ bool run_assignment_on_var(const AllocationInput& input, const auto& other_var = cache->vars.at(other_live_var_idx); if (trace && var_idx == 5) { - fmt::print(" consider {} {} {} {} [{} {}]\n", other_live_var_idx, - other_var.assigned_to_reg(), var.last_live() == other_var.first_live(), - safe_overlap(input, *cache, var, other_var, var.last_live()), var.last_live(), - other_var.first_live()); + lg::print(" consider {} {} {} {} [{} {}]\n", other_live_var_idx, + other_var.assigned_to_reg(), var.last_live() == other_var.first_live(), + safe_overlap(input, *cache, var, other_var, var.last_live()), var.last_live(), + other_var.first_live()); } if (other_var.assigned_to_reg() && @@ -1031,8 +1032,8 @@ bool run_assignment_on_var(const AllocationInput& input, if (vector_contains(allowable_local_var_move_elim, other_var.reg())) { bool worked = check_register_assign(input, *cache, var_idx, other_var.reg()); if (trace) { - fmt::print("m1 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), - other_var.reg().print(), worked); + lg::print("m1 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), + other_var.reg().print(), worked); } if (worked) { @@ -1048,8 +1049,8 @@ bool run_assignment_on_var(const AllocationInput& input, for (auto& reg : assign_order) { bool worked = check_register_assign(input, *cache, var_idx, reg); if (trace) { - fmt::print("m2 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), - reg.print(), worked); + lg::print("m2 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), + reg.print(), worked); } if (worked) { var.assign_to_register(reg); @@ -1120,7 +1121,7 @@ AllocationResult allocate_registers_v2(const AllocationInput& input) { check_constrained_alloc(&cache, input); if (!check_constrained_alloc(&cache, input)) { result.ok = false; - fmt::print("[RegAlloc Error] Register allocation has failed due to bad constraints.\n"); + lg::print("[RegAlloc Error] Register allocation has failed due to bad constraints.\n"); return result; } @@ -1157,7 +1158,7 @@ AllocationResult allocate_registers_v2(const AllocationInput& input) { for (int var_idx = 0; var_idx < input.max_vars; var_idx++) { auto& var = cache.vars.at(var_idx); if (var.seen() && !var.assigned()) { - // fmt::print("av2: {} failed\n", input.function_name); + // lg::print("av2: {} failed\n", input.function_name); result.ok = false; return result; } @@ -1212,4 +1213,4 @@ AllocationResult allocate_registers_v2(const AllocationInput& input) { result.num_spills = cache.stats.num_spill_ops; return result; -} \ No newline at end of file +} diff --git a/goalc/regalloc/allocator_interface.cpp b/goalc/regalloc/allocator_interface.cpp index 949b663e8d..f63a4b7699 100644 --- a/goalc/regalloc/allocator_interface.cpp +++ b/goalc/regalloc/allocator_interface.cpp @@ -7,31 +7,32 @@ #include -#include "third-party/fmt/core.h" +#include "common/log/log.h" +#include "third-party/fmt/core.h" /*! * Print out the input data for debugging. */ void print_allocate_input(const AllocationInput& in) { - fmt::print("[RegAlloc] Debug Input Program:\n"); + lg::print("[RegAlloc] Debug Input Program:\n"); if (in.instructions.size() == in.debug_instruction_names.size()) { for (size_t i = 0; i < in.instructions.size(); i++) { - // fmt::print(" [{}] {} -> {}\n", in.debug_instruction_names.at(i), + // lg::print(" [{}] {} -> {}\n", in.debug_instruction_names.at(i), // in.instructions.at(i).print()); - fmt::print(" [{:3d}] {:30} -> {:30}\n", i, in.debug_instruction_names.at(i), - in.instructions.at(i).print()); + lg::print(" [{:3d}] {:30} -> {:30}\n", i, in.debug_instruction_names.at(i), + in.instructions.at(i).print()); } } else { for (const auto& instruction : in.instructions) { - fmt::print(" [{:3d}] {}\n", instruction.print()); + lg::print(" [{:3d}] {}\n", instruction.print()); } } - fmt::print("[RegAlloc] Debug Input Constraints:\n"); + lg::print("[RegAlloc] Debug Input Constraints:\n"); for (const auto& c : in.constraints) { - fmt::print(" {}\n", c.to_string()); + lg::print(" {}\n", c.to_string()); } - fmt::print("\n"); + lg::print("\n"); } /*! diff --git a/scripts/decomp_progress.py b/scripts/decomp_progress.py index 755f2b9757..899ac87fb7 100644 --- a/scripts/decomp_progress.py +++ b/scripts/decomp_progress.py @@ -4,7 +4,7 @@ import argparse ### Script to track decompilation progress. -### Example usage: python3 scripts/decomp_progress.py ~/jak-project/goal_src +### Example usage: python3 scripts/decomp_progress.py ~/jak-project/goal_src/jak2 def get_goal_files(root_dir, ext = "*.gc"): """Get all GOAL source files under root_dir.""" @@ -29,7 +29,7 @@ def print_table(stats, total_gc_files): print("-------------------------------------") print("| {: <24} | {: >6} |".format("TOTAL", total_lines)) print("-------------------------------------") - estimated_lines = 500000 + estimated_lines = 1000000 print("Progress: {}/{} lines ({:.2f}%)".format(total_lines, estimated_lines, 100. * total_lines / estimated_lines)) print("{}/{} files modified from template ({:.2f}%)".format(len(stats), total_gc_files, 100. * len(stats) / total_gc_files)) @@ -41,8 +41,7 @@ def main(): args = parser.parse_args() all_files = get_goal_files(args.goal_src) - ref_files = get_goal_files(args.goal_src + "/../test/", "*_REF.gc") - + ref_files = get_goal_files(args.goal_src + "/../../test/decompiler/reference/jak2", "*_REF.gc") ref_files_no_ext = [os.path.basename(fn)[:-7] for fn in ref_files] diff --git a/scripts/gsrc/update-from-decomp.py b/scripts/gsrc/update-from-decomp.py index 71c9e77e09..1007fceedb 100644 --- a/scripts/gsrc/update-from-decomp.py +++ b/scripts/gsrc/update-from-decomp.py @@ -186,7 +186,6 @@ if args.preserve: lines_to_ignore = 0 i = len(final_lines) - 1 while i > 0 and (final_lines[i] == "\n" or final_lines[i] == "0\n"): - print(final_lines[i]) lines_to_ignore = lines_to_ignore + 1 i = i - 1 diff --git a/scripts/gsrc/update-gsrc-via-refs.py b/scripts/gsrc/update-gsrc-via-refs.py index f48cb80c46..701283c6b1 100644 --- a/scripts/gsrc/update-gsrc-via-refs.py +++ b/scripts/gsrc/update-gsrc-via-refs.py @@ -1,6 +1,5 @@ # Updates files in gsrc if they are modified in the reference test folder # Uses git -# TODO - get new untracked files as well import subprocess from git import Repo diff --git a/scripts/gsrc/utils.py b/scripts/gsrc/utils.py index 1361ef9252..b7f6c58644 100644 --- a/scripts/gsrc/utils.py +++ b/scripts/gsrc/utils.py @@ -48,5 +48,5 @@ def get_ref_path_from_filename(game_name, file_name, ref_folder): if src_path == "": print("couldn't determine ref path for {}:{}!".format(game_name, file_name)) exit(1) - path = "{}/{}/{}/{}_REF.gc".format(ref_folder, game_name, src_path, file_name) + path = os.path.join(ref_folder, game_name, src_path, "{}_REF.gc".format(file_name)) return path diff --git a/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc b/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc index 5decd98708..dfd9cc6fc3 100644 --- a/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc +++ b/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc @@ -231,7 +231,7 @@ ) (and *target* (!= (-> *target* next-state name) 'target-look-around) - (zero? (logand (-> *target* state-flags) (state-flags being-attacked dying))) + (not (logtest? (-> *target* state-flags) (state-flags being-attacked dying))) (= *master-mode* 'game) ) ) @@ -408,8 +408,8 @@ ;; failed to figure out what this is: (defstate level-hint-normal (level-hint) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'exit) (go level-hint-exit) @@ -468,8 +468,8 @@ ;; failed to figure out what this is: (defstate level-hint-sidekick (level-hint) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'exit) (when (nonzero? (-> self sound-id)) diff --git a/test/decompiler/reference/jak1/engine/anim/aligner_REF.gc b/test/decompiler/reference/jak1/engine/anim/aligner_REF.gc index 529c8b5465..6e776246d6 100644 --- a/test/decompiler/reference/jak1/engine/anim/aligner_REF.gc +++ b/test/decompiler/reference/jak1/engine/anim/aligner_REF.gc @@ -129,7 +129,7 @@ ;; definition for method 10 of type align-control (defmethod align! align-control ((obj align-control) (arg0 align-opts) (arg1 float) (arg2 float) (arg3 float)) - (when (zero? (logand (-> obj flags) (align-flags disabled))) + (when (not (logtest? (-> obj flags) (align-flags disabled))) (let* ((a0-1 (-> obj process)) (t9-0 (method-of-object a0-1 apply-alignment)) (v1-4 (-> obj delta)) @@ -161,7 +161,7 @@ ;; definition for method 11 of type align-control (defmethod align-vel-and-quat-only! align-control ((obj align-control) (arg0 align-opts) (arg1 vector) (arg2 int) (arg3 float) (arg4 float)) - (when (zero? (logand (-> obj flags) (align-flags disabled))) + (when (not (logtest? (-> obj flags) (align-flags disabled))) (let ((s5-0 (-> obj delta))) (let ((s3-0 (-> obj process root transv))) (if (logtest? arg0 (align-opts adjust-y-vel)) diff --git a/test/decompiler/reference/jak1/engine/anim/joint_REF.gc b/test/decompiler/reference/jak1/engine/anim/joint_REF.gc index 1999e4451b..814afae408 100644 --- a/test/decompiler/reference/jak1/engine/anim/joint_REF.gc +++ b/test/decompiler/reference/jak1/engine/anim/joint_REF.gc @@ -976,7 +976,7 @@ (v0-0 (the-as object (-> arg0 data arg2 data))) ) (cond - ((zero? (logand (-> arg0 fixed hdr matrix-bits) 1)) + ((not (logtest? (-> arg0 fixed hdr matrix-bits) 1)) (set! v1-1 (cond ((zero? arg1) (return (the-as matrix v1-1)) @@ -995,7 +995,7 @@ (set! v0-0 (-> (the-as (inline-array vector) v0-0) 4)) ) ) - (if (zero? (logand (-> arg0 fixed hdr matrix-bits) 2)) + (if (not (logtest? (-> arg0 fixed hdr matrix-bits) 2)) (return (the-as matrix v1-1)) ) (the-as matrix v0-0) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc index 4322eb95a6..498de6bb8e 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc @@ -3,16 +3,16 @@ ;; failed to figure out what this is: (defstate cam-combiner-active (camera-combiner) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'point-of-interest) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! (-> self tracking use-point-of-interest) #t) - (set! (-> self tracking point-of-interest quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self tracking point-of-interest quad) (-> (the-as vector (-> event param 0)) quad)) (set! (-> self tracking point-of-interest-blend target) 1.0) ) (else @@ -23,7 +23,7 @@ ) ((= v1-0 'set-interpolation) (set! (-> self interp-val) 0.0) - (set! (-> self interp-step) (/ 5.0 (the float (-> arg3 param 0)))) + (set! (-> self interp-step) (/ 5.0 (the float (-> event param 0)))) ) ((= v1-0 'teleport) (when (nonzero? (-> self tracking-status)) @@ -48,28 +48,28 @@ (a0-15 0) (a1-3 "ERROR : missing camera-slave parameter to *camera-combiner* start-tracking~%") ) - (let ((v1-7 (-> arg3 param 0))) + (let ((v1-7 (-> event param 0))) (rtype-of v1-7) ) (t9-2 a0-15 a1-3) ) ) ((let ((t9-3 type-type?) - (v1-8 (-> arg3 param 0)) + (v1-8 (-> event param 0)) ) (not (t9-3 (rtype-of v1-8) camera-slave)) ) (let ((t9-4 format) (a0-18 0) (a1-5 "ERROR : invalid type '~A' to *camera-combiner* start-tracking~%") - (v1-10 (-> arg3 param 0)) + (v1-10 (-> event param 0)) ) (t9-4 a0-18 a1-5 (rtype-of v1-10)) ) ) ((zero? (-> self tracking-status)) (set! (-> self tracking-status) (the-as uint 1)) - (let ((gp-1 (the-as object (-> arg3 param 0)))) + (let ((gp-1 (the-as object (-> event param 0)))) (set! (-> self tracking-options) (the-as int (-> (the-as camera-slave gp-1) options))) (set! (-> self tracking no-follow) (-> (the-as camera-slave gp-1) tracking no-follow)) (copy-cam-float-seeker (-> self tracking tilt-adjust) (-> (the-as camera-slave gp-1) tracking tilt-adjust)) @@ -106,21 +106,21 @@ (a0-27 0) (a1-11 "ERROR : missing camera-slave parameter to *camera-combiner* copy-tracking~%") ) - (let ((v1-23 (-> arg3 param 0))) + (let ((v1-23 (-> event param 0))) (rtype-of v1-23) ) (t9-10 a0-27 a1-11) ) ) ((let ((t9-11 type-type?) - (v1-24 (-> arg3 param 0)) + (v1-24 (-> event param 0)) ) (not (t9-11 (rtype-of v1-24) camera-slave)) ) (let ((t9-12 format) (a0-30 0) (a1-13 "ERROR : invalid type '~A' to *camera-combiner* copy-tracking~%") - (v1-25 (-> arg3 param 0)) + (v1-25 (-> event param 0)) ) (t9-12 a0-30 a1-13 (rtype-of v1-25)) ) @@ -130,7 +130,7 @@ ) (else (set! (-> self tracking-status) (the-as uint 1)) - (let ((gp-3 (the-as camera-slave (-> arg3 param 0)))) + (let ((gp-3 (the-as camera-slave (-> event param 0)))) (set! (-> self tracking-options) (the-as int (-> gp-3 options))) (set! (-> self tracking no-follow) (-> gp-3 tracking no-follow)) (copy-cam-float-seeker (-> self tracking tilt-adjust) (-> gp-3 tracking tilt-adjust)) @@ -163,7 +163,7 @@ :code (behavior () (local-vars (sv-160 cam-rotation-tracker)) (loop - (when (and (zero? (logand (-> *camera* master-options) 2)) (!= (-> self tracking-status) 0)) + (when (and (not (logtest? (-> *camera* master-options) 2)) (!= (-> self tracking-status) 0)) (set! (-> self tracking-status) (the-as uint 0)) 0 ) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-layout_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-layout_REF.gc index f29a75da33..08a6442c14 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-layout_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-layout_REF.gc @@ -2609,7 +2609,7 @@ ) (format arg0 ": on") ) - ((zero? (logand ((method-of-type res-lump get-property-value) + ((not (logtest? ((method-of-type res-lump get-property-value) (-> self cam-entity) (the-as symbol arg2) 'exact @@ -2620,7 +2620,7 @@ ) s5-0 ) - ) + ) (format arg0 ": off(maya)") ) (else @@ -3558,13 +3558,13 @@ ((and (logtest? (-> arg0 options) 8) (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (-> arg0 button))) #f ) - ((and (zero? (logand (-> arg0 options) 12)) + ((and (not (logtest? (-> arg0 options) 12)) (logtest? (-> arg0 options) 1) (zero? (logand (-> *cpad-list* cpads 0 button0-rel 0) (-> arg0 button))) ) #f ) - ((and (zero? (logand (-> arg0 options) 13)) + ((and (not (logtest? (-> arg0 options) 13)) (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (-> arg0 button))) ) #f diff --git a/test/decompiler/reference/jak1/engine/camera/cam-master_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-master_REF.gc index ef03a8c91d..837fdca534 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-master_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-master_REF.gc @@ -96,7 +96,7 @@ (else (set! (-> self attack-start) (-> *display* base-frame-counter)) (set! (-> self being-attacked) #t) - (when (and (zero? (logand (-> self master-options) 64)) + (when (and (not (logtest? (-> self master-options) 64)) (or (!= (-> last-try-to-look-at-data horz) 0.0) (!= (-> last-try-to-look-at-data vert) 0.0)) ) (set! (-> self string-max target y) (fmax (-> self string-max target y) (-> last-try-to-look-at-data vert))) @@ -326,7 +326,7 @@ (set! (-> self attack-start) (-> *display* base-frame-counter)) ) (set! (-> self being-attacked) #t) - (when (and (zero? (logand (-> self master-options) 64)) + (when (and (not (logtest? (-> self master-options) 64)) (or (!= (-> last-try-to-look-at-data horz) 0.0) (!= (-> last-try-to-look-at-data vert) 0.0)) ) (set! (-> self string-max target y) (fmax (-> self string-max target y) (-> last-try-to-look-at-data vert))) @@ -488,7 +488,7 @@ ) ) ) - (if (zero? (logand (-> self slave-options) 16)) + (if (not (logtest? (-> self slave-options) 16)) (reset-follow) ) (let ((v1-196 (-> *target* water flags))) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc index a90c4e5b41..4e3093732e 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc @@ -24,13 +24,13 @@ ;; failed to figure out what this is: (defstate cam-point-watch (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -311,8 +311,8 @@ ) (when *display-load-boundaries* (when (and (!= arg3 1) - (zero? (logand (-> *cpad-list* cpads 1 button0-abs 0) (pad-buttons x))) - (zero? (logand (-> *cpad-list* cpads 1 button0-abs 0) (pad-buttons r1))) + (not (cpad-hold? 1 x)) + (not (cpad-hold? 1 r1)) (zero? (logand (-> *cpad-list* cpads 1 button0-abs 0) (pad-buttons r2))) ) (+! f28-14 (analog-input (the-as int (-> *cpad-list* cpads 1 leftx)) 128.0 48.0 110.0 -1.0)) @@ -416,13 +416,13 @@ ;; failed to figure out what this is: (defstate cam-free-floating (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -522,13 +522,13 @@ ;; failed to figure out what this is: (defstate cam-orbit (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc index cd8aed9473..cea2b4852d 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc @@ -3,13 +3,13 @@ ;; failed to figure out what this is: (defstate cam-fixed (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -42,13 +42,13 @@ ;; failed to figure out what this is: (defstate cam-fixed-read-entity (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -86,13 +86,13 @@ ;; failed to figure out what this is: (defstate cam-pov (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -146,13 +146,13 @@ ;; failed to figure out what this is: (defstate cam-pov180 (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -289,10 +289,10 @@ ;; failed to figure out what this is: (defstate cam-standoff (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('set-standoff-dist) - (vector-normalize! (-> self pivot-pt) (the-as float (-> arg3 param 0))) + (vector-normalize! (-> self pivot-pt) (the-as float (-> event param 0))) (cam-standoff-calc-trans) ) (('set-standoff-height) @@ -301,12 +301,12 @@ (-> self pivot-pt) (-> self pivot-pt) (-> *camera* local-down) - (the-as float (-> arg3 param 0)) + (the-as float (-> event param 0)) ) (cam-standoff-calc-trans) ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -329,7 +329,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -422,13 +422,13 @@ ;; failed to figure out what this is: (defstate cam-eye (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -454,7 +454,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (go cam-free-floating) ) (none) @@ -516,7 +516,7 @@ ) (matrix-axis-angle! s5-0 (-> *camera* local-down) (-> s4-0 y)) (matrix*! (the-as matrix (-> self tracking)) (the-as matrix (-> self tracking)) s5-0) - (when (zero? (logand (-> self options) 8)) + (when (not (logtest? (-> self options) 8)) (if (< (vector-dot (-> self tracking inv-mat vector 1) (-> *camera* local-down)) 0.0) (forward-down->inv-matrix (the-as matrix (-> self tracking)) @@ -533,7 +533,7 @@ (matrix-axis-angle! s5-0 (the-as vector (-> self tracking)) (- (-> s4-0 x))) (matrix*! (the-as matrix (-> self tracking)) (the-as matrix (-> self tracking)) s5-0) ) - (when (zero? (logand (-> self options) 8)) + (when (not (logtest? (-> self options) 8)) (let ((f30-1 (vector-dot (-> *camera* local-down) (-> self tracking inv-mat vector 2)))) (set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0)) (when (< (sin (-> *CAM_EYE-bank* max-degrees)) (fabs f30-1)) @@ -601,13 +601,13 @@ ;; failed to figure out what this is: (defstate cam-billy (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -629,7 +629,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (go cam-free-floating) ) (none) @@ -799,7 +799,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -820,13 +820,13 @@ ;; failed to figure out what this is: (defstate cam-decel (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -873,13 +873,13 @@ ;; failed to figure out what this is: (defstate cam-endlessfall (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1043,7 +1043,7 @@ (vector-! gp-0 (-> self pivot-pt) (-> self circular-follow)) ) (vector-! s5-0 (-> self trans) (-> self pivot-pt)) - (when (zero? (logand (-> self options) 4)) + (when (not (logtest? (-> self options) 4)) (vector-flatten! gp-0 gp-0 (-> *camera* local-down)) (vector-flatten! s5-0 s5-0 (-> *camera* local-down)) ) @@ -1108,8 +1108,8 @@ ;; failed to figure out what this is: (defstate cam-circular (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) @@ -1118,7 +1118,7 @@ (cam-circular-position #f) ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1194,7 +1194,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -1221,7 +1221,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -2190,7 +2190,7 @@ (cam-los-setup-lateral arg2 s4-1 arg1) ) (cond - ((zero? (logand (-> self options) 1024)) + ((not (logtest? (-> self options) 1024)) ) ((= (-> self string-vel-dir) 5) ) @@ -2824,8 +2824,8 @@ ;; failed to figure out what this is: (defstate cam-string (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) (let ((gp-0 (new-stack-vector0))) (cam-string-find-position-rel! gp-0) @@ -2833,8 +2833,8 @@ ) ) (('joystick) - (set! (-> self phony-joystick-x) (the-as float (-> arg3 param 0))) - (set! (-> self phony-joystick-y) (the-as float (-> arg3 param 1))) + (set! (-> self phony-joystick-x) (the-as float (-> event param 0))) + (set! (-> self phony-joystick-y) (the-as float (-> event param 1))) (let ((v0-1 (the-as object #t))) (set! (-> self have-phony-joystick) (the-as symbol v0-1)) v0-1 @@ -2842,10 +2842,10 @@ ) (('set-dist) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! (-> self string-val-locked) #t) - (set! (-> self string-min-val quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (set! (-> self string-max-val quad) (-> (the-as vector (-> arg3 param 1)) quad)) + (set! (-> self string-min-val quad) (-> (the-as vector (-> event param 0)) quad)) + (set! (-> self string-max-val quad) (-> (the-as vector (-> event param 1)) quad)) (set! (-> self string-max-val x) (fmax (-> self string-max-val x) (-> self string-min-val x))) (set! (-> self string-max-val y) (fmax (-> self string-max-val y) (-> self string-min-val y))) (set! (-> self string-max-val z) (fmax (-> self string-max-val z) (-> self string-min-val z))) @@ -2860,7 +2860,7 @@ (-> self los-state) ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -3014,7 +3014,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -3188,7 +3188,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (when (not (paused?)) @@ -3437,7 +3437,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) diff --git a/test/decompiler/reference/jak1/engine/camera/camera_REF.gc b/test/decompiler/reference/jak1/engine/camera/camera_REF.gc index 203836803b..9065cc5b66 100644 --- a/test/decompiler/reference/jak1/engine/camera/camera_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/camera_REF.gc @@ -924,7 +924,7 @@ ) (set! (-> obj free-point) -134250495) (dotimes (v1-21 32) - (when (zero? (logand s5-0 1)) + (when (not (logtest? s5-0 1)) (set! (-> obj point v1-21 next) (-> obj free-point)) (set! (-> obj free-point) v1-21) ) diff --git a/test/decompiler/reference/jak1/engine/camera/pov-camera_REF.gc b/test/decompiler/reference/jak1/engine/camera/pov-camera_REF.gc index c389a109ed..bf5c3dc9d6 100644 --- a/test/decompiler/reference/jak1/engine/camera/pov-camera_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/pov-camera_REF.gc @@ -82,8 +82,8 @@ ;; failed to figure out what this is: (defstate pov-camera-playing (pov-camera) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('abort) (when (logtest? (-> self flags) (pov-camera-flag notify-of-abort)) (logior! (-> self flags) (pov-camera-flag allow-abort)) diff --git a/test/decompiler/reference/jak1/engine/collide/collide-reaction-target_REF.gc b/test/decompiler/reference/jak1/engine/collide/collide-reaction-target_REF.gc index e8f444e362..fe69ebec43 100644 --- a/test/decompiler/reference/jak1/engine/collide/collide-reaction-target_REF.gc +++ b/test/decompiler/reference/jak1/engine/collide/collide-reaction-target_REF.gc @@ -162,7 +162,7 @@ (set! (-> arg0 unknown-vector-coverage-1 quad) (-> sv-164 normal quad)) 0 ) - (when (and (zero? (logand sv-32 512)) + (when (and (not (logtest? sv-32 512)) (and (or (< (* 1.25 (-> arg1 best-from-prim local-sphere w)) (-> arg0 unknown-float-coverage-0)) (= (shr (shl (the-as int (-> arg0 unknown-float-coverage-1)) 58) 61) 1) ) @@ -187,7 +187,7 @@ ) ) ) - (if (or (zero? (logand sv-32 32)) (< 0.5 f0-21)) + (if (or (not (logtest? sv-32 32)) (< 0.5 f0-21)) (set! sv-48 (the-as symbol #f)) ) (when (and (or (and (< f0-21 0.95) (>= f30-0 0.0)) @@ -311,7 +311,7 @@ (& sv-160) ) ) - (when (zero? (logand (-> arg0 prev-status) (cshape-moving-flags onsurf))) + (when (not (logtest? (-> arg0 prev-status) (cshape-moving-flags onsurf))) (set! (-> arg0 ground-impact-vel) (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal)))) (set! sv-96 (logior sv-96 2048)) (when (not sv-160) diff --git a/test/decompiler/reference/jak1/engine/debug/anim-tester_REF.gc b/test/decompiler/reference/jak1/engine/debug/anim-tester_REF.gc index 0b6a24d1a0..b15c6da81e 100644 --- a/test/decompiler/reference/jak1/engine/debug/anim-tester_REF.gc +++ b/test/decompiler/reference/jak1/engine/debug/anim-tester_REF.gc @@ -867,7 +867,7 @@ (let ((v1-1 (the-as anim-test-sequence s5-0))) "return the next node in the list" (let ((s4-0 (-> v1-1 next))) - (when (zero? (logand (-> (the-as anim-test-sequence s5-0) flags) 2)) + (when (not (logtest? (-> (the-as anim-test-sequence s5-0) flags) 2)) (let ((v1-5 (-> (the-as anim-test-sequence s5-0) item-list))) "return the start of the list" (let ((s3-0 (the-as anim-test-seq-item (-> v1-5 head)))) @@ -878,7 +878,7 @@ (let ((v1-6 s3-0)) "return the next node in the list" (let ((s2-0 (the-as anim-test-seq-item (-> v1-6 next)))) - (if (and (zero? (logand (-> s3-0 flags) 1)) (not (anim-test-obj-item-valid? arg0 s3-0))) + (if (and (not (logtest? (-> s3-0 flags) 1)) (not (anim-test-obj-item-valid? arg0 s3-0))) (glst-remove (-> (the-as anim-test-sequence s5-0) item-list) s3-0) ) (set! s3-0 s2-0) @@ -1328,7 +1328,7 @@ (goto cfg-25) ) ) - (when (zero? (logand (-> (the-as anim-test-obj v1-17) flags) 1)) + (when (not (logtest? (-> (the-as anim-test-obj v1-17) flags) 1)) (set! (-> arg1 highlight-index) (glst-get-node-index (-> arg1 list) (the-as anim-test-obj v1-17))) (goto cfg-25) ) @@ -1352,7 +1352,7 @@ (goto cfg-39) ) ) - (when (zero? (logand (-> (the-as anim-test-obj v1-23) flags) 1)) + (when (not (logtest? (-> (the-as anim-test-obj v1-23) flags) 1)) (set! (-> arg1 highlight-index) (glst-get-node-index (-> arg1 list) (the-as anim-test-obj v1-23))) (goto cfg-39) ) @@ -1838,7 +1838,7 @@ (let* ((s2-2 (-> *display* frames (-> *display* on-screen) frame debug-buf)) (s4-1 (the-as anim-test-sequence (-> s2-2 base))) ) - (when (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 1)) + (when (not (logtest? (-> (the-as anim-test-seq-item gp-0) flags) 1)) (let ((v1-57 s3-0) (a1-13 (+ (-> arg1 xpos) (* (-> *ANIM_TESTER-bank* EDIT_STATS_X) (-> *DISP_LIST-bank* CHAR_WIDTH)))) (a0-29 (-> arg1 ypos)) @@ -1972,7 +1972,7 @@ ) ((= v1-88 9) (cond - ((zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) + ((not (cpad-hold? 0 x)) (logclear! (-> *anim-tester* 0 flags) (anim-tester-flags fanimt3)) ) ((cpad-pressed? 0 up) @@ -2015,7 +2015,7 @@ ) ((or (= v1-88 1) (= v1-88 2) (= v1-88 3) (= v1-88 4)) (cond - ((zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) + ((not (cpad-hold? 0 x)) (logclear! (-> *anim-tester* 0 flags) (anim-tester-flags fanimt3)) ) ((begin (set! (-> arg1 current-index) (-> arg1 the-index)) (<= (-> *anim-tester* 0 inc-timer) 0)) @@ -2156,14 +2156,14 @@ (anim-test-edit-seq-insert-item (the-as anim-test-seq-item gp-0) (the-as anim-test-sequence s4-0)) ) ((= v1-322 11) - (when (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 1)) + (when (not (logtest? (-> (the-as anim-test-seq-item gp-0) flags) 1)) (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) (glst-remove (-> (the-as anim-test-sequence s4-0) item-list) (the-as anim-test-seq-item gp-0)) ) (send-event (ppointer->process *anim-tester*) 'change-anim) ) (else - (when (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 4)) + (when (not (logtest? (-> (the-as anim-test-seq-item gp-0) flags) 4)) (case (-> *anim-tester* 0 item-field) ((5) (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) @@ -2481,7 +2481,7 @@ (none) ) :trans (behavior () - (if (and (zero? (logand (-> self flags) (anim-tester-flags fanimt1))) (= *master-mode* 'menu)) + (if (and (not (logtest? (-> self flags) (anim-tester-flags fanimt1))) (= *master-mode* 'menu)) (anim-tester-interface) ) (logclear! (-> self flags) (anim-tester-flags fanimt1)) @@ -2756,7 +2756,7 @@ "is this node the end of the list. #t = end" (not (not (-> v1-21 next))) ) - (when (zero? (logand (-> s4-2 flags) 5)) + (when (not (logtest? (-> s4-2 flags) 5)) (format gp-2 " Item \"~S\" ~d ~d " (-> s4-2 privname) (-> s4-2 speed) (-> s4-2 blend)) (anim-tester-num-print gp-2 (-> s4-2 first-frame)) (format gp-2 " ") diff --git a/test/decompiler/reference/jak1/engine/debug/menu_REF.gc b/test/decompiler/reference/jak1/engine/debug/menu_REF.gc index edc9ed4064..912e0346ed 100644 --- a/test/decompiler/reference/jak1/engine/debug/menu_REF.gc +++ b/test/decompiler/reference/jak1/engine/debug/menu_REF.gc @@ -1372,7 +1372,7 @@ ;; definition for function debug-menu-item-var-joypad-handler (defun debug-menu-item-var-joypad-handler ((arg0 debug-menu-item-var)) (cond - ((zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) + ((not (cpad-hold? 0 x)) (let ((a0-1 (-> arg0 parent context))) (debug-menu-context-release-joypad a0-1) ) diff --git a/test/decompiler/reference/jak1/engine/draw/drawable-tree_REF.gc b/test/decompiler/reference/jak1/engine/draw/drawable-tree_REF.gc index 048e742a11..e41efe0608 100644 --- a/test/decompiler/reference/jak1/engine/draw/drawable-tree_REF.gc +++ b/test/decompiler/reference/jak1/engine/draw/drawable-tree_REF.gc @@ -72,7 +72,7 @@ (set! t1-6 (&-> t1-6 1)) (let ((t4-0 128)) (label cfg-7) - (b! (zero? (logand t3-0 t4-0)) cfg-9 :delay (set! t5-1 (-> arg1 0))) + (b! (not (logtest? t3-0 t4-0)) cfg-9 :delay (set! t5-1 (-> arg1 0))) (set! arg1 (&-> arg1 1)) (set! (-> t2-3 0) t5-1) (label cfg-9) diff --git a/test/decompiler/reference/jak1/engine/draw/drawable_REF.gc b/test/decompiler/reference/jak1/engine/draw/drawable_REF.gc index 9997437733..f36c4f6cc1 100644 --- a/test/decompiler/reference/jak1/engine/draw/drawable_REF.gc +++ b/test/decompiler/reference/jak1/engine/draw/drawable_REF.gc @@ -128,7 +128,7 @@ (.mov a0-1 vf10) (.pcgtw a0-2 0 a0-1) (.ppach a0-3 (the-as uint128 0) a0-2) - (zero? (logand (the-as int v1-3) (the-as int a0-3))) + (not (logtest? (the-as int v1-3) (the-as int a0-3))) ) ) @@ -577,7 +577,7 @@ (init-vf0-vector) (set! sv-16 arg0) (logclear! (-> arg1 status) (draw-status was-drawn)) - (when (zero? (logand (-> arg1 status) (draw-status hidden no-anim no-skeleton-update))) + (when (not (logtest? (-> arg1 status) (draw-status hidden no-anim no-skeleton-update))) (let ((s4-0 (-> (the-as terrain-context #x70000000) work foreground joint-work temp-mtx vector 2)) (vu-lgt (the-as vu-lights (-> (the-as terrain-context #x70000000) work foreground joint-work temp-mtx vector 3)) @@ -772,7 +772,7 @@ (let ((v1-64 (-> arg1 sink-group level)) (a0-26 (+ (-> arg1 sink-group merc-sink foreground-texture-page) 6)) ) - (when (zero? (logand (-> arg1 status) (draw-status do-not-check-distance))) + (when (not (logtest? (-> arg1 status) (draw-status do-not-check-distance))) (if (< cam-dist (-> v1-64 closest-object a0-26)) (set! (-> v1-64 closest-object a0-26) cam-dist) ) @@ -852,7 +852,7 @@ ;; INFO: Return type mismatch int vs none. (defun dma-add-process-drawable-hud ((arg0 process-drawable) (arg1 draw-control) (arg2 symbol) (arg3 dma-buffer)) (logclear! (-> arg1 status) (draw-status was-drawn)) - (when (zero? (logand (-> arg1 status) (draw-status hidden no-anim no-skeleton-update))) + (when (not (logtest? (-> arg1 status) (draw-status hidden no-anim no-skeleton-update))) (let ((v1-6 (the-as vu-lights (+ 64 #x70000000))) (a0-3 *hud-lights*) ) @@ -1077,7 +1077,7 @@ ) ) ) - (when (zero? (logand *vu1-enable-user* (vu1-renderer-mask sky))) + (when (not (logtest? *vu1-enable-user* (vu1-renderer-mask sky))) (let* ((s5-2 (-> *display* frames (-> *display* on-screen) frame global-buf)) (gp-6 (-> s5-2 base)) ) diff --git a/test/decompiler/reference/jak1/engine/draw/process-drawable_REF.gc b/test/decompiler/reference/jak1/engine/draw/process-drawable_REF.gc index 31a3a275b3..82dcaa9d70 100644 --- a/test/decompiler/reference/jak1/engine/draw/process-drawable_REF.gc +++ b/test/decompiler/reference/jak1/engine/draw/process-drawable_REF.gc @@ -498,7 +498,7 @@ (let ((s0-0 (-> s4-0 data v1-28)) (v1-32 (res-lump-value (-> obj entity) 'options uint128)) ) - (if (and (zero? (logand #x20000 v1-32)) (= (-> s0-0 type) shadow-geo)) + (if (and (not (logtest? #x20000 v1-32)) (= (-> s0-0 type) shadow-geo)) (set! (-> s3-0 shadow) (the-as shadow-geo s0-0)) ) ) @@ -620,7 +620,7 @@ (* (-> grav-rt-body x) (-> *display* seconds-per-frame)) ) ) - (if (zero? (logand arg0 (align-opts adjust-xz-vel keep-other-velocities))) + (if (not (logtest? arg0 (align-opts adjust-xz-vel keep-other-velocities))) (set! (-> vel-rt-body z) 0.0) ) ) @@ -637,7 +637,7 @@ (* (-> grav-rt-body z) (-> *display* seconds-per-frame)) ) ) - (if (zero? (logand arg0 (align-opts adjust-x-vel keep-other-velocities))) + (if (not (logtest? arg0 (align-opts adjust-x-vel keep-other-velocities))) (set! (-> vel-rt-body x) 0.0) ) ) diff --git a/test/decompiler/reference/jak1/engine/entity/entity_REF.gc b/test/decompiler/reference/jak1/engine/entity/entity_REF.gc index 84101b40dc..efc56ee33d 100644 --- a/test/decompiler/reference/jak1/engine/entity/entity_REF.gc +++ b/test/decompiler/reference/jak1/engine/entity/entity_REF.gc @@ -327,7 +327,7 @@ ) (let ((s5-1 format) (s4-0 "~C~C~C") - (a2-0 (if (and arg0 (zero? (logand (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) + (a2-0 (if (and arg0 (not (logtest? (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) 114 32 ) @@ -1498,7 +1498,7 @@ ) ) ) - (when (zero? (logand (-> obj status) (entity-perm-status user-set-from-cstage))) + (when (not (logtest? (-> obj status) (entity-perm-status user-set-from-cstage))) (set! (-> obj user-uint64) (the-as uint 0)) 0 ) @@ -1589,7 +1589,7 @@ ;; definition for method 12 of type process-drawable (defmethod run-logic? process-drawable ((obj process-drawable)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root pause-adjust-distance)) (vector-vector-distance (-> obj root trans) (math-camera-pos)) ) @@ -1601,7 +1601,7 @@ ;; definition for method 9 of type entity-links (defmethod birth? entity-links ((obj entity-links) (arg0 vector)) - (and (zero? (logand (-> obj perm status) (entity-perm-status bit-0 dead))) + (and (not (logtest? (-> obj perm status) (entity-perm-status bit-0 dead))) (< (vector-vector-distance (-> obj trans) arg0) (-> *ACTOR-bank* birth-dist)) ) ) diff --git a/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc b/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc index c898fe25ad..ad86fdc381 100644 --- a/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc @@ -4,8 +4,8 @@ ;; definition for function eco-fadeout ;; INFO: Return type mismatch int vs none. (defun eco-fadeout ((arg0 sparticle-system) (arg1 sparticle-cpuinfo)) - (if (zero? (logand (-> (the-as process-drawable (-> arg1 key proc)) state-flags) (state-flags fade-out-particles)) - ) + (if (not (logtest? (-> (the-as process-drawable (-> arg1 key proc)) state-flags) (state-flags fade-out-particles)) + ) (set! (-> arg1 next-time) (the-as uint (* (-> *sp-frame-time* x) 2))) ) 0 @@ -21,7 +21,7 @@ (set! (-> arg2 y) (-> a0-3 world-sphere y)) (set! (-> arg2 z) (-> a0-3 world-sphere z)) ) - (if (zero? (logand (-> v1-1 state-flags) (state-flags fade-out-particles))) + (if (not (logtest? (-> v1-1 state-flags) (state-flags fade-out-particles))) (set! (-> arg1 next-time) (the-as uint (* (-> *sp-frame-time* x) 2))) ) ) diff --git a/test/decompiler/reference/jak1/engine/game/collectables_REF.gc b/test/decompiler/reference/jak1/engine/game/collectables_REF.gc index e9487c12cd..0d6888f9db 100644 --- a/test/decompiler/reference/jak1/engine/game/collectables_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/collectables_REF.gc @@ -487,63 +487,63 @@ ;; failed to figure out what this is: (defstate wait (eco-collectable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-3 none)) - (when (and (or (= arg2 'touch) (= arg2 'attack)) + (when (and (or (= event-type 'touch) (= event-type 'attack)) (and (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) (!= (-> self next-state name) 'pickup) - (send-event arg0 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) + (send-event proc 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) ) ) (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (process->handle arg0)) + (go-virtual pickup #f (process->handle proc)) ) (the-as object (cond - ((= arg2 'eco-blue) - (when (and (zero? (logand (-> self flags) (collectable-flags fading ignore-blue))) + ((= event-type 'eco-blue) + (when (and (not (logtest? (-> self flags) (collectable-flags fading ignore-blue))) (!= (-> self next-state name) 'pickup) - (begin (check-blue-suck (the-as process-drawable arg0)) #t) + (begin (check-blue-suck (the-as process-drawable proc)) #t) (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) ) (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual notice-blue (process->handle arg0)) + (go-virtual notice-blue (process->handle proc)) ) ) - ((= arg2 'trans) - (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + ((= event-type 'trans) + (set! (-> self root-override trans quad) (-> (the-as vector (-> event param 0)) quad)) (update-transforms! (-> self root-override)) (ja-post) ) - ((= arg2 'jump) + ((= event-type 'jump) (logclear! (-> self mask) (process-mask actor-pause)) - (set! (-> self jump-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self jump-pos quad) (-> (the-as vector (-> event param 0)) quad)) (go-virtual jump) ) - ((= arg2 'pickup) + ((= event-type 'pickup) (when (!= (-> self next-state name) 'pickup) - (if (and (> arg1 0) (-> arg3 param 0)) - (move-to-point! (-> self root-override) (the-as vector (-> arg3 param 0))) + (if (and (> arg1 0) (-> event param 0)) + (move-to-point! (-> self root-override) (the-as vector (-> event param 0))) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (the-as handle #f)) ) ) - ((= arg2 'die) + ((= event-type 'die) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual die) ) - ((= arg2 'movie-pos) - (set! v0-3 (the-as none (-> arg3 param 0))) + ((= event-type 'movie-pos) + (set! v0-3 (the-as none (-> event param 0))) (set! (-> self movie-pos-index) (the-as int v0-3)) v0-3 ) - ((= arg2 'actor-pause) + ((= event-type 'actor-pause) (cond - ((-> arg3 param 0) + ((-> event param 0) (logior! (-> self mask) (process-mask actor-pause)) (set! v0-3 (the-as none #t)) (set! (-> self actor-pause) (the-as symbol v0-3)) @@ -556,7 +556,7 @@ ) ) ) - ((= arg2 'fade) + ((= event-type 'fade) (logior! (-> self flags) (collectable-flags fade)) (set! (-> self fadeout-timeout) (seconds 0.1)) (set! v0-3 (the-as none (-> *display* base-frame-counter))) @@ -661,16 +661,16 @@ ;; failed to figure out what this is: (defstate notice-blue (eco-collectable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when (and (or (= arg2 'touch) (= arg2 'attack)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (when (and (or (= event-type 'touch) (= event-type 'attack)) (and (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) (!= (-> self next-state name) 'pickup) - (send-event arg0 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) + (send-event proc 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) ) ) (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (process->handle arg0)) + (go-virtual pickup #f (process->handle proc)) ) ) :enter (behavior ((arg0 handle)) @@ -732,15 +732,15 @@ ;; failed to figure out what this is: (defstate pickup (eco-collectable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'set-movie-pos) (let ((v1-3 (res-lump-struct (-> self entity) 'movie-pos vector :time (the-as float -1000000000.0)))) (the-as symbol (when v1-3 - (set! (-> v1-3 quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> v1-3 quad) (-> (the-as vector (-> event param 0)) quad)) (the-as symbol v1-3) ) ) @@ -748,7 +748,7 @@ ) ((= v1-0 'actor-pause) (the-as symbol (cond - ((-> arg3 param 0) + ((-> event param 0) (logior! (-> self mask) (process-mask actor-pause)) (let ((v0-1 #t)) (set! (-> self actor-pause) v0-1) @@ -944,8 +944,8 @@ ;; failed to figure out what this is: (defstate die (eco) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'fade) (process-entity-status! self (entity-perm-status dead) #t) @@ -1213,7 +1213,7 @@ ;; definition for method 12 of type money (defmethod run-logic? money ((obj money)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status was-drawn)) (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root-override pause-adjust-distance)) @@ -1572,9 +1572,9 @@ ;; failed to figure out what this is: (defstate wait (fuel-cell) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-3 none)) - (when (and (or (= arg2 'touch) (= arg2 'attack)) + (when (and (or (= event-type 'touch) (= event-type 'attack)) (and (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) (and (not (handle->process (-> *game-info* other-camera-handle))) @@ -1588,37 +1588,37 @@ (add-setting! 'allow-progress #f 0.0 0) (apply-settings *setting-control*) (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (process->handle arg0)) + (go-virtual pickup #f (process->handle proc)) ) (the-as object (cond - ((= arg2 'trans) - (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + ((= event-type 'trans) + (set! (-> self root-override trans quad) (-> (the-as vector (-> event param 0)) quad)) (set! (-> self base quad) (-> self root-override trans quad)) (update-transforms! (-> self root-override)) ) - ((= arg2 'pickup) + ((= event-type 'pickup) (when (!= (-> self next-state name) 'pickup) - (if (and (> arg1 0) (-> arg3 param 0)) - (move-to-point! (-> self root-override) (the-as vector (-> arg3 param 0))) + (if (and (> arg1 0) (-> event param 0)) + (move-to-point! (-> self root-override) (the-as vector (-> event param 0))) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (process->handle *target*)) ) ) - ((= arg2 'collide-shape) - (if (-> arg3 param 0) + ((= event-type 'collide-shape) + (if (-> event param 0) (restore-collide-with-as (-> self root-override)) (clear-collide-with-as (-> self root-override)) ) ) - ((= arg2 'movie-pos) - (set! v0-3 (the-as none (-> arg3 param 0))) + ((= event-type 'movie-pos) + (set! v0-3 (the-as none (-> event param 0))) (set! (-> self movie-pos-index) (the-as int v0-3)) v0-3 ) - ((= arg2 'anim) + ((= event-type 'anim) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-3 (the-as none (logclear (-> self flags) (collectable-flags anim)))) (set! (-> self flags) (the-as collectable-flags v0-3)) ) @@ -2183,10 +2183,10 @@ (go-virtual jump) ) ((and gp-1 - (zero? (logand (res-lump-value (-> self entity) 'options fact-options :time (the-as float -1000000000.0)) + (not (logtest? (res-lump-value (-> self entity) 'options fact-options :time (the-as float -1000000000.0)) (fact-options skip-jump-anim) ) - ) + ) (zero? (logand (-> self fact options) (fact-options skip-jump-anim))) ) (set! (-> self jump-pos quad) (-> (the-as vector gp-1) quad)) @@ -2202,19 +2202,19 @@ ;; failed to figure out what this is: (defstate fuel-cell-clone-anim (fuel-cell) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('pickup) (when (!= (-> self next-state name) 'pickup) - (if (and (> arg1 0) (-> arg3 param 0)) - (move-to-point! (-> self root-override) (the-as vector (-> arg3 param 0))) + (if (and (> arg1 0) (-> event param 0)) + (move-to-point! (-> self root-override) (the-as vector (-> event param 0))) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (the-as handle #f)) ) ) (('trans) - (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self root-override trans quad) (-> (the-as vector (-> event param 0)) quad)) (set! (-> self base quad) (-> self root-override trans quad)) (update-transforms! (-> self root-override)) ) @@ -2338,8 +2338,8 @@ ;; failed to figure out what this is: (defstate pickup (buzzer) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'notify) (process-entity-status! self (entity-perm-status dead) #t) ) @@ -3100,22 +3100,22 @@ ;; failed to figure out what this is: (defstate vent-wait-for-touch (vent) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (or (= arg2 'touch) (= arg2 'attack)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (or (= event-type 'touch) (= event-type 'attack)) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-1 from) self) (set! (-> a1-1 num-params) 2) (set! (-> a1-1 message) 'get-pickup) (set! (-> a1-1 param 0) (the-as uint (-> self fact pickup-type))) (set! (-> a1-1 param 1) (the-as uint (-> self fact pickup-amount))) - (and (= (send-event-function arg0 a1-1) #t) - (or (logtest? (-> self fact options) (fact-options powerup)) (send-event arg0 'powerup)) + (and (= (send-event-function proc a1-1) #t) + (or (logtest? (-> self fact options) (fact-options powerup)) (send-event proc 'powerup)) ) ) ) - (go vent-pickup (process->handle arg0)) + (go vent-pickup (process->handle proc)) ) - (vent-standard-event-handler arg0 arg1 arg2 arg3) + (vent-standard-event-handler proc arg1 event-type event) ) :code (behavior () (loop @@ -3138,8 +3138,8 @@ ;; failed to figure out what this is: (defstate vent-blocked (vent) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('show) (go vent-wait-for-touch) ) diff --git a/test/decompiler/reference/jak1/engine/game/crates_REF.gc b/test/decompiler/reference/jak1/engine/game/crates_REF.gc index 896556ff00..366eccce74 100644 --- a/test/decompiler/reference/jak1/engine/game/crates_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/crates_REF.gc @@ -825,28 +825,28 @@ ;; failed to figure out what this is: (defstate die (crate) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (case (-> self defense) (('darkeco) (cond - ((= (-> arg0 type) target) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'darkeco)))) + ((= (-> proc type) target) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'darkeco)))) ) (else (let ((a1-5 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-5 from) self) (set! (-> a1-5 num-params) 4) (set! (-> a1-5 message) 'attack) - (set! (-> a1-5 param 0) (-> arg3 param 0)) + (set! (-> a1-5 param 0) (-> event param 0)) (set! (-> a1-5 param 1) (the-as uint 'darkeco)) (let ((v1-12 (+ *global-attack-id* 1))) (set! *global-attack-id* v1-12) (set! (-> a1-5 param 2) (the-as uint v1-12)) ) (set! (-> a1-5 param 3) (the-as uint 0)) - (send-event-function arg0 a1-5) + (send-event-function proc a1-5) ) ) ) @@ -985,10 +985,10 @@ ;; failed to figure out what this is: (defstate special-contents-die (crate) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (case (-> arg3 param 0) + (case (-> event param 0) (('pickup) (let ((gp-0 (-> self entity extra perm))) (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) diff --git a/test/decompiler/reference/jak1/engine/game/game-info_REF.gc b/test/decompiler/reference/jak1/engine/game/game-info_REF.gc index d348793b99..b2dc7906a7 100644 --- a/test/decompiler/reference/jak1/engine/game/game-info_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/game-info_REF.gc @@ -350,7 +350,7 @@ (buzz-bits (get-reminder ctrl 0)) ) (when (and (>= buzz-index 0) (< buzz-index (the int (-> *FACT-bank* buzzer-max-default)))) - (if (zero? (logand buzz-bits (ash 1 buzz-index))) + (if (not (logtest? buzz-bits (ash 1 buzz-index))) (set! (-> obj buzzer-total) (+ 1.0 (-> obj buzzer-total))) ) (let ((t9-10 (method-of-object ctrl save-reminder))) diff --git a/test/decompiler/reference/jak1/engine/game/game-save_REF.gc b/test/decompiler/reference/jak1/engine/game/game-save_REF.gc index 824528d90f..5c14c479a3 100644 --- a/test/decompiler/reference/jak1/engine/game/game-save_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/game-save_REF.gc @@ -1728,8 +1728,8 @@ auto-save-post ;; failed to figure out what this is: (defstate error (auto-save) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'progress-allowed?) #t diff --git a/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc b/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc index 2100b0defb..a9967cc84f 100644 --- a/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc @@ -243,15 +243,15 @@ ;; failed to figure out what this is: (defstate manipy-idle (manipy) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'attackable) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-0 (the-as none (logior (process-mask attackable) (-> self mask)))) (set! (-> self mask) (the-as process-mask v0-0)) ) @@ -264,7 +264,7 @@ ) ((= v1-0 'blend-shape) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-0 (the-as none (logior (-> self skel status) (janim-status blerc eye)))) (set! (-> self skel status) (the-as janim-status v0-0)) ) @@ -277,7 +277,7 @@ ) ((= v1-0 'shadow) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-0 (the-as none (-> self shadow-backup))) (set! (-> self draw shadow) (the-as shadow-geo v0-0)) v0-0 @@ -289,37 +289,40 @@ ) ) ((= v1-0 'trans-hook) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self new-trans-hook) (the-as (function none) v0-0)) v0-0 ) ((= v1-0 'post-hook) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self new-post-hook) (the-as (function none) v0-0)) v0-0 ) ((= v1-0 'eval) - ((the-as (function manipy none) (-> arg3 param 0)) self) + ((the-as (function manipy none) (-> event param 0)) self) ) ((= v1-0 'become-hud-object) - (convert-to-hud-object self (the-as hud (-> arg3 param 0))) + (convert-to-hud-object self (the-as hud (-> event param 0))) ) ((= v1-0 'event-hook) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self cur-event-hook) (the-as (function none) v0-0)) v0-0 ) ((= v1-0 'art-joint-anim) (set! (-> self new-joint-anim) - (the-as art-joint-anim (lookup-art (-> self draw art-group) (the-as string (-> arg3 param 0)) art-joint-anim)) + (the-as + art-joint-anim + (lookup-art (-> self draw art-group) (the-as string (-> event param 0)) art-joint-anim) + ) ) - (set! v0-0 (the-as none (-> arg3 param 1))) + (set! v0-0 (the-as none (-> event param 1))) (set! (-> self new-joint-anim-blend) (the-as uint v0-0)) v0-0 ) ((= v1-0 'anim-mode) (when (nonzero? (-> self skel)) - (set! (-> self anim-mode) (the-as symbol (-> arg3 param 0))) + (set! (-> self anim-mode) (the-as symbol (-> event param 0))) (if (= (-> self anim-mode) 'clone-anim) (ja-post) ) @@ -327,16 +330,16 @@ ) ) ((or (= v1-0 'origin-joint-index) (= v1-0 'center-joint)) - (set! (-> self draw origin-joint-index) (-> arg3 param 0)) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! (-> self draw origin-joint-index) (-> event param 0)) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self draw shadow-joint-index) (the-as uint v0-0)) v0-0 ) ((= v1-0 'max-vis-dist) - (set! (-> self draw lod-set lod (-> self draw lod-set max-lod) dist) (the-as float (-> arg3 param 0))) + (set! (-> self draw lod-set lod (-> self draw lod-set max-lod) dist) (the-as float (-> event param 0))) ) ((= v1-0 'grab) - (set! (-> self cur-grab-handle) (process->handle (the-as process (-> arg3 param 0)))) + (set! (-> self cur-grab-handle) (process->handle (the-as process (-> event param 0)))) (let ((v1-30 (handle->process (-> self cur-grab-handle)))) (when v1-30 (set! v0-0 (the-as none (-> self old-grab-pos))) @@ -346,33 +349,33 @@ ) ) ((= v1-0 'target) - (set! v0-0 (the-as none (process->handle (the-as process (-> arg3 param 0))))) + (set! v0-0 (the-as none (process->handle (the-as process (-> event param 0))))) (set! (-> self cur-target-handle) (the-as handle v0-0)) v0-0 ) ((= v1-0 'trans) (cond ((type-type? (-> self root type) collide-shape) - (move-to-point! (the-as collide-shape (-> self root)) (the-as vector (-> arg3 param 0))) + (move-to-point! (the-as collide-shape (-> self root)) (the-as vector (-> event param 0))) ) (else (set! v0-0 (the-as none (-> self root trans))) - (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> event param 0)) quad)) v0-0 ) ) ) ((= v1-0 'rot) (let ((s5-0 (new 'stack-no-clear 'matrix))) - (matrix-rotate-y! s5-0 (the-as float (-> arg3 param 0))) + (matrix-rotate-y! s5-0 (the-as float (-> event param 0))) (matrix->quaternion (-> self root quat) s5-0) ) ) ((= v1-0 'rot-quat) - (quaternion-copy! (-> self root quat) (the-as quaternion (-> arg3 param 0))) + (quaternion-copy! (-> self root quat) (the-as quaternion (-> event param 0))) ) ((= v1-0 'clone-copy-trans) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self clone-copy-trans) (the-as symbol v0-0)) v0-0 ) @@ -381,9 +384,9 @@ #f ) ((= v1-0 'draw) - (set! (-> self draw?) (the-as symbol (-> arg3 param 0))) + (set! (-> self draw?) (the-as symbol (-> event param 0))) (cond - ((-> arg3 param 0) + ((-> event param 0) (let ((v1-47 (logtest? (-> self draw status) (draw-status hidden)))) (logclear! (-> self draw status) (draw-status hidden)) (when v1-47 @@ -411,7 +414,7 @@ ) ) ((= v1-0 'query) - (case (-> arg3 param 0) + (case (-> event param 0) (('grab) (handle->process (-> self cur-grab-handle)) ) @@ -427,7 +430,7 @@ ((= v1-0 'set-frame-num) (let ((v1-73 (-> self skel root-channel 0))) (set! (-> v1-73 num-func) num-func-identity) - (set! (-> v1-73 frame-num) (the-as float (-> arg3 param 0))) + (set! (-> v1-73 frame-num) (the-as float (-> event param 0))) ) ) (else @@ -903,7 +906,7 @@ (send-event gp-0 'query 'done) ) ((type-type? (-> gp-0 type) process-drawable) - (when (zero? (logand (-> (the-as process-drawable gp-0) skel status) (janim-status done))) + (when (not (logtest? (-> (the-as process-drawable gp-0) skel status) (janim-status done))) (let ((s5-0 pp)) (set! pp gp-0) (let ((v0-1 (the-as object (ja-done? 0)))) @@ -1152,22 +1155,22 @@ ;; failed to figure out what this is: (defstate camera-tracker-process (camera-tracker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 uint)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'message) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self message) (the-as basic v0-0)) v0-0 ) ((= v1-0 'mask) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self mask-to-clear) (the-as process-mask v0-0)) v0-0 ) ((= v1-0 'border) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self border-value) (the-as basic v0-0)) v0-0 ) @@ -1323,7 +1326,7 @@ ) ) ) - (when (zero? (logand (-> self draw status) (draw-status hidden))) + (when (not (logtest? (-> self draw status) (draw-status hidden))) (let ((v1-36 (-> self draw)) (a0-18 (new 'stack-no-clear 'vector)) ) @@ -1421,8 +1424,8 @@ ;; failed to figure out what this is: (defstate part-spawner-active (part-spawner) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('stop) (process-entity-status! self (entity-perm-status complete) #t) (set! (-> self enable) #f) @@ -1434,7 +1437,7 @@ #t ) (('trans) - (let ((v0-1 (the-as object (-> (the-as vector (-> arg3 param 0)) quad)))) + (let ((v0-1 (the-as object (-> (the-as vector (-> event param 0)) quad)))) (set! (-> self root trans quad) (the-as uint128 v0-1)) v0-1 ) @@ -1827,13 +1830,13 @@ ;; failed to figure out what this is: (defstate cam-launcher-shortfall (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1859,7 +1862,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -1900,13 +1903,13 @@ ;; failed to figure out what this is: (defstate cam-launcher-longfall (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1925,7 +1928,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (cam-launcher-long-joystick) @@ -1996,13 +1999,13 @@ ;; failed to figure out what this is: (defstate launcher-idle (launcher) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('instant-death) (go launcher-deactivated) ) (('trans) - (move-to-point! (-> self root-override) (the-as vector (-> arg3 param 0))) + (move-to-point! (-> self root-override) (the-as vector (-> event param 0))) (update-transforms! (-> self root-override)) ) ) @@ -2043,17 +2046,17 @@ ;; failed to figure out what this is: (defstate launcher-active (launcher) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when (or (= arg2 'touch) (= arg2 'attack)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (when (or (= event-type 'touch) (= event-type 'attack)) (set! (-> self state-time) (-> *display* base-frame-counter)) - (send-event arg0 'launch (-> self spring-height) (-> self camera) (-> self dest) (-> self seek-time)) + (send-event proc 'launch (-> self spring-height) (-> self camera) (-> self dest) (-> self seek-time)) ) (cond - ((= arg2 'instant-death) + ((= event-type 'instant-death) (go launcher-deactivated) ) - ((= arg2 'trans) - (move-to-point! (-> self root-override) (the-as vector (-> arg3 param 0))) + ((= event-type 'trans) + (move-to-point! (-> self root-override) (the-as vector (-> event param 0))) (update-transforms! (-> self root-override)) ) ) @@ -2229,19 +2232,19 @@ ;; failed to figure out what this is: (defstate touch-tracker-idle (touch-tracker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'touched) (let ((v1-1 (ppointer->process (-> self parent)))) - (when (!= v1-1 arg0) + (when (!= v1-1 proc) (cond ((= (-> self event) 'attack) (cond - ((= (-> arg0 type) target) + ((= (-> proc type) target) (send-event - arg0 + proc (-> self event) :from (the-as process v1-1) #f @@ -2250,7 +2253,7 @@ ) ((= (-> v1-1 type) target) (send-event - arg0 + proc (-> self event) :from (the-as process v1-1) #f @@ -2271,26 +2274,26 @@ (set! (-> a1-5 param 2) (the-as uint v1-19)) ) (set! (-> a1-5 param 3) (the-as uint 0)) - (send-event-function arg0 a1-5) + (send-event-function proc a1-5) ) ) ) ) ((-> self event) - (send-event arg0 (-> self event) :from (the-as process v1-1)) + (send-event proc (-> self event) :from (the-as process v1-1)) ) (else (let ((t0-5 (new 'stack-no-clear 'event-message-block))) - (set! (-> t0-5 from) arg0) + (set! (-> t0-5 from) proc) (set! (-> t0-5 num-params) arg1) - (set! (-> t0-5 message) arg2) - (set! (-> t0-5 param 0) (-> arg3 param 0)) - (set! (-> t0-5 param 1) (-> arg3 param 1)) - (set! (-> t0-5 param 2) (-> arg3 param 2)) - (set! (-> t0-5 param 3) (-> arg3 param 3)) - (set! (-> t0-5 param 4) (-> arg3 param 4)) - (set! (-> t0-5 param 5) (-> arg3 param 5)) - (set! (-> t0-5 param 6) (-> arg3 param 6)) + (set! (-> t0-5 message) event-type) + (set! (-> t0-5 param 0) (-> event param 0)) + (set! (-> t0-5 param 1) (-> event param 1)) + (set! (-> t0-5 param 2) (-> event param 2)) + (set! (-> t0-5 param 3) (-> event param 3)) + (set! (-> t0-5 param 4) (-> event param 4)) + (set! (-> t0-5 param 5) (-> event param 5)) + (set! (-> t0-5 param 6) (-> event param 6)) (send-event-function v1-1 t0-5) ) ) @@ -2299,26 +2302,26 @@ ) ) ((= v1-0 'target) - (set! v0-0 (the-as none (process->handle (the-as process (-> arg3 param 0))))) + (set! v0-0 (the-as none (process->handle (the-as process (-> event param 0))))) (set! (-> self target) (the-as handle v0-0)) v0-0 ) ((= v1-0 'event) - (set! (-> self event) (the-as symbol (-> arg3 param 0))) - (set! v0-0 (the-as none (-> arg3 param 1))) + (set! (-> self event) (the-as symbol (-> event param 0))) + (set! v0-0 (the-as none (-> event param 1))) (set! (-> self event-mode) (the-as basic v0-0)) v0-0 ) ((= v1-0 'exit) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self run-function) (the-as (function object) v0-0)) v0-0 ) ((= v1-0 'eval) - ((the-as (function touch-tracker none) (-> arg3 param 0)) self) + ((the-as (function touch-tracker none) (-> event param 0)) self) ) ((= v1-0 'function) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self callback) (the-as (function touch-tracker none) v0-0)) v0-0 ) diff --git a/test/decompiler/reference/jak1/engine/game/powerups_REF.gc b/test/decompiler/reference/jak1/engine/game/powerups_REF.gc index 1ac340569c..3c2a0fb7a3 100644 --- a/test/decompiler/reference/jak1/engine/game/powerups_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/powerups_REF.gc @@ -664,8 +664,8 @@ (stop! (-> self sound)) ) (when (and (< 0.0 (-> self fact-info-target eco-level)) - (zero? (logand (-> self state-flags) (state-flags first-person-mode))) - (zero? (logand (-> self draw status) (draw-status hidden no-anim))) + (not (logtest? (-> self state-flags) (state-flags first-person-mode))) + (not (logtest? (-> self draw status) (draw-status hidden no-anim))) (not (movie?)) (rand-vu-percent? (lerp-scale diff --git a/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc b/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc index 4d8b355b79..9c555c4bb5 100644 --- a/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc @@ -159,7 +159,7 @@ (set! sv-80 (logior sv-80 16)) ) (set! sv-224 (< (fabs (-> arg0 surface-angle)) (-> *pat-mode-info* (-> arg0 cur-pat mode) wall-angle))) - (if (zero? (logand (-> arg0 prev-status) (cshape-moving-flags onsurf))) + (if (not (logtest? (-> arg0 prev-status) (cshape-moving-flags onsurf))) (set! (-> arg0 ground-impact-vel) (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal)))) ) (set! sv-80 (logior sv-80 4)) @@ -647,33 +647,33 @@ ;; failed to figure out what this is: (defstate projectile-moving (projectile) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (when (-> self attack-mode) (when (cond - ((= (-> arg0 type) target) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode (-> self attack-mode))))) + ((= (-> proc type) target) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode (-> self attack-mode))))) ) (else (let ((a1-2 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-2 from) self) (set! (-> a1-2 num-params) 4) (set! (-> a1-2 message) 'attack) - (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 0) (-> event param 0)) (set! (-> a1-2 param 1) (the-as uint (-> self attack-mode))) (let ((v1-13 (+ *global-attack-id* 1))) (set! *global-attack-id* v1-13) (set! (-> a1-2 param 2) (the-as uint v1-13)) ) (set! (-> a1-2 param 3) (the-as uint 0)) - (send-event-function arg0 a1-2) + (send-event-function proc a1-2) ) ) ) (let ((v1-14 (-> self notify-handle))) (if (handle->process v1-14) - (send-event (-> v1-14 process 0) 'notify 'attack arg0) + (send-event (-> v1-14 process 0) 'notify 'attack proc) ) ) (+! (-> self hits) 1) @@ -982,7 +982,7 @@ ) (sound-play "yellow-fire") (set! (-> obj sound-id) (sound-play "yellow-buzz")) - (if (zero? (logand (-> obj options) 416)) + (if (not (logtest? (-> obj options) 416)) (process-spawn part-tracker :init part-tracker-init (-> *part-group-id-table* 103) -1 #f #f #f s5-0 :to obj) ) (set! (-> *part-id-table* 350 init-specs 2 initial-valuef) f30-0) @@ -1002,7 +1002,7 @@ (logior! (-> obj root-override root-prim collide-with) (collide-kind water)) ) (('ogre) - (when (zero? (logand (-> obj options) 128)) + (when (not (logtest? (-> obj options) 128)) (set! (-> obj water) (new 'process 'water-control obj 0 0.0 8192.0 2048.0)) (set! (-> obj water flags) (water-flags wt01 wt04 wt07)) (set! (-> obj water height) 129024.0) diff --git a/test/decompiler/reference/jak1/engine/game/settings_REF.gc b/test/decompiler/reference/jak1/engine/game/settings_REF.gc index ef48fb637a..e38d57ddd3 100644 --- a/test/decompiler/reference/jak1/engine/game/settings_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/settings_REF.gc @@ -34,7 +34,7 @@ ) ) (('sfx-volume) - (when (or (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask progress))) + (when (or (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask progress))) (= (get-process conn) (ppointer->process *progress-process*)) ) (case (the-as symbol (-> conn param1)) diff --git a/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc b/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc index d21a0dff12..4bbe06c477 100644 --- a/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc @@ -605,11 +605,11 @@ ;; failed to figure out what this is: (defstate play-anim (process-taskable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('shadow) (cond - ((-> arg3 param 0) + ((-> event param 0) (let ((v0-0 (the-as object (-> self shadow-backup)))) (set! (-> self draw shadow) (the-as shadow-geo v0-0)) v0-0 @@ -624,10 +624,10 @@ (('shadow-min-max) (let ((v1-5 (-> self draw shadow-ctrl))) (let ((a0-4 v1-5)) - (set! (-> a0-4 settings bot-plane w) (- (the-as float (-> arg3 param 0)))) + (set! (-> a0-4 settings bot-plane w) (- (the-as float (-> event param 0)))) ) 0 - (set! (-> v1-5 settings top-plane w) (- (the-as float (-> arg3 param 1)))) + (set! (-> v1-5 settings top-plane w) (- (the-as float (-> event param 1)))) ) 0 ) @@ -793,12 +793,12 @@ ;; failed to figure out what this is: (defstate be-clone (process-taskable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as shadow-geo (cond ((= v1-0 'shadow) (the-as shadow-geo (cond - ((-> arg3 param 0) + ((-> event param 0) (let ((v0-0 (-> self shadow-backup))) (set! (-> self draw shadow) v0-0) v0-0 @@ -814,10 +814,10 @@ ((= v1-0 'shadow-min-max) (let ((v1-5 (-> self draw shadow-ctrl))) (let ((a0-5 v1-5)) - (set! (-> a0-5 settings bot-plane w) (- (the-as float (-> arg3 param 0)))) + (set! (-> a0-5 settings bot-plane w) (- (the-as float (-> event param 0)))) ) 0 - (set! (-> v1-5 settings top-plane w) (- (the-as float (-> arg3 param 1)))) + (set! (-> v1-5 settings top-plane w) (- (the-as float (-> event param 1)))) ) (the-as shadow-geo 0) ) @@ -870,8 +870,8 @@ ;; failed to figure out what this is: (defstate idle (process-taskable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond @@ -881,7 +881,7 @@ (if (-> self bounce-away) (the-as symbol - (send-event arg0 'shove #f (static-attack-info ((shove-back (meters 3)) (shove-up (meters 1))))) + (send-event proc 'shove #f (static-attack-info ((shove-back (meters 3)) (shove-up (meters 1))))) ) ) ) @@ -889,8 +889,8 @@ ((= v1-0 'touch) (the-as symbol (send-shove-back (-> self root-override) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + proc + (the-as touching-shapes-entry (-> event param 0)) 0.7 6144.0 16384.0 @@ -898,7 +898,7 @@ ) ) ((= v1-0 'clone) - (the-as symbol (go-virtual be-clone (the-as handle (-> arg3 param 0)))) + (the-as symbol (go-virtual be-clone (the-as handle (-> event param 0)))) ) ((= v1-0 'play-anim) (logclear! (-> self mask) (process-mask actor-pause)) @@ -1177,9 +1177,9 @@ ;; failed to figure out what this is: (defstate othercam-running (othercam) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('die) (set! v0-0 #t) (set! (-> self die?) (the-as symbol v0-0)) @@ -1187,13 +1187,13 @@ ) (('joint) (let ((t9-0 type-type?) - (v1-1 (-> arg3 param 0)) + (v1-1 (-> event param 0)) ) (cond ((t9-0 (rtype-of v1-1) string) (let ((v1-8 (lookup-art (-> (the-as process-taskable (-> self hand process 0)) draw jgeo) - (the-as string (-> arg3 param 0)) + (the-as string (-> event param 0)) (the-as type #f) ) ) @@ -1205,8 +1205,8 @@ ) ) ) - ((zero? (logand (-> arg3 param 0) 7)) - (set! v0-0 (-> arg3 param 0)) + ((not (logtest? (-> event param 0) 7)) + (set! v0-0 (-> event param 0)) (set! (-> self cam-joint-index) (the-as int v0-0)) v0-0 ) @@ -1214,7 +1214,7 @@ ) ) (('mask) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self mask-to-clear) (the-as process-mask v0-0)) v0-0 ) diff --git a/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc b/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc index 16c0298056..ffd5b4fa03 100644 --- a/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc @@ -134,8 +134,8 @@ ;; failed to figure out what this is: (defstate enter (voicebox) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('die) (go-virtual exit) ) @@ -240,7 +240,7 @@ :event (-> cam-string event) :enter (-> cam-string enter) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (deactivate self) ) (none) diff --git a/test/decompiler/reference/jak1/engine/gfx/generic/generic-merc_REF.gc b/test/decompiler/reference/jak1/engine/gfx/generic/generic-merc_REF.gc index 04ded3ef5b..8da1aefdff 100644 --- a/test/decompiler/reference/jak1/engine/gfx/generic/generic-merc_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/generic/generic-merc_REF.gc @@ -152,7 +152,7 @@ (let ((v1-36 (the-as object #x1000d000)) (a0-19 (the-as object #x7000006c)) ) - (b! (zero? (logand (-> (the-as terrain-context v1-36) bsp lev-index) 256)) cfg-9 :delay (nop!)) + (b! (not (logtest? (-> (the-as terrain-context v1-36) bsp lev-index) 256)) cfg-9 :delay (nop!)) (let ((a1-6 (-> (the-as generic-envmap-saves a0-19) index-mask x))) (nop!) (let ((a2-1 (-> (the-as (pointer int32) v1-36) 0))) diff --git a/test/decompiler/reference/jak1/engine/gfx/hw/display_REF.gc b/test/decompiler/reference/jak1/engine/gfx/hw/display_REF.gc index 443f503617..59f337a9c3 100644 --- a/test/decompiler/reference/jak1/engine/gfx/hw/display_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/hw/display_REF.gc @@ -56,7 +56,7 @@ (set! (-> env frame1) (new 'static 'gs-frame :fbw (/ width 64) :psm (logand psm 15) :fbp fbp)) (set! (-> env dtheaddr) (gs-reg64 dthe)) (cond - ((zero? (logand psm 2)) + ((not (logtest? psm 2)) (set! (-> env dthe) (new 'static 'gs-dthe)) 0 ) diff --git a/test/decompiler/reference/jak1/engine/gfx/merc/merc_REF.gc b/test/decompiler/reference/jak1/engine/gfx/merc/merc_REF.gc index 131634956e..b5bf86bfbb 100644 --- a/test/decompiler/reference/jak1/engine/gfx/merc/merc_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/merc/merc_REF.gc @@ -236,7 +236,7 @@ ) ) (cond - ((zero? (logand -65536 (the-as int (-> obj header eye-ctrl)))) + ((not (logtest? -65536 (the-as int (-> obj header eye-ctrl)))) (set! (-> obj header eye-ctrl) (the-as merc-eye-ctrl 0)) 0 ) diff --git a/test/decompiler/reference/jak1/engine/gfx/ripple_REF.gc b/test/decompiler/reference/jak1/engine/gfx/ripple_REF.gc index 6a6d50fa22..cc1bfa4575 100644 --- a/test/decompiler/reference/jak1/engine/gfx/ripple_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/ripple_REF.gc @@ -170,7 +170,7 @@ (v1-1 (-> arg0 draw)) (a1-5 (-> v1-1 lod-set lod (-> v1-1 cur-lod) geo effect)) ) - (if (or (zero? (logand (-> a1-5 0 effect-bits) 4)) (not (-> v1-1 ripple))) + (if (or (not (logtest? (-> a1-5 0 effect-bits) 4)) (not (-> v1-1 ripple))) (return f30-0) ) (let* ((a1-6 (-> a1-5 0 extra-info)) diff --git a/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc b/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc index 82997dadaa..5a8da87f97 100644 --- a/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc @@ -686,7 +686,7 @@ (with-pp (let ((s5-0 (-> obj flags))) (cond - ((zero? (logand (-> obj flags) (water-flags wt01))) + ((not (logtest? (-> obj flags) (water-flags wt01))) (logclear! (-> obj flags) (water-flags wt09 wt10 wt11 wt12 wt13 wt14 wt16)) ) ((and (logtest? (water-flags wt21) (-> obj flags)) @@ -710,7 +710,7 @@ ) ) (set! (-> obj real-ocean-offset) (- (ocean-get-height (the-as vector (-> obj bottom))) (-> obj base-height))) - (if (zero? (logand (-> obj flags) (water-flags wt09))) + (if (not (logtest? (-> obj flags) (water-flags wt09))) (set! (-> obj ocean-offset) (-> obj real-ocean-offset)) (set! (-> obj ocean-offset) (lerp (-> obj ocean-offset) (-> obj real-ocean-offset) 0.2)) ) @@ -720,7 +720,7 @@ (f30-0 (ripple-find-height (the-as process-drawable a0-26) 0 (the-as vector (-> obj bottom)))) ) (set! (-> obj real-ocean-offset) (- f30-0 (-> obj base-height))) - (if (zero? (logand (-> obj flags) (water-flags wt09))) + (if (not (logtest? (-> obj flags) (water-flags wt09))) (set! (-> obj ocean-offset) (-> obj real-ocean-offset)) (set! (-> obj ocean-offset) (lerp (-> obj ocean-offset) (-> obj real-ocean-offset) 0.2)) ) @@ -753,7 +753,7 @@ (set! (-> obj drip-wetness) 1.0) (set! (-> obj drip-height) (fmax (- (-> obj surface-height) (-> obj bottom 0 y)) (-> obj drip-height))) (set! (-> obj drip-speed) 15.0) - (if (zero? (logand (-> obj flags) (water-flags wt09))) + (if (not (logtest? (-> obj flags) (water-flags wt09))) (TODO-RENAME-15 obj) ) (cond @@ -882,7 +882,7 @@ (>= f30-3 (-> obj bottom 0 y)) (and (logtest? s5-0 (water-flags wt11)) (logtest? (-> (the-as collide-shape-moving (-> obj process root)) status) (cshape-moving-flags tsurf)) - (zero? (logand (-> (the-as collide-shape-moving (-> obj process root)) status) (cshape-moving-flags onsurf))) + (not (logtest? (-> (the-as collide-shape-moving (-> obj process root)) status) (cshape-moving-flags onsurf))) (>= (+ 204.8 f30-3) (-> obj bottom 0 y)) ) ) @@ -897,7 +897,7 @@ (set! (-> obj swim-time) (-> *display* base-frame-counter)) (send-event (-> obj process) 'swim) (logior! (-> obj flags) (water-flags wt11)) - (if (zero? (logand s5-0 (water-flags wt11))) + (if (not (logtest? s5-0 (water-flags wt11))) (set! (-> obj enter-swim-time) (-> *display* base-frame-counter)) ) (cond @@ -909,7 +909,7 @@ (set! (-> v1-200 quad) (-> obj bottom 0 quad)) (set! (-> v1-200 y) (- (-> obj height) (-> obj swim-height))) (let ((s4-4 (-> obj process root))) - (when (and (zero? (logand (-> (the-as collide-shape-moving s4-4) status) (cshape-moving-flags csmf12))) + (when (and (not (logtest? (-> (the-as collide-shape-moving s4-4) status) (cshape-moving-flags csmf12))) (logtest? (-> obj flags) (water-flags wt11)) (zero? (logand (-> (the-as collide-shape-moving s4-4) root-prim prim-core action) (collide-action ca-9))) ) @@ -952,7 +952,7 @@ (set! (-> a1-30 quad) (-> obj bottom 0 quad)) (let ((s5-1 (-> obj process root))) (set! (-> a1-30 y) f30-3) - (when (zero? (logand (-> (the-as collide-shape-moving s5-1) root-prim prim-core action) (collide-action ca-9))) + (when (not (logtest? (-> (the-as collide-shape-moving s5-1) root-prim prim-core action) (collide-action ca-9))) (let ((f30-4 (-> (the-as collide-shape-moving s5-1) ground-impact-vel))) (move-to-ground-point! (the-as collide-shape-moving s5-1) a1-30 (-> s5-1 transv) *up-vector*) (logior! (-> (the-as collide-shape-moving s5-1) status) (cshape-moving-flags on-water)) @@ -974,10 +974,10 @@ ) (when (< (-> obj process root trans y) -409.6) (send-event (-> obj process) 'no-look-around (seconds 1.5)) - (when (zero? (logand (-> (the-as collide-shape-moving (-> obj process root)) root-prim prim-core action) + (when (not (logtest? (-> (the-as collide-shape-moving (-> obj process root)) root-prim prim-core action) (collide-action ca-14) ) - ) + ) (cond ((= (-> obj process type) target) (send-event @@ -1020,8 +1020,8 @@ ) ) ) - (when (not (or (zero? (logand (-> obj flags) (water-flags wt06))) - (zero? (logand (water-flags wt23) (-> obj flags))) + (when (not (or (not (logtest? (-> obj flags) (water-flags wt06))) + (not (logtest? (water-flags wt23) (-> obj flags))) (= (-> obj drip-wetness) 0.0) ) ) @@ -1361,8 +1361,8 @@ ;; failed to figure out what this is: (defstate water-vol-idle (water-vol) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'update) (TODO-RENAME-26 self) ) diff --git a/test/decompiler/reference/jak1/engine/level/load-boundary_REF.gc b/test/decompiler/reference/jak1/engine/level/load-boundary_REF.gc index f04cff9fbf..1986f5f6bb 100644 --- a/test/decompiler/reference/jak1/engine/level/load-boundary_REF.gc +++ b/test/decompiler/reference/jak1/engine/level/load-boundary_REF.gc @@ -477,7 +477,7 @@ (set! (-> s2-0 quad) (-> s5-0 data (-> gp-0 vertex) quad)) (set! (-> s2-0 y) (-> s5-0 top-plane)) (add-debug-sphere #t (bucket-id debug-no-zbuf) s2-0 8192.0 (new 'static 'rgba :a #x80)) - (when (zero? (logand (-> s5-0 flags) (load-boundary-flags closed))) + (when (not (logtest? (-> s5-0 flags) (load-boundary-flags closed))) (set! (-> s2-0 y) (-> s5-0 bot-plane)) (add-debug-sphere #t (bucket-id debug-no-zbuf) s2-0 8192.0 (new 'static 'rgba :a #x80)) ) @@ -1099,7 +1099,7 @@ ;; INFO: Used lq/sq ;; INFO: Return type mismatch int vs object. (defun triangulate-boundary ((arg0 load-boundary)) - (when (zero? (logand (-> arg0 flags) (load-boundary-flags closed))) + (when (not (logtest? (-> arg0 flags) (load-boundary-flags closed))) (set! (-> arg0 tri-cnt) 1) (return (the-as object 0)) ) diff --git a/test/decompiler/reference/jak1/engine/load/decomp_REF.gc b/test/decompiler/reference/jak1/engine/load/decomp_REF.gc index 6bb668109f..5ad632b717 100644 --- a/test/decompiler/reference/jak1/engine/load/decomp_REF.gc +++ b/test/decompiler/reference/jak1/engine/load/decomp_REF.gc @@ -118,7 +118,7 @@ (+ 16 #x70000000) (+ 2064 #x70000000) (when (= curr-vis-str desired-vis-str) - (b! (zero? (logand #x40000000 (-> vis-info flags))) cfg-6 :delay (empty-form)) + (b! (not (logtest? #x40000000 (-> vis-info flags))) cfg-6 :delay (empty-form)) (if (check-busy *ramdisk-rpc*) (return #f) ) diff --git a/test/decompiler/reference/jak1/engine/load/loader_REF.gc b/test/decompiler/reference/jak1/engine/load/loader_REF.gc index bf7af0250b..1b4d76a0a8 100644 --- a/test/decompiler/reference/jak1/engine/load/loader_REF.gc +++ b/test/decompiler/reference/jak1/engine/load/loader_REF.gc @@ -960,7 +960,7 @@ (str-play-stop (-> arg0 name)) (set! (-> *art-control* active-stream) #f) (logclear! (-> self skel status) (janim-status drawn done)) - (if (zero? (logand (-> self skel status) (janim-status inited))) + (if (not (logtest? (-> self skel status) (janim-status inited))) (logclear! (-> self skel status) (janim-status inited)) ) (remove-setting! 'spooling) diff --git a/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc b/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc index db0e487e75..939f604749 100644 --- a/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc +++ b/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc @@ -438,7 +438,7 @@ (vf9 :class vf) ) (let ((t0-0 (-> arg0 poly arg1))) - (when (zero? (logand (-> t0-0 pat) 1)) + (when (not (logtest? (-> t0-0 pat) 1)) (let ((v1-5 (-> arg0 vertex (-> t0-0 vertex 0))) (a1-5 (-> arg0 vertex (-> t0-0 vertex 1))) (a0-2 (-> arg0 vertex (-> t0-0 vertex 2))) @@ -821,7 +821,7 @@ (countdown (s1-0 (-> obj poly-count)) (set! *debug-traverse* (+ *debug-traverse* 1)) (let ((a0-3 (-> obj poly s1-0))) - (when (zero? (logand (-> a0-3 pat) 1)) + (when (not (logtest? (-> a0-3 pat) 1)) (nop!) (let ((v1-8 (the-as object (-> obj vertex)))) (nop!) @@ -1080,7 +1080,7 @@ (set! sv-48 (-> (the-as nav-poly (+ sv-32 (the-as int s1-1))) adj-poly 0)) (when (and (!= sv-48 255) (!= 1 (-> (the-as (pointer uint8) (&+ arg3 sv-48))))) (set! (-> arg3 sv-48) 1) - (when (zero? (logand (-> obj poly sv-48 pat) 1)) + (when (not (logtest? (-> obj poly sv-48 pat) 1)) (let ((v0-3 (= (nav-mesh-lookup-route obj arg0 (the-as int sv-48)) 3))) (when (not v0-3) (tri-centroid-local obj s1-1 s0-0) @@ -1122,14 +1122,14 @@ (set! *nav-update-route-table-route-count* 0) (countdown (s3-0 (-> obj poly-count)) (let ((s2-0 (-> obj poly s3-0))) - (when (zero? (logand (-> s2-0 pat) 1)) + (when (not (logtest? (-> s2-0 pat) 1)) (tri-centroid-local obj s2-0 s5-0) (mem-set32! s4-0 64 0) (set! (-> s4-0 s3-0) 1) (dotimes (s1-0 3) (let ((a3-0 (-> s2-0 adj-poly s1-0))) (when (!= a3-0 255) - (if (zero? (logand (-> obj poly a3-0 pat) 1)) + (if (not (logtest? (-> obj poly a3-0 pat) 1)) (dummy-18 obj s3-0 s5-0 (the-as int a3-0) s4-0 0) ) ) @@ -1267,7 +1267,7 @@ (let ((f30-0 10000000000000000000000000000000000000.0)) (countdown (s1-0 (-> obj poly-count)) (let ((s0-0 (-> obj poly s1-0))) - (when (zero? (logand (-> s0-0 pat) 1)) + (when (not (logtest? (-> s0-0 pat) 1)) (set! (-> s2-0 0 quad) (-> obj vertex (-> s0-0 vertex 0) quad)) (set! (-> s2-0 1 quad) (-> obj vertex (-> s0-0 vertex 1) quad)) (set! (-> s2-0 2 quad) (-> obj vertex (-> s0-0 vertex 2) quad)) @@ -2402,7 +2402,7 @@ (let ((s1-0 (new 'stack-no-clear 'vector))) (vector-float*! s1-0 arg1 arg2) (dotimes (s0-0 arg3) - (when (zero? (logand arg5 (ash 1 s0-0))) + (when (not (logtest? arg5 (ash 1 s0-0))) (let* ((v1-7 (-> arg4 s0-0)) (f0-2 (ray-circle-intersect arg0 s1-0 v1-7 (-> v1-7 w))) ) diff --git a/test/decompiler/reference/jak1/engine/nav/path_REF.gc b/test/decompiler/reference/jak1/engine/nav/path_REF.gc index 8a144995ec..7403c97ffe 100644 --- a/test/decompiler/reference/jak1/engine/nav/path_REF.gc +++ b/test/decompiler/reference/jak1/engine/nav/path_REF.gc @@ -171,7 +171,7 @@ ;; definition for method 12 of type path-control (defmethod TODO-RENAME-12 path-control ((obj path-control) (arg0 vector) (arg1 float)) - (when (zero? (logand (-> obj flags) (path-control-flag not-found))) + (when (not (logtest? (-> obj flags) (path-control-flag not-found))) (let ((v1-3 (-> obj curve num-cverts)) (f0-3 (the float (the int arg1))) ) @@ -199,7 +199,7 @@ ;; definition for method 14 of type curve-control (defmethod TODO-RENAME-14 curve-control ((obj curve-control) (arg0 vector) (arg1 float)) - (when (zero? (logand (-> obj flags) (path-control-flag not-found))) + (when (not (logtest? (-> obj flags) (path-control-flag not-found))) (let ((s4-0 (new 'stack-no-clear 'vector))) (curve-evaluate! arg0 diff --git a/test/decompiler/reference/jak1/engine/ps2/pad_REF.gc b/test/decompiler/reference/jak1/engine/ps2/pad_REF.gc index cd1638ab7f..e03f6c970d 100644 --- a/test/decompiler/reference/jak1/engine/ps2/pad_REF.gc +++ b/test/decompiler/reference/jak1/engine/ps2/pad_REF.gc @@ -224,7 +224,7 @@ (let ((pad (-> *cpad-list* cpads pad-idx))) (cpad-get-data pad) (cond - ((zero? (logand (-> pad valid) 128)) + ((not (logtest? (-> pad valid) 128)) (dotimes (buzz-idx 2) (cond ((and (-> pad buzz) (< (get-current-time) (-> pad buzz-time buzz-idx)) (= *master-mode* 'game)) diff --git a/test/decompiler/reference/jak1/engine/sparticle/sparticle-launcher_REF.gc b/test/decompiler/reference/jak1/engine/sparticle/sparticle-launcher_REF.gc index db88499a28..79532bc3b3 100644 --- a/test/decompiler/reference/jak1/engine/sparticle/sparticle-launcher_REF.gc +++ b/test/decompiler/reference/jak1/engine/sparticle/sparticle-launcher_REF.gc @@ -494,7 +494,7 @@ (matrix-rotate-y! s3-1 (-> s5-0 rotate-y)) (vector3s-rotate*! (the-as vector3s (-> arg0 launchrot)) (the-as vector3s (-> arg0 launchrot)) s3-1) (vector3s-rotate*! (the-as vector3s (-> arg1 vel-sxvel)) (the-as vector3s (-> arg1 vel-sxvel)) s3-1) - (if (zero? (logand (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) + (if (not (logtest? (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) (vector3s-rotate*! (the-as vector3s (-> arg1 acc)) (the-as vector3s (-> arg1 acc)) s3-1) ) ) @@ -576,7 +576,7 @@ ) (vector3s-rotate*! (the-as vector3s (-> arg0 launchrot)) (the-as vector3s (-> arg0 launchrot)) s5-0) (vector3s-rotate*! (the-as vector3s (-> arg1 vel-sxvel)) (the-as vector3s (-> arg1 vel-sxvel)) s5-0) - (if (zero? (logand (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) + (if (not (logtest? (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) (vector3s-rotate*! (the-as vector3s (-> arg1 acc)) (the-as vector3s (-> arg1 acc)) s5-0) ) ) @@ -1077,8 +1077,8 @@ (let ((a0-26 sparticle-launcher)) (b! (!= (-> a1-4 type) a0-26) cfg-78 :delay (nop!)) ) - (b! (zero? (logand (-> v1-29 flags) (sp-group-item-flag launch-asap))) cfg-36 :delay (nop!)) - (when (zero? (logand (-> a3-0 flags) (sp-launch-state-flags particles-active))) + (b! (not (logtest? (-> v1-29 flags) (sp-group-item-flag launch-asap))) cfg-36 :delay (nop!)) + (when (not (logtest? (-> a3-0 flags) (sp-launch-state-flags particles-active))) (set! (-> a3-0 spawn-time) (the-as uint s4-0)) (logior! (-> a3-0 flags) (sp-launch-state-flags particles-active)) (if (< 0.0 f0-2) @@ -1125,7 +1125,7 @@ (* 0.2 (the float a0-56) f0-2) ) (else - (when (zero? (logand (-> v1-29 flags) (sp-group-item-flag bit1))) + (when (not (logtest? (-> v1-29 flags) (sp-group-item-flag bit1))) 0 (goto cfg-77) ) diff --git a/test/decompiler/reference/jak1/engine/target/logic-target_REF.gc b/test/decompiler/reference/jak1/engine/target/logic-target_REF.gc index a704bf25c8..5108e2d203 100644 --- a/test/decompiler/reference/jak1/engine/target/logic-target_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/logic-target_REF.gc @@ -107,7 +107,7 @@ (meters 0.000024414063) (the-as rgba (+ #x408040 (shl s4-0 24))) ) - (when (zero? (logand (-> s2-0 status) (cshape-moving-flags csmf08))) + (when (not (logtest? (-> s2-0 status) (cshape-moving-flags csmf08))) (add-debug-line (logtest? s5-0 1) (bucket-id debug-no-zbuf) @@ -176,11 +176,11 @@ (format #t "~C~C~C~C~C~C" - (if (zero? (logand s3-0 (cshape-reaction-flags csrf00))) + (if (not (logtest? s3-0 (cshape-reaction-flags csrf00))) 103 87 ) - (if (zero? (logand s3-0 (cshape-reaction-flags csrf01))) + (if (not (logtest? s3-0 (cshape-reaction-flags csrf01))) 103 87 ) @@ -188,7 +188,7 @@ ((logtest? s3-0 (cshape-reaction-flags csrf11)) 71 ) - ((zero? (logand s3-0 (cshape-reaction-flags csrf02))) + ((not (logtest? s3-0 (cshape-reaction-flags csrf02))) 103 ) (else @@ -206,11 +206,11 @@ 99 ) ) - (if (zero? (logand s3-0 (cshape-reaction-flags csrf04))) + (if (not (logtest? s3-0 (cshape-reaction-flags csrf04))) 110 66 ) - (if (zero? (logand s3-0 (cshape-reaction-flags csrf05))) + (if (not (logtest? s3-0 (cshape-reaction-flags csrf05))) 103 65 ) @@ -769,7 +769,7 @@ ) (vector-matrix*! s2-3 s3-3 (-> self control unknown-matrix01)) (let ((f28-2 (vector-vector-xz-distance s3-3 s4-0))) - (when (and (zero? (logand (-> self control status) (cshape-moving-flags tsurf))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags tsurf))) (< (vector-xz-length gp-0) (vector-xz-length s3-3)) ) (let ((f0-50 (lerp-scale 163840.0 0.0 f28-2 0.0 20480.0))) @@ -781,7 +781,7 @@ ) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags twall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags twall))) (logtest? (-> self control old-status) (cshape-moving-flags twall)) (logtest? (-> self control unknown-surface00 flags) (surface-flags jump)) (< 0.0 (-> gp-0 y)) @@ -800,7 +800,7 @@ (if (< (- (-> *display* base-frame-counter) (-> self control unknown-dword70)) (seconds 0.2)) (set! f30-4 (+ 204800.0 f30-4)) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags twall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags twall))) (and (logtest? (-> self control old-status) (cshape-moving-flags twall)) (logtest? (-> self control unknown-surface00 flags) (surface-flags jump)) (< 0.0 (-> gp-0 y)) @@ -926,8 +926,8 @@ (defbehavior do-rotations2 target () (let ((gp-0 (vector-z-quaternion! (new-stack-vector0) (-> self control dir-targ))) (s5-0 - (if (and (or (zero? (logand (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags onsurf tsurf)) - ) + (if (and (or (not (logtest? (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags onsurf tsurf)) + ) (< (- (-> *display* base-frame-counter) (-> self control unknown-dword20)) (seconds 0.5)) (!= (-> self next-state name) 'target-walk) (< (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.5)) @@ -1031,7 +1031,7 @@ (set! (-> self control unknown-dword11) (-> *display* base-frame-counter)) (set! (-> self control unknown-vector52 quad) (-> self control trans quad)) (if (and (>= (-> self control coverage) 1.0) - (zero? (logand (-> self control status) (cshape-moving-flags t-act on-water))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act on-water))) (logtest? (-> self control status) (cshape-moving-flags onground)) ) (set! (-> self control last-known-safe-ground quad) (-> self control trans quad)) @@ -1063,8 +1063,8 @@ ) (if (and (= (-> self cam-user-mode) 'normal) (logtest? (-> self control unknown-surface00 flags) (surface-flags allow-look-around)) - (zero? (logand (-> self control root-prim prim-core action) (collide-action ca-7 ca-8 ca-9 ca-12 ca-13 ca-14)) - ) + (not (logtest? (-> self control root-prim prim-core action) (collide-action ca-7 ca-8 ca-9 ca-12 ca-13 ca-14)) + ) (-> *setting-control* current allow-look-around) (>= (- (-> *display* base-frame-counter) (-> self no-look-around-wait)) (seconds 0.05)) (not (and (= (-> self control ground-pat material) (pat-material ice)) @@ -1138,7 +1138,7 @@ ) 9420.8 ) - (zero? (logand (-> self control root-prim prim-core action) (collide-action ca-9 ca-14))) + (not (logtest? (-> self control root-prim prim-core action) (collide-action ca-9 ca-14))) #t ) ) @@ -1446,7 +1446,7 @@ (let ((gp-0 (new 'stack-no-clear 'vector))) (cond ((and (= (-> self next-state name) 'target-clone-anim) - (zero? (logand (-> self draw status) (draw-status hidden))) + (not (logtest? (-> self draw status) (draw-status hidden))) (begin (vector<-cspace! gp-0 (-> self node-list data 3)) (set! (-> gp-0 y) (+ -5896.192 (-> gp-0 y))) diff --git a/test/decompiler/reference/jak1/engine/target/sidekick_REF.gc b/test/decompiler/reference/jak1/engine/target/sidekick_REF.gc index 2c44bbfd1b..82405e2ffa 100644 --- a/test/decompiler/reference/jak1/engine/target/sidekick_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/sidekick_REF.gc @@ -61,11 +61,11 @@ ;; failed to figure out what this is: (defstate sidekick-clone (sidekick) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('matrix) - (case (-> arg3 param 0) + (case (-> event param 0) (('play-anim) (set! v0-0 (-> self node-list data)) (set! (-> (the-as (inline-array cspace) v0-0) 0 param0) cspace<-cspace+quaternion!) @@ -98,13 +98,13 @@ v0-0 ) (('shadow) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self shadow-in-movie?) (the-as symbol v0-0)) v0-0 ) (('blend-shape) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-0 (logior (-> self skel status) (janim-status blerc))) (set! (-> self skel status) (the-as janim-status v0-0)) ) diff --git a/test/decompiler/reference/jak1/engine/target/target-death_REF.gc b/test/decompiler/reference/jak1/engine/target/target-death_REF.gc index 38f4281de2..909b01d0c5 100644 --- a/test/decompiler/reference/jak1/engine/target/target-death_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target-death_REF.gc @@ -45,7 +45,7 @@ (set! (-> *load-boundary-target* 1 quad) (-> (target-pos 0) quad)) (set! (-> *load-boundary-target* 2 quad) (-> *load-boundary-target* 0 quad)) (set! (-> *load-boundary-target* 3 quad) (-> *load-boundary-target* 1 quad)) - (when (zero? (logand (-> *game-info* current-continue flags) (continue-flags intro sage-intro title))) + (when (not (logtest? (-> *game-info* current-continue flags) (continue-flags intro sage-intro title))) (set! (-> *level* border?) (-> *level* play?)) (set! (-> *setting-control* default border-mode) (-> *level* play?)) ) @@ -615,7 +615,7 @@ (defbehavior target-hit-push target ((arg0 vector) (arg1 matrix) (arg2 float) (arg3 float) (arg4 attack-info)) (case (-> arg4 angle) (('jump 'up 'up-forward) - (when (and (zero? (logand (-> self control root-prim prim-core action) (collide-action ca-9 ca-14))) + (when (and (not (logtest? (-> self control root-prim prim-core action) (collide-action ca-9 ca-14))) (not (and (= (-> self game mode) 'play) (>= 0.0 (-> self fact-info-target health)))) ) (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle) (can-feet?)) @@ -627,7 +627,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -789,7 +789,7 @@ (ja :num! (seek!)) (set! v1-40 (or (ja-done? 0) (and arg1 (logtest? (-> self control status) (cshape-moving-flags onsurf))))) ) - (while (and (or (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) s2-1) (!= s2-1 'stuck)) + (while (and (or (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) s2-1) (!= s2-1 'stuck)) (arg2) (+! f30-1 (* (-> arg0 shove-back) f28-1 (-> *display* seconds-per-frame))) (set! s2-1 (target-hit-push s3-1 s1-1 f30-1 (* (-> arg0 shove-back) f28-1) arg0)) @@ -867,7 +867,7 @@ ) ) (combine! gp-0 arg1) - (when (zero? (logand (-> gp-0 mask) (attack-mask vector))) + (when (not (logtest? (-> gp-0 mask) (attack-mask vector))) (vector-z-quaternion! (-> gp-0 vector) (-> self control unknown-quaternion00)) (vector-xz-normalize! (-> gp-0 vector) (- (fabs (-> gp-0 shove-back)))) (set! (-> gp-0 vector y) (-> gp-0 shove-up)) @@ -1000,7 +1000,7 @@ (defun death-movie-remap ((arg0 int) (arg1 int)) (let ((v1-0 (/ arg0 arg1))) (mod - (if (zero? (logand v1-0 1)) + (if (not (logtest? v1-0 1)) (logxor v1-0 arg0) (logand #xfffffff (- (logxor v1-0 arg0))) ) @@ -1022,7 +1022,7 @@ (send-event *camera* 'joystick 0.0 -1.0) (compute-alignment! (-> self align)) (let ((s5-0 (new 'stack-no-clear 'vector))) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (vector-matrix*! s5-0 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) (vector-float*! (-> self control transv) s5-0 (-> *display* frames-per-second)) ) @@ -1305,7 +1305,7 @@ (set-setting! 'allow-progress #f 0.0 0) (target-death-anim gp-18) (when (and (< (rand-vu-int-count (-> *game-info* death-movie-tick)) (* (-> *death-spool-array* length) 2)) - (zero? (logand (-> self water flags) (water-flags wt09))) + (not (logtest? (-> self water flags) (water-flags wt09))) (!= (-> self control ground-pat material) 9) (!= (-> self control ground-pat material) 10) ) diff --git a/test/decompiler/reference/jak1/engine/target/target-handler_REF.gc b/test/decompiler/reference/jak1/engine/target/target-handler_REF.gc index 5c4725727a..e72e387462 100644 --- a/test/decompiler/reference/jak1/engine/target/target-handler_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target-handler_REF.gc @@ -35,7 +35,7 @@ object (cond ((= v1-0 'get-pickup) - (when (zero? (logand (-> self state-flags) (state-flags dying))) + (when (not (logtest? (-> self state-flags) (state-flags dying))) (let ((s4-0 (-> arg3 param 0)) (f28-0 (the-as float (-> arg3 param 1))) ) @@ -310,7 +310,7 @@ (set! (-> s5-0 shove-back) arg0) (set! (-> s5-0 shove-up) arg1) (set! (-> s5-0 angle) - (if (zero? (logand (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags onsurf))) + (if (not (logtest? (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags onsurf))) 'air 'shove ) @@ -340,7 +340,7 @@ (arg3 touching-shapes-entry) (arg4 (state symbol attack-info target)) ) - (when (zero? (logand (-> self state-flags) (state-flags being-attacked))) + (when (not (logtest? (-> self state-flags) (state-flags being-attacked))) (cond ((or (logtest? (-> self state-flags) (state-flags invulnerable timed-invulnerable invuln-powerup)) (and (logtest? (-> arg1 mask) (attack-mask mode)) @@ -382,7 +382,7 @@ ) (set! (-> self attack-info-rec prev-state) (-> self state)) (logior! (-> self attack-info-rec mask) (attack-mask atki13)) - (when (zero? (logand (-> self attack-info-rec mask) (attack-mask attacker))) + (when (not (logtest? (-> self attack-info-rec mask) (attack-mask attacker))) (set! (-> self attack-info-rec attacker) (process->handle arg2)) (logior! (-> self attack-info-rec mask) (attack-mask attacker)) ) @@ -732,7 +732,7 @@ ;; definition for function target-apply-tongue (defbehavior target-apply-tongue target ((arg0 vector)) - (when (zero? (logand (-> self state-flags) (state-flags being-attacked))) + (when (not (logtest? (-> self state-flags) (state-flags being-attacked))) (logior! (-> self state-flags) (state-flags prevent-attack prevent-duck remove-prevents)) (let ((gp-1 (vector-! (new 'stack-no-clear 'vector) arg0 (-> self control trans)))) (set! (-> self control unknown-float41) (lerp-scale @@ -771,7 +771,7 @@ (('shove) (when (!= (-> self next-state name) 'target-hit) (mem-copy! (the-as pointer (-> self attack-info-rec)) (the-as pointer (-> arg3 param 1)) 104) - (when (zero? (logand (-> self attack-info-rec mask) (attack-mask attacker))) + (when (not (logtest? (-> self attack-info-rec mask) (attack-mask attacker))) (set! (-> self attack-info-rec attacker) (process->handle arg0)) (logior! (-> self attack-info-rec mask) (attack-mask attacker)) ) @@ -861,7 +861,7 @@ (go target-edge-grab) ) (('pole-grab) - (if (zero? (logand (-> self control root-prim prim-core action) (collide-action ca-8))) + (if (not (logtest? (-> self control root-prim prim-core action) (collide-action ca-8))) (go target-pole-cycle (process->handle (the-as process (-> arg3 param 0)))) ) ) diff --git a/test/decompiler/reference/jak1/engine/target/target-util_REF.gc b/test/decompiler/reference/jak1/engine/target/target-util_REF.gc index db1e9aeec8..fcbb251456 100644 --- a/test/decompiler/reference/jak1/engine/target/target-util_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target-util_REF.gc @@ -763,7 +763,7 @@ (* (-> s1-0 x) (-> *display* seconds-per-frame)) ) ) - (if (zero? (logand arg0 (align-opts adjust-xz-vel keep-other-velocities))) + (if (not (logtest? arg0 (align-opts adjust-xz-vel keep-other-velocities))) (set! (-> a1-3 z) 0.0) ) ) @@ -780,7 +780,7 @@ (* (-> s1-0 z) (-> *display* seconds-per-frame)) ) ) - (if (zero? (logand arg0 (align-opts adjust-x-vel keep-other-velocities))) + (if (not (logtest? arg0 (align-opts adjust-x-vel keep-other-velocities))) (set! (-> a1-3 x) 0.0) ) ) @@ -820,7 +820,7 @@ (not (-> *setting-control* current spooling)) (not (-> *setting-control* current movie)) (not (-> *setting-control* current hint)) - (zero? (logand (-> self control status) (cshape-moving-flags t-act))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act))) (zero? (logand (-> self water flags) (water-flags wt09))) ) ) @@ -833,8 +833,8 @@ (< 0.866 (-> self control surface-angle)) ) ) - (and (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-jump))) - (zero? (logand (-> self state-flags) (state-flags prevent-jump))) + (and (not (logtest? (-> self control unknown-surface01 flags) (surface-flags prevent-jump))) + (not (logtest? (-> self state-flags) (state-flags prevent-jump))) (case arg0 (('target-wheel-flip) (>= 0.5 (-> self control unknown-float61)) @@ -860,7 +860,7 @@ ;; definition for function fall-test ;; INFO: Return type mismatch object vs none. (defbehavior fall-test target () - (when (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *TARGET-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-15 (ja-group))) @@ -887,7 +887,7 @@ ;; definition for function slide-down-test ;; INFO: Return type mismatch object vs none. (defbehavior slide-down-test target () - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf csmf07))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf csmf07))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *TARGET-bank* ground-timeout)) (logtest? (-> self control status) (cshape-moving-flags tsurf)) (< 0.5 (-> self control surface-angle)) @@ -910,7 +910,7 @@ ;; definition for function can-wheel? (defbehavior can-wheel? target () (and (logtest? (-> self control status) (cshape-moving-flags onsurf)) - (or (zero? (logand (-> self control status) (cshape-moving-flags twall))) + (or (not (logtest? (-> self control status) (cshape-moving-flags twall))) (>= 0.7 (-> self control touch-angle)) ) (and (< (-> self control unknown-float61) 0.7) @@ -923,9 +923,9 @@ (defbehavior can-duck? target () (and (logtest? (-> self control status) (cshape-moving-flags onsurf)) (>= (-> self control unknown-float60) 0.7) - (zero? (logand (-> self water flags) (water-flags wt11 wt12))) - (zero? (logand (-> self state-flags) (state-flags prevent-duck))) - (or (zero? (logand (-> self water flags) (water-flags wt10))) + (not (logtest? (-> self water flags) (water-flags wt11 wt12))) + (not (logtest? (-> self state-flags) (state-flags prevent-duck))) + (or (not (logtest? (-> self water flags) (water-flags wt10))) (< (- (- (-> self control trans y) (- (-> self water base-height) (-> self water wade-height)))) 2457.6) ) ) @@ -962,12 +962,9 @@ ;; definition for function can-hands? (defbehavior can-hands? target ((arg0 symbol)) (cond - ((or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0) - (pad-buttons square) - ) - ) + ((or (not (cpad-pressed? (-> self control unknown-cpad-info00 number) square)) (or (and (logtest? (-> self state-flags) (state-flags prevent-attack)) - (or (zero? (logand (-> self state-flags) (state-flags remove-prevents))) + (or (not (logtest? (-> self state-flags) (state-flags remove-prevents))) (not (and (= (-> self fact-info-target eco-type) (pickup-type eco-yellow)) (>= (-> self fact-info-target eco-level) 1.0) ) @@ -1156,7 +1153,7 @@ (set! (-> obj intersection quad) (-> arg0 intersection quad)) ) (cond - ((zero? (logand s4-0 (attack-mask vector))) + ((not (logtest? s4-0 (attack-mask vector))) (let* ((s3-0 pp) (s2-0 (handle->process (-> obj attacker))) (v1-39 (if (and (nonzero? s2-0) (type-type? (-> s2-0 type) process-drawable)) @@ -1187,15 +1184,15 @@ ) ) (set! (-> obj vector quad) (-> arg0 vector quad)) - (if (zero? (logand s4-0 (attack-mask shove-back))) + (if (not (logtest? s4-0 (attack-mask shove-back))) (set! (-> obj shove-back) (vector-xz-length (-> obj vector))) ) - (if (zero? (logand s4-0 (attack-mask shove-up))) + (if (not (logtest? s4-0 (attack-mask shove-up))) (set! (-> obj shove-up) (-> obj vector y)) ) ) ) - (if (zero? (logand (-> obj mask) (attack-mask dist))) + (if (not (logtest? (-> obj mask) (attack-mask dist))) (set! (-> obj dist) (fabs (-> obj shove-back))) ) (if (logtest? s4-0 (attack-mask trans)) diff --git a/test/decompiler/reference/jak1/engine/target/target2_REF.gc b/test/decompiler/reference/jak1/engine/target/target2_REF.gc index 4a1f031f64..bae30af231 100644 --- a/test/decompiler/reference/jak1/engine/target/target2_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target2_REF.gc @@ -3,14 +3,14 @@ ;; failed to figure out what this is: (defstate target-load-wait (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('loading) (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -55,13 +55,13 @@ ;; failed to figure out what this is: (defstate target-stance-ambient (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('movie) (go target-stance) ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -293,8 +293,8 @@ ;; failed to figure out what this is: (defstate hud-waiting (first-person-hud) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('go-away) (go hud-going-out) ) @@ -479,21 +479,21 @@ ;; failed to figure out what this is: (defstate target-look-around (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) - ((let ((v1-4 arg2)) + ((let ((v1-4 event-type)) (= v1-4 'end-mode) ) (go target-stance-look-around) ) ((-> self control unknown-symbol30) - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -640,18 +640,18 @@ ;; failed to figure out what this is: (defstate target-billy-game (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) - ((let ((v1-4 arg2)) + ((let ((v1-4 event-type)) (= v1-4 'end-mode) ) (go target-stance) ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -773,38 +773,38 @@ ;; failed to figure out what this is: (defstate target-grab (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) (else - (case arg2 + (case event-type (('end-mode) (go target-stance) ) (('play-anim) - (let ((v0-0 (the-as object (-> arg3 param 0)))) + (let ((v0-0 (the-as object (-> event param 0)))) (set! (-> self control unknown-uint20) (the-as uint v0-0)) v0-0 ) ) (('clone-anim) - (go target-clone-anim (process->handle (the-as process (-> arg3 param 0)))) + (go target-clone-anim (process->handle (the-as process (-> event param 0)))) ) (('change-mode) - (case (-> arg3 param 0) + (case (-> event param 0) (('final-door) (go target-final-door - (the-as basic (process->handle (the-as process (-> arg3 param 1)))) - (process->handle (the-as process (-> arg3 param 2))) + (the-as basic (process->handle (the-as process (-> event param 1)))) + (process->handle (the-as process (-> event param 2))) ) ) ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -825,7 +825,7 @@ :code (behavior () (set-forward-vel (the-as float 0.0)) (let ((gp-0 0)) - (while (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (while (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (target-falling-anim-trans) (+! gp-0 (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) (suspend) @@ -943,10 +943,10 @@ ;; failed to figure out what this is: (defstate target-pole-cycle (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) :enter (behavior ((arg0 handle)) @@ -975,7 +975,7 @@ ) (pad-buttons x) ) - (zero? (logand (-> self state-flags) (state-flags prevent-jump))) + (not (logtest? (-> self state-flags) (state-flags prevent-jump))) (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.1)) ) (set! (-> self control transv quad) (the-as uint128 0)) @@ -1164,13 +1164,13 @@ ;; failed to figure out what this is: (defstate target-edge-grab (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('end-mode) (go target-falling 'target-edge-grab) ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1284,13 +1284,13 @@ ;; failed to figure out what this is: (defstate target-edge-grab-jump (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('end-mode) (go target-falling 'target-edge-grab) ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1305,7 +1305,7 @@ (until (ja-done? 0) (target-compute-edge-rider) (compute-alignment! (-> self align)) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (vector-matrix*! s4-0 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) (move-by-vector! (-> self control) s4-0) ) @@ -1335,7 +1335,7 @@ (ja-no-eval :group! eichar-edge-grab-off-ja :num! (seek! (ja-aframe (the-as float 191.0) 0)) :frame-num 0.0) (until (ja-done? 0) (compute-alignment! (-> self align)) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (vector-matrix*! gp-0 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) (move-by-vector! (-> self control) gp-0) ) @@ -1645,7 +1645,7 @@ ) (pad-buttons x) ) - (zero? (logand (-> self water flags) (water-flags wt09))) + (not (logtest? (-> self water flags) (water-flags wt09))) (zero? (logand (-> self state-flags) (state-flags prevent-jump))) ) (go target-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f)) @@ -1708,7 +1708,7 @@ ) :trans (behavior () ((-> self state-hook)) - (when (and (zero? (logand (-> self water flags) (water-flags wt10))) + (when (and (not (logtest? (-> self water flags) (water-flags wt10))) (>= (- (-> *display* base-frame-counter) (-> self water wade-time)) (seconds 0.05)) ) (if (logtest? (-> self water flags) (water-flags wt11)) @@ -1754,7 +1754,7 @@ :exit (-> target-wade-stance exit) :trans (behavior () ((-> self state-hook)) - (when (and (zero? (logand (-> self water flags) (water-flags wt10))) + (when (and (not (logtest? (-> self water flags) (water-flags wt10))) (>= (- (-> *display* base-frame-counter) (-> self water wade-time)) (seconds 0.1)) ) (if (logtest? (-> self water flags) (water-flags wt11)) @@ -2032,7 +2032,7 @@ ) (set-zero! (-> self water bob)) ) - (when (and (zero? (logand (-> self water flags) (water-flags wt11))) + (when (and (not (logtest? (-> self water flags) (water-flags wt11))) (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.1)) ) (if (logtest? (-> self water flags) (water-flags wt10)) @@ -2148,7 +2148,7 @@ ) (set-zero! (-> self water bob)) ) - (when (and (zero? (logand (-> self water flags) (water-flags wt11))) + (when (and (not (logtest? (-> self water flags) (water-flags wt11))) (>= (- (-> *display* base-frame-counter) (-> self water swim-time)) (seconds 0.1)) ) (if (logtest? (-> self water flags) (water-flags wt10)) @@ -2205,7 +2205,7 @@ (ja-no-eval :group! eichar-swim-walk-ja :num! (seek!) :frame-num (ja-aframe (the-as float 19.0) 0)) (until (ja-done? 0) (compute-alignment! (-> self align)) - (if (zero? (logand (-> self align flags) (align-flags disabled))) + (if (not (logtest? (-> self align flags) (align-flags disabled))) (set! (-> self control unknown-surface00 target-speed) (* (-> self align delta trans z) (-> self control unknown-surface01 alignv) (-> *display* frames-per-second)) ) @@ -2223,7 +2223,7 @@ (ja-no-eval :group! eichar-swim-walk-ja :num! (seek!) :frame-num 0.0) (until (ja-done? 0) (compute-alignment! (-> self align)) - (if (zero? (logand (-> self align flags) (align-flags disabled))) + (if (not (logtest? (-> self align flags) (align-flags disabled))) (set! (-> self control unknown-surface00 target-speed) (* (-> self align delta trans z) (-> self control unknown-surface01 alignv) (-> *display* frames-per-second)) ) @@ -2239,11 +2239,11 @@ ;; failed to figure out what this is: (defstate target-swim-down (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack 'attack-invinc) - (let ((v1-2 (the-as attack-info (-> arg3 param 1)))) - (when (or (zero? (logand (-> v1-2 mask) (attack-mask mode))) (= (-> v1-2 mode) 'generic) (= (-> v1-2 mode) 'drown)) + (let ((v1-2 (the-as attack-info (-> event param 1)))) + (when (or (not (logtest? (-> v1-2 mask) (attack-mask mode))) (= (-> v1-2 mode) 'generic) (= (-> v1-2 mode) 'drown)) (set! (-> v1-2 mode) 'damage) (if (and (= (-> self game mode) 'play) (>= 1.0 (-> self fact-info-target health))) (set! (-> v1-2 mode) 'drown-death) @@ -2254,7 +2254,7 @@ ) ) ) - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) :enter (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) @@ -2357,10 +2357,7 @@ ) ) (loop - (if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) - (pad-buttons square) - ) - ) + (if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) square)) (-> self control unknown-spoolanim00) ) (>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0) @@ -2417,7 +2414,7 @@ :exit (-> target-swim-down exit) :trans (behavior () (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x) - (zero? (logand (-> self state-flags) (state-flags prevent-jump))) + (not (logtest? (-> self state-flags) (state-flags prevent-jump))) (zero? (logand (-> self water flags) (water-flags wt13 wt14))) ) (go @@ -2451,7 +2448,7 @@ (the-as float 0.0) (the-as float 0.1) ) - (if (and (zero? (logand (-> self water flags) (water-flags wt12))) + (if (and (not (logtest? (-> self water flags) (water-flags wt12))) (or (>= (ja-aframe-num 0) 222.0) (and (!= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0) (>= (ja-aframe-num 0) 200.0) @@ -2461,7 +2458,7 @@ (goto cfg-37) ) (compute-alignment! (-> self align)) - (when (zero? (logand (-> self water flags) (water-flags wt12))) + (when (not (logtest? (-> self water flags) (water-flags wt12))) (logior! (-> self water flags) (water-flags wt04)) (set! gp-0 #f) ) @@ -2484,7 +2481,7 @@ (the-as float 0.0) (the-as float 0.1) ) - (if (zero? (logand (-> self water flags) (water-flags wt12))) + (if (not (logtest? (-> self water flags) (water-flags wt12))) (goto cfg-37) ) (if (cpad-pressed? (-> self control unknown-cpad-info00 number) x) @@ -2550,7 +2547,7 @@ (ja :group! eichar-swim-jump-ja :num! min) (until (and (ja-done? 0) (= (-> self skel root-channel 0) (-> self skel channel))) (compute-alignment! (-> self align)) - (if (zero? (logand (-> self align flags) (align-flags disabled))) + (if (not (logtest? (-> self align flags) (align-flags disabled))) (+! (-> self water align-offset) (* 0.6 (-> self align delta trans y))) ) (suspend) @@ -2603,7 +2600,7 @@ (the-as handle #f) ) ) - (if (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3))) + (if (not (cpad-hold? 0 l3)) (target-timed-invulnerable (-> *TARGET-bank* hit-invulnerable-timeout) self) ) ) @@ -2639,10 +2636,10 @@ ;; failed to figure out what this is: (defstate target-launch (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'query) (= (-> event param 0) 'mode)) 'target-launch - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) :code (behavior ((arg0 float) (arg1 symbol) (arg2 vector) (arg3 int)) @@ -2736,8 +2733,8 @@ ;; failed to figure out what this is: (defstate target-periscope (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('change-mode) #f ) @@ -2748,7 +2745,7 @@ ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -2837,11 +2834,11 @@ ;; failed to figure out what this is: (defstate target-clone-anim (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'trans) (= (-> arg3 param 0) 'restore)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'trans) (= (-> event param 0) 'restore)) (set! (-> self control unknown-uint20) (the-as uint #f)) ) - ((-> target-grab event) arg0 arg1 arg2 arg3) + ((-> target-grab event) proc arg1 event-type event) ) :enter (behavior ((arg0 handle)) (set! (-> self control unknown-handle10) arg0) @@ -2863,7 +2860,7 @@ (cond ((not (-> self control unknown-spoolanim00)) ) - ((zero? (logand (-> self draw status) (draw-status hidden))) + ((not (logtest? (-> self draw status) (draw-status hidden))) (move-to-point! (-> self control) (the-as vector a1-2)) (matrix->quaternion (-> self control unknown-quaternion00) (-> gp-0 bone transform)) (quaternion-copy! (-> self control quat) (-> self control unknown-quaternion00)) diff --git a/test/decompiler/reference/jak1/engine/target/target_REF.gc b/test/decompiler/reference/jak1/engine/target/target_REF.gc index 208adf9889..5c1b8d2236 100644 --- a/test/decompiler/reference/jak1/engine/target/target_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target_REF.gc @@ -92,7 +92,7 @@ ) (pad-buttons x) ) - (zero? (logand (-> self water flags) (water-flags wt09))) + (not (logtest? (-> self water flags) (water-flags wt09))) (< (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 3)) (zero? (logand (-> self state-flags) (state-flags prevent-jump))) ) @@ -989,7 +989,7 @@ (if (can-hands? #t) (go target-running-attack) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (seconds 0.08)) ) (go target-falling #f) @@ -1217,8 +1217,7 @@ ) :trans (behavior () ((-> self state-hook)) - (if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) - ) + (if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1)) (logtest? (-> self state-flags) (state-flags prevent-duck)) ) (let ((v1-13 (ja-group))) @@ -1304,8 +1303,7 @@ :exit (-> target-duck-stance exit) :trans (behavior () ((-> self state-hook)) - (if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) - ) + (if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1)) (logtest? (-> self state-flags) (state-flags prevent-duck)) (and (logtest? (-> self water flags) (water-flags wt10)) (>= (- (- (-> self control trans y) (- (-> self water base-height) (-> self water wade-height)))) 2457.6) @@ -1459,7 +1457,7 @@ (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x) (< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 12288.0) (and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) - (zero? (logand (-> self water flags) (water-flags wt09))) + (not (logtest? (-> self water flags) (water-flags wt09))) (zero? (logand (-> self state-flags) (state-flags prevent-jump))) ) ) @@ -1471,7 +1469,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -1594,7 +1592,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -1695,7 +1693,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -2024,19 +2022,19 @@ ;; failed to figure out what this is: (defstate target-running-attack (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (cond (((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 224) ) (let ((gp-1 (target-send-attack - arg0 + proc (the-as uint (-> self control unknown-symbol30)) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control unknown-dword50) (-> self control unknown-dword51) ) @@ -2044,8 +2042,8 @@ ) (when gp-1 (set! (-> self control unknown-uint20) (the-as uint (-> *display* base-frame-counter))) - (let ((v1-9 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) - arg0 + (let ((v1-9 (if (and (nonzero? proc) (type-type? (-> proc type) process-drawable)) + proc ) ) ) @@ -2075,12 +2073,12 @@ ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2165,7 +2163,7 @@ ) ) ) - (zero? (logand (-> self state-flags) (state-flags prevent-jump prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-jump prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump))) ) ) @@ -2219,7 +2217,7 @@ (when (not (ja-min? 0)) (cond ((and (>= (ja-aframe-num 0) 20.0) - (and (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (and (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *TARGET-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-39 (ja-group))) @@ -2246,10 +2244,7 @@ ) (set-forward-vel (the-as float 0.0)) ) - ((and (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) - (pad-buttons square) - ) - ) + ((and (not (cpad-hold? (-> self control unknown-cpad-info00 number) square)) (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.05)) ) (if (= (-> self control ground-pat material) (pat-material ice)) @@ -2284,7 +2279,7 @@ (+! gp-2 1) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *TARGET-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-121 (ja-group))) @@ -2307,15 +2302,15 @@ ;; failed to figure out what this is: (defstate target-attack-air (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v0-0 (target-bonk-event-handler arg0 arg1 arg2 arg3))) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v0-0 (target-bonk-event-handler proc arg1 event-type event))) (cond (v0-0 (empty) v0-0 ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2553,7 +2548,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -2626,14 +2621,14 @@ ;; failed to figure out what this is: (defstate target-flop (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v0-0 (target-bonk-event-handler arg0 arg1 arg2 arg3))) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v0-0 (target-bonk-event-handler proc arg1 event-type event))) (cond (v0-0 (empty) v0-0 ) - ((let ((v1-0 arg2)) + ((let ((v1-0 event-type)) (= v1-0 'swim) ) (cond @@ -2655,7 +2650,7 @@ ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2711,7 +2706,7 @@ (when (and (or (< (target-move-dist (seconds 0.1)) 1638.4) (and (logtest? (-> self control status) (cshape-moving-flags twall)) (< 0.7 (-> self control poly-angle))) ) - (zero? (logand (-> self control status) (cshape-moving-flags t-act))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act))) (>= (-> self control unknown-uint20) (the-as uint 2)) ) (set! (-> self control unknown-dword36) (-> *display* base-frame-counter)) @@ -2869,13 +2864,13 @@ ;; failed to figure out what this is: (defstate target-flop-hit-ground (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('swim) #f ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -2943,11 +2938,11 @@ ;; failed to figure out what this is: (defstate target-wheel (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (= arg2 'touched) - (send-event arg0 'roll) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (= event-type 'touched) + (send-event proc 'roll) ) - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) :enter (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) @@ -3133,7 +3128,7 @@ ) ) (set! (-> self state-time) (-> *display* base-frame-counter)) - (while (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (while (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.01)) (when (not (ja-group? eichar-jump-loop-ja)) (ja-channel-push! 1 (seconds 0.1)) diff --git a/test/decompiler/reference/jak1/engine/ui/hud-classes_REF.gc b/test/decompiler/reference/jak1/engine/ui/hud-classes_REF.gc index 6defa147d9..431e86c3fb 100644 --- a/test/decompiler/reference/jak1/engine/ui/hud-classes_REF.gc +++ b/test/decompiler/reference/jak1/engine/ui/hud-classes_REF.gc @@ -330,7 +330,7 @@ (let ((f0-3 128.0)) (when (and *target* (= (-> *target* fact-info-target health) 1.0)) (let ((v1-16 (logand (-> *display* integral-frame-counter) 7))) - (set! f0-3 (if (zero? (logand (-> *display* integral-frame-counter) 8)) + (set! f0-3 (if (not (logtest? (-> *display* integral-frame-counter) 8)) (+ 128.0 (* 18.142857 (the float v1-16))) (- 255.0 (* 18.142857 (the float v1-16))) ) diff --git a/test/decompiler/reference/jak1/engine/ui/hud_REF.gc b/test/decompiler/reference/jak1/engine/ui/hud_REF.gc index f50a78c6a6..5ff46d2150 100644 --- a/test/decompiler/reference/jak1/engine/ui/hud_REF.gc +++ b/test/decompiler/reference/jak1/engine/ui/hud_REF.gc @@ -219,9 +219,9 @@ ;; failed to figure out what this is: (defstate hud-hidden (hud) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('show) (if (and (not *progress-process*) (!= (-> self last-hide-time) (-> *display* base-frame-counter))) (go hud-arriving) @@ -296,9 +296,9 @@ ;; failed to figure out what this is: (defstate hud-arriving (hud) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-3 object)) - (case arg2 + (case event-type (('hide-quick) (set! (-> self last-hide-time) (-> *display* base-frame-counter)) (set! (-> self force-on-screen) #f) diff --git a/test/decompiler/reference/jak1/engine/ui/progress/progress_REF.gc b/test/decompiler/reference/jak1/engine/ui/progress/progress_REF.gc index 31740517b5..bb83e52d5a 100644 --- a/test/decompiler/reference/jak1/engine/ui/progress/progress_REF.gc +++ b/test/decompiler/reference/jak1/engine/ui/progress/progress_REF.gc @@ -1088,8 +1088,8 @@ ;; failed to figure out what this is: (defstate progress-waiting (progress) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('go-away) (go progress-gone) ) @@ -1939,16 +1939,16 @@ ;; failed to figure out what this is: (defstate progress-normal (progress) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'go-away) (go progress-going-out) ) ((= v1-0 'notify) (cond - ((= (-> arg3 param 0) 'done) + ((= (-> event param 0) 'done) (case (-> self display-state) (((progress-screen memcard-saving)) (cond @@ -1989,11 +1989,11 @@ ) ) ) - ((= (-> arg3 param 0) 'error) + ((= (-> event param 0) 'error) (let ((t9-4 format) (a0-17 #t) (a1-2 "ERROR NOTIFY: ~S ~D~%") - (v1-13 (-> arg3 param 1)) + (v1-13 (-> event param 1)) ) (t9-4 a0-17 @@ -2060,7 +2060,7 @@ (-> self display-state) ) ) - (case (-> arg3 param 1) + (case (-> event param 1) ((14) (set! v0-0 (the-as none 7)) (set! (-> self next-display-state) (the-as progress-screen v0-0)) @@ -2482,8 +2482,8 @@ ;; failed to figure out what this is: (defstate progress-debug (progress) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('go-away) (go progress-going-out) ) diff --git a/test/decompiler/reference/jak1/kernel/gcommon_REF.gc b/test/decompiler/reference/jak1/kernel/gcommon_REF.gc index 2f89c791bc..8d805ab99e 100644 --- a/test/decompiler/reference/jak1/kernel/gcommon_REF.gc +++ b/test/decompiler/reference/jak1/kernel/gcommon_REF.gc @@ -870,7 +870,7 @@ ;; definition for function print-tree-bitmask (defun print-tree-bitmask ((bits int) (count int)) (dotimes (i count) - (if (zero? (logand bits 1)) + (if (not (logtest? bits 1)) (format #t " ") (format #t "| ") ) @@ -993,7 +993,7 @@ ) ((= expected-type binteger) (cond - ((zero? (logand (the-as int obj) 7)) + ((not (logtest? (the-as int obj) 7)) #t ) (else diff --git a/test/decompiler/reference/jak1/kernel/gkernel_REF.gc b/test/decompiler/reference/jak1/kernel/gkernel_REF.gc index 7e8aae732c..369c446da8 100644 --- a/test/decompiler/reference/jak1/kernel/gkernel_REF.gc +++ b/test/decompiler/reference/jak1/kernel/gkernel_REF.gc @@ -959,7 +959,7 @@ ;; definition for function execute-process-tree (defun execute-process-tree ((arg0 process-tree) (arg1 (function object object)) (arg2 kernel-context)) (let ((s3-0 (or (logtest? (-> arg0 mask) (process-mask process-tree)) - (not (and (zero? (logand (-> arg2 prevent-from-run) (-> arg0 mask))) (run-logic? arg0))) + (not (and (not (logtest? (-> arg2 prevent-from-run) (-> arg0 mask))) (run-logic? arg0))) (arg1 arg0) ) ) @@ -984,7 +984,7 @@ ;; definition for function search-process-tree (defun search-process-tree ((arg0 process-tree) (arg1 (function process-tree object))) - (when (zero? (logand (-> arg0 mask) (process-mask process-tree))) + (when (not (logtest? (-> arg0 mask) (process-mask process-tree))) (if (arg1 arg0) (return arg0) ) diff --git a/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc b/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc index bc1ca9a167..e2272a93af 100644 --- a/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc @@ -242,19 +242,19 @@ ;; failed to figure out what this is: (defstate grottopole-idle (grottopole) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when (= (-> arg0 type) target) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (when (= (-> proc type) target) + (case event-type (('attack) - (let ((v1-2 (-> arg3 param 2))) + (let ((v1-2 (-> event param 2))) (when (!= v1-2 (-> self incomming-attack-id)) (set! (-> self incomming-attack-id) v1-2) - (case (-> arg3 param 1) + (case (-> event param 1) (('uppercut) (when (and (< (-> *target* control trans y) (+ -40960.0 (-> self root-override trans y))) (< (-> self position) (-> self max-position)) ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 2) ) @@ -269,7 +269,7 @@ (when (and (< (+ -40960.0 (-> self root-override trans y)) (-> *target* control trans y)) (> (-> self position) 0) ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 1) ) @@ -598,8 +598,8 @@ ;; failed to figure out what this is: (defstate ecoventrock-idle (ecoventrock) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (sound-play "cannon-shot") (increment-success-for-hint (game-text-id sidekick-hint-ecorocks)) @@ -1129,12 +1129,12 @@ (cond ((not (task-closed? (game-task beach-flutflut) (task-status need-introduction))) ) - ((zero? (logand (-> self ambients-played) 8)) + ((not (logtest? (-> self ambients-played) 8)) (if (play-ambient (-> self ambient) "BIR-AM04" #f (the-as vector #f)) (logior! (-> self ambients-played) 8) ) ) - ((zero? (logand (-> self ambients-played) 512)) + ((not (logtest? (-> self ambients-played) 512)) (if (play-ambient (-> self ambient) "BIR-AM10" #f (the-as vector #f)) (logior! (-> self ambients-played) 512) ) @@ -1145,15 +1145,15 @@ ;; failed to figure out what this is: (defstate flutflutegg-idle (flutflutegg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when (and (= arg2 'attack) - (or (= (-> arg3 param 1) 'punch) (= (-> arg3 param 1) 'spin) (= (-> arg3 param 1) 'spin-air)) - (!= (-> self incomming-attack-id) (-> arg3 param 2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (when (and (= event-type 'attack) + (or (= (-> event param 1) 'punch) (= (-> event param 1) 'spin) (= (-> event param 1) 'spin-air)) + (!= (-> self incomming-attack-id) (-> event param 2)) ) - (set! (-> self incomming-attack-id) (-> arg3 param 2)) + (set! (-> self incomming-attack-id) (-> event param 2)) (flutflutegg-hit-sounds) (let ((s5-1 - (vector-! (new-stack-vector0) (-> (the-as process-drawable arg0) root trans) (-> self root-override trans)) + (vector-! (new-stack-vector0) (-> (the-as process-drawable proc) root trans) (-> self root-override trans)) ) ) (set! (-> s5-1 y) 0.0) @@ -1185,22 +1185,22 @@ (set! (-> self ambients-played) 0) 0 ) - ((and (zero? (logand (-> self ambients-played) 1)) (< (vector-length gp-0) 327680.0) (< -61440.0 (-> gp-0 y))) + ((and (not (logtest? (-> self ambients-played) 1)) (< (vector-length gp-0) 327680.0) (< -61440.0 (-> gp-0 y))) (if (play-ambient (-> self ambient) "BIR-AM01" #f (the-as vector #f)) (logior! (-> self ambients-played) 1) ) ) - ((and (zero? (logand (-> self ambients-played) 2)) (< (vector-length gp-0) 163840.0) (< -40960.0 (-> gp-0 y))) + ((and (not (logtest? (-> self ambients-played) 2)) (< (vector-length gp-0) 163840.0) (< -40960.0 (-> gp-0 y))) (if (play-ambient (-> self ambient) "BIR-AM02" #f (the-as vector #f)) (logior! (-> self ambients-played) 2) ) ) - ((and (zero? (logand (-> self ambients-played) 16)) (< (vector-length gp-0) 81920.0) (< -24576.0 (-> gp-0 y))) + ((and (not (logtest? (-> self ambients-played) 16)) (< (vector-length gp-0) 81920.0) (< -24576.0 (-> gp-0 y))) (if (play-ambient (-> self ambient) "BIR-AM05" #f (the-as vector #f)) (logior! (-> self ambients-played) 16) ) ) - ((and (zero? (logand (-> self ambients-played) 4)) (< (vector-length gp-0) 40960.0) (< -24576.0 (-> gp-0 y))) + ((and (not (logtest? (-> self ambients-played) 4)) (< (vector-length gp-0) 40960.0) (< -24576.0 (-> gp-0 y))) (if (play-ambient (-> self ambient) "BIR-AM03" #f (the-as vector #f)) (logior! (-> self ambients-played) 4) ) @@ -1239,18 +1239,18 @@ ;; failed to figure out what this is: (defstate flutflutegg-physics (flutflutegg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (the-as object (when (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.5)) - (= arg2 'attack) - (or (= (-> arg3 param 1) 'punch) (= (-> arg3 param 1) 'spin) (= (-> arg3 param 1) 'spin-air)) - (!= (-> self incomming-attack-id) (-> arg3 param 2)) + (= event-type 'attack) + (or (= (-> event param 1) 'punch) (= (-> event param 1) 'spin) (= (-> event param 1) 'spin-air)) + (!= (-> self incomming-attack-id) (-> event param 2)) ) - (set! (-> self incomming-attack-id) (-> arg3 param 2)) + (set! (-> self incomming-attack-id) (-> event param 2)) (flutflutegg-hit-sounds) (let ((s5-1 - (vector-! (new-stack-vector0) (-> (the-as process-drawable arg0) root trans) (-> self root-override trans)) + (vector-! (new-stack-vector0) (-> (the-as process-drawable proc) root trans) (-> self root-override trans)) ) ) (set! (-> s5-1 y) 0.0) @@ -1508,8 +1508,8 @@ ;; failed to figure out what this is: (defstate harvester-idle (harvester) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('update) (if (and (-> self alt-actor) (logtest? (-> self alt-actor extra perm status) (entity-perm-status complete))) (go harvester-inflate #f) diff --git a/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc b/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc index c15b68b7c3..755000612c 100644 --- a/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc @@ -295,8 +295,8 @@ ;; failed to figure out what this is: (defstate idle (beach-rock) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (set! (-> self trigger) #t) (go-virtual falling) diff --git a/test/decompiler/reference/jak1/levels/beach/lurkercrab_REF.gc b/test/decompiler/reference/jak1/levels/beach/lurkercrab_REF.gc index ab1dbf3795..bdfb1eecab 100644 --- a/test/decompiler/reference/jak1/levels/beach/lurkercrab_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/lurkercrab_REF.gc @@ -102,7 +102,7 @@ 6144.0 16384.0 ) - (the-as object (if (zero? (logand (-> obj nav-enemy-flags) (nav-enemy-flags navenmf8))) + (the-as object (if (not (logtest? (-> obj nav-enemy-flags) (nav-enemy-flags navenmf8))) (do-push-aways! (-> obj collide-info)) ) ) diff --git a/test/decompiler/reference/jak1/levels/beach/pelican_REF.gc b/test/decompiler/reference/jak1/levels/beach/pelican_REF.gc index af6616bfa2..463bfab161 100644 --- a/test/decompiler/reference/jak1/levels/beach/pelican_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/pelican_REF.gc @@ -231,8 +231,8 @@ ;; failed to figure out what this is: (defstate pelican-circle (pelican) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond @@ -246,7 +246,7 @@ (handle->process (-> self fuel-cell)) ) ((= v1-0 'position) - (set! (-> self path-pos) (the-as float (-> arg3 param 0))) + (set! (-> self path-pos) (the-as float (-> event param 0))) (let ((a1-3 (TODO-RENAME-12 (-> self path) (new 'stack-no-clear 'vector) (-> self path-pos)))) (set-heading-vec! (-> self root-override) a1-3) ) @@ -370,8 +370,8 @@ ;; failed to figure out what this is: (defstate pelican-dive (pelican) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'got-cell?) (-> self state-object) @@ -489,13 +489,13 @@ ;; failed to figure out what this is: (defstate pelican-wait-at-nest (pelican) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'attack) - (case (-> arg3 param 1) + (case (-> event param 1) (('explode) (let ((a0-2 (handle->process (-> self fuel-cell)))) (if a0-2 @@ -506,7 +506,7 @@ #f ) (else - (let* ((gp-0 arg0) + (let* ((gp-0 proc) (v1-13 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) gp-0 ) @@ -529,8 +529,8 @@ ((= v1-0 'touch) (send-shove-back (-> self root-override) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + proc + (the-as touching-shapes-entry (-> event param 0)) 0.7 6144.0 16384.0 diff --git a/test/decompiler/reference/jak1/levels/beach/seagull_REF.gc b/test/decompiler/reference/jak1/levels/beach/seagull_REF.gc index 0a4e318250..cd7354677b 100644 --- a/test/decompiler/reference/jak1/levels/beach/seagull_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/seagull_REF.gc @@ -276,7 +276,7 @@ (vector-! s5-0 (-> obj flock 0 target) (-> obj root-override trans)) (when (< (vector-dot s5-0 s5-0) 6710886400.0) (let ((v1-5 (ash 1 (-> obj index)))) - (when (zero? (logand v1-5 (-> obj flock 0 bird-at-waterfall))) + (when (not (logtest? v1-5 (-> obj flock 0 bird-at-waterfall))) (logior! (-> obj flock 0 bird-at-waterfall) v1-5) (+! (-> obj flock 0 birds-at-waterfall) 1) ) @@ -703,7 +703,7 @@ (vector-! s4-0 (-> s5-0 flock 0 target) (-> s5-0 root-override trans)) (when (< (vector-dot s4-0 s4-0) 6710886400.0) (let ((v1-24 (ash 1 (-> s5-0 index)))) - (when (zero? (logand v1-24 (-> s5-0 flock 0 bird-at-waterfall))) + (when (not (logtest? v1-24 (-> s5-0 flock 0 bird-at-waterfall))) (logior! (-> s5-0 flock 0 bird-at-waterfall) v1-24) (+! (-> s5-0 flock 0 birds-at-waterfall) 1) ) @@ -896,7 +896,7 @@ (vector-! s5-0 (-> gp-0 flock 0 target) (-> gp-0 root-override trans)) (when (< (vector-dot s5-0 s5-0) 6710886400.0) (let ((v1-26 (ash 1 (-> gp-0 index)))) - (when (zero? (logand v1-26 (-> gp-0 flock 0 bird-at-waterfall))) + (when (not (logtest? v1-26 (-> gp-0 flock 0 bird-at-waterfall))) (logior! (-> gp-0 flock 0 bird-at-waterfall) v1-26) (+! (-> gp-0 flock 0 birds-at-waterfall) 1) ) @@ -1394,7 +1394,7 @@ ) ) ) - (while (zero? (logand (-> gp-0 extra perm status) (entity-perm-status complete))) + (while (not (logtest? (-> gp-0 extra perm status) (entity-perm-status complete))) (suspend) ) ) diff --git a/test/decompiler/reference/jak1/levels/citadel/citadel-obs_REF.gc b/test/decompiler/reference/jak1/levels/citadel/citadel-obs_REF.gc index 0b5cea63fc..4f38bb5e81 100644 --- a/test/decompiler/reference/jak1/levels/citadel/citadel-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/citadel/citadel-obs_REF.gc @@ -482,10 +482,10 @@ ;; failed to figure out what this is: (defstate citb-disc-idle (citb-disc) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 0.25)) + (send-event proc 'no-look-around (seconds 0.25)) #f ) ) @@ -957,12 +957,12 @@ ;; failed to figure out what this is: (defstate citb-robotboss-idle (citb-robotboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (sv-96 int) (sv-112 int)) (the-as object (cond - ((= arg2 'shield-off) + ((= event-type 'shield-off) (stop! (-> self sound)) (if (-> self shield-on) (sound-play "robotcage-off") @@ -970,17 +970,17 @@ (set! (-> self shield-on) #f) #f ) - ((= arg2 'shield-on) + ((= event-type 'shield-on) (let ((v0-3 #t)) (set! (-> self shield-on) v0-3) v0-3 ) ) - ((= arg2 'die) + ((= event-type 'die) (cleanup-for-death self) (the-as symbol (deactivate self)) ) - ((or (= arg2 'touch) (= arg2 'attack)) + ((or (= event-type 'touch) (= event-type 'attack)) (let ((s4-0 sound-play-by-name) (s3-0 (make-u128 #x7061 (the-as uint #x7a2d646c65696873))) (s2-0 (new-sound-id)) @@ -994,9 +994,9 @@ ) ) (the-as symbol (send-event - arg0 + proc 'shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 2)) (shove-back (meters 3)))) ) ) @@ -1157,8 +1157,8 @@ ;; failed to figure out what this is: (defstate citb-coil-idle (citb-coil) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go citb-coil-break) ) @@ -1539,8 +1539,8 @@ ;; failed to figure out what this is: (defstate citb-generator-idle (citb-generator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (if (-> self mushroom) (increment-success-for-hint (game-text-id citadel-generator)) @@ -1791,8 +1791,8 @@ ;; failed to figure out what this is: (defstate citadelcam-idle (citadelcam) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (when (and (task-complete? *game-info* (game-task citadel-sage-blue)) (task-complete? *game-info* (game-task citadel-sage-red)) diff --git a/test/decompiler/reference/jak1/levels/citadel/citadel-sages_REF.gc b/test/decompiler/reference/jak1/levels/citadel/citadel-sages_REF.gc index 811e50684e..05f65fb8a2 100644 --- a/test/decompiler/reference/jak1/levels/citadel/citadel-sages_REF.gc +++ b/test/decompiler/reference/jak1/levels/citadel/citadel-sages_REF.gc @@ -105,9 +105,9 @@ ;; failed to figure out what this is: (defstate citb-sagecage-idle (citb-sagecage) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-3 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'disable-bars) (stop! (-> self sound)) @@ -474,13 +474,13 @@ ;; failed to figure out what this is: (defstate play-anim (citb-sage) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('disable-bars) (send-event (handle->process (-> self cage)) 'disable-bars) ) (else - ((-> (method-of-type process-taskable play-anim) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type process-taskable play-anim) event) proc arg1 event-type event) ) ) ) @@ -489,13 +489,13 @@ ;; failed to figure out what this is: (defstate idle (citb-sage) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('open) (send-event (handle->process (-> self cage)) 'disable-bars) ) (else - ((-> (method-of-type process-taskable idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type process-taskable idle) event) proc arg1 event-type event) ) ) ) @@ -1132,8 +1132,8 @@ ;; failed to figure out what this is: (defstate play-anim (green-sagecage) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('spawn-robot) (let ((gp-0 (entity-by-name "robotboss-3"))) (format 0 "robotboss ent ~A~%" gp-0) @@ -1154,7 +1154,7 @@ ) ) (else - ((-> (method-of-type citb-sage play-anim) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type citb-sage play-anim) event) proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/citadel/citb-drop-plat_REF.gc b/test/decompiler/reference/jak1/levels/citadel/citb-drop-plat_REF.gc index 7f831904c0..08b21925e5 100644 --- a/test/decompiler/reference/jak1/levels/citadel/citb-drop-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/citadel/citb-drop-plat_REF.gc @@ -78,8 +78,8 @@ ;; failed to figure out what this is: (defstate drop-plat-idle (drop-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('drop) (logclear! (-> self mask) (process-mask actor-pause)) (go drop-plat-drop) @@ -126,8 +126,8 @@ ;; failed to figure out what this is: (defstate drop-plat-spawn (drop-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('drop) (go drop-plat-die) ) @@ -157,8 +157,8 @@ ;; failed to figure out what this is: (defstate drop-plat-rise (drop-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('drop) (go drop-plat-drop) ) @@ -527,8 +527,8 @@ ;; failed to figure out what this is: (defstate citb-drop-plat-idle (citb-drop-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go citb-drop-plat-active) ) @@ -545,13 +545,13 @@ ;; failed to figure out what this is: (defstate citb-drop-plat-active (citb-drop-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'player-stepped) (when (>= (- (-> *display* base-frame-counter) (-> self drop-time)) (seconds 0.2)) (set! (-> self drop-time) (-> *display* base-frame-counter)) - (citb-drop-plat-drop-children (the-as int (-> arg3 param 0))) + (citb-drop-plat-drop-children (the-as int (-> event param 0))) ) ) ((= v1-0 'trigger) diff --git a/test/decompiler/reference/jak1/levels/citadel/citb-plat_REF.gc b/test/decompiler/reference/jak1/levels/citadel/citb-plat_REF.gc index 0e459b2613..32723149ed 100644 --- a/test/decompiler/reference/jak1/levels/citadel/citb-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/citadel/citb-plat_REF.gc @@ -343,8 +343,8 @@ ;; failed to figure out what this is: (defstate citb-base-plat-idle (citb-stair-plat) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'trigger) (logclear! (-> self mask) (process-mask actor-pause)) (let ((v0-0 #t)) @@ -1053,13 +1053,13 @@ ;; failed to figure out what this is: (defstate citb-firehose-blast (citb-firehose) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (send-event - arg0 + proc 'attack - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((mode 'damage) (shove-back (meters 6)) (shove-up (meters 3)))) ) ) @@ -1177,8 +1177,8 @@ ;; failed to figure out what this is: (defstate citb-exit-plat-idle (citb-exit-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (let ((v1-3 (-> self entity extra perm))) (logior! (-> v1-3 status) (entity-perm-status user-set-from-cstage)) diff --git a/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc b/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc index 5fb6020d23..992b408edc 100644 --- a/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc @@ -96,10 +96,10 @@ ;; failed to figure out what this is: (defstate basebutton-up-idle (basebutton) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (case (-> arg3 param 1) + (case (-> event param 1) (('flop) (TODO-RENAME-29 self (-> self event-going-down) (-> self notify-actor)) (sound-play "silo-button") @@ -112,7 +112,7 @@ (go-virtual basebutton-going-down) ) (('move-to) - (move-to-vec-or-quat! self (the-as vector (-> arg3 param 0)) (the-as quaternion (-> arg3 param 1))) + (move-to-vec-or-quat! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) ) ) ) @@ -141,14 +141,14 @@ ;; failed to figure out what this is: (defstate basebutton-going-down (basebutton) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('untrigger) (sound-play "silo-button") (go-virtual basebutton-going-up) ) (('move-to) - (move-to-vec-or-quat! self (the-as vector (-> arg3 param 0)) (the-as quaternion (-> arg3 param 1))) + (move-to-vec-or-quat! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) ) ) ) @@ -181,14 +181,14 @@ ;; failed to figure out what this is: (defstate basebutton-down-idle (basebutton) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('untrigger) (sound-play "silo-button") (go-virtual basebutton-going-up) ) (('move-to) - (move-to-vec-or-quat! self (the-as vector (-> arg3 param 0)) (the-as quaternion (-> arg3 param 1))) + (move-to-vec-or-quat! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) ) ) ) @@ -233,10 +233,10 @@ ;; failed to figure out what this is: (defstate basebutton-going-up (basebutton) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('move-to) - (move-to-vec-or-quat! self (the-as vector (-> arg3 param 0)) (the-as quaternion (-> arg3 param 1))) + (move-to-vec-or-quat! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) ) (('trigger) (sound-play "silo-button") @@ -592,8 +592,8 @@ ;; failed to figure out what this is: (defstate target-warp-out (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('death-end) (let ((v0-0 (the-as object (logior (-> self draw status) (draw-status hidden))))) (set! (-> self draw status) (the-as draw-status v0-0)) @@ -601,7 +601,7 @@ ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/common/battlecontroller_REF.gc b/test/decompiler/reference/jak1/levels/common/battlecontroller_REF.gc index 5efdf12dd3..25d9fd2064 100644 --- a/test/decompiler/reference/jak1/levels/common/battlecontroller_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/battlecontroller_REF.gc @@ -213,7 +213,7 @@ battlecontroller-default-event-handler (eval-path-curve-div! (-> s5-0 path) s3-0 (the float (-> s5-0 state)) 'interp) (send-event s4-0 'cue-jump-to-point s3-0) ) - (if (zero? (logand (-> (the-as nav-enemy s4-0) nav-enemy-flags) (nav-enemy-flags navenmf11))) + (if (not (logtest? (-> (the-as nav-enemy s4-0) nav-enemy-flags) (nav-enemy-flags navenmf11))) (+! (-> s5-0 state) 1) ) ) diff --git a/test/decompiler/reference/jak1/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/jak1/levels/common/nav-enemy_REF.gc index 95afa99b01..6ec8c8d278 100644 --- a/test/decompiler/reference/jak1/levels/common/nav-enemy_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/nav-enemy_REF.gc @@ -81,10 +81,10 @@ (defmethod common-post nav-enemy ((obj nav-enemy)) (when (and (logtest? (-> obj nav-enemy-flags) (nav-enemy-flags navenmf8)) (or (not *target*) - (and (zero? (logand (-> *target* state-flags) + (and (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= (- (-> *display* base-frame-counter) (-> obj touch-time)) (seconds 0.05)) ) ) @@ -551,11 +551,11 @@ nav-enemy-default-event-handler ;; definition for method 46 of type nav-enemy (defmethod TODO-RENAME-46 nav-enemy ((obj nav-enemy) (arg0 float)) (and *target* - (zero? (logand (-> *target* state-flags) + (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) - (and (or (zero? (logand (-> obj nav-enemy-flags) (nav-enemy-flags navenmf12))) + ) + (and (or (not (logtest? (-> obj nav-enemy-flags) (nav-enemy-flags navenmf12))) (< (vector-vector-distance (target-pos 0) (-> obj collide-info trans)) arg0) ) (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) @@ -741,7 +741,7 @@ nav-enemy-default-event-handler (when (not s4-1) (compute-alignment! (-> self align)) (align! (-> self align) (align-opts adjust-y-vel ignore-y-if-zero) 1.0 arg1 1.0) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (let ((f0-6 (* (- (-> self align delta trans z)) (-> *display* frames-per-second)))) (set! (-> self collide-info transv x) (* (-> self hit-from-dir x) f0-6)) (set! (-> self collide-info transv z) (* (-> self hit-from-dir z) f0-6)) @@ -802,7 +802,7 @@ nav-enemy-default-event-handler ;; definition for method 12 of type nav-enemy (defmethod run-logic? nav-enemy ((obj nav-enemy)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (and (nonzero? (-> obj draw)) (and (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj collide-info pause-adjust-distance)) (vector-vector-distance (-> obj collide-info trans) (camera-pos)) diff --git a/test/decompiler/reference/jak1/levels/common/orb-cache_REF.gc b/test/decompiler/reference/jak1/levels/common/orb-cache_REF.gc index 31a1e481ef..7dbf45a09d 100644 --- a/test/decompiler/reference/jak1/levels/common/orb-cache_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/orb-cache_REF.gc @@ -55,8 +55,8 @@ ;; failed to figure out what this is: (defstate orb-cache-top-idle (orb-cache-top) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('eco-blue) (process-entity-status! self (entity-perm-status complete) #t) (dotimes (gp-0 5) @@ -66,7 +66,7 @@ (go orb-cache-top-activate #f) ) (else - (plat-event arg0 arg1 arg2 arg3) + (plat-event proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/common/plat-button_REF.gc b/test/decompiler/reference/jak1/levels/common/plat-button_REF.gc index f42459f123..9825fe4110 100644 --- a/test/decompiler/reference/jak1/levels/common/plat-button_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/plat-button_REF.gc @@ -73,12 +73,12 @@ ;; failed to figure out what this is: (defstate plat-button-idle (plat-button) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (when (can-activate? self) (if (and ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self root-override) (the-as uint 1) ) @@ -189,8 +189,8 @@ ;; failed to figure out what this is: (defstate plat-button-move-downward (plat-button) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (the-as object (when (or (= arg2 'touch) (= arg2 'attack)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (the-as object (when (or (= event-type 'touch) (= event-type 'attack)) (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) @@ -264,8 +264,8 @@ ;; failed to figure out what this is: (defstate plat-button-move-upward (plat-button) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (the-as object (when (or (= arg2 'touch) (= arg2 'attack)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (the-as object (when (or (= event-type 'touch) (= event-type 'attack)) (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) diff --git a/test/decompiler/reference/jak1/levels/common/plat-eco_REF.gc b/test/decompiler/reference/jak1/levels/common/plat-eco_REF.gc index 7c5b734e71..42f8eadb73 100644 --- a/test/decompiler/reference/jak1/levels/common/plat-eco_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/plat-eco_REF.gc @@ -52,13 +52,13 @@ ;; failed to figure out what this is: (defstate plat-idle (plat-eco) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('wake) (go-virtual plat-path-active (the-as plat #f)) ) (('eco-blue) - (go-virtual notice-blue (process->handle arg0)) + (go-virtual notice-blue (process->handle proc)) ) (('ridden 'edge-grabbed) (when (send-event *target* 'query 'powerup (pickup-type eco-blue)) @@ -100,8 +100,8 @@ ;; failed to figure out what this is: (defstate notice-blue (plat-eco) :virtual override - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('wake) (sound-play "blue-eco-on" :position (the-as symbol (-> self root-override trans))) (go-virtual plat-path-active (the-as plat #f)) diff --git a/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc b/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc index ba18c99a5a..4775f7e040 100644 --- a/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc @@ -611,20 +611,20 @@ ;; failed to figure out what this is: (defstate ropebridge-idle (ropebridge) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (let ((f0-0 -1.0)) (cond - ((= arg2 'bonk) + ((= event-type 'bonk) (when (>= (- (-> *display* base-frame-counter) (-> self bonk-time-stamp)) (seconds 0.2)) (set! (-> self bonk-time-stamp) (-> *display* base-frame-counter)) - (set! f0-0 (the-as float (-> arg3 param 1))) + (set! f0-0 (the-as float (-> event param 1))) (if (>= f0-0 (-> self tuning rider-bonk-max)) (set! f0-0 (-> self tuning rider-bonk-max)) ) ) ) - ((and (= arg2 'attack) (= (-> arg3 param 1) 'flop)) - (let ((v1-17 (-> arg3 param 2))) + ((and (= event-type 'attack) (= (-> event param 1) 'flop)) + (let ((v1-17 (-> event param 2))) (when (!= v1-17 (-> self player-attack-id)) (set! (-> self player-attack-id) v1-17) (set! (-> self attack-flop-time-stamp) (-> *display* base-frame-counter)) @@ -635,13 +635,13 @@ ) (the-as object - (when (and (>= f0-0 (-> self tuning rider-bonk-min)) (-> arg3 param 0)) + (when (and (>= f0-0 (-> self tuning rider-bonk-min)) (-> event param 0)) (set! (-> self agitated-time-stamp) (-> *display* base-frame-counter)) (let* ((f30-0 (/ (* (- f0-0 (-> self tuning rider-bonk-min)) (-> self tuning rider-bonk-force)) (- (-> self tuning rider-bonk-max) (-> self tuning rider-bonk-min)) ) ) - (gp-0 (the-as object (-> arg3 param 0))) + (gp-0 (the-as object (-> event param 0))) (a0-7 (-> (the-as touching-shapes-entry gp-0) head)) (s4-0 (-> self root-override)) (s5-0 (get-touched-prim a0-7 s4-0 (the-as touching-shapes-entry gp-0))) @@ -1051,7 +1051,7 @@ ;; definition for method 12 of type ropebridge (defmethod run-logic? ropebridge ((obj ropebridge)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (< (- (-> *display* base-frame-counter) (-> obj agitated-time-stamp)) (seconds 5)) (or (>= (-> obj sleep-dist) (vector-vector-distance (-> obj root-override trans) (math-camera-pos))) (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) diff --git a/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc b/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc index 9f1134f4ea..ba6a2ed6ef 100644 --- a/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc @@ -99,7 +99,7 @@ nav-enemy-default-event-handler ;; definition for method 12 of type sharkey (defmethod run-logic? sharkey ((obj sharkey)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj collide-info pause-adjust-distance)) (vector-vector-distance (-> obj collide-info trans) (math-camera-pos)) ) @@ -280,7 +280,7 @@ nav-enemy-default-event-handler ) ) ((sharkey-notice-player?) - (when (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags navenmf0))) + (when (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags navenmf0))) (logior! (-> self nav-enemy-flags) (nav-enemy-flags navenmf0)) (set! (-> self notice-time) (-> *display* base-frame-counter)) ) diff --git a/test/decompiler/reference/jak1/levels/common/water-anim_REF.gc b/test/decompiler/reference/jak1/levels/common/water-anim_REF.gc index 401e74e9c6..c8a16cab7d 100644 --- a/test/decompiler/reference/jak1/levels/common/water-anim_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/water-anim_REF.gc @@ -553,10 +553,10 @@ ;; failed to figure out what this is: (defstate water-vol-idle (water-anim) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'move-to) - (set! (-> self root trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self root trans quad) (-> (the-as vector (-> event param 0)) quad)) (set! (-> self water-height) (-> self root trans y)) (if (nonzero? (-> self sound)) (update-trans! (-> self sound) (-> self root trans)) diff --git a/test/decompiler/reference/jak1/levels/darkcave/darkcave-obs_REF.gc b/test/decompiler/reference/jak1/levels/darkcave/darkcave-obs_REF.gc index b8b5b6a0fd..8059a3ca49 100644 --- a/test/decompiler/reference/jak1/levels/darkcave/darkcave-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/darkcave/darkcave-obs_REF.gc @@ -115,8 +115,8 @@ ;; failed to figure out what this is: (defstate cavecrystal-idle (cavecrystal) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (go cavecrystal-active) ) @@ -145,10 +145,10 @@ ;; failed to figure out what this is: (defstate cavecrystal-active (cavecrystal) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'attack) - (let ((v1-1 (-> arg3 param 2))) + (let ((v1-1 (-> event param 2))) (cond ((!= v1-1 (-> self player-attack-id)) (set! (-> self player-attack-id) v1-1) diff --git a/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc index 562abd3213..7f6f3e735d 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc @@ -88,8 +88,8 @@ ;; failed to figure out what this is: (defstate idle (final-door) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('open) (go-virtual open #f) ) @@ -107,11 +107,11 @@ ;; failed to figure out what this is: (defstate open (final-door) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'brightness) - (let ((f0-0 (the-as float (-> arg3 param 0))) - (f1-0 (the-as float (-> arg3 param 1))) + (let ((f0-0 (the-as float (-> event param 0))) + (f1-0 (the-as float (-> event param 1))) ) (set-vector! (-> self draw color-mult) f0-0 f0-0 f0-0 f0-0) (let ((v0-0 (-> self draw color-emissive))) @@ -222,7 +222,7 @@ (ja-post) (loop (if (and (and *target* (>= 61440.0 (vector-vector-distance (-> self root trans) (-> *target* control trans)))) - (and (zero? (logand (-> *target* state-flags) (state-flags grabbed))) + (and (not (logtest? (-> *target* state-flags) (state-flags grabbed))) (and (>= (-> *game-info* fuel) 100.0) (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete)))) (= (get-task-status (game-task finalboss-movies)) (task-status need-reward-speech)) @@ -382,8 +382,8 @@ ;; failed to figure out what this is: (defstate target-final-door (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - ((-> target-grab event) arg0 arg1 arg2 arg3) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + ((-> target-grab event) proc arg1 event-type event) ) :enter (behavior ((arg0 basic) (arg1 handle)) (send-event *camera* 'change-to-entity-by-name "camera-403") diff --git a/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc index 6705ebefdf..7ee6dddc9a 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc @@ -828,8 +828,8 @@ ;; failed to figure out what this is: (defstate spawn-minions (green-eco-lurker-gen) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('blob-died) (set! (-> self num-alive) (max 0 (+ (-> self num-alive) -1))) (send-event (ppointer->process (-> self parent)) 'blob-died) diff --git a/test/decompiler/reference/jak1/levels/finalboss/light-eco_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/light-eco_REF.gc index 8df4f96807..6fa9346023 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/light-eco_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/light-eco_REF.gc @@ -684,7 +684,7 @@ (defmethod spawn-child-eco light-eco-mother ((obj light-eco-mother)) (countdown (s3-0 4) (let ((gp-0 (rand-vu-int-count 32))) - (when (zero? (logand (-> obj angle-mask) (ash 1 gp-0))) + (when (not (logtest? (-> obj angle-mask) (ash 1 gp-0))) (let ((f28-0 (* 2048.0 (the float gp-0))) (f30-0 (rand-vu-float-range 61440.0 88514.56)) (s4-0 (new 'stack-no-clear 'vector)) diff --git a/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc index 1ebf1fda17..2ee619a3fc 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc @@ -14,11 +14,11 @@ ;; failed to figure out what this is: (defstate cam-robotboss (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('set-pivot) (let ((v0-0 (the-as object (-> self pivot-pt)))) - (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> event param 0)) quad)) v0-0 ) ) @@ -26,7 +26,7 @@ #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -45,7 +45,7 @@ (none) ) :trans (behavior () - (when (zero? (logand (-> *camera* master-options) 2)) + (when (not (logtest? (-> *camera* master-options) 2)) (set! *camera-base-mode* cam-string) (cam-slave-go cam-free-floating) ) @@ -344,10 +344,10 @@ ;; failed to figure out what this is: (defstate idle (silodoor) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('open) - (set! (-> self part-opened) (the-as float (-> arg3 param 0))) + (set! (-> self part-opened) (the-as float (-> event param 0))) ) (('hide) (go-virtual hidden) diff --git a/test/decompiler/reference/jak1/levels/finalboss/robotboss-weapon_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/robotboss-weapon_REF.gc index aa28d9984f..5e54ecf0e5 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/robotboss-weapon_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/robotboss-weapon_REF.gc @@ -914,11 +914,11 @@ ;; failed to figure out what this is: (defstate yellowshot-idle (yellowshot) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (when (= (-> arg0 type) target) - (send-event *target* 'attack (-> arg3 param 0) (static-attack-info ((mode 'generic)))) + (when (= (-> proc type) target) + (send-event *target* 'attack (-> event param 0) (static-attack-info ((mode 'generic)))) (send-event (ppointer->process (-> self parent)) 'hit-jak) ) ) diff --git a/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc index 9f15b7f230..e9b3fe9461 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc @@ -439,8 +439,8 @@ ;; failed to figure out what this is: (defstate robotboss-yellow-dark-bomb-wait (robotboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'white-eco-picked-up) (close-specific-task! (game-task finalboss-movies) (task-status unknown)) @@ -464,7 +464,7 @@ (deactivate self) ) (else - (robotboss-bomb-handler arg0 arg1 arg2 arg3) + (robotboss-bomb-handler proc arg1 event-type event) ) ) ) @@ -923,8 +923,8 @@ ;; failed to figure out what this is: (defstate robotboss-yellow-wait (robotboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hit-jak) (let ((f0-2 (rand-float-gen))) (cond @@ -952,7 +952,7 @@ ) ) (else - (robotboss-handler arg0 arg1 arg2 arg3) + (robotboss-handler proc arg1 event-type event) ) ) ) @@ -1523,8 +1523,8 @@ ;; failed to figure out what this is: (defstate robotboss-red-wait (robotboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hit-jak) (let ((f0-2 (rand-float-gen))) (cond @@ -1552,7 +1552,7 @@ ) ) (else - (robotboss-handler arg0 arg1 arg2 arg3) + (robotboss-handler proc arg1 event-type event) ) ) ) @@ -1981,8 +1981,8 @@ ;; failed to figure out what this is: (defstate robotboss-green-wait (robotboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (ja-channel-push! 1 (seconds 0.2)) (ja :group! robotboss-green-roar-ja) @@ -2040,7 +2040,7 @@ ) ) (else - (robotboss-handler arg0 arg1 arg2 arg3) + (robotboss-handler proc arg1 event-type event) ) ) ) @@ -2439,10 +2439,10 @@ (when (and arg1 (nonzero? (-> self looping-sound 1))) (update! (-> self looping-sound 1)) (if (and *target* - (zero? (logand (-> *target* state-flags) + (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= 8192.0 (vector-vector-distance gp-0 (target-pos 0))) ) (send-event *target* 'attack #f (static-attack-info ((shove-up (meters 2.5)) (shove-back (meters 7.5))))) diff --git a/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss_REF.gc index ae47f219ac..593a59ba68 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss_REF.gc @@ -88,11 +88,11 @@ ;; failed to figure out what this is: (defstate plat-path-active (plat-eco-finalboss) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('target) (process-entity-status! self (entity-perm-status complete) #t) - (set! (-> self force-dest) (the-as float (-> arg3 param 0))) + (set! (-> self force-dest) (the-as float (-> event param 0))) ) (('ridden 'edge-grabbed) (if (>= (- (-> *display* base-frame-counter) (-> self touch-time)) (seconds 2)) @@ -114,7 +114,7 @@ #f ) (else - (plat-event arg0 arg1 arg2 arg3) + (plat-event proc arg1 event-type event) ) ) ) @@ -629,8 +629,8 @@ ;; failed to figure out what this is: (defstate play-anim (sage-finalboss) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('fade) (set! (-> self credit-fade) 1.0) ) @@ -639,12 +639,12 @@ ) (('activate-particle) (let ((v0-0 (the-as object #t))) - (set! (-> self particle (-> arg3 param 0) active) (the-as symbol v0-0)) + (set! (-> self particle (-> event param 0) active) (the-as symbol v0-0)) v0-0 ) ) (('deactivate-particle) - (set! (-> self particle (-> arg3 param 0) active) #f) + (set! (-> self particle (-> event param 0) active) #f) #f ) ) diff --git a/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc b/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc index a9bd6b6b89..110bfa711c 100644 --- a/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc @@ -124,10 +124,10 @@ ;; failed to figure out what this is: (defstate balloon-idle (balloon) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (send-event arg0 'heat -10.0) + (send-event proc 'heat -10.0) (go balloon-popping) ) ) @@ -202,8 +202,8 @@ ;; failed to figure out what this is: (defstate spike-up (spike) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'go-spike-up) #t ) @@ -254,8 +254,8 @@ ;; failed to figure out what this is: (defstate spike-down (spike) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'go-spike-up) (go spike-up) #t @@ -647,10 +647,10 @@ ;; failed to figure out what this is: (defstate idle (crate-darkeco-cluster) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack 'touch) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'darkeco)))) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'darkeco)))) (go-virtual die) ) ) diff --git a/test/decompiler/reference/jak1/levels/flut_common/flutflut_REF.gc b/test/decompiler/reference/jak1/levels/flut_common/flutflut_REF.gc index dd07b00530..a97742e079 100644 --- a/test/decompiler/reference/jak1/levels/flut_common/flutflut_REF.gc +++ b/test/decompiler/reference/jak1/levels/flut_common/flutflut_REF.gc @@ -92,13 +92,13 @@ ;; failed to figure out what this is: (defstate wait-for-start (flutflut) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) ((= v1-0 'notify) (let ((v0-1 (the-as structure #t))) @@ -261,8 +261,8 @@ ;; failed to figure out what this is: (defstate pickup (flutflut) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('draw) (ja-channel-set! 1) (ja :group! (-> self draw art-group data 3)) @@ -271,7 +271,7 @@ (transform-post) ) (('trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) (('touch 'attack) #f @@ -312,14 +312,14 @@ ;; failed to figure out what this is: (defstate wait-for-return (flutflut) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (or (= arg2 'touch) (= arg2 'attack)) (send-event *target* 'end-mode)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (or (= event-type 'touch) (= event-type 'attack)) (send-event *target* 'end-mode)) (go-virtual pickup (method-of-object self idle)) ) (the-as object - (if (= arg2 'trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + (if (= event-type 'trans) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc b/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc index 5514b74e3d..e5a1272c94 100644 --- a/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc +++ b/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc @@ -331,7 +331,7 @@ (('shove) (when (!= (-> self next-state name) 'target-hit) (mem-copy! (the-as pointer (-> self attack-info-rec)) (the-as pointer (-> arg3 param 1)) 104) - (when (zero? (logand (-> self attack-info-rec mask) (attack-mask attacker))) + (when (not (logtest? (-> self attack-info-rec mask) (attack-mask attacker))) (set! (-> self attack-info-rec attacker) (process->handle arg0)) (logior! (-> self attack-info-rec mask) (attack-mask attacker)) ) @@ -567,7 +567,7 @@ (if (can-hands? #t) (go target-flut-running-attack) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (and (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-37 (ja-group))) @@ -663,7 +663,7 @@ (if (can-hands? #t) (go target-flut-running-attack) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (and (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-37 (ja-group))) @@ -792,10 +792,10 @@ ;; failed to figure out what this is: (defstate target-flut-jump (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when (and (= arg2 'touched) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (when (and (= event-type 'touched) ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 6) ) @@ -806,22 +806,22 @@ ) ) ) - (send-event arg0 'bonk (-> arg3 param 0) (-> self control ground-impact-vel)) + (send-event proc 'bonk (-> event param 0) (-> self control ground-impact-vel)) (when (target-send-attack - arg0 + proc (the-as uint 'flut-bonk) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control unknown-dword50) (-> self control unknown-dword51) ) ) ) - (case arg2 + (case event-type (('jump) - (go target-flut-jump (the-as float (-> arg3 param 0)) (the-as float (-> arg3 param 0))) + (go target-flut-jump (the-as float (-> event param 0)) (the-as float (-> event param 0))) ) (else - (target-flut-standard-event-handler arg0 arg1 arg2 arg3) + (target-flut-standard-event-handler proc arg1 event-type event) ) ) ) @@ -856,8 +856,8 @@ ) (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x) (< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 40960.0) - (and (zero? (logand (-> self water flags) (water-flags wt09))) - (zero? (logand (-> self state-flags) (state-flags prevent-jump))) + (and (not (logtest? (-> self water flags) (water-flags wt09))) + (not (logtest? (-> self state-flags) (state-flags prevent-jump))) (< 4096.0 (target-height-above-ground)) ) ) @@ -869,7 +869,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -984,9 +984,9 @@ ) (pad-buttons square) ) - (and (zero? (logand (-> self state-flags) (state-flags prevent-attack))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) - ) + (and (not (logtest? (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) + ) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) @@ -1103,7 +1103,7 @@ (if (move-legs?) (go target-flut-walk) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (and (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-34 (ja-group))) @@ -1191,19 +1191,19 @@ ;; failed to figure out what this is: (defstate target-flut-running-attack (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (cond (((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 224) ) (let ((gp-1 (target-send-attack - arg0 + proc (the-as uint (-> self control unknown-symbol30)) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control unknown-dword50) (-> self control unknown-dword51) ) @@ -1211,8 +1211,8 @@ ) (when gp-1 (set! (-> self control unknown-uint20) (the-as uint (-> *display* base-frame-counter))) - (let ((v1-9 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) - arg0 + (let ((v1-9 (if (and (nonzero? proc) (type-type? (-> proc type) process-drawable)) + proc ) ) ) @@ -1243,12 +1243,12 @@ ) ) (else - (target-flut-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-flut-dangerous-event-handler proc arg1 event-type event) ) ) ) (else - (target-flut-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-flut-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -1370,7 +1370,7 @@ (when (not (ja-min? 0)) (cond ((and (>= (ja-aframe-num 0) 20.0) - (and (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (and (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-39 (ja-group))) @@ -1423,7 +1423,7 @@ (set! f30-0 (* f30-0 (the-as float (fmin 1.0 (the-as float (-> self control unknown-float140)))))) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-105 (ja-group))) @@ -1460,10 +1460,10 @@ ;; failed to figure out what this is: (defstate target-flut-air-attack (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'touched) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'touched) ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 6) ) @@ -1474,14 +1474,14 @@ ) ) ) - (send-event arg0 'bonk (-> arg3 param 0) (-> self control ground-impact-vel)) + (send-event proc 'bonk (-> event param 0) (-> self control ground-impact-vel)) ) - (case arg2 + (case event-type (('jump) - (go target-flut-jump (the-as float (-> arg3 param 0)) (the-as float (-> arg3 param 0))) + (go target-flut-jump (the-as float (-> event param 0)) (the-as float (-> event param 0))) ) (else - (target-flut-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-flut-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -1702,7 +1702,7 @@ ) ) (combine! gp-0 arg1) - (when (zero? (logand (-> gp-0 mask) (attack-mask vector))) + (when (not (logtest? (-> gp-0 mask) (attack-mask vector))) (vector-z-quaternion! (-> gp-0 vector) (-> self control unknown-quaternion00)) (vector-xz-normalize! (-> gp-0 vector) (- (fabs (-> gp-0 shove-back)))) (set! (-> gp-0 vector y) (-> gp-0 shove-up)) @@ -1901,7 +1901,7 @@ (until (ja-done? 0) (compute-alignment! (-> self align)) (let ((gp-5 (new 'stack-no-clear 'vector))) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (vector-matrix*! gp-5 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) (vector-float*! (-> self control transv) gp-5 (-> *display* frames-per-second)) ) @@ -2022,7 +2022,7 @@ :code (behavior ((arg0 handle)) (set-forward-vel (the-as float 0.0)) (let ((s5-0 0)) - (while (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (while (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (target-flut-falling-anim-trans) (+! s5-0 (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) (suspend) @@ -2161,21 +2161,21 @@ ;; failed to figure out what this is: (defstate target-flut-grab (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) (else - (case arg2 + (case event-type (('end-mode) (go target-flut-stance) ) (('clone-anim) - (go target-flut-clone-anim (process->handle (the-as process (-> arg3 param 0)))) + (go target-flut-clone-anim (process->handle (the-as process (-> event param 0)))) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -2203,11 +2203,11 @@ ;; failed to figure out what this is: (defstate target-flut-clone-anim (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'trans) (= (-> arg3 param 0) 'restore)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'trans) (= (-> event param 0) 'restore)) (set! (-> self control unknown-uint20) (the-as uint #f)) ) - ((-> target-flut-grab event) arg0 arg1 arg2 arg3) + ((-> target-flut-grab event) proc arg1 event-type event) ) :enter (-> target-clone-anim enter) :exit (behavior () diff --git a/test/decompiler/reference/jak1/levels/jungle/bouncer_REF.gc b/test/decompiler/reference/jak1/levels/jungle/bouncer_REF.gc index 92bed6abce..c1d78d83db 100644 --- a/test/decompiler/reference/jak1/levels/jungle/bouncer_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/bouncer_REF.gc @@ -40,10 +40,10 @@ ;; failed to figure out what this is: (defstate bouncer-wait (springbox) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('bonk) - (when (send-event arg0 'jump (-> self spring-height) (-> self spring-height) #f) + (when (send-event proc 'jump (-> self spring-height) (-> self spring-height) #f) (sound-play "trampoline") (go bouncer-fire) ) @@ -54,7 +54,7 @@ ) ) (('attack) - (when (and (= (-> arg3 param 1) 'flop) (send-event arg0 'jump (-> self spring-height) (-> self spring-height) #f)) + (when (and (= (-> event param 1) 'flop) (send-event proc 'jump (-> self spring-height) (-> self spring-height) #f)) (go bouncer-fire) #f ) @@ -74,14 +74,14 @@ ;; failed to figure out what this is: (defstate bouncer-smush (springbox) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) (else - ((-> bouncer-wait event) arg0 arg1 arg2 arg3) + ((-> bouncer-wait event) proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc b/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc index 1cbd96aad5..a27326e29a 100644 --- a/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc @@ -42,7 +42,7 @@ ;; definition for method 12 of type darkvine (defmethod run-logic? darkvine ((obj darkvine)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status was-drawn)) (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root-override pause-adjust-distance)) diff --git a/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc b/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc index 48a617d27d..15bf462658 100644 --- a/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc @@ -1625,18 +1625,18 @@ ;; failed to figure out what this is: (defstate fisher-playing (fisher) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-2 object)) - (case arg2 + (case event-type (('fisher-fish-die) (sound-play "fish-miss") - (set! v0-2 (+ (-> self missed) (-> arg3 param 0))) + (set! v0-2 (+ (-> self missed) (-> event param 0))) (set! (-> self missed) (the-as int v0-2)) v0-2 ) (('fisher-fish-caught) (send-event *target* 'bounce) - (set! v0-2 (+ (-> self caught) (-> arg3 param 0))) + (set! v0-2 (+ (-> self caught) (-> event param 0))) (set! (-> self caught) (the-as int v0-2)) v0-2 ) @@ -1822,9 +1822,9 @@ ;; failed to figure out what this is: (defstate play-accept (fisher) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 rgbaf)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'emissive-on) (set-vector! (-> self draw color-mult) 0.6 0.6 0.6 1.0) @@ -2124,18 +2124,18 @@ ;; failed to figure out what this is: (defstate target-fishing (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((= arg2 'bounce) + ((= event-type 'bounce) (set-zero! (-> self control unknown-smush00)) (activate! (-> self control unknown-smush00) 1.0 120 210 0.3 1.0) ) - ((= arg2 'lose) - (set! (-> self control unknown-uint20) (the-as uint arg2)) - arg2 + ((= event-type 'lose) + (set! (-> self control unknown-uint20) (the-as uint event-type)) + event-type ) (else - ((-> target-grab event) arg0 arg1 arg2 arg3) + ((-> target-grab event) proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/jungle/hopper_REF.gc b/test/decompiler/reference/jak1/levels/jungle/hopper_REF.gc index e2d6ce90b1..46cc027915 100644 --- a/test/decompiler/reference/jak1/levels/jungle/hopper_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/hopper_REF.gc @@ -160,7 +160,7 @@ nav-enemy-default-event-handler nav-enemy-jump-event-handler ) :trans (behavior () - (if (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags enable-rotate))) + (if (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags enable-rotate))) ((-> (method-of-type nav-enemy nav-enemy-patrol) trans)) ) (none) @@ -233,7 +233,7 @@ nav-enemy-default-event-handler nav-enemy-jump-event-handler ) :trans (behavior () - (if (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags enable-rotate))) + (if (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags enable-rotate))) ((-> (method-of-type nav-enemy nav-enemy-chase) trans)) ) (none) diff --git a/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc b/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc index 800aa84ffa..059dfbb672 100644 --- a/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc @@ -727,7 +727,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -1286,8 +1286,8 @@ ;; failed to figure out what this is: (defstate periscope-idle (periscope) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('activate) (logclear! (-> self mask) (process-mask actor-pause)) (go periscope-activate) @@ -1392,8 +1392,8 @@ ;; failed to figure out what this is: (defstate periscope-wait-for-player (periscope) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (when (and *target* (not (and (logtest? (-> *target* control unknown-surface00 flags) (surface-flags jump)) (zero? (logand (-> *target* control status) (cshape-moving-flags onsurf))) @@ -1401,7 +1401,7 @@ ) ) (when ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 1) ) @@ -1882,7 +1882,7 @@ (defstate reflector-origin-idle (reflector-origin) :code (behavior () (reflector-origin-update (-> self blocker)) - (while (zero? (logand (-> self blocker extra perm status) (entity-perm-status complete))) + (while (not (logtest? (-> self blocker extra perm status) (entity-perm-status complete))) (suspend) ) (let ((a1-0 (new 'stack-no-clear 'event-message-block))) @@ -1946,8 +1946,8 @@ ;; failed to figure out what this is: (defstate reflector-mirror-idle (reflector-mirror) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (sound-play "mirror-smash") (go reflector-mirror-broken #f) diff --git a/test/decompiler/reference/jak1/levels/jungle/jungle-obs_REF.gc b/test/decompiler/reference/jak1/levels/jungle/jungle-obs_REF.gc index 31bcd57ddd..049d5484b7 100644 --- a/test/decompiler/reference/jak1/levels/jungle/jungle-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/jungle-obs_REF.gc @@ -58,9 +58,9 @@ ;; failed to figure out what this is: (defstate idle (logtrap) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (or (= arg2 'touch) (= arg2 'attack)) - (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (or (= event-type 'touch) (= event-type 'attack)) + (send-event proc 'attack (-> event param 0) (new 'static 'attack-info)) ) ) :code (behavior () @@ -210,8 +210,8 @@ ;; failed to figure out what this is: (defstate lurkerm-tall-sail-idle (lurkerm-tall-sail) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'stop) (process-entity-status! self (entity-perm-status complete) #t) (set! (-> self speed) 0.0) @@ -316,8 +316,8 @@ ;; failed to figure out what this is: (defstate lurkerm-short-sail-idle (lurkerm-short-sail) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'stop) (process-entity-status! self (entity-perm-status complete) #t) (set! (-> self speed) 0.0) @@ -445,8 +445,8 @@ ;; failed to figure out what this is: (defstate lurkerm-piston-idle (lurkerm-piston) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'stop) (process-entity-status! self (entity-perm-status complete) #t) (set! (-> self speed) 0.0) @@ -572,8 +572,8 @@ ;; failed to figure out what this is: (defstate accordian-idle (accordian) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'stop) (process-entity-status! self (entity-perm-status complete) #t) (set! (-> self speed) 0.0) @@ -750,8 +750,8 @@ ;; failed to figure out what this is: (defstate precurbridge-idle (precurbridge) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('go) (go precurbridge-activate) ) @@ -837,12 +837,12 @@ ;; failed to figure out what this is: (defstate precurbridge-active (precurbridge) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'bonk) - (let* ((gp-0 (the-as object (-> arg3 param 0))) + (let* ((gp-0 (the-as object (-> event param 0))) (a0-2 (-> (the-as touching-shapes-entry gp-0) head)) (s5-0 (-> self root-override)) ) diff --git a/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc b/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc index c3ecbf09c4..22e186ec17 100644 --- a/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc @@ -198,12 +198,12 @@ ;; failed to figure out what this is: (defstate eggtop-idle (eggtop) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (case (-> arg3 param 0) + (case (-> event param 0) (('pickup) - (if (type-type? (-> arg0 type) fuel-cell) + (if (type-type? (-> proc type) fuel-cell) (save-reminder (get-task-control (-> self entity extra perm task)) 1 0) ) ) diff --git a/test/decompiler/reference/jak1/levels/jungleb/plant-boss_REF.gc b/test/decompiler/reference/jak1/levels/jungleb/plant-boss_REF.gc index d6a96d46c8..d48e5a5f99 100644 --- a/test/decompiler/reference/jak1/levels/jungleb/plant-boss_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungleb/plant-boss_REF.gc @@ -289,13 +289,13 @@ ;; failed to figure out what this is: (defstate plant-boss-arm-idle (plant-boss-arm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide 'die) - (go plant-boss-arm-die (the-as symbol (-> arg3 param 0))) + (go plant-boss-arm-die (the-as symbol (-> event param 0))) ) (('hit) - (go plant-boss-arm-hit (the-as basic (-> arg3 param 0))) + (go plant-boss-arm-hit (the-as basic (-> event param 0))) ) ) ) @@ -407,16 +407,16 @@ ;; failed to figure out what this is: (defstate plant-boss-back-arms-idle (plant-boss-arm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (or (= arg2 'touch) (= arg2 'attack)) - (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (or (= event-type 'touch) (= event-type 'attack)) + (send-event proc 'attack (-> event param 0) (new 'static 'attack-info)) ) (cond - ((= arg2 'hit) - (go plant-boss-back-arms-hit (the-as symbol (-> arg3 param 0))) + ((= event-type 'hit) + (go plant-boss-back-arms-hit (the-as symbol (-> event param 0))) ) - ((= arg2 'die) - (go plant-boss-back-arms-die (the-as symbol (-> arg3 param 0))) + ((= event-type 'die) + (go plant-boss-back-arms-die (the-as symbol (-> event param 0))) ) ) ) @@ -502,13 +502,13 @@ ;; failed to figure out what this is: (defstate plant-boss-vine-idle (plant-boss-arm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide 'die) - (go plant-boss-vine-die (the-as symbol (-> arg3 param 0))) + (go plant-boss-vine-die (the-as symbol (-> event param 0))) ) (('hit) - (go plant-boss-vine-hit (the-as basic (-> arg3 param 0))) + (go plant-boss-vine-hit (the-as basic (-> event param 0))) ) ) ) @@ -577,10 +577,10 @@ ;; failed to figure out what this is: (defstate plant-boss-root-idle (plant-boss-arm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide 'die) - (go plant-boss-root-die (the-as symbol (-> arg3 param 0))) + (go plant-boss-root-die (the-as symbol (-> event param 0))) ) ) ) @@ -742,13 +742,13 @@ ;; failed to figure out what this is: (defstate plant-boss-leaf-idle (plant-boss-leaf) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) - (go plant-boss-leaf-open (the-as symbol (-> arg3 param 0))) + (go plant-boss-leaf-open (the-as symbol (-> event param 0))) ) (('die) - (go plant-boss-leaf-die (the-as basic (-> arg3 param 0))) + (go plant-boss-leaf-die (the-as basic (-> event param 0))) ) ) ) @@ -782,13 +782,13 @@ ;; failed to figure out what this is: (defstate plant-boss-leaf-open (plant-boss-leaf) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('kill) (go plant-boss-leaf-close) ) (('die) - (go plant-boss-leaf-die (the-as basic (-> arg3 param 0))) + (go plant-boss-leaf-die (the-as basic (-> event param 0))) ) ) ) @@ -840,11 +840,11 @@ ;; failed to figure out what this is: (defstate plant-boss-leaf-open-idle (plant-boss-leaf) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('kill) (set! (-> self state-object) #t) - (let ((v0-0 (the-as object (+ (-> *display* base-frame-counter) (the-as time-frame (-> arg3 param 0)))))) + (let ((v0-0 (the-as object (+ (-> *display* base-frame-counter) (the-as time-frame (-> event param 0)))))) (set! (-> self state-time-frame) (the-as time-frame v0-0)) v0-0 ) @@ -855,7 +855,7 @@ ) ) (('die) - (go plant-boss-leaf-die (the-as basic (-> arg3 param 0))) + (go plant-boss-leaf-die (the-as basic (-> event param 0))) ) ) ) @@ -889,17 +889,17 @@ ;; failed to figure out what this is: (defstate plant-boss-leaf-bounce (plant-boss-leaf) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('kill) (set! (-> self state-object) #t) - (let ((v0-0 (the-as object (+ (-> *display* base-frame-counter) (the-as time-frame (-> arg3 param 0)))))) + (let ((v0-0 (the-as object (+ (-> *display* base-frame-counter) (the-as time-frame (-> event param 0)))))) (set! (-> self state-time-frame) (the-as time-frame v0-0)) v0-0 ) ) (('die) - (go plant-boss-leaf-die (the-as basic (-> arg3 param 0))) + (go plant-boss-leaf-die (the-as basic (-> event param 0))) ) ) ) @@ -932,10 +932,10 @@ ;; failed to figure out what this is: (defstate plant-boss-leaf-close (plant-boss-leaf) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('die) - (go plant-boss-leaf-die (the-as basic (-> arg3 param 0))) + (go plant-boss-leaf-die (the-as basic (-> event param 0))) ) ) ) @@ -1325,25 +1325,25 @@ ;; failed to figure out what this is: (defstate plant-boss-vulnerable (plant-boss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (when ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 1) ) (send-event - arg0 + proc 'shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 2)) (shove-back (meters 6)))) ) - (go plant-boss-hit (the-as symbol (-> arg3 param 1))) + (go plant-boss-hit (the-as symbol (-> event param 1))) ) ) (else - (plant-boss-generic-event-handler arg0 arg1 arg2 arg3) + (plant-boss-generic-event-handler proc arg1 event-type event) ) ) ) @@ -1425,17 +1425,17 @@ ;; failed to figure out what this is: (defstate plant-boss-attack (plant-boss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) (when (and ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 1) ) (not (ja-group? plant-boss-main-vulnerable2idle-ja)) ) - (when (send-event arg0 'attack-or-shove (-> arg3 param 0) (static-attack-info ((mode 'plant-boss)))) + (when (send-event proc 'attack-or-shove (-> event param 0) (static-attack-info ((mode 'plant-boss)))) (let ((v0-1 (the-as object #t))) (set! (-> self ate) (the-as symbol v0-1)) v0-1 @@ -1444,7 +1444,7 @@ ) ) (else - (plant-boss-default-event-handler arg0 arg1 arg2 arg3) + (plant-boss-default-event-handler proc arg1 event-type event) ) ) ) @@ -1778,20 +1778,20 @@ ;; failed to figure out what this is: (defstate plant-boss-dead-idle (plant-boss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('bonk) (go plant-boss-dead-bounce (lerp-scale (the-as float 0.1) (the-as float 1.0) - (the-as float (-> arg3 param 1)) + (the-as float (-> event param 1)) (the-as float 40960.0) (the-as float 81920.0) ) ) ) (else - (plant-boss-generic-event-handler arg0 arg1 arg2 arg3) + (plant-boss-generic-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/jungleb/plat-flip_REF.gc b/test/decompiler/reference/jak1/levels/jungleb/plat-flip_REF.gc index 6c8cc5c475..1c1db95697 100644 --- a/test/decompiler/reference/jak1/levels/jungleb/plat-flip_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungleb/plat-flip_REF.gc @@ -50,14 +50,14 @@ ;; failed to figure out what this is: (defstate plat-flip-idle (plat-flip) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (activate! (-> self smush) -1.0 90 300 1.0 1.0) ) ((= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) (the-as smush-control #f) ) ) diff --git a/test/decompiler/reference/jak1/levels/lavatube/lavatube-energy_REF.gc b/test/decompiler/reference/jak1/levels/lavatube/lavatube-energy_REF.gc index bd0d54f359..f73741f004 100644 --- a/test/decompiler/reference/jak1/levels/lavatube/lavatube-energy_REF.gc +++ b/test/decompiler/reference/jak1/levels/lavatube/lavatube-energy_REF.gc @@ -710,8 +710,8 @@ ;; failed to figure out what this is: (defstate energybase-idle (energybase) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('stop) (go energybase-stopping) ) @@ -861,10 +861,10 @@ ;; failed to figure out what this is: (defstate energyball-idle (energyball) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'attack) - (when (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (when (and (>= arg1 2) (= (-> event param 1) 'eco-yellow)) (increment-success-for-hint (game-text-id lavatube-balls)) (sound-play "dcrate-break") (process-spawn @@ -1034,8 +1034,8 @@ ;; failed to figure out what this is: (defstate energyarm-no-ball (energyarm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('stop) (go energyarm-stop) ) @@ -1118,8 +1118,8 @@ ;; failed to figure out what this is: (defstate energyarm-idle (energyarm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('stop) (go energyarm-stop) ) @@ -1350,8 +1350,8 @@ ;; failed to figure out what this is: (defstate energyhub-stop (energyhub) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'flash) (set! (-> self palette-val) 1.9921875) ) @@ -1432,8 +1432,8 @@ ;; failed to figure out what this is: (defstate energyhub-idle (energyhub) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'flash) (set! (-> self palette-val) 1.9921875) ) diff --git a/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc b/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc index f1d8b3e1ca..6e55b7599f 100644 --- a/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc @@ -622,26 +622,26 @@ ;; failed to figure out what this is: (defstate darkecobarrel-mover-move (darkecobarrel-mover) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) (cond - ((= arg0 *target*) - (let ((s5-0 (-> arg3 param 0))) + ((= proc *target*) + (let ((s5-0 (-> event param 0))) (if (and s5-0 ((method-of-type touching-shapes-entry prims-touching?) (the-as touching-shapes-entry s5-0) (-> self root-override) (the-as uint 1) ) - (send-event arg0 'attack-invinc s5-0 (static-attack-info ((mode 'death)))) + (send-event proc 'attack-invinc s5-0 (static-attack-info ((mode 'death)))) ) (go darkecobarrel-mover-die) ) ) ) ((>= arg1 2) - (case (-> arg3 param 1) + (case (-> event param 1) (('eco-yellow) (+! (-> self hits) 1) (cond @@ -649,8 +649,8 @@ (go darkecobarrel-mover-die) ) (else - (let ((v1-17 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) - arg0 + (let ((v1-17 (if (and (nonzero? proc) (type-type? (-> proc type) process-drawable)) + proc ) ) (gp-1 (new 'stack-no-clear 'vector)) @@ -1194,10 +1194,10 @@ ;; failed to figure out what this is: (defstate idle (chainmine) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack 'touch) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'deadly)))) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'deadly)))) (go-virtual die) ) ) @@ -1380,16 +1380,16 @@ ;; failed to figure out what this is: (defstate idle (lavaballoon) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (send-event arg0 'heat -10.0) + (send-event proc 'heat -10.0) (go-virtual die) ) ) ) :trans (behavior () - (when (zero? (logand (-> self path flags) (path-control-flag not-found))) + (when (not (logtest? (-> self path flags) (path-control-flag not-found))) (let ((f0-4 (* 0.5 (+ 1.0 (sin (* (-> self move-per-tick) (the float (-> *display* base-frame-counter)))))))) (eval-path-curve! (-> self path) (-> self root-override trans) f0-4 'interp) ) @@ -1430,7 +1430,7 @@ (set! (-> obj root-override pause-adjust-distance) 122880.0) (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) - (when (zero? (logand (-> obj path flags) (path-control-flag not-found))) + (when (not (logtest? (-> obj path flags) (path-control-flag not-found))) (let ((f30-0 (res-lump-float (-> obj entity) 'speed :default 12288.0))) (set! (-> obj move-per-tick) (* 32768.0 (/ 1.0 (* 300.0 (path-distance (-> obj path)))) f30-0)) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc b/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc index 9735b0e74d..9bfd424253 100644 --- a/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc @@ -444,10 +444,10 @@ ;; failed to figure out what this is: (defstate dark-crystal-idle (dark-crystal) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (if (= (-> arg0 type) target) + (if (= (-> proc type) target) (level-hint-spawn (game-text-id cave-dark-crystals-flee) "sksp0334" diff --git a/test/decompiler/reference/jak1/levels/maincave/driller-lurker_REF.gc b/test/decompiler/reference/jak1/levels/maincave/driller-lurker_REF.gc index 61910078ea..b8688f9eb2 100644 --- a/test/decompiler/reference/jak1/levels/maincave/driller-lurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/driller-lurker_REF.gc @@ -538,10 +538,10 @@ ) (when (and (-> obj hit-player?) (or (not *target*) - (and (zero? (logand (-> *target* state-flags) + (and (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= (- (-> *display* base-frame-counter) (-> obj hit-player-time)) (seconds 0.05)) ) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc b/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc index a01b533541..a2265ee545 100644 --- a/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc @@ -816,7 +816,7 @@ ) (until (= a0-2 v1-1) (let ((a1-2 (ash 1 a0-2))) - (if (zero? (logand a1-2 arg1)) + (if (not (logtest? a1-2 arg1)) (return (the-as symbol a1-2)) ) ) @@ -919,14 +919,14 @@ ;; failed to figure out what this is: (defstate gnawer-chewing-on-post (gnawer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) - (if (= (-> arg0 type) target) + (if (= (-> proc type) target) (send-event - arg0 + proc 'shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 1.5)) (shove-back (meters 2.5)))) ) ) @@ -1074,26 +1074,26 @@ ;; failed to figure out what this is: (defstate gnawer-run (gnawer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('touch) - (if (= (-> arg0 type) target) + (if (= (-> proc type) target) (send-event - arg0 + proc 'shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 1.5)) (shove-back (meters 2.5)))) ) ) ) (('attack) (cond - ((= (-> arg0 type) target) + ((= (-> proc type) target) (send-event - arg0 + proc 'attack - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 1.5)) (shove-back (meters 2.5)))) ) ) @@ -1101,7 +1101,7 @@ (if (< (- (-> *display* base-frame-counter) (-> self last-hit-time)) (seconds 0.5)) (return #f) ) - (let* ((a2-1 (the-as object (-> arg3 param 0))) + (let* ((a2-1 (the-as object (-> event param 0))) (v1-19 (-> (get-touched-prim (-> (the-as touching-shapes-entry a2-1) head) (-> self root-override) @@ -1223,11 +1223,11 @@ ;; failed to figure out what this is: (defstate gnawer-dying-give-pickups (gnawer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (if (and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) - (dummy-30 self (the-as process-drawable arg0)) + (if (and (= (-> proc type) money) (= (-> event param 0) 'pickup)) + (dummy-30 self (the-as process-drawable proc)) ) ) ) @@ -1295,19 +1295,19 @@ ;; failed to figure out what this is: (defstate gnawer-give-fuel-cell (gnawer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) (cond - ((and (= (-> arg0 type) maincavecam) (= (-> arg3 param 0) 'die)) + ((and (= (-> proc type) maincavecam) (= (-> event param 0) 'die)) (process-entity-status! self (entity-perm-status bit-3) #f) (let ((v0-0 (the-as uint (logior (-> self mask) (process-mask actor-pause))))) (set! (-> self mask) (the-as process-mask v0-0)) v0-0 ) ) - ((and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) - (dummy-30 self (the-as process-drawable arg0)) + ((and (= (-> proc type) money) (= (-> event param 0) 'pickup)) + (dummy-30 self (the-as process-drawable proc)) ) ) ) @@ -1364,11 +1364,11 @@ ;; failed to figure out what this is: (defstate gnawer-put-items-at-dest (gnawer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (if (and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) - (dummy-30 self (the-as process-drawable arg0)) + (if (and (= (-> proc type) money) (= (-> event param 0) 'pickup)) + (dummy-30 self (the-as process-drawable proc)) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/maincave-obs_REF.gc b/test/decompiler/reference/jak1/levels/maincave/maincave-obs_REF.gc index 9d59b38bea..3d2f91cd64 100644 --- a/test/decompiler/reference/jak1/levels/maincave/maincave-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/maincave-obs_REF.gc @@ -161,12 +161,12 @@ ;; failed to figure out what this is: (defstate cavecrusher-idle (cavecrusher) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack)) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (if ((method-of-type touching-shapes-entry prims-touching-action?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> *target* control) (collide-action solid) (collide-action) @@ -263,12 +263,12 @@ ;; failed to figure out what this is: (defstate idle (cavetrapdoor) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (when (>= (- (-> (target-pos 0) y) (-> self root-override trans y)) 409.6) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) (go-virtual trigger) ) ) @@ -495,12 +495,12 @@ ;; failed to figure out what this is: (defstate caveflamepots-active (caveflamepots) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (when ((method-of-type touching-shapes-entry prims-touching-action?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> *target* control) (collide-action solid) (collide-action) @@ -512,15 +512,15 @@ (< 0.75 (-> *target* control poly-normal y)) ) (send-event - arg0 + proc 'attack-or-shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((mode 'burn) (vector (-> s4-0 vector)) (shove-up (-> s4-0 shove-up)))) ) (send-event - arg0 + proc 'attack-or-shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((mode 'burn) (shove-up (meters 0)) (shove-back (meters 2)) @@ -1065,8 +1065,8 @@ ;; failed to figure out what this is: (defstate caveelevator-cycle-active (caveelevator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (activate! (-> self smush) -1.0 60 150 1.0 1.0) ) @@ -1108,14 +1108,14 @@ ;; failed to figure out what this is: (defstate caveelevator-one-way-idle-start (caveelevator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('bonk) (activate! (-> self smush) -1.0 60 150 1.0 1.0) (go caveelevator-one-way-travel-to-end) ) (('attack 'touch) - (if (and (= (-> arg0 type) target) + (if (and (= (-> proc type) target) (>= 8192.0 (vector-vector-xz-distance (target-pos 0) (-> self root-override trans))) ) (go caveelevator-one-way-travel-to-end) @@ -1148,8 +1148,8 @@ ;; failed to figure out what this is: (defstate caveelevator-one-way-travel-to-end (caveelevator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (activate! (-> self smush) -1.0 60 150 1.0 1.0) ) @@ -1188,8 +1188,8 @@ ;; failed to figure out what this is: (defstate caveelevator-one-way-idle-end (caveelevator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (activate! (-> self smush) -1.0 60 150 1.0 1.0) ) @@ -1231,8 +1231,8 @@ ;; failed to figure out what this is: (defstate caveelevator-one-way-travel-to-start (caveelevator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (activate! (-> self smush) -1.0 60 150 1.0 1.0) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc b/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc index b54c073e80..395eea89e9 100644 --- a/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc @@ -242,8 +242,8 @@ ;; failed to figure out what this is: (defstate mother-spider-egg-falling (mother-spider-egg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) (go mother-spider-egg-die-while-falling) ) @@ -288,14 +288,14 @@ ;; failed to figure out what this is: (defstate mother-spider-egg-on-ground (mother-spider-egg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'touch) (send-shove-back (-> self root-override) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + proc + (the-as touching-shapes-entry (-> event param 0)) 0.7 6144.0 16384.0 diff --git a/test/decompiler/reference/jak1/levels/maincave/mother-spider_REF.gc b/test/decompiler/reference/jak1/levels/maincave/mother-spider_REF.gc index ef171eabf6..23d6174ad7 100644 --- a/test/decompiler/reference/jak1/levels/maincave/mother-spider_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/mother-spider_REF.gc @@ -1273,10 +1273,10 @@ (if (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.25)) (> (-> self birthing-counter) 0) (and (>= 49152.0 (- (-> self max-dist-from-anchor) (-> self dist-from-anchor))) - (zero? (logand (-> *target* state-flags) + (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (TODO-RENAME-21 (-> self nav) (-> self root-override trans)) ) ) @@ -1658,7 +1658,7 @@ ;; definition for method 12 of type mother-spider (defmethod run-logic? mother-spider ((obj mother-spider)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (< (vector-vector-xz-distance (-> obj root-override trans) (math-camera-pos)) (-> obj deactivate-xz-dist)) (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status no-skeleton-update))) diff --git a/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc b/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc index ff45efa8ff..1bb6efdb54 100644 --- a/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc @@ -922,8 +922,8 @@ ;; failed to figure out what this is: (defstate balloonlurker-pilot-idle (balloonlurker-pilot) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (send-event (ppointer->process (-> self parent-override)) 'die) (go balloonlurker-pilot-die) diff --git a/test/decompiler/reference/jak1/levels/misty/bonelurker_REF.gc b/test/decompiler/reference/jak1/levels/misty/bonelurker_REF.gc index 78e512b2cc..c7ec434d23 100644 --- a/test/decompiler/reference/jak1/levels/misty/bonelurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/bonelurker_REF.gc @@ -225,7 +225,7 @@ nav-enemy-default-event-handler ) :trans (behavior () ((-> (method-of-type nav-enemy nav-enemy-chase) trans)) - (if (and (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags navenmf6))) + (if (and (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags navenmf6))) (>= (- (-> *display* base-frame-counter) (-> self bump-player-time)) (seconds 0.5)) ) (logior! (-> self nav-enemy-flags) (nav-enemy-flags navenmf6)) diff --git a/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc b/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc index 4a489abb9a..26b0492c85 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc @@ -208,8 +208,8 @@ ;; failed to figure out what this is: (defstate keg-on-paddle (keg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('detach) (go keg-paddle-to-path) ) diff --git a/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc b/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc index fd5a9d83fb..7b0aa84451 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc @@ -1467,10 +1467,10 @@ ;; failed to figure out what this is: (defstate breakaway-idle (breakaway) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) (go breakaway-about-to-fall) ) ) @@ -2067,8 +2067,8 @@ ;; failed to figure out what this is: (defstate boat-fuelcell-idle (boat-fuelcell) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('task-complete) (set! (-> self play-cutscene?) #t) (process-entity-status! self (entity-perm-status complete) #t) diff --git a/test/decompiler/reference/jak1/levels/misty/misty-teetertotter_REF.gc b/test/decompiler/reference/jak1/levels/misty/misty-teetertotter_REF.gc index 95ad9a3870..d9a7869645 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-teetertotter_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-teetertotter_REF.gc @@ -49,10 +49,10 @@ ;; failed to figure out what this is: (defstate teetertotter-idle (teetertotter) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (case (-> arg3 param 1) + (case (-> event param 1) (('flop) (when (target-on-end-of-teetertotter? self) (set! (-> self in-launch-window) #f) @@ -88,21 +88,21 @@ ;; failed to figure out what this is: (defstate teetertotter-launch (teetertotter) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (the-as object - (when (= arg2 'touch) + (when (= event-type 'touch) (if (and ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root)) (the-as uint 1) ) (-> self rock-is-dangerous) ) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'deadly)))) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'deadly)))) ) (when (and ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root)) (the-as uint 2) ) @@ -111,7 +111,7 @@ (-> self in-launch-window) ) (when (send-event - arg0 + proc 'shove #f (static-attack-info ((shove-back (meters 0)) (shove-up (meters 13)) (angle 'jump) (control 1.0))) diff --git a/test/decompiler/reference/jak1/levels/misty/misty-warehouse_REF.gc b/test/decompiler/reference/jak1/levels/misty/misty-warehouse_REF.gc index bccae768b3..457ea466ab 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-warehouse_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-warehouse_REF.gc @@ -38,8 +38,8 @@ ;; failed to figure out what this is: (defstate silostep-idle (silostep) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go silostep-camera) ) diff --git a/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc b/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc index 62f6056c73..8dde56e3da 100644 --- a/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc @@ -719,8 +719,8 @@ ;; failed to figure out what this is: (defstate mistycannon-missile-idle (mistycannon-missile) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (go mistycannon-missile-explode) ) @@ -756,7 +756,7 @@ ) (restore-collide-with-as (-> self root-override)) (set-vector! (-> self root-override scale) 0.6 0.6 0.6 1.0) - (while (zero? (logand (-> self root-override status) (cshape-moving-flags onsurf))) + (while (not (logtest? (-> self root-override status) (cshape-moving-flags onsurf))) (if (and (zero? (-> self sfx)) (< (if *target* (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) @@ -894,10 +894,10 @@ ;; failed to figure out what this is: (defstate mistycannon-missile-explode (mistycannon-missile) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) - (let* ((s4-0 arg0) + (let* ((s4-0 proc) (v1-2 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) process-drawable)) s4-0 ) @@ -925,22 +925,22 @@ 0.0 ) (cond - ((= (-> arg0 type) target) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'explode)))) + ((= (-> proc type) target) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'explode)))) ) (else (let ((a1-4 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-4 from) self) (set! (-> a1-4 num-params) 4) (set! (-> a1-4 message) 'attack) - (set! (-> a1-4 param 0) (-> arg3 param 0)) + (set! (-> a1-4 param 0) (-> event param 0)) (set! (-> a1-4 param 1) (the-as uint 'explode)) (let ((v1-18 (+ *global-attack-id* 1))) (set! *global-attack-id* v1-18) (set! (-> a1-4 param 2) (the-as uint v1-18)) ) (set! (-> a1-4 param 3) (the-as uint 0)) - (send-event-function arg0 a1-4) + (send-event-function proc a1-4) ) ) ) @@ -1605,11 +1605,11 @@ ;; failed to figure out what this is: (defstate mistycannon-waiting-for-player (mistycannon) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (when ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self root-override) (the-as uint 1) ) @@ -1688,7 +1688,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -1712,8 +1712,8 @@ ;; failed to figure out what this is: (defstate mistycannon-player-control (mistycannon) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('change-mode) (send-event *camera* 'change-state cam-mistycannon 0) ) @@ -1771,9 +1771,7 @@ ) (sound-play "cannon-charge" :id (-> self sound-id) :pitch (* 0.008 (the float gp-0))) ) - (when (or (= gp-0 300) - (and (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) (nonzero? gp-0)) - ) + (when (or (= gp-0 300) (and (not (cpad-hold? 0 x)) (nonzero? gp-0))) (let ((gp-1 (+ 50 (the int (* 0.16666667 (the float gp-0)))))) (level-hint-spawn (game-text-id sidekick-mistycannon) @@ -1801,7 +1799,7 @@ ) ) ) - (if (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) + (if (not (cpad-hold? 0 x)) (set! s5-0 0) ) (suspend) @@ -1814,11 +1812,11 @@ ;; failed to figure out what this is: (defstate mistycannon-waiting-for-player-to-fuck-off (mistycannon) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) (when ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self root-override) (the-as uint 1) ) diff --git a/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc b/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc index b735f5ad3f..ff544708e6 100644 --- a/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc @@ -319,26 +319,26 @@ ;; failed to figure out what this is: (defstate quicksandlurker-missile-idle (quicksandlurker-missile) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (when (cond - ((= (-> arg0 type) target) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'explode)))) + ((= (-> proc type) target) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'explode)))) ) (else (let ((a1-4 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-4 from) self) (set! (-> a1-4 num-params) 4) (set! (-> a1-4 message) 'attack) - (set! (-> a1-4 param 0) (-> arg3 param 0)) + (set! (-> a1-4 param 0) (-> event param 0)) (set! (-> a1-4 param 1) (the-as uint 'explode)) (let ((v1-12 (+ *global-attack-id* 1))) (set! *global-attack-id* v1-12) (set! (-> a1-4 param 2) (the-as uint v1-12)) ) (set! (-> a1-4 param 3) (the-as uint 0)) - (send-event-function arg0 a1-4) + (send-event-function proc a1-4) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc b/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc index 02997a808f..54b6076315 100644 --- a/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc @@ -1500,8 +1500,8 @@ ;; failed to figure out what this is: (defstate play-anim (sequenceB) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('offset-army) (dotimes (gp-0 9) (let ((v1-3 (-> *lurker-army* gp-0))) diff --git a/test/decompiler/reference/jak1/levels/ogre/flying-lurker_REF.gc b/test/decompiler/reference/jak1/levels/ogre/flying-lurker_REF.gc index be2509c17c..a2597e5cd6 100644 --- a/test/decompiler/reference/jak1/levels/ogre/flying-lurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/ogre/flying-lurker_REF.gc @@ -172,8 +172,8 @@ ;; failed to figure out what this is: (defstate plunger-lurker-flee (plunger-lurker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'attack) (let ((v0-0 #t)) (set! (-> self got-hit) v0-0) @@ -231,8 +231,8 @@ ;; failed to figure out what this is: (defstate plunger-lurker-idle (plunger-lurker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('plunge) (logclear! (-> self mask) (process-mask actor-pause)) (go plunger-lurker-plunge) @@ -641,8 +641,8 @@ ;; failed to figure out what this is: (defstate flying-lurker-fly (flying-lurker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'clone-and-kill-links) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) @@ -660,20 +660,20 @@ ) ) ) - (go flying-lurker-clone (the-as handle (-> arg3 param 0)) "") + (go flying-lurker-clone (the-as handle (-> event param 0)) "") ) ((= v1-0 'die) (let ((v1-7 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-7 from) arg0) + (set! (-> v1-7 from) proc) (set! (-> v1-7 num-params) arg1) - (set! (-> v1-7 message) arg2) - (set! (-> v1-7 param 0) (-> arg3 param 0)) - (set! (-> v1-7 param 1) (-> arg3 param 1)) - (set! (-> v1-7 param 2) (-> arg3 param 2)) - (set! (-> v1-7 param 3) (-> arg3 param 3)) - (set! (-> v1-7 param 4) (-> arg3 param 4)) - (set! (-> v1-7 param 5) (-> arg3 param 5)) - (set! (-> v1-7 param 6) (-> arg3 param 6)) + (set! (-> v1-7 message) event-type) + (set! (-> v1-7 param 0) (-> event param 0)) + (set! (-> v1-7 param 1) (-> event param 1)) + (set! (-> v1-7 param 2) (-> event param 2)) + (set! (-> v1-7 param 3) (-> event param 3)) + (set! (-> v1-7 param 4) (-> event param 4)) + (set! (-> v1-7 param 5) (-> event param 5)) + (set! (-> v1-7 param 6) (-> event param 6)) (let ((t9-2 send-event-function) (a1-3 (-> self link next)) ) @@ -690,16 +690,16 @@ ) ((= v1-0 'sleep) (let ((v1-12 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-12 from) arg0) + (set! (-> v1-12 from) proc) (set! (-> v1-12 num-params) arg1) - (set! (-> v1-12 message) arg2) - (set! (-> v1-12 param 0) (-> arg3 param 0)) - (set! (-> v1-12 param 1) (-> arg3 param 1)) - (set! (-> v1-12 param 2) (-> arg3 param 2)) - (set! (-> v1-12 param 3) (-> arg3 param 3)) - (set! (-> v1-12 param 4) (-> arg3 param 4)) - (set! (-> v1-12 param 5) (-> arg3 param 5)) - (set! (-> v1-12 param 6) (-> arg3 param 6)) + (set! (-> v1-12 message) event-type) + (set! (-> v1-12 param 0) (-> event param 0)) + (set! (-> v1-12 param 1) (-> event param 1)) + (set! (-> v1-12 param 2) (-> event param 2)) + (set! (-> v1-12 param 3) (-> event param 3)) + (set! (-> v1-12 param 4) (-> event param 4)) + (set! (-> v1-12 param 5) (-> event param 5)) + (set! (-> v1-12 param 6) (-> event param 6)) (let ((t9-5 send-event-function) (a1-5 (-> self link next)) ) @@ -715,16 +715,16 @@ ) ((= v1-0 'reset) (let ((v1-15 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-15 from) arg0) + (set! (-> v1-15 from) proc) (set! (-> v1-15 num-params) arg1) - (set! (-> v1-15 message) arg2) - (set! (-> v1-15 param 0) (-> arg3 param 0)) - (set! (-> v1-15 param 1) (-> arg3 param 1)) - (set! (-> v1-15 param 2) (-> arg3 param 2)) - (set! (-> v1-15 param 3) (-> arg3 param 3)) - (set! (-> v1-15 param 4) (-> arg3 param 4)) - (set! (-> v1-15 param 5) (-> arg3 param 5)) - (set! (-> v1-15 param 6) (-> arg3 param 6)) + (set! (-> v1-15 message) event-type) + (set! (-> v1-15 param 0) (-> event param 0)) + (set! (-> v1-15 param 1) (-> event param 1)) + (set! (-> v1-15 param 2) (-> event param 2)) + (set! (-> v1-15 param 3) (-> event param 3)) + (set! (-> v1-15 param 4) (-> event param 4)) + (set! (-> v1-15 param 5) (-> event param 5)) + (set! (-> v1-15 param 6) (-> event param 6)) (let ((t9-7 send-event-function) (a1-7 (-> self link next)) ) @@ -1039,21 +1039,21 @@ ;; failed to figure out what this is: (defstate flying-lurker-clone (flying-lurker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'die) (let ((v1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-1 from) arg0) + (set! (-> v1-1 from) proc) (set! (-> v1-1 num-params) arg1) - (set! (-> v1-1 message) arg2) - (set! (-> v1-1 param 0) (-> arg3 param 0)) - (set! (-> v1-1 param 1) (-> arg3 param 1)) - (set! (-> v1-1 param 2) (-> arg3 param 2)) - (set! (-> v1-1 param 3) (-> arg3 param 3)) - (set! (-> v1-1 param 4) (-> arg3 param 4)) - (set! (-> v1-1 param 5) (-> arg3 param 5)) - (set! (-> v1-1 param 6) (-> arg3 param 6)) + (set! (-> v1-1 message) event-type) + (set! (-> v1-1 param 0) (-> event param 0)) + (set! (-> v1-1 param 1) (-> event param 1)) + (set! (-> v1-1 param 2) (-> event param 2)) + (set! (-> v1-1 param 3) (-> event param 3)) + (set! (-> v1-1 param 4) (-> event param 4)) + (set! (-> v1-1 param 5) (-> event param 5)) + (set! (-> v1-1 param 6) (-> event param 6)) (let ((t9-0 send-event-function) (a1-1 (-> self link next)) ) @@ -1070,16 +1070,16 @@ ) ((= v1-0 'sleep) (let ((v1-6 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-6 from) arg0) + (set! (-> v1-6 from) proc) (set! (-> v1-6 num-params) arg1) - (set! (-> v1-6 message) arg2) - (set! (-> v1-6 param 0) (-> arg3 param 0)) - (set! (-> v1-6 param 1) (-> arg3 param 1)) - (set! (-> v1-6 param 2) (-> arg3 param 2)) - (set! (-> v1-6 param 3) (-> arg3 param 3)) - (set! (-> v1-6 param 4) (-> arg3 param 4)) - (set! (-> v1-6 param 5) (-> arg3 param 5)) - (set! (-> v1-6 param 6) (-> arg3 param 6)) + (set! (-> v1-6 message) event-type) + (set! (-> v1-6 param 0) (-> event param 0)) + (set! (-> v1-6 param 1) (-> event param 1)) + (set! (-> v1-6 param 2) (-> event param 2)) + (set! (-> v1-6 param 3) (-> event param 3)) + (set! (-> v1-6 param 4) (-> event param 4)) + (set! (-> v1-6 param 5) (-> event param 5)) + (set! (-> v1-6 param 6) (-> event param 6)) (let ((t9-3 send-event-function) (a1-3 (-> self link next)) ) @@ -1095,16 +1095,16 @@ ) ((= v1-0 'reset) (let ((v1-9 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-9 from) arg0) + (set! (-> v1-9 from) proc) (set! (-> v1-9 num-params) arg1) - (set! (-> v1-9 message) arg2) - (set! (-> v1-9 param 0) (-> arg3 param 0)) - (set! (-> v1-9 param 1) (-> arg3 param 1)) - (set! (-> v1-9 param 2) (-> arg3 param 2)) - (set! (-> v1-9 param 3) (-> arg3 param 3)) - (set! (-> v1-9 param 4) (-> arg3 param 4)) - (set! (-> v1-9 param 5) (-> arg3 param 5)) - (set! (-> v1-9 param 6) (-> arg3 param 6)) + (set! (-> v1-9 message) event-type) + (set! (-> v1-9 param 0) (-> event param 0)) + (set! (-> v1-9 param 1) (-> event param 1)) + (set! (-> v1-9 param 2) (-> event param 2)) + (set! (-> v1-9 param 3) (-> event param 3)) + (set! (-> v1-9 param 4) (-> event param 4)) + (set! (-> v1-9 param 5) (-> event param 5)) + (set! (-> v1-9 param 6) (-> event param 6)) (let ((t9-5 send-event-function) (a1-5 (-> self link next)) ) @@ -1119,7 +1119,7 @@ (deactivate self) ) (else - (flying-lurker-handler arg0 arg1 arg2 arg3) + (flying-lurker-handler proc arg1 event-type event) ) ) ) @@ -1137,23 +1137,23 @@ ;; failed to figure out what this is: (defstate flying-lurker-idle (flying-lurker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('saw-player) (set! (-> self take-off) #t) (when (-> self link prev) (entity-birth-no-kill (-> self link prev)) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) arg0) + (set! (-> a1-1 from) proc) (set! (-> a1-1 num-params) arg1) - (set! (-> a1-1 message) arg2) - (set! (-> a1-1 param 0) (-> arg3 param 0)) - (set! (-> a1-1 param 1) (-> arg3 param 1)) - (set! (-> a1-1 param 2) (-> arg3 param 2)) - (set! (-> a1-1 param 3) (-> arg3 param 3)) - (set! (-> a1-1 param 4) (-> arg3 param 4)) - (set! (-> a1-1 param 5) (-> arg3 param 5)) - (set! (-> a1-1 param 6) (-> arg3 param 6)) + (set! (-> a1-1 message) event-type) + (set! (-> a1-1 param 0) (-> event param 0)) + (set! (-> a1-1 param 1) (-> event param 1)) + (set! (-> a1-1 param 2) (-> event param 2)) + (set! (-> a1-1 param 3) (-> event param 3)) + (set! (-> a1-1 param 4) (-> event param 4)) + (set! (-> a1-1 param 5) (-> event param 5)) + (set! (-> a1-1 param 6) (-> event param 6)) (let ((t9-1 send-event-function) (v1-13 (-> self link prev)) ) @@ -1174,8 +1174,8 @@ (set! (-> a1-2 from) self) (set! (-> a1-2 num-params) 2) (set! (-> a1-2 message) 'clone) - (set! (-> a1-2 param 0) (-> arg3 param 0)) - (set! (-> a1-2 param 1) (+ (-> arg3 param 1) -1)) + (set! (-> a1-2 param 0) (-> event param 0)) + (set! (-> a1-2 param 1) (+ (-> event param 1) -1)) (let ((t9-3 send-event-function) (v1-25 (-> self link next)) ) @@ -1188,17 +1188,17 @@ ) ) ) - (case (-> arg3 param 1) + (case (-> event param 1) ((2) - (go flying-lurker-clone (the-as handle (-> arg3 param 0)) "flying-lurker-b-") + (go flying-lurker-clone (the-as handle (-> event param 0)) "flying-lurker-b-") ) ((1) - (go flying-lurker-clone (the-as handle (-> arg3 param 0)) "flying-lurker-c-") + (go flying-lurker-clone (the-as handle (-> event param 0)) "flying-lurker-c-") ) ) ) (else - (flying-lurker-handler arg0 arg1 arg2 arg3) + (flying-lurker-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc b/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc index ed54ae5dc8..6aa3bc939a 100644 --- a/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc @@ -378,8 +378,8 @@ ;; failed to figure out what this is: (defstate idle (tntbarrel) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('die-big) (go-virtual die #t) ) @@ -387,7 +387,7 @@ (go-virtual die #f) ) (('attack 'touch) - (send-event arg0 'attack-invinc (-> arg3 param 0) (static-attack-info ((mode 'death)))) + (send-event proc 'attack-invinc (-> event param 0) (static-attack-info ((mode 'death)))) (go-virtual die #f) ) ) @@ -508,11 +508,11 @@ ;; failed to figure out what this is: (defstate rigid-body-platform-idle (ogre-plat) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'trigger) (set! (-> self triggered) (the-as entity-actor #t)) - (set! (-> self delay) (the-as time-frame (-> arg3 param 0))) + (set! (-> self delay) (the-as time-frame (-> event param 0))) (let ((v0-0 (-> *display* base-frame-counter))) (set! (-> self state-time) v0-0) v0-0 @@ -1087,8 +1087,8 @@ ;; failed to figure out what this is: (defstate ogre-bridge-activated (ogre-bridge) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('break) (+! (-> self dead-joint-count) 4) (go ogre-bridge-break) @@ -1115,12 +1115,12 @@ ;; failed to figure out what this is: (defstate ogre-bridge-break (ogre-bridge) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'effect) - (when (= (-> arg3 param 0) 'splash) + (when (= (-> event param 0) 'splash) (let ((gp-0 (new 'stack-no-clear 'vector))) - (let ((a1-1 (-> arg3 param 2))) + (let ((a1-1 (-> event param 2))) (set! (-> gp-0 quad) (-> self node-list data a1-1 bone transform vector 3 quad)) ) (set! (-> gp-0 y) 118784.0) @@ -1439,8 +1439,8 @@ ;; failed to figure out what this is: (defstate water-vol-idle (ogre-lava) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('submerge1) (set! (-> self anim) 3) (go-virtual water-vol-idle) @@ -1462,7 +1462,7 @@ (go-virtual water-vol-idle) ) (else - ((-> (method-of-type water-anim water-vol-idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type water-anim water-vol-idle) event) proc arg1 event-type event) ) ) ) @@ -1675,10 +1675,10 @@ ;; failed to figure out what this is: (defstate shortcut-boulder-idle (shortcut-boulder) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (if (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (if (and (>= arg1 2) (= (-> event param 1) 'eco-yellow)) (go shortcut-boulder-break) ) ) diff --git a/test/decompiler/reference/jak1/levels/ogre/ogreboss_REF.gc b/test/decompiler/reference/jak1/levels/ogre/ogreboss_REF.gc index 766f6fc39b..51cde1fc6b 100644 --- a/test/decompiler/reference/jak1/levels/ogre/ogreboss_REF.gc +++ b/test/decompiler/reference/jak1/levels/ogre/ogreboss_REF.gc @@ -212,37 +212,37 @@ ;; failed to figure out what this is: (defstate ogreboss-missile-impact (ogreboss-missile) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (cond (#f (cond - ((= (-> arg0 type) target) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'explode)))) + ((= (-> proc type) target) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'explode)))) ) (else (let ((a1-2 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-2 from) self) (set! (-> a1-2 num-params) 4) (set! (-> a1-2 message) 'attack) - (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 0) (-> event param 0)) (set! (-> a1-2 param 1) (the-as uint 'explode)) (let ((v1-12 (+ *global-attack-id* 1))) (set! *global-attack-id* v1-12) (set! (-> a1-2 param 2) (the-as uint v1-12)) ) (set! (-> a1-2 param 3) (the-as uint 0)) - (send-event-function arg0 a1-2) + (send-event-function proc a1-2) ) ) ) - (if (= (-> arg0 type) target) + (if (= (-> proc type) target) (send-event (ppointer->process (-> self parent-override)) 'victory) ) ) (else - (let* ((s4-0 arg0) + (let* ((s4-0 proc) (t1-0 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) target)) s4-0 ) @@ -280,7 +280,7 @@ (the-as rgba (new 'static 'rgba :g #xff :a #x80)) ) (when (>= f30-0 0.0) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'damage)))) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'damage)))) (send-event (ppointer->process (-> self parent-override)) 'victory) ) ) @@ -289,7 +289,7 @@ (else (let ((v1-37 (new 'stack-no-clear 'vector))) (set-vector! v1-37 0.0 -12288000.0 0.0 1.0) - (send-event arg0 'impulse v1-37) + (send-event proc 'impulse v1-37) ) ) ) @@ -524,8 +524,8 @@ ;; failed to figure out what this is: (defstate ogreboss-super-boulder-idle (ogreboss-super-boulder) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('speedup) (set! (-> self speed) (* 1.3 (-> self speed))) ) @@ -1558,8 +1558,8 @@ ;; failed to figure out what this is: (defstate ogreboss-stage1 (ogreboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('next-stage) (set! (-> self bridge-assembled) #t) (go ogreboss-stage2) diff --git a/test/decompiler/reference/jak1/levels/racer_common/collide-reaction-racer_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/collide-reaction-racer_REF.gc index 7e6a9bea72..5ee32fb224 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/collide-reaction-racer_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/collide-reaction-racer_REF.gc @@ -58,7 +58,7 @@ (if s3-1 (set! sv-104 (logior sv-104 2)) ) - (when (zero? (logand (-> arg0 prev-status) (cshape-moving-flags onsurf))) + (when (not (logtest? (-> arg0 prev-status) (cshape-moving-flags onsurf))) (set! (-> arg0 ground-impact-vel) (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal)))) (set! sv-96 (logior sv-96 2048)) (when (not s3-1) @@ -162,7 +162,7 @@ ) (set! sv-96 (logior sv-96 2)) (set! (-> arg0 ground-touch-point w) 0.0) - (when (zero? (logand sv-104 15)) + (when (not (logtest? sv-104 15)) (set! sv-96 (logior sv-96 2)) (set! (-> arg0 ground-poly-normal quad) (-> arg0 poly-normal quad)) (set! (-> arg0 unknown-vector53 quad) (-> sv-84 quad)) diff --git a/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc index d397e38775..1eab334a4f 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc @@ -154,7 +154,7 @@ (set! (-> arg0 vector 2 y) (- 128.0 (* 640.0 (+ -0.6 arg1)))) (set! (-> arg0 vector 2 z) 0.0) ) - ((zero? (logand (-> *display* integral-frame-counter) 8)) + ((not (logtest? (-> *display* integral-frame-counter) 8)) (set! (-> arg0 vector 2 x) 128.0) (set! (-> arg0 vector 2 y) 0.0) (set! (-> arg0 vector 2 z) 0.0) diff --git a/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc index 6dcccf3852..c5cf4bf0f5 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc @@ -3,38 +3,38 @@ ;; failed to figure out what this is: (defstate target-racing-start (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) 'racer ) - ((and (= arg2 'get-pickup) (= (-> arg3 param 0) 3)) + ((and (= event-type 'get-pickup) (= (-> event param 0) 3)) (if (>= (- (-> *display* base-frame-counter) (-> self racer boost-time)) (seconds 1)) - (send-event self 'boost (fmax 1.0 (fmin 2.0 (the-as float (-> arg3 param 1))))) + (send-event self 'boost (fmax 1.0 (fmin 2.0 (the-as float (-> event param 1))))) ) ) (else - (case arg2 + (case event-type (('end-mode) - (go target-racing-get-off (process->handle arg0)) + (go target-racing-get-off (process->handle proc)) ) (('touched) - (send-event arg0 'attack (-> arg3 param 0) 'racer 0 0) - (when (and (type-type? (-> arg0 type) babak) (< 40960.0 (-> self control unknown-float01))) + (send-event proc 'attack (-> event param 0) 'racer 0 0) + (when (and (type-type? (-> proc type) babak) (< 40960.0 (-> self control unknown-float01))) (let ((f0-5 (lerp-scale 16384.0 32768.0 (-> self control unknown-float01) 40960.0 (-> self racer transv-max)))) (go target-racing-jump f0-5 f0-5 #f) ) ) ) (('attack 'attack-or-shove 'attack-invinc) - (let ((v1-27 (the-as attack-info (-> arg3 param 1)))) + (let ((v1-27 (the-as attack-info (-> event param 1)))) (if (not (and (logtest? (-> v1-27 mask) (attack-mask mode)) (or (= (-> v1-27 mode) 'burn) (= (-> v1-27 mode) 'burnup))) ) (target-attacked - arg2 - (the-as attack-info (-> arg3 param 1)) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + event-type + (the-as attack-info (-> event param 1)) + proc + (the-as touching-shapes-entry (-> event param 0)) (the-as (state symbol attack-info target) target-racing-hit) ) ) @@ -42,7 +42,7 @@ ) (('heat) (set! (-> self racer heat) - (fmax 0.0 (fmin (+ (-> self racer heat) (the-as float (-> arg3 param 0))) (-> *RACER-bank* heat-max))) + (fmax 0.0 (fmin (+ (-> self racer heat) (the-as float (-> event param 0))) (-> *RACER-bank* heat-max))) ) ) (('boost) @@ -52,7 +52,7 @@ (set! (-> self racer boost-level) (seek (-> self racer boost-level) (-> *RACER-bank* boost-level-max) - (* (-> *RACER-bank* boost-level-inc) (the-as float (-> arg3 param 0))) + (* (-> *RACER-bank* boost-level-inc) (the-as float (-> event param 0))) ) ) ) @@ -60,20 +60,20 @@ (go target-racing-smack (-> self control unknown-float01) #t) ) (('jump) - (go target-racing-jump (the-as float (-> arg3 param 0)) (the-as float (-> arg3 param 1)) #f) + (go target-racing-jump (the-as float (-> event param 0)) (the-as float (-> event param 1)) #f) ) (('change-mode) - (case (-> arg3 param 0) + (case (-> event param 0) (('grab) (go target-racing-grab) ) ) ) (('clone-anim) - (go target-racing-clone-anim (process->handle (the-as process (-> arg3 param 0)))) + (go target-racing-clone-anim (process->handle (the-as process (-> event param 0)))) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -355,7 +355,7 @@ ) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (or (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (* (-> *TARGET-bank* ground-timeout) 2) ) @@ -554,8 +554,7 @@ ((cpad-pressed? (-> self control unknown-cpad-info00 number) l1 r1) (set! (-> self racer slide-down-time 0) (-> *display* base-frame-counter)) ) - ((zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) - ) + ((not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1)) (set! (-> self racer slide-down-time 0) 0) 0 ) @@ -1429,21 +1428,21 @@ ;; failed to figure out what this is: (defstate target-racing-grab (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) (else - (case arg2 + (case event-type (('end-mode) (go target-racing) ) (('clone-anim) - (go target-racing-clone-anim (process->handle (the-as process (-> arg3 param 0)))) + (go target-racing-clone-anim (process->handle (the-as process (-> event param 0)))) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -1483,11 +1482,11 @@ ;; failed to figure out what this is: (defstate target-racing-clone-anim (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'trans) (= (-> arg3 param 0) 'restore)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'trans) (= (-> event param 0) 'restore)) (set! (-> self control unknown-uint20) (the-as uint #f)) ) - ((-> target-racing-grab event) arg0 arg1 arg2 arg3) + ((-> target-racing-grab event) proc arg1 event-type event) ) :enter (-> target-clone-anim enter) :exit (behavior () diff --git a/test/decompiler/reference/jak1/levels/racer_common/racer_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/racer_REF.gc index 4c046dfab6..ac721a10a4 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/racer_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/racer_REF.gc @@ -99,14 +99,14 @@ ;; failed to figure out what this is: (defstate wait-for-start (racer) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-1 structure)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) ((= v1-0 'notify) (set! v0-1 #t) @@ -115,7 +115,7 @@ ) ((= v1-0 'shadow) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-1 (-> self shadow-backup)) (set! (-> self draw shadow) (the-as shadow-geo v0-1)) v0-1 @@ -287,8 +287,8 @@ ;; failed to figure out what this is: (defstate pickup (racer) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('draw) (ja-channel-set! 1) (ja :group! (-> self draw art-group data 3)) @@ -297,14 +297,14 @@ (transform-post) ) (('trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) (('touch 'attack) #f ) (('shadow) (cond - ((-> arg3 param 0) + ((-> event param 0) (let ((v0-1 (the-as object (-> self shadow-backup)))) (set! (-> self draw shadow) (the-as shadow-geo v0-1)) v0-1 @@ -360,19 +360,21 @@ ;; failed to figure out what this is: (defstate wait-for-return (racer) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (or (= arg2 'touch) (= arg2 'attack)) (and (!= (-> self condition) 4) (send-event *target* 'end-mode))) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (or (= event-type 'touch) (= event-type 'attack)) + (and (!= (-> self condition) 4) (send-event *target* 'end-mode)) + ) (go-virtual pickup (the-as (state collectable) (method-of-object self idle))) ) (the-as object (cond - ((= arg2 'trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + ((= event-type 'trans) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) - ((= arg2 'shadow) + ((= event-type 'shadow) (cond - ((-> arg3 param 0) + ((-> event param 0) (let ((v0-3 (the-as structure (-> self shadow-backup)))) (set! (-> self draw shadow) (the-as shadow-geo v0-3)) v0-3 diff --git a/test/decompiler/reference/jak1/levels/racer_common/target-racer_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/target-racer_REF.gc index 6c8d0438fb..afc3378214 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/target-racer_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/target-racer_REF.gc @@ -129,14 +129,12 @@ (let ((v1-1 (-> self racer slide-mode))) (cond ((zero? v1-1) - (if (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) - ) + (if (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1)) (set! (-> self racer slide-mode) -1) ) ) ((= v1-1 1) - (if (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) - ) + (if (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1)) (set! (-> self racer slide-mode) -1) ) ) @@ -914,8 +912,7 @@ (set! (-> self racer boost-curve) 0.0) ) ) - (when (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) - ) + (when (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) x)) (< (-> self control unknown-float01) 4096.0) (= (-> self racer boost-level) 0.0) ) diff --git a/test/decompiler/reference/jak1/levels/robocave/cave-trap_REF.gc b/test/decompiler/reference/jak1/levels/robocave/cave-trap_REF.gc index 8d5c2ae8aa..0eb293c986 100644 --- a/test/decompiler/reference/jak1/levels/robocave/cave-trap_REF.gc +++ b/test/decompiler/reference/jak1/levels/robocave/cave-trap_REF.gc @@ -61,9 +61,9 @@ ;; failed to figure out what this is: (defstate spider-vent-idle (spider-vent) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('can-spawn?) (return (>= (- (-> *display* base-frame-counter) (-> self last-spawn-time)) (seconds 1))) v0-0 diff --git a/test/decompiler/reference/jak1/levels/robocave/spider-egg_REF.gc b/test/decompiler/reference/jak1/levels/robocave/spider-egg_REF.gc index 5d6289ad0a..52fab27f4f 100644 --- a/test/decompiler/reference/jak1/levels/robocave/spider-egg_REF.gc +++ b/test/decompiler/reference/jak1/levels/robocave/spider-egg_REF.gc @@ -50,15 +50,15 @@ ;; failed to figure out what this is: (defstate spider-egg-idle (spider-egg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'touch) (send-shove-back (-> self root-override) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + proc + (the-as touching-shapes-entry (-> event param 0)) 0.7 6144.0 16384.0 @@ -126,9 +126,9 @@ ;; failed to figure out what this is: (defstate spider-egg-hatch (spider-egg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 symbol)) - (case arg2 + (case event-type (('can-spawn?) (return (the-as object #f)) v0-0 @@ -168,9 +168,9 @@ ;; failed to figure out what this is: (defstate spider-egg-die (spider-egg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 symbol)) - (case arg2 + (case event-type (('can-spawn?) (return (the-as object #f)) v0-0 diff --git a/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc b/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc index fac8b8c1b5..c1346e5edf 100644 --- a/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc +++ b/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc @@ -17,7 +17,7 @@ (cond ((= v1-4 255) ) - ((zero? (logand (-> arg0 poly v1-4 pat) 1)) + ((not (logtest? (-> arg0 poly v1-4 pat) 1)) (format 0 "ERROR: find-adjacent-bounds-one given a non-boundary edge to start~%") (return #f) ) @@ -1299,8 +1299,8 @@ ;; failed to figure out what this is: (defstate peeper-wait (peeper) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'hide) (let ((v0-0 (-> *display* base-frame-counter))) (set! (-> self state-time) v0-0) @@ -1355,8 +1355,8 @@ ;; failed to figure out what this is: (defstate peeper-down (peeper) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide) (go peeper-wait) ) @@ -1404,8 +1404,8 @@ ;; failed to figure out what this is: (defstate peeper-up (peeper) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide) (go peeper-hide) ) diff --git a/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc b/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc index a871ecb83b..5aa2303f2a 100644 --- a/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc @@ -945,8 +945,8 @@ ;; failed to figure out what this is: (defstate rolling-start-break (rolling-start) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('unbreak) (go rolling-start-whole) ) @@ -981,8 +981,8 @@ ;; failed to figure out what this is: (defstate rolling-start-whole (rolling-start) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('break) (sound-play "cool-rolling-st") (go rolling-start-break #f) @@ -1448,8 +1448,8 @@ ;; failed to figure out what this is: (defstate gorge-start-racing (gorge-start) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('finished) (go gorge-start-race-finished) ) diff --git a/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc b/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc index 251b738800..9fee54e139 100644 --- a/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc +++ b/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc @@ -609,13 +609,13 @@ ;; failed to figure out what this is: (defstate race-ring-active (race-ring) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 symbol)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (when (and (= (-> arg3 param 0) 'die) (= arg0 (-> self part-track process 0))) + (when (and (= (-> event param 0) 'die) (= proc (-> self part-track process 0))) (cond ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) (set! (-> self part-track) (ppointer->handle (process-spawn @@ -980,8 +980,8 @@ ;; failed to figure out what this is: (defstate race-ring-idle (race-ring) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('activate) (logclear! (-> self mask) (process-mask actor-pause)) (go race-ring-active) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-ball_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-ball_REF.gc index 6f0adc0d4e..4fea94510c 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-ball_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-ball_REF.gc @@ -438,10 +438,10 @@ ;; failed to figure out what this is: (defstate snow-ball-roller-idle (snow-ball-roller) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack)) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (do-push-aways! (-> self root-override)) (when (>= (- (-> *display* base-frame-counter) (-> self hit-player-time)) (seconds 0.5)) (set! (-> self hit-player-time) (-> *display* base-frame-counter)) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-bumper_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-bumper_REF.gc index 948a67ea4a..8a118102ad 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-bumper_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-bumper_REF.gc @@ -176,11 +176,11 @@ ;; failed to figure out what this is: (defstate snow-bumper-active-close-idle (snow-bumper) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack 'bonk) - (when (= (-> arg0 type) target) - (let ((gp-0 (-> arg3 param 0))) + (when (= (-> proc type) target) + (let ((gp-0 (-> event param 0))) (when (and (>= 6144.0 (vector-vector-xz-distance (-> self root trans) (target-pos 0))) ((method-of-type touching-shapes-entry prims-touching?) (the-as touching-shapes-entry gp-0) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-bunny_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-bunny_REF.gc index cd0edc0660..c8f66f673c 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-bunny_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-bunny_REF.gc @@ -274,7 +274,7 @@ ;; definition for method 58 of type snow-bunny ;; INFO: Return type mismatch time-frame vs none. (defmethod dummy-58 snow-bunny ((obj snow-bunny)) - (if (zero? (logand (-> *target* state-flags) (state-flags dangerous))) + (if (not (logtest? (-> *target* state-flags) (state-flags dangerous))) (set! (-> obj last-nondangerous-time) (-> *display* base-frame-counter)) ) (none) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc index d0efedc703..b4198d4255 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc @@ -269,11 +269,11 @@ ;; failed to figure out what this is: (defstate snow-button-up-idle (snow-button) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-2 object)) - (case arg2 + (case event-type (('touch 'attack 'bonk) - (when (and (= (-> arg0 type) target) + (when (and (= (-> proc type) target) (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-14)) (>= 10649.6 (vector-vector-xz-distance (-> self root-override trans) (target-pos 0))) ) @@ -301,9 +301,9 @@ ;; failed to figure out what this is: (defstate snow-button-activate (snow-button) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('untrigger) (go snow-button-deactivate) ) @@ -362,9 +362,9 @@ ;; failed to figure out what this is: (defstate snow-button-deactivate (snow-button) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 symbol)) - (case arg2 + (case event-type (('query) (return (the-as object #f)) v0-0 @@ -484,7 +484,7 @@ ) ) (set! (-> obj has-path?) - (and (zero? (logand (-> obj path flags) (path-control-flag not-found))) (> (-> obj sync period) 0)) + (and (not (logtest? (-> obj path flags) (path-control-flag not-found))) (> (-> obj sync period) 0)) ) (when (nonzero? (-> obj plat-type)) (cond @@ -532,8 +532,8 @@ ;; failed to figure out what this is: (defstate plat-startup (flutflut-plat) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (when (or (!= (-> self plat-type) 1) (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete)))) @@ -580,8 +580,8 @@ ;; failed to figure out what this is: (defstate flutflut-plat-hidden-idle (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (logclear! (-> self mask) (process-mask actor-pause)) (go flutflut-plat-appear) @@ -608,8 +608,8 @@ ;; failed to figure out what this is: (defstate flutflut-plat-appear (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) ) @@ -685,8 +685,8 @@ ;; failed to figure out what this is: (defstate plat-idle (flutflut-plat) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) @@ -732,8 +732,8 @@ ;; failed to figure out what this is: (defstate plat-path-active (flutflut-plat) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) @@ -771,8 +771,8 @@ ;; failed to figure out what this is: (defstate flutflut-plat-hide (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (dummy-22 self) ) @@ -830,8 +830,8 @@ ;; failed to figure out what this is: (defstate elevator-idle-at-cave (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond @@ -868,8 +868,8 @@ ;; failed to figure out what this is: (defstate elevator-travel-to-fort (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) ) @@ -893,8 +893,8 @@ ;; failed to figure out what this is: (defstate elevator-idle-at-fort (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) ) @@ -927,8 +927,8 @@ ;; failed to figure out what this is: (defstate elevator-travel-to-cave (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) ) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc index 97585a1229..8a254f5e1a 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc @@ -318,12 +318,12 @@ ;; failed to figure out what this is: (defstate snow-eggtop-idle-up (snow-eggtop) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (case (-> arg3 param 0) + (case (-> event param 0) (('pickup) - (if (type-type? (-> arg0 type) fuel-cell) + (if (type-type? (-> proc type) fuel-cell) (save-reminder (get-task-control (-> self entity extra perm task)) 1 4) ) ) @@ -354,18 +354,18 @@ ;; failed to figure out what this is: (defstate snow-eggtop-activate (snow-eggtop) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (when (= (-> arg0 type) snowcam) + (when (= (-> proc type) snowcam) (cond - ((= (-> arg3 param 0) 'die) + ((= (-> event param 0) 'die) (if *target* (set! (-> *target* control trans y) (+ 1024.0 (-> *target* control trans y))) ) (go snow-eggtop-idle-down) ) - ((= (-> arg3 param 0) 'cut) + ((= (-> event param 0) 'cut) (stop! (-> self sound)) (set! (-> self play-sound?) #f) #f @@ -572,10 +572,10 @@ ;; failed to figure out what this is: (defstate snowpusher-idle (snowpusher) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) @@ -709,8 +709,8 @@ ;; failed to figure out what this is: (defstate snow-spatula-idle (snow-spatula) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'bonk) (dummy-22 self) (sound-play "snow-spat-short" :vol 75 :pitch 0.75) @@ -1008,8 +1008,8 @@ ;; failed to figure out what this is: (defstate snow-fort-gate-idle-closed (snow-fort-gate) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notice) (go snow-fort-gate-activate) ) @@ -1307,8 +1307,8 @@ ;; failed to figure out what this is: (defstate snow-gears-idle (snow-gears) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notice) (logclear! (-> self mask) (process-mask actor-pause)) (process-entity-status! self (entity-perm-status bit-3) #t) @@ -1678,8 +1678,8 @@ ;; failed to figure out what this is: (defstate snow-log-wait-for-master (snow-log) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go snow-log-activate) ) @@ -1722,8 +1722,8 @@ ;; failed to figure out what this is: (defstate snow-log-hidden (snow-log) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (logclear! (-> self mask) (process-mask actor-pause)) (process-entity-status! self (entity-perm-status bit-3) #t) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc index be917bc34d..e70768aee4 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc @@ -693,8 +693,8 @@ ;; failed to figure out what this is: (defstate ram-boss-proj-growing (ram-boss-proj) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('launch) (let ((v1-1 (-> self parent-override))) (set! (-> v1-1 0 proj-stoked) #f) @@ -946,7 +946,7 @@ v0-4 ) ((begin - (if (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags navenmf8))) + (if (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags navenmf8))) (do-push-aways! (-> self collide-info)) ) (level-hint-spawn @@ -981,7 +981,7 @@ ) ) (('touch) - (if (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags navenmf8))) + (if (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags navenmf8))) (do-push-aways! (-> self collide-info)) ) (cond @@ -1353,13 +1353,13 @@ ;; failed to figure out what this is: (defstate ram-boss-idle (ram-boss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('jump) - (go ram-boss-jump-down arg0) + (go ram-boss-jump-down proc) ) (('touch 'attack) - (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 'generic) + (nav-enemy-send-attack proc (the-as touching-shapes-entry (-> event param 0)) 'generic) ) ) ) @@ -1400,10 +1400,10 @@ ;; failed to figure out what this is: (defstate ram-boss-jump-down (ram-boss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 'generic) + (nav-enemy-send-attack proc (the-as touching-shapes-entry (-> event param 0)) 'generic) ) ) ) @@ -1720,10 +1720,10 @@ ) ) (when (and (= (-> self proj-status) 2) - (zero? (logand (-> *target* state-flags) + (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.2)) ) (let ((gp-2 (new 'stack-no-clear 'vector)) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-ram_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-ram_REF.gc index 3dc728b922..6821332ee9 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-ram_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-ram_REF.gc @@ -185,18 +185,18 @@ ;; failed to figure out what this is: (defstate ram-idle (ram) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) (if ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self root-override) (the-as uint 1) ) (send-event - arg0 + proc 'attack - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 0.5)) (shove-back (meters 2)))) ) ) @@ -261,10 +261,10 @@ ;; failed to figure out what this is: (defstate ram-fun-idle (ram) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (when (= (-> arg0 type) ram-boss) + (when (= (-> proc type) ram-boss) (if (dummy-22 self) (go ram-give-fuel-cell) ) @@ -294,10 +294,10 @@ ;; failed to figure out what this is: (defstate ram-give-fuel-cell (ram) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (if (and (= (-> arg0 type) snowcam) (= (-> arg3 param 0) 'die)) + (if (and (= (-> proc type) snowcam) (= (-> event param 0) 'die)) (go ram-fun-idle) ) ) diff --git a/test/decompiler/reference/jak1/levels/snow/target-snowball_REF.gc b/test/decompiler/reference/jak1/levels/snow/target-snowball_REF.gc index 9bc6ac0a99..a6faaf1e03 100644 --- a/test/decompiler/reference/jak1/levels/snow/target-snowball_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/target-snowball_REF.gc @@ -59,12 +59,12 @@ ;; failed to figure out what this is: (defstate target-snowball-start (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) 'snowball ) - ((let ((v1-3 arg2)) + ((let ((v1-3 event-type)) (= v1-3 'end-mode) ) (go @@ -75,7 +75,7 @@ ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/bully_REF.gc b/test/decompiler/reference/jak1/levels/sunken/bully_REF.gc index d10ba997a5..5482637b64 100644 --- a/test/decompiler/reference/jak1/levels/sunken/bully_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/bully_REF.gc @@ -413,10 +413,10 @@ (defbehavior bully-post bully () (when (and (-> self hit-player?) (or (not *target*) - (and (zero? (logand (-> *target* state-flags) + (and (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= (- (-> *display* base-frame-counter) (-> self hit-player-time)) (seconds 0.05)) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/double-lurker_REF.gc b/test/decompiler/reference/jak1/levels/sunken/double-lurker_REF.gc index 5da7c7a52a..77d4ba089a 100644 --- a/test/decompiler/reference/jak1/levels/sunken/double-lurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/double-lurker_REF.gc @@ -259,18 +259,18 @@ ;; failed to figure out what this is: (defstate double-lurker-top-on-shoulders (double-lurker-top) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (let ((v1-1 (-> self fall-dest)) - (a0-4 (-> (the-as vector (-> arg3 param 0)) quad)) + (a0-4 (-> (the-as vector (-> event param 0)) quad)) ) (set! (-> v1-1 quad) a0-4) - (go double-lurker-top-knocked-down a0-4 (the-as vector arg1) (the-as vector arg2)) + (go double-lurker-top-knocked-down a0-4 (the-as vector arg1) (the-as vector event-type)) ) ) (('instant-death) - (let ((v1-3 (the-as object (-> arg3 param 0)))) + (let ((v1-3 (the-as object (-> event param 0)))) (quaternion-axis-angle! (-> self collide-info quat) 0.0 @@ -315,13 +315,13 @@ ;; failed to figure out what this is: (defstate double-lurker-top-knocked-down (double-lurker-top) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (send-event - arg0 + proc 'shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 3)) (shove-back (meters 2)))) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc b/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc index 792d9e6b23..9de33811aa 100644 --- a/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc @@ -131,8 +131,8 @@ ;; failed to figure out what this is: (defstate water-vol-idle (helix-dark-eco) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (let ((a0-1 (-> self sound))) (set! (-> a0-1 spec pitch-mod) 2057) @@ -140,7 +140,7 @@ ) ) (else - ((-> (method-of-type water-anim water-vol-idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type water-anim water-vol-idle) event) proc arg1 event-type event) ) ) ) @@ -178,8 +178,8 @@ ;; failed to figure out what this is: (defstate helix-slide-door-idle-open (helix-slide-door) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go helix-slide-door-close) ) @@ -286,8 +286,8 @@ ;; failed to figure out what this is: (defstate helix-button-idle-up (helix-button) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (when *target* (when (logtest? (-> *target* control status) (cshape-moving-flags onsurf)) @@ -659,8 +659,8 @@ ;; failed to figure out what this is: (defstate helix-water-idle (helix-water) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'trigger) (go helix-water-activated) @@ -689,10 +689,10 @@ ;; failed to figure out what this is: (defstate helix-water-activated (helix-water) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (when (= (-> arg0 type) launcherdoor) + (when (= (-> proc type) launcherdoor) (remove-setting! 'music) (go helix-water-idle) ) @@ -703,7 +703,7 @@ (seek! (-> self root scale y) 0.8 (* 0.667 (-> *display* seconds-per-frame))) (when *target* (let ((f0-4 (-> (target-pos 0) y))) - (when (zero? (logand (-> *target* state-flags) (state-flags grabbed))) + (when (not (logtest? (-> *target* state-flags) (state-flags grabbed))) (let* ((f0-5 (- f0-4 (-> self root trans y))) (f0-6 (+ -40960.0 f0-5)) (f0-7 (* 0.000024414063 f0-6)) diff --git a/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc b/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc index c5d0b42f9f..9f918415e0 100644 --- a/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc @@ -304,8 +304,8 @@ ;; failed to figure out what this is: (defstate orbit-plat-idle (orbit-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) @@ -420,8 +420,8 @@ ;; failed to figure out what this is: (defstate orbit-plat-still (orbit-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) @@ -544,8 +544,8 @@ ;; failed to figure out what this is: (defstate orbit-plat-rotating (orbit-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) @@ -758,8 +758,8 @@ ;; failed to figure out what this is: (defstate orbit-plat-reset (orbit-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) @@ -776,7 +776,7 @@ (set! (-> self plat-status) (the-as uint 3)) (logclear! (-> self nav flags) (nav-control-flags navcf19)) (ja-no-eval :num! (seek! 0.0)) - (while (zero? (logand (nav-control-flags navcf19) (-> self nav flags))) + (while (not (logtest? (nav-control-flags navcf19) (-> self nav flags))) (dummy-27 self) (when (nonzero? (-> self root-override riders num-riders)) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) diff --git a/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc b/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc index e3286fdd8c..ca174da5e2 100644 --- a/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc @@ -163,10 +163,10 @@ (defbehavior puffer-post puffer () (when (and (-> self hit-player?) (or (not *target*) - (and (zero? (logand (-> *target* state-flags) + (and (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= (- (-> *display* base-frame-counter) (-> self hit-player-time)) (seconds 0.05)) ) ) @@ -268,10 +268,10 @@ (defmethod dummy-25 puffer ((obj puffer) (arg0 float)) (when *target* (let ((gp-0 (target-pos 0))) - (when (and (zero? (logand (-> *target* state-flags) + (when (and (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (dummy-24 obj gp-0) (>= (-> gp-0 y) (+ -14336.0 (-> obj attack-bottom-y))) (>= (+ 2048.0 (-> obj top-y)) (-> gp-0 y)) @@ -710,8 +710,8 @@ ;; failed to figure out what this is: (defstate puffer-die (puffer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as uint (cond diff --git a/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc b/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc index e506b32e41..a4c1841e5c 100644 --- a/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc @@ -141,8 +141,8 @@ ;; failed to figure out what this is: (defstate qbert-plat-on-mimic (qbert-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('die) (go qbert-plat-on-die) ) @@ -432,19 +432,19 @@ ;; failed to figure out what this is: (defstate qbert-plat-master-idle (qbert-plat-master) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (start-hint-timer (game-text-id sunken-qbert-plat-hint)) (close-specific-task! (game-task sunken-platforms) (task-status need-hint)) (when (not (-> self puzzle-beaten?)) - (let ((v1-2 (-> arg3 param 0))) + (let ((v1-2 (-> event param 0))) (when (!= v1-2 (-> self last-plat-triggered)) (set! (-> self last-plat-triggered) (the-as int v1-2)) (let ((s5-1 (= (-> self plat-states-needed-to-open-door) (-> self plat-states)))) (let ((v1-3 (ash 1 v1-2))) (logxor! (-> self plat-states) (the-as uint v1-3)) - (if (zero? (logand v1-3 (-> self plat-states))) + (if (not (logtest? v1-3 (-> self plat-states))) (level-hint-spawn (game-text-id sunken-qbert-plat-hint) "sksp0130" @@ -454,7 +454,7 @@ ) ) ) - (send-event arg0 'notify) + (send-event proc 'notify) (let ((a0-13 (= (-> self plat-states-needed-to-open-door) (-> self plat-states)))) (if (!= s5-1 a0-13) (go qbert-plat-master-do-door a0-13) diff --git a/test/decompiler/reference/jak1/levels/sunken/shover_REF.gc b/test/decompiler/reference/jak1/levels/sunken/shover_REF.gc index 5606d3f689..9b01e19fbc 100644 --- a/test/decompiler/reference/jak1/levels/sunken/shover_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/shover_REF.gc @@ -34,12 +34,12 @@ ;; failed to figure out what this is: (defstate shover-idle (shover) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (when ((method-of-type touching-shapes-entry prims-touching-action?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> *target* control) (collide-action solid) (collide-action) @@ -52,15 +52,15 @@ (< 0.75 (-> *target* control poly-normal y)) ) (send-event - arg0 + proc 'attack-or-shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((mode 'burn) (vector (-> s4-0 vector)) (shove-up (-> s4-0 shove-up)))) ) (send-event - arg0 + proc 'attack-or-shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((mode 'burn) (shove-up (meters 0)) (shove-back (meters 2)) diff --git a/test/decompiler/reference/jak1/levels/sunken/square-platform_REF.gc b/test/decompiler/reference/jak1/levels/sunken/square-platform_REF.gc index 8728d4f7e6..13d165257f 100644 --- a/test/decompiler/reference/jak1/levels/sunken/square-platform_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/square-platform_REF.gc @@ -309,11 +309,11 @@ ;; failed to figure out what this is: (defstate square-platform-lowered (square-platform) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) - (if (and (= (-> arg0 type) square-platform-master) - (= (-> (the-as square-platform-master arg0) plat-id) (-> self plat-id)) + (if (and (= (-> proc type) square-platform-master) + (= (-> (the-as square-platform-master proc) plat-id) (-> self plat-id)) ) (go square-platform-rising) ) @@ -332,8 +332,8 @@ ;; failed to figure out what this is: (defstate square-platform-rising (square-platform) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) @@ -376,8 +376,8 @@ ;; failed to figure out what this is: (defstate square-platform-raised (square-platform) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) @@ -403,8 +403,8 @@ ;; failed to figure out what this is: (defstate square-platform-lowering (square-platform) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) @@ -413,7 +413,7 @@ (go square-platform-rising) ) ((= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) @@ -558,11 +558,11 @@ ;; failed to figure out what this is: (defstate square-platform-master-idle (square-platform-master) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) - (when (= (-> arg0 type) square-platform-button) - (set! (-> self button-id) (-> (the-as square-platform-button arg0) button-id)) + (when (= (-> proc type) square-platform-button) + (set! (-> self button-id) (-> (the-as square-platform-button proc) button-id)) (logclear! (-> self mask) (process-mask actor-pause)) (process-entity-status! self (entity-perm-status bit-3) #t) (go square-platform-master-activate) diff --git a/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc b/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc index 99ef1d268a..d495d959ff 100644 --- a/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc @@ -721,14 +721,14 @@ ;; failed to figure out what this is: (defstate exit-chamber-charger-puzzle (exit-chamber) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('notify) - (case (-> arg3 param 0) + (case (-> event param 0) ((1) (when (zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) - (let* ((a1-2 (-> arg3 param 1)) + (let* ((a1-2 (-> event param 1)) (v1-5 (logior (-> self chargers-active) (ash 1 a1-2))) ) (set! (-> self chargers-active) v1-5) @@ -743,7 +743,7 @@ ) ((2) (when (zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) - (let ((a1-6 (-> arg3 param 1))) + (let ((a1-6 (-> event param 1))) (set! v0-0 (logclear (-> self chargers-active) (ash 1 a1-6))) ) (set! (-> self chargers-active) (the-as uint v0-0)) @@ -796,16 +796,16 @@ ;; failed to figure out what this is: (defstate exit-chamber-idle-in-sunken (exit-chamber) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-1 object)) - (case arg2 + (case event-type (('trigger) (go exit-chamber-rise) (return #t) v0-1 ) (('notify) - (when (and (= (-> arg0 type) fuel-cell) (= (-> arg3 param 0) 'pickup)) + (when (and (= (-> proc type) fuel-cell) (= (-> event param 0) 'pickup)) (let ((a0-5 (handle->process (-> self fcell-handle)))) (when a0-5 (let ((v1-10 (new 'stack-no-clear 'vector))) @@ -983,13 +983,13 @@ ;; failed to figure out what this is: (defstate exit-chamber-idle-in-village (exit-chamber) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go exit-chamber-lower) ) (('notify) - (when (and (= (-> arg0 type) fuel-cell) (= (-> arg3 param 0) 'pickup)) + (when (and (= (-> proc type) fuel-cell) (= (-> event param 0) 'pickup)) (let ((a0-5 (handle->process (-> self fcell-handle)))) (when a0-5 (let ((v1-8 (new 'stack-no-clear 'vector))) diff --git a/test/decompiler/reference/jak1/levels/sunken/sun-iris-door_REF.gc b/test/decompiler/reference/jak1/levels/sunken/sun-iris-door_REF.gc index c0343a7921..126f6fac32 100644 --- a/test/decompiler/reference/jak1/levels/sunken/sun-iris-door_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/sun-iris-door_REF.gc @@ -95,15 +95,15 @@ ;; failed to figure out what this is: (defstate sun-iris-door-closed (sun-iris-door) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go sun-iris-door-opening) ) (('move-to) (set! (-> self move-to?) #t) - (set! (-> self move-to-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> arg3 param 1))) + (set! (-> self move-to-pos quad) (-> (the-as vector (-> event param 0)) quad)) + (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> event param 1))) ) ) ) @@ -135,15 +135,15 @@ ;; failed to figure out what this is: (defstate sun-iris-door-opening (sun-iris-door) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('untrigger) (go sun-iris-door-closing) ) (('move-to) (set! (-> self move-to?) #t) - (set! (-> self move-to-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> arg3 param 1))) + (set! (-> self move-to-pos quad) (-> (the-as vector (-> event param 0)) quad)) + (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> event param 1))) ) ) ) @@ -229,8 +229,8 @@ ;; failed to figure out what this is: (defstate sun-iris-door-open (sun-iris-door) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (let ((v0-0 (the-as object (-> *display* base-frame-counter)))) (set! (-> self state-time) (the-as time-frame v0-0)) @@ -242,8 +242,8 @@ ) (('move-to) (set! (-> self move-to?) #t) - (set! (-> self move-to-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> arg3 param 1))) + (set! (-> self move-to-pos quad) (-> (the-as vector (-> event param 0)) quad)) + (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> event param 1))) ) ) ) @@ -291,15 +291,15 @@ ;; failed to figure out what this is: (defstate sun-iris-door-closing (sun-iris-door) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go sun-iris-door-opening) ) (('move-to) (set! (-> self move-to?) #t) - (set! (-> self move-to-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> arg3 param 1))) + (set! (-> self move-to-pos quad) (-> (the-as vector (-> event param 0)) quad)) + (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> event param 1))) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc b/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc index 4179b07830..1227c7fe92 100644 --- a/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc @@ -581,11 +581,11 @@ ;; failed to figure out what this is: (defstate sunken-pipegame-idle (sunken-pipegame) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) - (when (= (-> arg0 type) sunken-pipegame-button) - (set! (-> self challenge) (-> (the-as sunken-pipegame-button arg0) button-id)) + (when (= (-> proc type) sunken-pipegame-button) + (set! (-> self challenge) (-> (the-as sunken-pipegame-button proc) button-id)) (go sunken-pipegame-begin-play) ) ) @@ -601,10 +601,10 @@ ;; failed to figure out what this is: (defstate sunken-pipegame-begin-play (sunken-pipegame) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (case (-> arg0 type) + (case (-> proc type) ((fuel-cell buzzer) (go sunken-pipegame-beat-challenge) ) @@ -908,7 +908,7 @@ (set! (-> self challenge) -1) (dotimes (gp-0 3) (let ((v1-18 (-> self button gp-0))) - (if (zero? (logand (ash 1 gp-0) (-> self challenges-mask))) + (if (not (logtest? (ash 1 gp-0) (-> self challenges-mask))) (send-event (ppointer->process v1-18) 'untrigger) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/sunken-water_REF.gc b/test/decompiler/reference/jak1/levels/sunken/sunken-water_REF.gc index 06c5582814..13509409d5 100644 --- a/test/decompiler/reference/jak1/levels/sunken/sunken-water_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/sunken-water_REF.gc @@ -112,15 +112,15 @@ ;; failed to figure out what this is: (defstate water-vol-idle (sunken-water) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (if (= (-> arg3 param 0) 'attack) + (if (= (-> event param 0) 'attack) (sound-play "get-shocked") ) ) (else - ((-> (method-of-type water-anim water-vol-idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type water-anim water-vol-idle) event) proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc b/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc index 90dc968438..fd05cb864e 100644 --- a/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc @@ -456,13 +456,13 @@ ;; failed to figure out what this is: (defstate target-tube-start (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) 'tube ) (else - (case arg2 + (case event-type (('end-mode) (go target-jump @@ -472,20 +472,20 @@ ) ) (('touched) - (send-event arg0 'attack (-> arg3 param 0) 'tube 0 0) + (send-event proc 'attack (-> event param 0) 'tube 0 0) #f ) (('attack 'attack-or-shove 'attack-invinc) (target-attacked 'attack-or-shove - (the-as attack-info (-> arg3 param 1)) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as attack-info (-> event param 1)) + proc + (the-as touching-shapes-entry (-> event param 0)) target-tube-hit ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -761,7 +761,7 @@ (set! (-> self state-time) (-> *display* base-frame-counter)) (logior! (-> self state-flags) (state-flags being-attacked)) (set! (-> self game hit-time) (-> *display* base-frame-counter)) - (when (zero? (logand (-> arg1 mask) (attack-mask vector))) + (when (not (logtest? (-> arg1 mask) (attack-mask vector))) (vector-! (-> arg1 vector) (vector+float*! (new 'stack-no-clear 'vector) (-> self tube foretube) (-> self tube downtube) 20480.0) @@ -875,7 +875,7 @@ (until (ja-done? 0) (compute-alignment! (-> self align)) (let ((gp-2 (new 'stack-no-clear 'vector))) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (vector-matrix*! gp-2 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) (vector-float*! (-> self control transv) gp-2 (-> *display* frames-per-second)) ) @@ -1007,13 +1007,13 @@ ;; failed to figure out what this is: (defstate slide-control-ride (slide-control) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('end-mode) (go-virtual slide-control-watch) ) (('update) - (let* ((s4-0 arg0) + (let* ((s4-0 proc) (gp-0 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) process-drawable)) s4-0 ) @@ -1022,10 +1022,10 @@ (if gp-0 (find-target-point (-> (the-as process-drawable gp-0) root trans)) ) - (set! (-> (the-as vector (-> arg3 param 0)) quad) (-> self trans quad)) - (set! (-> (the-as vector (-> arg3 param 1)) quad) (-> self rot quad)) - (set! (-> (the-as vector (-> arg3 param 2)) quad) (-> self side quad)) - (eval-path-curve-div! (-> self path) (the-as vector (-> arg3 param 3)) (+ 0.2 (-> self pos)) 'interp) + (set! (-> (the-as vector (-> event param 0)) quad) (-> self trans quad)) + (set! (-> (the-as vector (-> event param 1)) quad) (-> self rot quad)) + (set! (-> (the-as vector (-> event param 2)) quad) (-> self side quad)) + (eval-path-curve-div! (-> self path) (the-as vector (-> event param 3)) (+ 0.2 (-> self pos)) 'interp) (if (>= (-> self pos) (+ -0.2 (the float (+ (-> self path curve num-cverts) -1)))) (send-event gp-0 'end-mode) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/wall-plat_REF.gc b/test/decompiler/reference/jak1/levels/sunken/wall-plat_REF.gc index 5418e37ebe..b1bca9e0a1 100644 --- a/test/decompiler/reference/jak1/levels/sunken/wall-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/wall-plat_REF.gc @@ -46,8 +46,8 @@ ;; failed to figure out what this is: (defstate wall-plat-retracted (wall-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go wall-plat-extending) ) @@ -68,10 +68,10 @@ ;; failed to figure out what this is: (defstate wall-plat-extending (wall-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) @@ -103,8 +103,8 @@ ;; failed to figure out what this is: (defstate wall-plat-extended (wall-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('untrigger) (go wall-plat-retracting) ) @@ -124,10 +124,10 @@ ;; failed to figure out what this is: (defstate wall-plat-retracting (wall-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) @@ -158,10 +158,10 @@ ;; failed to figure out what this is: (defstate wall-plat-sync-idle (wall-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/wedge-plats_REF.gc b/test/decompiler/reference/jak1/levels/sunken/wedge-plats_REF.gc index f6b180f2c0..a308da4316 100644 --- a/test/decompiler/reference/jak1/levels/sunken/wedge-plats_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/wedge-plats_REF.gc @@ -140,8 +140,8 @@ ;; failed to figure out what this is: (defstate wedge-plat-idle (wedge-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (dummy-22 self) ) @@ -164,14 +164,14 @@ ;; failed to figure out what this is: (defstate wedge-plat-tip (wedge-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) ) ((= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) @@ -320,8 +320,8 @@ ;; failed to figure out what this is: (defstate wedge-plat-outer-idle (wedge-plat-outer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (dummy-22 self) ) @@ -344,14 +344,14 @@ ;; failed to figure out what this is: (defstate wedge-plat-outer-tip (wedge-plat-outer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) ) ((= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/swamp/billy_REF.gc b/test/decompiler/reference/jak1/levels/swamp/billy_REF.gc index e8f39a515a..478330eeb7 100644 --- a/test/decompiler/reference/jak1/levels/swamp/billy_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/billy_REF.gc @@ -118,8 +118,8 @@ ;; failed to figure out what this is: (defstate billy-snack-idle (billy-snack) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('eat) (go billy-snack-eat) ) @@ -537,10 +537,10 @@ ;; failed to figure out what this is: (defstate billy-done (billy) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'billy-rat-needs-destination) - (let* ((gp-0 arg0) + (let* ((gp-0 proc) (v1-2 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) billy-rat)) gp-0 ) @@ -829,8 +829,8 @@ ;; failed to figure out what this is: (defstate billy-playing (billy) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('billy-rat-die) (+! (-> self num-rats) -1) (let* ((f0-2 (rand-float-gen)) @@ -862,7 +862,7 @@ ) ) (('billy-rat-needs-destination) - (let* ((s5-0 arg0) + (let* ((s5-0 proc) (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) billy-rat)) (the-as billy-rat s5-0) ) diff --git a/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc b/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc index 6aef844ea7..8f2377ac83 100644 --- a/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc @@ -571,10 +571,10 @@ ;; failed to figure out what this is: (defstate kermit-pulse-idle (kermit-pulse) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + (send-event proc 'attack (-> event param 0) (new 'static 'attack-info)) (go kermit-pulse-impact) ) ) diff --git a/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc b/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc index c14f721e7d..de1da7506d 100644 --- a/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc @@ -289,8 +289,8 @@ ;; failed to figure out what this is: (defstate swamp-spike-gate-up (swampgate) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'trigger) (let ((v0-0 #t)) (set! (-> self open-gate) v0-0) @@ -461,8 +461,8 @@ ;; failed to figure out what this is: (defstate balance-plat-idle (balance-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'grow) (let ((v0-0 #t)) (set! (-> self got-grow) v0-0) @@ -688,10 +688,10 @@ ;; failed to figure out what this is: (defstate swamp-rock-idle (swamp-rock) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (if (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (if (and (>= arg1 2) (= (-> event param 1) 'eco-yellow)) (go swamp-rock-break) ) ) diff --git a/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc b/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc index d6711ad4ba..3df39f4bc1 100644 --- a/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc @@ -1002,8 +1002,8 @@ swamp-rat-nest-default-event-handler ;; failed to figure out what this is: (defstate swamp-rat-nest-idle (swamp-rat-nest) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hit) (go swamp-rat-nest-active) ) diff --git a/test/decompiler/reference/jak1/levels/title/title-obs_REF.gc b/test/decompiler/reference/jak1/levels/title/title-obs_REF.gc index 9dfa51a6b2..2624f431c9 100644 --- a/test/decompiler/reference/jak1/levels/title/title-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/title/title-obs_REF.gc @@ -150,13 +150,13 @@ ;; failed to figure out what this is: (defstate idle (logo-slave) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 uint)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'blend-shape) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-0 (the-as uint (logior (-> self skel status) (janim-status blerc eye)))) (set! (-> self skel status) (the-as janim-status v0-0)) ) @@ -168,7 +168,7 @@ v0-0 ) ((= v1-0 'origin-joint-index) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self draw origin-joint-index) v0-0) v0-0 ) @@ -224,8 +224,8 @@ ;; failed to figure out what this is: (defstate startup (logo) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'update) (remove-setting! 'process-mask) ) @@ -493,8 +493,8 @@ ;; failed to figure out what this is: (defstate ndi (logo) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'blackout) (set-setting! 'bg-a 'abs 1.0 0) ) @@ -812,8 +812,8 @@ ;; failed to figure out what this is: (defstate target-title-play (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'wait) (go target-title-wait) @@ -822,7 +822,7 @@ (deactivate (-> self manipy 0)) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -841,8 +841,8 @@ ;; failed to figure out what this is: (defstate target-title-wait (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'play) (go target-title-play) @@ -851,7 +851,7 @@ (deactivate (-> self manipy 0)) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc b/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc index f23afaa864..daaed30370 100644 --- a/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc @@ -710,13 +710,13 @@ ;; failed to figure out what this is: (defstate idle (scarecrow-a) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'attack) - (let* ((s3-0 (-> arg3 param 2)) + (let* ((s3-0 (-> event param 2)) (s4-0 (get-task-control (game-task training-gimmie))) (v1-2 (get-reminder s4-0 0)) ) @@ -725,11 +725,11 @@ (cond ((= (-> self type) scarecrow-b) ) - ((and (= (-> arg3 param 1) 'spin) (zero? v1-2)) + ((and (= (-> event param 1) 'spin) (zero? v1-2)) (save-reminder s4-0 1 0) 1 ) - ((and (= (-> arg3 param 1) 'punch) (= v1-2 1)) + ((and (= (-> event param 1) 'punch) (= v1-2 1)) (save-reminder s4-0 2 0) 2 ) @@ -738,7 +738,7 @@ ((= v1-2 1) ) ) - (let* ((s4-1 arg0) + (let* ((s4-1 proc) (v1-14 (if (and (nonzero? s4-1) (type-type? (-> s4-1 type) process-drawable)) s4-1 ) @@ -758,7 +758,7 @@ ) ) (a0-24 ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint -1) ) @@ -774,14 +774,14 @@ (the-as symbol (and ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 2) ) (or (= (-> self type) scarecrow-a) - (and (= (-> arg0 type) target) - (logtest? (-> (the-as target arg0) control unknown-surface00 flags) (surface-flags jump)) - (zero? (logand (-> (the-as target arg0) control status) (cshape-moving-flags onsurf))) + (and (= (-> proc type) target) + (logtest? (-> (the-as target proc) control unknown-surface00 flags) (surface-flags jump)) + (zero? (logand (-> (the-as target proc) control status) (cshape-moving-flags onsurf))) ) ) ) @@ -794,8 +794,8 @@ ((= v1-0 'touch) (send-shove-back (-> self root-override) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + proc + (the-as touching-shapes-entry (-> event param 0)) 0.7 6144.0 16384.0 diff --git a/test/decompiler/reference/jak1/levels/village1/fishermans-boat_REF.gc b/test/decompiler/reference/jak1/levels/village1/fishermans-boat_REF.gc index 120490ce73..d23f4daba1 100644 --- a/test/decompiler/reference/jak1/levels/village1/fishermans-boat_REF.gc +++ b/test/decompiler/reference/jak1/levels/village1/fishermans-boat_REF.gc @@ -1659,8 +1659,8 @@ ;; failed to figure out what this is: (defstate fishermans-boat-ride-to-village1 (fishermans-boat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond diff --git a/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc b/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc index 350b22b1d5..922033e99f 100644 --- a/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc +++ b/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc @@ -276,8 +276,8 @@ ;; failed to figure out what this is: (defstate play-anim (sequenceA-village1) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('sidekick-human) (format 0 "got sidekick-human~%") (when (= (level-status *level* 'misty) 'active) diff --git a/test/decompiler/reference/jak1/levels/village1/village-obs_REF.gc b/test/decompiler/reference/jak1/levels/village1/village-obs_REF.gc index 060860a9fe..bf09ae2ef4 100644 --- a/test/decompiler/reference/jak1/levels/village1/village-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/village1/village-obs_REF.gc @@ -463,7 +463,7 @@ ;; definition for method 12 of type windspinner (defmethod run-logic? windspinner ((obj windspinner)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status was-drawn)) (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root pause-adjust-distance)) diff --git a/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc b/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc index c8c40adc96..b3b7daef91 100644 --- a/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc +++ b/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc @@ -991,17 +991,17 @@ ;; failed to figure out what this is: (defstate swamp-tetherrock-idle (swamp-tetherrock) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (when (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (when (and (>= arg1 2) (= (-> event param 1) 'eco-yellow)) (+! (-> self hits) 1) (cond ((>= (-> self hits) 1) (go swamp-tetherrock-break) ) (else - (let* ((s5-0 arg0) + (let* ((s5-0 proc) (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) s5-0 ) @@ -1181,8 +1181,8 @@ ;; failed to figure out what this is: (defstate precursor-arm-idle (precursor-arm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('arm-sink-evt) (go precursor-arm-sink) ) @@ -1758,8 +1758,8 @@ ;; failed to figure out what this is: (defstate swamp-blimp-idle (swamp-blimp) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'tetherrock-break-evt) (increment-success-for-hint (game-text-id swamp-tetherrock-eco-yellow-hint)) (swamp-blimp-setup) diff --git a/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc b/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc index 91959f174c..531fb3037b 100644 --- a/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc @@ -168,15 +168,15 @@ ;; failed to figure out what this is: (defstate rigid-body-platform-float (pontoon) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'die) (cleanup-for-death self) (deactivate self) ) (else - (rigid-body-platform-event-handler arg0 arg1 arg2 arg3) + (rigid-body-platform-event-handler proc arg1 event-type event) ) ) ) @@ -187,8 +187,8 @@ ;; failed to figure out what this is: (defstate rigid-body-platform-idle (pontoon) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'die) (cleanup-for-death self) (deactivate self) @@ -566,8 +566,8 @@ ;; failed to figure out what this is: (defstate allpontoons-be-clone (allpontoons) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'end-mode) (cleanup-for-death self) (deactivate self) @@ -605,10 +605,10 @@ ;; failed to figure out what this is: (defstate allpontoons-idle (allpontoons) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('clone) - (go allpontoons-be-clone (the-as handle (-> arg3 param 0))) + (go allpontoons-be-clone (the-as handle (-> event param 0))) ) ) ) @@ -786,8 +786,8 @@ ;; failed to figure out what this is: (defstate fireboulder-be-clone (fireboulder) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('stop-cloning) (go fireboulder-hover) ) @@ -814,10 +814,10 @@ ;; failed to figure out what this is: (defstate fireboulder-idle (fireboulder) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('clone) - (go fireboulder-be-clone (the-as handle (-> arg3 param 0))) + (go fireboulder-be-clone (the-as handle (-> event param 0))) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/village3/minecart_REF.gc b/test/decompiler/reference/jak1/levels/village3/minecart_REF.gc index d221c00246..fef1a18011 100644 --- a/test/decompiler/reference/jak1/levels/village3/minecart_REF.gc +++ b/test/decompiler/reference/jak1/levels/village3/minecart_REF.gc @@ -42,13 +42,13 @@ ;; failed to figure out what this is: (defstate idle (minecartsteel) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack)) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (let ((a2-1 (new 'stack 'collide-overlap-result))) (if (not (on-platform (-> self root-override) (-> *target* control) a2-1)) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/village3/village3-obs_REF.gc b/test/decompiler/reference/jak1/levels/village3/village3-obs_REF.gc index b94e35cbcc..f30578a0b3 100644 --- a/test/decompiler/reference/jak1/levels/village3/village3-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/village3/village3-obs_REF.gc @@ -446,10 +446,10 @@ ;; failed to figure out what this is: (defstate idle (pistons) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('update) - (go-virtual active (process->handle arg0) #f) + (go-virtual active (process->handle proc) #f) ) ) ) @@ -512,8 +512,8 @@ ;; failed to figure out what this is: (defstate idle (gondolacables) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'update) (process-entity-status! self (entity-perm-status complete) #t) (let ((v0-0 1)) diff --git a/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc b/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc index e0a26af3a5..17cfa0cabf 100644 --- a/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc @@ -122,8 +122,8 @@ ;; failed to figure out what this is: (defstate idle (warp-gate) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide) (go-virtual hidden) ) @@ -137,8 +137,8 @@ (and (>= (-> self level-slot) 0) (not (movie?)) (not (level-hint-displayed?)) - (zero? (logand (-> *target* control root-prim prim-core action) (collide-action ca-7 ca-8 ca-9 ca-12 ca-13 ca-14)) - ) + (not (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-7 ca-8 ca-9 ca-12 ca-13 ca-14)) + ) (let* ((v1-16 (-> self root)) (a1-2 (-> *target* control trans)) (f0-1 (vector-y-angle (vector-! (new 'stack-no-clear 'vector) a1-2 (-> v1-16 trans)))) @@ -680,8 +680,8 @@ ;; failed to figure out what this is: (defstate basebutton-up-idle (warp-gate-switch) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) (when (pressable? self) (TODO-RENAME-29 self (-> self event-going-down) (-> self notify-actor)) @@ -689,10 +689,10 @@ ) ) (('hide) - (send-event (handle->process (-> self warp)) arg2) + (send-event (handle->process (-> self warp)) event-type) ) (else - ((-> (method-of-type basebutton basebutton-up-idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type basebutton basebutton-up-idle) event) proc arg1 event-type event) ) ) ) @@ -800,13 +800,13 @@ ;; failed to figure out what this is: (defstate basebutton-down-idle (warp-gate-switch) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide) - (send-event (handle->process (-> self warp)) arg2) + (send-event (handle->process (-> self warp)) event-type) ) (else - ((-> (method-of-type basebutton basebutton-down-idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type basebutton basebutton-down-idle) event) proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc b/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc index 3b9a358d06..8e193a9831 100644 --- a/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc @@ -144,7 +144,7 @@ @returns the `root` of the [[process-drawable]] after the method returns @see [[process-drawable::16]]" - (when (zero? (logand (-> obj flags) (align-flags disabled))) + (when (not (logtest? (-> obj flags) (align-flags disabled))) (let* ((process (-> obj process)) (method-call (method-of-object process apply-alignment)) (transform (-> obj delta)) @@ -184,7 +184,7 @@ ;; definition for method 11 of type align-control (defmethod align-vel-and-quat-only! align-control ((obj align-control) (arg0 align-opts) (arg1 vector) (arg2 int) (arg3 float) (arg4 float)) - (when (zero? (logand (-> obj flags) (align-flags disabled))) + (when (not (logtest? (-> obj flags) (align-flags disabled))) (let ((s5-0 (-> obj delta))) (let ((a0-1 (-> obj process root transv))) (if (logtest? arg0 (align-opts adjust-y-vel)) @@ -214,7 +214,3 @@ ) (-> obj process root) ) - - - - diff --git a/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc b/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc index 93a82bdcd6..b7072b2ccd 100644 --- a/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc @@ -1260,10 +1260,10 @@ ) ) ) - (if (zero? (logand (-> s5-0 track-mode) (track-mode no-trans))) + (if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans))) (vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans)) ) - (when (zero? (logand (-> s5-0 track-mode) (track-mode no-rotate))) + (when (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate))) (let* ((v1-9 (-> s3-0 (-> s5-0 ear))) (a1-4 (quaternion-axis-angle! (new 'stack-no-clear 'quaternion) @@ -1302,7 +1302,7 @@ ) ) ) - (when (zero? (logand (-> s5-0 track-mode) (track-mode no-scale))) + (when (not (logtest? (-> s5-0 track-mode) (track-mode no-scale))) (let ((a1-9 (-> arg1 scale))) (let ((v1-22 (-> arg1 scale)) (a0-11 (-> s5-0 scale)) @@ -1361,13 +1361,13 @@ ;; WARN: Return type mismatch int vs none. (defbehavior joint-mod-joint-set-handler process ((arg0 cspace) (arg1 transformq)) (let ((s4-0 (the-as joint-mod (-> arg0 param1)))) - (if (zero? (logand (-> s4-0 track-mode) (track-mode no-trans))) + (if (not (logtest? (-> s4-0 track-mode) (track-mode no-trans))) (set! (-> arg1 trans quad) (-> s4-0 trans quad)) ) - (if (zero? (logand (-> s4-0 track-mode) (track-mode no-rotate))) + (if (not (logtest? (-> s4-0 track-mode) (track-mode no-rotate))) (quaternion-copy! (-> arg1 quat) (-> s4-0 quat)) ) - (if (zero? (logand (-> s4-0 track-mode) (track-mode no-scale))) + (if (not (logtest? (-> s4-0 track-mode) (track-mode no-scale))) (set! (-> arg1 scale quad) (-> s4-0 scale quad)) ) ) @@ -1472,13 +1472,13 @@ ) (init-vf0-vector) (let ((s5-0 (the-as joint-mod (-> arg0 param1)))) - (if (zero? (logand (-> s5-0 track-mode) (track-mode no-trans))) + (if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans))) (vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans)) ) - (if (zero? (logand (-> s5-0 track-mode) (track-mode no-rotate))) + (if (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate))) (quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> s5-0 quat))) ) - (when (zero? (logand (-> s5-0 track-mode) (track-mode no-scale))) + (when (not (logtest? (-> s5-0 track-mode) (track-mode no-scale))) (let ((a1-4 (-> arg1 scale))) (let ((v1-11 (-> arg1 scale)) (a0-4 (-> s5-0 scale)) diff --git a/test/decompiler/reference/jak2/engine/anim/joint_REF.gc b/test/decompiler/reference/jak2/engine/anim/joint_REF.gc index 29dd4d2ae8..122dff2551 100644 --- a/test/decompiler/reference/jak2/engine/anim/joint_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/joint_REF.gc @@ -992,7 +992,7 @@ (v0-0 (the-as object (-> arg0 data arg2 data))) ) (cond - ((zero? (logand (-> arg0 fixed hdr matrix-bits) 1)) + ((not (logtest? (-> arg0 fixed hdr matrix-bits) 1)) (set! v1-1 (cond ((zero? arg1) (return (the-as matrix v1-1)) @@ -1011,7 +1011,7 @@ (set! v0-0 (-> (the-as (inline-array vector) v0-0) 4)) ) ) - (if (zero? (logand (-> arg0 fixed hdr matrix-bits) 2)) + (if (not (logtest? (-> arg0 fixed hdr matrix-bits) 2)) (return (the-as matrix v1-1)) ) (the-as matrix v0-0) @@ -2116,7 +2116,7 @@ (set! (-> v1-15 comp-data) (the-as uint (-> s5-0 fixed))) ) (let ((s4-1 (kmalloc (-> obj kheap) (the-as int s3-0) (kmalloc-flags) "malloc"))) - (unpack-comp-lzo s4-1 (-> s5-0 fixed)) + (unpack-comp-lzo (the-as (pointer uint8) s4-1) (the-as (pointer uint8) (-> s5-0 fixed))) (set! (-> s5-0 flags) (logand -2 (-> s5-0 flags))) (logior! (-> s5-0 flags) 2) (set! (-> s5-0 fixed) (the-as joint-anim-compressed-fixed s4-1)) diff --git a/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc index ff254f12aa..0baf0590ae 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc @@ -123,9 +123,9 @@ ;; failed to figure out what this is: (defstate cam-combiner-active (camera-combiner) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond @@ -135,7 +135,7 @@ v0-0 ) ((= v1-0 'set-interpolation) - (let ((f0-1 (the float (-> arg3 param 0)))) + (let ((f0-1 (the float (-> event param 0)))) (cond ((>= 0.0 f0-1) (set! (-> self interp-val) 1.0) @@ -171,24 +171,24 @@ (a0-14 0) (a1-4 "ERROR : missing camera-slave parameter to *camera-combiner* start-tracking~%") ) - (let ((v1-8 (-> arg3 param 0))) + (let ((v1-8 (-> event param 0))) (rtype-of v1-8) ) (t9-3 a0-14 a1-4) ) ) - ((not (type? (-> arg3 param 0) camera-slave)) + ((not (type? (-> event param 0) camera-slave)) (let ((t9-5 format) (a0-16 0) (a1-6 "ERROR : invalid type '~A' to *camera-combiner* start-tracking~%") - (v1-11 (-> arg3 param 0)) + (v1-11 (-> event param 0)) ) (t9-5 a0-16 a1-6 (rtype-of v1-11)) ) ) ((zero? (-> self tracking-status)) (set! (-> self tracking-status) (the-as uint 1)) - (let ((gp-1 (the-as camera-slave (-> arg3 param 0)))) + (let ((gp-1 (the-as camera-slave (-> event param 0)))) (set! (-> self tracking-options) (the-as int (-> gp-1 options))) (set! (-> self tracking no-follow) (-> gp-1 tracking no-follow)) (copy-to (-> self tracking tilt-adjust) (-> gp-1 tracking tilt-adjust)) @@ -209,17 +209,17 @@ (a0-23 0) (a1-12 "ERROR : missing camera-slave parameter to *camera-combiner* copy-tracking~%") ) - (let ((v1-23 (-> arg3 param 0))) + (let ((v1-23 (-> event param 0))) (rtype-of v1-23) ) (t9-11 a0-23 a1-12) ) ) - ((not (type? (-> arg3 param 0) camera-slave)) + ((not (type? (-> event param 0) camera-slave)) (let ((t9-13 format) (a0-25 0) (a1-14 "ERROR : invalid type '~A' to *camera-combiner* copy-tracking~%") - (v1-25 (-> arg3 param 0)) + (v1-25 (-> event param 0)) ) (t9-13 a0-25 a1-14 (rtype-of v1-25)) ) @@ -229,7 +229,7 @@ ) (else (set! (-> self tracking-status) (the-as uint 1)) - (let ((gp-3 (the-as camera-slave (-> arg3 param 0)))) + (let ((gp-3 (the-as camera-slave (-> event param 0)))) (set! (-> self tracking-options) (the-as int (-> gp-3 options))) (set! (-> self tracking no-follow) (-> gp-3 tracking no-follow)) (copy-to (-> self tracking tilt-adjust) (-> gp-3 tracking tilt-adjust)) @@ -285,7 +285,7 @@ ) 0 ) - (when (and (zero? (logand (-> *camera* master-options) 1)) (!= (-> self tracking-status) 0)) + (when (and (not (logtest? (-> *camera* master-options) 1)) (!= (-> self tracking-status) 0)) (set! (-> self tracking-status) (the-as uint 0)) 0 ) diff --git a/test/decompiler/reference/jak2/engine/camera/cam-layout_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-layout_REF.gc index c1c25ef899..5afac5b654 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-layout_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-layout_REF.gc @@ -2468,7 +2468,7 @@ ) (format arg0 ": on") ) - ((zero? (logand ((method-of-type res-lump get-property-value) + ((not (logtest? ((method-of-type res-lump get-property-value) (-> self cam-entity) (the-as symbol arg2) 'exact @@ -2479,7 +2479,7 @@ ) s5-0 ) - ) + ) (format arg0 ": off(maya)") ) (else @@ -3380,13 +3380,13 @@ ((and (logtest? (-> arg0 options) 8) (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (-> arg0 button))) #f ) - ((and (zero? (logand (-> arg0 options) 28)) + ((and (not (logtest? (-> arg0 options) 28)) (logtest? (-> arg0 options) 1) (zero? (logand (-> *cpad-list* cpads 0 button0-rel 0) (-> arg0 button))) ) #f ) - ((and (zero? (logand (-> arg0 options) 29)) + ((and (not (logtest? (-> arg0 options) 29)) (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (-> arg0 button))) ) #f diff --git a/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc index ddda1bb7fe..ccd15149c1 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc @@ -29,11 +29,11 @@ ;; failed to figure out what this is: (defstate cam-point-watch (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -51,7 +51,7 @@ (let ((s5-0 (new-stack-vector0)) (gp-0 (new-stack-vector0)) ) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f28-0 (analog-input (the-as int (-> *cpad-list* cpads 0 leftx)) 128.0 48.0 110.0 -1.0)) (f30-0 (analog-input (the-as int (-> *cpad-list* cpads 0 lefty)) 128.0 48.0 110.0 -1.0)) (f26-0 (analog-input (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 48.0 110.0 -1.0)) @@ -369,7 +369,7 @@ ) ) ) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f28-14 (analog-input (the-as int (-> *cpad-list* cpads arg3 leftx)) 128.0 48.0 110.0 -1.0)) (f30-14 (analog-input (the-as int (-> *cpad-list* cpads arg3 lefty)) 128.0 48.0 110.0 -1.0)) (f26-0 (analog-input (the-as int (-> *cpad-list* cpads arg3 rightx)) 128.0 48.0 110.0 -1.0)) @@ -478,11 +478,11 @@ ;; failed to figure out what this is: (defstate cam-free-floating (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc index 6b7a53b9d6..94c181ec9e 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc @@ -3,11 +3,11 @@ ;; failed to figure out what this is: (defstate cam-really-fixed (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -32,11 +32,11 @@ ;; failed to figure out what this is: (defstate cam-fixed (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -71,11 +71,11 @@ ;; failed to figure out what this is: (defstate cam-fixed-read-entity (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -110,11 +110,11 @@ ;; failed to figure out what this is: (defstate cam-pov (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -176,11 +176,11 @@ ;; failed to figure out what this is: (defstate cam-pov180 (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -357,11 +357,11 @@ ;; failed to figure out what this is: (defstate cam-standoff (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'set-standoff-dist) - (vector-normalize! (-> self pivot-pt) (the-as float (-> arg3 param 0))) + (vector-normalize! (-> self pivot-pt) (the-as float (-> event param 0))) (cam-standoff-calc-trans) ) ((= v1-0 'set-standoff-height) @@ -370,12 +370,12 @@ (-> self pivot-pt) (-> self pivot-pt) (-> *camera* local-down) - (the-as float (-> arg3 param 0)) + (the-as float (-> event param 0)) ) (cam-standoff-calc-trans) ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -400,7 +400,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) @@ -498,11 +498,11 @@ ;; failed to figure out what this is: (defstate cam-eye (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -532,7 +532,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (go cam-free-floating) ) (none) @@ -544,7 +544,7 @@ (let ((s4-0 (vector-reset! (new-stack-vector0))) (s5-0 (new-stack-matrix0)) ) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f30-0 (analog-input (the-as int (+ (-> *cpad-list* cpads 0 rightx) -256 (-> *cpad-list* cpads 0 leftx))) 0.0 @@ -594,7 +594,7 @@ ) (matrix-axis-angle! s5-0 (-> *camera* local-down) (-> s4-0 y)) (matrix*! (the-as matrix (-> self tracking)) (the-as matrix (-> self tracking)) s5-0) - (when (zero? (logand (-> self options) 8)) + (when (not (logtest? (-> self options) 8)) (if (< (vector-dot (the-as vector (&-> self stack 96)) (-> *camera* local-down)) 0.0) (forward-down->inv-matrix (the-as matrix (-> self tracking)) @@ -611,7 +611,7 @@ (matrix-axis-angle! s5-0 (the-as vector (-> self tracking)) (- (-> s4-0 x))) (matrix*! (the-as matrix (-> self tracking)) (the-as matrix (-> self tracking)) s5-0) ) - (when (zero? (logand (-> self options) 8)) + (when (not (logtest? (-> self options) 8)) (let ((f30-1 (vector-dot (-> *camera* local-down) (the-as vector (&-> self stack 112))))) (set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0)) (when (< (sin (-> *CAM_EYE-bank* max-degrees)) (fabs f30-1)) @@ -739,7 +739,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) @@ -761,11 +761,11 @@ ;; failed to figure out what this is: (defstate cam-decel (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -816,11 +816,11 @@ ;; failed to figure out what this is: (defstate cam-endlessfall (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -879,7 +879,7 @@ (f28-0 (acos f0-1)) (s4-0 (new 'stack-no-clear 'matrix)) ) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f24-0 (analog-input (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 @@ -1157,7 +1157,7 @@ ;; failed to figure out what this is: (defstate cam-circular (camera-slave) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) @@ -1188,7 +1188,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) @@ -2199,7 +2199,7 @@ (cam-los-setup-lateral arg2 s4-1 arg1) ) (cond - ((zero? (logand (-> self options) 1024)) + ((not (logtest? (-> self options) 1024)) ) ((= (-> self string-vel-dir) 5) ) @@ -4886,9 +4886,9 @@ ;; failed to figure out what this is: (defstate cam-string (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond @@ -4896,7 +4896,7 @@ (set! (-> self butt-timer) (the-as uint (+ (-> self clock frame-counter) (seconds 0.25)))) (set! (-> self butt-seek) (the-as basic #t)) (set! v0-0 (the-as none (-> self butt-vector))) - (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> event param 0)) quad)) v0-0 ) ((= v1-0 'teleport) @@ -4906,18 +4906,18 @@ ) ) ((= v1-0 'joystick) - (set! (-> self phony-joystick-x) (the-as float (-> arg3 param 0))) - (set! (-> self phony-joystick-y) (the-as float (-> arg3 param 1))) + (set! (-> self phony-joystick-x) (the-as float (-> event param 0))) + (set! (-> self phony-joystick-y) (the-as float (-> event param 1))) (set! v0-0 (the-as none #t)) (set! (-> self have-phony-joystick) (the-as basic v0-0)) v0-0 ) ((= v1-0 'tween-dist) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! (-> self string-val-locked) (the-as basic #t)) - (let ((s5-0 (the-as object (-> arg3 param 0))) - (gp-1 (the-as object (-> arg3 param 1))) + (let ((s5-0 (the-as object (-> event param 0))) + (gp-1 (the-as object (-> event param 1))) ) (if (!= (-> (the-as vector s5-0) y) 4095996000.0) (seek! @@ -4960,10 +4960,10 @@ ) ((= v1-0 'set-dist) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! (-> self string-val-locked) (the-as basic #t)) - (set! (-> self string-min-val quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (set! (-> self string-max-val quad) (-> (the-as vector (-> arg3 param 1)) quad)) + (set! (-> self string-min-val quad) (-> (the-as vector (-> event param 0)) quad)) + (set! (-> self string-max-val quad) (-> (the-as vector (-> event param 1)) quad)) (set! (-> self string-max-val x) (fmax (-> self string-max-val x) (-> self string-min-val x))) (set! (-> self string-max-val y) (fmax (-> self string-max-val y) (-> self string-min-val y))) (set! (-> self string-max-val z) (fmax (-> self string-max-val z) (-> self string-min-val z))) @@ -4976,11 +4976,11 @@ ) ((= v1-0 'relative-position) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! (-> self string-val-locked) (the-as basic #t)) (set! (-> self string-relative) (the-as basic #t)) (set! v0-0 (the-as none (-> self relative-position))) - (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> event param 0)) quad)) v0-0 ) (else @@ -4991,13 +4991,13 @@ ) ) ((= v1-0 'set-max-angle-offset) - (set! (-> self max-angle-offset) (the-as float (-> arg3 param 0))) + (set! (-> self max-angle-offset) (the-as float (-> event param 0))) ) ((= v1-0 'blocked-side?) (-> self los-state) ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -5160,7 +5160,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) @@ -5246,11 +5246,11 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (when (not (paused?)) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f0-0 (analog-input (the-as int (-> *cpad-list* cpads 0 righty)) 128.0 32.0 110.0 0.05))) (cond ((< (* 0.05 (- 1.0 (-> self view-off-param))) f0-0) @@ -5271,7 +5271,7 @@ (set! (-> self view-off z) (lerp (-> *CAM_STICK-bank* min-z) (-> *CAM_STICK-bank* max-z) (-> self view-off-param)) ) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f0-16 (analog-input (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 @@ -5396,7 +5396,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) diff --git a/test/decompiler/reference/jak2/engine/camera/cam-update_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-update_REF.gc index 5673af0c88..2628e5829b 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-update_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-update_REF.gc @@ -89,837 +89,167 @@ ;; definition for function update-visible ;; INFO: Used lq/sq -;; ERROR: failed type prop at 290: Could not figure out load: (set! v1 (l.w s3)) -(defun update-visible ((a0-0 math-camera)) - (local-vars - (v0-0 none) - (v0-1 none) - (v0-2 none) - (v0-3 none) - (v0-4 none) - (v0-5 object) - (v0-6 none) - (v0-7 none) - (v0-8 none) - (v0-9 symbol) - (v1-0 symbol) - (v1-2 int) - (v1-3 int) - (v1-4 int) - (v1-5 level) - (v1-6 level-group) - (v1-7 int) - (v1-10 int) - (v1-11 int) - (v1-12 int) - (v1-13 symbol) - (v1-15 bsp-header) - (v1-16 int) - (v1-17 int) - (v1-18 symbol) - (v1-19 symbol) - (v1-20 symbol) - (v1-21 symbol) - (v1-22 symbol) - (v1-23 symbol) - (v1-24 level-vis-info) - (v1-25 bsp-header) - (v1-26 symbol) - (v1-28 symbol) - (v1-29 int) - (v1-30 int) - (v1-31 int) - (v1-32 symbol) - (v1-33 symbol) - (v1-34 symbol) - (v1-37 type) - (v1-38 none) - (v1-40 int) - (v1-44 symbol) - (v1-45 symbol) - (v1-46 level-group) - (v1-48 bsp-header) - (v1-50 bsp-header) - (v1-52 level-group) - (v1-53 int) - (v1-56 symbol) - (v1-57 symbol) - (v1-58 symbol) - (v1-60 int) - (v1-61 int) - (v1-62 int) - (v1-63 int) - (v1-64 int) - (v1-65 int) - (v1-66 symbol) - (v1-68 symbol) - (v1-69 symbol) - (v1-70 symbol) - (v1-71 symbol) - (v1-72 int) - (v1-73 int) - (v1-74 bsp-header) - (v1-75 bsp-header) - (v1-76 bsp-header) - (v1-77 uint) - (v1-78 bsp-header) - (v1-79 uint) - (v1-81 none) - (v1-82 symbol) - (v1-83 symbol) - (v1-84 symbol) - (v1-86 bsp-header) - (v1-87 bsp-header) - (v1-88 bsp-header) - (v1-89 uint) - (v1-91 none) - (v1-92 none) - (v1-93 none) - (v1-94 none) - (v1-95 none) - (v1-96 none) - (v1-97 none) - (v1-98 none) - (v1-99 none) - (v1-102 none) - (v1-103 none) - (v1-105 none) - (v1-106 none) - (v1-107 none) - (v1-108 none) - (v1-109 none) - (v1-111 none) - (v1-112 none) - (v1-115 level-group) - (v1-116 int) - (a0-1 level-group) - (a0-2 symbol) - (a0-4 bsp-header) - (a0-5 (inline-array bsp-node)) - (a0-6 symbol) - (a0-7 symbol) - (a0-9 bsp-header) - (a0-11 level-group) - (a0-12 symbol) - (a0-13 pointer) - (a0-14 symbol) - (a0-15 basic) - (a0-17 int) - (a0-18 int) - (a0-19 int) - (a0-20 uint) - (a0-23 symbol) - (a0-24 level) - (a0-25 int) - (a0-26 int) - (a0-27 level-vis-info) - (a0-28 symbol) - (a0-29 symbol) - (a0-30 pointer) - (a0-31 pointer) - (a0-32 cpad-list) - (a0-33 cpad-info) - (a0-34 pad-buttons) - (a0-35 pad-buttons) - (a0-36 level-group) - (a0-37 symbol) - (a0-38 int) - (a0-39 int) - (a0-40 string) - (a0-41 int) - (a0-42 int) - (a0-43 none) - (a0-45 none) - (a0-47 none) - (a0-49 none) - (a0-50 none) - (a0-51 none) - (a0-52 none) - (a0-53 none) - (a0-54 none) - (a0-55 none) - (a0-56 none) - (a0-57 none) - (a0-58 none) - (a0-59 none) - (a0-60 none) - (a0-61 none) - (a0-62 none) - (a0-63 none) - (a0-64 none) - (a0-65 none) - (a0-66 none) - (a0-67 none) - (a0-68 none) - (a0-69 none) - (a0-70 none) - (a0-71 none) - (a0-72 none) - (a0-73 none) - (a0-74 none) - (a0-75 none) - (a0-76 none) - (a0-77 none) - (a0-78 none) - (a0-79 none) - (a0-80 none) - (a0-81 none) - (a0-82 none) - (a0-83 none) - (a1-0 symbol) - (a1-1 vector) - (a1-2 (pointer uint16)) - (a1-3 vis-info-flag) - (a1-4 bsp-header) - (a1-5 uint) - (a1-9 int) - (a1-10 (pointer uint16)) - (a1-11 (pointer uint16)) - (a1-12 int) - (a1-13 int) - (a1-14 string) - (a1-15 int) - (a1-16 int) - (a1-17 none) - (a1-18 none) - (a1-19 none) - (a1-20 none) - (a1-21 none) - (a1-22 none) - (a1-23 none) - (a1-24 none) - (a1-25 none) - (a1-26 none) - (a1-27 none) - (a1-28 none) - (a1-29 none) - (a1-30 none) - (a1-31 none) - (a1-32 none) - (a1-33 none) - (a1-34 none) - (a1-35 none) - (a1-36 none) - (a1-37 none) - (a1-38 none) - (a1-39 none) - (a1-40 none) - (a1-41 none) - (a2-0 int) - (a2-1 uint) - (a2-2 int) - (a2-4 symbol) - (a2-5 int) - (a2-7 none) - (a2-8 none) - (a2-9 none) - (a3-0 uint) - (a3-1 int) - (a3-2 int) - (a3-3 int) - (a3-4 none) - (a3-5 none) - (a3-6 none) - (t0-0 int) - (t0-2 uint) - (t0-3 none) - (t0-4 none) - (t0-5 none) - (t1-0 uint) - (t2-0 string) - (t3-0 string) - (s2-0 int) - (s3-0 uint) - (s4-0 level-vis-info) - (s4-1 uint) - (s5-0 int) - (s5-1 level) - (s5-2 level) - (t9-0 (function bsp-header vector none)) - (t9-1 (function pointer pointer int none)) - (t9-2 (function none)) - (t9-3 (function pointer pointer int none)) - (t9-4 (function pointer pointer int none)) - (t9-5 (function _varargs_ object)) - (t9-6 none) - (t9-7 none) - (t9-8 none) - (gp-1 int) - (gp-2 int) - (sp-0 none) - (f0-0 none) - (f0-1 none) - (f0-2 none) - (f0-3 none) - (f0-4 none) - (f0-5 none) - (f0-6 none) - (f0-7 none) - (f0-8 none) - (f0-9 none) - (f0-10 none) - (f0-11 none) - (f0-12 none) - (f0-13 none) - (f0-14 none) - (f0-15 none) - (f0-16 none) - (f0-17 none) - (f0-18 none) - (f0-19 none) - (f0-20 none) - (f0-21 none) - (f0-22 none) - (f0-23 none) - (f0-24 none) - (f0-25 none) - (f1-0 none) - (f1-1 none) - (f1-2 none) - (f1-3 none) - (f1-4 none) - (f1-5 none) - (f1-6 none) - (f1-7 none) - (f1-8 none) - (f1-9 none) - (f1-10 none) - (f1-11 none) - (f1-12 none) - (f1-13 none) - (f1-14 none) - (f1-15 none) - (f1-16 none) - (f1-17 none) - (f1-18 none) - (f1-19 none) - (f1-20 none) - (f1-21 none) - (f1-22 none) - (f1-23 none) - (f1-24 none) - (f1-25 none) - (f1-26 none) - (f1-27 none) - (f1-28 none) - (f1-29 none) - (f1-30 none) - (f1-31 none) - (f1-32 none) - (f1-33 none) - (f1-34 none) - (f1-35 none) - (f1-36 none) - (f1-37 none) - (f1-38 none) - (f1-39 none) - (f1-40 none) - (f1-41 none) - (f1-42 none) - (f1-43 none) - (f1-44 none) - (f1-45 none) - (f1-46 none) - (f1-47 none) - ) - (when (begin (set! v1-0 *artist-fix-visible*) (not v1-0)) - (set! s5-0 0) - (while (begin (set! v1-6 *level*) (set! v1-7 (-> v1-6 length)) (<.si s5-0 v1-7)) - (when (begin - (set! v1-2 5232) - (set! v1-3 (*.si v1-2 s5-0)) - (set! v1-4 (+ v1-3 256)) - (set! a0-1 *level*) - (set! v1-5 (+ v1-4 a0-1)) - (set! a0-2 'active) - (set! a1-0 (-> v1-5 status)) - (= a1-0 a0-2) +(defun update-visible ((arg0 math-camera)) + (local-vars (s4-0 level-vis-info)) + (when (not *artist-fix-visible*) + (dotimes (s5-0 (-> *level* length)) + (let ((v1-5 (-> *level* level s5-0))) + (when (= (-> v1-5 status) 'active) + (if (and (nonzero? (-> v1-5 bsp nodes)) (or *update-leaf-when-outside-bsp* (-> v1-5 inside-boxes))) + (bsp-camera-asm (-> v1-5 bsp) (-> arg0 trans)) ) - (when (begin - (and (begin (set! a0-4 (-> v1-5 bsp)) (set! a0-5 (-> a0-4 nodes)) (nonzero? a0-5)) - (or (begin (set! a0-7 *update-leaf-when-outside-bsp*) a0-7) (set! a0-6 (-> v1-5 inside-boxes))) - ) - a0-6 - ) - (set! t9-0 bsp-camera-asm) - (set! a0-9 (-> v1-5 bsp)) - (set! a1-1 (-> a0-0 trans)) - (call! a0-9 a1-1) - (set! a0-10 v0-0) ) ) - (set! s5-0 (+ s5-0 1)) ) - (set! gp-1 0) - (while (begin (set! v1-52 *level*) (set! v1-53 (-> v1-52 length)) (<.si gp-1 v1-53)) - (when (begin - (set! v1-10 5232) - (set! v1-11 (*.si v1-10 gp-1)) - (set! v1-12 (+ v1-11 256)) - (set! a0-11 *level*) - (set! s5-1 (+ v1-12 a0-11)) - (set! v1-13 'active) - (set! a0-12 (-> s5-1 status)) - (= a0-12 v1-13) - ) - (cond - ((begin - (or (begin - (if (begin - (set! v1-15 (-> s5-1 bsp)) - (set! v1-16 (-> v1-15 visible-list-length)) - (set! v1-17 (+ v1-16 15)) - (set! a2-0 (sra v1-17 4)) - (set! v1-18 (-> s5-1 all-visible?)) - v1-18 - ) - (set! v1-19 (-> s5-1 all-visible?)) - (set! v1-19 #t) - ) - (set! (-> s5-1 all-visible?) v1-19) - (set! v1-20 (-> s5-1 force-all-visible?)) - (not v1-20) - ) - (set! v1-21 (-> s5-1 inside-boxes)) - ) - v1-21 - ) - (cond - ((begin - (or (begin (set! v1-22 *artist-all-visible*) v1-22) - (begin (set! v1-24 (-> s5-1 vis-info 0)) (set! v1-23 (not v1-24))) - ) - v1-23 - ) - (when (begin - (set! t9-1 quad-copy!) - (set! a0-13 (-> s5-1 vis-bits)) - (set! v1-25 (-> s5-1 bsp)) - (set! a1-2 (-> v1-25 all-visible-list)) - (call! a0-13 a1-2 a2-0) - (set! v1-26 'loading) - (set! a0-14 (-> s5-1 all-visible?)) - (= a0-14 v1-26) - ) - (set! v1-28 #t) - (set! (-> s5-1 all-visible?) v1-28) - ) - ) - ((begin - (when (begin - (and (begin - (set! v1-29 (-> s5-1 vis-self-index)) - (set! v1-30 (sll v1-29 2)) - (set! v1-31 (+ v1-30 s5-1)) - (set! s4-0 (dynamic-array-field-access v1-31 vis-info PLACEHOLDER)) - (set! v1-32 #f) - s4-0 - ) - (set! a0-15 (-> s4-0 from-bsp)) - ) - a0-15 - ) - (when (begin - (set! v1-33 #t) - (set! a0-17 #x8000) - (set! a0-18 (sll a0-17 16)) - (set! a1-3 (-> s4-0 flags)) - (set! a0-19 (logand a0-18 a1-3)) - (cmove-#f-zero v1-32 a0-19 v1-33) - (set! a0-20 (-> s4-0 length)) - (set! a1-4 (-> s4-0 from-bsp)) - (set! a1-5 (-> a1-4 current-leaf-idx)) - (<.ui a0-20 a1-5) - ) - (set! v1-32 #f) - (set! a0-22 v1-32) - ) + (dotimes (gp-1 (-> *level* length)) + (let ((s5-1 (-> *level* level gp-1))) + (when (= (-> s5-1 status) 'active) + (let ((a2-0 (/ (+ (-> s5-1 bsp visible-list-length) 15) 16))) + (set! (-> s5-1 all-visible?) (if (-> s5-1 all-visible?) + (-> s5-1 all-visible?) + #t + ) ) - v1-32 - ) - (when (begin - (if (begin (set! v1-34 'loading) (set! a0-23 (-> s5-1 all-visible?)) (!= a0-23 v1-34)) - (set! (-> s5-1 all-visible?) #f) - ) - (set! a0-24 s5-1) - (set! v1-37 (-> a0-24 type)) - (set! t9-2 (method-of-type v1-37 level-method-16)) - (set! a1-6 s4-0) - (set! a2-1 (-> s4-0 ramdisk)) - (set! a3-0 (-> s4-0 string-block)) - (set! v0-2 (call!)) - (set! v1-38 v0-2) - v1-38 - ) - (set! v1-40 8) - (while (nonzero? v1-40) - (when (begin - (set! v1-40 (+ v1-40 -1)) - (set! a0-25 (sll v1-40 2)) - (set! a0-26 (+ a0-25 s5-1)) - (set! a0-27 (dynamic-array-field-access a0-26 vis-info PLACEHOLDER)) - a0-27 - ) - (when (!= a0-27 s4-0) - (set! a1-9 -1) - (set! (-> a0-27 current-vis-string) (the-as uint a1-9)) - ) - ) - ) - (set! (-> s5-1 all-visible?) #f) - ) - ) - (else - (and (begin (set! v1-44 (-> s5-1 all-visible?)) (set! a0-28 'loading) (set! a0-29 (= v1-44 a0-28)) a0-29) - (begin (set! v1-46 *level*) (set! v1-45 (-> v1-46 play?))) - ) + (cond + ((or (not (-> s5-1 force-all-visible?)) (-> s5-1 inside-boxes)) (cond - (v1-45 - ) + ((or *artist-all-visible* (not (-> s5-1 vis-info 0))) + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) + (if (= (-> s5-1 all-visible?) 'loading) + (set! (-> s5-1 all-visible?) #t) + ) + ) + ((begin + (set! s4-0 (-> s5-1 vis-info (-> s5-1 vis-self-index))) + (let ((v1-32 #f)) + (when (and s4-0 (-> s4-0 from-bsp)) + (set! v1-32 (logtest? (vis-info-flag vis-valid) (-> s4-0 flags))) + (if (< (-> s4-0 length) (-> s4-0 from-bsp current-leaf-idx)) + (set! v1-32 #f) + ) + ) + v1-32 + ) + ) + (if (!= (-> s5-1 all-visible?) 'loading) + (set! (-> s5-1 all-visible?) #f) + ) + (when (update-vis! s5-1 s4-0 (-> s4-0 ramdisk) (the-as (pointer uint8) (-> s4-0 string-block))) + (countdown (v1-40 8) + (let ((a0-27 (-> s5-1 vis-info v1-40))) + (when a0-27 + (if (!= a0-27 s4-0) + (set! (-> a0-27 current-vis-string) (the-as uint -1)) + ) + ) + ) + ) + (set! (-> s5-1 all-visible?) #f) + ) + ) + ((and (= (-> s5-1 all-visible?) 'loading) (-> *level* play?)) + ) (else - (set! t9-3 quad-copy!) - (set! a0-30 (-> s5-1 vis-bits)) - (set! v1-48 (-> s5-1 bsp)) - (set! a1-10 (-> v1-48 all-visible-list)) - (call! a0-30 a1-10 a2-0) - (set! v1-49 v0-3) + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) ) ) ) + (else + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) + ) + ) + ) + ) + ) + ) + ) + (if (and *artist-fix-visible* (cpad-pressed? 0 r2)) + (set! *fix-visible-level-mask* (logand (+ *fix-visible-level-mask* 1) 63)) + ) + (dotimes (gp-2 (-> *level* length)) + (let ((s5-2 (-> *level* level gp-2))) + (when (= (-> s5-2 status) 'active) + (cond + ((or *artist-fix-visible* *stats-bsp*) + (set! (-> s5-2 render?) (zero? (logand *fix-visible-level-mask* (ash 1 (-> s5-2 index))))) + (format + *stdcon* + "~0kleaf-index ~8S ~C = ~d node ~d ~S ~S~%" + (-> s5-2 name) + (if (not (logtest? *fix-visible-level-mask* (ash 1 (-> s5-2 index)))) + 88 + 32 + ) + (-> s5-2 bsp current-leaf-idx) + (-> s5-2 bsp cam-box-idx) + (if (zero? (-> s5-2 bsp cam-using-back)) + "front" + "back" + ) + (if (nonzero? (-> s5-2 bsp cam-outside-bsp)) + "outside" + "" + ) ) ) (else - (set! t9-4 quad-copy!) - (set! a0-31 (-> s5-1 vis-bits)) - (set! v1-50 (-> s5-1 bsp)) - (set! a1-11 (-> v1-50 all-visible-list)) - (call! a0-31 a1-11 a2-0) - (set! v1-51 v0-4) + (set! (-> s5-2 render?) #t) ) ) - ) - (set! gp-1 (+ gp-1 1)) - ) - ) - (when (begin - (and (begin (set! v1-56 *artist-fix-visible*) v1-56) (begin - (set! v1-58 #t) - (set! a0-32 *cpad-list*) - (set! a0-33 (-> a0-32 cpads 0)) - (set! a0-34 (-> a0-33 button0-rel 0)) - (set! a0-35 (logand a0-34 512)) - (cmove-#f-zero v1-57 a0-35 v1-58) - ) - ) - v1-57 - ) - (set! v1-60 *fix-visible-level-mask*) - (set! v1-61 (+ v1-60 1)) - (set! v1-62 (logand v1-61 63)) - (set! *fix-visible-level-mask* v1-62) - ) - (set! gp-2 0) - (while (begin (set! v1-115 *level*) (set! v1-116 (-> v1-115 length)) (<.si gp-2 v1-116)) - (when (begin - (set! v1-63 5232) - (set! v1-64 (*.si v1-63 gp-2)) - (set! v1-65 (+ v1-64 256)) - (set! a0-36 *level*) - (set! s5-2 (+ v1-65 a0-36)) - (set! v1-66 'active) - (set! a0-37 (-> s5-2 status)) - (= a0-37 v1-66) - ) - (when (begin - (cond - ((begin (or (begin (set! v1-68 *artist-fix-visible*) v1-68) (set! v1-69 *stats-bsp*)) v1-69) - (set! v1-70 #t) - (set! a0-38 *fix-visible-level-mask*) - (set! a1-12 1) - (set! a2-2 (-> s5-2 index)) - (set! a1-13 (ash.si a1-12 a2-2)) - (set! a0-39 (logand a0-38 a1-13)) - (cmove-#f-nonzero v1-71 a0-39 v1-70) - (set! (-> s5-2 render?) v1-71) - (set! t9-5 format) - (set! a0-40 *stdcon*) - (set! a1-14 L105) - (set! a2-4 (-> s5-2 name)) - (set! v1-72 *fix-visible-level-mask*) - (set! a3-1 1) - (set! t0-0 (-> s5-2 index)) - (set! a3-2 (ash.si a3-1 t0-0)) - (if (begin (set! v1-73 (logand v1-72 a3-2)) (zero? v1-73)) - (set! a3-3 88) - (set! a3-3 (the-as int 32)) - ) - (if (begin - (set! v1-74 (-> s5-2 bsp)) - (set! t0-2 (-> v1-74 current-leaf-idx)) - (set! v1-75 (-> s5-2 bsp)) - (set! t1-0 (-> v1-75 cam-box-idx)) - (set! v1-76 (-> s5-2 bsp)) - (set! v1-77 (-> v1-76 cam-using-back)) - (zero? v1-77) + (when (and *artist-fix-visible* (zero? (logand *fix-visible-level-mask* (ash 1 (-> s5-2 index))))) + (let ((s4-1 (-> s5-2 bsp current-leaf-idx)) + (s3-0 (-> s5-2 bsp vis-spheres)) + ) + (-> s5-2 bsp unk-data 17) + (when (nonzero? s3-0) + (dotimes (s2-0 (-> s3-0 length)) + (let* ((v1-93 (the int (-> s3-0 data s2-0 w))) + (a0-43 (abs v1-93)) ) - (set! t2-0 L104) - (set! t2-0 (the-as string L103)) - ) - (if (begin (set! v1-78 (-> s5-2 bsp)) (set! v1-79 (-> v1-78 cam-outside-bsp)) (nonzero? v1-79)) - (set! t3-0 L102) - (set! t3-0 (the-as string L101)) - ) - (call! a0-40 a1-14 a2-4 a3-3 t0-2 t1-0 t2-0 t3-0) - (set! v1-80 v0-5) - ) - (else - (set! v1-81 (the-as none #t)) - (set! (-> s5-2 render?) (the-as symbol v1-81)) - ) - ) - (and (begin (set! v1-82 *artist-fix-visible*) v1-82) (begin - (set! v1-84 #t) - (set! a0-41 *fix-visible-level-mask*) - (set! a1-15 1) - (set! a2-5 (-> s5-2 index)) - (set! a1-16 (ash.si a1-15 a2-5)) - (set! a0-42 (logand a0-41 a1-16)) - (cmove-#f-nonzero v1-83 a0-42 v1-84) - ) - ) - v1-83 - ) - (when (begin - (set! v1-86 (-> s5-2 bsp)) - (set! s4-1 (-> v1-86 current-leaf-idx)) - (set! v1-87 (-> s5-2 bsp)) - (set! s3-0 (-> v1-87 unk-data 9)) - (set! v1-88 (-> s5-2 bsp)) - (set! v1-89 (-> v1-88 unk-data 17)) - (nonzero? s3-0) - ) - (set! s2-0 0) - (while (begin (set! v1-99 (the-as none (l.w s3-0))) (<.si s2-0 v1-99)) - (when (begin - (set! v1-91 (the-as none (sll s2-0 4))) - (set! v1-92 (the-as none (+ s3-0 v1-91))) - (set! f0-0 (the-as none (l.f (+ v1-92 24)))) - (set! f0-1 (the-as none (f2i f0-0))) - (set! v1-93 (the-as none (fpr->gpr f0-1))) - (set! a0-43 (the-as none v1-93)) - (set! a0-43 (the-as none (abs a0-43))) - (= a0-43 s4-1) + (when (= a0-43 s4-1) + (if (>= v1-93 0) + (add-debug-sphere #t (bucket-id debug2) (-> s3-0 data s2-0) (meters 1) (new 'static 'rgba :b #xff :a #x80)) + (add-debug-sphere #t (bucket-id debug2) (-> s3-0 data s2-0) (meters 1) (new 'static 'rgba :r #xff :a #x80)) + ) ) - (cond - ((>=0.si v1-93) - (set! t9-6 (the-as none add-debug-sphere)) - (set! a0-45 (the-as none #t)) - (set! a1-17 (the-as none 324)) - (set! v1-94 (the-as none (sll s2-0 4))) - (set! v1-95 (the-as none (+ v1-94 12))) - (set! a2-7 (the-as none (+ v1-95 s3-0))) - (set! a3-4 (the-as none #x45800000)) - (set! v1-96 (the-as none #x80ff)) - (set! t0-3 (the-as none (sll v1-96 16))) - (call!) - (set! a0-46 (the-as none v0-6)) - ) - (else - (set! t9-7 (the-as none add-debug-sphere)) - (set! a0-47 (the-as none #t)) - (set! a1-18 (the-as none 324)) - (set! v1-97 (the-as none (sll s2-0 4))) - (set! v1-98 (the-as none (+ v1-97 12))) - (set! a2-8 (the-as none (+ v1-98 s3-0))) - (set! a3-5 (the-as none #x45800000)) - (set! t0-4 (the-as none (the-as uint #x800000ff))) - (call!) - (set! a0-48 (the-as none v0-7)) ) ) ) - (set! s2-0 (the-as int (+ s2-0 1))) ) - ) - (when (begin - (set! v1-102 (the-as none (-> s5-2 bsp))) - (set! v1-103 (the-as none (l.wu (+ v1-102 116)))) - (nonzero? v1-103) + (when (nonzero? (-> s5-2 bsp nodes)) + (let ((v1-107 (-> s5-2 bsp nodes (-> s5-2 bsp cam-box-idx))) + (a2-9 (new 'stack-no-clear 'vector)) + ) + (set! (-> a2-9 quad) (-> s5-2 bsp bsp-offset quad)) + (let ((a3-6 (new 'stack-no-clear 'vector))) + (set! (-> a3-6 quad) (-> s5-2 bsp bsp-offset quad)) + (cond + ((zero? (-> s5-2 bsp cam-using-back)) + (+! (-> a2-9 x) (the float (* (the-as int (-> v1-107 front-box-min x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a2-9 y) (the float (* (the-as int (-> v1-107 front-box-min y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a2-9 z) (the float (* (the-as int (-> v1-107 front-box-min z)) (the int (-> s5-2 bsp bsp-scale z))))) + (+! (-> a3-6 x) (the float (* (the-as int (-> v1-107 front-box-max x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a3-6 y) (the float (* (the-as int (-> v1-107 front-box-max y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a3-6 z) (the float (* (the-as int (-> v1-107 front-box-max z)) (the int (-> s5-2 bsp bsp-scale z))))) + ) + (else + (+! (-> a2-9 x) (the float (* (the-as int (-> v1-107 back-box-min x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a2-9 y) (the float (* (the-as int (-> v1-107 back-box-min y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a2-9 z) (the float (* (the-as int (-> v1-107 back-box-min z)) (the int (-> s5-2 bsp bsp-scale z))))) + (+! (-> a3-6 x) (the float (* (the-as int (-> v1-107 back-box-max x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a3-6 y) (the float (* (the-as int (-> v1-107 back-box-max y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a3-6 z) (the float (* (the-as int (-> v1-107 back-box-max z)) (the int (-> s5-2 bsp bsp-scale z))))) + ) + ) + (add-debug-box #t (bucket-id debug2) a2-9 a3-6 (new 'static 'rgba :g #xff :b #xff :a #x80)) ) - (cond - ((begin - (set! v1-105 (the-as none (l.wu (+ s5-2 92)))) - (set! v1-106 (the-as none (l.wu (+ v1-105 116)))) - (set! a0-49 (the-as none 20)) - (set! a1-19 (the-as none (l.wu (+ s5-2 92)))) - (set! a1-20 (the-as none (l.hu (+ a1-19 150)))) - (set! a0-50 (the-as none (*.ui a0-49 a1-20))) - (set! v1-107 (the-as none (+ v1-106 a0-50))) - (set! a2-9 (the-as none (+ sp-0 16))) - (set! a0-51 (the-as none (l.wu (+ s5-2 92)))) - (set! a0-52 (the-as none (+ a0-51 300))) - (set! a0-53 (the-as none (l.q a0-52))) - (s.q! a2-9 a0-53) - (set! a3-6 (the-as none (+ sp-0 32))) - (set! a0-54 (the-as none (l.wu (+ s5-2 92)))) - (set! a0-55 (the-as none (+ a0-54 300))) - (set! a0-56 (the-as none (l.q a0-55))) - (s.q! a3-6 a0-56) - (set! a0-57 (the-as none (l.wu (+ s5-2 92)))) - (set! a0-58 (the-as none (l.bu (+ a0-57 149)))) - (zero? a0-58) - ) - (set! f0-2 (the-as none (l.f a2-9))) - (set! a0-59 (the-as none (l.b (+ v1-107 4)))) - (set! a1-21 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-0 (the-as none (l.f (+ a1-21 284)))) - (set! f1-1 (the-as none (f2i f1-0))) - (set! a1-22 (the-as none (fpr->gpr f1-1))) - (set! a0-60 (the-as none (*.si a0-59 a1-22))) - (set! f1-2 (the-as none (gpr->fpr a0-60))) - (set! f1-3 (the-as none (i2f f1-2))) - (set! f0-3 (the-as none (+.s f0-2 f1-3))) - (s.f! a2-9 f0-3) - (set! f0-4 (the-as none (l.f (+ a2-9 4)))) - (set! a0-61 (the-as none (l.b (+ v1-107 5)))) - (set! a1-23 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-4 (the-as none (l.f (+ a1-23 288)))) - (set! f1-5 (the-as none (f2i f1-4))) - (set! a1-24 (the-as none (fpr->gpr f1-5))) - (set! a0-62 (the-as none (*.si a0-61 a1-24))) - (set! f1-6 (the-as none (gpr->fpr a0-62))) - (set! f1-7 (the-as none (i2f f1-6))) - (set! f0-5 (the-as none (+.s f0-4 f1-7))) - (s.f! (+ a2-9 4) f0-5) - (set! f0-6 (the-as none (l.f (+ a2-9 8)))) - (set! a0-63 (the-as none (l.b (+ v1-107 6)))) - (set! a1-25 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-8 (the-as none (l.f (+ a1-25 292)))) - (set! f1-9 (the-as none (f2i f1-8))) - (set! a1-26 (the-as none (fpr->gpr f1-9))) - (set! a0-64 (the-as none (*.si a0-63 a1-26))) - (set! f1-10 (the-as none (gpr->fpr a0-64))) - (set! f1-11 (the-as none (i2f f1-10))) - (set! f0-7 (the-as none (+.s f0-6 f1-11))) - (s.f! (+ a2-9 8) f0-7) - (set! f0-8 (the-as none (l.f a3-6))) - (set! a0-65 (the-as none (l.b (+ v1-107 8)))) - (set! a1-27 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-12 (the-as none (l.f (+ a1-27 284)))) - (set! f1-13 (the-as none (f2i f1-12))) - (set! a1-28 (the-as none (fpr->gpr f1-13))) - (set! a0-66 (the-as none (*.si a0-65 a1-28))) - (set! f1-14 (the-as none (gpr->fpr a0-66))) - (set! f1-15 (the-as none (i2f f1-14))) - (set! f0-9 (the-as none (+.s f0-8 f1-15))) - (s.f! a3-6 f0-9) - (set! f0-10 (the-as none (l.f (+ a3-6 4)))) - (set! a0-67 (the-as none (l.b (+ v1-107 9)))) - (set! a1-29 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-16 (the-as none (l.f (+ a1-29 288)))) - (set! f1-17 (the-as none (f2i f1-16))) - (set! a1-30 (the-as none (fpr->gpr f1-17))) - (set! a0-68 (the-as none (*.si a0-67 a1-30))) - (set! f1-18 (the-as none (gpr->fpr a0-68))) - (set! f1-19 (the-as none (i2f f1-18))) - (set! f0-11 (the-as none (+.s f0-10 f1-19))) - (s.f! (+ a3-6 4) f0-11) - (set! f0-12 (the-as none (l.f (+ a3-6 8)))) - (set! v1-108 (the-as none (l.b (+ v1-107 10)))) - (set! a0-69 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-20 (the-as none (l.f (+ a0-69 292)))) - (set! f1-21 (the-as none (f2i f1-20))) - (set! a0-70 (the-as none (fpr->gpr f1-21))) - (set! v1-109 (the-as none (*.si v1-108 a0-70))) - (set! f1-22 (the-as none (gpr->fpr v1-109))) - (set! f1-23 (the-as none (i2f f1-22))) - (set! f0-13 (the-as none (+.s f0-12 f1-23))) - (s.f! (+ a3-6 8) f0-13) - (set! v1-110 (the-as none (fpr->gpr f0-13))) - ) - (else - (set! f0-14 (the-as none (l.f a2-9))) - (set! a0-71 (the-as none (l.b (+ v1-107 12)))) - (set! a1-31 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-24 (the-as none (l.f (+ a1-31 284)))) - (set! f1-25 (the-as none (f2i f1-24))) - (set! a1-32 (the-as none (fpr->gpr f1-25))) - (set! a0-72 (the-as none (*.si a0-71 a1-32))) - (set! f1-26 (the-as none (gpr->fpr a0-72))) - (set! f1-27 (the-as none (i2f f1-26))) - (set! f0-15 (the-as none (+.s f0-14 f1-27))) - (s.f! a2-9 f0-15) - (set! f0-16 (the-as none (l.f (+ a2-9 4)))) - (set! a0-73 (the-as none (l.b (+ v1-107 13)))) - (set! a1-33 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-28 (the-as none (l.f (+ a1-33 288)))) - (set! f1-29 (the-as none (f2i f1-28))) - (set! a1-34 (the-as none (fpr->gpr f1-29))) - (set! a0-74 (the-as none (*.si a0-73 a1-34))) - (set! f1-30 (the-as none (gpr->fpr a0-74))) - (set! f1-31 (the-as none (i2f f1-30))) - (set! f0-17 (the-as none (+.s f0-16 f1-31))) - (s.f! (+ a2-9 4) f0-17) - (set! f0-18 (the-as none (l.f (+ a2-9 8)))) - (set! a0-75 (the-as none (l.b (+ v1-107 14)))) - (set! a1-35 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-32 (the-as none (l.f (+ a1-35 292)))) - (set! f1-33 (the-as none (f2i f1-32))) - (set! a1-36 (the-as none (fpr->gpr f1-33))) - (set! a0-76 (the-as none (*.si a0-75 a1-36))) - (set! f1-34 (the-as none (gpr->fpr a0-76))) - (set! f1-35 (the-as none (i2f f1-34))) - (set! f0-19 (the-as none (+.s f0-18 f1-35))) - (s.f! (+ a2-9 8) f0-19) - (set! f0-20 (the-as none (l.f a3-6))) - (set! a0-77 (the-as none (l.b (+ v1-107 16)))) - (set! a1-37 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-36 (the-as none (l.f (+ a1-37 284)))) - (set! f1-37 (the-as none (f2i f1-36))) - (set! a1-38 (the-as none (fpr->gpr f1-37))) - (set! a0-78 (the-as none (*.si a0-77 a1-38))) - (set! f1-38 (the-as none (gpr->fpr a0-78))) - (set! f1-39 (the-as none (i2f f1-38))) - (set! f0-21 (the-as none (+.s f0-20 f1-39))) - (s.f! a3-6 f0-21) - (set! f0-22 (the-as none (l.f (+ a3-6 4)))) - (set! a0-79 (the-as none (l.b (+ v1-107 17)))) - (set! a1-39 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-40 (the-as none (l.f (+ a1-39 288)))) - (set! f1-41 (the-as none (f2i f1-40))) - (set! a1-40 (the-as none (fpr->gpr f1-41))) - (set! a0-80 (the-as none (*.si a0-79 a1-40))) - (set! f1-42 (the-as none (gpr->fpr a0-80))) - (set! f1-43 (the-as none (i2f f1-42))) - (set! f0-23 (the-as none (+.s f0-22 f1-43))) - (s.f! (+ a3-6 4) f0-23) - (set! f0-24 (the-as none (l.f (+ a3-6 8)))) - (set! v1-111 (the-as none (l.b (+ v1-107 18)))) - (set! a0-81 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-44 (the-as none (l.f (+ a0-81 292)))) - (set! f1-45 (the-as none (f2i f1-44))) - (set! a0-82 (the-as none (fpr->gpr f1-45))) - (set! v1-112 (the-as none (*.si v1-111 a0-82))) - (set! f1-46 (the-as none (gpr->fpr v1-112))) - (set! f1-47 (the-as none (i2f f1-46))) - (set! f0-25 (the-as none (+.s f0-24 f1-47))) - (s.f! (+ a3-6 8) f0-25) - (set! v1-113 (the-as none (fpr->gpr f0-25))) ) ) - (set! t9-8 (the-as none add-debug-box)) - (set! a0-83 (the-as none #t)) - (set! a1-41 (the-as none 324)) - (set! t0-5 (the-as none (the-as uint #x80ffff00))) - (call!) - (set! v1-114 (the-as none v0-8)) ) ) ) - (set! gp-2 (the-as int (+ gp-2 1))) ) - (set! v0-9 #f) - (ret-value v0-9) + #f ) ;; definition for symbol *save-camera-inv-rot*, type matrix diff --git a/test/decompiler/reference/jak2/engine/camera/camera_REF.gc b/test/decompiler/reference/jak2/engine/camera/camera_REF.gc index 2013c9287a..dcddaf28a1 100644 --- a/test/decompiler/reference/jak2/engine/camera/camera_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/camera_REF.gc @@ -938,7 +938,7 @@ ) (set! (-> obj free-point) -134250495) (dotimes (v1-21 32) - (when (zero? (logand s5-0 1)) + (when (not (logtest? s5-0 1)) (set! (-> obj point v1-21 next) (-> obj free-point)) (set! (-> obj free-point) v1-21) ) diff --git a/test/decompiler/reference/jak2/engine/collide/collide-shape-h_REF.gc b/test/decompiler/reference/jak2/engine/collide/collide-shape-h_REF.gc index 4a2b4a778e..3d6b6f831e 100644 --- a/test/decompiler/reference/jak2/engine/collide/collide-shape-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/collide/collide-shape-h_REF.gc @@ -1297,7 +1297,7 @@ (penetrate-using penetrate :offset-assert 168) (penetrated-by penetrate :offset-assert 176) (backup-collide-as collide-spec :offset-assert 184) - (backup-collde-with collide-spec :offset-assert 188) + (backup-collide-with collide-spec :offset-assert 188) (event-priority uint8 :offset-assert 192) (rider-max-momentum float :offset-assert 196) ) @@ -1306,7 +1306,7 @@ :flag-assert #x37000000c8 (:methods (new (symbol type process-drawable collide-list-enum) _type_ 0) - (collide-shape-method-28 () none 28) + (move-by-vector! (_type_ vector) none 28) (collide-shape-method-29 (_type_ vector) none 29) (collide-shape-method-30 () none 30) (collide-shape-method-31 () none 31) @@ -1573,7 +1573,7 @@ ) (format #t ")~%") (format #t "~1Tbackup-collide-as: ~D~%" (-> obj backup-collide-as)) - (format #t "~1Tbackup-collide-with: ~D~%" (-> obj backup-collde-with)) + (format #t "~1Tbackup-collide-with: ~D~%" (-> obj backup-collide-with)) (format #t "~1Tevent-priority: ~D~%" (-> obj event-priority)) (format #t "~1Trider-max-momentum: ~f~%" (-> obj rider-max-momentum)) (label cfg-136) @@ -1867,7 +1867,7 @@ ) (format #t ")~%") (format #t "~1Tbackup-collide-as: ~D~%" (-> obj backup-collide-as)) - (format #t "~1Tbackup-collide-with: ~D~%" (-> obj backup-collde-with)) + (format #t "~1Tbackup-collide-with: ~D~%" (-> obj backup-collide-with)) (format #t "~1Tevent-priority: ~D~%" (-> obj event-priority)) (format #t "~1Trider-max-momentum: ~f~%" (-> obj rider-max-momentum)) (format #t "~1Trider-time: ~D~%" (-> obj rider-time)) diff --git a/test/decompiler/reference/jak2/engine/collide/collide-touch-h_REF.gc b/test/decompiler/reference/jak2/engine/collide/collide-touch-h_REF.gc index 4d7dbbac27..9e75bb8eeb 100644 --- a/test/decompiler/reference/jak2/engine/collide/collide-touch-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/collide/collide-touch-h_REF.gc @@ -146,7 +146,7 @@ (get-next (_type_ touching-shapes-entry) touching-prims-entry 10) (touching-shapes-entry-method-11 () none 11) (touching-shapes-entry-method-12 (_type_ collide-shape uint) touching-prims-entry 12) - (touching-shapes-entry-method-13 () none 13) + (touching-shapes-entry-method-13 (_type_ collide-shape uint uint) basic 13) (touching-shapes-entry-method-14 () none 14) ) ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc new file mode 100644 index 0000000000..48f137d907 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc @@ -0,0 +1,472 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type base-plat +(deftype base-plat (process-focusable) + ((root-override collide-shape-moving :offset 128) + (smush smush-control :inline :offset-assert 208) + (basetrans vector :inline :offset-assert 240) + (bounce-time time-frame :offset-assert 256) + (bouncing symbol :offset-assert 264) + (bounce-scale meters :offset-assert 268) + ) + :heap-base #x90 + :method-count-assert 34 + :size-assert #x110 + :flag-assert #x2200900110 + (:methods + (execute-effects (_type_) none 27) + (stop-bouncing! (_type_) none 28) + (start-bouncing! (_type_) none :behavior base-plat 29) + (get-art-group (_type_) art-group 30) + (base-plat-method-31 (_type_) none 31) + (base-plat-method-32 (_type_) none 32) + (base-plat-method-33 (_type_) none 33) + ) + ) + +;; definition for method 3 of type base-plat +(defmethod inspect base-plat ((obj base-plat)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-focusable inspect))) + (t9-0 obj) + ) + (format #t "~2Tsmush: #~%" (-> obj smush)) + (format #t "~2Tbasetrans: #~%" (-> obj basetrans)) + (format #t "~2Tbounce-time: ~D~%" (-> obj bounce-time)) + (format #t "~2Tbouncing: ~A~%" (-> obj bouncing)) + (format #t "~2Tbounce-scale: (meters ~m)~%" (-> obj bounce-scale)) + (label cfg-4) + obj + ) + +;; definition for method 33 of type base-plat +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-33 base-plat ((obj base-plat)) + 0 + (none) + ) + +;; definition for method 28 of type base-plat +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod stop-bouncing! base-plat ((obj base-plat)) + "Sets `bouncing` to false and resets related settings to their defaults" + (set! (-> obj basetrans quad) (-> obj root-override trans quad)) + (set! (-> obj bouncing) #f) + (set! (-> obj bounce-scale) 819.2) + 0 + (none) + ) + +;; definition for method 29 of type base-plat +;; WARN: Return type mismatch int vs none. +(defmethod start-bouncing! base-plat ((obj base-plat)) + "Sets `bouncing` to [[#t]] and sets up the clock to periodically bounce + and translate the platform via the `smush` + @see [[smush-control]]" + (activate! (-> obj smush) -1.0 60 150 1.0 1.0 (-> self clock)) + (set! (-> obj bounce-time) (-> self clock frame-counter)) + (set! (-> obj bouncing) #t) + (sound-play "plat-bounce" :position (-> obj root-override trans)) + (logclear! (-> obj mask) (process-mask sleep)) + (logclear! (-> obj mask) (process-mask sleep-code)) + 0 + (none) + ) + +;; definition for function plat-code +;; WARN: Return type mismatch symbol vs none. +;; WARN: new jak 2 until loop case, check carefully +(defbehavior plat-code base-plat () + "After calling [[transform-post]] for 2 consecutive frames, put the process to sleep if it's not bouncing + otherwise, continue bouncing...forever! + @see [[transform-post]]" + (transform-post) + (suspend) + (transform-post) + (suspend) + (until #f + (when (not (-> self bouncing)) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + ) + (while (-> self bouncing) + (suspend) + ) + ) + #f + (none) + ) + +;; definition for function plat-trans +;; INFO: Used lq/sq +(defbehavior plat-trans base-plat () + "If the platform is `bouncing`, move the platform accordingly with the [[smush-control]] + - If the amplitude of the `smush` has hit `0.0` then stop bouncing + + If we aren't bouncing however, TODO - CSHAPE" + (rider-trans) + (cond + ((-> self bouncing) + (let ((trans (new 'stack-no-clear 'vector))) + (set! (-> trans quad) (-> self basetrans quad)) + (+! (-> trans y) (* (-> self bounce-scale) (update! (-> self smush)))) + (collide-shape-method-29 (-> self root-override) trans) + ) + (if (not (!= (-> self smush amp) 0.0)) + (set! (-> self bouncing) #f) + ) + ) + (else + (collide-shape-method-29 (-> self root-override) (-> self basetrans)) + ) + ) + (none) + ) + +;; definition for function plat-post +(defbehavior plat-post base-plat () + (execute-effects self) + (rider-post) + (none) + ) + +;; definition for method 32 of type base-plat +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-32 base-plat ((obj base-plat)) + 0 + (none) + ) + +;; definition for method 27 of type base-plat +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod execute-effects base-plat ((obj base-plat)) + "Executes various ancillary tasks with the platform, such as spawning particles or playing the associated sound" + (if (nonzero? (-> obj part)) + (spawn (-> obj part) (-> obj root-override trans)) + ) + (when (nonzero? (-> obj sound)) + (set! (-> obj sound trans quad) (-> obj root-override trans quad)) + (update! (-> obj sound)) + ) + (none) + ) + +;; definition for function plat-event +;; WARN: Return type mismatch none vs object. +(defbehavior plat-event base-plat ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + "Handles platform related events. Presently all this does is: + - if `event-type` is [['bonk]], then call [[base-plat:29]]" + (let ((evt-type event-type)) + (the-as object (if (= evt-type 'bonk) + (start-bouncing! self) + ) + ) + ) + ) + +;; definition of type eco-door +(deftype eco-door (process-drawable) + "@unused - Likely a left-over from Jak 1" + ((root-override collide-shape :offset 128) + (speed float :offset-assert 200) + (open-distance float :offset-assert 204) + (close-distance float :offset-assert 208) + (out-dir vector :inline :offset-assert 224) + (open-sound sound-name :offset-assert 240) + (close-sound sound-name :offset-assert 256) + (state-actor entity-actor :offset-assert 272) + (flags eco-door-flags :offset-assert 276) + (locked symbol :offset-assert 280) + (auto-close symbol :offset-assert 284) + (one-way symbol :offset-assert 288) + ) + :heap-base #xb0 + :method-count-assert 27 + :size-assert #x124 + :flag-assert #x1b00b00124 + (:methods + (door-closed () _type_ :state 20) + (door-opening () _type_ :state 21) + (door-open () _type_ :state 22) + (door-closing () _type_ :state 23) + (lock-according-to-task! (_type_) none 24) + (eco-door-method-25 (_type_) none 25) + (stub (_type_) none 26) + ) + ) + +;; definition for method 3 of type eco-door +;; INFO: Used lq/sq +(defmethod inspect eco-door ((obj eco-door)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tspeed: ~f~%" (-> obj speed)) + (format #t "~2Topen-distance: ~f~%" (-> obj open-distance)) + (format #t "~2Tclose-distance: ~f~%" (-> obj close-distance)) + (format #t "~2Tout-dir: #~%" (-> obj out-dir)) + (format #t "~2Topen-sound: ~D~%" (-> obj open-sound)) + (format #t "~2Tclose-sound: ~D~%" (-> obj close-sound)) + (format #t "~2Tstate-actor: ~A~%" (-> obj state-actor)) + (format #t "~2Tflags: ~D~%" (-> obj flags)) + (format #t "~2Tlocked: ~A~%" (-> obj locked)) + (format #t "~2Tauto-close: ~A~%" (-> obj auto-close)) + (format #t "~2Tone-way: ~A~%" (-> obj one-way)) + (label cfg-4) + obj + ) + +;; definition for function eco-door-event-handler +;; WARN: Return type mismatch symbol vs object. +(defbehavior eco-door-event-handler eco-door ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + "If the `event-type` is `'trigger`, flip the `locked` flag on the door + and play the respective sound + + @unused - likely a leftover from Jak 1" + (let ((evt-type event-type)) + (the-as object (when (= evt-type 'trigger) + (set! (-> self locked) (not (-> self locked))) + (cond + ((-> self locked) + (if (and (-> self next-state) (= (-> self next-state name) 'door-closed)) + (sound-play "door-lock") + ) + ) + (else + (sound-play "door-unlock") + ) + ) + #t + ) + ) + ) + ) + +;; failed to figure out what this is: +eco-door-event-handler + +;; failed to figure out what this is: +(defstate door-closed (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (ja :num-func num-func-identity :frame-num 0.0) + (suspend) + (collide-shape-method-46 (-> self root-override)) + (ja-post) + (until #f + (when (and *target* (and (>= (-> self open-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + (zero? (logand (focus-status teleporting) (-> *target* focus-status))) + ) + ) + (lock-according-to-task! self) + (if (and (not (-> self locked)) + (or (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status subtask-complete))) + (send-event *target* 'query 'powerup (pickup-type eco-blue)) + (and (-> self one-way) (< (vector4-dot (-> self out-dir) (target-pos 0)) -8192.0)) + ) + ) + (go-virtual door-opening) + ) + ) + (suspend) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate door-opening (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (if (and (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status subtask-complete))) + ) + (send-event *target* 'query 'powerup (pickup-type eco-blue)) + ) + (sound-play "blue-eco-on" :position (-> self root-override trans)) + ) + (sound-play-by-name (-> self open-sound) (new-sound-id) 1024 0 0 (sound-group sfx) #t) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (collide-spec)) + (set! (-> prim prim-core collide-with) (collide-spec)) + ) + 0 + (until (ja-done? 0) + (ja :num! (seek! max (-> self speed))) + (suspend) + ) + (go-virtual door-open) + (none) + ) + :post (the-as (function none :behavior eco-door) transform-post) + ) + +;; failed to figure out what this is: +(defstate door-open (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (collide-spec)) + (set! (-> prim prim-core collide-with) (collide-spec)) + ) + 0 + (ja :num-func num-func-identity :frame-num max) + (logior! (-> self draw status) (draw-control-status no-draw)) + (suspend) + (collide-shape-method-46 (-> self root-override)) + (ja-post) + (until #f + (let ((dist-from-target (vector4-dot (-> self out-dir) (target-pos 0))) + (dist-from-camera (vector4-dot (-> self out-dir) (camera-pos))) + ) + (when (and (-> self auto-close) + (or (not *target*) (or (< (-> self close-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + (logtest? (focus-status teleporting) (-> *target* focus-status)) + ) + ) + ) + (if (and (>= (* dist-from-target dist-from-camera) 0.0) (< 16384.0 (fabs dist-from-camera))) + (go-virtual door-closing) + ) + ) + ) + (suspend) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate door-closing (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (-> self root-override backup-collide-as)) + (set! (-> v1-1 prim-core collide-with) (-> self root-override backup-collide-with)) + ) + (logclear! (-> self draw status) (draw-control-status no-draw)) + (let ((params (new 'stack 'overlaps-others-params))) + (set! (-> params options) (overlaps-others-options oo0)) + (set! (-> params tlist) #f) + (while (find-overlapping-shapes (-> self root-override) params) + (suspend) + ) + ) + (sound-play-by-name (-> self close-sound) (new-sound-id) 1024 0 0 (sound-group sfx) #t) + (until (ja-done? 0) + (ja :num! (seek! 0.0 (-> self speed))) + (suspend) + ) + (if (-> self locked) + (sound-play "door-lock") + ) + (go-virtual door-closed) + (none) + ) + :post (the-as (function none :behavior eco-door) transform-post) + ) + +;; definition for method 24 of type eco-door +;; WARN: Return type mismatch int vs none. +(defmethod lock-according-to-task! eco-door ((obj eco-door)) + "If the associated subtask is completed, lock the door if [[eco-door-flags:0]] is set + otherwise, lock it if [[eco-door-flags:0]] is set" + (when (-> obj state-actor) + (if (logtest? (-> obj state-actor extra perm status) (entity-perm-status subtask-complete)) + (set! (-> obj locked) (logtest? (-> obj flags) (eco-door-flags ecdf01))) + (set! (-> obj locked) (logtest? (-> obj flags) (eco-door-flags ecdf00))) + ) + ) + 0 + (none) + ) + +;; definition for method 25 of type eco-door +;; WARN: Return type mismatch int vs none. +(defmethod eco-door-method-25 eco-door ((obj eco-door)) + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec obstacle)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 16384.0) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root-override) collision-shape) + ) + 0 + (none) + ) + +;; definition for method 26 of type eco-door +;; WARN: Return type mismatch int vs none. +(defmethod stub eco-door ((obj eco-door)) + "@unused - Stub with no overrides" + 0 + (none) + ) + +;; definition for method 11 of type eco-door +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! eco-door ((obj eco-door) (arg0 entity-actor)) + (eco-door-method-25 obj) + (process-drawable-from-entity! obj arg0) + (let ((door-scale (res-lump-float (-> obj entity) 'scale :default 1.0))) + (set-vector! (-> obj root-override scale) door-scale door-scale door-scale 1.0) + ) + (set! (-> obj open-distance) 32768.0) + (set! (-> obj close-distance) 49152.0) + (set! (-> obj speed) 1.0) + (set! (-> obj state-actor) #f) + (let ((state-actor (entity-actor-lookup arg0 'state-actor 0))) + (if state-actor + (set! (-> obj state-actor) state-actor) + ) + ) + (set! (-> obj locked) #f) + (set! (-> obj flags) (res-lump-value arg0 'flags eco-door-flags :time -1000000000.0)) + (lock-according-to-task! obj) + (set! (-> obj auto-close) (logtest? (-> obj flags) (eco-door-flags auto-close))) + (set! (-> obj one-way) (logtest? (-> obj flags) (eco-door-flags one-way))) + (vector-z-quaternion! (-> obj out-dir) (-> obj root-override quat)) + (set! (-> obj out-dir w) (- (vector-dot (-> obj out-dir) (-> obj root-override trans)))) + (collide-shape-method-46 (-> obj root-override)) + (stub obj) + (if (and (not (-> obj auto-close)) + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete)) + ) + (go (method-of-object obj door-open)) + (go (method-of-object obj door-closed)) + ) + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/basebutton_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/basebutton_REF.gc new file mode 100644 index 0000000000..7b45b65e09 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/basebutton_REF.gc @@ -0,0 +1,541 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type basebutton +(deftype basebutton (process-focusable) + ((button-status button-status :offset-assert 204) + (notify-actor entity :offset-assert 208) + (actor-group (pointer actor-group) :offset-assert 212) + (actor-group-count int32 :offset-assert 216) + (timeout float :offset-assert 220) + (button-id int32 :offset-assert 224) + (event-going-down symbol :offset-assert 228) + (event-down symbol :offset-assert 232) + (event-going-up symbol :offset-assert 236) + (event-up symbol :offset-assert 240) + (anim-speed float :offset-assert 244) + (move-to-pos vector :inline :offset-assert 256) + (move-to-quat quaternion :inline :offset-assert 272) + ) + :heap-base #xa0 + :method-count-assert 39 + :size-assert #x120 + :flag-assert #x2700a00120 + (:methods + (down-idle () _type_ :state 27) + (going-down () _type_ :state 28) + (going-up () _type_ :state 29) + (up-idle () _type_ :state 30) + (reset! (_type_) none 31) + (idle-state-transition (_type_) object 32) + (basebutton-method-33 (_type_) none 33) + (basebutton-method-34 (_type_) none 34) + (prepare-trigger-event! (_type_) none 35) + (send-event! (_type_ symbol) none :behavior basebutton 36) + (move-to! (_type_ vector quaternion) none 37) + (press! (_type_ symbol) entity-perm-status 38) + ) + ) + +;; definition for method 3 of type basebutton +(defmethod inspect basebutton ((obj basebutton)) + (when (not obj) + (set! obj obj) + (goto cfg-7) + ) + (let ((t9-0 (method-of-type process-focusable inspect))) + (t9-0 obj) + ) + (format #t "~2Tbutton-status: ~D~%" (-> obj button-status)) + (format #t "~2Tnotify-actor: ~A~%" (-> obj notify-actor)) + (format #t "~2Tactor-group: #x~X~%" (-> obj actor-group)) + (dotimes (s5-0 (-> obj actor-group-count)) + (format #t "~T [~D]~2Tactor-group: ~`actor-group`P~%" s5-0 (-> obj actor-group s5-0)) + ) + (format #t "~2Tactor-group-count: ~D~%" (-> obj actor-group-count)) + (format #t "~2Ttimeout: ~f~%" (-> obj timeout)) + (format #t "~2Tbutton-id: ~D~%" (-> obj button-id)) + (format #t "~2Tevent-going-down: ~A~%" (-> obj event-going-down)) + (format #t "~2Tevent-down: ~A~%" (-> obj event-down)) + (format #t "~2Tevent-going-up: ~A~%" (-> obj event-going-up)) + (format #t "~2Tevent-up: ~A~%" (-> obj event-up)) + (format #t "~2Tanim-speed: ~f~%" (-> obj anim-speed)) + (format #t "~2Tmove-to-pos: #~%" (-> obj move-to-pos)) + (format #t "~2Tmove-to-quat: #~%" (-> obj move-to-quat)) + (label cfg-7) + obj + ) + +;; failed to figure out what this is: +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-generic-button" + :extra #f + :info #f + :art-group-name "mtn-dice-button" + :bounds (new 'static 'vector :w 12288.0) + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 3) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-2) + ) + +;; definition for method 37 of type basebutton +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod move-to! basebutton ((obj basebutton) (vec vector) (quat quaternion)) + (logclear! (-> obj button-status) (button-status button-status-2)) + (if vec + (set! (-> obj move-to-pos quad) (-> vec quad)) + (set! (-> obj move-to-pos quad) (-> obj root trans quad)) + ) + (if quat + (quaternion-copy! (-> obj move-to-quat) quat) + (quaternion-copy! (-> obj move-to-quat) (-> obj root quat)) + ) + 0 + (none) + ) + +;; definition for method 32 of type basebutton +(defmethod idle-state-transition basebutton ((obj basebutton)) + "If `button-status` has [[button-status:0]] set, transition to [[basebutton::27]] otherwise, [[basebutton::30]]" + (if (logtest? (-> obj button-status) (button-status pressed)) + (go (method-of-object obj down-idle)) + (go (method-of-object obj up-idle)) + ) + ) + +;; failed to figure out what this is: +(defstate up-idle (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (cond + ((= v1-0 'attack) + (let ((attack (the-as attack-info (-> event param 1)))) + (case (-> attack mode) + (('flop 'spin 'punch 'eco-yellow 'eco-red 'eco-blue 'eco-dark) + (when (or (not (or (= (-> attack mode) 'spin) (= (-> attack mode) 'punch))) + (logtest? (-> self button-status) (button-status button-status-3)) + ) + (send-event! self (-> self event-going-down)) + (go-virtual going-down) + ) + ) + ) + ) + ) + ((= v1-0 'trigger) + (sound-play "silo-button") + (go-virtual going-down) + ) + ((= v1-0 'touch) + (when (logtest? (-> self button-status) (button-status button-status-4)) + (send-event! self (-> self event-going-down)) + (go-virtual going-down) + ) + ) + ((= v1-0 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #f) + (none) + ) + :trans (behavior () + (if (logtest? (-> self button-status) (button-status button-status-2)) + (rider-trans) + ) + (none) + ) + :code (the-as (function none :behavior basebutton) sleep-code) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + (rider-post) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate going-down (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'untrigger) + (go-virtual going-up) + ) + ((= evt-type 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #t) + (none) + ) + :trans (the-as (function none :behavior basebutton) rider-trans) + :code (behavior () + (ja-no-eval :num! (seek! max (-> self anim-speed))) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! max (-> self anim-speed))) + ) + (send-event! self (-> self event-down)) + (let ((activation-script (res-lump-struct (-> self entity) 'on-activate structure))) + (if activation-script + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f)) + (the-as pair activation-script) + ) + ) + ) + (go-virtual down-idle) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + ) + (rider-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate down-idle (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'untrigger) + (go-virtual going-up) + ) + ((= evt-type 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #t) + (set! (-> self state-time) (-> self clock frame-counter)) + (none) + ) + :trans (behavior () + (if (logtest? (-> self button-status) (button-status button-status-2)) + (rider-trans) + ) + (none) + ) + :code (behavior () + (cond + ((= (-> self timeout) 0.0) + (sleep-code) + ) + (else + (until (>= (- (-> self clock frame-counter) (-> self state-time)) (the int (* 300.0 (-> self timeout)))) + (suspend) + ) + (send-event! self (-> self event-going-up)) + (sound-play "silo-button") + (go-virtual going-up) + ) + ) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + (rider-post) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate going-up (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (cond + ((= v1-0 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ((= v1-0 'trigger) + (go-virtual going-down) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #f) + (none) + ) + :trans (the-as (function none :behavior basebutton) rider-trans) + :code (behavior () + (ja-no-eval :num! (seek! 0.0 (-> self anim-speed))) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! 0.0 (-> self anim-speed))) + ) + (send-event! self (-> self event-up)) + (go-virtual up-idle) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + ) + (rider-post) + (none) + ) + ) + +;; definition for method 38 of type basebutton +(defmethod press! basebutton ((obj basebutton) (pressed? symbol)) + (if pressed? + (logior! (-> obj button-status) (button-status pressed)) + (logclear! (-> obj button-status) (button-status pressed)) + ) + (when (not (logtest? (-> obj button-status) (button-status button-status-1))) + (if pressed? + (process-entity-status! obj (entity-perm-status subtask-complete) #t) + (process-entity-status! obj (entity-perm-status subtask-complete) #f) + ) + ) + ) + +;; definition for method 36 of type basebutton +;; WARN: Return type mismatch int vs none. +(defmethod send-event! basebutton ((obj basebutton) (event-type symbol)) + "Prepares an [[event-message-block]] using the provided type to send an event to: + - the `notify-actor` + - every [[entity-actor]] in the `actor-group` array + @see [[entity-actor]]" + (when event-type + (let ((event (new 'stack-no-clear 'event-message-block))) + (set! (-> event from) (process->ppointer self)) + (set! (-> event num-params) 0) + (set! (-> event message) event-type) + (let ((func send-event-function) + (actor (-> obj notify-actor)) + ) + (func + (if actor + (-> actor extra process) + ) + event + ) + (dotimes (actor-group-idx (-> obj actor-group-count)) + (let ((actor-group (-> obj actor-group actor-group-idx))) + (dotimes (actor-idx (-> actor-group length)) + (set! event (new 'stack-no-clear 'event-message-block)) + (set! (-> event from) (process->ppointer self)) + (set! (-> event num-params) 0) + (set! (-> event message) event-type) + (set! func send-event-function) + (set! actor (-> actor-group data actor-idx actor)) + (func + (if actor + (-> actor extra process) + ) + event + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 31 of type basebutton +;; WARN: Return type mismatch int vs none. +(defmethod reset! basebutton ((obj basebutton)) + (set! (-> obj button-status) (button-status)) + (set! (-> obj notify-actor) #f) + (set! (-> obj timeout) 0.0) + (set! (-> obj event-going-down) #f) + (set! (-> obj event-down) #f) + (set! (-> obj event-going-up) #f) + (set! (-> obj event-up) #f) + (set! (-> obj anim-speed) 1.0) + 0 + (none) + ) + +;; definition for method 35 of type basebutton +;; WARN: Return type mismatch int vs none. +(defmethod prepare-trigger-event! basebutton ((obj basebutton)) + "Sets `event-going-down` to `'trigger`" + (set! (-> obj event-going-down) 'trigger) + 0 + (none) + ) + +;; definition for method 33 of type basebutton +;; WARN: Return type mismatch int vs none. +(defmethod basebutton-method-33 basebutton ((obj basebutton)) + "TODO - joint stuff" + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-generic-button" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (ja-channel-set! 1) + (cond + ((logtest? (-> obj button-status) (button-status pressed)) + (let ((channel-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + channel-0 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> channel-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> obj draw art-group data 3)) frames num-frames) -1)) + ) + ) + ) + (else + (let ((channel-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + channel-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> channel-1 frame-num) 0.0) + ) + ) + ) + (set! (-> obj anim-speed) 2.0) + (transform-post) + (none) + ) + +;; definition for method 34 of type basebutton +;; WARN: Return type mismatch int vs none. +(defmethod basebutton-method-34 basebutton ((obj basebutton)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec obstacle pusher)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid rideable)) + (set! (-> collision-mesh transform-index) 3) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 12288.0) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + ((method-of-object collision-shape collide-shape-method-54)) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root) collision-shape) + ) + 0 + (none) + ) + +;; definition for method 11 of type basebutton +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! basebutton ((obj basebutton) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (reset! obj) + (set! (-> obj button-id) -1) + (let ((v1-4 (res-lump-value (-> obj entity) 'extra-id uint128 :default (the-as uint128 -1) :time -1000000000.0))) + (if (>= (the-as int v1-4) 0) + (set! (-> obj button-id) (the-as int v1-4)) + ) + ) + (basebutton-method-34 obj) + (process-drawable-from-entity! obj arg0) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete))) + (logior! (-> obj button-status) (button-status pressed)) + (logclear! (-> obj button-status) (button-status pressed)) + ) + (set! (-> obj notify-actor) (entity-actor-lookup arg0 'alt-actor 0)) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-15 (res-lump-data (-> obj entity) 'actor-groups pointer :tag-ptr (& sv-16)))) + (cond + ((and v1-15 (nonzero? (-> sv-16 elt-count))) + (set! (-> obj actor-group) (the-as (pointer actor-group) v1-15)) + (set! (-> obj actor-group-count) (the-as int (-> sv-16 elt-count))) + ) + (else + (set! (-> obj actor-group) (the-as (pointer actor-group) #f)) + (set! (-> obj actor-group-count) 0) + 0 + ) + ) + ) + (set! (-> obj timeout) (res-lump-float arg0 'timeout)) + (if (not (logtest? (-> obj button-status) (button-status button-status-1))) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh obj)) + ) + (prepare-trigger-event! obj) + (basebutton-method-33 obj) + (idle-state-transition obj) + (none) + ) + +;; definition for function basebutton-init-by-other +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defbehavior basebutton-init-by-other basebutton ((process-actor entity-actor) + (vec vector) + (quat quaternion) + (notify-actor entity-actor) + (pressed? symbol) + (timeout float) + ) + (reset! self) + (logior! (-> self button-status) (button-status button-status-1)) + (set! (-> self button-id) -1) + (if pressed? + (logior! (-> self button-status) (button-status pressed)) + ) + (set! (-> self notify-actor) notify-actor) + (set! (-> self timeout) timeout) + (if process-actor + (process-entity-set! self process-actor) + ) + (set! (-> self actor-group) (the-as (pointer actor-group) #f)) + (set! (-> self actor-group-count) 0) + (basebutton-method-34 self) + (set! (-> self root trans quad) (-> vec quad)) + (quaternion-copy! (-> self root quat) quat) + (set-vector! (-> self root scale) 1.0 1.0 1.0 1.0) + (prepare-trigger-event! self) + (basebutton-method-33 self) + (idle-state-transition self) + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/blocking-plane_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/blocking-plane_REF.gc new file mode 100644 index 0000000000..4ede4de5f9 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/blocking-plane_REF.gc @@ -0,0 +1,263 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type blocking-plane +(deftype blocking-plane (process-drawable) + ((root-override collide-shape :offset 128) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xc8 + :flag-assert #x16005000c8 + (:methods + (idle () _type_ :state 20) + (init! (_type_ (inline-array vector) float) none 21) + ) + ) + +;; definition for method 3 of type blocking-plane +(defmethod inspect blocking-plane ((obj blocking-plane)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-blocking-plane" + :extra #f + :info #f + :art-group-name "blocking-plane" + :bounds (new 'static 'vector :w 410009.6) + :texture-level #x6 + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 2) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-2) + ) + +;; failed to figure out what this is: +(defstate idle (blocking-plane) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'on) + (cond + ((nonzero? (-> self root-override)) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (-> self root-override backup-collide-as)) + (let ((v0-0 (the-as int (-> self root-override backup-collide-with)))) + (set! (-> prim prim-core collide-with) (the-as collide-spec v0-0)) + v0-0 + ) + ) + ) + (else + (let ((proc-child-ptr-0 (-> self child))) + (while proc-child-ptr-0 + (let ((proc-child-0 (ppointer->process proc-child-ptr-0))) + (set! proc-child-ptr-0 (-> proc-child-ptr-0 0 brother)) + (if (type? proc-child-0 blocking-plane) + (send-event proc-child-0 'on) + ) + ) + ) + ) + (the-as int #f) + ) + ) + ) + ((= evt-type 'off) + (cond + ((nonzero? (-> self root-override)) + (let ((v1-13 (-> self root-override root-prim))) + (set! (-> v1-13 prim-core collide-as) (collide-spec)) + (set! (-> v1-13 prim-core collide-with) (collide-spec)) + ) + 0 + ) + (else + (let ((proc-child-ptr-1 (-> self child))) + (while proc-child-ptr-1 + (let ((proc-child-1 (ppointer->process proc-child-ptr-1))) + (set! proc-child-ptr-1 (-> proc-child-ptr-1 0 brother)) + (if (type? proc-child-1 blocking-plane) + (send-event proc-child-1 'off) + ) + ) + ) + ) + (the-as int #f) + ) + ) + ) + ) + ) + ) + ) + :code (the-as (function none :behavior blocking-plane) sleep-code) + ) + +;; definition for method 21 of type blocking-plane +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod init! blocking-plane ((obj blocking-plane) (vec-pair (inline-array vector)) (height float)) + "TODO - but sets up the plane given 2 vectors and a height" + (let ((s3-0 (-> vec-pair 0)) + (s4-0 (-> vec-pair 1)) + ) + 0.0 + (* 0.5 (vector-vector-distance s3-0 s4-0)) + (let ((s2-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((v1-3 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-3 prim-core collide-as) (collide-spec blocking-plane)) + (set! (-> v1-3 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-3 prim-core action) (collide-action solid)) + (set! (-> v1-3 transform-index) 3) + (set! (-> s2-0 total-prims) (the-as uint 1)) + (set! (-> s2-0 root-prim) v1-3) + ) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (let ((v1-6 (-> s2-0 root-prim))) + (set! (-> s2-0 backup-collide-as) (-> v1-6 prim-core collide-as)) + (set! (-> s2-0 backup-collide-with) (-> v1-6 prim-core collide-with)) + ) + (set! (-> obj root-override) s2-0) + ) + (let ((s1-0 (new 'stack-no-clear 'matrix)) + (s2-1 (-> obj root-override)) + ) + (vector+! (-> s2-1 trans) s3-0 s4-0) + (vector-float*! (-> s2-1 trans) (-> s2-1 trans) 0.5) + (+! (-> s2-1 trans y) (* 0.5 height)) + (vector-! (the-as vector (-> s1-0 vector)) s4-0 s3-0) + (let ((f30-1 (vector-normalize-ret-len! (the-as vector (-> s1-0 vector)) 1.0))) + (set! (-> s2-1 scale x) (* 0.00024414062 f30-1)) + (set! (-> s2-1 scale y) (* 0.00024414062 height)) + (set! (-> s2-1 scale z) 0.0) + (set! (-> s1-0 vector 1 quad) (-> (new 'static 'vector :y 1.0 :w 1.0) quad)) + (vector-cross! (-> s1-0 vector 2) (the-as vector (-> s1-0 vector)) (-> s1-0 vector 1)) + (vector-normalize! (-> s1-0 vector 2) 1.0) + (matrix->quaternion (-> s2-1 quat) s1-0) + (let ((v1-20 (-> obj root-override root-prim local-sphere))) + (set! (-> v1-20 x) 0.0) + (set! (-> v1-20 y) (* 0.00024414062 (* 0.5 height))) + (set! (-> v1-20 z) 0.0) + (let ((f0-17 0.5) + (f1-7 (* f30-1 f30-1)) + (f2-2 height) + ) + (set! (-> v1-20 w) (* f0-17 (sqrtf (+ f1-7 (* f2-2 f2-2))))) + ) + ) + ) + ) + ) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-blocking-plane" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (logior! (-> obj draw status) (draw-control-status no-draw-bounds)) + (transform-post) + (none) + ) + +;; definition for function blocking-plane-init-by-other +;; WARN: Return type mismatch object vs none. +(defbehavior blocking-plane-init-by-other blocking-plane ((vec-pair (inline-array vector)) (height float)) + "Calls [[blocking-plane::21]] with the given args" + (if (not vec-pair) + (deactivate self) + ) + (init! self vec-pair height) + (go-virtual idle) + (none) + ) + +;; definition for method 11 of type blocking-plane +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! blocking-plane ((obj blocking-plane) (arg0 entity-actor)) + (let ((s5-0 (new 'process 'path-control obj 'path 0.0 (the-as entity #f) #f)) + (f30-0 (res-lump-float (-> obj entity) 'height :default 122880.0)) + ) + (set! (-> obj path) s5-0) + (if (or (not s5-0) (< (-> s5-0 curve num-cverts) 2)) + (go process-drawable-art-error "bad path") + ) + (logior! (-> s5-0 flags) (path-control-flag display draw-line draw-point draw-text)) + (let ((s4-0 (+ (-> s5-0 curve num-cverts) -1)) + (s3-0 (new 'stack-no-clear 'inline-array 'vector 2)) + ) + (dotimes (v1-12 2) + (set! (-> s3-0 v1-12 quad) (the-as uint128 0)) + ) + (dotimes (s2-0 s4-0) + (get-point-in-path! s5-0 (-> s3-0 0) (the float s2-0) 'interp) + (get-point-in-path! s5-0 (-> s3-0 1) (the float (+ s2-0 1)) 'interp) + (process-spawn blocking-plane s3-0 f30-0 :to obj) + ) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + +;; definition for function blocking-plane-spawn +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defbehavior blocking-plane-spawn process ((arg0 curve-control) (arg1 (inline-array vector)) (arg2 float)) + (cond + ((and arg1 (or (not arg0) (logtest? (-> arg0 flags) (path-control-flag not-found)))) + (process-spawn blocking-plane arg1 arg2 :to self) + ) + (else + (let ((s4-1 (the int (get-num-segments arg0))) + (s3-0 0) + (s2-0 (new 'stack-no-clear 'inline-array 'vector 2)) + ) + (dotimes (v1-10 2) + (set! (-> s2-0 v1-10 quad) (the-as uint128 0)) + ) + (while (< s3-0 s4-1) + (get-point-in-path! arg0 (-> s2-0 0) (the float s3-0) 'interp) + (get-point-in-path! arg0 (-> s2-0 1) (the float (+ s3-0 1)) 'interp) + (process-spawn blocking-plane s2-0 arg2 :to self) + (+! s3-0 2) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function blocking-plane-destroy +;; WARN: Return type mismatch int vs none. +(defbehavior blocking-plane-destroy blocking-plane () + (let ((child-proc-ptr (-> self child))) + (while child-proc-ptr + (let ((child-proc (ppointer->process child-proc-ptr))) + (set! child-proc-ptr (-> child-proc-ptr 0 brother)) + (if (type? child-proc blocking-plane) + (deactivate child-proc) + ) + ) + ) + ) + 0 + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/conveyor_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/conveyor_REF.gc new file mode 100644 index 0000000000..4facad4c4f --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/conveyor_REF.gc @@ -0,0 +1,590 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type conveyor-section +(deftype conveyor-section (structure) + ((start vector :inline :offset-assert 0) + (trailing plane :inline :offset-assert 16) + (pull-dir vector :inline :offset-assert 32) + (radial-dir vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +;; definition for method 3 of type conveyor-section +(defmethod inspect conveyor-section ((obj conveyor-section)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'conveyor-section) + (format #t "~1Tstart: #~%" (-> obj start)) + (format #t "~1Ttrailing: #~%" (-> obj trailing)) + (format #t "~1Tpull-dir: #~%" (-> obj pull-dir)) + (format #t "~1Tradial-dir: #~%" (-> obj radial-dir)) + (label cfg-4) + obj + ) + +;; definition of type conveyor-section-array +(deftype conveyor-section-array (inline-array-class) + ((data conveyor-section :inline :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type conveyor-section-array +(defmethod inspect conveyor-section-array ((obj conveyor-section-array)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tlength: ~D~%" (-> obj length)) + (format #t "~1Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~1Tdata[0] @ #x~X~%" (-> obj data)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(set! (-> conveyor-section-array heap-base) (the-as uint 64)) + +;; definition of type conveyor +(deftype conveyor (process-drawable) + ((speed float :offset-assert 200) + (belt-radius float :offset-assert 204) + (pull-y-threshold float :offset-assert 208) + (speed-mult-array (array float) :offset-assert 212) + (speed-mult-array-len int8 :offset-assert 216) + (sections conveyor-section-array :offset-assert 220) + (leading plane :inline :offset-assert 224) + (collide-bounds sphere :inline :offset-assert 240) + ) + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + (:methods + (idle () _type_ :state 20) + (conveyor-method-21 (_type_) float 21) + (get-art-group (_type_) art-group 22) + (reset-root! (_type_) none 23) + (init! (_type_) none 24) + (set-and-get-ambient-sound! (_type_) ambient-sound 25) + (conveyor-method-26 (_type_ process-focusable) symbol :behavior conveyor 26) + (conveyor-method-27 (_type_) symbol 27) + ) + ) + +;; definition for method 3 of type conveyor +(defmethod inspect conveyor ((obj conveyor)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tspeed: ~f~%" (-> obj speed)) + (format #t "~2Tbelt-radius: ~f~%" (-> obj belt-radius)) + (format #t "~2Tpull-y-threshold: ~f~%" (-> obj pull-y-threshold)) + (format #t "~2Tspeed-mult-array: #x~X~%" (-> obj speed-mult-array)) + (format #t "~2Tspeed-mult-array-len: ~D~%" (-> obj speed-mult-array-len)) + (format #t "~2Tsections: ~A~%" (-> obj sections)) + (format #t "~2Tleading: #~%" (-> obj leading)) + (format #t "~2Tcollide-bounds: #~%" (-> obj collide-bounds)) + (label cfg-4) + obj + ) + +;; definition for method 7 of type conveyor +;; WARN: Return type mismatch process-drawable vs conveyor. +(defmethod relocate conveyor ((obj conveyor) (new-addr int)) + (&+! (-> obj sections) new-addr) + (the-as + conveyor + ((the-as (function process-drawable int process-drawable) (find-parent-method conveyor 7)) obj new-addr) + ) + ) + +;; definition for method 22 of type conveyor +;; WARN: Return type mismatch symbol vs art-group. +(defmethod get-art-group conveyor ((obj conveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (go process-drawable-art-error "invalid type") + (the-as art-group #f) + ) + +;; definition for method 23 of type conveyor +;; WARN: Return type mismatch int vs none. +(defmethod reset-root! conveyor ((obj conveyor)) + "Re-initializes the `root` [[trsqv]]" + (set! (-> obj root) (new 'process 'trsqv)) + 0 + (none) + ) + +;; definition for method 24 of type conveyor +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod init! conveyor ((obj conveyor)) + "Initializes defaults for things like the `speed` and `belt-radius`" + (local-vars (tag res-tag)) + (set! (-> obj speed) 24576.0) + (set! (-> obj belt-radius) 11878.4) + (set! (-> obj pull-y-threshold) 10240.0) + (set! (-> obj speed-mult-array) #f) + (set! (-> obj speed-mult-array-len) 0) + (let ((entity (-> obj entity))) + (set! tag (new 'static 'res-tag)) + (let ((scale-factor (res-lump-data entity 'scale-factor pointer :tag-ptr (& tag)))) + (when scale-factor + (set! (-> obj speed-mult-array) (the-as (array float) scale-factor)) + (set! (-> obj speed-mult-array-len) (the-as int (-> tag elt-count))) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 25 of type conveyor +;; WARN: Return type mismatch object vs ambient-sound. +(defmethod set-and-get-ambient-sound! conveyor ((obj conveyor)) + "So long as [[actor-option::16]] is not set, fetch the [[ambient-sound]] for the [[conveyor]] + and return it as well. Otherwise, set it to `0`" + (let ((actor-options (res-lump-value (-> obj entity) 'options actor-option :time -1000000000.0))) + (the-as + ambient-sound + (cond + ((not (logtest? (actor-option no-amb-sound) actor-options)) + (let ((sound + (the-as object (new 'process 'ambient-sound (static-sound-spec "conveyor" :fo-max 80) (-> obj root trans))) + ) + ) + (set! (-> obj sound) (the-as ambient-sound sound)) + sound + ) + ) + (else + (set! (-> obj sound) (the-as ambient-sound 0)) + 0 + ) + ) + ) + ) + ) + +;; definition for method 26 of type conveyor +;; INFO: Used lq/sq +(defmethod conveyor-method-26 conveyor ((obj conveyor) (proc-focus process-focusable)) + "TODO - conveyor section related, perhaps related to moving the process along the belt?" + (let ((vec (new 'stack-no-clear 'vector))) + (set! (-> vec quad) (-> (get-trans proc-focus 0) quad)) + (set! (-> vec w) 1.0) + (when (>= (vector4-dot vec (the-as vector (-> obj leading))) 0.0) + (let* ((sections (-> obj sections)) + (section-count (-> sections length)) + ) + (dotimes (section-idx section-count) + (let ((section (-> sections data section-idx))) + (when (< (vector4-dot vec (the-as vector (-> section trailing))) 0.0) + (let ((vec-temp (new 'stack-no-clear 'vector))) + (vector-! vec-temp vec (-> section start)) + (when (>= (-> obj belt-radius) (fabs (vector-dot vec-temp (-> section radial-dir)))) + (let* ((f0-7 (vector-dot vec-temp (-> section pull-dir))) + (f1-6 (- (-> vec-temp y) (* (-> section pull-dir y) f0-7))) + ) + (when (>= (-> obj pull-y-threshold) (fabs f1-6)) + (let ((a2-8 (new 'stack-no-clear 'vector))) + (let ((f0-10 (-> obj speed))) + (if (< section-idx (-> obj speed-mult-array-len)) + (set! f0-10 + (* f0-10 (-> (the-as (pointer float) (+ (the-as uint (-> obj speed-mult-array)) (* section-idx 4))))) + ) + ) + (vector-float*! a2-8 (-> section pull-dir) (* f0-10 (-> self clock seconds-per-frame))) + ) + (send-event proc-focus 'push-trans a2-8 3000) + ) + ) + ) + ) + ) + (return #f) + ) + ) + ) + ) + #f + ) + ) + ) + +;; definition for method 27 of type conveyor +(defmethod conveyor-method-27 conveyor ((obj conveyor)) + "TODO - collision related, has some dead code as well (previous iteration?)" + (local-vars (a0-10 float) (a2-5 float) (a2-12 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + ) + (init-vf0-vector) + (set! *actor-list-length* 0) + (if #t + (set! *actor-list-length* (spatial-hash-method-36 *actor-hash* (-> obj collide-bounds) *actor-list* 256)) + ) + (when #t + (let ((a0-2 (-> *collide-player-list* alive-list next0))) + *collide-player-list* + (let ((v1-11 (-> a0-2 next0))) + (while (!= a0-2 (-> *collide-player-list* alive-list-end)) + (let* ((a0-3 (-> (the-as connection a0-2) param1)) + (a1-1 (-> (the-as collide-shape a0-3) root-prim)) + ) + (when (logtest? (-> a1-1 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (let ((a1-2 (-> a1-1 prim-core))) + (let ((a2-4 a1-2) + (a3-1 (-> obj collide-bounds)) + ) + (.lvf vf2 (&-> a2-4 world-sphere quad)) + (.lvf vf3 (&-> a3-1 quad)) + ) + (.sub.vf vf1 vf3 vf2) + (.mul.vf vf1 vf1 vf1) + (.add.y.vf vf1 vf1 vf1 :mask #b1) + (.add.z.vf vf1 vf1 vf1 :mask #b1) + (.mov a2-5 vf1) + (let ((f0-0 a2-5) + (f1-1 (+ (-> a1-2 world-sphere w) (-> obj collide-bounds r))) + ) + (b! (>= f0-0 (* f1-1 f1-1)) cfg-8 :delay #f) + ) + ) + (when (< *actor-list-length* 256) + (set! (-> *actor-list* *actor-list-length*) (the-as collide-shape a0-3)) + (set! *actor-list-length* (+ *actor-list-length* 1)) + ) + ) + ) + (label cfg-8) + (set! a0-2 v1-11) + *collide-player-list* + (set! v1-11 (-> v1-11 next0)) + ) + ) + ) + ) + (when #f + (let ((a0-5 (-> *collide-hit-by-player-list* alive-list next0))) + *collide-hit-by-player-list* + (let ((v1-18 (-> a0-5 next0))) + (while (!= a0-5 (-> *collide-hit-by-player-list* alive-list-end)) + (let* ((a0-6 (-> (the-as connection a0-5) param1)) + (a1-13 (-> (the-as collide-shape a0-6) root-prim)) + ) + (when (logtest? (-> a1-13 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (let ((a1-14 (-> a1-13 prim-core))) + (let ((a2-11 a1-14) + (a3-2 (-> obj collide-bounds)) + ) + (.lvf vf2 (&-> a2-11 world-sphere quad)) + (.lvf vf3 (&-> a3-2 quad)) + ) + (.sub.vf vf1 vf3 vf2) + (.mul.vf vf1 vf1 vf1) + (.add.y.vf vf1 vf1 vf1 :mask #b1) + (.add.z.vf vf1 vf1 vf1 :mask #b1) + (.mov a2-12 vf1) + (let ((f0-1 a2-12) + (f1-5 (+ (-> a1-14 world-sphere w) (-> obj collide-bounds r))) + ) + (b! (>= f0-1 (* f1-5 f1-5)) cfg-17 :delay #f) + ) + ) + (when (< *actor-list-length* 256) + (set! (-> *actor-list* *actor-list-length*) (the-as collide-shape a0-6)) + (set! *actor-list-length* (+ *actor-list-length* 1)) + ) + ) + ) + (label cfg-17) + (set! a0-5 v1-18) + *collide-hit-by-player-list* + (set! v1-18 (-> v1-18 next0)) + ) + ) + ) + ) + (dotimes (s5-0 *actor-list-length*) + (let* ((v1-23 (-> *actor-list* s5-0)) + (a0-9 (-> v1-23 root-prim)) + ) + (when (logtest? (-> a0-9 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (.lvf vf1 (&-> obj collide-bounds quad)) + (.lvf vf2 (&-> a0-9 prim-core world-sphere quad)) + (.sub.vf vf3 vf1 vf2) + (.add.w.vf vf4 vf1 vf2 :mask #b1000) + (.mul.vf vf3 vf3 vf3 :mask #b111) + (.mul.w.vf vf4 vf4 vf4 :mask #b1000) + (.mul.x.vf acc vf0 vf3 :mask #b1000) + (.add.mul.y.vf acc vf0 vf3 acc :mask #b1000) + (.add.mul.z.vf vf3 vf0 vf3 acc :mask #b1000) + (.sub.w.vf vf3 vf3 vf4 :mask #b1000) + (let ((f0-2 0.0)) + (.add.w.vf vf3 vf0 vf3 :mask #b1) + (.mov a0-10 vf3) + (let ((s4-0 (-> v1-23 process))) + (b! (< f0-2 a0-10) cfg-27) + (let ((a1-29 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (if a1-29 + (conveyor-method-26 obj a1-29) + ) + ) + ) + ) + (label cfg-27) + 0 + ) + ) + ) + #f + ) + ) + +;; definition for method 21 of type conveyor +;; INFO: Used lq/sq +(defmethod conveyor-method-21 conveyor ((obj conveyor)) + "TODO - quite dense, has to do with the conveyor sections and the path they are associated with" + (local-vars (sv-32 conveyor-section) (sv-48 conveyor-section)) + (let* ((s5-0 (-> obj path)) + (s4-0 (-> s5-0 curve num-cverts)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (let ((s2-0 (new 'process 'conveyor-section-array (+ s4-0 -1)))) + (set! (-> obj sections) s2-0) + (set! (-> obj collide-bounds quad) (the-as uint128 0)) + (get-point-in-path! s5-0 s3-0 0.0 'exact) + (vector+! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) s3-0) + (let ((s1-0 (+ s4-0 -1))) + (set! sv-32 (the-as conveyor-section #f)) + (dotimes (s0-0 s1-0) + (set! sv-48 (-> s2-0 data s0-0)) + (set! (-> sv-48 start quad) (-> s3-0 quad)) + (get-point-in-path! s5-0 s3-0 (the float (+ s0-0 1)) 'exact) + (vector+! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) s3-0) + (vector-! (-> sv-48 pull-dir) s3-0 (-> sv-48 start)) + (vector-normalize! (-> sv-48 pull-dir) 1.0) + (set! (-> sv-48 trailing quad) (-> sv-48 pull-dir quad)) + (set! (-> sv-48 trailing y) 0.0) + (vector-normalize! (-> sv-48 trailing) 1.0) + (set-vector! (-> sv-48 radial-dir) (- (-> sv-48 trailing z)) 0.0 (-> sv-48 trailing x) 1.0) + (set! (-> sv-48 trailing w) (- (vector-dot s3-0 (the-as vector (-> sv-48 trailing))))) + (when (the-as vector sv-32) + (vector+! (&+ (the-as vector sv-32) 16) (&+ (the-as vector sv-32) 16) (the-as vector (-> sv-48 trailing))) + (vector-normalize! (&+ (the-as vector sv-32) 16) 1.0) + (set! (-> sv-32 trailing w) (- (vector-dot (-> sv-48 start) (&+ (the-as vector sv-32) 16)))) + ) + (set! sv-32 sv-48) + sv-32 + ) + ) + ) + (let ((s2-1 (-> obj sections data))) + (set! (-> obj leading quad) (-> s2-1 0 pull-dir quad)) + (set! (-> obj leading y) 0.0) + (vector-normalize! (-> obj leading) 1.0) + (set! (-> obj leading w) (- (vector-dot (the-as vector (-> s2-1 0)) (the-as vector (-> obj leading))))) + ) + (let ((f0-19 (/ 1.0 (the float s4-0))) + (f30-0 0.0) + ) + (vector-float*! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) f0-19) + (dotimes (s2-2 s4-0) + (get-point-in-path! s5-0 s3-0 (the float s2-2) 'exact) + (let ((f0-22 (vector-vector-distance-squared s3-0 (-> obj collide-bounds)))) + (if (< f30-0 f0-22) + (set! f30-0 f0-22) + ) + ) + ) + (set! (-> obj collide-bounds r) (+ (sqrtf f30-0) (-> obj belt-radius))) + ) + ) + ) + +;; failed to figure out what this is: +(defstate idle (conveyor) + :virtual #t + :code (the-as (function none :behavior conveyor) sleep-code) + :post (behavior () + (conveyor-method-27 self) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (none) + ) + ) + +;; definition for method 11 of type conveyor +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! conveyor ((obj conveyor) (arg0 entity-actor)) + (reset-root! obj) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0 (the-as entity #f) #f)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (if (< (-> obj path curve num-cverts) 2) + (go process-drawable-art-error "bad path") + ) + (init! obj) + (set-and-get-ambient-sound! obj) + (conveyor-method-21 obj) + (ja-post) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type strip-conveyor +(deftype strip-conveyor (conveyor) + () + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + ) + +;; definition for method 3 of type strip-conveyor +(defmethod inspect strip-conveyor ((obj strip-conveyor)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type conveyor inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(let ((a0-19 (new 'static 'skeleton-group + :name "skel-strip-conveyor" + :extra #f + :info #f + :art-group-name "strip-conveyor" + :bounds (new 'static 'vector :w 147456.0) + :version #x7 + ) + ) + ) + (set! (-> a0-19 jgeo) 0) + (set! (-> a0-19 janim) 2) + (set! (-> a0-19 mgeo 0) 1) + (set! (-> a0-19 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-19) + ) + +;; definition for method 22 of type strip-conveyor +(defmethod get-art-group strip-conveyor ((obj strip-conveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (art-group-get-by-name *level* "skel-strip-conveyor" (the-as (pointer uint32) #f)) + ) + +;; definition of type lgconveyor +(deftype lgconveyor (conveyor) + () + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + ) + +;; definition for method 3 of type lgconveyor +(defmethod inspect lgconveyor ((obj lgconveyor)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type conveyor inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(let ((a0-23 (new 'static 'skeleton-group + :name "skel-lgconveyor" + :extra #f + :info #f + :art-group-name "lgconveyor" + :bounds (new 'static 'vector :y 12288.0 :w 61440.0) + :longest-edge (meters 24.7389) + :version #x7 + :origin-joint-index 3 + ) + ) + ) + (set! (-> a0-23 jgeo) 0) + (set! (-> a0-23 janim) 3) + (set! (-> a0-23 mgeo 0) 1) + (set! (-> a0-23 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-23) + ) + +;; definition for method 22 of type lgconveyor +(defmethod get-art-group lgconveyor ((obj lgconveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (art-group-get-by-name *level* "skel-lgconveyor" (the-as (pointer uint32) #f)) + ) + +;; definition for method 24 of type lgconveyor +;; WARN: Return type mismatch float vs none. +(defmethod init! lgconveyor ((obj lgconveyor)) + "Initializes defaults for things like the `speed` and `belt-radius`" + (set! (-> obj speed) 30720.0) + (set! (-> obj belt-radius) 11878.4) + (set! (-> obj pull-y-threshold) 10240.0) + (none) + ) + +;; failed to figure out what this is: +(defstate idle (lgconveyor) + :virtual #t + :code (behavior () + (until #f + (ja-no-eval :group! (-> self draw art-group data 3) + :num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (behavior () + (let ((t9-0 (-> (method-of-type conveyor idle) post))) + (if t9-0 + ((the-as (function none) t9-0)) + ) + ) + (ja-post) + (none) + ) + ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/elevator_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/elevator_REF.gc new file mode 100644 index 0000000000..c7c605c43c --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/elevator_REF.gc @@ -0,0 +1,953 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type elevator-params +(deftype elevator-params (structure) + ((xz-threshold float :offset-assert 0) + (y-threshold float :offset-assert 4) + (start-pos float :offset-assert 8) + (move-rate float :offset-assert 12) + (flags elevator-flags :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +;; definition for method 3 of type elevator-params +(defmethod inspect elevator-params ((obj elevator-params)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'elevator-params) + (format #t "~1Txz-threshold: ~f~%" (-> obj xz-threshold)) + (format #t "~1Ty-threshold: ~f~%" (-> obj y-threshold)) + (format #t "~1Tstart-pos: ~f~%" (-> obj start-pos)) + (format #t "~1Tmove-rate: ~f~%" (-> obj move-rate)) + (format #t "~1Tflags: ~D~%" (-> obj flags)) + (label cfg-4) + obj + ) + +;; definition of type path-step +(deftype path-step (structure) + ((next-pos float :offset-assert 0) + (dist float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +;; definition for method 3 of type path-step +(defmethod inspect path-step ((obj path-step)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'path-step) + (format #t "~1Tnext-pos: ~f~%" (-> obj next-pos)) + (format #t "~1Tdist: ~f~%" (-> obj dist)) + (label cfg-4) + obj + ) + +;; definition of type path-step-inline-array +(deftype path-step-inline-array (inline-array-class) + ((data path-step :inline :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type path-step-inline-array +(defmethod inspect path-step-inline-array ((obj path-step-inline-array)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tlength: ~D~%" (-> obj length)) + (format #t "~1Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~1Tdata[0] @ #x~X~%" (-> obj data)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(set! (-> path-step-inline-array heap-base) (the-as uint 16)) + +;; definition of type elevator +(deftype elevator (base-plat) + ((params elevator-params :inline :offset-assert 272) + (path-seq path-step-inline-array :offset-assert 296) + (path-dest float :offset-assert 300) + (bottom-top float 2 :offset-assert 304) + (move-pos float 2 :offset-assert 312) + (move-dist float :offset-assert 320) + (path-pos float :offset-assert 324) + (path-eased-pos float :offset-assert 328) + (ride-timer uint64 :offset-assert 336) + (sticky-player-last-ride-time time-frame :offset-assert 344) + (elevator-status elevator-status :offset-assert 352) + (on-activate basic :offset-assert 360) + (on-deactivate basic :offset-assert 364) + ) + :heap-base #xf0 + :method-count-assert 49 + :size-assert #x170 + :flag-assert #x3100f00170 + (:methods + (dormant () _type_ :state 34) + (waiting () _type_ :state 35) + (running () _type_ :state 36) + (arrived () _type_ :state 37) + (elevator-method-38 (_type_) none 38) + (calc-dist-between-points! (_type_ int int) none 39) + (elevator-method-40 (_type_) object 40) + (init-defaults! (_type_) none 41) + (clear-ambient-sound! (_type_) none 42) + (elevator-method-43 (_type_ vector float float) symbol 43) + (elevator-method-44 (_type_) symbol 44) + (elevator-method-45 (_type_) symbol 45) + (move-to-next-point! (_type_) none 46) + (find-closest-point-in-path! (_type_ vector path-step symbol symbol) symbol 47) + (elevator-method-48 (_type_) none 48) + ) + ) + +;; definition for method 3 of type elevator +(defmethod inspect elevator ((obj elevator)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type base-plat inspect))) + (t9-0 obj) + ) + (format #t "~2Tparams: #~%" (-> obj params)) + (format #t "~2Tpath-seq: ~A~%" (-> obj path-seq)) + (format #t "~2Tpath-dest: ~f~%" (-> obj path-dest)) + (format #t "~2Tbottom-top[2] @ #x~X~%" (-> obj bottom-top)) + (format #t "~2Tmove-pos[2] @ #x~X~%" (-> obj move-pos)) + (format #t "~2Tmove-dist: ~f~%" (-> obj move-dist)) + (format #t "~2Tpath-pos: ~f~%" (-> obj path-pos)) + (format #t "~2Tpath-eased-pos: ~f~%" (-> obj path-eased-pos)) + (format #t "~2Tride-timer: ~D~%" (-> obj ride-timer)) + (format #t "~2Tsticky-player-last-ride-time: ~D~%" (-> obj sticky-player-last-ride-time)) + (format #t "~2Televator-status: ~D~%" (-> obj elevator-status)) + (format #t "~2Ton-activate: ~A~%" (-> obj on-activate)) + (format #t "~2Ton-deactivate: ~A~%" (-> obj on-deactivate)) + (label cfg-4) + obj + ) + +;; definition for method 43 of type elevator +(defmethod elevator-method-43 elevator ((obj elevator) (arg0 vector) (arg1 float) (arg2 float)) + #f + ) + +;; definition for method 48 of type elevator +;; INFO: Used lq/sq +(defmethod elevator-method-48 elevator ((obj elevator)) + "TODO - collision related" + (let ((target *target*)) + (when target + (let ((s4-0 (-> target control unknown-sphere-array00 0)) + (s5-0 (new 'stack-no-clear 'collide-query)) + ) + (set! (-> s5-0 start-pos quad) (-> s4-0 prim-core world-sphere quad)) + (set! (-> s5-0 start-pos y) (+ 8192.0 (-> s5-0 start-pos y))) + (set! (-> s5-0 start-pos w) 1.0) + (vector-reset! (-> s5-0 move-dist)) + (set! (-> s5-0 move-dist y) -90112.0) + (let ((collide-query s5-0)) + (set! (-> collide-query radius) (-> s4-0 local-sphere w)) + (set! (-> collide-query collide-with) (collide-spec hit-by-others-list pusher)) + (set! (-> collide-query ignore-process0) target) + (set! (-> collide-query ignore-process1) #f) + (set! (-> collide-query ignore-pat) (-> target control pat-ignore-mask)) + (set! (-> collide-query action-mask) (collide-action solid)) + ) + (let ((f0-5 (fill-and-probe-using-line-sphere *collide-cache* s5-0))) + (when (< 0.0 f0-5) + (vector-float*! (-> s5-0 move-dist) (-> s5-0 move-dist) f0-5) + (vector+! (-> s5-0 move-dist) (-> s5-0 move-dist) (-> s5-0 start-pos)) + (vector-! (-> s5-0 move-dist) (-> s5-0 move-dist) (the-as vector (-> s4-0 prim-core))) + (move-by-vector! (-> target control) (-> s5-0 move-dist)) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for method 41 of type elevator +;; WARN: Return type mismatch int vs none. +(defmethod init-defaults! elevator ((obj elevator)) + "Initializes default settings related to the [[elevator]]: + - `elevator-xz-threshold` + - `elevator-y-threshold` + - `elevator-start-pos` + - `elevator-move-rate` + - `elevator-flags`" + (let ((entity (-> obj entity))) + (set! (-> obj params xz-threshold) ((method-of-object entity get-property-value-float) + entity + 'elevator-xz-threshold + 'interp + -1000000000.0 + 81920.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params y-threshold) ((method-of-object entity get-property-value-float) + entity + 'elevator-y-threshold + 'interp + -1000000000.0 + 20480.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params start-pos) ((method-of-object entity get-property-value-float) + entity + 'elevator-start-pos + 'interp + -1000000000.0 + 0.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params move-rate) ((method-of-object entity get-property-value-float) + entity + 'elevator-move-rate + 'interp + -1000000000.0 + 25600.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params flags) (the-as elevator-flags ((method-of-object entity get-property-value) + entity + 'elevator-flags + 'interp + -1000000000.0 + (the-as uint128 1) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function ease-value-in-out +(defun ease-value-in-out ((value float) (step-amount float)) + "TODO - the math in this function is full of duplication and isn't totally clear + but if the name is to be believed, it's to slow a values grow at the beginning and end of it's range + which is obviously useful for an elevator." + (let* ((step step-amount) + (f4-0 (- 1.0 step-amount)) + (f3-0 (/ step (- 1.0 f4-0))) + (f2-1 (* step step)) + (f1-6 (+ (* 2.0 step (- f4-0 step)) f2-1)) + (f1-7 (+ (* (- 1.0 f4-0) (- 1.0 f4-0) f3-0) f1-6)) + ) + (/ (cond + ((< value step) + (* value value) + ) + ((< value f4-0) + (+ (* 2.0 step (- value step)) f2-1) + ) + (else + (let ((f0-7 (- 1.0 value))) + (- f1-7 (* f0-7 f0-7 f3-0)) + ) + ) + ) + f1-7 + ) + ) + ) + +;; definition for function elevator-event +;; WARN: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 18] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 119] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 209] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 222] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 236] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 246] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 257] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 264] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 276] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 301] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 326] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 334] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 337] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 174] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 40] +;; WARN: disable def twice: 11. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +(defbehavior elevator-event elevator ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as + object + (cond + ((= evt-type 'status?) + (and (= (the float (/ (the-as int (-> event param 0)) 8)) (-> self move-pos 0)) + (= (the float (/ (the-as int (-> event param 1)) 8)) (-> self move-pos 1)) + ) + ) + ((= evt-type 'ridden) + (let ((proc-focus (handle->process (-> (the-as focus (-> event param 0)) handle)))) + (if (= (-> proc-focus type) target) + (set! (-> self sticky-player-last-ride-time) (-> self clock frame-counter)) + ) + ) + #t + ) + ((= evt-type 'use-camera) + (if (-> event param 0) + (set-setting! 'entity-name (-> event param 0) 0 0) + (remove-setting! 'entity-name) + ) + ) + ((= evt-type 'move-to) + (when (and (-> self next-state) (let ((next-state-0 (-> self next-state name))) + (or (= next-state-0 'waiting) (= next-state-0 'arrived)) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (cond + ((not (logtest? (-> event param 0) 7)) + (let ((gp-0 (the-as number (-> event param 0)))) + (set! (-> self move-pos 1) (if (type? (the-as uint gp-0) float) + (the-as float gp-0) + ) + ) + ) + ) + (else + (case (-> event param 0) + (('quote 'bottom) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + (('quote 'top) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ) + ) + ) + (go-virtual running) + ) + ) + ((= evt-type 'jump-to) + (cond + ((not (logtest? (-> event param 0) 7)) + (let ((gp-1 (the-as number (-> event param 0)))) + (set! (-> self move-pos 1) (if (type? (the-as uint gp-1) float) + (the-as float gp-1) + ) + ) + ) + ) + (else + (case (-> event param 0) + (('quote 'bottom) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + (('quote 'top) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (get-point-in-path! (-> self path) (-> self basetrans) (-> self move-pos 0) 'interp) + (go-virtual waiting) + ) + ((= evt-type 'trigger) + (when (and (-> self next-state) (let ((next-state-1 (-> self next-state name))) + (or (= next-state-1 'waiting) (= next-state-1 'arrived)) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (cond + ((= (-> self move-pos 0) (-> self bottom-top 0)) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ((= (-> self move-pos 0) (-> self bottom-top 1)) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + ) + (go-virtual running) + ) + ) + ((= evt-type 'query) + (case (-> event param 0) + (('waiting?) + (and (-> self next-state) (= (-> self next-state name) 'waiting)) + ) + (('arrived?) + (and (-> self next-state) (let ((v1-61 (-> self next-state name))) + (or (= v1-61 'arrived) (= v1-61 'waiting)) + ) + ) + ) + (('running?) + (and (-> self next-state) (= (-> self next-state name) 'running)) + ) + (('path-pos?) + (+ (-> self move-pos 0) (* (-> self path-pos) (- (-> self move-pos 1) (-> self move-pos 0)))) + ) + (('player-standing-on?) + (= (-> self sticky-player-last-ride-time) (-> self clock frame-counter)) + ) + (('point-inside-shaft?) + (elevator-method-43 self (the-as vector (-> event param 1)) (-> self bottom-top 1) (-> self bottom-top 0)) + ) + (('going-down?) + (< (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 1) 'interp) y) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 0) 'interp) y) + ) + ) + (('going-up?) + (< (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 0) 'interp) y) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 1) 'interp) y) + ) + ) + ) + ) + ((= evt-type 'go-dormant) + (go-virtual dormant) + ) + (else + (plat-event proc arg1 event-type event) + ) + ) + ) + ) + ) + +;; definition for method 47 of type elevator +;; INFO: Used lq/sq +(defmethod find-closest-point-in-path! elevator ((obj elevator) (arg0 vector) (arg1 path-step) (arg2 symbol) (arg3 symbol)) + "Finds and sets the provided [[path-step]]'s `next-pos` field to the vertex index in the path which is closest to + the provided [[vector]] + + @param vec The point at which distance calculations are based off + @param! next-step If a point is found, `next-pos` will be set to the correct point + @param arg2 TODO + @param arg3 TODO + @returns [[#t]] if a point in the path was found" + (local-vars (path-point vector)) + (let ((elev-params (-> obj params)) + (smallest-dist 0.0) + (point-idx-tracker -1.0) + ) + (dotimes (path-vertex-idx (-> obj path curve num-cverts)) + (set! path-point + (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-vertex-idx) 'interp) + ) + (when (and (or (not arg2) (< (vector-vector-xz-distance path-point arg0) (-> elev-params xz-threshold))) + (or (not arg3) + (< (fabs (- (-> path-point y) (-> arg0 y))) (-> elev-params y-threshold)) + (and (= path-vertex-idx (the int (-> obj bottom-top 0))) (< (-> arg0 y) (-> path-point y))) + (and (= path-vertex-idx (the int (-> obj bottom-top 1))) (< (-> path-point y) (-> arg0 y))) + ) + ) + (let* ((t9-2 vector-vector-distance) + (a1-3 arg0) + (dist (t9-2 path-point a1-3)) + ) + (when (or (= point-idx-tracker -1.0) (< dist smallest-dist)) + (set! smallest-dist dist) + (set! point-idx-tracker (the float path-vertex-idx)) + ) + ) + ) + ) + (when (!= point-idx-tracker -1.0) + (set! (-> arg1 next-pos) point-idx-tracker) + #t + ) + ) + ) + +;; definition for method 44 of type elevator +;; WARN: Return type mismatch object vs symbol. +(defmethod elevator-method-44 elevator ((obj elevator)) + (let* ((target-temp *target*) + (target (if (type? target-temp process-focusable) + target-temp + ) + ) + ) + (the-as + symbol + (and target (elevator-method-43 obj (get-trans target 0) (-> obj move-pos 0) (-> obj move-pos 1))) + ) + ) + ) + +;; definition for method 45 of type elevator +(defmethod elevator-method-45 elevator ((obj elevator)) + "@returns Stub, or always returns [[#t]]" + #t + ) + +;; definition for method 46 of type elevator +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Return type mismatch int vs none. +(defmethod move-to-next-point! elevator ((obj elevator)) + "If the [[*target*]] is in a valid state and there is a point to transition to in the elevator's path + do so. + @see [[elevator::47]]" + (local-vars (zero float)) + (let ((target *target*)) + (when (and target + (zero? (logand (focus-status dead inactive in-air grabbed edge-grab pole pilot-riding pilot teleporting) + (-> target focus-status) + ) + ) + ) + (set! zero (the-as float 0.0)) + (when (and (find-closest-point-in-path! obj (get-trans target 0) (new 'stack-no-clear 'path-step) #t #t) + (!= (-> obj move-pos 1) zero) + ) + (set! (-> obj move-pos 0) (-> obj move-pos 1)) + (set! (-> obj move-pos 1) zero) + (logior! (-> obj elevator-status) (elevator-status moving)) + (go (method-of-object obj running)) + ) + ) + ) + 0 + (none) + ) + +;; definition for function move-post +(defbehavior move-post elevator () + (when (nonzero? (-> self sound)) + (let ((f0-3 (sqrtf (sin-rad (* 3.1415925 (-> self path-pos)))))) + (update-vol! (-> self sound) f0-3) + ) + (update-trans! (-> self sound) (-> self root-override trans)) + (update! (-> self sound)) + ) + (plat-post) + (none) + ) + +;; failed to figure out what this is: +(defstate dormant (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (go-virtual waiting) + ) + (('bonk) + #f + ) + (else + (plat-event proc arg1 event-type event) + ) + ) + ) + :trans (the-as (function none :behavior elevator) plat-trans) + :code (the-as (function none :behavior elevator) sleep-code) + :post (the-as (function none :behavior elevator) plat-post) + ) + +;; failed to figure out what this is: +(defstate waiting (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('ridden) + (if (elevator-method-45 self) + (logior! (-> self elevator-status) (elevator-status elevator-status-0)) + ) + (elevator-event proc arg1 event-type event) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (logclear! (-> self elevator-status) (elevator-status elevator-status-0 moving)) + (logior! (-> self mask) (process-mask actor-pause)) + (if (nonzero? (-> self sound)) + (update-vol! (-> self sound) 0.0) + ) + (none) + ) + :trans (behavior () + (plat-trans) + (when (not (logtest? (-> self elevator-status) (elevator-status elevator-status-0))) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (-> self params) + (if (and (logtest? (-> self params flags) (elevator-flags elevator-flags-0)) + (zero? (logand (-> self params flags) (elevator-flags elevator-flags-3))) + ) + (move-to-next-point! self) + ) + ) + (when (and (not (logtest? (-> self params flags) (elevator-flags elevator-flags-3))) + (>= (- (-> self clock frame-counter) (the-as int (-> self ride-timer))) (seconds 1)) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (set! (-> self move-pos 1) (-> self path-seq data (the int (-> self move-pos 1)) next-pos)) + (go-virtual running) + ) + (none) + ) + :code (the-as (function none :behavior elevator) sleep-code) + :post (behavior () + (logclear! (-> self elevator-status) (elevator-status elevator-status-0)) + (debug-draw (-> self path)) + (plat-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate running (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('running?) + #t + ) + (('player-ridden?) + (logtest? (-> self elevator-status) (elevator-status elevator-status-0)) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (if (not (logtest? (-> self params flags) (elevator-flags elevator-flags-7))) + (process-entity-status! self (entity-perm-status no-kill) #t) + ) + (logclear! (-> self elevator-status) (elevator-status elevator-status-1)) + (when (logtest? (-> self params flags) (elevator-flags elevator-flags-2)) + (logclear! (-> self params flags) (elevator-flags elevator-flags-2)) + (logior! (-> self params flags) (elevator-flags elevator-flags-0)) + ) + (set! (-> self move-dist) 0.0) + (let ((v1-13 (the int (-> self move-pos 0))) + (a0-3 (the int (-> self move-pos 1))) + (a1-1 0) + ) + (while (let ((a2-3 (abs (- a0-3 v1-13)))) + (< a1-1 a2-3) + ) + (+! (-> self move-dist) (-> self path-seq data (+ (min v1-13 a0-3) a1-1) dist)) + (+! a1-1 1) + ) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (set-setting! 'board #f 0 0) + (let ((gp-0 (-> self on-activate))) + (if gp-0 + (eval! + (new + 'stack + 'script-context + (the-as basic (* (the int (-> self move-pos 0)) 8)) + self + (-> self root-override trans) + ) + (the-as pair gp-0) + ) + ) + ) + (set! (-> self path-pos) 0.0) + (if (nonzero? (-> self sound)) + (update-vol! (-> self sound) 0.0) + ) + (when (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (set-setting! 'jump #f 0 0) + (apply-settings *setting-control*) + ) + (none) + ) + :exit (behavior () + (if (not (logtest? (-> self params flags) (elevator-flags elevator-flags-7))) + (process-entity-status! self (entity-perm-status no-kill) #f) + ) + (remove-setting! 'board) + (if (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (remove-setting! 'jump) + ) + (none) + ) + :trans (behavior () + (if (and (not (logtest? (-> self elevator-status) (elevator-status elevator-status-1))) + (= (-> self path-pos) 1.0) + ) + (go-virtual arrived) + ) + (if (elevator-method-44 self) + (set! (-> self path-dest) 0.0) + (set! (-> self path-dest) 1.0) + ) + (if (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (elevator-method-48 self) + ) + (plat-trans) + (none) + ) + :code (behavior () + (logior! (-> self elevator-status) (elevator-status elevator-status-1)) + (until #f + (suspend) + (if (= (-> self path-pos) 1.0) + (logclear! (-> self elevator-status) (elevator-status elevator-status-1)) + ) + ) + #f + (none) + ) + :post (behavior () + (when (logtest? (-> self elevator-status) (elevator-status elevator-status-1)) + (seek! + (-> self path-pos) + (-> self path-dest) + (* (/ (-> self params move-rate) (-> self move-dist)) (-> self clock seconds-per-frame)) + ) + (let* ((f30-0 (-> self move-pos 0)) + (f28-0 (-> self move-pos 1)) + (f0-9 (+ f30-0 (* (ease-value-in-out (-> self path-pos) 0.08) (- f28-0 f30-0)))) + ) + (get-point-in-path! (-> self path) (-> self basetrans) f0-9 'interp) + ) + ) + (move-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate arrived (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('ridden) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (elevator-event proc arg1 event-type event) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (if (not (-> *setting-control* user-current jump)) + (remove-setting! 'jump) + ) + (let ((gp-0 (-> self on-deactivate))) + (if gp-0 + (eval! + (new + 'stack + 'script-context + (the-as basic (* (the int (-> self move-pos 1)) 8)) + self + (-> self root-override trans) + ) + (the-as pair gp-0) + ) + ) + ) + (none) + ) + :trans (behavior () + (if (and (< (the-as int (- (-> self ride-timer) (the-as uint (-> self sticky-player-last-ride-time)))) 600) + (begin *target* *target*) + (logtest? (-> *target* focus-status) (focus-status in-air)) + ) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + ) + (when (or (logtest? (-> self elevator-status) (elevator-status moving)) + (>= (- (-> self clock frame-counter) (the-as int (-> self ride-timer))) (seconds 0.5)) + ) + (cond + ((and (logtest? (-> self params flags) (elevator-flags elevator-flags-1)) + (!= (-> self move-pos 1) (-> self params start-pos)) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (set! (-> self move-pos 1) (-> self params start-pos)) + (go-virtual running) + ) + (else + (go-virtual waiting) + ) + ) + ) + (plat-trans) + (none) + ) + :code (the-as (function none :behavior elevator) sleep-code) + :post (the-as (function none :behavior elevator) plat-post) + ) + +;; definition for method 39 of type elevator +;; WARN: Return type mismatch int vs none. +(defmethod calc-dist-between-points! elevator ((obj elevator) (path-point-x int) (path-point-y int)) + "Calculates the distance between two points in the elevator's path. + + @param path-point-x The index of the first point in the distance calculation, and where `next-pos` and `dist` are stored in the `path-seq` array + @param path-point-y The second point in the distance calculation" + (set! (-> obj path-seq data path-point-x next-pos) (the float path-point-y)) + (let ((point-x (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-x) 'interp)) + (point-y (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-y) 'interp)) + ) + (set! (-> obj path-seq data path-point-x dist) (vector-vector-distance point-x point-y)) + ) + 0 + (none) + ) + +;; definition for method 42 of type elevator +;; WARN: Return type mismatch int vs none. +(defmethod clear-ambient-sound! elevator ((obj elevator)) + "Might be a virtual function, but clears the object's [[ambient-sound]]" + (set! (-> obj sound) (the-as ambient-sound 0)) + 0 + (none) + ) + +;; definition for method 33 of type elevator +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-33 elevator ((obj elevator)) + 0 + (none) + ) + +;; definition for method 7 of type elevator +;; WARN: Return type mismatch base-plat vs elevator. +(defmethod relocate elevator ((obj elevator) (arg0 int)) + (if (nonzero? (-> obj path-seq)) + (&+! (-> obj path-seq) arg0) + ) + (the-as elevator ((the-as (function base-plat int base-plat) (find-parent-method elevator 7)) obj arg0)) + ) + +;; definition for method 40 of type elevator +(defmethod elevator-method-40 elevator ((obj elevator)) + "TODO - need to figure out some flags to be confident about this" + (if (logtest? (-> obj params flags) (elevator-flags elevator-flags-6)) + (go (method-of-object obj arrived)) + (go (method-of-object obj waiting)) + ) + ) + +;; definition for method 11 of type elevator +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! elevator ((obj elevator) (entity entity-actor)) + (local-vars (sv-32 float) (sv-36 path-control) (sv-40 target)) + (base-plat-method-31 obj) + (process-drawable-from-entity! obj entity) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (stop-bouncing! obj) + (set! (-> obj elevator-status) (elevator-status)) + (collide-shape-method-46 (-> obj root-override)) + (base-plat-method-32 obj) + (init-defaults! obj) + (set! (-> obj on-activate) (res-lump-struct (-> obj entity) 'on-activate basic)) + (set! (-> obj on-deactivate) (res-lump-struct (-> obj entity) 'on-deactivate basic)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0 entity #f)) + (if (logtest? (-> obj path flags) (path-control-flag not-found)) + (go process-drawable-art-error "error in path") + ) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (let ((num-path-points (-> obj path curve num-cverts)) + (s4-1 0) + (f30-0 0.0) + (f28-0 0.0) + ) + (set! (-> obj path-seq) (new 'process 'path-step-inline-array num-path-points)) + (dotimes (path-point-idx num-path-points) + (calc-dist-between-points! obj path-point-idx (mod (+ path-point-idx 1) num-path-points)) + (let ((v1-31 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-idx) 'interp))) + (when (or (not (logtest? s4-1 1)) (< (-> v1-31 y) f28-0)) + (set! (-> obj bottom-top 0) (the float path-point-idx)) + (set! f28-0 (-> v1-31 y)) + (set! s4-1 (logior s4-1 1)) + ) + (when (or (not (logtest? s4-1 2)) (< f30-0 (-> v1-31 y))) + (set! (-> obj bottom-top 1) (the float path-point-idx)) + (set! f30-0 (-> v1-31 y)) + (set! s4-1 (logior s4-1 2)) + ) + ) + ) + ) + (set! sv-32 (the-as float 0.0)) + (set! sv-36 (-> obj path)) + (let ((s5-2 *target*)) + (set! sv-40 (if (type? s5-2 process-focusable) + s5-2 + ) + ) + ) + (if (not (and sv-40 + (logtest? (-> obj params flags) (elevator-flags elevator-flags-4)) + (find-closest-point-in-path! obj (get-trans sv-40 0) (the-as path-step (& sv-32)) #f #t) + ) + ) + (set! sv-32 (-> obj params start-pos)) + ) + (set! (-> obj move-pos 0) sv-32) + (set! (-> obj move-pos 1) sv-32) + (get-point-in-path! sv-36 (-> obj basetrans) sv-32 'interp) + (set! (-> obj root-override pause-adjust-distance) + (+ 122880.0 (-> obj params xz-threshold) (total-distance (-> obj path))) + ) + (clear-ambient-sound! obj) + (base-plat-method-33 obj) + (elevator-method-40 obj) + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/plat_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/plat_REF.gc new file mode 100644 index 0000000000..7d8584cfd4 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/plat_REF.gc @@ -0,0 +1,407 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type plat +(deftype plat (base-plat) + ((path-pos float :offset-assert 272) + (sound-id sound-id :offset-assert 276) + (sync sync-eased :inline :offset-assert 280) + ) + :heap-base #xd0 + :method-count-assert 37 + :size-assert #x144 + :flag-assert #x2500d00144 + (:methods + (plat-idle () _type_ :state 34) + (plat-path-active () _type_ :state 35) + (plat-path-sync (_type_) object 36) + ) + ) + +;; definition for method 3 of type plat +(defmethod inspect plat ((obj plat)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type base-plat inspect))) + (t9-0 obj) + ) + (format #t "~2Tpath-pos: ~f~%" (-> obj path-pos)) + (format #t "~2Tsound-id: ~D~%" (-> obj sound-id)) + (format #t "~2Tsync: #~%" (-> obj sync)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-plat" + :extra #f + :info #f + :art-group-name "plat" + :bounds (new 'static 'vector :y -2048.0 :w 12288.0) + :max-lod 2 + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 4) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 81920.0) + (set! (-> a0-2 mgeo 1) 2) + (set! (-> a0-2 lod-dist 1) 163840.0) + (set! (-> a0-2 mgeo 2) 3) + (set! (-> a0-2 lod-dist 2) 4095996000.0) + (add-to-loading-level a0-2) + ) + +;; definition for method 30 of type plat +(defmethod get-art-group plat ((obj plat)) + "@returns The associated [[art-group]]" + (art-group-get-by-name *level* "skel-plat" (the-as (pointer uint32) #f)) + ) + +;; definition for method 31 of type plat +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-31 plat ((obj plat)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec pusher)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid rideable)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 13107.2) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + ((method-of-object collision-shape collide-shape-method-54)) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root-override) (the-as collide-shape-moving collision-shape)) + ) + 0 + (none) + ) + +;; definition for method 33 of type plat +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-33 plat ((obj plat)) + 0 + (none) + ) + +;; definition for method 32 of type plat +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-32 plat ((obj plat)) + 0 + (none) + ) + +;; definition for method 36 of type plat +(defmethod plat-path-sync plat ((obj plat)) + "If the `sync` period is greater than `0` then transition the state to [[plat::35]] + otherwise, [[plat::34]] + + @see [[sync-eased]]" + (cond + ((logtest? (-> obj path flags) (path-control-flag not-found)) + (go (method-of-object obj plat-idle)) + ) + ((> (-> obj sync period) 0) + (go (method-of-object obj plat-path-active)) + ) + (else + (go (method-of-object obj plat-idle)) + ) + ) + ) + +;; failed to figure out what this is: +(defstate plat-idle (plat) + :virtual #t + :event (the-as (function process int symbol event-message-block object :behavior plat) plat-event) + :trans (behavior () + (execute-effects self) + (none) + ) + :code (behavior () + (plat-trans) + (rider-post) + (suspend) + (until #f + (when (not (-> self bouncing)) + (plat-trans) + (rider-post) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + ) + (while (-> self bouncing) + (plat-trans) + (rider-post) + (suspend) + ) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate plat-path-active (plat) + :virtual #t + :event (the-as (function process int symbol event-message-block object :behavior plat) plat-event) + :exit (behavior () + (sound-stop (-> self sound-id)) + (none) + ) + :trans (behavior () + (set! (-> self path-pos) (get-norm! (-> self sync) 0)) + (get-point-at-percent-along-path! (-> self path) (-> self basetrans) (-> self path-pos) 'interp) + (if (< (vector-vector-distance (-> self root-override trans) (ear-trans 0)) 81920.0) + (sound-play "eco-plat-hover" :id (-> self sound-id) :position (-> self root-override trans)) + ) + (plat-trans) + (none) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior plat) plat-post) + ) + +;; definition for method 11 of type plat +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! plat ((obj plat) (entity entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (base-plat-method-31 obj) + (process-drawable-from-entity! obj entity) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (collide-shape-method-46 (-> obj root-override)) + (stop-bouncing! obj) + (base-plat-method-32 obj) + (set! (-> obj fact) + (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-eco-pill-green-inc)) + ) + (let ((params (new 'stack-no-clear 'sync-info-params))) + (let ((v1-15 0)) + (if (not (logtest? (-> obj fact options) (actor-option loop))) + (set! v1-15 (logior v1-15 1)) + ) + (set! (-> params sync-type) (the-as basic 'sync-eased)) + (set! (-> params sync-flags) (the-as sync-flags v1-15)) + ) + (set! (-> params period) (the-as uint 1200)) + (set! (-> params entity) entity) + (set! (-> params percent) 0.0) + (set! (-> params ease-in) 0.15) + (set! (-> params ease-out) 0.15) + (set! (-> params pause-in) 0.0) + (set! (-> params pause-out) 0.0) + (initialize! (-> obj sync) params) + ) + (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj sound-id) (new-sound-id)) + (cond + ((logtest? (-> obj path flags) (path-control-flag not-found)) + (set! (-> obj path-pos) 0.0) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + ((> (-> obj sync period) 0) + (set! (-> obj path-pos) (get-norm! (-> obj sync) 0)) + (get-point-at-percent-along-path! (-> obj path) (-> obj root-override trans) (-> obj path-pos) 'interp) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + (else + (set! (-> obj path-pos) 0.0) + (get-point-at-percent-along-path! (-> obj path) (-> obj root-override trans) (-> obj path-pos) 'interp) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + ) + (none) + ) + +;; definition of type drop-plat +(deftype drop-plat (base-plat) + ((art-name string :offset-assert 272) + (anim spool-anim :offset-assert 276) + (break-anim-name string :offset-assert 280) + (safe-time time-frame :offset-assert 288) + (hit-point vector :inline :offset-assert 304) + ) + :heap-base #xc0 + :method-count-assert 36 + :size-assert #x140 + :flag-assert #x2400c00140 + (:methods + (idle () _type_ :state 34) + (fall (symbol) _type_ :state 35) + ) + ) + +;; definition for method 3 of type drop-plat +(defmethod inspect drop-plat ((obj drop-plat)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type base-plat inspect))) + (t9-0 obj) + ) + (format #t "~2Tart-name: ~A~%" (-> obj art-name)) + (format #t "~2Tanim: ~A~%" (-> obj anim)) + (format #t "~2Tbreak-anim-name: ~A~%" (-> obj break-anim-name)) + (format #t "~2Tsafe-time: ~D~%" (-> obj safe-time)) + (format #t "~2Thit-point: ~`vector`P~%" (-> obj hit-point)) + (label cfg-4) + obj + ) + +;; definition for method 7 of type drop-plat +;; WARN: Return type mismatch base-plat vs drop-plat. +(defmethod relocate drop-plat ((obj drop-plat) (arg0 int)) + (if (nonzero? (-> obj break-anim-name)) + (&+! (-> obj break-anim-name) arg0) + ) + (let ((v1-5 (-> obj anim buffer))) + (if (and (>= (the-as int v1-5) (-> *kernel-context* relocating-min)) + (< (the-as int v1-5) (-> *kernel-context* relocating-max)) + ) + (&+! (-> obj anim buffer) arg0) + ) + ) + (the-as drop-plat ((method-of-type base-plat relocate) obj arg0)) + ) + +;; failed to figure out what this is: +(defstate idle (drop-plat) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack 'bonk) + (let* ((proc-temp proc) + (proc-focus (if (type? proc-temp process-focusable) + (the-as process-focusable proc-temp) + ) + ) + ) + (cond + ((and proc-focus (logtest? (-> proc-focus focus-status) (focus-status edge-grab))) + (set! (-> self safe-time) (+ (-> self clock frame-counter) (seconds 0.2))) + (return (the-as object #f)) + ) + ((< (- (-> self clock frame-counter) (-> self safe-time)) (seconds 0.05)) + (return (the-as object #f)) + ) + ) + (set! (-> self hit-point quad) (-> self root-override trans quad)) + (set! proc-focus (if (type? proc process-focusable) + (the-as process-focusable proc) + ) + ) + (set! (-> self hit-point quad) (-> (get-trans proc-focus 0) quad)) + ) + (if (zero? (-> self bounce-time)) + (start-bouncing! self) + ) + #f + ) + ) + ) + :trans (the-as (function none :behavior drop-plat) plat-trans) + :code (behavior () + (gui-control-method-9 + *gui-control* + self + (gui-channel art-load) + (gui-action queue) + (-> self anim name) + -99.0 + 0 + ) + (until #f + (when (not (-> self bouncing)) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + ) + (while (-> self bouncing) + (suspend) + ) + (go-virtual fall #f) + ) + #f + (none) + ) + :post (the-as (function none :behavior drop-plat) plat-post) + ) + +;; failed to figure out what this is: +(defstate fall (drop-plat) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('edge-grabbed) + (if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.5)) + (send-event proc 'end-mode) + ) + ) + (('die) + (go-virtual fall #t) + ) + ) + ) + :enter (behavior ((arg0 symbol)) + (set! (-> self state-time) (-> self clock frame-counter)) + (none) + ) + :exit (behavior () + (ja-abort-spooled-anim (-> self anim) (the-as art-joint-anim #f) -1) + (none) + ) + :trans (the-as (function none :behavior drop-plat) rider-trans) + :code (behavior ((arg0 symbol)) + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (collide-spec)) + (set! (-> v1-1 prim-core collide-with) (collide-spec)) + ) + 0 + (if (not arg0) + (ja-play-spooled-anim + (-> self anim) + (ja-group) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + ) + (ja-channel-set! 0) + (suspend) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + :post (the-as (function none :behavior drop-plat) rider-post) + ) diff --git a/test/decompiler/reference/jak2/engine/debug/debug_REF.gc b/test/decompiler/reference/jak2/engine/debug/debug_REF.gc index b80c433a3e..12d5ac2844 100644 --- a/test/decompiler/reference/jak2/engine/debug/debug_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/debug_REF.gc @@ -1877,8 +1877,8 @@ ;; this part is debug only (when *debug-segment* -;; definition for symbol *boundary-polygon*, type none -(define *boundary-polygon* (the-as none (malloc 'debug 768))) +;; definition for symbol *boundary-polygon*, type (inline-array sky-vertex) +(define *boundary-polygon* (the-as (inline-array sky-vertex) (malloc 'debug 768))) ) ;; definition (debug) for function init-boundary-regs @@ -1927,224 +1927,152 @@ ;; ERROR: function was not converted to expressions. Cannot decompile. ;; definition (debug) for function add-debug-bound-internal -;; ERROR: function has no type analysis. Cannot decompile. +;; INFO: Used lq/sq +;; WARN: Return type mismatch symbol vs none. +(defun-debug add-debug-bound-internal ((buf dma-buffer) (pts (inline-array vector)) (num-pts int) (color0 rgba) (color1 rgba) (flip-tex int)) + (rlet ((vf27 :class vf)) + (set-vector! + (-> *boundary-polygon* 0 col) + (the float (-> color0 r)) + (the float (-> color0 g)) + (the float (-> color0 b)) + (the float (-> color0 a)) + ) + (set-vector! + (-> *boundary-polygon* 1 col) + (the float (-> color1 r)) + (the float (-> color1 g)) + (the float (-> color1 b)) + (the float (-> color1 a)) + ) + (init-boundary-regs) + (.lvf vf27 (&-> *sky-work* giftag-roof quad)) + (let ((s3-0 0) + (s2-1 (if (nonzero? flip-tex) + (new 'static 'matrix :vector (new 'static 'inline-array vector 4 + (new 'static 'vector :x 1.0 :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :z 1.0 :w 1.0) + (new 'static 'vector :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :z 1.0 :w 1.0) + ) + ) + (new 'static 'matrix :vector (new 'static 'inline-array vector 4 + (new 'static 'vector :z 1.0 :w 1.0) + (new 'static 'vector :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :y 8.0 :z 1.0 :w 1.0) + ) + ) + ) + ) + ) + (while (< s3-0 (+ num-pts -2)) + (cond + ((not (logtest? s3-0 1)) + (dotimes (v1-6 3) + (set! (-> *boundary-polygon* v1-6 pos quad) (-> pts (+ s3-0 v1-6) quad)) + (set! (-> *boundary-polygon* v1-6 stq quad) (-> s2-1 vector (+ s3-0 v1-6) quad)) + ) + ) + (else + (set! (-> *boundary-polygon* 0 pos quad) (-> pts (+ s3-0 1) quad)) + (set! (-> *boundary-polygon* 1 pos quad) (-> pts s3-0 quad)) + (set! (-> *boundary-polygon* 2 pos quad) (-> pts (+ s3-0 2) quad)) + (set! (-> *boundary-polygon* 0 stq quad) (-> s2-1 vector (+ s3-0 1) quad)) + (set! (-> *boundary-polygon* 1 stq quad) (-> s2-1 vector s3-0 quad)) + (set! (-> *boundary-polygon* 2 stq quad) (-> s2-1 vector (+ s3-0 2) quad)) + ) + ) + (render-boundary-tri (-> *boundary-polygon* 0) buf) + (+! s3-0 1) + ) + ) + (none) + ) + ) ;; definition (debug) for function add-debug-bound ;; INFO: Used lq/sq -;; ERROR: failed type prop at 82: Called a function, but we do not know its type ;; WARN: Return type mismatch int vs none. -(defun-debug add-debug-bound ((a0-0 int) (a1-0 transform) (a2-0 int) (a3-0 rgba) (t0-0 rgba) (t1-0 int)) - (local-vars - (v0-0 int) - (v0-1 none) - (v0-2 none) - (v0-3 none) - (v0-4 none) - (v0-5 none) - (v1-2 int) - (v1-4 display) - (v1-5 clock) - (v1-6 uint) - (v1-7 uint) - (v1-8 int) - (v1-9 int) - (v1-10 int) - (v1-11 display) - (v1-12 int) - (v1-13 int) - (v1-14 int) - (v1-15 display-frame) - (v1-16 dma-buffer) - (v1-17 dma-buffer) - (v1-18 dma-buffer) - (v1-19 pointer) - (v1-20 pointer) - (v1-21 pointer) - (v1-22 none) - (v1-23 none) - (v1-24 none) - (v1-25 none) - (v1-26 none) - (v1-27 none) - (v1-28 none) - (v1-29 none) - (v1-30 none) - (v1-31 none) - (v1-32 none) - (v1-33 none) - (v1-34 none) - (v1-35 none) - (a0-1 int) - (a0-2 display) - (a0-3 pointer) - (a0-4 pointer) - (a0-5 pointer) - (a0-6 pointer) - (a0-7 pointer) - (a0-8 pointer) - (a0-9 int) - (a0-12 none) - (a0-13 none) - (a0-14 none) - (a0-15 none) - (a0-16 none) - (a0-17 none) - (a0-18 none) - (a0-19 none) - (a0-20 none) - (a0-21 none) - (a1-1 int) - (a1-2 int) - (a1-3 uint) - (a1-4 uint) - (a1-5 uint) - (a1-6 int) - (a1-7 int) - (a1-8 int) - (a1-9 int) - (a1-10 int) - (a1-11 int) - (a1-12 dma-buffer) - (a1-14 none) - (a1-15 none) - (a1-16 none) - (a3-2 none) - (t1-1 int) - (s4-0 dma-buffer) - (s5-0 pointer) - (t9-0 (function texture-id dma-buffer none)) - (t9-1 function) - (t9-2 none) - (t9-3 none) - (sv-16 pointer) - (sv-32 int) - ) - (if (begin (set! sv-32 t1-0) (<.si a2-0 3)) - (return (set! v0-0 0)) +;; WARN: Function add-debug-bound has a return type of none, but the expression builder found a return statement. +(defun-debug add-debug-bound ((buf bucket-id) (pts (inline-array vector)) (c0 int) (c1 rgba) (flash rgba) (arg5 int)) + (local-vars (sv-16 pointer) (sv-32 int)) + (set! sv-32 arg5) + (if (< c0 3) + (return 0) ) - (when (begin (set! v1-2 sv-32) (set! a0-1 1) (= v1-2 a0-1)) - (cond - ((begin - (set! v1-4 *display*) - (set! v1-5 (-> v1-4 real-frame-clock)) - (set! v1-6 (-> v1-5 integral-frame-counter)) - (set! v1-7 (logand v1-6 4)) - (nonzero? v1-7) + (case sv-32 + ((1) + (if (logtest? (-> *display* real-frame-clock integral-frame-counter) 4) + (set! sv-32 1) + (set! sv-32 0) ) - (set! v1-8 1) - (set! sv-32 v1-8) - ) - (else - (set! v1-9 0) - (set! sv-32 v1-9) + sv-32 + ) + ) + (let* ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf)) + (s5-0 (-> s4-0 base)) + ) + (let* ((v1-16 s4-0) + (a0-3 (the-as dma-packet (-> v1-16 base))) + ) + (set! (-> a0-3 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt))) + (set! (-> a0-3 vif0) (new 'static 'vif-tag)) + (set! (-> a0-3 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1)) + (set! (-> v1-16 base) (the-as pointer (the-as dma-packet (&+ a0-3 16)))) + ) + (let* ((v1-17 s4-0) + (a0-5 (the-as gs-gif-tag (-> v1-17 base))) + ) + (set! (-> a0-5 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3)) + (set! (-> a0-5 regs) GIF_REGS_ALL_AD) + (set! (-> v1-17 base) (the-as pointer (the-as gs-gif-tag (&+ a0-5 16)))) + ) + (let* ((v1-18 s4-0) + (a0-7 (-> v1-18 base)) + ) + (set! (-> (the-as (pointer gs-zbuf) a0-7) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24))) + (set! (-> (the-as (pointer gs-reg64) a0-7) 1) (gs-reg64 zbuf-1)) + (set! (-> (the-as (pointer gs-test) a0-7) 2) (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + ) + (set! (-> (the-as (pointer gs-reg64) a0-7) 3) (gs-reg64 test-1)) + (set! (-> (the-as (pointer gs-alpha) a0-7) 4) (new 'static 'gs-alpha :b #x1 :d #x1)) + (set! (-> (the-as (pointer gs-reg64) a0-7) 5) (gs-reg64 alpha-1)) + (set! (-> v1-18 base) (&+ a0-7 48)) + ) + (set! sv-16 (-> s4-0 base)) + (&+! (-> s4-0 base) 16) + (add-boundary-shader (new 'static 'texture-id :index #x3 :page #x70c) s4-0) + (add-debug-bound-internal s4-0 pts c0 c1 flash sv-32) + (close-sky-buffer s4-0) + (let ((v1-25 (/ (the-as int (+ (- -16 (the-as int sv-16)) (the-as int (-> s4-0 base)))) 16))) + (set! (-> (the-as dma-packet sv-16) dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc v1-25)) + (set! (-> (the-as dma-packet sv-16) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet sv-16) vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1 :imm v1-25)) + ) + (let ((a3-2 (-> s4-0 base))) + (let ((v1-29 (the-as dma-packet (-> s4-0 base)))) + (set! (-> v1-29 dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> v1-29 vif0) (new 'static 'vif-tag)) + (set! (-> v1-29 vif1) (new 'static 'vif-tag)) + (set! (-> s4-0 base) (the-as pointer (the-as dma-packet (&+ v1-29 16)))) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) bucket-group) + buf + s5-0 + (the-as (pointer dma-tag) a3-2) ) ) - (set! v1-10 sv-32) ) - (set! v1-11 *display*) - (set! v1-12 (-> v1-11 on-screen)) - (set! v1-13 (sll v1-12 2)) - (set! a0-2 *display*) - (set! v1-14 (+ v1-13 a0-2)) - (set! v1-15 (dynamic-array-field-access v1-14 frames PLACEHOLDER)) - (set! s4-0 (-> v1-15 global-buf)) - (set! s5-0 (-> s4-0 base)) - (set! v1-16 s4-0) - (set! a0-3 (-> v1-16 base)) - (set! a1-1 #x10000004) - (set! (the-as (pointer int64) (-> (the-as (pointer int64) a0-3))) a1-1) - (s.w! (+ a0-3 8) 0) - (set! a1-2 #x50000004) - (s.w! (+ a0-3 12) a1-2) - (set! a0-4 (+ a0-3 16)) - (set! (-> v1-16 base) a0-4) - (set! v1-17 s4-0) - (set! a0-5 (-> v1-17 base)) - (set! a1-3 (the-as uint #x3000000000008001)) - (set! a1-4 (pcypld 0 a1-3)) - (set! (the-as (pointer uint64) (-> (the-as (pointer uint64) a0-5))) a1-4) - (set! a1-5 (the-as uint #xeeeeeeeeeeeeeeee)) - (s.d! (+ a0-5 8) a1-5) - (set! a0-6 (+ a0-5 16)) - (set! (-> v1-17 base) a0-6) - (set! v1-18 s4-0) - (set! a0-7 (-> v1-18 base)) - (set! a1-6 #x1000130) - (set! (the-as (pointer int64) (-> (the-as (pointer int64) a0-7))) a1-6) - (set! a1-7 78) - (s.d! (+ a0-7 8) a1-7) - (set! a1-8 #x5026b) - (s.d! (+ a0-7 16) a1-8) - (set! a1-9 71) - (s.d! (+ a0-7 24) a1-9) - (set! a1-10 68) - (s.d! (+ a0-7 32) a1-10) - (set! a1-11 66) - (s.d! (+ a0-7 40) a1-11) - (set! a0-8 (+ a0-7 48)) - (set! (-> v1-18 base) a0-8) - (set! v1-19 (-> s4-0 base)) - (set! sv-16 v1-19) - (set! v1-20 (-> s4-0 base)) - (set! v1-21 (+ v1-20 16)) - (set! (-> s4-0 base) v1-21) - (set! t9-0 add-boundary-shader) - (set! a0-9 #x70c00300) - (set! a1-12 s4-0) - (call! a0-9 a1-12) - (set! t9-1 add-debug-bound-internal) - (set! a0-10 s4-0) - (set! a1-13 a1-0) - (set! a2-1 a2-0) - (set! a3-1 a3-0) - (set! t0-1 t0-0) - (set! t1-1 sv-32) - (call!) - (set! t9-2 (the-as none close-sky-buffer)) - (set! a0-11 (the-as none s4-0)) - (call!) - (set! v1-22 (the-as none -16)) - (set! a0-12 (the-as none sv-16)) - (set! v1-23 (the-as none (- v1-22 a0-12))) - (set! a0-13 (the-as none (-> s4-0 base))) - (set! v1-24 (the-as none (+ v1-23 a0-13))) - (set! v1-25 (the-as none (sra v1-24 4))) - (set! a0-14 (the-as none #x10000000)) - (set! a1-14 (the-as none (sll v1-25 48))) - (set! a1-15 (the-as none (srl a1-14 48))) - (set! a0-15 (the-as none (logior a0-14 a1-15))) - (set! a1-16 (the-as none sv-16)) - (s.d! a1-16 a0-15) - (set! a0-16 (the-as none sv-16)) - (s.w! (+ a0-16 8) 0) - (set! a0-17 (the-as none #x50000000)) - (set! v1-26 (the-as none (sll v1-25 48))) - (set! v1-27 (the-as none (srl v1-26 48))) - (set! a0-18 (the-as none (logior a0-17 v1-27))) - (set! v1-28 (the-as none sv-16)) - (s.w! (+ v1-28 12) a0-18) - (set! a3-2 (the-as none (-> s4-0 base))) - (set! v1-29 (the-as none (-> s4-0 base))) - (set! a0-19 (the-as none #x20000000)) - (s.d! v1-29 a0-19) - (s.w! (+ v1-29 8) 0) - (s.w! (+ v1-29 12) 0) - (set! v1-30 (the-as none (+ v1-29 16))) - (set! (-> s4-0 base) (the-as pointer v1-30)) - (set! t9-3 (the-as none dma-bucket-insert-tag)) - (set! v1-31 (the-as none *display*)) - (set! v1-32 (the-as none (l.w v1-31))) - (set! v1-33 (the-as none (sll v1-32 2))) - (set! a0-20 (the-as none *display*)) - (set! v1-34 (the-as none (+ v1-33 a0-20))) - (set! v1-35 (the-as none (l.wu (+ v1-34 8)))) - (set! a0-21 (the-as none (l.wu (+ v1-35 40)))) - (set! a1-17 (the-as none a0-0)) - (set! a2-2 (the-as none s5-0)) - (call!) - (set! v1-36 (the-as none v0-4)) - (set! v0-5 (the-as none 0)) - (ret-none) + 0 + (none) ) ;; definition (debug) for function cpu-delay diff --git a/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc b/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc index 22c47677ef..795b00eb5a 100644 --- a/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc @@ -1634,14 +1634,14 @@ ;; failed to figure out what this is: (defstate idle (editable-player) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'execute) - (let ((a2-1 (-> arg3 param 0))) + (let ((a2-1 (-> event param 0))) (case a2-1 ((28 27 35 29 31 32) (editable-array-method-13 @@ -1677,26 +1677,26 @@ (deactivate self) ) ((= v1-0 'menu) - (set! v0-0 (the-as none (+ (-> self clock frame-counter) (the-as time-frame (-> arg3 param 0))))) + (set! v0-0 (the-as none (+ (-> self clock frame-counter) (the-as time-frame (-> event param 0))))) (set! (-> self close-menu-time) (the-as time-frame v0-0)) v0-0 ) ((or (= v1-0 'on-enter) (= v1-0 'on-exit) (= v1-0 'on-inside)) (let ((s4-0 (-> self current region))) (when s4-0 - (let ((gp-1 (-> arg3 param 0))) + (let ((gp-1 (-> event param 0))) (set! (-> *syntax-context* got-error?) #f) (eval! *syntax-context* (the-as pair gp-1)) (when (not (-> *syntax-context* got-error?)) (set! (-> s4-0 changed) #t) (cond - ((= arg2 'on-enter) + ((= event-type 'on-enter) (set! (-> s4-0 on-enter) (the-as string gp-1)) ) - ((= arg2 'on-inside) + ((= event-type 'on-inside) (set! (-> s4-0 on-inside) (the-as string gp-1)) ) - ((= arg2 'on-exit) + ((= event-type 'on-exit) (set! (-> s4-0 on-exit) (the-as string gp-1)) ) ) @@ -1709,7 +1709,7 @@ ) ) ((= v1-0 'select) - (let ((gp-2 (-> arg3 param 0))) + (let ((gp-2 (-> event param 0))) (editable-array-method-9 (-> self current) (editable-command select-none) (the-as editable-array #f)) (let* ((s5-1 (-> self current length)) (s4-1 0) @@ -1747,7 +1747,7 @@ ) ) (when v1-60 - (set! (-> v1-60 name) (the-as string (-> arg3 param 0))) + (set! (-> v1-60 name) (the-as string (-> event param 0))) (logior! (-> v1-60 flags) (editable-flag changed)) (let ((v1-61 (-> v1-60 region))) (if v1-61 @@ -1764,7 +1764,7 @@ #f ) ((= v1-0 'level) - (let ((gp-3 (lookup-level-info (the-as symbol (-> arg3 param 0))))) + (let ((gp-3 (lookup-level-info (the-as symbol (-> event param 0))))) (when (-> gp-3 dbname) (let* ((s5-3 (-> self current length)) (s4-3 0) @@ -1795,10 +1795,10 @@ (-> self current level) ) ((= v1-0 'direction) - (let* ((f30-0 (the-as float (-> arg3 param 0))) - (f28-0 (the-as float (-> arg3 param 1))) - (f26-0 (the-as float (-> arg3 param 2))) - (f24-0 (if (and (zero? (-> arg3 param 0)) (zero? (-> arg3 param 1)) (zero? (-> arg3 param 2))) + (let* ((f30-0 (the-as float (-> event param 0))) + (f28-0 (the-as float (-> event param 1))) + (f26-0 (the-as float (-> event param 2))) + (f24-0 (if (and (zero? (-> event param 0)) (zero? (-> event param 1)) (zero? (-> event param 2))) 0.0 1.0 ) @@ -1833,10 +1833,10 @@ #f ) ((= v1-0 'color) - (let* ((f30-1 (the-as float (-> arg3 param 0))) - (f28-1 (the-as float (-> arg3 param 1))) - (f26-1 (the-as float (-> arg3 param 2))) - (f24-1 (the-as float (-> arg3 param 3))) + (let* ((f30-1 (the-as float (-> event param 0))) + (f28-1 (the-as float (-> event param 1))) + (f26-1 (the-as float (-> event param 2))) + (f24-1 (the-as float (-> event param 3))) (gp-5 (-> self current length)) (s5-5 0) (s4-5 (-> self current data s5-5)) @@ -1866,8 +1866,8 @@ #f ) ((= v1-0 'param) - (let ((s5-6 (-> arg3 param 0)) - (f30-2 (the-as float (-> arg3 param 1))) + (let ((s5-6 (-> event param 0)) + (f30-2 (the-as float (-> event param 1))) ) (when (and (>= (the-as int s5-6) 0) (>= 2 (the-as int s5-6))) (let* ((gp-6 (-> self current length)) @@ -2663,7 +2663,7 @@ (dotimes (gp-1 (-> *level* length)) (let ((v1-14 (-> *level* level gp-1))) (when (= (-> v1-14 status) 'active) - (if (zero? (logand *fix-visible-level-mask* (ash 1 (-> v1-14 index)))) + (if (not (logtest? *fix-visible-level-mask* (ash 1 (-> v1-14 index)))) (insert-sample-camera (-> v1-14 name)) ) ) diff --git a/test/decompiler/reference/jak2/engine/debug/editable_REF.gc b/test/decompiler/reference/jak2/engine/debug/editable_REF.gc index 39a6859d12..07e0a7b6b9 100644 --- a/test/decompiler/reference/jak2/engine/debug/editable_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/editable_REF.gc @@ -1416,14 +1416,14 @@ ) ) (add-debug-bound - 324 - (the-as transform gp-0) + (bucket-id debug2) + gp-0 sv-112 (if (logtest? (-> obj flags) (editable-flag orient)) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) - (if (zero? (logand (-> obj flags) (editable-flag orient))) + (if (not (logtest? (-> obj flags) (editable-flag orient))) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) @@ -1778,14 +1778,14 @@ (the-as rgba -1) ) (add-debug-bound - 324 - (the-as transform gp-0) + (bucket-id debug2) + (the-as (inline-array vector) gp-0) s4-0 (if (logtest? (-> obj flags) (editable-flag orient)) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) - (if (zero? (logand (-> obj flags) (editable-flag orient))) + (if (not (logtest? (-> obj flags) (editable-flag orient))) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) diff --git a/test/decompiler/reference/jak2/engine/debug/menu_REF.gc b/test/decompiler/reference/jak2/engine/debug/menu_REF.gc index 68b5c94dcf..674af1d75f 100644 --- a/test/decompiler/reference/jak2/engine/debug/menu_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/menu_REF.gc @@ -1450,7 +1450,7 @@ ;; definition for function debug-menu-item-var-joypad-handler (defun debug-menu-item-var-joypad-handler ((arg0 debug-menu-item-var) (arg1 debug-menu-msg)) (cond - ((zero? (logand (-> *cpad-list* cpads arg1 button0-abs 0) (pad-buttons x))) + ((not (cpad-hold? arg1 x)) (let ((a0-2 (-> arg0 parent context))) (debug-menu-context-release-joypad a0-2) ) diff --git a/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc b/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc index ef0b0cbbed..88fd7e70b2 100644 --- a/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc @@ -1194,9 +1194,9 @@ ) (countdown (v1-7 (-> obj edge-array length)) (let ((a1-17 (the-as mysql-nav-edge (+ (+ (* 80 v1-7) 12) (the-as int (-> obj edge-array)))))) - (when (zero? (logand (-> a1-17 mysql-save-flag) (mysql-save-flag delete))) + (when (not (logtest? (-> a1-17 mysql-save-flag) (mysql-save-flag delete))) (let ((a2-8 (-> obj node-array data (-> a1-17 runtime-node-id-1)))) - (when (zero? (logand (-> a2-8 mysql-save-flag) (mysql-save-flag delete))) + (when (not (logtest? (-> a2-8 mysql-save-flag) (mysql-save-flag delete))) (cond ((-> a2-8 temp-edge-list) (set! (-> a1-17 temp-next-edge) (the-as mysql-nav-edge (-> a2-8 temp-edge-list))) @@ -1235,13 +1235,13 @@ ) (dotimes (s5-0 (-> obj node-array length)) (let ((s4-0 (-> obj node-array data s5-0))) - (when (zero? (logand (-> s4-0 mysql-save-flag) (mysql-save-flag delete))) + (when (not (logtest? (-> s4-0 mysql-save-flag) (mysql-save-flag delete))) (let ((v1-10 (lookup-level-info2 obj s4-0 #t))) (set! (-> s4-0 level-node-index) (-> v1-10 node-count)) (+! (-> v1-10 node-count) 1) (let ((a0-10 (the-as mysql-nav-edge (-> s4-0 temp-edge-list)))) (while a0-10 - (when (zero? (logand (-> a0-10 mysql-save-flag) (mysql-save-flag delete))) + (when (not (logtest? (-> a0-10 mysql-save-flag) (mysql-save-flag delete))) (if (!= (-> v1-10 level) (-> obj node-array data (-> a0-10 runtime-node-id-2) level_name)) (+! (-> v1-10 to-link-count) 1) ) diff --git a/test/decompiler/reference/jak2/engine/debug/sampler_REF.gc b/test/decompiler/reference/jak2/engine/debug/sampler_REF.gc new file mode 100644 index 0000000000..ad5fa79290 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/debug/sampler_REF.gc @@ -0,0 +1,61 @@ +;;-*-Lisp-*- +(in-package goal) + +;; this file is debug only +(declare-file (debug)) +(when *debug-segment* +;; definition for symbol *sampler-mem*, type pointer +(define *sampler-mem* "A pointer to where the sampled data should be stored" (the-as pointer #f)) + +;; definition for symbol *sampler-compare*, type uint +(define *sampler-compare* + "The value used to set the EE register's `Timer 0 Compare Value`. Always `1`" + (the-as uint 1) + ) + +;; definition for symbol *sampler-count*, type int +(define *sampler-count* "Incremented everytime a metric is sampled + @see [[timer0-handler]]" 0) + +;; definition (debug) for function timer0-handler +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; failed to figure out what this is: +(set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode)) + +;; failed to figure out what this is: +(install-handler 9 timer0-handler) + +;; definition (debug) for function sampler-start +;; WARN: Return type mismatch int vs none. +(defun-debug sampler-start () + "Reset the [[timer-bank]] EE registers. + - If [[*sampler-mem*]] is undefined, allocate 16.7MB in the debug segment + - and when [[*sampler-mem*]] is defined, initialize the [[timer-bank]] fully. Reset [[*sampler-count*]] to 0 as well" + (set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode)) + (set! (-> (the-as timer-bank #x10000000) count) (the-as uint 0)) + (set! (-> (the-as timer-bank #x10000000) comp) *sampler-compare*) + (if (not *sampler-mem*) + (set! *sampler-mem* (malloc 'debug #x1000000)) + ) + (when (nonzero? *sampler-mem*) + (mem-set32! *sampler-mem* #x400000 0) + (set! (-> (the-as timer-bank #x10000000) mode) + (new 'static 'timer-mode :clks (timer-clock-selection busclk/256) :zret #x1 :cue #x1 :cmpe #x1 :equf #x1) + ) + (set! *sampler-count* 0) + 0 + ) + (none) + ) + +;; definition (debug) for function sampler-stop +;; WARN: Return type mismatch int vs none. +(defun-debug sampler-stop () + "Sets the [[timer-bank]] mode EE register to 0" + (set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode)) + 0 + (none) + ) + +) diff --git a/test/decompiler/reference/jak2/engine/draw/drawable-tree_REF.gc b/test/decompiler/reference/jak2/engine/draw/drawable-tree_REF.gc index 2ae38a813c..741d1f8a73 100644 --- a/test/decompiler/reference/jak2/engine/draw/drawable-tree_REF.gc +++ b/test/decompiler/reference/jak2/engine/draw/drawable-tree_REF.gc @@ -70,7 +70,7 @@ (set! t1-6 (&-> t1-6 1)) (let ((t4-0 128)) (label cfg-7) - (b! (zero? (logand t3-0 t4-0)) cfg-9 :delay (set! t5-1 (the-as uint (-> arg1 0)))) + (b! (not (logtest? t3-0 t4-0)) cfg-9 :delay (set! t5-1 (the-as uint (-> arg1 0)))) (set! arg1 (&-> arg1 1)) (set! (-> (the-as (pointer int8) t2-3) 0) (the-as int t5-1)) (label cfg-9) diff --git a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc index dc688dbcba..3fbac882c0 100644 --- a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc @@ -465,7 +465,7 @@ ) (let ((s5-1 format) (s4-0 "~C~C~C") - (a2-0 (if (and arg0 (zero? (logand (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) + (a2-0 (if (and arg0 (not (logtest? (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) 114 32 ) @@ -2170,7 +2170,7 @@ ) ) ) - (when (zero? (logand (-> obj status) (entity-perm-status bit-5))) + (when (not (logtest? (-> obj status) (entity-perm-status bit-5))) (set! (-> obj user-uint64) (the-as uint 0)) 0 ) @@ -2231,7 +2231,7 @@ ) ) (let ((s5-1 (lambda ((arg0 process)) - (if (zero? (logand (-> arg0 mask) (process-mask no-kill))) + (if (not (logtest? (-> arg0 mask) (process-mask no-kill))) (deactivate arg0) ) (none) @@ -2286,7 +2286,7 @@ ;; definition for method 12 of type process-drawable (defmethod run-logic? process-drawable ((obj process-drawable)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root pause-adjust-distance)) (vector-vector-distance (-> obj root trans) (math-camera-pos)) ) @@ -2298,7 +2298,7 @@ ;; definition for method 9 of type entity-links (defmethod birth? entity-links ((obj entity-links) (arg0 vector)) - (and (zero? (logand (-> obj perm status) (entity-perm-status bit-0 dead))) + (and (not (logtest? (-> obj perm status) (entity-perm-status bit-0 dead))) (< (vector-vector-distance (-> obj trans) arg0) (-> *ACTOR-bank* birth-dist)) ) ) @@ -2386,7 +2386,7 @@ ) (else (if (and (-> v1-54 process) - (zero? (logand (-> v1-54 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> v1-54 perm status) (entity-perm-status no-kill))) (zero? (logand (-> v1-54 process mask) (process-mask no-kill))) ) (kill! (-> v1-54 entity)) @@ -2404,7 +2404,7 @@ (dotimes (s2-1 s3-2) (let ((v1-67 (-> s4-3 data s2-1))) (cond - ((zero? (logand (-> v1-67 kill-mask) sv-32)) + ((not (logtest? (-> v1-67 kill-mask) sv-32)) (when (not (or (-> v1-67 process) (logtest? (-> v1-67 perm status) (entity-perm-status bit-0 dead)))) (birth! (-> v1-67 entity)) (set! sv-24 (+ sv-24 1)) @@ -2415,7 +2415,7 @@ ) (else (if (and (-> v1-67 process) - (zero? (logand (-> v1-67 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> v1-67 perm status) (entity-perm-status no-kill))) (zero? (logand (-> v1-67 process mask) (process-mask no-kill))) ) (kill! (-> v1-67 entity)) @@ -2434,7 +2434,7 @@ (let ((s1-0 (-> s4-4 data s2-2))) (cond ((and (< (vector-vector-distance (-> s1-0 trans) sv-16) (-> *ACTOR-bank* birth-dist)) - (zero? (logand (-> s1-0 perm status) (entity-perm-status bit-9 bit-10))) + (not (logtest? (-> s1-0 perm status) (entity-perm-status bit-9 bit-10))) (zero? (logand (-> s1-0 kill-mask) sv-32)) ) (when (not (or (-> s1-0 process) (logtest? (-> s1-0 perm status) (entity-perm-status bit-0 dead)))) @@ -2447,7 +2447,7 @@ ) (else (if (and (-> s1-0 process) - (zero? (logand (-> s1-0 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> s1-0 perm status) (entity-perm-status no-kill))) (zero? (logand (-> s1-0 process mask) (process-mask no-kill))) ) (kill! (-> s1-0 entity)) @@ -2468,8 +2468,8 @@ (set! sv-48 (-> s3-4 data s1-1)) (cond ((and (is-object-visible? s4-1 (-> sv-48 vis-id)) - (zero? (logand (-> sv-48 perm status) (entity-perm-status bit-9 bit-10))) - (zero? (logand (-> sv-48 kill-mask) sv-32)) + (not (logtest? (-> sv-48 perm status) (entity-perm-status bit-9 bit-10))) + (not (logtest? (-> sv-48 kill-mask) sv-32)) (or (-> s4-1 vis-info 0) (< (vector-vector-distance (-> sv-48 trans) sv-16) (-> sv-48 vis-dist))) ) (when (not (or (-> sv-48 process) (logtest? (-> sv-48 perm status) (entity-perm-status bit-0 dead)) s0-0)) @@ -2492,7 +2492,7 @@ ) (else (when (and (-> sv-48 process) - (zero? (logand (-> sv-48 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> sv-48 perm status) (entity-perm-status no-kill))) (zero? (logand (-> sv-48 process mask) (process-mask no-kill))) ) (kill! (-> sv-48 entity)) @@ -2566,21 +2566,23 @@ ) ;; definition for function process-entity-status! +;; WARN: Return type mismatch int vs entity-perm-status. (defun process-entity-status! ((arg0 process) (arg1 entity-perm-status) (arg2 symbol)) - (cond - ((and (-> arg0 entity) arg0 (= arg0 (-> arg0 entity extra process))) - (let ((v1-6 (-> arg0 entity extra))) - (if arg2 - (logior! (-> v1-6 perm status) arg1) - (logclear! (-> v1-6 perm status) arg1) - ) - (the-as int (-> v1-6 perm status)) - ) - ) - (else - 0 - ) - ) + (the-as entity-perm-status (cond + ((and (-> arg0 entity) arg0 (= arg0 (-> arg0 entity extra process))) + (let ((v1-6 (-> arg0 entity extra))) + (if arg2 + (logior! (-> v1-6 perm status) arg1) + (logclear! (-> v1-6 perm status) arg1) + ) + (the-as int (-> v1-6 perm status)) + ) + ) + (else + 0 + ) + ) + ) ) ;; definition for function find-nearest-entity @@ -2625,7 +2627,6 @@ ) ;; definition (debug) for function entity-speed-test -;; WARN: Return type mismatch entity vs none. ;; ERROR: Unsupported inline assembly instruction kind - [mtc0 Count, r0] ;; ERROR: Unsupported inline assembly instruction kind - [sync.p] ;; ERROR: Unsupported inline assembly instruction kind - [mfc0 s4, Count] @@ -2646,7 +2647,6 @@ (kill! gp-0) ) ) - (none) ) ;; definition (debug) for function dump-entity-remap diff --git a/test/decompiler/reference/jak2/engine/entity/relocate_REF.gc b/test/decompiler/reference/jak2/engine/entity/relocate_REF.gc index 4bfd5f3d6d..8397133d40 100644 --- a/test/decompiler/reference/jak2/engine/entity/relocate_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/relocate_REF.gc @@ -27,8 +27,10 @@ ) ) (let ((a0-19 (-> (the-as connection v1-7) param1))) - (if (and (>= a0-19 (-> *kernel-context* relocating-min)) (< a0-19 (-> *kernel-context* relocating-max))) - (+! (-> (the-as connection v1-7) param1) arg0) + (if (and (>= (the-as int a0-19) (-> *kernel-context* relocating-min)) + (< (the-as int a0-19) (-> *kernel-context* relocating-max)) + ) + (&+! (-> (the-as connection v1-7) param1) arg0) ) ) (let ((a0-24 (-> (the-as connection v1-7) param2))) diff --git a/test/decompiler/reference/jak2/engine/game/game-info_REF.gc b/test/decompiler/reference/jak2/engine/game/game-info_REF.gc index b0c9095f1f..2f8f3f6397 100644 --- a/test/decompiler/reference/jak2/engine/game/game-info_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/game-info_REF.gc @@ -1276,7 +1276,7 @@ (let ((conts (-> (the-as level-load-info (-> (the-as symbol (car levels)) value)) continues))) (while (not (null? conts)) (let ((cont (the-as continue-point (car conts)))) - (if (zero? (logand (-> cont flags) (continue-flags cf2))) + (if (not (logtest? (-> cont flags) (continue-flags cf2))) (format #t "~S~%" (-> cont name)) ) ) diff --git a/test/decompiler/reference/jak2/engine/game/settings_REF.gc b/test/decompiler/reference/jak2/engine/game/settings_REF.gc index 19a034924f..97d49e373a 100644 --- a/test/decompiler/reference/jak2/engine/game/settings_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/settings_REF.gc @@ -28,7 +28,7 @@ (let ((s1-0 (-> (the-as connection s3-1) param0))) (case s1-0 (('sfx-volume) - (if (or (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask progress))) + (if (or (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask progress))) (= ((method-of-type connection get-process) (the-as connection s3-1)) (ppointer->process *progress-process*)) ) (user-setting-data-method-10 @@ -497,7 +497,7 @@ (let ((s1-0 (-> (the-as connection s3-1) param0))) (case s1-0 (('sfx-volume) - (if (or (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask progress))) + (if (or (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask progress))) (= ((method-of-type connection get-process) (the-as connection s3-1)) (ppointer->process *progress-process*)) ) (cam-setting-data-method-10 diff --git a/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc b/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc index abbbaa169d..96f94f9877 100644 --- a/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc @@ -561,7 +561,7 @@ (let ((node (-> game-nodes i))) (if (and (= (-> node level) (-> cur-lev info taskname)) (!= (-> node level) 'city) - (zero? (logand (game-task-node-flag no-restart) (-> node flags))) + (not (logtest? (game-task-node-flag no-restart) (-> node flags))) (open? node) ) (set! gp-1 (the-as int (-> node task))) @@ -674,7 +674,7 @@ (dotimes (i (-> game-nodes length)) (when (nonzero? i) (let ((node (-> game-nodes i))) - (when (and (zero? (logand (-> node flags) (game-task-node-flag closed))) + (when (and (not (logtest? (-> node flags) (game-task-node-flag closed))) (begin (dotimes (a3-3 4) (when (and (nonzero? (-> node parent-node a3-3)) @@ -723,7 +723,7 @@ ;; definition for method 9 of type game-task-node-info (defmethod close! game-task-node-info ((obj game-task-node-info) (arg0 symbol)) - (when (zero? (logand (-> obj flags) (game-task-node-flag closed))) + (when (not (logtest? (-> obj flags) (game-task-node-flag closed))) (let ((task-node-close-func (lambda ((arg0 game-task-node-info)) (with-pp @@ -882,7 +882,7 @@ (let ((game-nodes (-> *game-info* sub-task-list)) (node-info obj) ) - (and (zero? (logand (-> node-info flags) (game-task-node-flag closed))) + (and (not (logtest? (-> node-info flags) (game-task-node-flag closed))) (begin (dotimes (pi 4) (let ((t0-0 (-> node-info parent-node pi))) @@ -1015,7 +1015,7 @@ ) (('try) (if (and (not (task-complete? *game-info* (-> node task))) - (or (zero? (logand (-> node flags) (game-task-node-flag save-on-life save-on-try))) + (or (not (logtest? (-> node flags) (game-task-node-flag save-on-life save-on-try))) (logtest? (-> node flags) (game-task-node-flag reset-on-try)) ) ) @@ -1467,7 +1467,7 @@ ;; definition for method 16 of type fail-mission (defmethod print-text fail-mission ((obj fail-mission)) - (when (and (zero? (logand (-> obj flags) (fail-mission-flags famflags-6))) + (when (and (not (logtest? (-> obj flags) (fail-mission-flags famflags-6))) (= (gui-control-method-17 *gui-control* (the-as sound-id (-> obj message-id))) (gui-action playing)) ) (let ((gp-0 (new @@ -1529,8 +1529,8 @@ ;; failed to figure out what this is: (defstate idle (fail-mission) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('reset) (cond ((logtest? (-> self flags) (fail-mission-flags famflags-1)) @@ -1545,7 +1545,7 @@ ) ) (('query) - (case (-> arg3 param 0) + (case (-> event param 0) (('reset) (logtest? (-> self flags) (fail-mission-flags famflags-1)) ) @@ -1612,8 +1612,8 @@ ) (logior! (-> self flags) (fail-mission-flags famflags-1)) (set! (-> self grabbed-time) (-> self clock frame-counter)) - (when (zero? (logand (-> self flags) (fail-mission-flags famflags-3))) - (when (zero? (logand (-> self flags) (fail-mission-flags famflags-5))) + (when (not (logtest? (-> self flags) (fail-mission-flags famflags-3))) + (when (not (logtest? (-> self flags) (fail-mission-flags famflags-5))) (while (< (- (-> self clock frame-counter) (-> self grabbed-time)) (seconds 1.5)) (let ((f30-0 (lerp-scale 0.0 1.0 (the float (- (-> self clock frame-counter) (-> self grabbed-time))) 0.0 450.0))) (set-filter-color! @@ -1705,14 +1705,14 @@ ;; failed to figure out what this is: (defstate resetting (fail-mission) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'reset) #t ) ((= v1-0 'query) - (case (-> arg3 param 0) + (case (-> event param 0) (('reset) #t ) @@ -1832,7 +1832,7 @@ (the-as (function gui-connection symbol) #f) (the-as process #f) ) - (when (zero? (logand (-> arg0 flags) (fail-mission-flags famflags-4))) + (when (not (logtest? (-> arg0 flags) (fail-mission-flags famflags-4))) (if (not (and *target* (logtest? (-> *target* focus-status) (focus-status dead)) (zero? (-> self message)))) (set! (-> self stinger) (the-as @@ -1847,7 +1847,7 @@ (set-setting! 'speech-control #f 0 0) (set! (-> self clock) (-> *display* base-clock)) (apply-settings *setting-control*) - (if (or (zero? (logand (-> self flags) (fail-mission-flags famflags-2))) + (if (or (not (logtest? (-> self flags) (fail-mission-flags famflags-2))) (nonzero? (-> self fail-message)) (= (-> self message) (fail-mission-message fammsg-1)) ) @@ -2133,7 +2133,7 @@ (with-pp (the-as symbol - (and (or (zero? (logand (-> obj node-info flags) (game-task-node-flag city-wait))) + (and (or (not (logtest? (-> obj node-info flags) (game-task-node-flag city-wait))) (let ((a0-2 (level-get-target-inside *level*))) (cond ((not (and a0-2 (logtest? (-> a0-2 info level-flags) 1))) @@ -2161,7 +2161,7 @@ :event task-manager-event-handler :trans (behavior () (if (or (and (nonzero? (-> self info final-node)) (task-node-closed? (-> self info final-node))) - (and (zero? (logand (-> self node-info flags) (game-task-node-flag closed))) + (and (not (logtest? (-> self node-info flags) (game-task-node-flag closed))) (not (open? (-> self node-info))) ) ) diff --git a/test/decompiler/reference/jak2/engine/geometry/path_REF.gc b/test/decompiler/reference/jak2/engine/geometry/path_REF.gc index 14f1f7ba66..55787d96ee 100644 --- a/test/decompiler/reference/jak2/engine/geometry/path_REF.gc +++ b/test/decompiler/reference/jak2/engine/geometry/path_REF.gc @@ -160,7 +160,7 @@ @param search-type The only recognized value is `exact` @returns the point closest to some arbitrary percentage along the path @see [[path-control::10]]" - (if (zero? (logand (-> obj flags) (path-control-flag not-found))) + (if (not (logtest? (-> obj flags) (path-control-flag not-found))) (curve-evaluate! arg0 arg1 @@ -186,7 +186,7 @@ @param idx Either the vertex index or also partially the interpolant in a LERP @param search-type The only recognized value is `exact` @returns Either a distinct vertex along the path, or some fractional point between two vertices" - (if (zero? (logand (-> obj flags) (path-control-flag not-found))) + (if (not (logtest? (-> obj flags) (path-control-flag not-found))) (curve-evaluate! arg0 (/ arg1 (the float (+ (-> obj curve num-cverts) -1))) @@ -285,7 +285,7 @@ @param idx The vertex index @param mag The magnitude to scale the resulting displacement vector by @returns The displacement [[vector]] between two points in the path, the last 2, or the [[*null-vector*]]" - (when (zero? (logand (-> obj flags) (path-control-flag not-found))) + (when (not (logtest? (-> obj flags) (path-control-flag not-found))) (let ((s4-0 (new 'stack-no-clear 'vector))) (curve-evaluate! arg0 diff --git a/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc index 0106268c33..b588e5b330 100644 --- a/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc @@ -239,30 +239,32 @@ ;; definition of type region-prim-area (deftype region-prim-area (structure) - ((region-prim-list region-prim-list :inline :offset-assert 0) - (pos vector :inline :offset-assert 1296) - (ray vector :inline :offset 1328) - (region-enter-count int32 :offset 1360) - (region-enter-list uint32 320 :offset-assert 1364) - (region-enter-prim-list uint32 320 :offset-assert 2644) - (region-exit-count int32 :offset-assert 3924) - (region-exit-list uint32 320 :offset-assert 3928) - (region-exit-prim-list uint32 320 :offset-assert 5208) - (region-inside-count int32 :offset-assert 6488) - (region-inside-list uint32 320 :offset-assert 6492) - (region-inside-prim-list uint32 320 :offset-assert 7772) - (region-start-count int32 :offset-assert 9052) - (region-start-list uint32 320 :offset-assert 9056) - (region-start-prim-list uint32 320 :offset-assert 10336) + ((region-prim-list region-prim-list :inline :offset-assert 0) + (pos vector :inline :offset-assert 1296) + (unknown-vector-uiyb1 vector :inline :offset-assert 1312) + (ray vector :inline :offset 1328) + (unknown-vector-t3edh vector :inline :offset-assert 1344) + (region-enter-count int32 :offset 1360) + (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) + (region-exit-count int32 :offset-assert 3924) + (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) + (region-inside-count int32 :offset-assert 6488) + (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) + (region-start-count int32 :offset-assert 9052) + (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 :size-assert #x2d60 :flag-assert #xd00002d60 (:methods - (region-prim-area-method-9 () none 9) - (region-prim-area-method-10 () none 10) - (region-prim-area-method-11 () none 11) - (region-prim-area-method-12 () none 12) + (track-entered-region! (_type_ drawable-region-sphere) none 9) + (track-exited-region! (_type_ drawable-region-sphere) none 10) + (track-inside-region! (_type_ drawable-region-sphere) none 11) + (track-start-region! (_type_ drawable-region-sphere) none 12) ) ) @@ -371,7 +373,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/gfx/lightning-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/lightning-h_REF.gc index 52d44f00d5..4fa37dc63b 100644 --- a/test/decompiler/reference/jak2/engine/gfx/lightning-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/lightning-h_REF.gc @@ -130,7 +130,7 @@ (new (symbol type lightning-spec process float) _type_ 0) (change-mode (_type_ lightning-mode) lightning-mode 9) (get-mode (_type_) lightning-mode 10) - (set-point (_type_ int vector) none 11) + (set-point! (_type_ int vector) none 11) (set-first-meet-point (_type_ vector) none 12) (set-last-meet-point (_type_ vector) none 13) ) @@ -177,7 +177,7 @@ ;; definition for method 11 of type lightning-control ;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. -(defmethod set-point lightning-control ((obj lightning-control) (arg0 int) (arg1 vector)) +(defmethod set-point! lightning-control ((obj lightning-control) (arg0 int) (arg1 vector)) (let ((v1-0 (-> obj state))) (when (and (-> v1-0 path) (>= arg0 0) (< arg0 (-> v1-0 path length))) (set! (-> v1-0 path data arg0 quad) (-> arg1 quad)) diff --git a/test/decompiler/reference/jak2/engine/gfx/mood/time-of-day_REF.gc b/test/decompiler/reference/jak2/engine/gfx/mood/time-of-day_REF.gc new file mode 100644 index 0000000000..1ed80206d4 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/gfx/mood/time-of-day_REF.gc @@ -0,0 +1,697 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 5 of type time-of-day-palette +;; WARN: Return type mismatch uint vs int. +(defmethod asize-of time-of-day-palette ((obj time-of-day-palette)) + (the-as int (+ (-> obj type size) (* (* (-> obj height) (-> obj width)) 4))) + ) + +;; definition for method 10 of type time-of-day-proc +(defmethod deactivate time-of-day-proc ((obj time-of-day-proc)) + (if (nonzero? (-> obj sun)) + (kill-and-free-particles (-> obj sun)) + ) + (if (nonzero? (-> obj green-sun)) + (kill-and-free-particles (-> obj green-sun)) + ) + (if (nonzero? (-> obj moon)) + (kill-and-free-particles (-> obj moon)) + ) + ((method-of-type process deactivate) obj) + (none) + ) + +;; failed to figure out what this is: +(if (zero? time-of-day-effect) + (set! time-of-day-effect nothing) + ) + +;; definition for function time-of-day-update +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defbehavior time-of-day-update time-of-day-proc () + (time-of-day-effect) + (let ((gp-0 #t)) + (dotimes (v1-0 (-> *level* length)) + (let ((a0-3 (-> *level* level v1-0))) + (when (= (-> a0-3 status) 'active) + (if (-> a0-3 info use-camera-other) + (set! gp-0 #f) + ) + ) + ) + ) + (when (and (-> *setting-control* user-current weather) gp-0) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (v1-8 (-> *math-camera* inv-camera-rot vector 2)) + ) + (set! (-> s5-0 quad) (-> *math-camera* trans quad)) + (vector-! s4-0 s5-0 (-> *math-camera* prev-trans)) + (let ((f0-1 (vector-dot s4-0 v1-8))) + (vector+float*! s5-0 s5-0 v1-8 (* 25.0 f0-1)) + ) + ) + (set! (-> s5-0 y) (-> *math-camera* trans y)) + ) + (if (< 0.0 (-> *setting-control* user-current rain)) + (update-rain (the-as target (-> *setting-control* user-current rain))) + ) + (if (< 0.0 (-> *setting-control* user-current snow)) + (update-snow (the-as target (-> *setting-control* user-current snow))) + ) + ) + (cond + ((and (>= (-> self time-of-day) 6.25) + (and (< (-> self time-of-day) 18.75) (-> *time-of-day-context* sky) gp-0) + ) + (when (and *dproc* (zero? (-> self sun-count))) + (spawn (-> self sun) (math-camera-pos)) + (+! (-> self sun-count) 1) + ) + ) + ((> (-> self sun-count) 0) + (kill-and-free-particles (-> self sun)) + (set! (-> self sun-count) 0) + 0 + ) + ) + (cond + ((and (or (>= (-> self time-of-day) 21.75) (>= 10.25 (-> self time-of-day))) + (-> *time-of-day-context* sky) + gp-0 + ) + (when (and *dproc* (zero? (-> self green-sun-count))) + (spawn (-> self green-sun) (math-camera-pos)) + (+! (-> self green-sun-count) 1) + ) + ) + ((> (-> self green-sun-count) 0) + (kill-and-free-particles (-> self green-sun)) + (set! (-> self green-sun-count) 0) + 0 + ) + ) + (set! gp-0 (and (or (>= 7.0 (-> self time-of-day)) (>= (-> self time-of-day) 17.0)) + (and (-> *time-of-day-context* sky) gp-0) + ) + ) + (cond + (gp-0 + (when (and *dproc* (zero? (-> self moon-count))) + (spawn (-> self moon) (math-camera-pos)) + (+! (-> self moon-count) 1) + ) + ) + ((> (-> self moon-count) 0) + (kill-and-free-particles (-> self moon)) + (set! (-> self moon-count) 0) + 0 + ) + ) + ) + (update-time-and-speed *sky-work* (-> self time-of-day) (-> self time-ratio)) + 0 + (none) + ) + +;; definition for function update-counters +(defbehavior update-counters time-of-day-proc () + (let ((v1-2 (-> *display* bg-clock frame-counter))) + 0 + (let ((v1-3 (* 60 v1-2))) + (set! (-> self old-frame) (-> self current-frame)) + (set! (-> self current-frame) (the-as uint v1-3)) + (set! (-> self frames) (the-as uint v1-3)) + (set! (-> self hours) (/ v1-3 #x107ac0)) + (let ((v1-4 (- v1-3 (* #x107ac0 (-> self hours))))) + (set! (-> self minutes) (/ v1-4 #x4650)) + (let ((v1-5 (- v1-4 (* #x4650 (-> self minutes))))) + (set! (-> self seconds) (/ v1-5 300)) + (- v1-5 (* 300 (-> self seconds))) + ) + ) + ) + ) + (let ((f0-1 (* 0.0000009259259 (the float (mod (the-as int (-> self frames)) #x18b8200))))) + (set! (-> self time-of-day) f0-1) + (set! (-> *time-of-day-context* time) f0-1) + f0-1 + ) + ) + +;; failed to figure out what this is: +(defstate time-of-day-tick (time-of-day-proc) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as + object + (cond + ((= v1-0 'change) + (case (-> event param 0) + (('ratio) + (let ((a0-5 (-> *display* bg-clock)) + (f0-0 (the-as float (-> event param 1))) + ) + (set! (-> self time-ratio) f0-0) + (set! (-> self dest-time-ratio) f0-0) + (update-rates! a0-5 f0-0) + ) + ) + (('hour) + (update-counters) + (let ((v1-7 (-> *display* bg-clock frame-counter)) + (a0-7 #x69780) + (a1-5 (/ (the int (* 1080000.0 (the float (-> event param 1)))) 60)) + ) + (set! (-> *display* bg-clock frame-counter) (+ (- v1-7 (the-as time-frame (mod v1-7 a0-7))) a0-7 a1-5)) + ) + (update-counters) + (-> self hours) + (kill-and-free-particles (-> self sun)) + (spawn (-> self sun) (math-camera-pos)) + (set! (-> self sun-count) 1) + (kill-and-free-particles (-> self green-sun)) + (spawn (-> self green-sun) (math-camera-pos)) + (set! (-> self green-sun-count) 1) + (kill-and-free-particles (-> self moon)) + (spawn (-> self moon) (math-camera-pos)) + (let ((v0-0 (the-as number 1))) + (set! (-> self moon-count) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + ((= v1-0 'ratio) + (-> self time-ratio) + ) + ((= v1-0 'day-length) + (if (= (-> self time-ratio) 0.0) + 0 + (/ 25920000.0 (-> self time-ratio)) + ) + ) + ((= v1-0 'time-frame) + (-> self frames) + ) + ((= v1-0 'time-of-day) + (-> self time-of-day) + ) + ((= v1-0 'time-of-day-norm) + (* 0.041666668 (-> self time-of-day)) + ) + ((= v1-0 'hour) + (-> self hours) + ) + ((= v1-0 'minute) + (-> self minutes) + ) + ((= v1-0 'second) + (-> self seconds) + ) + ((= v1-0 'dest-clock-ratio-set) + (set! (-> self dest-time-ratio) (the-as float (-> event param 0))) + (let ((f0-12 (-> self time-ratio)) + (f1-5 (-> self dest-time-ratio)) + (f2-1 (/ 300.0 (the float (-> event param 1)))) + ) + (set! (-> self dest-time-delta) (* (fabs (- f0-12 f1-5)) f2-1 (-> *display* real-clock seconds-per-frame))) + ) + (-> self dest-time-ratio) + ) + ) + ) + ) + ) + :code (behavior () + (until #f + (if (!= (-> self time-ratio) 0.0) + (set! (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + ) + (when (!= (-> self time-ratio) (-> self dest-time-ratio)) + (seek! (-> self time-ratio) (-> self dest-time-ratio) (-> self dest-time-delta)) + (update-rates! (-> *display* bg-clock) (-> self time-ratio)) + ) + (update-counters) + (suspend) + ) + #f + (none) + ) + :post time-of-day-update + ) + +;; definition for function init-time-of-day +(defbehavior init-time-of-day time-of-day-proc () + (stack-size-set! (-> self main-thread) 128) + (set! (-> self hours) 0) + (set! (-> self minutes) 0) + (set! (-> self seconds) 0) + (set! (-> self frames) (the-as uint 0)) + (set! (-> self time-of-day) 0.0) + (cond + (*time-of-day-fast* + (set! (-> self time-ratio) 60.0) + (set! (-> self dest-time-ratio) 60.0) + ) + (else + (set! (-> self time-ratio) 1.0) + (set! (-> self dest-time-ratio) 1.0) + ) + ) + (update-rates! (-> *display* bg-clock) (-> self time-ratio)) + (set! (-> self sun) (create-launch-control (-> *part-group-id-table* 3) self)) + (set! (-> self green-sun) (create-launch-control (-> *part-group-id-table* 4) self)) + (set! (-> self moon) (create-launch-control (-> *part-group-id-table* 5) self)) + (set! (-> self event-hook) (-> time-of-day-tick event)) + (go time-of-day-tick) + ) + +;; definition for function start-time-of-day +;; WARN: Return type mismatch (pointer time-of-day-proc) vs (pointer process). +(defun start-time-of-day () + (kill-by-name "time-of-day-proc" *active-pool*) + (set! *time-of-day* (process-spawn time-of-day-proc :init init-time-of-day :to *bg-pool*)) + (the-as (pointer process) *time-of-day*) + ) + +;; definition for function time-of-day-setup +(defun time-of-day-setup ((arg0 symbol)) + (when arg0 + (when (= (-> *time-of-day* 0 time-ratio) 0.0) + (send-event (ppointer->process *time-of-day*) 'change 'ratio (if *time-of-day-fast* + #x42700000 + #x3f800000 + ) + ) + (set! (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + ) + ) + (!= (-> *time-of-day* 0 time-ratio) 0.0) + ) + +;; definition for function time-of-day-interp-colors +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function time-of-day-interp-colors-scratch +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function init-time-of-day-context +(defun init-time-of-day-context ((arg0 time-of-day-context)) + (set-vector! (-> arg0 title-light-group dir0 color) 0.82 0.82 0.82 1.0) + (set-vector! (-> arg0 title-light-group dir1 color) 2.0 2.0 2.0 1.0) + (set-vector! (-> arg0 title-light-group ambi color) 0.4 0.4 0.4 1.0) + (set! (-> arg0 title-light-group dir0 extra x) 1.0) + (set! (-> arg0 title-light-group dir1 extra x) 1.0) + (set! (-> arg0 title-light-group ambi extra x) 1.0) + (set-vector! (-> arg0 filter-color) 1.0 1.0 1.0 1.0) + (set! (-> arg0 overide-enable) #f) + (when *debug-segment* + (mem-copy! (the-as pointer *overide-mood-color-table*) (the-as pointer *no-cloud-mood-color-table*) 256) + (mem-copy! (the-as pointer *overide-mood-fog-table*) (the-as pointer *no-cloud-clear-mood-fog-table*) 384) + (dotimes (v1-8 8) + (set! (-> *overide-mood-color-table* data v1-8 lgt-color w) 1.0) + (set! (-> *overide-mood-color-table* data v1-8 amb-color w) 1.0) + (set! (-> *overide-mood-fog-table* data v1-8 fog-color w) 1.0) + (set! (-> *overide-mood-fog-table* data v1-8 fog-dists x) + (* 0.00024414062 (-> *overide-mood-fog-table* data v1-8 fog-dists x)) + ) + (set! (-> *overide-mood-fog-table* data v1-8 fog-dists y) + (* 0.00024414062 (-> *overide-mood-fog-table* data v1-8 fog-dists y)) + ) + (set-vector! (-> *time-of-day-context* times v1-8) 1.0 1.0 1.0 1.0) + ) + #f + ) + ) + +;; definition for function set-filter-color! +;; WARN: Return type mismatch int vs none. +(defun set-filter-color! ((arg0 float) (arg1 float) (arg2 float)) + (set-vector! (-> *time-of-day-context* filter-color) arg0 arg1 arg2 1.0) + 0 + (none) + ) + +;; definition for function tod-madd! +(defun tod-madd! ((arg0 vector) (arg1 vector) (arg2 vector)) + (local-vars (v0-0 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (.mov vf6 arg2) + (.lvf vf4 (&-> arg0 quad)) + (.lvf vf5 (&-> arg1 quad)) + (.mul.w.vf acc vf4 vf0) + (.add.mul.x.vf vf4 vf5 vf6 acc) + (.svf (&-> arg0 quad) vf4) + (.mov v0-0 vf4) + v0-0 + ) + ) + +;; definition for function update-environment-colors +(defun update-environment-colors ((arg0 time-of-day-context)) + (let* ((v1-0 (-> arg0 light-group)) + (s4-0 (-> v1-0 0 ambi color)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (let ((s2-0 (-> arg0 current-prt-color)) + (s3-0 (-> arg0 current-env-color)) + ) + (vector4-lerp! s5-0 (-> v1-0 0 dir0 color) (-> v1-0 0 dir1 color) (-> v1-0 0 dir1 extra x)) + (when (and (= (-> s2-0 x) 0.0) (= (-> s2-0 y) 0.0) (= (-> s2-0 z) 0.0)) + (set! (-> s2-0 x) (* 0.5 (+ (-> s4-0 x) (* 0.5 (+ (-> s4-0 x) (-> s5-0 x)))))) + (set! (-> s2-0 y) (* 0.5 (+ (-> s4-0 y) (* 0.5 (+ (-> s4-0 y) (-> s5-0 y)))))) + (set! (-> s2-0 z) (* 0.5 (+ (-> s4-0 z) (* 0.5 (+ (-> s4-0 z) (-> s5-0 z)))))) + (set! (-> s2-0 w) 1.0) + ) + (when (and (= (-> s3-0 x) 0.0) (= (-> s3-0 y) 0.0) (= (-> s3-0 z) 0.0)) + (set! (-> s3-0 x) (* 48.0 (+ (-> s5-0 x) (* 0.5 (+ (-> s4-0 x) (-> s5-0 x)))))) + (set! (-> s3-0 y) (* 48.0 (+ (-> s5-0 y) (* 0.5 (+ (-> s4-0 y) (-> s5-0 y)))))) + (set! (-> s3-0 z) (* 48.0 (+ (-> s5-0 z) (* 0.5 (+ (-> s4-0 z) (-> s5-0 z)))))) + (set! (-> s3-0 w) 128.0) + ) + ) + (let* ((f0-23 (fmax (fmax (-> s4-0 x) (-> s4-0 y)) (-> s4-0 z))) + (f2-14 (fmax (fmax (-> s5-0 x) (-> s5-0 y)) (-> s5-0 z))) + (f0-27 (fmin 0.85 (- 1.0 (/ (* 0.5 f2-14) (+ f0-23 f2-14))))) + (v0-1 (-> arg0 current-shadow-color)) + ) + (set! (-> v0-1 x) f0-27) + (set! (-> v0-1 y) f0-27) + (set! (-> v0-1 z) f0-27) + (set! (-> v0-1 w) 1.0) + v0-1 + ) + ) + ) + +;; definition for function update-time-of-day +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun update-time-of-day ((arg0 time-of-day-context)) + (with-pp + (set! (-> arg0 exterior-level) #f) + (init-weather! *mood-control*) + (update-colors-for-time *sky-work* (-> arg0 time)) + (cond + ((-> arg0 overide-enable) + (mem-copy! (the-as pointer (-> *overide-table* mood-fog-table)) (the-as pointer *overide-mood-fog-table*) 384) + (mem-copy! + (the-as pointer (-> *overide-table* mood-color-table)) + (the-as pointer *overide-mood-color-table*) + 256 + ) + (dotimes (v1-7 8) + (vector-float*! + (the-as vector (-> *overide-table* mood-fog-table data v1-7)) + (the-as vector (-> *overide-table* mood-fog-table data v1-7)) + (-> *overide-table* mood-fog-table data v1-7 fog-color w) + ) + (vector-float*! + (the-as vector (-> *overide-table* mood-color-table data v1-7)) + (the-as vector (-> *overide-table* mood-color-table data v1-7)) + (-> *overide-table* mood-color-table data v1-7 lgt-color w) + ) + (vector-float*! + (the-as vector (+ (the-as uint (-> *overide-table* mood-color-table data 0 amb-color)) (* v1-7 32))) + (the-as vector (+ (the-as uint (-> *overide-table* mood-color-table data 0 amb-color)) (* v1-7 32))) + (-> *overide-table* mood-color-table data v1-7 amb-color w) + ) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-color w) 128.0) + (set! (-> *overide-table* mood-color-table data v1-7 lgt-color w) 0.0) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-dists x) + (* 4096.0 (-> *overide-table* mood-fog-table data v1-7 fog-dists x)) + ) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-dists y) + (* 4096.0 (-> *overide-table* mood-fog-table data v1-7 fog-dists y)) + ) + ) + (let ((s5-0 (-> *level* default-level mood-context))) + (clear-mood-times s5-0) + (update-mood-exterior s5-0 *overide-table* (-> arg0 time) 6) + (update-mood-itimes s5-0) + ) + ) + (else + (let ((s5-1 *mood-control*)) + (set! (-> arg0 current-clouds cloud-min) (-> s5-1 mood-clouds cloud-min)) + (set! (-> arg0 current-clouds cloud-max) (-> s5-1 mood-clouds cloud-max)) + (let ((s4-0 (-> *level* default-level mood-context))) + (clear-mood-times s4-0) + (update-mood-exterior s4-0 s5-1 (-> arg0 time) 6) + (update-mood-itimes s4-0) + ) + ) + ) + ) + (vector-float*! (-> arg0 filter) (-> arg0 filter-color) (-> arg0 filter-color w)) + (set! (-> arg0 sky) #f) + (set! (-> arg0 use-camera-other) #f) + (set! (-> arg0 target-interp) 0.0) + (let ((f0-16 4096000.0)) + (dotimes (v1-19 (-> *level* length)) + (let ((a0-50 (-> *level* level v1-19))) + (when (= (-> a0-50 status) 'active) + (if (-> a0-50 info sky) + (set! (-> arg0 sky) #t) + ) + (if (-> a0-50 info use-camera-other) + (set! (-> arg0 use-camera-other) (the-as basic #t)) + ) + (set! f0-16 (fmin f0-16 (-> a0-50 info fog-height))) + ) + ) + ) + (set-fog-height! f0-16) + ) + (if (-> arg0 sky) + (set! (-> (&-> *level* default-level texture-anim-array 9) 0) *sky-texture-anim-array*) + (set! (-> (&-> *level* default-level texture-anim-array 9) 0) #f) + ) + (let ((s5-2 (level-get-target-inside *level*))) + (dotimes (s4-1 6) + (let ((s3-0 (-> *level* level s4-1))) + (case (-> s3-0 status) + (('active 'loaded) + (when (not (paused?)) + (cond + ((= s3-0 s5-2) + (if *teleport* + (set! (-> arg0 interp s4-1) 1.0) + (set! (-> arg0 interp s4-1) (fmin 1.0 (+ 0.0166 (-> arg0 interp s4-1)))) + ) + ) + (*teleport* + (set! (-> arg0 interp s4-1) 0.0) + ) + (else + (set! (-> arg0 interp s4-1) (fmax 0.0 (+ -0.0166 (-> arg0 interp s4-1)))) + ) + ) + ) + (let ((s2-0 (-> pp clock))) + (set! (-> pp clock) (-> *display* real-clock)) + (clear-mood-times (-> s3-0 mood-context)) + ((-> s3-0 mood-func) (-> s3-0 mood-context) (-> arg0 time) s4-1) + (when (-> arg0 overide-enable) + (let ((s1-0 (new 'stack-no-clear 'structure))) + (dotimes (s0-0 8) + (let ((a1-48 (-> s3-0 mood-context times s0-0))) + (vector-float*! (the-as vector s1-0) (-> arg0 times s0-0) (-> arg0 times s0-0 w)) + (vector4-mul! (the-as vector4 a1-48) (the-as vector4 a1-48) (the-as vector4 s1-0)) + ) + ) + ) + ) + (update-mood-itimes (-> s3-0 mood-context)) + (set! (-> pp clock) s2-0) + ) + ) + (else + (set! (-> arg0 interp s4-1) 0.0) + ) + ) + ) + ) + ) + (if (and (-> arg0 exterior-level) (!= (-> *mood-control* lightning-flash) 0.0)) + (set! (-> *display* force-sync) (the-as uint 2)) + ) + (let ((f0-27 0.0)) + (dotimes (v1-79 6) + (+! f0-27 (-> arg0 interp v1-79)) + ) + (when (!= f0-27 0.0) + (dotimes (v1-83 6) + (set! (-> arg0 interp v1-83) (/ (-> arg0 interp v1-83) f0-27)) + ) + (let ((v1-86 (-> arg0 current-fog))) + (dotimes (a0-76 103) + (set! (-> (the-as (pointer int128) (+ (* a0-76 16) (the-as int v1-86)))) 0) + ) + ) + (let ((s5-3 (-> arg0 current-fog)) + (s4-2 (-> *mood-control* range)) + ) + (set! (-> s4-2 quad) (the-as uint128 0)) + (set! (-> arg0 max-rain) 0.0) + (set! (-> arg0 fog-mult) 0.0) + (set! (-> arg0 ocean-alpha) 0.0) + (dotimes (s3-1 6) + (let ((f30-0 (-> arg0 interp s3-1)) + (s2-1 *level*) + ) + (when (!= f30-0 0.0) + (let ((a2-20 (+ (the-as uint (-> s2-1 level0 mood-context)) (* 5232 s3-1)))) + (vector4-array-madd! + (the-as (inline-array vector4) s5-3) + (the-as (inline-array vector4) s5-3) + (the-as (inline-array vector4) a2-20) + f30-0 + 103 + ) + ) + (let ((a2-21 (-> s2-1 level s3-1 info mood-range))) + (vector4-madd! (the-as vector4 s4-2) (the-as vector4 s4-2) (the-as vector4 a2-21) f30-0) + ) + (+! (-> arg0 max-rain) (* (-> s2-1 level s3-1 info max-rain) f30-0)) + (+! (-> arg0 fog-mult) (* (-> s2-1 level s3-1 info fog-mult) f30-0)) + (+! (-> arg0 ocean-alpha) (* (-> s2-1 level s3-1 info ocean-alpha) f30-0)) + ) + ) + ) + ) + (dotimes (s5-4 8) + (dotimes (s4-3 3) + (let ((v1-119 (+ (+ (* 48 s4-3) 140 (* 192 s5-4)) (the-as int arg0)))) + (vector-normalize! (the-as vector (+ v1-119 0)) 1.0) + ) + ) + ) + ) + ) + (if (and (-> arg0 overide-enable) (!= (-> *time-of-day-context* mode) 8)) + (mem-copy! + (the-as pointer (-> arg0 current-fog)) + (the-as + pointer + (-> *overide-table* + mood-fog-table + data + (the-as uint (logand (-> *time-of-day-context* mode) (time-of-day-palette-id unk0 unk1 unk2))) + ) + ) + 48 + ) + ) + (update-environment-colors arg0) + (let ((v1-134 (-> arg0 current-fog))) + (let ((a0-87 (-> v1-134 fog-color))) + (set! *fog-color* + (new 'static 'rgba :r (the int (-> a0-87 x)) :g (the int (-> a0-87 y)) :b (the int (-> a0-87 z))) + ) + (set! (-> *fog-texture-work* color) + (the-as + uint + (logior (logior (logior (shr (shl (the int (-> a0-87 z)) 56) 40) (shr (shl (the int (-> a0-87 y)) 56) 48)) + (shr (shl (the int (-> a0-87 x)) 56) 56) + ) + (shr (shl (the int (-> a0-87 x)) 56) 56) + ) + ) + ) + ) + (let ((a0-92 (-> v1-134 erase-color))) + (set! (-> arg0 erase-color) + (new 'static 'rgba :a #x80 :b (the int (-> a0-92 z)) :g (the int (-> a0-92 y)) :r (the int (-> a0-92 x))) + ) + ) + (let ((f0-58 (-> v1-134 fog-dists x)) + (f1-18 (-> v1-134 fog-dists y)) + ) + (let ((f3-0 (-> v1-134 fog-dists z)) + (f2-2 (-> v1-134 fog-dists w)) + ) + (set! (-> *math-camera* fog-start) f0-58) + (set! (-> *math-camera* fog-end) f1-18) + (set! (-> *math-camera* fog-max) f3-0) + (set! (-> *math-camera* fog-min) f2-2) + (set! (-> *fog-texture-work* alpha-near) (* 0.003921569 (the float (- 255 (the int f3-0))))) + (set! (-> *fog-texture-work* alpha-far) (* 0.003921569 (the float (- 255 (the int f2-2))))) + ) + (set! (-> *fog-texture-work* alpha-delta) + (- (-> *fog-texture-work* alpha-far) (-> *fog-texture-work* alpha-near)) + ) + (set! (-> *fog-texture-work* fog-near) f0-58) + (set! (-> *fog-texture-work* fog-far) f1-18) + (set! (-> *fog-texture-work* fog-delta) (- f1-18 f0-58)) + ) + ) + (set-cloud-minmax! (-> arg0 current-clouds cloud-min) (-> arg0 current-clouds cloud-max)) + (reset! *palette-fade-controls*) + 0 + (none) + ) + ) + +;; definition for function calc-fade-from-fog +(defun calc-fade-from-fog ((arg0 vector)) + (let* ((f0-0 (vector-vector-distance (math-camera-pos) arg0)) + (v1-1 (-> *time-of-day-context* current-fog)) + (f1-0 (-> v1-1 fog-dists x)) + (f2-0 (-> v1-1 fog-dists y)) + (f3-1 (* 0.003921569 (-> v1-1 fog-dists w))) + (f4-2 (* 0.003921569 (-> v1-1 fog-dists z))) + ) + (+ f4-2 (* (fmax 0.0 (fmin 1.0 (/ (- f0-0 f1-0) (- f2-0 f1-0)))) (- f3-1 f4-2))) + ) + ) + +;; definition for method 10 of type palette-fade-controls +;; INFO: Used lq/sq +(defmethod set-fade! palette-fade-controls ((obj palette-fade-controls) (arg0 int) (arg1 float) (arg2 float) (arg3 vector)) + (cond + ((and (>= arg0 0) (< arg0 8)) + (let ((v1-3 (-> obj control arg0))) + (when (< arg2 (-> v1-3 actor-dist)) + (if arg3 + (set! (-> v1-3 trans quad) (-> arg3 quad)) + ) + (set! (-> v1-3 fade) (fmax 0.0 (fmin 1.993 arg1))) + (set! (-> v1-3 actor-dist) arg2) + ) + ) + ) + (else + (format 0 "ERROR: Bogus palette-fade-control index!~%") + ) + ) + ) + +;; definition for method 9 of type palette-fade-controls +;; WARN: Return type mismatch int vs none. +(defmethod reset! palette-fade-controls ((obj palette-fade-controls)) + (countdown (v1-0 8) + (let ((a1-2 (-> obj control v1-0))) + (set! (-> a1-2 fade) 0.0) + (set! (-> a1-2 actor-dist) 4096000000.0) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(start-time-of-day) + + + + diff --git a/test/decompiler/reference/jak2/engine/gfx/sky/sky-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/sky/sky-h_REF.gc index 1908fa15ba..7ee1353682 100644 --- a/test/decompiler/reference/jak2/engine/gfx/sky/sky-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/sky/sky-h_REF.gc @@ -444,8 +444,8 @@ (:methods (init-sun-data! (_type_ int float float float) none 9) (init-orbit-settings! (_type_ int float float float float float float) none 10) - (sky-work-method-11 () none 11) - (sky-work-method-12 () none 12) + (update-colors-for-time (_type_ float) none 11) + (update-time-and-speed (_type_ float float) none 12) (draw (_type_) none 13) (sky-work-method-14 () none 14) (sky-work-method-15 () none 15) diff --git a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc index f42430d669..39987b36b3 100644 --- a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc @@ -273,7 +273,7 @@ (:methods (initialize (_type_ sparticle-launch-group process) none 9) (sparticle-launch-control-method-10 (_type_ vector) symbol 10) - (sparticle-launch-control-method-11 (_type_ vector) none 11) + (spawn (_type_ vector) none 11) (sparticle-launch-control-method-12 (_type_ matrix) none 12) (sparticle-launch-control-method-13 (_type_ cspace) none 13) (kill-and-free-particles (_type_) none 14) diff --git a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher_REF.gc b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher_REF.gc index 88d8921646..edd52bf81e 100644 --- a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher_REF.gc @@ -508,7 +508,7 @@ (matrix*! s5-0 s5-0 arg3) (vector3s-rotate*! (the-as vector3s (-> arg0 launchrot)) (the-as vector3s (-> arg0 launchrot)) s5-0) (vector3s-rotate*! (the-as vector3s (-> arg1 vel-sxvel)) (the-as vector3s (-> arg1 vel-sxvel)) s5-0) - (if (zero? (logand (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) + (if (not (logtest? (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) (vector3s-rotate*! (the-as vector3s (-> arg1 acc)) (the-as vector3s (-> arg1 acc)) s5-0) ) (if (logtest? (sp-cpuinfo-flag set-conerot) (-> arg1 flags)) @@ -596,7 +596,7 @@ ) (vector3s-rotate*! (the-as vector3s (-> arg0 launchrot)) (the-as vector3s (-> arg0 launchrot)) s5-0) (vector3s-rotate*! (the-as vector3s (-> arg1 vel-sxvel)) (the-as vector3s (-> arg1 vel-sxvel)) s5-0) - (if (zero? (logand (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) + (if (not (logtest? (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) (vector3s-rotate*! (the-as vector3s (-> arg1 acc)) (the-as vector3s (-> arg1 acc)) s5-0) ) ) @@ -803,7 +803,7 @@ (set! (-> arg2 next-launcher) (the-as basic 0)) (cond ((and (logtest? (-> arg2 flags) (sp-cpuinfo-flag sp-cpuinfo-flag-12)) - (zero? (logand (-> arg2 flags) (sp-cpuinfo-flag distort))) + (not (logtest? (-> arg2 flags) (sp-cpuinfo-flag distort))) (zero? (logand (-> arg2 flags) (sp-cpuinfo-flag glow))) ) (let ((f20-0 (-> arg3 r-g-b-a x)) @@ -1332,7 +1332,7 @@ ) ) ) - (sparticle-launch-control-method-11 obj (-> arg0 trans)) + (spawn obj (-> arg0 trans)) (none) ) @@ -1380,12 +1380,203 @@ ) ) ) - (sparticle-launch-control-method-11 obj (vector<-cspace! (-> obj origin trans) arg0)) + (spawn obj (vector<-cspace! (-> obj origin trans) arg0)) (none) ) ;; definition for method 11 of type sparticle-launch-control -;; ERROR: function was not converted to expressions. Cannot decompile. +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 11 sparticle-launch-control) has a return type of none, but the expression builder found a return statement. +(defmethod spawn sparticle-launch-control ((obj sparticle-launch-control) (arg0 vector)) + (with-pp + (set! (-> obj origin trans quad) (-> arg0 quad)) + (if (not (or (sparticle-launch-control-method-10 obj arg0) + (logtest? (-> obj group flags) (sp-group-flag always-draw screen-space)) + ) + ) + (return 0) + ) + (let ((s4-0 (the-as int (-> pp clock frame-counter))) + (s5-0 (-> obj last-spawn-time)) + ) + (let ((v1-10 (-> *display* real-frame-clock integral-frame-counter))) + (if (!= v1-10 (+ (-> obj last-spawn-frame) 1)) + (set! s5-0 (the-as int (- (the-as time-frame s4-0) (logand (the-as int (-> pp clock sparticle-data x)) 255)))) + ) + ) + (set! (-> obj last-spawn-frame) (the-as int (-> *display* real-frame-clock integral-frame-counter))) + (set! (-> obj last-spawn-time) s4-0) + (when (logtest? (-> obj group flags) (sp-group-flag use-local-clock)) + (set! s5-0 (-> obj local-clock)) + (+! (-> obj local-clock) (logand (the-as int (-> pp clock sparticle-data x)) 255)) + (set! s4-0 (-> obj local-clock)) + ) + (let* ((f30-0 (vector-vector-distance arg0 (math-camera-pos))) + (v1-26 1) + (a0-13 *time-of-day*) + (s3-1 (ash v1-26 (if a0-13 + (-> a0-13 0 hours) + 0 + ) + ) + ) + ) + (if (nonzero? (-> obj matrix)) + (set! f30-0 0.0) + ) + (let ((s2-1 (-> obj length))) + (b! #t cfg-95 :delay (nop!)) + (label cfg-19) + (+! s2-1 -1) + (let* ((a3-0 (-> obj data s2-1)) + (v1-33 (-> a3-0 group-item)) + (a1-4 (-> *part-id-table* (-> v1-33 launcher))) + ) + (b! + (not (and a1-4 (nonzero? a1-4) (logtest? (-> a3-0 flags) (sp-launch-state-flags launcher-active)))) + cfg-95 + :delay (empty-form) + ) + (let* ((f1-3 (if (!= (-> v1-33 falloff-to) 0.0) + (- 1.0 (/ f30-0 (-> v1-33 falloff-to))) + 1.0 + ) + ) + (f0-5 f1-3) + ) + (let ((a0-25 sparticle-launcher)) + (b! (!= (-> a1-4 type) a0-25) cfg-94 :delay (nop!)) + ) + (b! (not (logtest? (-> v1-33 flags) (sp-group-item-flag launch-asap))) cfg-42 :delay (nop!)) + (when (not (logtest? (-> a3-0 flags) (sp-launch-state-flags particles-active))) + (set! (-> a3-0 spawn-time) (the-as uint s4-0)) + (logior! (-> a3-0 flags) (sp-launch-state-flags particles-active)) + (when (< 0.0 f0-5) + (b! (not (logtest? (-> v1-33 flags) (sp-group-item-flag bit7))) cfg-37 :delay (nop!)) + (let ((t9-3 sp-launch-particles-var)) + (b! (not (logtest? (-> v1-33 flags) (sp-group-item-flag is-3d))) cfg-35 :delay (nop!)) + (let ((a0-36 *sp-particle-system-3d*)) + (b! #t cfg-36 :delay (nop!)) + (label cfg-35) + (set! a0-36 *sp-particle-system-2d*) + (label cfg-36) + (t9-3 a0-36 a1-4 (-> obj origin) a3-0 obj f0-5) + ) + ) + (b! #t cfg-41 :delay (nop!)) + (label cfg-37) + (let ((t9-4 sp-launch-particles-var) + (a0-38 (if (logtest? (-> v1-33 flags) (sp-group-item-flag is-3d)) + *sp-particle-system-3d* + *sp-particle-system-2d* + ) + ) + (a2-4 *launch-matrix*) + ) + (set! (-> a2-4 trans quad) (-> a3-0 center quad)) + (t9-4 a0-38 a1-4 a2-4 a3-0 obj f0-5) + ) + ) + ) + (label cfg-41) + (b! #t cfg-93 :delay (nop!)) + (label cfg-42) + (when (or (logtest? s3-1 (-> v1-33 hour-mask)) + (not (or (= (-> v1-33 fade-after) 0.0) (< f30-0 (-> v1-33 fade-after)))) + ) + 0 + (goto cfg-93) + ) + (b! (nonzero? (-> v1-33 period)) cfg-59 :delay (empty-form)) + (if (not (logtest? (-> v1-33 flags) (sp-group-item-flag bit6))) + (set! f0-5 (* 0.2 (the float (- s4-0 s5-0)) f0-5)) + ) + (b! #t cfg-81 :delay (nop!)) + (label cfg-59) + 0 + 0 + (let* ((a2-5 (-> v1-33 length)) + (a0-57 (-> v1-33 period)) + (t0-10 (mod (+ (- s5-0 (the-as int (-> obj data s2-1 offset))) a0-57) (the-as int a0-57))) + (a0-58 (mod (the-as uint (+ (- s4-0 (the-as int (-> obj data s2-1 offset))) a0-57)) a0-57)) + ) + (set! f0-5 (cond + ((and (< t0-10 (the-as int a2-5)) (< (the-as int a0-58) (the-as int a2-5))) + (* 0.2 (the float (- s4-0 s5-0)) f0-5) + ) + ((and (< t0-10 (the-as int a2-5)) (>= (the-as int a0-58) (the-as int a2-5))) + (* 0.2 (the float (- a2-5 (the-as uint t0-10))) f0-5) + ) + ((and (>= t0-10 (the-as int a2-5)) (< (the-as int a0-58) (the-as int a2-5))) + (* 0.2 (the float a0-58) f0-5) + ) + (else + (when (not (logtest? (-> v1-33 flags) (sp-group-item-flag bit1))) + 0 + (goto cfg-93) + ) + (when (< (the-as uint (- s4-0 (the-as int (-> obj data s2-1 spawn-time)))) (-> v1-33 period)) + 0 + (goto cfg-93) + ) + (set! (-> obj data s2-1 offset) (- (-> v1-33 period) a0-58)) + (* 0.2 (the float (- s4-0 s5-0)) f0-5) + ) + ) + ) + ) + (label cfg-81) + (set! (-> a3-0 spawn-time) (the-as uint s4-0)) + (logior! (-> a3-0 flags) (sp-launch-state-flags particles-active)) + (when (< 0.0 f0-5) + (if (logtest? (-> v1-33 flags) (sp-group-item-flag bit6)) + (set! f0-5 f1-3) + ) + (cond + ((logtest? (-> v1-33 flags) (sp-group-item-flag bit7)) + (sp-launch-particles-var + (if (logtest? (-> v1-33 flags) (sp-group-item-flag is-3d)) + *sp-particle-system-3d* + *sp-particle-system-2d* + ) + a1-4 + (-> obj origin) + a3-0 + obj + f0-5 + ) + ) + (else + (let ((t9-6 sp-launch-particles-var) + (a0-83 (if (logtest? (-> v1-33 flags) (sp-group-item-flag is-3d)) + *sp-particle-system-3d* + *sp-particle-system-2d* + ) + ) + (a2-22 *launch-matrix*) + ) + (set! (-> a2-22 trans quad) (-> a3-0 center quad)) + (t9-6 a0-83 a1-4 a2-22 a3-0 obj f0-5) + ) + ) + ) + ) + ) + ) + (label cfg-93) + (b! #t cfg-95 :delay (nop!)) + (label cfg-94) + (format 0 "spawn called for non-sparticle-launcher~%") + (label cfg-95) + (b! (nonzero? s2-1) cfg-19 :delay (nop!)) + ) + ) + ) + 0 + (none) + ) + ) ;; definition for function execute-part-engine ;; INFO: Used lq/sq @@ -1426,7 +1617,7 @@ (v1-28 level-group) (v1-29 int) (a0-1 connectable) - (a0-2 int) + (a0-2 basic) (a0-3 none) (a0-4 none) (a0-5 none) diff --git a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle_REF.gc b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle_REF.gc index 4649b0413c..b7bba1e875 100644 --- a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle_REF.gc @@ -503,7 +503,7 @@ ;; definition for function sparticle-kill-it-level0 ;; WARN: Return type mismatch int vs none. (defun sparticle-kill-it-level0 ((arg0 sparticle-system) (arg1 sparticle-cpuinfo)) - (if (zero? (logand (-> arg1 flags) (sp-cpuinfo-flag sp-cpuinfo-flag-9 level0 level1))) + (if (not (logtest? (-> arg1 flags) (sp-cpuinfo-flag sp-cpuinfo-flag-9 level0 level1))) (sparticle-kill-it arg0 arg1) ) 0 diff --git a/test/decompiler/reference/jak2/engine/gfx/texture/texture-anim-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/texture/texture-anim-h_REF.gc index 79e31cd478..f499b558b9 100644 --- a/test/decompiler/reference/jak2/engine/gfx/texture/texture-anim-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/texture/texture-anim-h_REF.gc @@ -82,22 +82,22 @@ ;; definition of type texture-anim (deftype texture-anim (structure) - ((num-layers uint32 :offset-assert 0) - (func basic :offset-assert 4) - (func-id basic :offset 4) - (init-func basic :offset-assert 8) - (init-func-id basic :offset 8) - (tex basic :offset-assert 12) - (tex-name basic :offset-assert 16) - (extra vector :inline :offset-assert 32) - (color uint32 :offset-assert 48) - (frame-time float :offset-assert 52) - (frame-delta float :offset-assert 56) - (frame-mod float :offset-assert 60) - (test uint64 :offset-assert 64) - (alpha uint64 :offset-assert 72) - (clamp uint64 :offset-assert 80) - (data uint8 :dynamic :offset-assert 88) + ((num-layers uint32 :offset-assert 0) + (func basic :offset-assert 4) + (func-id basic :offset 4) + (init-func basic :offset-assert 8) + (init-func-id basic :offset 8) + (tex basic :offset-assert 12) + (tex-name basic :offset-assert 16) + (extra vector :inline :offset-assert 32) + (color rgba :offset-assert 48) + (frame-time float :offset-assert 52) + (frame-delta float :offset-assert 56) + (frame-mod float :offset-assert 60) + (test gs-test :offset-assert 64) + (alpha gs-alpha :offset-assert 72) + (clamp gs-clamp :offset-assert 80) + (data texture-anim-layer :dynamic :offset-assert 88) ) :method-count-assert 11 :size-assert #x58 @@ -464,7 +464,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/level/bsp-h_REF.gc b/test/decompiler/reference/jak2/engine/level/bsp-h_REF.gc index 4918118ecc..ceb4d0d67f 100644 --- a/test/decompiler/reference/jak2/engine/level/bsp-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/bsp-h_REF.gc @@ -38,6 +38,7 @@ ((info file-info :offset 4) (all-visible-list (pointer uint16) :offset-assert 32) (visible-list-length int16 :offset-assert 36) + (extra-vis-list-length int16 :offset-assert 38) (drawable-trees drawable-tree-array :offset-assert 40) (pat pointer :offset-assert 44) (pat-length int32 :offset-assert 48) @@ -70,6 +71,7 @@ (region-array region-array :offset-assert 192) (collide-hash collide-hash :offset-assert 196) (wind-array-length int32 :offset 204) + (vis-spheres vector-array :offset 216) (region-tree drawable-tree-region-prim :offset 252) (tfrag-masks texture-masks-array :offset-assert 256) (tfrag-closest (pointer float) :offset-assert 260) diff --git a/test/decompiler/reference/jak2/engine/level/bsp_REF.gc b/test/decompiler/reference/jak2/engine/level/bsp_REF.gc index 465b4371d8..2abec4a786 100644 --- a/test/decompiler/reference/jak2/engine/level/bsp_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/bsp_REF.gc @@ -494,6 +494,11 @@ ;; definition for method 16 of type bsp-header ;; WARN: Return type mismatch int vs none. (defmethod collect-regions bsp-header ((obj bsp-header) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" (let ((s3-0 (-> obj region-trees))) (dotimes (s2-0 (-> s3-0 length)) (collect-regions (-> s3-0 s2-0) arg0 arg1 arg2) diff --git a/test/decompiler/reference/jak2/engine/level/level-h_REF.gc b/test/decompiler/reference/jak2/engine/level/level-h_REF.gc index 89a2c991b0..fbb09b6861 100644 --- a/test/decompiler/reference/jak2/engine/level/level-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/level-h_REF.gc @@ -479,7 +479,7 @@ (bsp-name (_type_) symbol 13) (compute-memory-usage! (_type_ symbol) memory-usage-block 14) (inside-boxes-check (_type_ vector) symbol 15) - (level-method-16 () none 16) + (update-vis! (_type_ level-vis-info uint (pointer uint8)) symbol 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) (login-begin (_type_) _type_ 19) diff --git a/test/decompiler/reference/jak2/engine/level/region-h_REF.gc b/test/decompiler/reference/jak2/engine/level/region-h_REF.gc index 357de84b7d..c8d25e9da5 100644 --- a/test/decompiler/reference/jak2/engine/level/region-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/region-h_REF.gc @@ -12,7 +12,7 @@ :size-assert #x10 :flag-assert #xa00000010 (:methods - (region-method-9 () none 9) + (region-method-9 (_type_ vector) symbol 9) ) ) @@ -66,8 +66,8 @@ :flag-assert #x1400000020 (:methods (debug-draw-region (_type_ int) none 17) - (drawable-region-prim-method-18 () none 18) - (drawable-region-prim-method-19 () none 19) + (track-region (_type_ region-prim-area) symbol 18) + (within-area? (_type_ region-prim-area) symbol 19) ) ) @@ -94,7 +94,7 @@ :size-assert #x20 :flag-assert #x1300000020 (:methods - (drawable-tree-region-prim-method-17 () none 17) + (drawable-tree-region-prim-method-17 (_type_ vector) symbol 17) (debug-print (_type_ vector object) none 18) ) ) diff --git a/test/decompiler/reference/jak2/engine/level/region_REF.gc b/test/decompiler/reference/jak2/engine/level/region_REF.gc new file mode 100644 index 0000000000..7c33086aa4 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/level/region_REF.gc @@ -0,0 +1,752 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 8 of type drawable-region-prim +;; WARN: Return type mismatch int vs drawable-region-prim. +(defmethod mem-usage drawable-region-prim ((obj drawable-region-prim) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 50 (-> arg0 length))) + (set! (-> arg0 data 49 name) "region") + (+! (-> arg0 data 49 count) 1) + (let ((v1-6 (asize-of obj))) + (+! (-> arg0 data 49 used) v1-6) + (+! (-> arg0 data 49 total) (logand -16 (+ v1-6 15))) + ) + (mem-usage (-> obj region) arg0 (logior arg1 128)) + (the-as drawable-region-prim 0) + ) + +;; definition for method 8 of type drawable-inline-array-region-prim +;; WARN: Return type mismatch int vs drawable-inline-array-region-prim. +(defmethod mem-usage drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 1 (-> arg0 length))) + (set! (-> arg0 data 0 name) (symbol->string 'drawable-group)) + (+! (-> arg0 data 0 count) 1) + (let ((v1-7 32)) + (+! (-> arg0 data 0 used) v1-7) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-7 15))) + ) + (dotimes (s3-0 (-> obj length)) + (mem-usage (-> obj data s3-0) arg0 arg1) + ) + (the-as drawable-inline-array-region-prim 0) + ) + +;; definition for method 10 of type drawable-tree-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod draw drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 drawable-tree-region-prim) (arg1 display-frame)) + 0 + (none) + ) + +;; definition for method 15 of type drawable-tree-region-prim +(defmethod unpack-vis drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 (pointer int8)) (arg1 (pointer int8))) + arg1 + ) + +;; definition for method 16 of type drawable-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod collect-regions drawable-region-prim ((obj drawable-region-prim) (area-of-interest sphere) (_count int) (region-list region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (dotimes (count _count) + (when (spheres-overlap? area-of-interest (the-as sphere (-> obj bsphere))) + (set! (-> region-list items (-> region-list num-items)) obj) + (+! (-> region-list num-items) 1) + ) + (&+! obj 32) + ) + 0 + (none) + ) + +;; definition for method 16 of type drawable-inline-array-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod collect-regions drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (the-as drawable-region-prim (-> obj data)) arg0 (-> obj length) arg2) + 0 + (none) + ) + +;; definition for method 16 of type drawable-tree-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod collect-regions drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (-> obj data2 0) arg0 (-> obj length) arg2) + 0 + (none) + ) + +;; definition for method 17 of type drawable-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-prim ((obj drawable-region-prim) (arg0 int)) + (local-vars (sv-32 vector2h) (sv-36 vector)) + (set! sv-32 (new 'stack 'vector2h)) + (set! sv-36 (-> obj bsphere)) + (add-debug-x #t (bucket-id debug-no-zbuf1) sv-36 (new 'static 'rgba :r #xff :g #xff :a #x80)) + (when (nonzero? (-> obj region)) + (let ((s5-0 add-debug-text-3d) + (s4-0 #t) + (s3-0 318) + ) + (format (clear *temp-string*) "region-~D~%" (-> obj region id)) + (s5-0 s4-0 (the-as bucket-id s3-0) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + (let ((s5-1 (-> obj region on-enter))) + (when s5-1 + (let ((s4-1 add-debug-text-3d) + (s3-1 #t) + (s2-1 318) + ) + (format (clear *temp-string*) "(on-enter ~S)" s5-1) + (s4-1 s3-1 (the-as bucket-id s2-1) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((s5-2 (-> obj region on-inside))) + (when s5-2 + (let ((s4-2 add-debug-text-3d) + (s3-2 #t) + (s2-2 318) + ) + (format (clear *temp-string*) "(on-inside ~S)" s5-2) + (s4-2 s3-2 (the-as bucket-id s2-2) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((gp-1 (-> obj region on-exit))) + (when gp-1 + (let ((s5-3 add-debug-text-3d) + (s4-3 #t) + (s3-3 318) + ) + (format (clear *temp-string*) "(on-exit ~S)" gp-1) + (s5-3 s4-3 (the-as bucket-id s3-3) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-prim +(defmethod track-region drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "TODO" + #f + ) + +;; definition for method 19 of type drawable-region-prim +(defmethod within-area? drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + #f + ) + +;; definition for method 9 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 9 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-entered-region! region-prim-area ((obj region-prim-area) (region-sphere drawable-region-sphere)) + "Enumerates through the objects `region-enter-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and increment `region-enter-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-entered (-> obj region-enter-count))) + (let ((region (-> region-sphere region))) + (countdown (idx regions-entered) + (if (= (-> obj region-enter-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-enter-list regions-entered) (the-as region-prim-area region)) + ) + (set! (-> obj region-enter-prim-list regions-entered) region-sphere) + (set! (-> obj region-enter-count) (+ regions-entered 1)) + ) + 0 + (none) + ) + +;; definition for method 10 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 10 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-exited-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-exit-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and increment `region-exit-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-exited (-> obj region-exit-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-exited) + (if (= (-> obj region-exit-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-exit-list regions-exited) (the-as region-prim-area region)) + ) + (set! (-> obj region-exit-prim-list regions-exited) arg0) + (set! (-> obj region-exit-count) (+ regions-exited 1)) + ) + 0 + (none) + ) + +;; definition for method 11 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 11 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-inside-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-inside-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and increment `region-inside-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-inside (-> obj region-inside-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-inside) + (if (= (-> obj region-inside-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-inside-list regions-inside) (the-as region-prim-area region)) + ) + (set! (-> obj region-inside-prim-list regions-inside) arg0) + (set! (-> obj region-inside-count) (+ regions-inside 1)) + ) + 0 + (none) + ) + +;; definition for method 12 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 12 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-start-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-start-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and increment `region-start-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-started (-> obj region-start-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-started) + (if (= (-> obj region-start-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-start-list regions-started) (the-as region-prim-area region)) + ) + (set! (-> obj region-start-prim-list regions-started) arg0) + (set! (-> obj region-start-count) (+ regions-started 1)) + ) + 0 + (none) + ) + +;; definition for method 17 of type drawable-region-sphere +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-sphere ((obj drawable-region-sphere) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let ((a2-0 (-> obj bsphere))) + (add-debug-sphere #t (bucket-id debug2) a2-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x80)) + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-sphere +(defmethod track-region drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "TODO" + (-> obj region) + (let ((area-of-interest (-> obj bsphere))) + (if (< 0.0 (ray-sphere-intersect (-> area pos) (-> area ray) area-of-interest (-> area-of-interest w))) + (track-entered-region! area obj) + ) + (if (< 0.0 (ray-sphere-intersect + (-> area unknown-vector-uiyb1) + (-> area unknown-vector-t3edh) + area-of-interest + (-> area-of-interest w) + ) + ) + (track-exited-region! area obj) + ) + (if (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere area-of-interest)) + (track-start-region! area obj) + ) + (when (spheres-overlap? (the-as sphere (-> area unknown-vector-uiyb1)) (the-as sphere area-of-interest)) + (track-inside-region! area obj) + #t + ) + ) + ) + +;; definition for method 19 of type drawable-region-sphere +(defmethod within-area? drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere (-> obj bsphere))) + ) + +;; definition for method 17 of type drawable-region-face +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-face ((obj drawable-region-face) (arg0 int)) + (when (zero? arg0) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + ) + (let ((s5-0 (-> obj bsphere))) + (add-debug-vector + #t + (bucket-id debug-no-zbuf1) + s5-0 + (-> obj data normal) + (meters 2) + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) + ) + (add-debug-bound + (bucket-id debug2) + (-> obj data points) + (the-as int (-> obj data num-points)) + (new 'static 'rgba :r #xff :g #xff :a #x80) + (new 'static 'rgba :r #xff :a #x80) + 0 + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-face +(defmethod track-region drawable-region-face ((obj drawable-region-face) (arg0 region-prim-area)) + "TODO" + (local-vars (sv-48 vector) (sv-52 vector) (sv-56 object)) + (-> obj region) + (let* ((s4-0 (-> obj data)) + (v1-1 (-> s4-0 normal)) + (a0-3 (>= 0.0 (- (vector-dot (-> arg0 pos) v1-1) (-> v1-1 w)))) + (s3-0 (>= 0.0 (- (vector-dot (-> arg0 unknown-vector-uiyb1) v1-1) (-> v1-1 w)))) + ) + (when (!= a0-3 s3-0) + (when (nonzero? (-> s4-0 num-points)) + (set! sv-48 (new 'stack-no-clear 'vector)) + (set! sv-52 (new 'stack-no-clear 'vector)) + (set! sv-56 (the-as (inline-array vector) (-> s4-0 points))) + (ray-plane-intersect + sv-48 + sv-52 + (-> arg0 pos) + (-> arg0 ray) + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (let ((s4-1 (-> s4-0 num-points)) + (s2-0 0) + (s1-0 (vector-negate! (new 'stack-no-clear 'vector) sv-52)) + ) + (while (< (+ s2-0 2) (the-as int s4-1)) + (if (the-as + (inline-array vector) + (or (point-in-triangle-cross + sv-48 + sv-52 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (the-as (inline-array vector) (point-in-triangle-cross + sv-48 + s1-0 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + ) + ) + ) + (goto cfg-17) + ) + (+! s2-0 1) + (set! sv-56 (-> (the-as (inline-array vector) sv-56) 1)) + ) + ) + (set! s3-0 s3-0) + (goto cfg-20) + ) + (label cfg-17) + (if s3-0 + (track-entered-region! arg0 (the-as drawable-region-sphere obj)) + (track-exited-region! arg0 (the-as drawable-region-sphere obj)) + ) + ) + (label cfg-20) + s3-0 + ) + ) + +;; definition for method 17 of type drawable-region-volume +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-volume ((obj drawable-region-volume) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let* ((s5-0 (-> obj faces length)) + (s4-0 0) + (a0-3 (the-as object (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s4-0 s5-0) + (debug-draw-region (the-as drawable-region-face a0-3) 1) + (+! s4-0 1) + (set! a0-3 (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-volume +(defmethod track-region drawable-region-volume ((obj drawable-region-volume) (area region-prim-area)) + "TODO" + (if (within-area? obj area) + (track-start-region! area (the-as drawable-region-sphere obj)) + ) + (let* ((s4-0 (-> obj faces length)) + (s3-0 0) + (a0-4 (the-as object (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s3-0 s4-0) + (if (not (track-region (the-as drawable-region-face a0-4) area)) + (return #f) + ) + (+! s3-0 1) + (set! a0-4 (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + (track-inside-region! area (the-as drawable-region-sphere obj)) + #t + ) + +;; definition for method 19 of type drawable-region-volume +(defmethod within-area? drawable-region-volume ((obj drawable-region-volume) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (let* ((v1-1 (-> obj faces length)) + (a2-0 0) + (a3-2 (the-as object (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< a2-0 v1-1) + (let ((a3-4 (-> (the-as drawable-region-face a3-2) data normal))) + (if (< 0.0 (- (vector-dot (-> arg0 pos) a3-4) (-> a3-4 w))) + (return #f) + ) + ) + (+! a2-0 1) + (set! a3-2 (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + #t + ) + +;; definition for method 17 of type drawable-tree-region-prim +(defmethod drawable-tree-region-prim-method-17 drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (let* ((s5-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s4-0 0) + (a0-8 (the-as object (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s4-0 s5-0) + (if (within-area? (the-as drawable-region-prim a0-8) (the-as region-prim-area (+ #x70000000 0))) + (return #t) + ) + (+! s4-0 1) + (set! a0-8 (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + #f + ) + +;; definition for method 9 of type region +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs symbol. +(defmethod region-method-9 region ((obj region) (arg0 vector)) + (local-vars (sv-16 int) (sv-32 int)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (dotimes (s5-0 (-> *level* length)) + (let ((s4-0 (-> *level* level s5-0))) + (when (= (-> s4-0 status) 'active) + (when (nonzero? (-> s4-0 bsp region-trees)) + (let* ((s3-0 (-> s4-0 bsp region-trees length)) + (s2-0 0) + (s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + (while (< s2-0 s3-0) + (let ((s0-0 (-> s1-0 data2 (+ (-> s1-0 length) -1) length))) + (set! sv-16 0) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + (while (< sv-16 s0-0) + (if (and (= (-> (the-as drawable-region-prim sv-32) region) obj) + (within-area? + (the-as drawable-region-prim sv-32) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (return (the-as symbol sv-32)) + ) + (set! sv-16 (+ sv-16 1)) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + ) + ) + (+! s2-0 1) + (set! s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + ) + ) + ) + ) + ) + (the-as symbol #f) + ) + +;; definition for method 18 of type drawable-tree-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod debug-print drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector) (arg1 object)) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg0 0.0) + (let* ((s4-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s3-0 0) + (s2-0 (the-as object (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s3-0 s4-0) + (if (within-area? (the-as drawable-region-prim s2-0) (the-as region-prim-area (+ #x70000000 0))) + (format + arg1 + " splitbox-~D ~A~%" + (-> (the-as drawable-region-prim s2-0) id) + (the-as drawable-region-prim s2-0) + ) + ) + (+! s3-0 1) + (set! s2-0 (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + 0 + (none) + ) + +;; definition for function region-tree-execute +;; WARN: Return type mismatch int vs none. +(defun region-tree-execute ((arg0 symbol) (arg1 vector) (arg2 vector)) + (local-vars (sv-32 vector)) + (with-pp + (set! sv-32 (vector-average! (new 'stack-no-clear 'vector) arg1 arg2)) + (set! (-> sv-32 w) (* 0.5 (vector-vector-distance arg1 arg2))) + (set! (-> (the-as region-prim-area #x70000000) region-prim-list num-items) 0) + (set! (-> (the-as region-prim-area #x70000000) region-enter-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-exit-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-inside-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-start-count) 0) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg1 0.0) + (sphere<-vector+r! (the-as sphere (+ 1312 #x70000000)) arg2 0.0) + (vector-! (the-as vector (+ 1328 #x70000000)) arg2 arg1) + (vector-! (the-as vector (+ 1344 #x70000000)) arg1 arg2) + (dotimes (s5-1 (-> *level* length)) + (let ((v1-17 (-> *level* level s5-1))) + (when (= (-> v1-17 status) 'active) + (let ((s4-1 (-> v1-17 bsp region-trees))) + (when (nonzero? s4-1) + (let* ((s3-0 (-> s4-1 length)) + (s2-0 0) + (a0-14 (-> s4-1 s2-0)) + ) + (while (< s2-0 s3-0) + (if (= (-> a0-14 name) arg0) + (collect-regions a0-14 (the-as sphere sv-32) 0 (the-as region-prim-list (+ #x70000000 0))) + ) + (+! s2-0 1) + (set! a0-14 (-> s4-1 s2-0)) + ) + ) + ) + ) + ) + ) + ) + (countdown (gp-1 (-> (the-as region-prim-area #x70000000) region-prim-list num-items)) + (track-region + (-> (the-as region-prim-area (+ (* gp-1 4) #x70000000)) region-prim-list items 0) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (let ((gp-2 (-> (the-as region-prim-area #x70000000) region-enter-count))) + (while (begin (label cfg-22) (nonzero? gp-2)) + (+! gp-2 -1) + (let* ((a2-5 (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-list 0)) + (s5-2 (-> a2-5 region-prim-list items 0)) + ) + (when s5-2 + (countdown (v1-47 (-> (the-as region-prim-area #x70000000) region-start-count)) + (if (= a2-5 (-> (the-as region-prim-area #x70000000) region-start-list v1-47)) + (goto cfg-22) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-5) + pp + (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-prim-list 0 bsphere) + ) + (the-as pair s5-2) + ) + ) + ) + ) + ) + (let ((gp-3 (-> (the-as region-prim-area #x70000000) region-exit-count))) + (while (begin (label cfg-31) (nonzero? gp-3)) + (+! gp-3 -1) + (let* ((a2-6 (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-list 0)) + (s5-3 (-> a2-6 region-prim-list items 2)) + ) + (when s5-3 + (countdown (v1-64 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (if (= a2-6 (-> (the-as region-prim-area (+ (* v1-64 4) #x70000000)) region-inside-list 0)) + (goto cfg-31) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-6) + pp + (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-prim-list 0 bsphere) + ) + (the-as pair s5-3) + ) + ) + ) + ) + ) + (countdown (gp-4 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (let* ((a2-7 (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-list 0)) + (s5-4 (-> a2-7 region-prim-list items 1)) + ) + (if s5-4 + (eval! + (new + 'stack + 'script-context + (the-as basic a2-7) + pp + (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-prim-list 0 bsphere) + ) + (the-as pair s5-4) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for function region-execute +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun region-execute () + (set! (-> *level* camera-pos 1 quad) (-> *level* camera-pos 0 quad)) + (set! (-> *level* camera-pos 0 quad) (-> (camera-pos) quad)) + (set! (-> *level* target-pos 1 quad) (-> *level* target-pos 0 quad)) + (set! (-> *level* target-pos 0 quad) (-> (target-pos 0) quad)) + (when (and *execute-regions* (-> *setting-control* user-current region-mode) (not (paused?))) + (region-tree-execute 'camera (-> *level* camera-pos 1) (the-as vector (-> *level* camera-pos))) + (region-tree-execute 'target (-> *level* target-pos 1) (the-as vector (-> *level* target-pos))) + ) + 0 + (none) + ) + +;; definition for function region-prim-lookup-by-id +;; WARN: Return type mismatch int vs drawable-region-prim. +(defun region-prim-lookup-by-id ((arg0 int) (arg1 symbol) (arg2 symbol)) + (let ((v1-0 -1)) + (dotimes (a3-0 (-> *level* length)) + (let ((t0-3 (-> *level* level a3-0))) + (when (= (-> t0-3 status) 'active) + (when (nonzero? (-> t0-3 bsp region-trees)) + (let* ((t1-8 (-> t0-3 bsp region-trees length)) + (t2-1 0) + (t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + (while (< t2-1 t1-8) + (when (or (not arg1) (= (-> t3-2 name) arg1)) + (let* ((t4-10 (-> t3-2 data2 (+ (-> t3-2 length) -1) length)) + (t5-0 0) + (t6-2 (the-as object (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1)))))) + ) + (while (< t5-0 t4-10) + (when (= (-> (the-as drawable-region-prim t6-2) region id) arg0) + (+! v1-0 1) + (if (= v1-0 arg2) + (return (the-as drawable-region-prim t6-2)) + ) + ) + (+! t5-0 1) + (set! t6-2 (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1))))) + ) + ) + ) + (+! t2-1 1) + (set! t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + ) + ) + ) + ) + ) + ) + (the-as drawable-region-prim #f) + ) + +;; definition for function region-lookup-by-id +(defun region-lookup-by-id ((arg0 int)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (when (nonzero? (-> a1-3 bsp region-array)) + (let* ((a2-8 (-> a1-3 bsp region-array length)) + (a3-1 0) + (t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + (while (< a3-1 a2-8) + (if (= (-> t0-2 id) arg0) + (return t0-2) + ) + (+! a3-1 1) + (set! t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + ) + ) + ) + ) + ) + (the-as region #f) + ) diff --git a/test/decompiler/reference/jak2/engine/load/decomp_REF.gc b/test/decompiler/reference/jak2/engine/load/decomp_REF.gc new file mode 100644 index 0000000000..81e7c08283 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/load/decomp_REF.gc @@ -0,0 +1,539 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for function unpack-comp-rle +;; WARN: Return type mismatch (pointer int8) vs none. +(defun unpack-comp-rle ((arg0 (pointer int8)) (arg1 (pointer int8))) + (local-vars (v1-2 int) (v1-3 uint)) + (nop!) + (loop + (loop + (set! v1-2 (-> arg1 0)) + (set! arg1 (&-> arg1 1)) + (b! (<= v1-2 0) cfg-5 :delay (nop!)) + (let ((a2-0 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (label cfg-3) + (nop!) + (nop!) + (nop!) + (nop!) + (set! (-> arg0 0) a2-0) + ) + (set! arg0 (&-> arg0 1)) + (b! (> v1-2 0) cfg-3 :delay (set! v1-2 (+ v1-2 -1))) + ) + (label cfg-5) + (b! (zero? v1-2) cfg-8 :delay (set! v1-3 (the-as uint (- v1-2)))) + (label cfg-6) + (let ((a2-1 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (nop!) + (nop!) + (set! (-> arg0 0) a2-1) + ) + (+! v1-3 -1) + (b! (> (the-as int v1-3) 0) cfg-6 :delay (set! arg0 (&-> arg0 1))) + ) + (label cfg-8) + (none) + ) + +;; definition of type huf-dictionary-node +(deftype huf-dictionary-node (structure) + ((zero uint16 :offset-assert 0) + (one uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +;; definition for method 3 of type huf-dictionary-node +(defmethod inspect huf-dictionary-node ((obj huf-dictionary-node)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'huf-dictionary-node) + (format #t "~1Tzero: ~D~%" (-> obj zero)) + (format #t "~1Tone: ~D~%" (-> obj one)) + (label cfg-4) + obj + ) + +;; definition for function unpack-comp-huf +;; WARN: Return type mismatch int vs none. +(defun unpack-comp-huf ((arg0 (pointer uint8)) (arg1 (pointer uint8)) (arg2 uint) (arg3 huf-dictionary-node)) + (local-vars (t1-1 uint) (t3-2 (pointer uint16))) + (nop!) + (let ((t1-0 (-> arg3 zero)) + (a2-1 (+ arg2 -1028)) + (t2-0 (-> arg3 one)) + ) + (nop!) + (label cfg-1) + (let ((v1-4 128)) + (nop!) + (let ((t0-0 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (label cfg-2) + (let ((t3-0 (logand t0-0 v1-4))) + (shift-arith-right-32 v1-4 v1-4 1) + (b! (zero? t3-0) cfg-4 :delay (set! t1-1 t1-0)) + ) + ) + (nop!) + (set! t1-1 t2-0) + (label cfg-4) + (let ((t2-1 (+ t1-1 -256))) + (let ((t3-1 (* t1-1 4))) + (b! (< (the-as int t2-1) 0) cfg-8 :delay (set! t3-2 (the-as (pointer uint16) (+ t3-1 a2-1)))) + ) + (b! (zero? t2-1) cfg-10 :delay (set! t1-0 (-> t3-2 0))) + ) + (b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> t3-2 1))) + (b! #t cfg-1 :delay (nop!)) + (label cfg-8) + (set! (-> arg0 0) t1-1) + (set! arg0 (&-> arg0 1)) + (nop!) + (set! t1-0 (-> arg3 zero)) + (b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> arg3 one))) + ) + ) + (b! #t cfg-1 :delay (nop!)) + (label cfg-10) + (nop!) + (nop!) + 0 + (none) + ) + +;; definition for function unpack-comp-lzo +;; WARN: Return type mismatch int vs none. +(defun unpack-comp-lzo ((arg0 (pointer uint8)) (arg1 (pointer uint8))) + 0 + (let ((v1-1 arg0)) + (b! (>= (the-as uint 17) (-> arg1 0)) cfg-5 :delay #f) + (let ((a2-4 (the-as int (+ (-> arg1 0) -17)))) + (set! arg1 (&-> arg1 1)) + (b! (< a2-4 4) cfg-41) + (until (<= a2-4 0) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (+! a2-4 -1) + ) + (b! #t cfg-15 :delay (nop!)) + (label cfg-5) + (b! #t cfg-45 :delay (nop!)) + (label cfg-6) + (let ((a2-6 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (b! (>= (the-as int a2-6) 16) cfg-18) + (b! (nonzero? a2-6) cfg-12 :delay (empty-form)) + (while (zero? (-> arg1 0)) + (+! a2-6 255) + (set! arg1 (&-> arg1 1)) + ) + (set! a2-6 (+ (-> arg1 0) 15 a2-6)) + (set! arg1 (&-> arg1 1)) + (label cfg-12) + (set! (-> arg0 0) (-> arg1 0)) + (set! (-> arg0 1) (-> arg1 1)) + (set! (-> arg0 2) (-> arg1 2)) + (set! arg0 (&-> arg0 3)) + (set! arg1 (&-> arg1 3)) + (until (<= (the-as int a2-6) 0) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (+! a2-6 -1) + ) + (label cfg-15) + (set! a2-6 (-> arg1 0)) + (set! arg1 (&-> arg1 1)) + (b! (>= (the-as int a2-6) 16) cfg-18) + (let ((a2-10 (&- (&- (&-> arg0 -2049) (the-as uint (/ (the-as int a2-6) 4))) (the-as uint (* (-> arg1 0) 4))))) + (set! arg1 (&-> arg1 1)) + (set! (-> arg0 0) (-> a2-10 0)) + (set! (-> arg0 1) (-> a2-10 1)) + (set! (-> arg0 2) (-> a2-10 2)) + (set! arg0 (&-> arg0 3)) + (&-> a2-10 2) + ) + (b! #t cfg-39 :delay (nop!)) + (b! #t cfg-43 :delay (nop!)) + (label cfg-18) + (b! (< (the-as int a2-6) 64) cfg-20) + (let ((a3-23 + (&- (&- (&-> arg0 -1) (the-as uint (logand (/ (the-as int a2-6) 4) 7))) (the-as uint (* (-> arg1 0) 8))) + ) + ) + (set! arg1 (&-> arg1 1)) + (let ((a2-13 (+ (/ (the-as int a2-6) 32) -1))) + (b! #t cfg-36 :delay (nop!)) + (label cfg-20) + (b! (< (the-as int a2-6) 32) cfg-27) + (set! a2-13 (logand a2-6 31)) + (b! (nonzero? a2-13) cfg-26 :delay (empty-form)) + (b! #t cfg-24 :delay (nop!)) + (label cfg-23) + (+! a2-13 255) + (set! arg1 (&-> arg1 1)) + (label cfg-24) + (b! (zero? (-> arg1 0)) cfg-23 :delay (nop!)) + (set! a2-13 (+ (-> arg1 0) 31 a2-13)) + (set! arg1 (&-> arg1 1)) + (label cfg-26) + (set! a3-23 (&- (&-> arg0 -1) (the-as uint (+ (shr (-> arg1 0) 2) (* (-> arg1 1) 64))))) + (set! arg1 (&-> arg1 2)) + (b! #t cfg-36 :delay (nop!)) + (label cfg-27) + (b! (< (the-as int a2-6) 16) cfg-35) + (let ((a3-32 (&- arg0 (the-as uint (shl (logand a2-6 8) 11))))) + (set! a2-13 (logand a2-6 7)) + (b! (nonzero? a2-13) cfg-33 :delay (empty-form)) + (b! #t cfg-31 :delay (nop!)) + (label cfg-30) + (+! a2-13 255) + (set! arg1 (&-> arg1 1)) + (label cfg-31) + (b! (zero? (-> arg1 0)) cfg-30 :delay (nop!)) + (set! a2-13 (+ (-> arg1 0) 7 a2-13)) + (set! arg1 (&-> arg1 1)) + (label cfg-33) + (let ((a3-33 (&- a3-32 (the-as uint (+ (shr (-> arg1 0) 2) (* (-> arg1 1) 64)))))) + (set! arg1 (&-> arg1 2)) + (b! (= a3-33 arg0) cfg-47 :delay (nop!)) + (set! a3-23 (&-> a3-33 -16384)) + ) + ) + (b! #t cfg-36 :delay (nop!)) + (label cfg-35) + (let ((a2-16 (&- (&- (&-> arg0 -1) (the-as uint (/ (the-as int a2-6) 4))) (the-as uint (* (-> arg1 0) 4))))) + (set! arg1 (&-> arg1 1)) + (set! (-> arg0 0) (-> a2-16 0)) + (set! (-> arg0 1) (-> a2-16 1)) + (set! arg0 (&-> arg0 2)) + (&-> a2-16 1) + ) + (b! #t cfg-39 :delay (nop!)) + (label cfg-36) + (set! (-> arg0 0) (-> a3-23 0)) + (set! (-> arg0 1) (-> a3-23 1)) + (set! arg0 (&-> arg0 2)) + (let ((a3-39 (&-> a3-23 2))) + (until (<= (the-as int a2-13) 0) + (set! (-> arg0 0) (-> a3-39 0)) + (set! arg0 (&-> arg0 1)) + (set! a3-39 (&-> a3-39 1)) + (+! a2-13 -1) + ) + ) + ) + ) + (label cfg-39) + (set! a2-4 (the-as int (logand (-> arg1 -2) 3))) + (b! (zero? (the-as uint a2-4)) cfg-45 :delay (nop!)) + (until (<= a2-4 0) + (label cfg-41) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (set! a2-4 (the-as int (+ (the-as uint a2-4) -1))) + ) + (set! a2-6 (-> arg1 0)) + ) + ) + (set! arg1 (&-> arg1 1)) + (label cfg-43) + (b! #t cfg-18 :delay (nop!)) + (label cfg-45) + (b! #t cfg-6 :delay (nop!)) + (label cfg-47) + (&- arg0 (the-as uint v1-1)) + ) + (none) + ) + +;; definition for method 16 of type level +;; INFO: Used lq/sq +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 138] +(defmethod update-vis! level ((obj level) (vis-info level-vis-info) (unused uint) (in-bsp-vis-string (pointer uint8))) + (local-vars (t0-3 uint128) (extra-vis-length int) (extra-vis-dest (pointer int8))) + (let* ((cam-leaf-idx (-> vis-info from-bsp current-leaf-idx)) + (curr-vis-string-offset (-> vis-info current-vis-string)) + (desired-vis-string-offset (-> vis-info vis-string cam-leaf-idx)) + ) + 0 + (+ #x70000000 0) + (+ 2048 #x70000000) + (b! (!= curr-vis-string-offset desired-vis-string-offset) cfg-8 :delay (empty-form)) + (b! (not (logtest? (vis-info-flag loading) (-> vis-info flags))) cfg-6 :delay (empty-form)) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (logclear! (-> vis-info flags) (vis-info-flag loading)) + (let ((vis-buf (the-as (pointer integer) (-> obj vis-buffer)))) + (b! #t cfg-16 :delay (nop!)) + (label cfg-6) + (return #t) + (label cfg-8) + (when (logtest? (vis-info-flag loading) (-> vis-info flags)) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (logclear! (-> vis-info flags) (vis-info-flag loading)) + ) + (set! (-> vis-info current-vis-string) desired-vis-string-offset) + (b! (logtest? (vis-info-flag in-iop) (-> vis-info flags)) cfg-15 :delay (empty-form)) + (set! vis-buf (&+ in-bsp-vis-string desired-vis-string-offset)) + (b! #t cfg-16 :delay (nop!)) + (label cfg-15) + (format 0 "ERROR: ramdisk vis for level ~A, this is not supported~%" (-> obj name)) + (let ((v0-1 #f)) + (b! #t cfg-49 :delay (nop!)) + (label cfg-16) + (let ((lower-flag-bits (the-as int (logand (vis-info-flag + dummy0 + dummy1 + dummy2 + dummy3 + dummy4 + dummy5 + dummy6 + dummy7 + dummy8 + dummy9 + dummy10 + dummy11 + dummy12 + dummy13 + dummy14 + dummy15 + dummy16 + dummy17 + dummy18 + dummy19 + dummy20 + dummy21 + dummy22 + dummy23 + dummy24 + dummy25 + dummy26 + dummy27 + dummy28 + ) + (-> vis-info flags) + ) + ) + ) + (spad-start (&-> (the-as (pointer int8) #x70000000) 0)) + (spad-end (the-as (pointer int8) (+ 2048 #x70000000))) + (list-len (-> obj bsp visible-list-length)) + ) + (when (zero? (the-as vis-info-flag lower-flag-bits)) + (let ((qwc (/ (+ list-len 15) 16))) + (dotimes (a0-19 qwc) + (set! (-> (the-as (pointer int128) (&+ spad-start (* a0-19 16)))) 0) + ) + ) + (mem-copy! spad-start (the-as (pointer uint8) vis-buf) list-len) + ) + (while (nonzero? lower-flag-bits) + (let ((comp-mode (logand lower-flag-bits 7))) + (cond + ((= comp-mode 1) + (let ((qwc2 (/ (+ list-len 15) 16))) + (dotimes (a0-23 qwc2) + (set! (-> (the-as (pointer int128) (&+ spad-start (* a0-23 16)))) 0) + ) + ) + (set! extra-vis-length (-> obj bsp extra-vis-list-length)) + (set! extra-vis-dest (&+ spad-start (- list-len extra-vis-length))) + (let ((extra-vis-in (unpack-vis (-> obj bsp drawable-trees) spad-start (the-as (pointer int8) vis-buf)))) + (dotimes (extra-vis-idx extra-vis-length) + (let ((vis-byte (-> extra-vis-in 0))) + (set! extra-vis-in (&-> extra-vis-in 1)) + (set! (-> extra-vis-dest 0) vis-byte) + ) + (set! extra-vis-dest (&-> extra-vis-dest 1)) + ) + ) + #f + ) + ((= comp-mode 2) + (unpack-comp-rle spad-start (the-as (pointer int8) vis-buf)) + ) + ((= comp-mode 3) + (unpack-comp-huf + (the-as (pointer uint8) spad-start) + (the-as (pointer uint8) vis-buf) + (-> vis-info dictionary) + (the-as huf-dictionary-node (+ (-> vis-info dictionary) (-> vis-info dictionary-length) -4)) + ) + ) + ((= comp-mode 4) + (unpack-comp-lzo (the-as (pointer uint8) spad-start) (the-as (pointer uint8) vis-buf)) + ) + ) + ) + (set! vis-buf spad-start) + (set! spad-start spad-end) + (set! spad-end (the-as (pointer int8) vis-buf)) + (shift-arith-right-32 lower-flag-bits lower-flag-bits 3) + ) + (let ((vis-ptr (the-as (pointer uint8) vis-buf)) + (all-vis-ptr (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (vis-error #f) + ) + (dotimes (s0-1 list-len) + (when (!= (logand (-> vis-ptr 0) (-> (the-as (pointer uint8) all-vis-ptr) 0)) (-> vis-ptr 0)) + (format + #t + "ERROR: illegal vis bits set [byte ~X] ~X -> ~X~%" + s0-1 + (-> vis-ptr 0) + (-> (the-as (pointer uint8) all-vis-ptr) 0) + ) + (set! vis-error #t) + ) + (set! vis-ptr (&-> vis-ptr 1)) + (set! all-vis-ptr (&+ (the-as (pointer uint16) all-vis-ptr) 1)) + ) + (when vis-error + (format + #t + "src = #x~x dest = #x~x ~s ~s~%" + vis-buf + (-> vis-info vis-bits) + (-> vis-info level) + (-> vis-info from-level) + ) + (format #t "leaf-index = ~d~%" (-> vis-info from-bsp current-leaf-idx)) + 0 + ) + ) + (let ((unpacked-vis-ptr vis-buf) + (final-vis-ptr (the-as object (-> vis-info vis-bits))) + (all-vis (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (vis-qwc (/ (+ list-len 15) 16)) + ) + (dotimes (a3-6 vis-qwc) + (let ((t0-2 (-> (the-as (pointer uint128) unpacked-vis-ptr) 0)) + (t1-1 (-> (the-as (pointer uint128) all-vis) 0)) + ) + (.pand t0-3 t0-2 t1-1) + ) + (set! (-> (the-as (pointer uint128) final-vis-ptr) 0) t0-3) + (set! final-vis-ptr (+ (the-as uint final-vis-ptr) 16)) + (set! unpacked-vis-ptr (&-> (the-as (pointer uint8) unpacked-vis-ptr) 16)) + (set! all-vis (&-> (the-as (pointer uint16) all-vis) 8)) + ) + ) + ) + (set! v0-1 #t) + (label cfg-49) + v0-1 + ) + ) + ) + ) + +;; definition for function pack-comp-rle +;; WARN: Return type mismatch int vs none. +(defun pack-comp-rle ((arg0 (pointer uint8)) (arg1 (pointer uint8)) (arg2 int) (arg3 int)) + (let ((s4-0 0)) + 0 + (while (and (> arg2 0) (< (+ s4-0 131) arg3)) + (cond + ((= (-> arg1 0) (-> arg1 1)) + (let ((v1-2 (-> arg1 0))) + (set! arg1 (&-> arg1 2)) + (let ((a0-2 2)) + (+! arg2 -2) + (while (> arg2 0) + (cond + ((= v1-2 (-> arg1 0)) + (+! a0-2 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (if (>= a0-2 128) + (goto cfg-12) + ) + ) + (else + (goto cfg-12) + ) + ) + ) + (label cfg-12) + (set! (-> arg0 0) (the-as uint (+ a0-2 -1))) + ) + (set! (-> arg0 1) v1-2) + ) + (set! arg0 (&-> arg0 2)) + (+! s4-0 2) + ) + (else + (let ((a0-4 arg1) + (v1-4 1) + ) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (while (< 1 arg2) + (when (and (= (-> arg1 0) (-> arg1 1)) (< 2 arg2)) + (if (= (-> arg1 0) (-> arg1 2)) + (goto cfg-26) + ) + ) + (+! v1-4 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (if (>= v1-4 127) + (goto cfg-26) + ) + ) + (label cfg-26) + (when (= arg2 1) + (+! v1-4 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + ) + (set! (-> arg0 0) (the-as uint (- v1-4))) + (let ((a1-21 (&-> arg0 1)) + (a2-4 (+ s4-0 1)) + ) + (dotimes (t0-0 v1-4) + (set! (-> a1-21 t0-0) (-> a0-4 t0-0)) + ) + (set! arg0 (&+ a1-21 v1-4)) + (set! s4-0 (+ a2-4 v1-4)) + ) + ) + ) + ) + ) + (if (< arg3 (+ s4-0 131)) + (format 0 "(GOMI) Warning: May have run out of bigmap bit mask compression memory~%") + ) + (when (= arg2 1) + (set! (-> arg0 0) (the-as uint -1)) + (set! (-> arg0 1) (-> arg1 0)) + (set! arg0 (&-> arg0 2)) + (+! s4-0 2) + (&-> arg1 1) + ) + (set! (-> arg0 0) (the-as uint 0)) + (&-> arg0 1) + (+ s4-0 1) + ) + (none) + ) + + + + diff --git a/test/decompiler/reference/jak2/engine/load/loader_REF.gc b/test/decompiler/reference/jak2/engine/load/loader_REF.gc index e2da50d148..f35ee993ec 100644 --- a/test/decompiler/reference/jak2/engine/load/loader_REF.gc +++ b/test/decompiler/reference/jak2/engine/load/loader_REF.gc @@ -1177,7 +1177,7 @@ (restore-load-state-and-cleanup *load-state*) (set! (-> *art-control* active-stream) #f) (logclear! (-> self skel status) (joint-control-status spooling spooling-not-last-block)) - (if (zero? (logand (-> self skel status) (joint-control-status sync-math))) + (if (not (logtest? (-> self skel status) (joint-control-status sync-math))) (logclear! (-> self skel status) (joint-control-status sync-math)) ) (cond diff --git a/test/decompiler/reference/jak2/engine/math/math_REF.gc b/test/decompiler/reference/jak2/engine/math/math_REF.gc index 733ff11455..774930df70 100644 --- a/test/decompiler/reference/jak2/engine/math/math_REF.gc +++ b/test/decompiler/reference/jak2/engine/math/math_REF.gc @@ -531,7 +531,7 @@ (let ((v1-0 1)) (while (nonzero? arg0) (+! arg0 -1) - (if (zero? (logand arg1 v1-0)) + (if (not (logtest? arg1 v1-0)) (+! s4-0 1) ) (set! v1-0 (* v1-0 2)) diff --git a/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc b/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc index d81d50f721..b02fd9ead4 100644 --- a/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc @@ -396,7 +396,7 @@ (user-list engine :offset-assert 36) (next-nav-mesh surface :offset-assert 40) (prev-nav-mesh surface :offset-assert 44) - (bounds sphere :inline :offset-assert 48) + (bounds vector :inline :offset-assert 48) (origin vector :inline :offset 48) (entity entity :offset-assert 64) (link-array (array nav-mesh-link) :offset-assert 68) diff --git a/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc b/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc new file mode 100644 index 0000000000..1f1bbd1248 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc @@ -0,0 +1,600 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type rigid-body-info +(deftype rigid-body-info (structure) + ((mass float :offset-assert 0) + (inv-mass float :offset-assert 4) + (linear-damping float :offset-assert 8) + (angular-damping float :offset-assert 12) + (bounce-factor float :offset-assert 16) + (friction-factor float :offset-assert 20) + (bounce-mult-factor float :offset-assert 24) + (cm-offset-joint vector :inline :offset-assert 32) + (inv-inertial-tensor matrix :inline :offset-assert 48) + (inertial-tensor matrix :inline :offset-assert 112) + (inertial-tensor-box meters 3 :offset-assert 176) + ) + :method-count-assert 10 + :size-assert #xbc + :flag-assert #xa000000bc + (:methods + (rigid-body-info-method-9 (_type_) none 9) + ) + ) + +;; definition for method 3 of type rigid-body-info +(defmethod inspect rigid-body-info ((obj rigid-body-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-info) + (format #t "~1Tmass: ~f~%" (-> obj mass)) + (format #t "~1Tinv-mass: ~f~%" (-> obj inv-mass)) + (format #t "~1Tlinear-damping: ~f~%" (-> obj linear-damping)) + (format #t "~1Tangular-damping: ~f~%" (-> obj angular-damping)) + (format #t "~1Tbounce-factor: ~f~%" (-> obj bounce-factor)) + (format #t "~1Tfriction-factor: ~f~%" (-> obj friction-factor)) + (format #t "~1Tbounce-mult-factor: ~f~%" (-> obj bounce-mult-factor)) + (format #t "~1Tcm-offset-joint: ~`vector`P~%" (-> obj cm-offset-joint)) + (format #t "~1Tinv-inertial-tensor: #~%" (-> obj inv-inertial-tensor)) + (format #t "~1Tinertial-tensor: #~%" (-> obj inertial-tensor)) + (format #t "~1Tinertial-tensor-box[3] @ #x~X~%" (-> obj inertial-tensor-box)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-object-extra-info +(deftype rigid-body-object-extra-info (structure) + ((max-time-step float :offset-assert 0) + (gravity meters :offset-assert 4) + (idle-distance meters :offset-assert 8) + (attack-force-scale float :offset-assert 12) + ) + :pack-me + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type rigid-body-object-extra-info +(defmethod inspect rigid-body-object-extra-info ((obj rigid-body-object-extra-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-object-extra-info) + (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-object-constants +(deftype rigid-body-object-constants (structure) + ((info rigid-body-info :inline :offset-assert 0) + (mass float :offset 0) + (inv-mass float :offset 4) + (cm-joint-x meters :offset 32) + (cm-joint-y meters :offset 36) + (cm-joint-z meters :offset 40) + (linear-damping float :offset 8) + (angular-damping float :offset 12) + (bounce-factor float :offset 16) + (friction-factor float :offset 20) + (inertial-tensor-x meters :offset 176) + (inertial-tensor-y meters :offset 180) + (inertial-tensor-z meters :offset 184) + (extra rigid-body-object-extra-info :inline :offset-assert 188) + (max-time-step float :offset 188) + (gravity meters :offset 192) + (idle-distance meters :offset 196) + (attack-force-scale float :offset 200) + (name basic :offset-assert 204) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) + +;; definition for method 3 of type rigid-body-object-constants +(defmethod inspect rigid-body-object-constants ((obj rigid-body-object-constants)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-object-constants) + (format #t "~1Tinfo: #~%" (&-> obj mass)) + (format #t "~1Tmass: ~f~%" (-> obj mass)) + (format #t "~1Tinv-mass: ~f~%" (-> obj inv-mass)) + (format #t "~1Tcm-joint-x: (meters ~m)~%" (-> obj cm-joint-x)) + (format #t "~1Tcm-joint-y: (meters ~m)~%" (-> obj cm-joint-y)) + (format #t "~1Tcm-joint-z: (meters ~m)~%" (-> obj cm-joint-z)) + (format #t "~1Tlinear-damping: ~f~%" (-> obj linear-damping)) + (format #t "~1Tangular-damping: ~f~%" (-> obj angular-damping)) + (format #t "~1Tbounce-factor: ~f~%" (-> obj bounce-factor)) + (format #t "~1Tfriction-factor: ~f~%" (-> obj friction-factor)) + (format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x)) + (format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y)) + (format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z)) + (format #t "~1Textra: #~%" (&-> obj max-time-step)) + (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (format #t "~1Tname: ~A~%" (-> obj name)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-impact +(deftype rigid-body-impact (structure) + ((point vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (impulse float :offset-assert 48) + (pat uint32 :offset-assert 52) + (rbody basic :offset-assert 56) + (prim-id uint32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +;; definition for method 3 of type rigid-body-impact +(defmethod inspect rigid-body-impact ((obj rigid-body-impact)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-impact) + (format #t "~1Tpoint: ~`vector`P~%" (-> obj point)) + (format #t "~1Tnormal: ~`vector`P~%" (-> obj normal)) + (format #t "~1Tvelocity: ~`vector`P~%" (-> obj velocity)) + (format #t "~1Timpulse: ~f~%" (-> obj impulse)) + (format #t "~1Tpat: ~D~%" (-> obj pat)) + (format #t "~1Trbody: ~A~%" (-> obj rbody)) + (format #t "~1Tprim-id: ~D~%" (-> obj prim-id)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body +(deftype rigid-body (structure) + ((work basic :offset-assert 0) + (info rigid-body-info :offset-assert 4) + (flags rigid-body-flag :offset-assert 8) + (force-callback basic :offset-assert 12) + (blocked-by basic :offset-assert 16) + (time-remaining float :offset-assert 20) + (step-count int16 :offset-assert 24) + (position vector :inline :offset-assert 32) + (rot vector :inline :offset-assert 48) + (rotation quaternion :inline :offset 48) + (lin-momentum vector :inline :offset-assert 64) + (ang-momentum vector :inline :offset-assert 80) + (force vector :inline :offset-assert 96) + (torque vector :inline :offset-assert 112) + (lin-velocity vector :inline :offset-assert 128) + (ang-velocity vector :inline :offset-assert 144) + (matrix matrix :inline :offset-assert 160) + (inv-i-world matrix :inline :offset-assert 224) + ) + :method-count-assert 32 + :size-assert #x120 + :flag-assert #x2000000120 + (:methods + (rigid-body-method-9 (_type_) none 9) + (rigid-body-method-10 (_type_) none 10) + (rigid-body-method-11 (_type_) none 11) + (rigid-body-method-12 (_type_ float) none 12) + (rigid-body-method-13 (_type_) none 13) + (rigid-body-method-14 (_type_ float) none 14) + (rigid-body-method-15 () none 15) + (clear-force-torque! (_type_) none 16) + (clear-momentum! (_type_) none 17) + (rigid-body-method-18 (_type_ vector vector) none 18) + (rigid-body-method-19 (_type_ vector vector) none 19) + (rigid-body-method-20 (_type_ vector) none 20) + (rigid-body-method-21 (_type_ vector vector float) none 21) + (rigid-body-method-22 (_type_ vector vector) vector 22) + (rigid-body-method-23 (_type_ vector) vector 23) + (rigid-body-method-24 (_type_) none 24) + (rigid-body-method-25 (_type_ rigid-body-info vector quaternion basic) none 25) + (rigid-body-method-26 (_type_ vector quaternion) none 26) + (print-physics (_type_ object) none 27) + (print-force-torque (_type_ object) none 28) + (print-position-rotation (_type_ object) none 29) + (print-momentum (_type_ object) none 30) + (print-velocity (_type_ object) none 31) + ) + ) + +;; definition for method 3 of type rigid-body +(defmethod inspect rigid-body ((obj rigid-body)) + (when (not obj) + (set! obj obj) + (goto cfg-16) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body) + (format #t "~1Twork: ~A~%" (-> obj work)) + (format #t "~1Tinfo: #~%" (-> obj info)) + (format #t "~1Tflags: #x~X : (rigid-body-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand s5-0 (rigid-body-flag active)) (rigid-body-flag active)) + (format #t "active ") + ) + (if (= (logand s5-0 (rigid-body-flag blocker)) (rigid-body-flag blocker)) + (format #t "blocker ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-physics)) (rigid-body-flag enable-physics)) + (format #t "enable-physics ") + ) + (if (= (logand s5-0 (rigid-body-flag display-marks)) (rigid-body-flag display-marks)) + (format #t "display-marks ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-collision)) (rigid-body-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-flag debug)) (rigid-body-flag debug)) + (format #t "debug ") + ) + ) + (format #t ")~%") + (format #t "~1Tforce-callback: ~A~%" (-> obj force-callback)) + (format #t "~1Tblocked-by: ~A~%" (-> obj blocked-by)) + (format #t "~1Ttime-remaining: ~f~%" (-> obj time-remaining)) + (format #t "~1Tstep-count: ~D~%" (-> obj step-count)) + (format #t "~1Tposition: ~`vector`P~%" (-> obj position)) + (format #t "~1Trot: ~`vector`P~%" (-> obj rotation)) + (format #t "~1Trotation: #~%" (-> obj rotation)) + (format #t "~1Tlin-momentum: ~`vector`P~%" (-> obj lin-momentum)) + (format #t "~1Tang-momentum: ~`vector`P~%" (-> obj ang-momentum)) + (format #t "~1Tforce: ~`vector`P~%" (-> obj force)) + (format #t "~1Ttorque: ~`vector`P~%" (-> obj torque)) + (format #t "~1Tlin-velocity: ~`vector`P~%" (-> obj lin-velocity)) + (format #t "~1Tang-velocity: ~`vector`P~%" (-> obj ang-velocity)) + (format #t "~1Tmatrix: #~%" (-> obj matrix)) + (format #t "~1Tinv-i-world: #~%" (-> obj inv-i-world)) + (label cfg-16) + obj + ) + +;; definition of type rigid-body-control +(deftype rigid-body-control (basic) + ((process process :offset-assert 4) + (state rigid-body :inline :offset-assert 16) + (work basic :offset 16) + (info rigid-body-info :offset 20) + (flags rigid-body-flag :offset 24) + (force-callback basic :offset 28) + (blocked-by basic :offset 32) + (time-remaining float :offset 36) + (step-count int16 :offset 40) + (position vector :inline :offset 48) + (rot vector :inline :offset 64) + (rotation quaternion :inline :offset 64) + (lin-momentum vector :inline :offset 80) + (ang-momentum vector :inline :offset 96) + (force vector :inline :offset 112) + (torque vector :inline :offset 128) + (lin-velocity vector :inline :offset 144) + (ang-velocity vector :inline :offset 160) + (matrix matrix :inline :offset 176) + (inv-i-world matrix :inline :offset 240) + ) + :method-count-assert 26 + :size-assert #x130 + :flag-assert #x1a00000130 + (:methods + (rigid-body-control-method-9 (_type_) none 9) + (rigid-body-control-method-10 (_type_) none 10) + (rigid-body-control-method-11 (_type_) none 11) + (rigid-body-control-method-12 (_type_ float) none 12) + (rigid-body-control-method-13 (_type_) none 13) + (rigid-body-control-method-14 (_type_ float) none 14) + (clear-force-torque! (_type_) none 15) + (clear-momentum! (_type_) none 16) + (rigid-body-control-method-17 (_type_ vector vector) none 17) + (rigid-body-control-method-18 (_type_ vector vector) none 18) + (rigid-body-control-method-19 (_type_ vector) none 19) + (rigid-body-control-method-20 (_type_ vector vector float) none 20) + (rigid-body-control-method-21 (_type_ vector vector) vector 21) + (rigid-body-control-method-22 (_type_ vector) vector 22) + (rigid-body-control-method-23 (_type_) none 23) + (rigid-body-control-method-24 (_type_ rigid-body-info vector quaternion basic) none 24) + (rigid-body-control-method-25 (_type_ vector quaternion) none 25) + ) + ) + +;; definition for method 3 of type rigid-body-control +(defmethod inspect rigid-body-control ((obj rigid-body-control)) + (when (not obj) + (set! obj obj) + (goto cfg-16) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tprocess: ~A~%" (-> obj process)) + (format #t "~1Tstate: #~%" (-> obj state)) + (format #t "~1Twork: ~A~%" (-> obj state work)) + (format #t "~1Tinfo: #~%" (-> obj state info)) + (format #t "~1Tflags: #x~X : (rigid-body-flag " (-> obj state flags)) + (let ((s5-0 (-> obj state flags))) + (if (= (logand s5-0 (rigid-body-flag active)) (rigid-body-flag active)) + (format #t "active ") + ) + (if (= (logand s5-0 (rigid-body-flag blocker)) (rigid-body-flag blocker)) + (format #t "blocker ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-physics)) (rigid-body-flag enable-physics)) + (format #t "enable-physics ") + ) + (if (= (logand s5-0 (rigid-body-flag display-marks)) (rigid-body-flag display-marks)) + (format #t "display-marks ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-collision)) (rigid-body-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-flag debug)) (rigid-body-flag debug)) + (format #t "debug ") + ) + ) + (format #t ")~%") + (format #t "~1Tforce-callback: ~A~%" (-> obj state force-callback)) + (format #t "~1Tblocked-by: ~A~%" (-> obj state blocked-by)) + (format #t "~1Ttime-remaining: ~f~%" (-> obj state time-remaining)) + (format #t "~1Tstep-count: ~D~%" (-> obj state step-count)) + (format #t "~1Tposition: ~`vector`P~%" (-> obj state position)) + (format #t "~1Trot: ~`vector`P~%" (-> obj state rotation)) + (format #t "~1Trotation: #~%" (-> obj state rotation)) + (format #t "~1Tlin-momentum: ~`vector`P~%" (-> obj state lin-momentum)) + (format #t "~1Tang-momentum: ~`vector`P~%" (-> obj state ang-momentum)) + (format #t "~1Tforce: ~`vector`P~%" (-> obj state force)) + (format #t "~1Ttorque: ~`vector`P~%" (-> obj state torque)) + (format #t "~1Tlin-velocity: ~`vector`P~%" (-> obj state lin-velocity)) + (format #t "~1Tang-velocity: ~`vector`P~%" (-> obj state ang-velocity)) + (format #t "~1Tmatrix: #~%" (-> obj state matrix)) + (format #t "~1Tinv-i-world: #~%" (-> obj state inv-i-world)) + (label cfg-16) + obj + ) + +;; definition for method 9 of type rigid-body-control +(defmethod rigid-body-control-method-9 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-9 (-> obj state)) + (none) + ) + +;; definition for method 10 of type rigid-body-control +(defmethod rigid-body-control-method-10 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-10 (-> obj state)) + (none) + ) + +;; definition for method 11 of type rigid-body-control +(defmethod rigid-body-control-method-11 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-11 (-> obj state)) + (none) + ) + +;; definition for method 12 of type rigid-body-control +(defmethod rigid-body-control-method-12 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-12 (-> obj state) arg0) + (none) + ) + +;; definition for method 13 of type rigid-body-control +(defmethod rigid-body-control-method-13 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-13 (-> obj state)) + (none) + ) + +;; definition for method 14 of type rigid-body-control +(defmethod rigid-body-control-method-14 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-14 (-> obj state) arg0) + (none) + ) + +;; definition for method 15 of type rigid-body-control +(defmethod clear-force-torque! rigid-body-control ((obj rigid-body-control)) + (clear-force-torque! (-> obj state)) + (none) + ) + +;; definition for method 16 of type rigid-body-control +(defmethod clear-momentum! rigid-body-control ((obj rigid-body-control)) + (clear-momentum! (-> obj state)) + (none) + ) + +;; definition for method 17 of type rigid-body-control +(defmethod rigid-body-control-method-17 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-18 (-> obj state) arg0 arg1) + (none) + ) + +;; definition for method 18 of type rigid-body-control +(defmethod rigid-body-control-method-18 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-19 (-> obj state) arg0 arg1) + (none) + ) + +;; definition for method 19 of type rigid-body-control +(defmethod rigid-body-control-method-19 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-20 (-> obj state) arg0) + (none) + ) + +;; definition for method 20 of type rigid-body-control +(defmethod rigid-body-control-method-20 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector) (arg2 float)) + (rigid-body-method-21 (-> obj state) arg0 arg1 arg2) + (none) + ) + +;; definition for method 21 of type rigid-body-control +(defmethod rigid-body-control-method-21 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-22 (-> obj state) arg0 arg1) + ) + +;; definition for method 22 of type rigid-body-control +(defmethod rigid-body-control-method-22 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-23 (-> obj state) arg0) + ) + +;; definition for method 23 of type rigid-body-control +(defmethod rigid-body-control-method-23 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-24 (-> obj state)) + (none) + ) + +;; definition for method 24 of type rigid-body-control +(defmethod rigid-body-control-method-24 rigid-body-control ((obj rigid-body-control) (arg0 rigid-body-info) (arg1 vector) (arg2 quaternion) (arg3 basic)) + (rigid-body-method-25 (-> obj state) arg0 arg1 arg2 arg3) + (none) + ) + +;; definition for method 25 of type rigid-body-control +(defmethod rigid-body-control-method-25 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 quaternion)) + (rigid-body-method-26 (-> obj state) arg0 arg1) + (none) + ) + +;; definition of type rigid-body-object +(deftype rigid-body-object (process-focusable) + ((info rigid-body-object-constants :offset-assert 204) + (flags rigid-body-object-flag :offset-assert 208) + (max-time-step float :offset-assert 216) + (incoming-attack-id uint32 :offset-assert 220) + (player-touch-time time-frame :offset-assert 224) + (disturbed-time time-frame :offset-assert 232) + (player-force-position vector :inline :offset-assert 240) + (player-force vector :inline :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 53 + :size-assert #x110 + :flag-assert #x3500900110 + (:methods + (rigid-body-object-method-27 () none 27) + (rigid-body-object-method-28 () none 28) + (rigid-body-object-method-29 () none 29) + (rigid-body-object-method-30 () none 30) + (rigid-body-object-method-31 () none 31) + (rigid-body-object-method-32 () none 32) + (rigid-body-object-method-33 () none 33) + (rigid-body-object-method-34 () none 34) + (rigid-body-object-method-35 () none 35) + (rigid-body-object-method-36 () none 36) + (rigid-body-object-method-37 () none 37) + (rigid-body-object-method-38 () none 38) + (rigid-body-object-method-39 () none 39) + (rigid-body-object-method-40 () none 40) + (rigid-body-object-method-41 () none 41) + (rigid-body-object-method-42 () none 42) + (rigid-body-object-method-43 () none 43) + (rigid-body-object-method-44 () none 44) + (rigid-body-object-method-45 () none 45) + (rigid-body-object-method-46 () none 46) + (rigid-body-object-method-47 () none 47) + (rigid-body-object-method-48 () none 48) + (rigid-body-object-method-49 () none 49) + (rigid-body-object-method-50 () none 50) + (rigid-body-object-method-51 () none 51) + (rigid-body-object-method-52 () none 52) + ) + ) + +;; definition for method 3 of type rigid-body-object +(defmethod inspect rigid-body-object ((obj rigid-body-object)) + (when (not obj) + (set! obj obj) + (goto cfg-22) + ) + (let ((t9-0 (method-of-type process-focusable inspect))) + (t9-0 obj) + ) + (format #t "~2Tinfo: #~%" (-> obj info)) + (format #t "~2Tflags: #x~X : (rigid-body-object-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand s5-0 (rigid-body-object-flag dead)) (rigid-body-object-flag dead)) + (format #t "dead ") + ) + (if (= (logand s5-0 (rigid-body-object-flag damaged)) (rigid-body-object-flag damaged)) + (format #t "damaged ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-contact-force)) (rigid-body-object-flag player-contact-force)) + (format #t "player-contact-force ") + ) + (if (= (logand s5-0 (rigid-body-object-flag disturbed)) (rigid-body-object-flag disturbed)) + (format #t "disturbed ") + ) + (if (= (logand s5-0 (rigid-body-object-flag enable-collision)) (rigid-body-object-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-edge-grabbing)) (rigid-body-object-flag player-edge-grabbing)) + (format #t "player-edge-grabbing ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-touching)) (rigid-body-object-flag player-touching)) + (format #t "player-touching ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-standing-on)) (rigid-body-object-flag player-standing-on)) + (format #t "player-standing-on ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-impulse-force)) (rigid-body-object-flag player-impulse-force)) + (format #t "player-impulse-force ") + ) + ) + (format #t ")~%") + (format #t "~2Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~2Tincoming-attack-id: ~D~%" (-> obj incoming-attack-id)) + (format #t "~2Tplayer-touch-time: ~D~%" (-> obj player-touch-time)) + (format #t "~2Tdisturbed-time: ~D~%" (-> obj disturbed-time)) + (format #t "~2Tplayer-force-position: #~%" (-> obj player-force-position)) + (format #t "~2Tplayer-force: #~%" (-> obj player-force)) + (label cfg-22) + obj + ) + +;; definition of type rigid-body-queue +(deftype rigid-body-queue (structure) + ((count int8 :offset-assert 0) + (array uint64 128 :offset 8) + ) + :method-count-assert 17 + :size-assert #x408 + :flag-assert #x1100000408 + (:methods + (rigid-body-queue-method-9 () none 9) + (rigid-body-queue-method-10 () none 10) + (rigid-body-queue-method-11 () none 11) + (rigid-body-queue-method-12 () none 12) + (rigid-body-queue-method-13 () none 13) + (rigid-body-queue-method-14 () none 14) + (rigid-body-queue-method-15 () none 15) + (rigid-body-queue-method-16 () none 16) + ) + ) + +;; definition for method 3 of type rigid-body-queue +(defmethod inspect rigid-body-queue ((obj rigid-body-queue)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-queue) + (format #t "~1Tcount: ~D~%" (-> obj count)) + (format #t "~1Tarray[128] @ #x~X~%" (-> obj array)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +0 + + + + diff --git a/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc b/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc index ba0a6fab8c..46b8cc90df 100644 --- a/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc +++ b/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc @@ -280,11 +280,13 @@ ) ) (sphere<-vector+r! s1-0 arg1 arg2) - (let ((t9-4 (method-of-object *actor-hash* spatial-hash-method-36))) - (-> s2-1 data) - (-> s2-1 allocated-length) - (set! (-> s2-1 length) (the-as int (t9-4))) - ) + (set! (-> s2-1 length) (spatial-hash-method-36 + *actor-hash* + s1-0 + (the-as (pointer collide-shape) (-> s2-1 data)) + (-> s2-1 allocated-length) + ) + ) (let ((gp-2 (find-nearest-focusable (the-as (array collide-shape) s2-1) arg1 diff --git a/test/decompiler/reference/jak2/engine/process-drawable/process-focusable_REF.gc b/test/decompiler/reference/jak2/engine/process-drawable/process-focusable_REF.gc index 7e33b3bbdb..7cbd7a163c 100644 --- a/test/decompiler/reference/jak2/engine/process-drawable/process-focusable_REF.gc +++ b/test/decompiler/reference/jak2/engine/process-drawable/process-focusable_REF.gc @@ -37,6 +37,7 @@ ;; definition for method 20 of type process-focusable ;; WARN: Return type mismatch structure vs vector. (defmethod get-trans process-focusable ((obj process-focusable) (arg0 int)) + "@returns the `trans` [[vector]] from the process's `root` (typically either a [[trsqv]] or a [[collide-shape]]" (let ((gp-0 (-> obj root))) (the-as vector (cond ((zero? arg0) diff --git a/test/decompiler/reference/jak2/engine/process-drawable/simple-focus_REF.gc b/test/decompiler/reference/jak2/engine/process-drawable/simple-focus_REF.gc new file mode 100644 index 0000000000..b3e6491a87 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/process-drawable/simple-focus_REF.gc @@ -0,0 +1,76 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type simple-focus +(deftype simple-focus (process-focusable) + ((first-time? symbol :offset-assert 204) + ) + :heap-base #x50 + :method-count-assert 28 + :size-assert #xd0 + :flag-assert #x1c005000d0 + (:methods + (idle () _type_ :state 27) + ) + ) + +;; definition for method 3 of type simple-focus +(defmethod inspect simple-focus ((obj simple-focus)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-focusable inspect))) + (t9-0 obj) + ) + (format #t "~2Tfirst-time?: ~A~%" (-> obj first-time?)) + (label cfg-4) + obj + ) + +;; definition for method 20 of type simple-focus +(defmethod get-trans simple-focus ((obj simple-focus) (arg0 int)) + "@returns the `trans` [[vector]] from the process's `root` (typically either a [[trsqv]] or a [[collide-shape]]" + (-> obj root trans) + ) + +;; definition for method 12 of type simple-focus +(defmethod run-logic? simple-focus ((obj simple-focus)) + (when (-> obj first-time?) + (set! (-> obj first-time?) #f) + #t + ) + ) + +;; failed to figure out what this is: +(defstate idle (simple-focus) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (when (= v1-0 'move-trans) + (let ((v0-0 (-> self root trans))) + (set! (-> v0-0 quad) (-> (the-as vector (-> event param 0)) quad)) + v0-0 + ) + ) + ) + ) + ) + :code (the-as (function none :behavior simple-focus) sleep-code) + ) + +;; definition for function simple-focus-init-by-other +;; WARN: Return type mismatch object vs none. +(defbehavior simple-focus-init-by-other simple-focus () + "Initializes the new [[simple-focus]]. `first-time?` will be set to [[#t]]" + (let ((root (new 'process 'trsqv))) + (set! (-> self root) root) + (vector-identity! (-> root scale)) + (quaternion-identity! (-> root quat)) + ) + (logclear! (-> self mask) (process-mask enemy)) + (set! (-> self first-time?) #t) + (set! (-> self event-hook) (-> (method-of-object self idle) event)) + (go-virtual idle) + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/process-drawable/simple-nav-sphere_REF.gc b/test/decompiler/reference/jak2/engine/process-drawable/simple-nav-sphere_REF.gc new file mode 100644 index 0000000000..c2f184bd95 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/process-drawable/simple-nav-sphere_REF.gc @@ -0,0 +1,163 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type simple-nav-sphere +(deftype simple-nav-sphere (process-drawable) + ((root-override collide-shape :offset 128) + (first-time? symbol :offset-assert 200) + (track-joint int32 :offset-assert 204) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xd0 + :flag-assert #x16005000d0 + (:methods + (idle () _type_ :state 20) + (active () _type_ :state 21) + ) + ) + +;; definition for method 3 of type simple-nav-sphere +(defmethod inspect simple-nav-sphere ((obj simple-nav-sphere)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tfirst-time?: ~A~%" (-> obj first-time?)) + (format #t "~2Ttrack-joint: ~D~%" (-> obj track-joint)) + (label cfg-4) + obj + ) + +;; definition for function simple-nav-sphere-event-handler +;; WARN: Return type mismatch object vs none. +(defbehavior simple-nav-sphere-event-handler simple-nav-sphere ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('die-fast) + (go empty-state) + ) + (('move-trans) + (collide-shape-method-29 (-> self root-override) (the-as vector (-> event param 0))) + #t + ) + (('set-radius) + (let ((radius (the-as float (-> event param 0))) + (collide-shape (-> self root-override)) + ) + (set! (-> collide-shape nav-radius) radius) + (set! (-> collide-shape root-prim local-sphere w) radius) + (collide-shape-method-46 collide-shape) + ) + #t + ) + ) + (none) + ) + +;; definition for method 12 of type simple-nav-sphere +(defmethod run-logic? simple-nav-sphere ((obj simple-nav-sphere)) + (cond + (*display-nav-marks* + #t + ) + ((>= (-> obj track-joint) 0) + #t + ) + ((-> obj first-time?) + (set! (-> obj first-time?) #f) + #t + ) + ) + ) + +;; failed to figure out what this is: +(defstate idle (simple-nav-sphere) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior simple-nav-sphere) + simple-nav-sphere-event-handler + ) + :trans (behavior () + (if *display-nav-marks* + (add-debug-sphere + #t + (bucket-id debug2) + (-> self root-override trans) + (-> self root-override nav-radius) + (new 'static 'rgba :r #x80 :g #x40 :a #x80) + ) + ) + (none) + ) + :code (the-as (function none :behavior simple-nav-sphere) sleep-code) + ) + +;; failed to figure out what this is: +(defstate active (simple-nav-sphere) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior simple-nav-sphere) + simple-nav-sphere-event-handler + ) + :trans (behavior () + (let ((v1-0 (ppointer->process (-> self parent))) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! gp-0 (-> (the-as process-drawable v1-0) node-list data (-> self track-joint))) + (collide-shape-method-29 (-> self root-override) gp-0) + ) + (none) + ) + :code (the-as (function none :behavior simple-nav-sphere) sleep-code) + ) + +;; definition for function simple-nav-sphere-init-by-other +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defbehavior simple-nav-sphere-init-by-other simple-nav-sphere ((arg0 float) (arg1 vector) (arg2 nav-mesh) (arg3 int)) + (set! (-> self track-joint) arg3) + (set! (-> self first-time?) #t) + (let ((s5-0 (new 'process 'collide-shape self (collide-list-enum usually-hit-by-player)))) + (let ((v1-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-3 prim-core collide-as) (collide-spec obstacle)) + (set-vector! (-> v1-3 local-sphere) 0.0 0.0 0.0 4096.0) + (set! (-> s5-0 total-prims) (the-as uint 1)) + (set! (-> s5-0 root-prim) v1-3) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-6 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-6 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-6 prim-core collide-with)) + ) + (set! (-> s5-0 nav-radius) arg0) + (set! (-> s5-0 root-prim local-sphere w) arg0) + (if arg1 + (set! (-> s5-0 trans quad) (-> arg1 quad)) + ) + (vector-identity! (-> s5-0 scale)) + (quaternion-identity! (-> s5-0 quat)) + (let ((v1-11 (-> s5-0 root-prim))) + (set! (-> v1-11 prim-core collide-as) (collide-spec)) + (set! (-> v1-11 prim-core collide-with) (collide-spec)) + ) + 0 + (collide-shape-method-46 s5-0) + (set! (-> self root-override) s5-0) + ) + (logclear! (-> self mask) (process-mask actor-pause enemy)) + (set! (-> self event-hook) + (the-as (function process int symbol event-message-block object) simple-nav-sphere-event-handler) + ) + (if arg2 + (nav-mesh-method-29 arg2 self #f) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh self)) + ) + (if (>= (-> self track-joint) 0) + (go-virtual active) + (go-virtual idle) + ) + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc b/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc index a135141414..86a531f447 100644 --- a/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc +++ b/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc @@ -300,7 +300,7 @@ (cpad-get-data pad) (adjust-to-screen-flip pad) (cond - ((zero? (logand (-> pad valid) 128)) + ((not (logtest? (-> pad valid) 128)) (dotimes (buzz-i 2) (cond ((and (-> pad buzz) (< (get-current-time) (-> pad buzz-time buzz-i)) (= *master-mode* 'game)) diff --git a/test/decompiler/reference/jak2/engine/ps2/timer_REF.gc b/test/decompiler/reference/jak2/engine/ps2/timer_REF.gc index 8246088f7c..ef2666cfe4 100644 --- a/test/decompiler/reference/jak2/engine/ps2/timer_REF.gc +++ b/test/decompiler/reference/jak2/engine/ps2/timer_REF.gc @@ -189,7 +189,7 @@ ;; definition for method 11 of type clock (defmethod tick! clock ((obj clock)) - (if (zero? (logand (-> obj mask) (-> *kernel-context* prevent-from-run))) + (if (not (logtest? (-> obj mask) (-> *kernel-context* prevent-from-run))) (advance-by! obj (* (-> *display* time-factor) (-> *display* dog-ratio) (-> obj clock-ratio))) (set! (-> obj sparticle-data x) 0.0) ) diff --git a/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc b/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc index 401f60c10a..11fd905036 100644 --- a/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc @@ -3,12 +3,12 @@ ;; definition of type scene-actor (deftype scene-actor (basic) - ((name basic :offset-assert 4) + ((name string :offset-assert 4) (level basic :offset-assert 8) - (art-group basic :offset-assert 12) - (prefix basic :offset-assert 16) - (draw-frames basic :offset-assert 20) - (scissor-frames basic :offset-assert 24) + (art-group string :offset-assert 12) + (prefix string :offset-assert 16) + (draw-frames pair :offset-assert 20) + (scissor-frames pair :offset-assert 24) (camera int16 :offset-assert 28) (light-index uint8 :offset-assert 30) (shadow-mask uint8 :offset-assert 31) @@ -19,13 +19,13 @@ (shadow-volume-joint basic :offset-assert 48) (draw-seg uint64 :offset-assert 56) (no-draw-seg uint64 :offset-assert 64) - (process uint64 :offset-assert 72) + (process handle :offset-assert 72) ) :method-count-assert 10 :size-assert #x50 :flag-assert #xa00000050 (:methods - (scene-actor-method-9 () none 9) + (scene-actor-method-9 (_type_ scene-player) (pointer process) 9) ) ) @@ -59,37 +59,37 @@ ;; definition of type scene (deftype scene (art-group) - ((mask-to-clear uint32 :offset-assert 32) - (entity basic :offset-assert 36) - (art-group basic :offset-assert 40) - (anim basic :offset-assert 44) - (parts int32 :offset-assert 48) - (command-list basic :offset-assert 52) - (cut-list basic :offset-assert 56) - (wait-max-time time-frame :offset-assert 64) - (wait-air-time time-frame :offset-assert 72) - (wait-ground-time time-frame :offset-assert 80) - (draw-target basic :offset-assert 88) - (abort basic :offset-assert 92) - (actor basic :offset-assert 96) - (load-point basic :offset-assert 100) - (end-point basic :offset-assert 104) - (borrow basic :offset-assert 108) - (sfx-volume float :offset-assert 112) - (ambient-volume float :offset-assert 116) - (music-volume float :offset-assert 120) - (blackout-end basic :offset-assert 124) - (peaceful basic :offset-assert 128) - (music-delay float :offset-assert 132) - (save basic :offset-assert 136) - (scene-task uint16 :offset-assert 140) + ((mask-to-clear uint32 :offset-assert 32) + (entity string :offset-assert 36) + (art-group string :offset-assert 40) + (anim string :offset-assert 44) + (parts int32 :offset-assert 48) + (command-list basic :offset-assert 52) + (cut-list pair :offset-assert 56) + (wait-max-time time-frame :offset-assert 64) + (wait-air-time time-frame :offset-assert 72) + (wait-ground-time time-frame :offset-assert 80) + (draw-target level-load-info :offset-assert 88) + (abort basic :offset-assert 92) + (actor (array scene-actor) :offset-assert 96) + (load-point string :offset-assert 100) + (end-point string :offset-assert 104) + (borrow basic :offset-assert 108) + (sfx-volume float :offset-assert 112) + (ambient-volume float :offset-assert 116) + (music-volume float :offset-assert 120) + (blackout-end basic :offset-assert 124) + (peaceful basic :offset-assert 128) + (music-delay float :offset-assert 132) + (save basic :offset-assert 136) + (scene-task uint16 :offset-assert 140) ) :method-count-assert 17 :size-assert #x8e :flag-assert #x110000008e (:methods - (scene-method-15 () none 15) - (scene-method-16 () none 16) + (scene-method-15 (_type_ spool-anim) none 15) + (scene-method-16 (_type_) _type_ 16) ) ) @@ -135,40 +135,40 @@ ;; definition of type scene-player (deftype scene-player (process-drawable) - ((scene-list basic :offset-assert 200) - (scene basic :offset-assert 204) - (scene-index int32 :offset-assert 208) - (anim basic :offset-assert 212) - (next-anim basic :offset-assert 216) - (camera uint64 :offset-assert 224) - (main-entity basic :offset-assert 232) - (wait basic :offset-assert 236) - (old-target-pos transformq :inline :offset-assert 240) - (pre-cut-frame basic :offset-assert 288) - (preload-continue basic :offset-assert 292) - (dma-max uint32 :offset-assert 296) - (gui-id uint32 :offset-assert 300) - (aborted? basic :offset-assert 304) - (scene-start-time time-frame :offset-assert 312) - (targ-speed float :offset-assert 320) - (cur-speed float :offset-assert 324) - (speed-change-time time-frame :offset-assert 328) - (speed-press-time time-frame :offset-assert 336) - (speed-change-speed float :offset-assert 344) - (subtitle-change-time time-frame :offset-assert 352) - (user-sound uint32 4 :offset-assert 360) + ((scene-list (pointer symbol) :offset-assert 200) + (scene scene :offset-assert 204) + (scene-index int32 :offset-assert 208) + (anim spool-anim :offset-assert 212) + (next-anim spool-anim :offset-assert 216) + (camera handle :offset-assert 224) + (main-entity entity-actor :offset-assert 232) + (wait basic :offset-assert 236) + (old-target-pos transformq :inline :offset-assert 240) + (pre-cut-frame basic :offset-assert 288) + (preload-continue string :offset-assert 292) + (dma-max uint32 :offset-assert 296) + (gui-id uint32 :offset-assert 300) + (aborted? symbol :offset-assert 304) + (scene-start-time time-frame :offset-assert 312) + (targ-speed float :offset-assert 320) + (cur-speed float :offset-assert 324) + (speed-change-time time-frame :offset-assert 328) + (speed-press-time time-frame :offset-assert 336) + (speed-change-speed float :offset-assert 344) + (subtitle-change-time time-frame :offset-assert 352) + (user-sound uint32 4 :offset-assert 360) ) :heap-base #x100 :method-count-assert 26 :size-assert #x178 :flag-assert #x1a01000178 (:methods - (scene-player-method-20 () none 20) - (scene-player-method-21 () none 21) - (scene-player-method-22 () none 22) - (scene-player-method-23 () none 23) - (scene-player-method-24 () none 24) - (scene-player-method-25 () none 25) + (wait (symbol) _type_ :state 20) + (release () _type_ :state 21) + (play-anim () _type_ :state 22) + (scene-player-method-23 (_type_ string symbol) none 23) + (scene-player-method-24 (_type_ basic symbol) scene 24) + (scene-player-method-25 (_type_ float) none 25) ) ) diff --git a/test/decompiler/reference/jak2/engine/spatial_hash/actor-hash-h_REF.gc b/test/decompiler/reference/jak2/engine/spatial-hash/actor-hash-h_REF.gc similarity index 52% rename from test/decompiler/reference/jak2/engine/spatial_hash/actor-hash-h_REF.gc rename to test/decompiler/reference/jak2/engine/spatial-hash/actor-hash-h_REF.gc index aa4fb59d6b..5fbd2d4d50 100644 --- a/test/decompiler/reference/jak2/engine/spatial_hash/actor-hash-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/spatial-hash/actor-hash-h_REF.gc @@ -1,15 +1,11 @@ ;;-*-Lisp-*- (in-package goal) -;; definition for symbol *actor-list*, type pointer -(define *actor-list* (malloc 'global 1024)) +;; definition for symbol *actor-list*, type (pointer collide-shape) +(define *actor-list* (the-as (pointer collide-shape) (malloc 'global 1024))) ;; definition for symbol *actor-list-length*, type int (define *actor-list-length* 0) ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/spatial_hash/collide-hash-h_REF.gc b/test/decompiler/reference/jak2/engine/spatial-hash/collide-hash-h_REF.gc similarity index 100% rename from test/decompiler/reference/jak2/engine/spatial_hash/collide-hash-h_REF.gc rename to test/decompiler/reference/jak2/engine/spatial-hash/collide-hash-h_REF.gc diff --git a/test/decompiler/reference/jak2/engine/spatial_hash/spatial-hash-h_REF.gc b/test/decompiler/reference/jak2/engine/spatial-hash/spatial-hash-h_REF.gc similarity index 99% rename from test/decompiler/reference/jak2/engine/spatial_hash/spatial-hash-h_REF.gc rename to test/decompiler/reference/jak2/engine/spatial-hash/spatial-hash-h_REF.gc index 3bdae68477..6ad801527b 100644 --- a/test/decompiler/reference/jak2/engine/spatial_hash/spatial-hash-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/spatial-hash/spatial-hash-h_REF.gc @@ -225,7 +225,7 @@ (:methods (spatial-hash-method-34 () none 34) (spatial-hash-method-35 () none 35) - (spatial-hash-method-36 () none 36) + (spatial-hash-method-36 (_type_ sphere (pointer collide-shape) int) int 36) (spatial-hash-method-37 () none 37) (spatial-hash-method-38 () none 38) (spatial-hash-method-39 () none 39) diff --git a/test/decompiler/reference/jak2/engine/target/board/board-h_REF.gc b/test/decompiler/reference/jak2/engine/target/board/board-h_REF.gc index df213e44dc..d0a6cbb632 100644 --- a/test/decompiler/reference/jak2/engine/target/board/board-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/board-h_REF.gc @@ -417,13 +417,13 @@ ) (-> self board latch?) ) - (zero? (logand (focus-status dead hit grabbed in-head edge-grab pole board pilot mech dark) (-> self focus-status)) - ) + (not (logtest? (focus-status dead hit grabbed in-head edge-grab pole board pilot mech dark) (-> self focus-status)) + ) (or (zero? (-> self board)) (>= (- (-> self clock frame-counter) (-> self board board-time)) (seconds 0.5))) - (zero? (logand (state-flags sf17) (-> self state-flags))) + (not (logtest? (state-flags sf17) (-> self state-flags))) (< (-> self board board-time) (-> self control unknown-time-frame05)) - (zero? (logand (surface-flag no-board) (-> self control unknown-surface01 flags))) - (or (zero? (logand (-> self control unknown-surface01 flags) (surface-flag duck))) + (not (logtest? (surface-flag no-board) (-> self control unknown-surface01 flags))) + (or (not (logtest? (-> self control unknown-surface01 flags) (surface-flag duck))) (begin self (can-exit-duck?)) ) (not (and (logtest? (-> self water flags) (water-flags under-water)) diff --git a/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc b/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc index f8160360f4..b2651ede1a 100644 --- a/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc @@ -375,7 +375,7 @@ (t9-8 (the-as vector a0-4) (the-as float a1-0)) ) ) - (when (zero? (logand (-> self control old-status) (cshape-moving-flags on-surface))) + (when (not (logtest? (-> self control old-status) (cshape-moving-flags on-surface))) (let ((gp-0 (new 'stack-no-clear 'vector))) (set! (-> gp-0 quad) (-> self control trans quad)) (set! (-> gp-0 y) (+ 2048.0 (-> gp-0 y))) @@ -521,8 +521,8 @@ (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x) (< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 12288.0) (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) - (and (zero? (logand (water-flags touch-water) (-> self water flags))) - (zero? (logand (-> self state-flags) (state-flags sf7))) + (and (not (logtest? (water-flags touch-water) (-> self water flags))) + (not (logtest? (-> self state-flags) (state-flags sf7))) (not (and (-> self next-state) (= (-> self next-state name) 'target-board-wall-kick))) ) ) @@ -547,8 +547,8 @@ ;; failed to figure out what this is: (defstate target-board-stance (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('lip) (when (and (= (-> self control ground-pat mode) (pat-mode halfpipe)) (< (-> self control poly-angle) 0.5) @@ -565,7 +565,7 @@ ) (set! (-> self board halfpipe-lip-time) (-> self clock frame-counter)) (set! (-> self board halfpipe-side-time) (-> self clock frame-counter)) - (set! (-> self board halfpipe-lip-event) (the-as symbol (-> arg3 param 0))) + (set! (-> self board halfpipe-lip-event) (the-as symbol (-> event param 0))) (let ((v0-2 (the-as object (logior (-> self control root-prim prim-core action) (collide-action no-normal-reset)))) ) (set! (-> self control root-prim prim-core action) (the-as collide-action v0-2)) @@ -576,13 +576,13 @@ (('jump) (go target-board-jump - (the-as meters (-> arg3 param 0)) - (the-as meters (-> arg3 param 1)) - (the-as symbol (-> arg3 param 2)) + (the-as meters (-> event param 0)) + (the-as meters (-> event param 1)) + (the-as symbol (-> event param 2)) ) ) (else - (target-board-handler arg0 arg1 arg2 arg3) + (target-board-handler proc arg1 event-type event) ) ) ) @@ -618,7 +618,7 @@ ) :trans (behavior () (if (and (cpad-hold? (-> self control unknown-cpad-info00 number) l1) - (zero? (logand (-> self state-flags) (state-flags sf9))) + (not (logtest? (-> self state-flags) (state-flags sf9))) (< (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (the-as time-frame (-> *TARGET-bank* ground-timeout)) ) @@ -817,8 +817,7 @@ (none) ) :trans (behavior () - (if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1)) - ) + (if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1)) (logtest? (-> self state-flags) (state-flags sf9)) (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (the-as time-frame (-> *TARGET-bank* ground-timeout)) @@ -915,11 +914,11 @@ ;; failed to figure out what this is: (defstate target-board-jump (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'edge-grab) (< (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.1))) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'edge-grab) (< (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.1))) (return #f) ) - (target-board-handler arg0 arg1 arg2 arg3) + (target-board-handler proc arg1 event-type event) ) :enter (behavior ((arg0 meters) (arg1 meters) (arg2 symbol)) (local-vars @@ -1133,8 +1132,8 @@ ;; failed to figure out what this is: (defstate target-board-halfpipe (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('edge-grab) (format #t @@ -1179,14 +1178,14 @@ ) ) (('grenade) - (if (< (the-as float (-> arg3 param 0)) + (if (< (the-as float (-> event param 0)) (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) ) - (go target-board-grenade (process->handle arg0)) + (go target-board-grenade (process->handle proc)) ) ) (else - (target-board-handler arg0 arg1 arg2 arg3) + (target-board-handler proc arg1 event-type event) ) ) ) @@ -1675,8 +1674,7 @@ (let ((f0-9 (analog-input (the int (* 128.0 (-> s5-0 z))) 0.0 96.0 110.0 1.0)) (s4-0 0) ) - (while (not (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r1)) - ) + (while (not (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) r1)) (or (= f0-9 0.0) (jump-hit-ground-stuck?) (< (target-time-to-ground) (seconds 0.5))) ) (nonzero? s4-0) @@ -1842,8 +1840,7 @@ (set! (-> v1-0 z) (* -0.0078125 (+ -128.0 (the float (-> self control unknown-cpad-info00 lefty))))) (set! (-> v1-0 w) 1.0) (let ((f30-0 (analog-input (the int (* 128.0 (-> v1-0 z))) 0.0 96.0 110.0 1.0))) - (while (not (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1)) - ) + (while (not (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1)) (jump-hit-ground-stuck?) (< (target-time-to-ground) (seconds 0.3)) ) @@ -2009,8 +2006,7 @@ (let ((f0-9 (analog-input (the int (* 128.0 (-> s5-0 z))) 0.0 96.0 110.0 1.0)) (s4-0 0) ) - (while (not (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r1)) - ) + (while (not (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) r1)) (or (= f0-9 0.0) (jump-hit-ground-stuck?) (< (target-time-to-ground) (seconds 0.5))) ) (nonzero? s4-0) @@ -2236,13 +2232,13 @@ ;; failed to figure out what this is: (defstate target-board-ride-edge (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('edge-grab 'push-transv 'push-trans) #f ) (('end-mode) - (when (-> arg3 param 0) + (when (-> event param 0) (let ((v1-6 (/ (- (-> self clock frame-counter) (-> self board ride-start-time)) 300))) (if (> v1-6 0) (add-to-trick-list (-> self board) (board-tricks board-rail) (* 100.0 (the float v1-6))) @@ -2252,7 +2248,7 @@ (go target-board-turn-to (-> self control transv) (seconds 0.2)) ) (else - (target-board-handler arg0 arg1 arg2 arg3) + (target-board-handler proc arg1 event-type event) ) ) ) @@ -2510,13 +2506,13 @@ ;; failed to figure out what this is: (defstate target-board-grenade (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('target) (handle->process (-> self control unknown-handle02)) ) (else - (target-board-handler arg0 arg1 arg2 arg3) + (target-board-handler proc arg1 event-type event) ) ) ) @@ -2621,19 +2617,19 @@ ;; failed to figure out what this is: (defstate target-board-get-on (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack 'attack-or-shove 'attack-invinc) (target-attacked - arg2 - (the-as attack-info (-> arg3 param 1)) - arg0 - (the-as process (-> arg3 param 0)) + event-type + (the-as attack-info (-> event param 1)) + proc + (the-as process (-> event param 0)) target-hit ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -2779,13 +2775,13 @@ ;; failed to figure out what this is: (defstate target-board-pegasus (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('end-mode) (go target-jump 16384.0 16384.0 (the-as surface #f)) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -3082,21 +3078,21 @@ ;; failed to figure out what this is: (defstate target-board-grab (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) (else - (case arg2 + (case event-type (('end-mode) (go target-board-stance) ) (('clone-anim) - (go target-board-clone-anim (process->handle (the-as process (-> arg3 param 0)))) + (go target-board-clone-anim (process->handle (the-as process (-> event param 0)))) ) (('change-mode) - (case (-> arg3 param 0) + (case (-> event param 0) (('normal) enter-state 'stance @@ -3105,7 +3101,7 @@ ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -3147,11 +3143,11 @@ ;; failed to figure out what this is: (defstate target-board-clone-anim (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'trans) (= (-> arg3 param 0) 'restore)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'trans) (= (-> event param 0) 'restore)) (set! (-> self control unknown-word04) (the-as uint #f)) ) - ((-> target-board-grab event) arg0 arg1 arg2 arg3) + ((-> target-board-grab event) proc arg1 event-type event) ) :enter (-> target-clone-anim enter) :exit (behavior () @@ -3236,7 +3232,7 @@ ) self ((method-of-type attack-info attack-info-method-11)) - (when (zero? (logand (-> gp-0 mask) (attack-info-mask vector))) + (when (not (logtest? (-> gp-0 mask) (attack-info-mask vector))) (vector-z-quaternion! (-> gp-0 vector) (-> self control unknown-quaternion00)) (vector-xz-normalize! (-> gp-0 vector) (- (fabs (-> gp-0 shove-back)))) (set! (-> gp-0 vector y) (-> gp-0 shove-up)) diff --git a/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc b/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc index 9df181ff7d..b04b08001a 100644 --- a/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc @@ -62,7 +62,7 @@ :virtual #t :trans (behavior () (let ((v1-0 (-> self parent))) - (if (zero? (logand (-> (the-as target (if v1-0 + (if (not (logtest? (-> (the-as target (if v1-0 (the-as target (-> v1-0 0 self)) ) ) @@ -70,7 +70,7 @@ ) (focus-status in-head) ) - ) + ) (go-virtual idle #f) ) ) @@ -89,8 +89,8 @@ ;; failed to figure out what this is: (defstate idle (board) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('open) (go-virtual use) ) @@ -140,8 +140,8 @@ ;; failed to figure out what this is: (defstate use (board) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('close) (go-virtual idle #f) ) @@ -168,14 +168,14 @@ ((let ((v1-9 #x40000) (a0-3 (-> self parent)) ) - (zero? (logand (the-as focus-status v1-9) (-> (the-as target (if a0-3 + (not (logtest? (the-as focus-status v1-9) (-> (the-as target (if a0-3 (the-as target (-> a0-3 0 self)) ) ) focus-status ) ) - ) + ) ) (go-virtual idle #f) ) diff --git a/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc b/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc index efa988bcce..256a4481f6 100644 --- a/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc @@ -923,7 +923,7 @@ ) (set! gp-0 1) ) - ((zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + ((not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (set! gp-0 2) ) ) @@ -1044,7 +1044,7 @@ ) ) ) - (sparticle-launch-control-method-11 (-> self board part-control) (-> self control trans)) + (spawn (-> self board part-control) (-> self control trans)) (let ((t9-26 (method-of-object (-> self skel effect) effect-control-method-10))) 'effect-board-poof 0 @@ -1271,7 +1271,7 @@ (when (and (logtest? (-> self control status) (cshape-moving-flags t-wall)) (and (< 16384.0 f30-0) (not (and (-> self next-state) (= (-> self next-state name) 'target-board-smack))) - (zero? (logand (focus-status halfpipe) (-> self focus-status))) + (not (logtest? (focus-status halfpipe) (-> self focus-status))) (!= (-> self control ground-pat mode) 3) (>= (- (-> self clock frame-counter) (-> self board halfpipe-time)) (seconds 0.1)) ) @@ -1473,10 +1473,7 @@ (logior! (-> self control root-prim prim-core action) (collide-action check-edge)) (logclear! (-> self control root-prim prim-core action) (collide-action check-edge)) ) - (if (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) - (pad-buttons circle square) - ) - ) + (if (not (cpad-hold? (-> self control unknown-cpad-info00 number) circle square)) (set! (-> self board ride-lock) #f) ) (cond @@ -1584,7 +1581,7 @@ (set! (-> self board unknown-time-frame00) (-> self clock frame-counter)) ) ) - (when (and (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (< 0.0 f28-0) (or (and (or (< (target-height-above-ground) 4096.0) (< (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) @@ -1668,14 +1665,14 @@ ) (if (and (= (-> self control unknown-float12) 0.0) (>= (-> self clock frame-counter) (-> self control unknown-time-frame00)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) (>= (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) ) (rot->dir-targ! (-> self control)) ) (when (and (< (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (seconds 0.1)) (>= (-> self clock frame-counter) (-> self control unknown-time-frame00)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) (>= (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) ) (let* ((s3-0 @@ -2061,7 +2058,7 @@ ) (if (probe-test (-> self control) s3-5 (new 'static 'pat-surface :noentity #x1 :noboard #x1 :probe #x1)) (set! (-> self control status) (logior (cshape-moving-flags csmf16) (-> self control status))) - ((method-of-object (-> self control) collide-shape-method-28)) + (move-by-vector! (-> self control) s3-5) ) ) ) @@ -2268,9 +2265,10 @@ (set! (-> self control transv quad) (-> s5-0 quad)) ) ) - (when (zero? (logand s4-3 64)) - (vector-float*! (new 'stack-no-clear 'vector) (-> self control dynam gravity-normal) 819.2) - ((method-of-object (-> self control) collide-shape-method-28)) + (when (not (logtest? s4-3 64)) + (let ((a1-83 (vector-float*! (new 'stack-no-clear 'vector) (-> self control dynam gravity-normal) 819.2))) + (move-by-vector! (-> self control) a1-83) + ) ) (send-event self 'end-mode (zero? (logand s4-3 75))) ) diff --git a/test/decompiler/reference/jak2/engine/target/gun/gun-h_REF.gc b/test/decompiler/reference/jak2/engine/target/gun/gun-h_REF.gc index f01f5efe6b..857e3b571a 100644 --- a/test/decompiler/reference/jak2/engine/target/gun/gun-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/gun/gun-h_REF.gc @@ -466,19 +466,19 @@ (local-vars (v1-36 symbol)) (and (logtest? (-> arg0 game features) (game-feature unk-game-feature-06)) (>= (- (-> self clock frame-counter) (-> arg0 gun gun-time)) (seconds 0.1)) - (zero? (logand (focus-status dead hit board mech dark teleporting) (-> arg0 focus-status))) - (zero? (logand (surface-flag gun-inactive gun-hide gun-off) (-> arg0 control unknown-surface01 flags))) - (zero? (logand (state-flags sf18) (-> arg0 state-flags))) + (not (logtest? (focus-status dead hit board mech dark teleporting) (-> arg0 focus-status))) + (not (logtest? (surface-flag gun-inactive gun-hide gun-off) (-> arg0 control unknown-surface01 flags))) + (not (logtest? (state-flags sf18) (-> arg0 state-flags))) (logtest? (logand (-> *setting-control* user-current features) (game-feature gun-yellow gun-red gun-blue gun-dark)) (-> arg0 game features) ) - (or (zero? (logand (-> arg0 control unknown-surface01 flags) (surface-flag duck))) (can-exit-duck?)) - (or (zero? (logand (focus-status pilot) (-> arg0 focus-status))) (-> arg0 pilot gun?)) + (or (not (logtest? (-> arg0 control unknown-surface01 flags) (surface-flag duck))) (can-exit-duck?)) + (or (not (logtest? (focus-status pilot) (-> arg0 focus-status))) (-> arg0 pilot gun?)) (or arg1 (nonzero? (-> arg0 gun using-gun-type)) (begin (set! v1-36 (and (cpad-hold? (-> arg0 control unknown-cpad-info00 number) r1) - (zero? (logand (-> arg0 focus-status) (focus-status grabbed))) + (not (logtest? (-> arg0 focus-status) (focus-status grabbed))) (begin (set! v1-36 #t) (set! (-> arg0 gun latch?) v1-36) v1-36) ) ) diff --git a/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc b/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc index 7ea3820a0b..2124326a17 100644 --- a/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc @@ -667,7 +667,7 @@ (< 0.7 (-> self control unknown-float27)) (and (< (-> self control unknown-float05) 8192.0) (logtest? (-> self control status) (cshape-moving-flags t-wall)) - (zero? (logand (-> self control status) (cshape-moving-flags t-act))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act))) (or (= (-> self control unknown-pat-surface00 event) (pat-event hide)) (let ((a0-2 (level-get-target-inside *level*))) (and a0-2 (logtest? (-> a0-2 info level-flags) 1)) @@ -990,7 +990,7 @@ ) (vector-matrix*! s2-0 s3-1 (-> self control unknown-matrix01)) (let ((f28-0 (vector-vector-xz-distance s3-1 s4-0))) - (when (and (zero? (logand (-> self control status) (cshape-moving-flags t-surface))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags t-surface))) (let ((v1-51 gp-0)) (< (sqrtf (+ (* (-> v1-51 x) (-> v1-51 x)) (* (-> v1-51 z) (-> v1-51 z)))) (sqrtf (+ (* (-> s3-1 x) (-> s3-1 x)) (* (-> s3-1 z) (-> s3-1 z)))) @@ -1006,7 +1006,7 @@ ) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags t-wall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags t-wall))) (logtest? (-> self control old-status) (cshape-moving-flags t-wall)) (logtest? (-> self control unknown-surface00 flags) (surface-flag air)) (< 0.0 (-> gp-0 y)) @@ -1025,7 +1025,7 @@ (if (< (- (-> self clock frame-counter) (-> self control unknown-time-frame09)) (seconds 0.2)) (set! f30-0 (+ 204800.0 f30-0)) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags t-wall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags t-wall))) (and (logtest? (-> self control old-status) (cshape-moving-flags t-wall)) (logtest? (-> self control unknown-surface00 flags) (surface-flag air)) (< 0.0 (-> gp-0 y)) @@ -1175,10 +1175,10 @@ ((logtest? (surface-flag turn-to-alt) (-> self control unknown-surface01 flags)) (-> self control unknown-vector03) ) - ((and (or (zero? (logand (logior (-> self control status) (-> self control old-status)) + ((and (or (not (logtest? (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags on-surface t-surface) ) - ) + ) (< (- (-> self clock frame-counter) (-> self control unknown-time-frame07)) (seconds 0.5)) (not (and (-> self next-state) (let ((v1-15 (-> self next-state name))) (or (= v1-15 'target-walk) (= v1-15 'target-gun-walk)) @@ -1641,7 +1641,7 @@ (set! (-> self control unknown-time-frame06) (-> self clock frame-counter)) (set! (-> self control unknown-vector21 quad) (-> self control trans quad)) (if (and (>= (-> self control coverage) 1.0) - (zero? (logand (-> self control status) (cshape-moving-flags t-act on-water))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act on-water))) (logtest? (-> self control status) (cshape-moving-flags on-ground)) ) (set! (-> self control unknown-vector23 quad) (-> self control trans quad)) @@ -1669,12 +1669,12 @@ ) (when (and (cpad-pressed? (-> self control unknown-cpad-info00 number) r3) (zero? (-> self control unknown-word07)) - (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask movie))) + (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask movie))) (not *pause-lock*) ) (if (and (= (-> self cam-user-mode) 'normal) (logtest? (-> self control unknown-surface00 flags) (surface-flag look-around)) - (zero? (logand (focus-status edge-grab pole flut tube board pilot dark) (-> self focus-status))) + (not (logtest? (focus-status edge-grab pole flut tube board pilot dark) (-> self focus-status))) (-> *setting-control* user-current allow-look-around) (>= (- (-> self clock frame-counter) (the-as int (-> self no-look-around-wait))) (seconds 0.05)) (not (and (= (-> self control ground-pat material) (pat-material ice)) @@ -1735,7 +1735,7 @@ (cpad-hold? (-> self control unknown-cpad-info00 number) r2) (cpad-hold? (-> self control unknown-cpad-info00 number) l2) (not *pause-lock*) - (zero? (logand (focus-status grabbed in-head pilot) (-> self focus-status))) + (not (logtest? (focus-status grabbed in-head pilot) (-> self focus-status))) (not (and (-> self next-state) (let ((v1-167 (-> self next-state name))) (or (= v1-167 'target-darkjak-get-on) (= v1-167 'target-float)) ) @@ -1819,8 +1819,8 @@ (and (or (not (and (= *cheat-mode* 'debug) (cpad-hold? (-> self control unknown-cpad-info00 number) r2))) *pause-lock* ) - (zero? (logand (focus-status flut pilot mech indax) (-> self focus-status))) - (zero? (logand (-> self state-flags) (state-flags sf7))) + (not (logtest? (focus-status flut pilot mech indax) (-> self focus-status))) + (not (logtest? (-> self state-flags) (state-flags sf7))) #t ) ) @@ -2192,8 +2192,9 @@ ) (else (vector-normalize! s4-1 1228.8) - (vector+! (new 'stack-no-clear 'vector) s4-1 (-> self control unknown-vector05)) - ((method-of-object (-> self control) collide-shape-method-28)) + (let ((a1-20 (vector+! (new 'stack-no-clear 'vector) s4-1 (-> self control unknown-vector05)))) + (move-by-vector! (-> self control) a1-20) + ) (vector-float*! (-> self control rider-last-move) s4-1 (-> self clock frames-per-second)) (set! (-> self control rider-time) (-> self clock frame-counter)) (if (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame16)) (seconds 0.5)) @@ -2283,10 +2284,10 @@ ) (let ((a1-15 (vector-! (new-stack-vector0) (-> gp-0 center-hold) (-> gp-0 center-hold-old)))) (vector-float*! (-> self control rider-last-move) a1-15 (-> self clock frames-per-second)) + (set! (-> self control rider-time) (-> self clock frame-counter)) + (move-by-vector! (-> self control) a1-15) ) ) - (set! (-> self control rider-time) (-> self clock frame-counter)) - ((method-of-object (-> self control) collide-shape-method-28)) (set! (-> self control unknown-float33) 0.0) (joint-control-method-10 (-> self skel)) (draw-control-method-14 (-> self draw) (-> self node-list) (-> self skel)) @@ -2365,10 +2366,7 @@ (let ((a0-26 (vector-! (new-stack-vector0) s5-0 (-> self control unknown-vector30)))) (cond ((and (< 2457.6 (vector-length a0-26)) (not (-> self control unknown-symbol02))) - (let ((s4-2 (method-of-object (-> self control) collide-shape-method-28))) - (vector-normalize! a0-26 2457.6) - (s4-2) - ) + (move-by-vector! (-> self control) (vector-normalize! a0-26 2457.6)) ) (else (set! (-> self control unknown-symbol02) (the-as float #t)) @@ -2406,7 +2404,7 @@ ) (cond ((and (and (-> self next-state) (= (-> self next-state name) 'target-clone-anim)) - (and (zero? (logand (-> self draw status) (draw-control-status no-draw))) + (and (not (logtest? (-> self draw status) (draw-control-status no-draw))) (begin (vector<-cspace! s5-0 (-> self node-list data 3)) (set! (-> s5-0 y) (+ -5896.192 (-> s5-0 y))) @@ -3308,7 +3306,7 @@ (set! (-> s0-0 nav-radius) (* 0.75 (-> s0-0 root-prim local-sphere w))) (let ((v1-66 (-> s0-0 root-prim))) (set! (-> s0-0 backup-collide-as) (-> v1-66 prim-core collide-as)) - (set! (-> s0-0 backup-collde-with) (-> v1-66 prim-core collide-with)) + (set! (-> s0-0 backup-collide-with) (-> v1-66 prim-core collide-with)) ) (set! (-> s0-0 event-priority) (the-as uint 9)) (set! (-> obj control) s0-0) @@ -3409,7 +3407,7 @@ (target-collide-set! 'normal 0.0) (let ((v1-163 (-> obj control root-prim))) (set! (-> obj control backup-collide-as) (-> v1-163 prim-core collide-as)) - (set! (-> obj control backup-collde-with) (-> v1-163 prim-core collide-with)) + (set! (-> obj control backup-collide-with) (-> v1-163 prim-core collide-with)) ) (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj control trans))) (set! (-> obj control unknown-sound-id04) (new-sound-id)) diff --git a/test/decompiler/reference/jak2/engine/target/target_REF.gc b/test/decompiler/reference/jak2/engine/target/target_REF.gc index 181b3683b5..187578556d 100644 --- a/test/decompiler/reference/jak2/engine/target/target_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/target_REF.gc @@ -290,7 +290,7 @@ (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) square) (can-hands? #t)) (go target-running-attack) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (seconds 0.08)) ) (go target-falling #f) @@ -436,13 +436,13 @@ ;; failed to figure out what this is: (defstate target-slide-down-to-ground (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('slide) #f ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -817,8 +817,7 @@ ) :trans (behavior () ((-> self state-hook)) - (if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1)) - ) + (if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1)) (logtest? (-> self state-flags) (state-flags sf9)) ) (let ((v1-13 (ja-group))) @@ -858,7 +857,7 @@ (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) square) (can-hands? #t) (begin self (can-exit-duck?)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-jump))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-jump))) (zero? (logand (-> self state-flags) (state-flags sf7))) ) (go @@ -976,8 +975,7 @@ :trans (behavior () (local-vars (v1-22 joint-control-channel)) ((-> self state-hook)) - (when (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1)) - ) + (when (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1)) (logtest? (-> self state-flags) (state-flags sf9)) (and (logtest? (water-flags wading) (-> self water flags)) (>= (- (- (-> self control trans y) (- (-> self water base-height) (-> self water wade-height)))) 2457.6) @@ -1016,7 +1014,7 @@ (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) square) (can-hands? #t) (begin self (can-exit-duck?)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-jump))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-jump))) (zero? (logand (-> self state-flags) (state-flags sf7))) ) (go @@ -1163,7 +1161,7 @@ (* 12288.0 (-> self darkjak-giant-interp) (-> self darkjak-giant-interp)) ) (and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) - (zero? (logand (water-flags touch-water) (-> self water flags))) + (not (logtest? (water-flags touch-water) (-> self water flags))) (zero? (logand (state-flags sf7 sf23) (-> self state-flags))) ) ) @@ -1177,8 +1175,8 @@ (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame14)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags sf8))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) + (not (logtest? (-> self state-flags) (state-flags sf8))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) (not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0))) ) ) @@ -1433,8 +1431,8 @@ (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame14)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags sf8))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) + (not (logtest? (-> self state-flags) (state-flags sf8))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) (not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0))) ) ) @@ -1593,8 +1591,8 @@ (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame14)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags sf8))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) + (not (logtest? (-> self state-flags) (state-flags sf8))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) (not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0))) ) ) @@ -2111,23 +2109,23 @@ ;; failed to figure out what this is: (defstate target-attack (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (cond (((method-of-type touching-shapes-entry touching-shapes-entry-method-12) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 1920) ) (let ((t9-1 target-send-attack) (a1-2 (-> self control unknown-symbol04)) - (a2-2 (-> arg3 param 0)) + (a2-2 (-> event param 0)) (a3-1 (-> self control unknown-symbol05)) (t0-0 (-> self control unknown-dword05)) ) (-> self control penetrate-using) - (when (t9-1 arg0 (the-as uint a1-2) a2-2 (the-as int a3-1) (the-as int t0-0)) + (when (t9-1 proc (the-as uint a1-2) a2-2 (the-as int a3-1) (the-as int t0-0)) (set! (-> self gun combo-window-start) (-> self clock frame-counter)) (let ((v0-2 (the-as object (-> self state name)))) (set! (-> self gun combo-window-state) (the-as symbol v0-2)) @@ -2137,12 +2135,12 @@ ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) (('gun-combo) - (when (-> arg3 param 0) + (when (-> event param 0) (forward-up-nopitch->quaternion (-> self control dir-targ) (vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans)) @@ -2157,7 +2155,7 @@ #f ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2399,19 +2397,19 @@ ;; failed to figure out what this is: (defstate target-running-attack (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (cond (((method-of-type touching-shapes-entry touching-shapes-entry-method-12) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 1920) ) (let ((t9-1 target-send-attack) - (a0-3 arg0) + (a0-3 proc) (a1-2 (-> self control unknown-symbol04)) - (a2-2 (-> arg3 param 0)) + (a2-2 (-> event param 0)) (a3-1 (-> self control unknown-symbol05)) (t0-0 (-> self control unknown-dword05)) ) @@ -2421,8 +2419,8 @@ (set! (-> self control unknown-time-frame17) (-> self clock frame-counter)) (set! (-> self gun combo-window-start) (-> self clock frame-counter)) (set! (-> self gun combo-window-state) (-> self state name)) - (let ((v1-13 (if (type? arg0 process-focusable) - arg0 + (let ((v1-13 (if (type? proc process-focusable) + proc ) ) ) @@ -2461,12 +2459,12 @@ ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) (('gun-combo) - (if (-> arg3 param 0) + (if (-> event param 0) (go target-stance) ) #t @@ -2475,7 +2473,7 @@ #f ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2575,11 +2573,11 @@ ) ) ) - (zero? (logand (-> self state-flags) (state-flags sf7 sf8))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-attack))) + (not (logtest? (-> self state-flags) (state-flags sf7 sf8))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-attack))) (let ((v1-48 (ja-group))) (and (not (and v1-48 (= v1-48 (-> self draw art-group data 406)))) - (and (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-jump))) + (and (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-jump))) (zero? (logand (-> self state-flags) (state-flags sf7))) ) ) @@ -2691,7 +2689,7 @@ (when (not (ja-min? 0)) (cond ((and (>= (ja-aframe-num 0) 20.0) - (and (and (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (and (and (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (the-as time-frame (-> *TARGET-bank* ground-timeout)) ) @@ -2712,10 +2710,7 @@ ) (set-forward-vel 0.0) ) - ((and (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) - (pad-buttons square) - ) - ) + ((and (not (cpad-hold? (-> self control unknown-cpad-info00 number) square)) (>= (- (-> self clock frame-counter) (-> self control unknown-combo-tracker00 move-start-time)) (seconds 0.05) ) @@ -2847,7 +2842,7 @@ (+! gp-2 1) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (the-as time-frame (-> *TARGET-bank* ground-timeout)) ) @@ -2948,15 +2943,15 @@ ;; failed to figure out what this is: (defstate target-attack-air (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v0-0 (target-bonk-event-handler arg0 arg1 arg2 arg3))) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v0-0 (target-bonk-event-handler proc arg1 event-type event))) (cond (v0-0 (empty) v0-0 ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -3271,10 +3266,10 @@ ;; failed to figure out what this is: (defstate target-attack-uppercut-jump (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('gun-combo) - (when (-> arg3 param 0) + (when (-> event param 0) (forward-up-nopitch->quaternion (-> self control dir-targ) (vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans)) @@ -3306,7 +3301,7 @@ #t ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -3340,8 +3335,8 @@ (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame14)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags sf8))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) + (not (logtest? (-> self state-flags) (state-flags sf8))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) (not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0))) ) ) @@ -3464,15 +3459,15 @@ ;; failed to figure out what this is: (defstate target-flop (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v1-0 symbol)) - (let ((v0-0 (target-bonk-event-handler arg0 arg1 arg2 arg3))) + (let ((v0-0 (target-bonk-event-handler proc arg1 event-type event))) (cond (v0-0 (empty) v0-0 ) - ((begin (set! v1-0 arg2) (= v1-0 'slide)) + ((begin (set! v1-0 event-type) (= v1-0 'slide)) #f ) ((= v1-0 'swim) @@ -3488,7 +3483,7 @@ ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -3564,7 +3559,7 @@ (when (and (or (< (target-move-dist (seconds 0.1)) 1638.4) (and (logtest? (-> self control status) (cshape-moving-flags t-wall)) (< 0.7 (-> self control poly-angle))) ) - (zero? (logand (-> self control status) (cshape-moving-flags t-act))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act))) (>= (the-as uint (-> self control unknown-word04)) (the-as uint 2)) ) (set! (-> self control unknown-time-frame14) (-> self clock frame-counter)) @@ -3769,20 +3764,20 @@ ;; failed to figure out what this is: (defstate target-flop-hit-ground (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond ((and (-> self next-state) (= (-> self next-state name) 'target-flop-hit-ground)) - (case arg2 + (case event-type (('swim 'slide) #f ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) (else - (target-jump-event-handler arg0 arg1 arg2 arg3) + (target-jump-event-handler proc arg1 event-type event) ) ) ) @@ -3872,13 +3867,13 @@ ;; failed to figure out what this is: (defstate target-roll (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (= arg2 'touched) - (send-event arg0 'roll) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (= event-type 'touched) + (send-event proc 'roll) ) - (case arg2 + (case event-type (('gun-combo) - (when (-> arg3 param 0) + (when (-> event param 0) (forward-up-nopitch->quaternion (-> self control dir-targ) (vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans)) @@ -3892,7 +3887,7 @@ #t ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -4049,10 +4044,10 @@ ;; failed to figure out what this is: (defstate target-roll-flip (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('gun-combo) - (when (-> arg3 param 0) + (when (-> event param 0) (forward-up-nopitch->quaternion (-> self control dir-targ) (vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans)) @@ -4064,7 +4059,7 @@ #t ) (else - (target-jump-event-handler arg0 arg1 arg2 arg3) + (target-jump-event-handler proc arg1 event-type event) ) ) ) @@ -4160,7 +4155,7 @@ ) ) (set! (-> self state-time) (-> self clock frame-counter)) - (while (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (while (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (when (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.01)) (let ((v1-50 (ja-group))) (when (not (and v1-50 (= v1-50 (-> self draw art-group data 27)))) diff --git a/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc b/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc index 0ba2e69027..d9e91b3603 100644 --- a/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc @@ -104,6 +104,7 @@ (pause-in float :offset-assert 36) (pause-out float :offset-assert 40) ) + :pack-me :method-count-assert 16 :size-assert #x2c :flag-assert #x100000002c diff --git a/test/decompiler/reference/jak2/kernel/gcommon_REF.gc b/test/decompiler/reference/jak2/kernel/gcommon_REF.gc index 65bacf3b23..ed511ec7e9 100644 --- a/test/decompiler/reference/jak2/kernel/gcommon_REF.gc +++ b/test/decompiler/reference/jak2/kernel/gcommon_REF.gc @@ -945,7 +945,7 @@ ;; definition for function print-tree-bitmask (defun print-tree-bitmask ((arg0 int) (arg1 int)) (dotimes (s4-0 arg1) - (if (zero? (logand arg0 1)) + (if (not (logtest? arg0 1)) (format #t " ") (format #t "| ") ) @@ -1050,7 +1050,7 @@ ) ((= arg1 binteger) (cond - ((zero? (logand (the-as int arg0) 7)) + ((not (logtest? (the-as int arg0) 7)) #t ) (else @@ -1063,7 +1063,7 @@ ) ((or (= arg1 symbol) (= arg1 boolean)) (cond - ((zero? (logand (the-as int arg0) 1)) + ((not (logtest? (the-as int arg0) 1)) (if arg2 (format arg4 "ERROR: object #x~X ~S is not a valid object of type '~A' (misaligned)~%" arg0 arg2 arg1) ) diff --git a/test/decompiler/reference/jak2/kernel/gkernel_REF.gc b/test/decompiler/reference/jak2/kernel/gkernel_REF.gc index 0c5b420b6f..95859aafdc 100644 --- a/test/decompiler/reference/jak2/kernel/gkernel_REF.gc +++ b/test/decompiler/reference/jak2/kernel/gkernel_REF.gc @@ -1054,7 +1054,7 @@ (defun execute-process-tree ((arg0 process-tree) (arg1 (function object object)) (arg2 kernel-context)) (logclear! (-> arg0 mask) (process-mask kernel-run)) (let ((s3-0 (or (logtest? (-> arg0 mask) (process-mask process-tree)) - (not (and (zero? (logand (-> arg2 prevent-from-run) (-> arg0 mask))) (run-logic? arg0))) + (not (and (not (logtest? (-> arg2 prevent-from-run) (-> arg0 mask))) (run-logic? arg0))) (begin (logior! (-> arg0 mask) (process-mask kernel-run)) (arg1 arg0)) ) ) @@ -1079,7 +1079,7 @@ ;; definition for function search-process-tree (defun search-process-tree ((arg0 process-tree) (arg1 (function process-tree object))) - (when (zero? (logand (-> arg0 mask) (process-mask process-tree))) + (when (not (logtest? (-> arg0 mask) (process-mask process-tree))) (if (arg1 arg0) (return arg0) ) diff --git a/test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc new file mode 100644 index 0000000000..16c4983ce7 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc @@ -0,0 +1,88 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type city-race-ring-info +(deftype city-race-ring-info (structure) + ((pos vector :inline :offset-assert 0) + (angle float :offset 12) + (boost float :offset-assert 16) + (dist float :offset-assert 20) + ) + :method-count-assert 10 + :size-assert #x18 + :flag-assert #xa00000018 + (:methods + (city-race-ring-info-method-9 () none 9) + ) + ) + +;; definition for method 3 of type city-race-ring-info +(defmethod inspect city-race-ring-info ((obj city-race-ring-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'city-race-ring-info) + (format #t "~1Tpos: #~%" (-> obj pos)) + (format #t "~1Tangle: ~f~%" (-> obj pos w)) + (format #t "~1Tboost: ~f~%" (-> obj boost)) + (format #t "~1Tdist: ~f~%" (-> obj dist)) + (label cfg-4) + obj + ) + +;; definition of type city-ambush-spot +(deftype city-ambush-spot (structure) + ((pos vector :inline :offset-assert 0) + (obj-type uint8 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x11 + :flag-assert #x900000011 + ) + +;; definition for method 3 of type city-ambush-spot +(defmethod inspect city-ambush-spot ((obj city-ambush-spot)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'city-ambush-spot) + (format #t "~1Tpos: #~%" (-> obj pos)) + (format #t "~1Tobj-type: ~D~%" (-> obj obj-type)) + (label cfg-4) + obj + ) + +;; definition of type city-ambush-info +(deftype city-ambush-info (structure) + ((count int16 :offset-assert 0) + (array uint32 :offset-assert 4) + ) + :method-count-assert 10 + :size-assert #x8 + :flag-assert #xa00000008 + (:methods + (city-ambush-info-method-9 () none 9) + ) + ) + +;; definition for method 3 of type city-ambush-info +(defmethod inspect city-ambush-info ((obj city-ambush-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'city-ambush-info) + (format #t "~1Tcount: ~D~%" (-> obj count)) + (format #t "~1Tarray: #x~X~%" (-> obj array)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +0 + + + + diff --git a/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc index cb71fdabcd..4ff2fadb12 100644 --- a/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc +++ b/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc @@ -3,7 +3,7 @@ ;; definition of type nav-branch (deftype nav-branch (structure) - ((node nav-node 2 :offset-assert 0) + ((node int32 2 :offset-assert 0) (src-node nav-node :offset 0) (dest-node nav-node :offset 4) (temp-dest-node-id int32 :offset 4) @@ -20,18 +20,18 @@ :size-assert #x10 :flag-assert #x1500000010 (:methods - (nav-branch-method-9 () none 9) - (nav-branch-method-10 () none 10) + (nav-branch-method-9 (_type_) none 9) + (nav-branch-method-10 (_type_ object int) none 10) (nav-branch-method-11 (_type_) float 11) (nav-branch-method-12 (_type_) float 12) (nav-branch-method-13 (_type_) float 13) (user-limit-reached? (_type_) symbol 14) (nav-branch-method-15 (_type_) symbol 15) - (nav-branch-method-16 () none 16) - (nav-branch-method-17 () none 17) - (nav-branch-method-18 () none 18) - (nav-branch-method-19 () none 19) - (nav-branch-method-20 () none 20) + (nav-branch-method-16 (_type_ float) none 16) + (nav-branch-method-17 (_type_ float) none 17) + (nav-branch-method-18 (_type_ float) none 18) + (nav-branch-method-19 (_type_ nav-node) none 19) + (nav-branch-method-20 (_type_ nav-node) none 20) ) ) @@ -60,34 +60,34 @@ ;; definition of type nav-node (deftype nav-node (structure) - ((data uint32 8 :offset-assert 0) - (position vector :inline :offset 0) - (pos-x float :offset 0) - (pos-y float :offset 4) - (pos-z float :offset 8) - (angle uint16 :offset 12) - (id uint16 :offset 14) - (radius uint8 :offset 16) - (branch-count int8 :offset 17) - (flags nav-node-flag-byte :offset 18) - (pad0 int8 1 :offset 19) - (branch-array uint32 :offset 20) - (nav-mesh-id uint32 :offset 24) - (level level :offset 28) + ((data uint32 8 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle uint16 :offset 12) + (id uint16 :offset 14) + (radius uint8 :offset 16) + (branch-count int8 :offset 17) + (flags nav-node-flag-byte :offset 18) + (pad0 int8 1 :offset 19) + (branch-array (inline-array nav-branch) :offset 20) + (nav-mesh-id uint32 :offset 24) + (level symbol :offset 28) ) :method-count-assert 22 :size-assert #x20 :flag-assert #x1600000020 (:methods - (nav-node-method-9 () none 9) - (nav-node-method-10 () none 10) - (nav-node-method-11 () none 11) - (nav-node-method-12 () none 12) - (nav-node-method-13 () none 13) - (nav-node-method-14 () none 14) - (nav-node-method-15 () none 15) - (nav-node-method-16 () none 16) - (nav-node-method-17 () none 17) + (nav-node-method-9 (_type_) none 9) + (nav-node-method-10 (_type_ symbol string) none 10) + (nav-node-method-11 (_type_ int) none 11) + (nav-node-method-12 (_type_ vector nav-node) none 12) + (nav-node-method-13 (_type_ vector) none 13) + (nav-node-method-14 (_type_ nav-node) none 14) + (nav-node-method-15 (_type_ uint) none 15) + (nav-node-method-16 (_type_ float) none 16) + (nav-node-method-17 (_type_ float) none 17) (get-position (_type_ vector) vector 18) (calc-sine-and-cosine! (_type_ vector) vector 19) (get-angle (_type_) float 20) @@ -242,59 +242,60 @@ ;; definition of type nav-graph (deftype nav-graph (basic) - ((node-count int16 :offset-assert 4) - (branch-count int16 :offset-assert 6) - (node-array (inline-array nav-node) :offset-assert 8) - (branch-array uint32 :offset-assert 12) - (link-count int16 :offset-assert 16) - (pad2 uint16 :offset-assert 18) - (link-array uint32 :offset-assert 20) - (first-node int16 :offset-assert 24) - (pad0 uint16 :offset-assert 26) - (patched basic :offset-assert 28) - (id uint32 :offset-assert 32) - (pad1 uint32 6 :offset-assert 36) + ((node-count int16 :offset-assert 4) + (branch-count int16 :offset-assert 6) + (node-array (inline-array nav-node) :offset-assert 8) + (branch-array (inline-array nav-branch) :offset-assert 12) + (link-count int16 :offset-assert 16) + (pad2 uint16 :offset-assert 18) + (link-array (inline-array nav-graph-link) :offset-assert 20) + (first-node int16 :offset-assert 24) + (pad0 uint16 :offset-assert 26) + (patched symbol :offset-assert 28) + (id uint32 :offset-assert 32) + (pad1 uint32 6 :offset-assert 36) ) :method-count-assert 45 :size-assert #x3c :flag-assert #x2d0000003c (:methods - (nav-graph-method-9 () none 9) - (nav-graph-method-10 () none 10) - (nav-graph-method-11 () none 11) - (nav-graph-method-12 () none 12) - (nav-graph-method-13 () none 13) - (nav-graph-method-14 () none 14) - (nav-graph-method-15 () none 15) - (nav-graph-method-16 () none 16) - (nav-graph-method-17 () none 17) - (nav-graph-method-18 () none 18) - (nav-graph-method-19 () none 19) - (nav-graph-method-20 () none 20) - (nav-graph-method-21 () none 21) - (nav-graph-method-22 () none 22) - (nav-graph-method-23 () none 23) - (nav-graph-method-24 () none 24) - (nav-graph-method-25 () none 25) - (nav-graph-method-26 () none 26) - (nav-graph-method-27 () none 27) - (nav-graph-method-28 () none 28) - (nav-graph-method-29 () none 29) - (nav-graph-method-30 () none 30) - (nav-graph-method-31 () none 31) - (nav-graph-method-32 () none 32) - (nav-graph-method-33 () none 33) - (nav-graph-method-34 () none 34) - (nav-graph-method-35 () none 35) - (nav-graph-method-36 () none 36) - (nav-graph-method-37 () none 37) + (new (symbol type int int int uint) _type_ 0) + (nav-graph-method-9 (_type_) none 9) + (nav-graph-method-10 (_type_ vector int) none 10) + (nav-graph-method-11 (_type_) none 11) + (nav-graph-method-12 (_type_) none 12) + (nav-graph-method-13 (_type_ int int) none 13) + (nav-graph-method-14 (_type_ int int) none 14) + (nav-graph-method-15 (_type_) none 15) + (nav-graph-method-16 (_type_ int) nav-node 16) + (nav-graph-method-17 (_type_ nav-node) none 17) + (nav-graph-method-18 (_type_ nav-node int) none 18) + (nav-graph-method-19 (_type_ int int int int int int) none 19) + (nav-graph-method-20 (_type_ int int) none 20) + (nav-graph-method-21 (_type_) none 21) + (nav-graph-method-22 (_type_ int int) none 22) + (nav-graph-method-23 (_type_ int int) none 23) + (nav-graph-method-24 (_type_ int int) none 24) + (nav-graph-method-25 (_type_ symbol symbol) none 25) + (nav-graph-method-26 (_type_ symbol symbol) none 26) + (nav-graph-method-27 (_type_) none 27) + (nav-graph-method-28 (_type_) none 28) + (nav-graph-method-29 (_type_ symbol) none 29) + (nav-graph-method-30 (_type_ uint) none 30) + (nav-graph-method-31 (_type_ float) none 31) + (nav-graph-method-32 (_type_ float) none 32) + (nav-graph-method-33 (_type_ float) none 33) + (nav-graph-method-34 (_type_ float) none 34) + (nav-graph-method-35 (_type_ int) none 35) + (nav-graph-method-36 (_type_ int) none 36) + (nav-graph-method-37 (_type_ vector) none 37) (nav-graph-method-38 () none 38) - (nav-graph-method-39 () none 39) - (nav-graph-method-40 () none 40) + (nav-graph-method-39 (_type_) none 39) + (nav-graph-method-40 (_type_ int) int 40) (node-at-idx (_type_ int) nav-node 41) - (nav-graph-method-42 () none 42) - (nav-graph-method-43 () none 43) - (nav-graph-method-44 () none 44) + (nav-graph-method-42 (_type_) none 42) + (nav-graph-method-43 (_type_ nav-graph-link string) none 43) + (from-editor () none 44) ) ) diff --git a/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc new file mode 100644 index 0000000000..32b0261615 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc @@ -0,0 +1,952 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type vehicle-lookup-info +(deftype vehicle-lookup-info (structure) + ((turn-radius meters :offset-assert 0) + (throttle-turning float :offset-assert 4) + (throttle-straight float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +;; definition for method 3 of type vehicle-lookup-info +(defmethod inspect vehicle-lookup-info ((obj vehicle-lookup-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-lookup-info) + (format #t "~1Tturn-radius: (meters ~m)~%" (-> obj turn-radius)) + (format #t "~1Tthrottle-turning: ~f~%" (-> obj throttle-turning)) + (format #t "~1Tthrottle-straight: ~f~%" (-> obj throttle-straight)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-control-point +(deftype vehicle-control-point (structure) + ((local-pos vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; definition for method 3 of type vehicle-control-point +(defmethod inspect vehicle-control-point ((obj vehicle-control-point)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-control-point) + (format #t "~1Tlocal-pos: #~%" (-> obj local-pos)) + (format #t "~1Tnormal: #~%" (-> obj normal)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-section-info +(deftype vehicle-section-info (structure) + ((damage-seg-array uint64 3 :offset-assert 0) + (damage-seg-count int8 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ) + +;; definition for method 3 of type vehicle-section-info +(defmethod inspect vehicle-section-info ((obj vehicle-section-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-section-info) + (format #t "~1Tdamage-seg-array[3] @ #x~X~%" (-> obj damage-seg-array)) + (format #t "~1Tdamage-seg-count: ~D~%" (-> obj damage-seg-count)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-seat-info +(deftype vehicle-seat-info (structure) + ((data uint8 16 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle int16 :offset 12) + (flags uint8 :offset 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type vehicle-seat-info +(defmethod inspect vehicle-seat-info ((obj vehicle-seat-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-seat-info) + (format #t "~1Tdata[16] @ #x~X~%" (-> obj position)) + (format #t "~1Tposition: #~%" (-> obj position)) + (format #t "~1Tpos-x: ~f~%" (-> obj position x)) + (format #t "~1Tpos-y: ~f~%" (-> obj position y)) + (format #t "~1Tpos-z: ~f~%" (-> obj position z)) + (format #t "~1Tangle: ~D~%" (-> obj angle)) + (format #t "~1Tflags: ~D~%" (-> obj flags)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-explosion-info +(deftype vehicle-explosion-info (joint-exploder-static-params) + ((skel basic :offset-assert 16) + (skel-name basic :offset-assert 20) + (anim int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + +;; definition for method 3 of type vehicle-explosion-info +(defmethod inspect vehicle-explosion-info ((obj vehicle-explosion-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tjoints: ~A~%" (-> obj joints)) + (format #t "~1Tcollide-spec: ~D~%" (-> obj collide-spec)) + (format #t "~1Tart-level: ~A~%" (-> obj art-level)) + (format #t "~1Tskel: ~A~%" (-> obj skel)) + (format #t "~1Tskel-name: ~A~%" (-> obj skel-name)) + (format #t "~1Tanim: ~D~%" (-> obj anim)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-grab-rail-info +(deftype vehicle-grab-rail-info (structure) + ((local-pos vector 2 :inline :offset-assert 0) + (normal vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; definition for method 3 of type vehicle-grab-rail-info +(defmethod inspect vehicle-grab-rail-info ((obj vehicle-grab-rail-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-grab-rail-info) + (format #t "~1Tlocal-pos[2] @ #x~X~%" (-> obj local-pos)) + (format #t "~1Tnormal: #~%" (-> obj normal)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-vehicle-constants +(deftype rigid-body-vehicle-constants (rigid-body-object-constants) + ((flags uint32 :offset-assert 208) + (object-type uint8 :offset-assert 212) + (guard-type uint8 :offset-assert 213) + (max-engine-thrust meters :offset-assert 216) + (inv-max-engine-thrust float :offset-assert 220) + (engine-response-rate float :offset-assert 224) + (engine-intake-factor float :offset-assert 228) + (brake-factor float :offset-assert 232) + (turbo-boost-factor float :offset-assert 236) + (max-xz-speed meters :offset-assert 240) + (ground-probe-distance meters :offset-assert 244) + (ground-probe-offset meters :offset-assert 248) + (cos-ground-effect-angle float :offset-assert 252) + (spring-lift-factor float :offset-assert 256) + (air-steering-factor float :offset-assert 260) + (air-drag-factor float :offset-assert 264) + (steering-fin-angle float :offset-assert 268) + (steering-thruster-factor float :offset-assert 272) + (steering-thruster-max-gain float :offset-assert 276) + (steering-thruster-half-gain-speed meters :offset-assert 280) + (tire-steering-angle float :offset-assert 284) + (tire-friction-factor float :offset-assert 288) + (tire-static-friction float :offset-assert 292) + (tire-static-friction-speed meters :offset-assert 296) + (tire-dynamic-friction float :offset-assert 300) + (tire-dynamic-friction-speed meters :offset-assert 304) + (tire-inv-max-friction-speed float :offset-assert 308) + (airfoil-factor float :offset-assert 312) + (drag-force-factor float :offset-assert 316) + (speed-scrubbing-drag float :offset-assert 320) + (speed-limiting-drag float :offset-assert 324) + (pitch-control-factor float :offset-assert 328) + (roll-control-factor float :offset-assert 332) + (roll-angle float :offset-assert 336) + (jump-thrust-factor float :offset-assert 340) + (buoyancy-factor float :offset-assert 344) + (player-weight float :offset-assert 348) + (player-shift-x meters :offset-assert 352) + (player-shift-z meters :offset-assert 356) + (target-speed-offset meters :offset-assert 360) + (turning-accel meters :offset-assert 364) + (toughness-factor float :offset-assert 368) + (damage-factor float :offset-assert 372) + (camera-string-min-height meters :offset-assert 376) + (camera-string-max-height meters :offset-assert 380) + (camera-string-min-length meters :offset-assert 384) + (camera-string-max-length meters :offset-assert 388) + (camera-min-fov float :offset-assert 392) + (camera-max-fov float :offset-assert 396) + (camera-head-offset float :offset-assert 400) + (camera-foot-offset float :offset-assert 404) + (camera-normal-max-angle-offset float :offset-assert 408) + (camera-air-max-angle-offset float :offset-assert 412) + (camera-max-lookaround-speed float :offset-assert 416) + (seat-count int8 :offset-assert 420) + (section-count int8 :offset-assert 421) + (rider-stance uint8 :offset-assert 422) + (grab-rail-count int8 :offset-assert 423) + (grab-rail-array uint32 :offset-assert 424) + (seat-array vehicle-seat-info 4 :inline :offset-assert 432) + (rider-hand-offset vector 2 :inline :offset-assert 496) + (section-array vehicle-section-info 4 :inline :offset-assert 528) + (section-bike-front vehicle-section-info :inline :offset 528) + (section-bike-rear vehicle-section-info :inline :offset 560) + (section-car-front-left vehicle-section-info :inline :offset 528) + (section-car-rear-left vehicle-section-info :inline :offset 560) + (section-car-front-right vehicle-section-info :inline :offset 592) + (section-car-rear-right vehicle-section-info :inline :offset 624) + (explosion basic :offset-assert 656) + (engine-pitch-scale float :offset-assert 660) + (engine-pitch-offset float :offset-assert 664) + (engine-pitch-mod-amp float :offset-assert 668) + (engine-sound-select int8 :offset-assert 672) + (engine-sound uint128 :offset-assert 688) + (thrust-sound uint128 :offset-assert 704) + (scrape-sound uint128 :offset-assert 720) + (glance-sound uint128 :offset-assert 736) + (impact-sound uint128 :offset-assert 752) + (extra-sound uint128 :offset-assert 768) + (explosion-part int32 :offset-assert 784) + (headlight-count int8 :offset-assert 788) + (taillight-count int8 :offset-assert 789) + (thruster-flame-width meters :offset-assert 792) + (thruster-flame-length meters :offset-assert 796) + (thruster-local-pos vector 2 :inline :offset-assert 800) + (exhaust-local-pos vector 2 :inline :offset-assert 832) + (exhaust-local-dir vector 2 :inline :offset-assert 864) + (smoke-local-pos vector 2 :inline :offset-assert 896) + (smoke-local-vel vector 2 :inline :offset-assert 928) + (headlight-local-pos vector 3 :inline :offset-assert 960) + (taillight-local-pos vector 2 :inline :offset-assert 1008) + (lift-thruster-count int8 :offset-assert 1040) + (roll-thruster-count int8 :offset-assert 1041) + (steering-thruster-count int8 :offset-assert 1042) + (stabilizer-count int8 :offset-assert 1043) + (inv-lift-thruster-count float :offset-assert 1044) + (pad int8 8 :offset-assert 1048) + (lift-thruster-array vector4w-2 2 :inline :offset-assert 1056) + (roll-thruster-array vector4w-2 2 :inline :offset-assert 1120) + (steering-thruster-array vector4w-2 2 :inline :offset-assert 1184) + (stabilizer-array vector4w-2 6 :inline :offset-assert 1248) + (engine-thrust-local-pos vector :inline :offset-assert 1440) + (brake-local-pos vector :inline :offset-assert 1456) + (particle-system-2d basic :offset-assert 1472) + (particle-system-3d basic :offset-assert 1476) + (part-thruster basic :offset-assert 1480) + (part-thruster-scale-x sp-field-init-spec :offset-assert 1484) + (part-thruster-scale-y sp-field-init-spec :offset-assert 1488) + (part-quat quaternion :offset-assert 1492) + (part-vel vector :offset-assert 1496) + (color-option-count int8 :offset-assert 1500) + (color-option-select int8 :offset-assert 1501) + (color-option-array uint32 :offset-assert 1504) + (sample-dir vector :inline :offset-assert 1520) + (sample-time time-frame :offset-assert 1536) + (sample-index int32 :offset-assert 1544) + ) + :method-count-assert 11 + :size-assert #x60c + :flag-assert #xb0000060c + (:methods + (rigid-body-vehicle-constants-method-9 () none 9) + (rigid-body-vehicle-constants-method-10 () none 10) + ) + ) + +;; definition for method 3 of type rigid-body-vehicle-constants +;; INFO: Used lq/sq +(defmethod inspect rigid-body-vehicle-constants ((obj rigid-body-vehicle-constants)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-vehicle-constants) + (format #t "~1Tinfo: #~%" (&-> obj mass)) + (format #t "~1Tmass: ~f~%" (-> obj mass)) + (format #t "~1Tinv-mass: ~f~%" (-> obj inv-mass)) + (format #t "~1Tcm-joint-x: (meters ~m)~%" (-> obj cm-joint-x)) + (format #t "~1Tcm-joint-y: (meters ~m)~%" (-> obj cm-joint-y)) + (format #t "~1Tcm-joint-z: (meters ~m)~%" (-> obj cm-joint-z)) + (format #t "~1Tlinear-damping: ~f~%" (-> obj linear-damping)) + (format #t "~1Tangular-damping: ~f~%" (-> obj angular-damping)) + (format #t "~1Tbounce-factor: ~f~%" (-> obj bounce-factor)) + (format #t "~1Tfriction-factor: ~f~%" (-> obj friction-factor)) + (format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x)) + (format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y)) + (format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z)) + (format #t "~1Textra: #~%" (&-> obj max-time-step)) + (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (format #t "~1Tname: ~A~%" (-> obj name)) + (format #t "~1Tflags: ~D~%" (-> obj flags)) + (format #t "~1Tobject-type: ~D~%" (-> obj object-type)) + (format #t "~1Tguard-type: ~D~%" (-> obj guard-type)) + (format #t "~1Tmax-engine-thrust: (meters ~m)~%" (-> obj max-engine-thrust)) + (format #t "~1Tinv-max-engine-thrust: ~f~%" (-> obj inv-max-engine-thrust)) + (format #t "~1Tengine-response-rate: ~f~%" (-> obj engine-response-rate)) + (format #t "~1Tengine-intake-factor: ~f~%" (-> obj engine-intake-factor)) + (format #t "~1Tbrake-factor: ~f~%" (-> obj brake-factor)) + (format #t "~1Tturbo-boost-factor: ~f~%" (-> obj turbo-boost-factor)) + (format #t "~1Tmax-xz-speed: (meters ~m)~%" (-> obj max-xz-speed)) + (format #t "~1Tground-probe-distance: (meters ~m)~%" (-> obj ground-probe-distance)) + (format #t "~1Tground-probe-offset: (meters ~m)~%" (-> obj ground-probe-offset)) + (format #t "~1Tcos-ground-effect-angle: ~f~%" (-> obj cos-ground-effect-angle)) + (format #t "~1Tspring-lift-factor: ~f~%" (-> obj spring-lift-factor)) + (format #t "~1Tair-steering-factor: ~f~%" (-> obj air-steering-factor)) + (format #t "~1Tair-drag-factor: ~f~%" (-> obj air-drag-factor)) + (format #t "~1Tsteering-fin-angle: ~f~%" (-> obj steering-fin-angle)) + (format #t "~1Tsteering-thruster-factor: ~f~%" (-> obj steering-thruster-factor)) + (format #t "~1Tsteering-thruster-max-gain: ~f~%" (-> obj steering-thruster-max-gain)) + (format #t "~1Tsteering-thruster-half-gain-speed: (meters ~m)~%" (-> obj steering-thruster-half-gain-speed)) + (format #t "~1Ttire-steering-angle: ~f~%" (-> obj tire-steering-angle)) + (format #t "~1Ttire-friction-factor: ~f~%" (-> obj tire-friction-factor)) + (format #t "~1Ttire-static-friction: ~f~%" (-> obj tire-static-friction)) + (format #t "~1Ttire-static-friction-speed: (meters ~m)~%" (-> obj tire-static-friction-speed)) + (format #t "~1Ttire-dynamic-friction: ~f~%" (-> obj tire-dynamic-friction)) + (format #t "~1Ttire-dynamic-friction-speed: (meters ~m)~%" (-> obj tire-dynamic-friction-speed)) + (format #t "~1Ttire-inv-max-friction-speed: ~f~%" (-> obj tire-inv-max-friction-speed)) + (format #t "~1Tairfoil-factor: ~f~%" (-> obj airfoil-factor)) + (format #t "~1Tdrag-force-factor: ~f~%" (-> obj drag-force-factor)) + (format #t "~1Tspeed-scrubbing-drag: ~f~%" (-> obj speed-scrubbing-drag)) + (format #t "~1Tspeed-limiting-drag: ~f~%" (-> obj speed-limiting-drag)) + (format #t "~1Tpitch-control-factor: ~f~%" (-> obj pitch-control-factor)) + (format #t "~1Troll-control-factor: ~f~%" (-> obj roll-control-factor)) + (format #t "~1Troll-angle: ~f~%" (-> obj roll-angle)) + (format #t "~1Tjump-thrust-factor: ~f~%" (-> obj jump-thrust-factor)) + (format #t "~1Tbuoyancy-factor: ~f~%" (-> obj buoyancy-factor)) + (format #t "~1Tplayer-weight: ~f~%" (-> obj player-weight)) + (format #t "~1Tplayer-shift-x: (meters ~m)~%" (-> obj player-shift-x)) + (format #t "~1Tplayer-shift-z: (meters ~m)~%" (-> obj player-shift-z)) + (format #t "~1Ttarget-speed-offset: (meters ~m)~%" (-> obj target-speed-offset)) + (format #t "~1Tturning-accel: (meters ~m)~%" (-> obj turning-accel)) + (format #t "~1Ttoughness-factor: ~f~%" (-> obj toughness-factor)) + (format #t "~1Tdamage-factor: ~f~%" (-> obj damage-factor)) + (format #t "~1Tcamera-string-min-height: (meters ~m)~%" (-> obj camera-string-min-height)) + (format #t "~1Tcamera-string-max-height: (meters ~m)~%" (-> obj camera-string-max-height)) + (format #t "~1Tcamera-string-min-length: (meters ~m)~%" (-> obj camera-string-min-length)) + (format #t "~1Tcamera-string-max-length: (meters ~m)~%" (-> obj camera-string-max-length)) + (format #t "~1Tcamera-min-fov: ~f~%" (-> obj camera-min-fov)) + (format #t "~1Tcamera-max-fov: ~f~%" (-> obj camera-max-fov)) + (format #t "~1Tcamera-head-offset: ~f~%" (-> obj camera-head-offset)) + (format #t "~1Tcamera-foot-offset: ~f~%" (-> obj camera-foot-offset)) + (format #t "~1Tcamera-normal-max-angle-offset: ~f~%" (-> obj camera-normal-max-angle-offset)) + (format #t "~1Tcamera-air-max-angle-offset: ~f~%" (-> obj camera-air-max-angle-offset)) + (format #t "~1Tcamera-max-lookaround-speed: ~f~%" (-> obj camera-max-lookaround-speed)) + (format #t "~1Tseat-count: ~D~%" (-> obj seat-count)) + (format #t "~1Tsection-count: ~D~%" (-> obj section-count)) + (format #t "~1Trider-stance: ~D~%" (-> obj rider-stance)) + (format #t "~1Tgrab-rail-count: ~D~%" (-> obj grab-rail-count)) + (format #t "~1Tgrab-rail-array: #x~X~%" (-> obj grab-rail-array)) + (format #t "~1Tseat-array[4] @ #x~X~%" (-> obj seat-array)) + (format #t "~1Trider-hand-offset[2] @ #x~X~%" (-> obj rider-hand-offset)) + (format #t "~1Tsection-array[4] @ #x~X~%" (-> obj section-bike-front)) + (format #t "~1Tsection-bike-front: #~%" (-> obj section-bike-front)) + (format #t "~1Tsection-bike-rear: #~%" (-> obj section-bike-rear)) + (format #t "~1Tsection-car-front-left: #~%" (-> obj section-bike-front)) + (format #t "~1Tsection-car-rear-left: #~%" (-> obj section-bike-rear)) + (format #t "~1Tsection-car-front-right: #~%" (-> obj section-car-front-right)) + (format #t "~1Tsection-car-rear-right: #~%" (-> obj section-car-rear-right)) + (format #t "~1Texplosion: ~A~%" (-> obj explosion)) + (format #t "~1Tengine-pitch-scale: ~f~%" (-> obj engine-pitch-scale)) + (format #t "~1Tengine-pitch-offset: ~f~%" (-> obj engine-pitch-offset)) + (format #t "~1Tengine-pitch-mod-amp: ~f~%" (-> obj engine-pitch-mod-amp)) + (format #t "~1Tengine-sound-select: ~D~%" (-> obj engine-sound-select)) + (format #t "~1Tengine-sound: ~D~%" (-> obj engine-sound)) + (format #t "~1Tthrust-sound: ~D~%" (-> obj thrust-sound)) + (format #t "~1Tscrape-sound: ~D~%" (-> obj scrape-sound)) + (format #t "~1Tglance-sound: ~D~%" (-> obj glance-sound)) + (format #t "~1Timpact-sound: ~D~%" (-> obj impact-sound)) + (format #t "~1Textra-sound: ~D~%" (-> obj extra-sound)) + (format #t "~1Texplosion-part: ~D~%" (-> obj explosion-part)) + (format #t "~1Theadlight-count: ~D~%" (-> obj headlight-count)) + (format #t "~1Ttaillight-count: ~D~%" (-> obj taillight-count)) + (format #t "~1Tthruster-flame-width: (meters ~m)~%" (-> obj thruster-flame-width)) + (format #t "~1Tthruster-flame-length: (meters ~m)~%" (-> obj thruster-flame-length)) + (format #t "~1Tthruster-local-pos[2] @ #x~X~%" (-> obj thruster-local-pos)) + (format #t "~1Texhaust-local-pos[2] @ #x~X~%" (-> obj exhaust-local-pos)) + (format #t "~1Texhaust-local-dir[2] @ #x~X~%" (-> obj exhaust-local-dir)) + (format #t "~1Tsmoke-local-pos[2] @ #x~X~%" (-> obj smoke-local-pos)) + (format #t "~1Tsmoke-local-vel[2] @ #x~X~%" (-> obj smoke-local-vel)) + (format #t "~1Theadlight-local-pos[3] @ #x~X~%" (-> obj headlight-local-pos)) + (format #t "~1Ttaillight-local-pos[2] @ #x~X~%" (-> obj taillight-local-pos)) + (format #t "~1Tlift-thruster-count: ~D~%" (-> obj lift-thruster-count)) + (format #t "~1Troll-thruster-count: ~D~%" (-> obj roll-thruster-count)) + (format #t "~1Tsteering-thruster-count: ~D~%" (-> obj steering-thruster-count)) + (format #t "~1Tstabilizer-count: ~D~%" (-> obj stabilizer-count)) + (format #t "~1Tinv-lift-thruster-count: ~f~%" (-> obj inv-lift-thruster-count)) + (format #t "~1Tlift-thruster-array[2] @ #x~X~%" (-> obj lift-thruster-array)) + (format #t "~1Troll-thruster-array[2] @ #x~X~%" (-> obj roll-thruster-array)) + (format #t "~1Tsteering-thruster-array[2] @ #x~X~%" (-> obj steering-thruster-array)) + (format #t "~1Tstabilizer-array[6] @ #x~X~%" (-> obj stabilizer-array)) + (format #t "~1Tengine-thrust-local-pos: #~%" (-> obj engine-thrust-local-pos)) + (format #t "~1Tbrake-local-pos: #~%" (-> obj brake-local-pos)) + (format #t "~1Tparticle-system-2d: ~A~%" (-> obj particle-system-2d)) + (format #t "~1Tparticle-system-3d: ~A~%" (-> obj particle-system-3d)) + (format #t "~1Tpart-thruster: ~A~%" (-> obj part-thruster)) + (format #t "~1Tpart-thruster-scale-x: #~%" (-> obj part-thruster-scale-x)) + (format #t "~1Tpart-thruster-scale-y: #~%" (-> obj part-thruster-scale-y)) + (format #t "~1Tpart-quat: #~%" (-> obj part-quat)) + (format #t "~1Tpart-vel: #~%" (-> obj part-vel)) + (format #t "~1Tcolor-option-count: ~D~%" (-> obj color-option-count)) + (format #t "~1Tcolor-option-select: ~D~%" (-> obj color-option-select)) + (format #t "~1Tcolor-option-array: #x~X~%" (-> obj color-option-array)) + (format #t "~1Tsample-dir: #~%" (-> obj sample-dir)) + (format #t "~1Tsample-time: ~D~%" (-> obj sample-time)) + (format #t "~1Tsample-index: ~D~%" (-> obj sample-index)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-controller +(deftype vehicle-controller (structure) + ((flags vehicle-controller-flag :offset-assert 0) + (traffic symbol :offset-assert 4) + (branch nav-branch :offset-assert 8) + (target-speed-offset meters :offset-assert 12) + (target-speed meters :offset-assert 16) + (choose-branch-callback symbol :offset-assert 20) + (turn-accel meters :offset-assert 24) + (max-turn-speed meters :offset-assert 28) + (path-prev-point vector :inline :offset-assert 32) + (turn-enter-point vector :inline :offset-assert 48) + (turn-exit-point vector :inline :offset-assert 64) + (path-dest-point vector :inline :offset 64) + (turn-enter-dir vector :inline :offset-assert 80) + (turn-exit-dir vector :inline :offset-assert 96) + (dest-circle vector :inline :offset-assert 112) + (target-point vector :inline :offset-assert 128) + ) + :method-count-assert 22 + :size-assert #x90 + :flag-assert #x1600000090 + (:methods + (vehicle-controller-method-9 () none 9) + (vehicle-controller-method-10 () none 10) + (vehicle-controller-method-11 () none 11) + (vehicle-controller-method-12 () none 12) + (vehicle-controller-method-13 () none 13) + (vehicle-controller-method-14 () none 14) + (vehicle-controller-method-15 () none 15) + (vehicle-controller-method-16 () none 16) + (vehicle-controller-method-17 () none 17) + (vehicle-controller-method-18 () none 18) + (vehicle-controller-method-19 () none 19) + (vehicle-controller-method-20 () none 20) + (vehicle-controller-method-21 () none 21) + ) + ) + +;; definition for method 3 of type vehicle-controller +(defmethod inspect vehicle-controller ((obj vehicle-controller)) + (when (not obj) + (set! obj obj) + (goto cfg-28) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-controller) + (format #t "~1Tflags: #x~X : (vehicle-controller-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand s5-0 (vehicle-controller-flag do-turn)) (vehicle-controller-flag do-turn)) + (format #t "do-turn ") + ) + (if (= (logand s5-0 (vehicle-controller-flag off-path)) (vehicle-controller-flag off-path)) + (format #t "off-path ") + ) + (if (= (logand s5-0 (vehicle-controller-flag attached)) (vehicle-controller-flag attached)) + (format #t "attached ") + ) + (if (= (logand s5-0 (vehicle-controller-flag no-slowing-for-turns)) + (vehicle-controller-flag no-slowing-for-turns) + ) + (format #t "no-slowing-for-turns ") + ) + (if (= (logand s5-0 (vehicle-controller-flag recovery-mode)) (vehicle-controller-flag recovery-mode)) + (format #t "recovery-mode ") + ) + (if (= (logand s5-0 (vehicle-controller-flag blocking-dest-node)) (vehicle-controller-flag blocking-dest-node)) + (format #t "blocking-dest-node ") + ) + (if (= (logand s5-0 (vehicle-controller-flag direct-mode)) (vehicle-controller-flag direct-mode)) + (format #t "direct-mode ") + ) + (if (= (logand s5-0 (vehicle-controller-flag ignore-others)) (vehicle-controller-flag ignore-others)) + (format #t "ignore-others ") + ) + (if (= (logand s5-0 (vehicle-controller-flag debug)) (vehicle-controller-flag debug)) + (format #t "debug ") + ) + (if (= (logand s5-0 (vehicle-controller-flag on-straightaway)) (vehicle-controller-flag on-straightaway)) + (format #t "on-straightaway ") + ) + (if (= (logand s5-0 (vehicle-controller-flag draw-marks)) (vehicle-controller-flag draw-marks)) + (format #t "draw-marks ") + ) + (if (= (logand s5-0 (vehicle-controller-flag left-turn)) (vehicle-controller-flag left-turn)) + (format #t "left-turn ") + ) + ) + (format #t ")~%") + (format #t "~1Ttraffic: ~A~%" (-> obj traffic)) + (format #t "~1Tbranch: #~%" (-> obj branch)) + (format #t "~1Ttarget-speed-offset: (meters ~m)~%" (-> obj target-speed-offset)) + (format #t "~1Ttarget-speed: (meters ~m)~%" (-> obj target-speed)) + (format #t "~1Tchoose-branch-callback: ~A~%" (-> obj choose-branch-callback)) + (format #t "~1Tturn-accel: (meters ~m)~%" (-> obj turn-accel)) + (format #t "~1Tmax-turn-speed: (meters ~m)~%" (-> obj max-turn-speed)) + (format #t "~1Tpath-prev-point: ~`vector`P~%" (-> obj path-prev-point)) + (format #t "~1Tturn-enter-point: ~`vector`P~%" (-> obj turn-enter-point)) + (format #t "~1Tturn-exit-point: ~`vector`P~%" (-> obj turn-exit-point)) + (format #t "~1Tpath-dest-point: #~%" (-> obj turn-exit-point)) + (format #t "~1Tturn-enter-dir: ~`vector`P~%" (-> obj turn-enter-dir)) + (format #t "~1Tturn-exit-dir: ~`vector`P~%" (-> obj turn-exit-dir)) + (format #t "~1Tdest-circle: ~`vector`P~%" (-> obj dest-circle)) + (format #t "~1Ttarget-point: ~`vector`P~%" (-> obj target-point)) + (label cfg-28) + obj + ) + +;; definition of type vehicle-section +(deftype vehicle-section (structure) + ((damage float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +;; definition for method 3 of type vehicle-section +(defmethod inspect vehicle-section ((obj vehicle-section)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-section) + (format #t "~1Tdamage: ~f~%" (-> obj damage)) + (label cfg-4) + obj + ) + +;; definition of type vehicle +(deftype vehicle (rigid-body-object) + ((pad uint32 4 :offset-assert 272) + (controls vehicle-controls :inline :offset-assert 288) + (prev-controls vehicle-controls :inline :offset-assert 304) + (up-dir vector :inline :offset-assert 320) + (jump-time float :offset-assert 336) + (jump-thrust float :offset-assert 340) + (engine-thrust float :offset-assert 344) + (engine-power-factor float :offset-assert 348) + (force-scale float :offset-assert 352) + (target-distance2 meters :offset-assert 356) + (pad0 uint32 :offset-assert 360) + (target-acceleration vector :inline :offset-assert 368) + (impact-pos vector :inline :offset-assert 384) + (lin-acceleration vector :inline :offset-assert 400) + (hit-points float :offset-assert 416) + (damage-factor float :offset-assert 420) + (crash-level int8 :offset-assert 424) + (force-level int8 :offset-assert 425) + (traffic-hash-id int8 :offset-assert 426) + (traffic-priority-id int8 :offset-assert 427) + (power-fluctuation-factor float :offset-assert 428) + (power-level float :offset-assert 432) + (flight-level-index int8 :offset-assert 436) + (flight-level-index-prev int8 :offset-assert 437) + (overlap-player-counter uint8 :offset-assert 438) + (physics-counter uint8 :offset-assert 439) + (flight-level float :offset-assert 440) + (brake-factor float :offset-assert 444) + (cam-speed-interp float :offset-assert 448) + (camera-dist2 float :offset-assert 452) + (player-dist2 float :offset-assert 456) + (bound-radius float :offset-assert 460) + (rider-array int64 4 :offset-assert 464) + (lift-thrust float 2 :offset-assert 496) + (roll-thrust float 2 :offset-assert 504) + (sent-attack-time time-frame :offset-assert 512) + (air-time time-frame :offset-assert 520) + (turn-time time-frame :offset-assert 528) + (crash-time time-frame :offset-assert 536) + (transition-time time-frame :offset-assert 544) + (transition-end-time time-frame :offset-assert 552) + (turbo-boost-time time-frame :offset-assert 560) + (crash-duration uint16 :offset-assert 568) + (turbo-boost-duration uint16 :offset-assert 570) + (turbo-boost-factor float :offset-assert 572) + (crash-impulse float :offset-assert 576) + (water-height float :offset-assert 580) + (lights-factor float :offset-assert 584) + (outgoing-attack-id uint32 :offset-assert 588) + (scrape-sound-id sound-id :offset-assert 592) + (engine-sound-id sound-id :offset-assert 596) + (thrust-sound-id sound-id :offset-assert 600) + (roll-sound-id sound-id :offset-assert 604) + (damage-pop-sound-id sound-id :offset-assert 608) + (damage-zap-sound-id sound-id :offset-assert 612) + (extra-sound-id sound-id :offset-assert 616) + (fog-fade float :offset-assert 620) + (scrape-sound-envelope float :offset-assert 624) + (engine-sound-envelope float :offset-assert 628) + (engine-sound-factor float :offset-assert 632) + (sputter-sound-envelope float :offset-assert 636) + (rudder-sound-envelope float :offset-assert 640) + (fins-sound-envelope float :offset-assert 644) + (exhaust-part-accum basic 2 :offset-assert 648) + (smoke-part-accum basic 2 :offset-assert 656) + (controller vehicle-controller :inline :offset-assert 672) + (section-array vehicle-section 4 :inline :offset-assert 816) + ) + :heap-base #x2f0 + :method-count-assert 144 + :size-assert #x370 + :flag-assert #x9002f00370 + (:methods + (vehicle-method-53 () none 53) + (vehicle-method-54 () none 54) + (vehicle-method-55 () none 55) + (vehicle-method-56 () none 56) + (vehicle-method-57 () none 57) + (vehicle-method-58 () none 58) + (vehicle-method-59 () none 59) + (vehicle-method-60 () none 60) + (vehicle-method-61 () none 61) + (vehicle-method-62 () none 62) + (vehicle-method-63 () none 63) + (vehicle-method-64 () none 64) + (vehicle-method-65 () none 65) + (vehicle-method-66 () none 66) + (vehicle-method-67 () none 67) + (vehicle-method-68 () none 68) + (vehicle-method-69 () none 69) + (vehicle-method-70 () none 70) + (vehicle-method-71 () none 71) + (vehicle-method-72 () none 72) + (vehicle-method-73 () none 73) + (vehicle-method-74 () none 74) + (vehicle-method-75 () none 75) + (vehicle-method-76 () none 76) + (vehicle-method-77 () none 77) + (vehicle-method-78 () none 78) + (vehicle-method-79 () none 79) + (vehicle-method-80 () none 80) + (vehicle-method-81 () none 81) + (vehicle-method-82 () none 82) + (vehicle-method-83 () none 83) + (vehicle-method-84 () none 84) + (vehicle-method-85 () none 85) + (vehicle-method-86 () none 86) + (vehicle-method-87 () none 87) + (vehicle-method-88 () none 88) + (vehicle-method-89 () none 89) + (vehicle-method-90 () none 90) + (vehicle-method-91 () none 91) + (vehicle-method-92 () none 92) + (vehicle-method-93 () none 93) + (vehicle-method-94 () none 94) + (vehicle-method-95 () none 95) + (vehicle-method-96 () none 96) + (vehicle-method-97 () none 97) + (vehicle-method-98 () none 98) + (vehicle-method-99 () none 99) + (vehicle-method-100 () none 100) + (vehicle-method-101 () none 101) + (vehicle-method-102 () none 102) + (vehicle-method-103 () none 103) + (vehicle-method-104 () none 104) + (vehicle-method-105 () none 105) + (vehicle-method-106 () none 106) + (vehicle-method-107 () none 107) + (vehicle-method-108 () none 108) + (vehicle-method-109 () none 109) + (vehicle-method-110 () none 110) + (vehicle-method-111 () none 111) + (vehicle-method-112 () none 112) + (vehicle-method-113 () none 113) + (vehicle-method-114 () none 114) + (vehicle-method-115 () none 115) + (vehicle-method-116 () none 116) + (vehicle-method-117 () none 117) + (vehicle-method-118 () none 118) + (vehicle-method-119 () none 119) + (vehicle-method-120 () none 120) + (vehicle-method-121 () none 121) + (vehicle-method-122 () none 122) + (vehicle-method-123 () none 123) + (vehicle-method-124 () none 124) + (vehicle-method-125 () none 125) + (vehicle-method-126 () none 126) + (vehicle-method-127 () none 127) + (vehicle-method-128 () none 128) + (vehicle-method-129 () none 129) + (vehicle-method-130 () none 130) + (vehicle-method-131 () none 131) + (vehicle-method-132 () none 132) + (vehicle-method-133 () none 133) + (vehicle-method-134 () none 134) + (vehicle-method-135 () none 135) + (vehicle-method-136 () none 136) + (vehicle-method-137 () none 137) + (vehicle-method-138 () none 138) + (vehicle-method-139 () none 139) + (vehicle-method-140 () none 140) + (vehicle-method-141 () none 141) + (vehicle-method-142 () none 142) + (vehicle-method-143 () none 143) + ) + ) + +;; definition for method 3 of type vehicle +(defmethod inspect vehicle ((obj vehicle)) + (when (not obj) + (set! obj obj) + (goto cfg-92) + ) + (let ((t9-0 (method-of-type rigid-body-object inspect))) + (t9-0 obj) + ) + (format #t "~2Tflags: #x~X : (vehicle-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand (rigid-body-object-flag lights-update) s5-0) (shl 64 32)) + (format #t "lights-update ") + ) + (if (= (logand (rigid-body-object-flag camera-bike-mode) s5-0) (rigid-body-object-flag camera-bike-mode)) + (format #t "camera-bike-mode ") + ) + (if (= (logand (rigid-body-object-flag jump-sound) s5-0) (rigid-body-object-flag jump-sound)) + (format #t "jump-sound ") + ) + (if (= (logand s5-0 (rigid-body-object-flag dead)) (rigid-body-object-flag dead)) + (format #t "dead ") + ) + (if (= (logand s5-0 (rigid-body-object-flag waiting-for-player)) (rigid-body-object-flag waiting-for-player)) + (format #t "waiting-for-player ") + ) + (if (= (logand (rigid-body-object-flag no-hijack) s5-0) (shl 256 32)) + (format #t "no-hijack ") + ) + (if (= (logand (rigid-body-object-flag hard-turn) s5-0) (rigid-body-object-flag hard-turn)) + (format #t "hard-turn ") + ) + (if (= (logand (rigid-body-object-flag turbo-boost) s5-0) (rigid-body-object-flag turbo-boost)) + (format #t "turbo-boost ") + ) + (if (= (logand (rigid-body-object-flag in-pursuit) s5-0) (shl #x8000 16)) + (format #t "in-pursuit ") + ) + (if (= (logand (rigid-body-object-flag traffic-managed) s5-0) (rigid-body-object-flag traffic-managed)) + (format #t "traffic-managed ") + ) + (if (= (logand s5-0 (rigid-body-object-flag damaged)) (rigid-body-object-flag damaged)) + (format #t "damaged ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-contact-force)) (rigid-body-object-flag player-contact-force)) + (format #t "player-contact-force ") + ) + (if (= (logand (rigid-body-object-flag player-grabbed) s5-0) (shl 512 32)) + (format #t "player-grabbed ") + ) + (if (= (logand (rigid-body-object-flag flight-level-transition-ending) s5-0) + (rigid-body-object-flag flight-level-transition-ending) + ) + (format #t "flight-level-transition-ending ") + ) + (if (= (logand (rigid-body-object-flag alert) s5-0) (rigid-body-object-flag alert)) + (format #t "alert ") + ) + (if (= (logand s5-0 (rigid-body-object-flag disturbed)) (rigid-body-object-flag disturbed)) + (format #t "disturbed ") + ) + (if (= (logand s5-0 (rigid-body-object-flag enable-collision)) (rigid-body-object-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-edge-grabbing)) (rigid-body-object-flag player-edge-grabbing)) + (format #t "player-edge-grabbing ") + ) + (if (= (logand (rigid-body-object-flag lights-on) s5-0) (shl 32 32)) + (format #t "lights-on ") + ) + (if (= (logand (rigid-body-object-flag reverse-gear) s5-0) (rigid-body-object-flag reverse-gear)) + (format #t "reverse-gear ") + ) + (if (= (logand (rigid-body-object-flag ai-driving) s5-0) (rigid-body-object-flag ai-driving)) + (format #t "ai-driving ") + ) + (if (= (logand s5-0 (rigid-body-object-flag persistent)) (rigid-body-object-flag persistent)) + (format #t "persistent ") + ) + (if (= (logand (rigid-body-object-flag jump) s5-0) (rigid-body-object-flag jump)) + (format #t "jump ") + ) + (if (= (logand s5-0 (rigid-body-object-flag riding)) (rigid-body-object-flag riding)) + (format #t "riding ") + ) + (if (= (logand s5-0 (rigid-body-object-flag on-flight-level)) (rigid-body-object-flag on-flight-level)) + (format #t "on-flight-level ") + ) + (if (= (logand (rigid-body-object-flag nav-spheres) s5-0) (shl 1024 32)) + (format #t "nav-spheres ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-driving)) (rigid-body-object-flag player-driving)) + (format #t "player-driving ") + ) + (if (= (logand (rigid-body-object-flag hack-edit-graph-mode) s5-0) (shl 8 32)) + (format #t "hack-edit-graph-mode ") + ) + (if (= (logand (rigid-body-object-flag camera-rapid-track-mode) s5-0) + (rigid-body-object-flag camera-rapid-track-mode) + ) + (format #t "camera-rapid-tracking-mode ") + ) + (if (= (logand (rigid-body-object-flag ignition) s5-0) (rigid-body-object-flag ignition)) + (format #t "ignition ") + ) + (if (= (logand (rigid-body-object-flag slide) s5-0) (rigid-body-object-flag slide)) + (format #t "slide ") + ) + (if (= (logand s5-0 (rigid-body-object-flag on-ground)) (rigid-body-object-flag on-ground)) + (format #t "on-ground ") + ) + (if (= (logand (rigid-body-object-flag flight-level-transition) s5-0) + (rigid-body-object-flag flight-level-transition) + ) + (format #t "flight-level-transition ") + ) + (if (= (logand (rigid-body-object-flag lights-dead) s5-0) (shl 128 32)) + (format #t "lights-dead ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-touching)) (rigid-body-object-flag player-touching)) + (format #t "player-touching ") + ) + (if (= (logand (rigid-body-object-flag target-in-sight) s5-0) (shl 1 32)) + (format #t "target-in-sight ") + ) + (if (= (logand (rigid-body-object-flag idle-sound) s5-0) (shl 2048 32)) + (format #t "idle-sound ") + ) + (if (= (logand s5-0 (rigid-body-object-flag in-air)) (rigid-body-object-flag in-air)) + (format #t "in-air ") + ) + (if (= (logand (rigid-body-object-flag draw-marks) s5-0) (shl 4 32)) + (format #t "draw-marks ") + ) + (if (= (logand (rigid-body-object-flag camera) s5-0) (rigid-body-object-flag camera)) + (format #t "camera ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-standing-on)) (rigid-body-object-flag player-standing-on)) + (format #t "player-standing-on ") + ) + (if (= (logand (rigid-body-object-flag measure-control-parameters) s5-0) (shl 16 32)) + (format #t "measure-control-parameters ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-impulse-force)) (rigid-body-object-flag player-impulse-force)) + (format #t "player-impulse-force ") + ) + (if (= (logand (rigid-body-object-flag rammed-target) s5-0) (shl 2 32)) + (format #t "rammed-target ") + ) + ) + (format #t ")~%") + (format #t "~2Tcontrols: #~%" (-> obj controls)) + (format #t "~2Tprev-controls: #~%" (-> obj prev-controls)) + (format #t "~2Tup-dir: #~%" (-> obj up-dir)) + (format #t "~2Tjump-time: ~f~%" (-> obj jump-time)) + (format #t "~2Tjump-thrust: ~f~%" (-> obj jump-thrust)) + (format #t "~2Tengine-thrust: ~f~%" (-> obj engine-thrust)) + (format #t "~2Tengine-power-factor: ~f~%" (-> obj engine-power-factor)) + (format #t "~2Tforce-scale: ~f~%" (-> obj force-scale)) + (format #t "~2Ttarget-distance2: (meters ~m)~%" (-> obj target-distance2)) + (format #t "~2Tpad0: ~D~%" (-> obj pad0)) + (format #t "~2Ttarget-acceleration: #~%" (-> obj target-acceleration)) + (format #t "~2Timpact-pos: #~%" (-> obj impact-pos)) + (format #t "~2Tlin-acceleration: #~%" (-> obj lin-acceleration)) + (format #t "~2Thit-points: ~f~%" (-> obj hit-points)) + (format #t "~2Tdamage-factor: ~f~%" (-> obj damage-factor)) + (format #t "~2Tcrash-level: ~D~%" (-> obj crash-level)) + (format #t "~2Tforce-level: ~D~%" (-> obj force-level)) + (format #t "~2Ttraffic-hash-id: ~D~%" (-> obj traffic-hash-id)) + (format #t "~2Ttraffic-priority-id: ~D~%" (-> obj traffic-priority-id)) + (format #t "~2Tpower-fluctuation-factor: ~f~%" (-> obj power-fluctuation-factor)) + (format #t "~2Tpower-level: ~f~%" (-> obj power-level)) + (format #t "~2Tflight-level-index: ~D~%" (-> obj flight-level-index)) + (format #t "~2Tflight-level-index-prev: ~D~%" (-> obj flight-level-index-prev)) + (format #t "~2Toverlap-player-counter: ~D~%" (-> obj overlap-player-counter)) + (format #t "~2Tphysics-counter: ~D~%" (-> obj physics-counter)) + (format #t "~2Tflight-level: ~f~%" (-> obj flight-level)) + (format #t "~2Tbrake-factor: ~f~%" (-> obj brake-factor)) + (format #t "~2Tcam-speed-interp: ~f~%" (-> obj cam-speed-interp)) + (format #t "~2Tcamera-dist2: ~f~%" (-> obj camera-dist2)) + (format #t "~2Tplayer-dist2: ~f~%" (-> obj player-dist2)) + (format #t "~2Tbound-radius: ~f~%" (-> obj bound-radius)) + (format #t "~2Trider-array[4] @ #x~X~%" (-> obj rider-array)) + (format #t "~2Tlift-thrust[2] @ #x~X~%" (-> obj lift-thrust)) + (format #t "~2Troll-thrust[2] @ #x~X~%" (-> obj roll-thrust)) + (format #t "~2Tsent-attack-time: ~D~%" (-> obj sent-attack-time)) + (format #t "~2Tair-time: ~D~%" (-> obj air-time)) + (format #t "~2Tturn-time: ~D~%" (-> obj turn-time)) + (format #t "~2Tcrash-time: ~D~%" (-> obj crash-time)) + (format #t "~2Ttransition-time: ~D~%" (-> obj transition-time)) + (format #t "~2Ttransition-end-time: ~D~%" (-> obj transition-end-time)) + (format #t "~2Tturbo-boost-time: ~D~%" (-> obj turbo-boost-time)) + (format #t "~2Tcrash-duration: ~D~%" (-> obj crash-duration)) + (format #t "~2Tturbo-boost-duration: ~D~%" (-> obj turbo-boost-duration)) + (format #t "~2Tturbo-boost-factor: ~f~%" (-> obj turbo-boost-factor)) + (format #t "~2Tcrash-impulse: ~f~%" (-> obj crash-impulse)) + (format #t "~2Twater-height: ~f~%" (-> obj water-height)) + (format #t "~2Tlights-factor: ~f~%" (-> obj lights-factor)) + (format #t "~2Toutgoing-attack-id: ~D~%" (-> obj outgoing-attack-id)) + (format #t "~2Tscrape-sound-id: ~D~%" (-> obj scrape-sound-id)) + (format #t "~2Tengine-sound-id: ~D~%" (-> obj engine-sound-id)) + (format #t "~2Tthrust-sound-id: ~D~%" (-> obj thrust-sound-id)) + (format #t "~2Troll-sound-id: ~D~%" (-> obj roll-sound-id)) + (format #t "~2Tdamage-pop-sound-id: ~D~%" (-> obj damage-pop-sound-id)) + (format #t "~2Tdamage-zap-sound-id: ~D~%" (-> obj damage-zap-sound-id)) + (format #t "~2Textra-sound-id: ~D~%" (-> obj extra-sound-id)) + (format #t "~2Tfog-fade: ~f~%" (-> obj fog-fade)) + (format #t "~2Tscrape-sound-envelope: ~f~%" (-> obj scrape-sound-envelope)) + (format #t "~2Tengine-sound-envelope: ~f~%" (-> obj engine-sound-envelope)) + (format #t "~2Tengine-sound-factor: ~f~%" (-> obj engine-sound-factor)) + (format #t "~2Tsputter-sound-envelope: ~f~%" (-> obj sputter-sound-envelope)) + (format #t "~2Trudder-sound-envelope: ~f~%" (-> obj rudder-sound-envelope)) + (format #t "~2Tfins-sound-envelope: ~f~%" (-> obj fins-sound-envelope)) + (format #t "~2Texhaust-part-accum[2] @ #x~X~%" (-> obj exhaust-part-accum)) + (format #t "~2Tsmoke-part-accum[2] @ #x~X~%" (-> obj smoke-part-accum)) + (format #t "~2Tcontroller: #~%" (-> obj controller)) + (format #t "~2Tsection-array[4] @ #x~X~%" (-> obj section-array)) + (label cfg-92) + obj + ) + +;; failed to figure out what this is: +0 diff --git a/test/decompiler/reference/jak2/levels/common/airlock_REF.gc b/test/decompiler/reference/jak2/levels/common/airlock_REF.gc index 67c83e8c66..8a729322a0 100644 --- a/test/decompiler/reference/jak2/levels/common/airlock_REF.gc +++ b/test/decompiler/reference/jak2/levels/common/airlock_REF.gc @@ -448,31 +448,31 @@ ;; failed to figure out what this is: (defstate close (com-airlock) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'close) (set! (-> self latch-closed-time) (+ (-> self clock frame-counter) (if (>= arg1 1) - (the-as int (-> arg3 param 0)) + (the-as int (-> event param 0)) 3000 ) ) ) - (if (and (>= arg1 2) (and (= (-> arg3 param 1) #t) (not (want-cross-airlock? self)))) + (if (and (>= arg1 2) (and (= (-> event param 1) #t) (not (want-cross-airlock? self)))) (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! min) ) (and (-> self next-state) (= (-> self next-state name) 'open)) ) ((= v1-0 'open) (set! (-> self latch-open-time) (+ (-> self clock frame-counter) (if (>= arg1 1) - (the-as int (-> arg3 param 0)) + (the-as int (-> event param 0)) 3000 ) ) ) - (if (and (>= arg1 2) (and (= (-> arg3 param 1) #t) (want-cross-airlock? self) (destination-loaded? self #f))) + (if (and (>= arg1 2) (and (= (-> event param 1) #t) (want-cross-airlock? self) (destination-loaded? self #f))) (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! (identity (the float (+ (-> (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) frames num-frames) -1)) @@ -497,7 +497,7 @@ ) ((= v1-0 'sound) (if (>= (check-crossing-distance self (target-pos 0) #f) 0.0) - (play-city-voice-sound self (the-as symbol (-> arg3 param 0))) + (play-city-voice-sound self (the-as symbol (-> event param 0))) ) ) ((= v1-0 'distance) @@ -951,7 +951,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1029,7 +1029,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1133,7 +1133,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1221,7 +1221,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1298,7 +1298,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-5 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-5 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-5 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-5 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1409,7 +1409,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1498,7 +1498,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1587,7 +1587,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1676,7 +1676,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) diff --git a/test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc b/test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc new file mode 100644 index 0000000000..7575d3c12e --- /dev/null +++ b/test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc @@ -0,0 +1,1215 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type elec-gate-params +(deftype elec-gate-params (structure) + ((bolt-spec lightning-spec :offset-assert 0) + (ring-spec lightning-spec :offset-assert 4) + (ring-radius-min float :offset-assert 8) + (ring-radius-max float :offset-assert 12) + (speed-mult float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +;; definition for method 3 of type elec-gate-params +(defmethod inspect elec-gate-params ((obj elec-gate-params)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'elec-gate-params) + (format #t "~1Tbolt-spec: ~A~%" (-> obj bolt-spec)) + (format #t "~1Tring-spec: ~A~%" (-> obj ring-spec)) + (format #t "~1Tring-radius-min: ~f~%" (-> obj ring-radius-min)) + (format #t "~1Tring-radius-max: ~f~%" (-> obj ring-radius-max)) + (format #t "~1Tspeed-mult: ~f~%" (-> obj speed-mult)) + (label cfg-4) + obj + ) + +;; definition of type elec-gate-bolt +(deftype elec-gate-bolt (structure) + ((ring lightning-control 2 :offset-assert 0) + (bolt lightning-control :offset-assert 8) + (ring-radius float :offset-assert 12) + (pos float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +;; definition for method 3 of type elec-gate-bolt +(defmethod inspect elec-gate-bolt ((obj elec-gate-bolt)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'elec-gate-bolt) + (format #t "~1Tring[2] @ #x~X~%" (-> obj ring)) + (format #t "~1Tbolt: ~A~%" (-> obj bolt)) + (format #t "~1Tring-radius: ~f~%" (-> obj ring-radius)) + (format #t "~1Tpos: ~f~%" (-> obj pos)) + (label cfg-4) + obj + ) + +;; definition of type elec-wall +(deftype elec-wall (structure) + ((pos vector :inline :offset-assert 0) + (dir vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; definition for method 3 of type elec-wall +(defmethod inspect elec-wall ((obj elec-wall)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'elec-wall) + (format #t "~1Tpos: #~%" (-> obj pos)) + (format #t "~1Tdir: #~%" (-> obj dir)) + (label cfg-4) + obj + ) + +;; definition of type elec-gate +(deftype elec-gate (process-drawable) + ((params elec-gate-params :offset-assert 200) + (path-l path-control :offset 152) + (path-r path-control :offset-assert 204) + (l-bolt elec-gate-bolt 5 :inline :offset-assert 208) + (part-on sparticle-launch-control :offset 168) + (part-off sparticle-launch-control :offset-assert 368) + (part-spawner-left part-spawner :offset-assert 372) + (part-spawner-right part-spawner :offset-assert 376) + (on-start basic :offset-assert 380) + (on-stop basic :offset-assert 384) + (dividing-wall elec-wall :inline :offset-assert 400) + (plane elec-wall 2 :inline :offset-assert 432) + (wall-y float :offset-assert 496) + (wall-xz float :offset-assert 500) + (lightning-quality float :offset-assert 504) + (quality-enabled? symbol :offset-assert 508) + ) + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + (:methods + (idle () _type_ :state 20) + (active () _type_ :state 21) + (shutdown () _type_ :state 22) + (get-params (_type_) elec-gate-params 23) + (elec-gate-method-24 (_type_) none 24) + (set-palette! (_type_) none 25) + (set-state! (_type_) none 26) + (spawn-particles (_type_ sparticle-launch-control) none 27) + (set-elec-scale-if-close! (_type_ float) none 28) + (set-elec-scale! (_type_ float) none 29) + ) + ) + +;; definition for method 3 of type elec-gate +(defmethod inspect elec-gate ((obj elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tparams: #~%" (-> obj params)) + (format #t "~2Tpath-l: ~A~%" (-> obj path)) + (format #t "~2Tpath-r: ~A~%" (-> obj path-r)) + (format #t "~2Tl-bolt[5] @ #x~X~%" (-> obj l-bolt)) + (format #t "~2Tpart-on: ~A~%" (-> obj part)) + (format #t "~2Tpart-off: ~A~%" (-> obj part-off)) + (format #t "~2Tpart-spawner-left: ~A~%" (-> obj part-spawner-left)) + (format #t "~2Tpart-spawner-right: ~A~%" (-> obj part-spawner-right)) + (format #t "~2Ton-start: ~A~%" (-> obj on-start)) + (format #t "~2Ton-stop: ~A~%" (-> obj on-stop)) + (format #t "~2Tdividing-wall: #~%" (-> obj dividing-wall)) + (format #t "~2Tplane[2] @ #x~X~%" (-> obj plane)) + (format #t "~2Twall-y: ~f~%" (-> obj wall-y)) + (format #t "~2Twall-xz: ~f~%" (-> obj wall-xz)) + (format #t "~2Tlightning-quality: ~f~%" (-> obj lightning-quality)) + (format #t "~2Tquality-enabled?: ~A~%" (-> obj quality-enabled?)) + (label cfg-4) + obj + ) + +;; definition for symbol *default-elec-gate-params*, type elec-gate-params +(define *default-elec-gate-params* (new 'static 'elec-gate-params + :bolt-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :start-color #x80ffffff + :end-color #x80000000 + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 16 + :box-size 8601.6 + :merge-factor 0.5 + :merge-count 2 + :radius 4096.0 + :duration -1.0 + :sound #f + ) + :ring-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :rand-func #x3 + :start-color #x80ffffff + :end-color #x80ffffff + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 12 + :box-size 3072.0 + :merge-factor 0.5 + :radius 2048.0 + :duration -1.0 + :sound #f + ) + :ring-radius-min 1638.4 + :ring-radius-max 2867.2 + :speed-mult 1.0 + ) + ) + +;; definition for function elec-gate-post +;; INFO: Used lq/sq +(defbehavior elec-gate-post elec-gate () + (local-vars (curr-bolt elec-gate-bolt) (curr-point int)) + (let ((num-points (-> self params ring-spec num-points))) + (dotimes (bolt-idx 5) + (set! curr-bolt (-> self l-bolt bolt-idx)) + (let ((s4-0 + (get-point-at-percent-along-path! (-> self path) (new 'stack-no-clear 'vector) (-> curr-bolt pos) 'interp) + ) + (s3-0 + (get-point-at-percent-along-path! (-> self path-r) (new 'stack-no-clear 'vector) (-> curr-bolt pos) 'interp) + ) + ) + (let ((a0-2 (-> curr-bolt bolt)) + (v1-10 s4-0) + ) + (set! (-> a0-2 state meet data 0 quad) (-> v1-10 quad)) + ) + (let ((a0-5 (-> curr-bolt bolt)) + (v1-13 s3-0) + ) + (set! (-> a0-5 state meet data (+ (-> a0-5 state points-to-draw) -1) quad) (-> v1-13 quad)) + ) + (let ((s2-0 (-> curr-bolt ring 0)) + (s1-0 (-> curr-bolt ring 1)) + (s0-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s0-0 x) 0.0) + (set! (-> s0-0 y) 0.0) + (set! (-> s0-0 z) (-> curr-bolt ring-radius)) + (set! (-> s0-0 w) 0.0) + (let ((f30-0 (* 65536.0 (/ 1.0 (the float (+ num-points -1)))))) + (set! curr-point 0) + (while (< curr-point num-points) + (set-point! s2-0 curr-point (vector+! (new 'stack-no-clear 'vector) s4-0 s0-0)) + (set-point! s1-0 curr-point (vector+! (new 'stack-no-clear 'vector) s3-0 s0-0)) + (vector-rotate-y! s0-0 s0-0 f30-0) + (set! curr-point (+ curr-point 1)) + ) + ) + ) + ) + ) + ) + (debug-draw (-> self path)) + (debug-draw (-> self path-r)) + (none) + ) + +;; failed to figure out what this is: +(defstate idle (elec-gate) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (go-virtual active) + ) + ) + ) + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (dotimes (bolt-idx 5) + (let* ((bolt (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm0)) + (mode-diff? (!= mode (-> bolt state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> bolt state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> bolt state start-color) (-> bolt spec start-color)) + (set! (-> bolt state end-color) (-> bolt spec end-color)) + ) + ) + (set! (-> bolt state mode) mode) + (let ((first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm0)) + (set! mode-diff? (!= mode (-> first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> first-ring state start-color) (-> first-ring spec start-color)) + (set! (-> first-ring state end-color) (-> first-ring spec end-color)) + ) + ) + (set! (-> first-ring state mode) mode) + ) + (let ((second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm0)) + (set! mode-diff? (!= mode (-> second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> second-ring state start-color) (-> second-ring spec start-color)) + (set! (-> second-ring state end-color) (-> second-ring spec end-color)) + ) + ) + (set! (-> second-ring state mode) mode) + ) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 0.0) + (if (nonzero? (-> self part-off)) + (spawn-particles self (-> self part-off)) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate active (elec-gate) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('shutdown) + (go-virtual shutdown) + ) + ) + ) + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #f) + (if (-> self on-start) + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (-> self root trans)) + (the-as pair (-> self on-start)) + ) + ) + (dotimes (bolt-idx 5) + (let* ((curr-bolt (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm1)) + (mode-diff? (!= mode (-> curr-bolt state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> curr-bolt state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> curr-bolt state start-color) (-> curr-bolt spec start-color)) + (set! (-> curr-bolt state end-color) (-> curr-bolt spec end-color)) + ) + ) + (set! (-> curr-bolt state mode) mode) + (let ((first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm1)) + (set! mode-diff? (!= mode (-> first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> first-ring state start-color) (-> first-ring spec start-color)) + (set! (-> first-ring state end-color) (-> first-ring spec end-color)) + ) + ) + (set! (-> first-ring state mode) mode) + ) + (let ((second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm1)) + (set! mode-diff? (!= mode (-> second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> second-ring state start-color) (-> second-ring spec start-color)) + (set! (-> second-ring state end-color) (-> second-ring spec end-color)) + ) + ) + (set! (-> second-ring state mode) mode) + ) + ) + ) + (let ((vec-pair (new 'stack-no-clear 'inline-array 'vector 2))) + (dotimes (vec-idx 2) + (set! (-> vec-pair vec-idx quad) (the-as uint128 0)) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + 0.0 + (get-point-in-path! (-> self path) (-> vec-pair 0) 0.0 'interp) + (get-point-in-path! (-> self path-r) (-> vec-pair 1) 0.0 'interp) + (vector-! s5-0 (-> vec-pair 1) (-> vec-pair 0)) + (vector-normalize! s5-0 8192.0) + (vector+! (-> vec-pair 1) (-> vec-pair 1) s5-0) + (vector-negate! s5-0 s5-0) + (vector+! (-> vec-pair 0) (-> vec-pair 0) s5-0) + (vector-normalize-copy! s5-0 *up-vector* -8192.0) + (vector+! (-> vec-pair 0) (-> vec-pair 0) s5-0) + (vector+! (-> vec-pair 1) (-> vec-pair 1) s5-0) + ) + (let ((f0-6 + (+ (- 81920.0 (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) 0.0 'interp) y)) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (get-num-segments (-> self path)) 'interp) + y + ) + ) + ) + ) + (blocking-plane-spawn (the-as curve-control #f) vec-pair f0-6) + ) + ) + (none) + ) + :trans (behavior () + (local-vars + (sv-176 (function lightning-spec time-frame symbol process-drawable vector vector none)) + (sv-192 lightning-spec) + (sv-208 int) + (sv-224 symbol) + (sv-240 symbol) + (sv-256 lightning-spec) + (sv-272 int) + (sv-288 symbol) + (sv-304 symbol) + ) + (let* ((target *target*) + (proc-focus (if (type? target process-focusable) + target + ) + ) + ) + (when proc-focus + (let ((focus-trans (get-trans proc-focus 0))) + (let* ((a0-3 (vector-! (new 'stack-no-clear 'vector) focus-trans (the-as vector (-> self dividing-wall)))) + (s4-0 (-> self plane (if (< 0.0 (vector-dot a0-3 (-> self dividing-wall dir))) + 0 + 1 + ) + ) + ) + (s3-1 (vector-! (new 'stack-no-clear 'vector) focus-trans (-> s4-0 pos))) + ) + (when (and (< (vector-dot (vector-normalize-copy! (new 'stack-no-clear 'vector) s3-1 1.0) (-> s4-0 dir)) 0.0) + (let ((v1-13 s3-1)) + (< (sqrtf (+ (* (-> v1-13 x) (-> v1-13 x)) (* (-> v1-13 z) (-> v1-13 z)))) (-> self wall-xz)) + ) + (< (fabs (-> s3-1 y)) (-> self wall-y)) + ) + (let ((evt (new 'stack-no-clear 'event-message-block))) + (set! (-> evt from) (process->ppointer self)) + (set! (-> evt num-params) 2) + (set! (-> evt message) 'attack) + (set! (-> evt param 0) (the-as uint #f)) + (let ((attack (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up control id)))) + (let* ((game-info *game-info*) + (attack-id (+ (-> game-info attack-id) 1)) + ) + (set! (-> game-info attack-id) attack-id) + (set! (-> attack id) attack-id) + ) + (set! (-> attack vector quad) (-> s4-0 dir quad)) + (set! (-> attack shove-back) 24576.0) + (set! (-> attack shove-up) 12288.0) + (set! (-> attack control) (if (logtest? (focus-status board) (-> proc-focus focus-status)) + 1.0 + 0.0 + ) + ) + (set! (-> evt param 1) (the-as uint attack)) + ) + (send-event-function proc-focus evt) + ) + (let* ((s4-1 (-> self l-bolt)) + (s3-2 (get-point-at-percent-along-path! (-> self path) (new 'stack-no-clear 'vector) (-> s4-1 0 pos) 'interp)) + (s4-2 + (get-point-at-percent-along-path! (-> self path-r) (new 'stack-no-clear 'vector) (-> s4-1 0 pos) 'interp) + ) + ) + (let ((s2-0 (get-process *default-dead-pool* lightning-tracker #x4000))) + (when s2-0 + (let ((t9-7 (method-of-type lightning-tracker activate))) + (t9-7 + (the-as lightning-tracker s2-0) + *entity-pool* + (symbol->string (-> lightning-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s1-0 run-function-in-process) + (s0-0 s2-0) + ) + (set! sv-176 lightning-tracker-init) + (set! sv-192 (-> self params bolt-spec)) + (set! sv-208 15) + (set! sv-224 (the-as symbol #f)) + (set! sv-240 (the-as symbol #f)) + (let ((t3-0 (get-trans proc-focus 3))) + ((the-as (function object object object object object object object object none) s1-0) + s0-0 + sv-176 + sv-192 + sv-208 + sv-224 + sv-240 + s3-2 + t3-0 + ) + ) + ) + (-> s2-0 ppointer) + ) + ) + (let ((s3-3 (get-process *default-dead-pool* lightning-tracker #x4000))) + (when s3-3 + (let ((t9-11 (method-of-type lightning-tracker activate))) + (t9-11 + (the-as lightning-tracker s3-3) + *entity-pool* + (symbol->string (-> lightning-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s2-1 run-function-in-process) + (s1-1 s3-3) + (s0-1 lightning-tracker-init) + ) + (set! sv-256 (-> self params bolt-spec)) + (set! sv-272 15) + (set! sv-288 (the-as symbol #f)) + (set! sv-304 (the-as symbol #f)) + (let ((t3-1 (get-trans proc-focus 3))) + ((the-as (function object object object object object object object object none) s2-1) + s1-1 + s0-1 + sv-256 + sv-272 + sv-288 + sv-304 + s4-2 + t3-1 + ) + ) + ) + (-> s3-3 ppointer) + ) + ) + ) + ) + ) + (set! (-> self lightning-quality) + (lerp-scale 0.0 1.0 (vector-vector-distance focus-trans (-> self root trans)) 491520.0 163840.0) + ) + ) + ) + ) + (let ((gp-2 (+ (the int (* 5.0 (-> self lightning-quality))) 1))) + (dotimes (bolt-idx 5) + (let ((s3-5 (-> self l-bolt bolt-idx)) + (s2-2 (-> self params)) + (s4-4 (if (and (-> self quality-enabled?) (zero? (mod bolt-idx gp-2))) + (lightning-mode lm0) + (lightning-mode lm-1) + ) + ) + ) + (seek! (-> s3-5 pos) 1.5 (* (-> s2-2 speed-mult) (+ 0.2 (-> s3-5 pos)) (-> self clock seconds-per-frame))) + (cond + ((>= (-> s3-5 pos) 1.5) + (let ((v1-59 (-> self l-bolt bolt-idx bolt)) + (a0-31 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-19 (!= a0-31 (-> v1-59 state mode)))) + (case a0-31 + (((lightning-mode lm3)) + (if a1-19 + (set! (-> v1-59 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-59 state start-color) (-> v1-59 spec start-color)) + (set! (-> v1-59 state end-color) (-> v1-59 spec end-color)) + ) + ) + ) + (set! (-> v1-59 state mode) a0-31) + ) + (let ((v1-62 (-> self l-bolt bolt-idx ring 0)) + (a0-32 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-29 (!= a0-32 (-> v1-62 state mode)))) + (case a0-32 + (((lightning-mode lm3)) + (if a1-29 + (set! (-> v1-62 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-62 state start-color) (-> v1-62 spec start-color)) + (set! (-> v1-62 state end-color) (-> v1-62 spec end-color)) + ) + ) + ) + (set! (-> v1-62 state mode) a0-32) + ) + (let ((v1-65 (-> self l-bolt bolt-idx ring 1)) + (a0-33 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-39 (!= a0-33 (-> v1-65 state mode)))) + (case a0-33 + (((lightning-mode lm3)) + (if a1-39 + (set! (-> v1-65 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-65 state start-color) (-> v1-65 spec start-color)) + (set! (-> v1-65 state end-color) (-> v1-65 spec end-color)) + ) + ) + ) + (set! (-> v1-65 state mode) a0-33) + ) + (set! (-> s3-5 ring-radius) (rand-vu-float-range (-> s2-2 ring-radius-min) (-> s2-2 ring-radius-max))) + (set! (-> s3-5 pos) 0.0) + ) + ((>= (-> s3-5 pos) 1.0) + (let ((v1-69 (-> self l-bolt bolt-idx bolt)) + (a0-37 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-50 (!= a0-37 (-> v1-69 state mode)))) + (case a0-37 + (((lightning-mode lm3)) + (if a1-50 + (set! (-> v1-69 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-69 state start-color) (-> v1-69 spec start-color)) + (set! (-> v1-69 state end-color) (-> v1-69 spec end-color)) + ) + ) + ) + (set! (-> v1-69 state mode) a0-37) + ) + (let ((v1-72 (-> self l-bolt bolt-idx ring 0)) + (a0-38 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-60 (!= a0-38 (-> v1-72 state mode)))) + (case a0-38 + (((lightning-mode lm3)) + (if a1-60 + (set! (-> v1-72 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-72 state start-color) (-> v1-72 spec start-color)) + (set! (-> v1-72 state end-color) (-> v1-72 spec end-color)) + ) + ) + ) + (set! (-> v1-72 state mode) a0-38) + ) + (let ((v1-75 (-> self l-bolt bolt-idx ring 1)) + (a0-39 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-70 (!= a0-39 (-> v1-75 state mode)))) + (case a0-39 + (((lightning-mode lm3)) + (if a1-70 + (set! (-> v1-75 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-75 state start-color) (-> v1-75 spec start-color)) + (set! (-> v1-75 state end-color) (-> v1-75 spec end-color)) + ) + ) + ) + (set! (-> v1-75 state mode) a0-39) + ) + ) + ) + ) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 1.0) + (if (nonzero? (-> self part)) + (spawn-particles self (-> self part)) + ) + (update! (-> self sound)) + (elec-gate-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate shutdown (elec-gate) + :virtual #t + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (stop! (-> self sound)) + (sound-play "elec-gate-off") + (blocking-plane-destroy) + (if (-> self on-stop) + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (-> self root trans)) + (the-as pair (-> self on-stop)) + ) + ) + (none) + ) + :trans (behavior () + (let ((go-idle? #t)) + (dotimes (bolt-idx 5) + (let ((left-bolt-0 (-> self l-bolt bolt-idx))) + (seek! (-> left-bolt-0 pos) 0.0 (* (- 1.14 (-> left-bolt-0 pos)) (-> self clock seconds-per-frame))) + (set! go-idle? + (cond + ((or (< 1.0 (-> left-bolt-0 pos)) (>= 0.0 (-> left-bolt-0 pos))) + (let* ((left-bolt-1 (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm3)) + (mode-diff? (!= mode (-> left-bolt-1 state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-1 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-1 state start-color) (-> left-bolt-1 spec start-color)) + (set! (-> left-bolt-1 state end-color) (-> left-bolt-1 spec end-color)) + ) + ) + (set! (-> left-bolt-1 state mode) mode) + (let ((left-bolt-first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm3)) + (set! mode-diff? (!= mode (-> left-bolt-first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-first-ring state start-color) (-> left-bolt-first-ring spec start-color)) + (set! (-> left-bolt-first-ring state end-color) (-> left-bolt-first-ring spec end-color)) + ) + ) + (set! (-> left-bolt-first-ring state mode) mode) + ) + (let ((left-bolt-second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm3)) + (set! mode-diff? (!= mode (-> left-bolt-second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-second-ring state start-color) (-> left-bolt-second-ring spec start-color)) + (set! (-> left-bolt-second-ring state end-color) (-> left-bolt-second-ring spec end-color)) + ) + ) + (set! (-> left-bolt-second-ring state mode) mode) + ) + ) + go-idle? + ) + (else + #f + ) + ) + ) + ) + ) + (if go-idle? + (go-virtual idle) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 0.0) + (if (nonzero? (-> self part-off)) + (spawn-particles self (-> self part-off)) + ) + (elec-gate-post) + (none) + ) + ) + +;; definition for method 28 of type elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-elec-scale-if-close! elec-gate ((obj elec-gate) (arg0 float)) + "If [[target]]'s position is within `80` [[meters]], set the scale to the value provided + @see [[elec-gate::29]]" + (if (< (vector-vector-distance (-> obj root trans) (target-pos 0)) 327680.0) + (set-elec-scale! obj arg0) + ) + 0 + (none) + ) + +;; definition for method 27 of type elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod spawn-particles elec-gate ((obj elec-gate) (sparticle-lc sparticle-launch-control)) + "TODO - Calls [[sparticle-launch-control::11]] on `part-spawner-left` and `part-spawner-right` if they are defined" + (if (-> obj part-spawner-left) + (spawn sparticle-lc (the-as vector (&-> (-> obj part-spawner-left child) 8))) + ) + (if (-> obj part-spawner-right) + (spawn sparticle-lc (the-as vector (&-> (-> obj part-spawner-right child) 8))) + ) + 0 + (none) + ) + +;; definition for method 7 of type elec-gate +;; WARN: Return type mismatch process-drawable vs elec-gate. +(defmethod relocate elec-gate ((obj elec-gate) (new-addr int)) + (dotimes (bolt-idx 5) + (let ((left-bolt (-> obj l-bolt bolt-idx))) + (if (nonzero? (-> left-bolt bolt)) + (&+! (-> left-bolt bolt) new-addr) + ) + (if (nonzero? (-> left-bolt ring 0)) + (&+! (-> left-bolt ring 0) new-addr) + ) + (if (nonzero? (-> left-bolt ring 1)) + (&+! (-> left-bolt ring 1) new-addr) + ) + ) + ) + (if (nonzero? (-> obj path-r)) + (&+! (-> obj path-r) new-addr) + ) + (when (nonzero? (-> obj part-off)) + (if (nonzero? (-> obj part-off)) + (&+! (-> obj part-off) new-addr) + ) + ) + (the-as elec-gate ((method-of-type process-drawable relocate) obj new-addr)) + ) + +;; definition for method 10 of type elec-gate +(defmethod deactivate elec-gate ((obj elec-gate)) + (set-elec-scale-if-close! obj 0.0) + ((the-as (function process-drawable none) (find-parent-method elec-gate 10)) obj) + (none) + ) + +;; definition for method 23 of type elec-gate +(defmethod get-params elec-gate ((obj elec-gate)) + "@returns [[*default-elec-gate-params*]] by default" + *default-elec-gate-params* + ) + +;; definition for method 24 of type elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod elec-gate-method-24 elec-gate ((obj elec-gate)) + "virtual" + 0 + (none) + ) + +;; definition for method 25 of type elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-palette! elec-gate ((obj elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + 0 + (none) + ) + +;; definition for method 26 of type elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-state! elec-gate ((obj elec-gate)) + "If either [[actor-option::17]] is set on the [[elec-gate]] or the related subtask is completed + make the gate `idle`. + + Otherwise, the gate will be `active`." + (if (or (logtest? (actor-option user17) (-> obj fact options)) + (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete))) + ) + (go (method-of-object obj idle)) + (go (method-of-object obj active)) + ) + 0 + (none) + ) + +;; definition for method 11 of type elec-gate +;; INFO: Used lq/sq +(defmethod init-from-entity! elec-gate ((obj elec-gate) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! (-> obj entity) arg0) + (set! (-> obj fact) + (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-eco-pill-green-inc)) + ) + (set! (-> obj params) (get-params obj)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj path) (new 'process 'path-control obj 'pathl 0.0 (the-as entity #f) #f)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj path-r) (new 'process 'path-control obj 'pathr 0.0 (the-as entity #f) #f)) + (logior! (-> obj path-r flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj part-spawner-left) (the-as part-spawner (entity-actor-lookup arg0 'alt-actor 0))) + (set! (-> obj part-spawner-right) (the-as part-spawner (entity-actor-lookup arg0 'alt-actor 1))) + (let ((params (-> obj params))) + (dotimes (bolt-idx 5) + (let ((left-bolt (-> obj l-bolt bolt-idx))) + (set! (-> left-bolt bolt) (new 'process 'lightning-control (-> params bolt-spec) obj 0.0)) + (set! (-> left-bolt ring 0) (new 'process 'lightning-control (-> params ring-spec) obj 0.0)) + (set! (-> left-bolt ring 1) (new 'process 'lightning-control (-> params ring-spec) obj 0.0)) + (set! (-> left-bolt ring-radius) + (rand-vu-float-range (-> params ring-radius-min) (-> params ring-radius-max)) + ) + (set! (-> left-bolt pos) (* 0.2 (the float bolt-idx))) + ) + ) + ) + (let* ((s4-1 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp)) + (v1-26 (get-point-in-path! (-> obj path-r) (new 'stack-no-clear 'vector) 0.0 'interp)) + (a1-15 (vector-! (new 'stack-no-clear 'vector) v1-26 s4-1)) + (s5-3 (vector+float*! (new 'stack-no-clear 'vector) s4-1 a1-15 0.5)) + (v1-28 (vector-normalize-copy! (new 'stack-no-clear 'vector) a1-15 1.0)) + ) + (vector-cross! v1-28 v1-28 *up-vector*) + (set! (-> obj dividing-wall pos quad) (-> s5-3 quad)) + (set! (-> obj dividing-wall dir quad) (-> v1-28 quad)) + (vector+float*! (the-as vector (-> obj plane)) s5-3 v1-28 12288.0) + (set! (-> (the-as vector (&-> obj stack 320)) quad) (-> v1-28 quad)) + (vector-float*! v1-28 v1-28 -1.0) + (vector+float*! (the-as vector (&-> obj stack 336)) s5-3 v1-28 12288.0) + (set! (-> (the-as vector (&-> obj stack 352)) quad) (-> v1-28 quad)) + ) + (set! (-> obj wall-xz) + (vector-vector-distance + (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp) + (get-point-in-path! (-> obj path-r) (new 'stack-no-clear 'vector) 0.0 'interp) + ) + ) + (set! (-> obj wall-xz) (* 0.5 (-> obj wall-xz))) + (set! (-> obj wall-xz) (+ 4096.0 (-> obj wall-xz))) + (set! (-> obj wall-y) + (fabs + (- (-> (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (get-num-segments (-> obj path)) 'interp) + y + ) + (-> (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp) y) + ) + ) + ) + (set! (-> obj wall-y) (+ 4096.0 (-> obj wall-y))) + (set! (-> obj quality-enabled?) #t) + (set! (-> obj lightning-quality) 1.0) + (set! (-> obj sound) + (new 'process 'ambient-sound (static-sound-spec "electric-gate" :fo-max 70) (-> obj root trans)) + ) + (set! (-> obj on-start) (res-lump-struct (-> obj entity) 'on-start basic)) + (set! (-> obj on-stop) (res-lump-struct (-> obj entity) 'on-stop basic)) + (elec-gate-method-24 obj) + (set-palette! obj) + (set-state! obj) + (none) + ) + +;; definition of type fort-elec-gate +(deftype fort-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + +;; definition for method 3 of type fort-elec-gate +(defmethod inspect fort-elec-gate ((obj fort-elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elec-gate inspect))) + (t9-0 obj) + ) + (format #t "~2Tpalette-id: ~D~%" (-> obj palette-id)) + (label cfg-4) + obj + ) + +;; definition for method 29 of type fort-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-elec-scale! fort-elec-gate ((obj fort-elec-gate) (scale float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-fordumpa-electricity-scale! scale) + (set-forresca-electricity-scale! scale (-> obj palette-id)) + (set-forrescb-electricity-scale! scale (-> obj palette-id)) + 0 + (none) + ) + +;; definition for method 25 of type fort-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-palette! fort-elec-gate ((obj fort-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) + +;; definition of type drill-elec-gate +(deftype drill-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + +;; definition for method 3 of type drill-elec-gate +(defmethod inspect drill-elec-gate ((obj drill-elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elec-gate inspect))) + (t9-0 obj) + ) + (format #t "~2Tpalette-id: ~D~%" (-> obj palette-id)) + (label cfg-4) + obj + ) + +;; definition for method 29 of type drill-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-elec-scale! drill-elec-gate ((obj drill-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-drill-electricity-scale! arg0 (-> obj palette-id)) + 0 + (none) + ) + +;; definition for method 25 of type drill-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-palette! drill-elec-gate ((obj drill-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) + +;; definition of type caspad-elec-gate +(deftype caspad-elec-gate (elec-gate) + () + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + ) + +;; definition for method 3 of type caspad-elec-gate +(defmethod inspect caspad-elec-gate ((obj caspad-elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elec-gate inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; definition of type castle-elec-gate +(deftype castle-elec-gate (elec-gate) + () + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + ) + +;; definition for method 3 of type castle-elec-gate +(defmethod inspect castle-elec-gate ((obj castle-elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elec-gate inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; definition for method 29 of type castle-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-elec-scale! castle-elec-gate ((obj castle-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-castle-electricity-scale! arg0) + 0 + (none) + ) + +;; definition for symbol *caspad-elec-gate-params*, type elec-gate-params +(define *caspad-elec-gate-params* (new 'static 'elec-gate-params + :bolt-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :start-color #x80ffffff + :end-color #x80000000 + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 16 + :box-size 16793.6 + :merge-factor 0.5 + :merge-count 2 + :radius 18841.6 + :duration -1.0 + :sound #f + ) + :ring-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :rand-func #x3 + :start-color #x80ffffff + :end-color #x80ffffff + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 12 + :box-size 17408.0 + :merge-factor 0.5 + :merge-count 2 + :radius 17612.8 + :duration -1.0 + :sound #f + ) + :ring-radius-min 40960.0 + :ring-radius-max 53248.0 + :speed-mult 0.3 + ) + ) + +;; definition for method 23 of type caspad-elec-gate +(defmethod get-params caspad-elec-gate ((obj caspad-elec-gate)) + "@returns [[*default-elec-gate-params*]] by default" + *caspad-elec-gate-params* + ) + +;; definition of type palroof-elec-gate +(deftype palroof-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + +;; definition for method 3 of type palroof-elec-gate +(defmethod inspect palroof-elec-gate ((obj palroof-elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elec-gate inspect))) + (t9-0 obj) + ) + (format #t "~2Tpalette-id: ~D~%" (-> obj palette-id)) + (label cfg-4) + obj + ) + +;; definition for method 29 of type palroof-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-elec-scale! palroof-elec-gate ((obj palroof-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-palroof-electricity-scale! arg0 (-> obj palette-id)) + 0 + (none) + ) + +;; definition for method 25 of type palroof-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-palette! palroof-elec-gate ((obj palroof-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) diff --git a/test/decompiler/reference/jak2/levels/common/enemy/bouncer_REF.gc b/test/decompiler/reference/jak2/levels/common/enemy/bouncer_REF.gc new file mode 100644 index 0000000000..8621433393 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/common/enemy/bouncer_REF.gc @@ -0,0 +1,277 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type bouncer +(deftype bouncer (process-drawable) + ((spring-height meters :offset-assert 200) + (smush float :offset-assert 204) + (mods basic :offset-assert 208) + ) + :heap-base #x60 + :method-count-assert 25 + :size-assert #xd4 + :flag-assert #x19006000d4 + (:methods + (idle () _type_ :state 20) + (fire () _type_ :state 21) + (smush () _type_ :state 22) + (init-skeleton! (_type_) none 23) + (bouncer-method-24 (_type_) none 24) + ) + ) + +;; definition for method 3 of type bouncer +(defmethod inspect bouncer ((obj bouncer)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tspring-height: (meters ~m)~%" (-> obj spring-height)) + (format #t "~2Tsmush: ~f~%" (-> obj smush)) + (format #t "~2Tmods: ~A~%" (-> obj mods)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(method-set! bouncer 12 (method-of-type process run-logic?)) + +;; failed to figure out what this is: +(let ((a0-3 (new 'static 'skeleton-group + :name "skel-bouncer" + :extra #f + :info #f + :art-group-name "bounceytarp" + :bounds (new 'static 'vector :w 16384.0) + :version #x7 + ) + ) + ) + (set! (-> a0-3 jgeo) 0) + (set! (-> a0-3 janim) 2) + (set! (-> a0-3 mgeo 0) 1) + (set! (-> a0-3 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-3) + ) + +;; failed to figure out what this is: +(defstate idle (bouncer) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as + object + (cond + ((= evt-type 'bonk) + (when ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry (-> event param 0)) + (the-as collide-shape (-> self root)) + (the-as uint 1) + ) + (when (send-event proc 'jump (-> self spring-height) (-> self spring-height) (-> self mods)) + (sound-play "trampoline") + (go-virtual fire) + ) + ) + ) + ((= evt-type 'touch) + (let ((gp-2 (-> event param 0))) + (cond + (((method-of-type touching-shapes-entry touching-shapes-entry-method-13) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 1) + (the-as uint 0) + ) + (when ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 1) + ) + (if (not (and (-> self next-state) (let ((v1-21 (-> self next-state name))) + (or (= v1-21 'smush) (= v1-21 'fire)) + ) + ) + ) + (go-virtual smush) + ) + ) + ) + (((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 4) + ) + (persist-with-delay + *setting-control* + (the-as symbol (process->ppointer self)) + (seconds 0.05) + 'double-jump + #f + 0.0 + 0 + ) + ) + ) + ) + ) + ((= evt-type 'attack) + (let ((v1-28 (the-as object (-> event param 1))) + (a0-17 (-> event param 0)) + (a2-7 0) + ) + (cond + ((= (-> (the-as attack-info v1-28) mode) 'flop) + (set! a2-7 1) + ) + ((= (-> (the-as attack-info v1-28) mode) 'board) + (set! a2-7 9) + ) + ) + (when (and (nonzero? a2-7) + (and ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry a0-17) + (the-as collide-shape (-> self root)) + (the-as uint a2-7) + ) + (send-event proc 'jump (-> self spring-height) (-> self spring-height) (-> self mods)) + ) + ) + (sound-play "trampoline") + (go-virtual fire) + #f + ) + ) + ) + ) + ) + ) + ) + :code (behavior () + (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! min) + (transform-post) + (until #f + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate smush (bouncer) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch) + (set! (-> self state-time) (-> self clock frame-counter)) + #f + ) + (else + ((-> (method-of-object self idle) event) proc arg1 event-type event) + ) + ) + ) + :code (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (set! (-> self smush) 0.0) + (until #f + (if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.2)) + (ja :num! (seek! 0.0 0.1)) + (ja :num! (seek! + (lerp-scale + (ja-aframe 6.0 0) + (ja-aframe 2.0 0) + (vector-vector-xz-distance (target-pos 0) (-> self root trans)) + 0.0 + 4096.0 + ) + 0.2 + ) + ) + ) + (suspend) + (if (ja-min? 0) + (go-virtual idle) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior bouncer) transform-post) + ) + +;; failed to figure out what this is: +(defstate fire (bouncer) + :virtual #t + :code (behavior () + (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 178 (seconds 0.1)) + (ja-no-eval :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) + :num! (seek! + (the float (+ (-> (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) frames num-frames) -1)) + ) + :frame-num (ja-aframe 6.0 0) + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + (go-virtual idle) + (none) + ) + :post (the-as (function none :behavior bouncer) transform-post) + ) + +;; definition for method 23 of type bouncer +;; WARN: Return type mismatch int vs none. +(defmethod init-skeleton! bouncer ((obj bouncer)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-bouncer" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + 0 + (none) + ) + +;; definition for method 24 of type bouncer +;; WARN: Return type mismatch int vs none. +(defmethod bouncer-method-24 bouncer ((obj bouncer)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec crate)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 3072.0 0.0 6963.2) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root) collision-shape) + ) + 0 + (none) + ) + +;; definition for method 11 of type bouncer +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! bouncer ((obj bouncer) (arg0 entity-actor)) + (set! (-> obj mods) #f) + (bouncer-method-24 obj) + (process-drawable-from-entity! obj arg0) + (init-skeleton! obj) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh obj)) + (set! (-> obj spring-height) (res-lump-float arg0 'spring-height :default 45056.0)) + (go (method-of-object obj idle)) + (none) + ) diff --git a/test/decompiler/test_FormExpressionBuild.cpp b/test/decompiler/test_FormExpressionBuild.cpp index f7f849622e..c7cd45feae 100644 --- a/test/decompiler/test_FormExpressionBuild.cpp +++ b/test/decompiler/test_FormExpressionBuild.cpp @@ -2152,7 +2152,7 @@ TEST_F(FormRegressionTestJak1, ExprPrintTreeBitmask) { "(begin\n" " (dotimes\n" " (s4-0 arg1)\n" - " (if (zero? (logand arg0 1)) (format #t \" \") (format #t \"| \"))\n" + " (if (not (logtest? arg0 1)) (format #t \" \") (format #t \"| \"))\n" " (set! arg0 (shr arg0 1))\n" " )\n" " #f\n" diff --git a/test/decompiler/test_FormExpressionBuildLong.cpp b/test/decompiler/test_FormExpressionBuildLong.cpp index 3e1f41644b..b181e74657 100644 --- a/test/decompiler/test_FormExpressionBuildLong.cpp +++ b/test/decompiler/test_FormExpressionBuildLong.cpp @@ -1886,7 +1886,7 @@ TEST_F(FormRegressionTestJak1, ExprValid) { " )\n" " ((= arg1 binteger)\n" " (cond\n" - " ((zero? (logand (the-as int arg0) 7))\n" + " ((not (logtest? (the-as int arg0) 7))\n" " #t\n" " )\n" " (else\n" diff --git a/test/goalc/test_debugger.cpp b/test/goalc/test_debugger.cpp index dbce885a92..312bb51669 100644 --- a/test/goalc/test_debugger.cpp +++ b/test/goalc/test_debugger.cpp @@ -8,11 +8,11 @@ namespace { void connect_compiler_and_debugger(Compiler& compiler, bool do_break) { - lg::info("connect_compiler_and_debugger:\n"); + lg::info("connect_compiler_and_debugger:"); bool connect_status = compiler.connect_to_target(); - lg::info("connected: {}\n", connect_status); + lg::info("connected: {}", connect_status); ASSERT_TRUE(connect_status); - lg::info("poking...\n"); + lg::info("poking..."); compiler.poke_target(); for (int i = 0; i < 100; i++) { if (compiler.get_debugger().is_valid()) { @@ -25,9 +25,9 @@ void connect_compiler_and_debugger(Compiler& compiler, bool do_break) { ASSERT_TRUE(compiler.get_debugger().is_valid()); if (do_break) { - lg::info("break...\n"); + lg::info("break..."); compiler.run_test_from_string("(dbg)"); - lg::info("OK! {} {} {}\n", compiler.get_debugger().is_valid(), + lg::info("OK! {} {} {}", compiler.get_debugger().is_valid(), compiler.get_debugger().is_attached(), compiler.get_debugger().is_halted()); } } diff --git a/test/offline/config/jak2/config.jsonc b/test/offline/config/jak2/config.jsonc index 32e4f51bda..6f6fdf021c 100644 --- a/test/offline/config/jak2/config.jsonc +++ b/test/offline/config/jak2/config.jsonc @@ -75,6 +75,8 @@ "joint-mod-look-at-handler", // bad stack-no-clear decomp "ja-play-spooled-anim", + // sampler - asm function, has to be manually re-written + "timer0-handler", // default menu // - weird array accessing pattern, we never fixed it in jak 1 @@ -160,6 +162,9 @@ "(method 21 load-state)", + "(method 16 level)", "unpack-comp-lzo", // asm mods + "update-time-of-day", + "i-hopefully-will-never-exist-dont-add-anything-after-me-please" ],