mirror of
https://github.com/open-goal/jak-project.git
synced 2026-11-07 09:26:09 -10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
21d27233d2 | ||
|
|
75b7f2b3ab | ||
|
|
f1b3de907c | ||
|
|
3d20187fd3 | ||
|
|
33f364db4a | ||
|
|
c7db3c9adb | ||
|
|
94684e32f6 | ||
|
|
e4aa2b260c | ||
|
|
d2a4685b70 | ||
|
|
6076aab5a9 | ||
|
|
cbabe7b7ef | ||
|
|
32c3cf7397 |
No files matched your search
@@ -0,0 +1,14 @@
|
||||
# Contributing Guidelines
|
||||
|
||||
Thanks for being interested in contributing to our project in some way. To keep things brief, here are the quick notes.
|
||||
|
||||
## Policies
|
||||
|
||||
- Review our [AI usage policy](https://github.com/open-goal/jak-project/blob/master/AI_POLICY.md)
|
||||
- No Android or mobile related contributions will be accepted, we aren't interested.
|
||||
|
||||
## The Hopefully Obvious
|
||||
|
||||
- Try to ensure your changes are well tested, clean and organized
|
||||
- Be respectful, don't act like someone you would never want to associate with
|
||||
- Be aware that depending on what you submit, it may not merge soon or ever depending on what it is. Don't take this personally -- reach out to us first to see if there is an appetite first before investing massive amounts of time into it.
|
||||
@@ -1,5 +1,8 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: AI Usage Policy
|
||||
url: https://github.com/open-goal/jak-project/blob/master/AI_POLICY.md
|
||||
about: Please follow the template and do not copy-paste AI generated output as your issue description.
|
||||
- name: Feature Requests and Ideas
|
||||
url: https://github.com/open-goal/jak-project/discussions/new/choose
|
||||
about: Please use the discussion board to bring up feature requests and ideas. If there is interest in them, they can then be converted to an issue(s).
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<!--
|
||||
Please be familiar with:
|
||||
- the AI Usage Policy - https://github.com/open-goal/jak-project/blob/master/AI_POLICY.md
|
||||
- and the rest of the contributing guidelines - https://github.com/open-goal/jak-project/blob/master/.github/CONTRIBUTING.md
|
||||
-->
|
||||
@@ -88,7 +88,7 @@ jobs:
|
||||
ls -l ./out/jak2
|
||||
ls -l ./out/jak3
|
||||
set +e
|
||||
python ./scripts/gsrc/compare-compilation-outputs.py --base "./out/jak1/obj.master,./out/jak2/obj.master,./out/jak3/obj.master" --compare "./out/jak1/obj.pr,./out/jak2/obj.pr,./out/jak3/obj.pr" --markdown
|
||||
python ./scripts/ci/compare-compilation-outputs.py --base "./out/jak1/obj.master,./out/jak2/obj.master,./out/jak3/obj.master" --compare "./out/jak1/obj.pr,./out/jak2/obj.pr,./out/jak3/obj.pr" --markdown
|
||||
SCRIPT_EXIT_CODE=$?
|
||||
cat ./comp-diff-report.md >> $GITHUB_STEP_SUMMARY
|
||||
if [ "$SCRIPT_EXIT_CODE" -ne 0 ]; then
|
||||
|
||||
@@ -43,7 +43,7 @@ jobs:
|
||||
run: python ./scripts/ci/lint-trailing-whitespace.py
|
||||
|
||||
- name: Check for Unresolved Conflicts
|
||||
run: python ./scripts/gsrc/check-for-conflicts.py
|
||||
run: python ./scripts/ci/check-for-conflicts.py
|
||||
|
||||
- name: Check for Incorrect Asserts
|
||||
run: python ./scripts/ci/check-for-asserts.py
|
||||
|
||||
@@ -93,6 +93,14 @@ jobs:
|
||||
ref: ${{ needs.validate-author.outputs.sha }}
|
||||
clean: false
|
||||
|
||||
- name: Cleanup Potential Outputs
|
||||
run: |
|
||||
rm -r ./ci-artifacts || true
|
||||
rm -rf ./iso_data/jak1/* || true
|
||||
rm -rf ./iso_data/jak2/* || true
|
||||
rm -rf ./iso_data/jak3/* || true
|
||||
rm -rf ./iso_data/jakx/* || true
|
||||
|
||||
- name: Build Binaries
|
||||
run: |
|
||||
cmake -B build --preset="Release-linux-clang-static" -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld" -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
||||
@@ -136,6 +144,16 @@ jobs:
|
||||
rm -r ./data/iso_data || true
|
||||
rm -r ./data/decompiler_out || true
|
||||
|
||||
# - name: Install Jak X
|
||||
# run: |
|
||||
# cd ./ci-artifacts
|
||||
# ./extractor ~/isos/jak3_ntsc.iso --game jakx --extract --validate --proj-path "$PWD/data"
|
||||
# ./extractor ~/isos/jak3_ntsc.iso --game jakx --decompile --proj-path "$PWD/data"
|
||||
# ./extractor ~/isos/jak3_ntsc.iso --game jakx --compile --proj-path "$PWD/data"
|
||||
# rm -r ./data/out || true
|
||||
# rm -r ./data/iso_data || true
|
||||
# rm -r ./data/decompiler_out || true
|
||||
|
||||
- name: Cleanup Installation
|
||||
run: |
|
||||
rm -r ./ci-artifacts || true
|
||||
@@ -160,3 +178,10 @@ jobs:
|
||||
task set-game-jak3
|
||||
task offline-tests
|
||||
rm -rf ./iso_data/jak3/*
|
||||
|
||||
- name: Run Offline Tests - Jak X
|
||||
run: |
|
||||
7z x ~/isos/jakx_ntsc.iso -o./iso_data/jakx -aos
|
||||
task set-game-jakx
|
||||
task offline-tests
|
||||
rm -rf ./iso_data/jakx/*
|
||||
@@ -0,0 +1,32 @@
|
||||
# AI Usage Policy
|
||||
|
||||
The OpenGOAL project has some strict rules regarding AI usage and contributions:
|
||||
|
||||
## There are Humans Here
|
||||
|
||||
Please remember that OpenGOAL is maintained by humans, for zero financial gain (infact, it's been at a substantial _loss_).
|
||||
|
||||
Every discussion, issue, and pull request is read and reviewed by humans (and sometimes machines, too). It is a boundary point at which people interact with each other and the work done. It is rude and disrespectful to approach this boundary with low-effort, unqualified work, since it puts the burden of validation on the maintainer.
|
||||
|
||||
If you disagree with these rules and guidelines, do not waste both of our time arguing over them. Move on to another project that aligns with your ideals instead, plenty exist, now more than ever. If you are the type to hurl insults at us because of how we have chose to maintain our project that we have poured over a-half-a-decade of our time and passion into, then your use of AI is the least of our reasons for why we want nothing to do with you.
|
||||
|
||||
## General Rules / Etiquette
|
||||
|
||||
- **All AI usage in any form must be disclosed.** You must state the tool you used (e.g. Claude Code, Cursor, Amp) along with the extent that the work was AI-assisted.
|
||||
- **No commits authored/co-authored by AI agents will be merged.** We currently have no commits in `master` that are associated with Claude, Copilot, etc., and we would like to keep it that way. Constructing and organizing the commits yourself is a useful step for succeeding at the next requirement. We also have no interest in giving these companies free advertising or being directly associated with them.
|
||||
- The following rules can be summarized with the new term gaining popularity of [don't be a meat proxy](https://dontbeameatproxy.com/):
|
||||
- **The human-in-the-loop must fully understand all code.** If you can't explain what your changes do and how they interact with the greater system without the aid of AI tools, do not contribute to this project.
|
||||
- **Issues, discussions and pull requests can use AI assistance (provided they don't violate other rules) but must have a full human-in-the-loop.** This means that any content generated with AI must have been reviewed and edited by a human before submission, this includes the issue or PR description. AI is very good at being overly verbose and including noise that distracts from the main point. **Humans must do their research and trim this down, ideally communicating with their own words.**
|
||||
- **No AI-generated media is allowed (art, images, videos, audio, etc.).** Text and code are the only acceptable AI-generated content, per the other rules in this policy.
|
||||
- **Bad AI drivers will be denounced.** People who produce bad contributions that are clearly AI (slop) will have future contributions blocked, we don't have the time or the motivation to deal with this. Additionally, this block list will be public and may be used by other projects to be aware of bad actors. We love to help junior developers learn and grow, but if you're interested in that then don't use AI, and we'll help you. I'm sorry that bad AI drivers have ruined this for you.
|
||||
|
||||
## OpenGOAL / Decompilation Project Specific Rules
|
||||
|
||||
- **Accidentally committing game assets / data will result in an immediate ban from the project.** This is something we have zero tolerance on going forward. The repository already has all of the relevant spots gitignored properly, but AI agent tools seem to love to put these sensitive files randomly in new folders and then when people don't make the commits themselves, they push up thousands of these sensitive files unknowingly. This is careless behaviour that shows a lack of regard for the previous rules and worst of all puts the project in legal jeopardy. This has never been a problem when only humans were involved, this is not a high bar to meet.
|
||||
- **No AI generated contributions to `/goal_src/` (the actual decompiled game code) from new contributors.** Sorry to gatekeep, but there are several reasons for this:
|
||||
1. We successfully finished decompiling Jak 1, Jak 2, and Jak 3 without AI assistance, there is no reason to reach for an LLM for the last game (Jak X) when our decompilation tools are already heavily mature. We would like to be able to say that all four games were decompiled the traditional way, especially since projects like these work via very loose legal gray areas / precedents for reverse-engineering. It is anyone's guess at this point what will happen to all of these new AI-powered decompilation projects in the near-future and we have no reason to risk it after how successful and diligent we have been for many years.
|
||||
2. The goal of our project is not to just get the games running on PC, as so many recent decompilation projects seem to have as their main focus. Our goal has always been to understand the game's code and to clean it up as we go along so it can be easily read by humans, modified and extended. This cannot be achieved using LLMs when you do not have the hard-earned experience of actually working with GOAL code. While it is impressive with what it can do, we've already seen it lie, hack together and justify incorrect fixes, and mislead people with giant blocks of comments -- with no experience you cannot discern these things, and it should not be someone else's burden to do so.
|
||||
3. Probably most importantly, changes to this code can easily cause new bugs for users, bugs that we have no interest in solving, especially if they are things we've already fixed in the past. This is just an inconvenience for us and our users, we've already started to see the decline in other decomp projects where they are shipping broken AI features, we aren't interested in following suit.
|
||||
- **No Android/Mobile support related contributions.** No one on the team is interested in being involved in the Android or other mobile ecosystems and maintaining those release/distribution processes, etc. Such contributions will be rejected.
|
||||
- **No LLM powered translation or localizaton efforts.** We have already seen the low quality outputs of AI assisted localization, with people having to comb through and fix obvious mistakes that were never proof-read. We are taking the stance that no translations are better than bad machine translations. They also create the false impression that the translations are complete, potentially discouraging or making it harder for actual human translators to make a contribution (instead of having a list of things left to translate, they have to search through a list of things that were "done" potentially incorrectly).
|
||||
- **No massive refactors or additions to enable or enhance low percentage user base support**. Such examples would include a Metal or DirectX renderer. These sorts of things are large undertakings and come with a significant maintenance burden while only making an impact for <1% of our user base. History shows that unfortunately these sorts of contributions are not made by people that will assist long-term with fixing bugs, but even if they were to break the mold and fix every bug that users report, it really isn't worth the effort. Since the beginning we have made the decision to not support every possible user's configuration to strike a good balance between the developer experience and supporting the majority of users, for example, requiring things like AVX support and a modern OpenGL version, we are sticking by this decision. If your big feature is essentially only going to be used by you and a handful of other users or you just want to experiment, then it does not need to be in the mainline distributed project.
|
||||
+3
-8
@@ -141,6 +141,9 @@ tasks:
|
||||
decomp-file:
|
||||
cmds:
|
||||
- '{{.DECOMP_BIN_RELEASE_DIR}}/decompiler "./decompiler/config/{{.DECOMP_CONFIG}}" "./iso_data" "./decompiler_out" --version "{{.DECOMP_CONFIG_VERSION}}" --config-override ''{"decompile_code": true, "levels_extract": false, "allowed_objects": ["{{.FILE}}"]}'''
|
||||
decomp-files:
|
||||
cmds:
|
||||
- '{{.DECOMP_BIN_RELEASE_DIR}}/decompiler "./decompiler/config/{{.DECOMP_CONFIG}}" "./iso_data" "./decompiler_out" --version "{{.DECOMP_CONFIG_VERSION}}" --config-override ''{"decompile_code": true, "levels_extract": false, "allowed_objects": {{.FILES}}}'''
|
||||
decomp-clean:
|
||||
cmds:
|
||||
- '{{.PYTHON}} ./scripts/tasks/clean-decomp.py --game "{{.GAME}}"'
|
||||
@@ -158,14 +161,6 @@ tasks:
|
||||
- task: decomp-file
|
||||
- '{{.PYTHON}} ./scripts/gsrc/update-from-decomp.py --game "{{.GAME}}" --file "{{.FILE}}"'
|
||||
- task: lint-gsrc-file
|
||||
copy-common-naming:
|
||||
cmds:
|
||||
- '{{.PYTHON}} ./scripts/gsrc/copy-common-naming.py --file "{{.FILE}}" --decompiler "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler"'
|
||||
- task: format-json
|
||||
copy-common-naming-from-refs:
|
||||
cmds:
|
||||
- '{{.PYTHON}} ./scripts/gsrc/copy-common-naming.py --update-names-from-refs --decompiler "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler"'
|
||||
- task: format-json
|
||||
# ASSET RIPPING
|
||||
rip-textures:
|
||||
cmds:
|
||||
|
||||
@@ -176,7 +176,8 @@ bool socket_timed_out() {
|
||||
return errno == EAGAIN;
|
||||
#elif _WIN32
|
||||
auto err = WSAGetLastError();
|
||||
return err == WSAETIMEDOUT;
|
||||
// some Windows builds report WSA_IO_PENDING when an SO_RCVTIMEO recv times out
|
||||
return err == WSAETIMEDOUT || err == WSA_IO_PENDING;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ struct Logger {
|
||||
};
|
||||
|
||||
Logger gLogger;
|
||||
thread_local std::string* tl_print_capture = nullptr;
|
||||
|
||||
namespace internal {
|
||||
const char* log_level_names[] = {"trace", "debug", "info", "warn", "error", "die", "die"};
|
||||
@@ -95,6 +96,10 @@ void log_message(level log_level, LogTime& now, const char* message) {
|
||||
}
|
||||
|
||||
void log_print(const char* message) {
|
||||
if (tl_print_capture) {
|
||||
tl_print_capture->append(message);
|
||||
return;
|
||||
}
|
||||
{
|
||||
// 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.
|
||||
@@ -214,6 +219,10 @@ void disable_ansi_colors() {
|
||||
gLogger.disable_colors = true;
|
||||
}
|
||||
|
||||
void set_thread_print_capture(std::string* buffer) {
|
||||
tl_print_capture = buffer;
|
||||
}
|
||||
|
||||
void initialize() {
|
||||
ASSERT(!gLogger.initialized);
|
||||
|
||||
|
||||
@@ -50,6 +50,8 @@ void set_file_level(level log_level);
|
||||
void set_stdout_level(level log_level);
|
||||
void set_max_debug_levels();
|
||||
void disable_ansi_colors();
|
||||
// while set, prints from the calling thread are appended to buffer instead of being output
|
||||
void set_thread_print_capture(std::string* buffer);
|
||||
void initialize();
|
||||
void finish();
|
||||
|
||||
|
||||
@@ -139,10 +139,16 @@ void try_reverse_lookup_array_like(const FieldReverseLookupInput& input,
|
||||
ASSERT(di.mem_deref); // it's accessing a pointer.
|
||||
auto elt_type = di.result_type;
|
||||
|
||||
if (input.stride) {
|
||||
if (input.has_stride()) {
|
||||
// variable access to the array.
|
||||
// this is an array of values, nothing inline, so we must get an _exact_ match for this to work.
|
||||
if (input.stride != di.stride) {
|
||||
int var_id = -1;
|
||||
if (input.stride == di.stride && !input.stride2) {
|
||||
var_id = 0;
|
||||
} else if (input.stride2 == di.stride && !input.stride) {
|
||||
var_id = 1;
|
||||
}
|
||||
if (var_id == -1) {
|
||||
// mismatched array strides, fail!
|
||||
return;
|
||||
}
|
||||
@@ -158,6 +164,7 @@ void try_reverse_lookup_array_like(const FieldReverseLookupInput& input,
|
||||
ReverseLookupNode variable_node;
|
||||
variable_node.prev = parent;
|
||||
variable_node.token.kind = FieldReverseLookupOutput::Token::Kind::VAR_IDX;
|
||||
variable_node.token.idx = var_id;
|
||||
|
||||
if (input.deref.has_value()) {
|
||||
// input did a load or store, we need to check the size/signed/kind.
|
||||
@@ -250,14 +257,29 @@ void try_reverse_lookup_inline_array(const FieldReverseLookupInput& input,
|
||||
ASSERT(di.can_deref);
|
||||
ASSERT(!di.mem_deref);
|
||||
|
||||
if (input.stride && input.stride == di.stride && input.offset < di.stride) {
|
||||
int var_id = -1;
|
||||
if (input.stride && input.stride == di.stride) {
|
||||
var_id = 0;
|
||||
} else if (input.stride2 && input.stride2 == di.stride) {
|
||||
var_id = 1;
|
||||
}
|
||||
|
||||
if (var_id != -1 && input.offset < di.stride) {
|
||||
// variable lookup.
|
||||
ReverseLookupNode var_idx_node;
|
||||
var_idx_node.prev = parent;
|
||||
|
||||
var_idx_node.token.kind = FieldReverseLookupOutput::Token::Kind::VAR_IDX;
|
||||
var_idx_node.token.idx = var_id;
|
||||
|
||||
if (input.offset == 0 && !input.deref.has_value()) {
|
||||
FieldReverseLookupInput next_input;
|
||||
next_input.deref = input.deref;
|
||||
next_input.stride = var_id == 0 ? 0 : input.stride;
|
||||
next_input.stride2 = var_id == 1 ? 0 : input.stride2;
|
||||
next_input.offset = input.offset; // includes the offset.
|
||||
next_input.base_type = di.result_type;
|
||||
|
||||
if (input.offset == 0 && !input.deref.has_value() && !next_input.has_stride()) {
|
||||
// put the element first, to match the old behavior.
|
||||
output->results.emplace_back(false, di.result_type, var_idx_node.to_vector());
|
||||
// keep trying!
|
||||
@@ -267,11 +289,6 @@ void try_reverse_lookup_inline_array(const FieldReverseLookupInput& input,
|
||||
return;
|
||||
}
|
||||
|
||||
FieldReverseLookupInput next_input;
|
||||
next_input.deref = input.deref;
|
||||
next_input.stride = 0;
|
||||
next_input.offset = input.offset; // includes the offset.
|
||||
next_input.base_type = di.result_type;
|
||||
try_reverse_lookup(next_input, ts, &var_idx_node, output, max_count);
|
||||
return;
|
||||
}
|
||||
@@ -288,7 +305,7 @@ void try_reverse_lookup_inline_array(const FieldReverseLookupInput& input,
|
||||
const_idx_node.token.kind = FieldReverseLookupOutput::Token::Kind::CONSTANT_IDX;
|
||||
const_idx_node.token.idx = elt_idx;
|
||||
|
||||
if (offset_into_elt == 0 && !input.deref.has_value() && !input.stride) {
|
||||
if (offset_into_elt == 0 && !input.deref.has_value() && !input.has_stride()) {
|
||||
// just get an element (possibly zero, and we want to include the 0 if so)
|
||||
// for the degenerate inline-array case, it seems more likely that we get the zeroth object
|
||||
// rather than the array, so this goes before that case.
|
||||
@@ -300,7 +317,7 @@ void try_reverse_lookup_inline_array(const FieldReverseLookupInput& input,
|
||||
}
|
||||
|
||||
// can we just return the array?
|
||||
if (offset_into_elt == 0 && !input.deref.has_value() && elt_idx == 0 && !input.stride) {
|
||||
if (offset_into_elt == 0 && !input.deref.has_value() && elt_idx == 0 && !input.has_stride()) {
|
||||
auto parent_vec = parent_to_vector(parent);
|
||||
if (!parent_vec.empty()) {
|
||||
output->results.emplace_back(false, input.base_type, parent_to_vector(parent));
|
||||
@@ -316,6 +333,7 @@ void try_reverse_lookup_inline_array(const FieldReverseLookupInput& input,
|
||||
FieldReverseLookupInput next_input;
|
||||
next_input.deref = input.deref;
|
||||
next_input.stride = input.stride;
|
||||
next_input.stride2 = input.stride2;
|
||||
next_input.offset = offset_into_elt;
|
||||
next_input.base_type = di.result_type;
|
||||
try_reverse_lookup(next_input, ts, &const_idx_node, output, max_count);
|
||||
@@ -383,7 +401,7 @@ void try_reverse_lookup_other(const FieldReverseLookupInput& input,
|
||||
continue; // try another field!
|
||||
}
|
||||
// it's a match, just access the field like normal!
|
||||
if (input.stride) {
|
||||
if (input.has_stride()) {
|
||||
continue;
|
||||
}
|
||||
ReverseLookupNode node;
|
||||
@@ -394,7 +412,7 @@ void try_reverse_lookup_other(const FieldReverseLookupInput& input,
|
||||
} else {
|
||||
// needs a deref, offset is 0, didn't do a deref.
|
||||
// we're taking the address
|
||||
if (input.stride) {
|
||||
if (input.has_stride()) {
|
||||
continue;
|
||||
}
|
||||
ReverseLookupNode node;
|
||||
@@ -422,7 +440,7 @@ void try_reverse_lookup_other(const FieldReverseLookupInput& input,
|
||||
expected_offset_into_field = ts.lookup_type(field.type())->get_offset();
|
||||
}
|
||||
if (offset_into_field == expected_offset_into_field && !input.deref.has_value() &&
|
||||
!input.stride) {
|
||||
!input.has_stride()) {
|
||||
ReverseLookupNode node;
|
||||
node.prev = parent;
|
||||
node.token = token;
|
||||
@@ -433,6 +451,7 @@ void try_reverse_lookup_other(const FieldReverseLookupInput& input,
|
||||
next_input.deref = input.deref;
|
||||
next_input.offset = offset_into_field - expected_offset_into_field;
|
||||
next_input.stride = input.stride;
|
||||
next_input.stride2 = input.stride2;
|
||||
next_input.base_type = field_deref.type;
|
||||
ReverseLookupNode node;
|
||||
node.prev = parent;
|
||||
|
||||
@@ -2173,7 +2173,9 @@ std::optional<std::string> find_best_field_in_structure(const TypeSystem& ts,
|
||||
"In type {}, type size was 0 for array field {} of type {}, check that the type "
|
||||
"is fully defined.",
|
||||
st->get_name(), field.name(), field.type().print()));
|
||||
int array_idx = rel_offset / type->get_size_in_memory();
|
||||
int inline_stride =
|
||||
align(type->get_size_in_memory(), type->get_inline_array_stride_alignment());
|
||||
int array_idx = rel_offset / inline_stride;
|
||||
if (!field.is_inline() &&
|
||||
field.offset() + field.array_size() * type->get_load_size() > offset) {
|
||||
if (rel_offset % type->get_load_size() == 0) {
|
||||
@@ -2185,13 +2187,12 @@ std::optional<std::string> find_best_field_in_structure(const TypeSystem& ts,
|
||||
}
|
||||
}
|
||||
} else if (field.is_inline() &&
|
||||
field.offset() + field.array_size() * type->get_size_in_memory() > offset) {
|
||||
if (field.type() == requesting_field.type() &&
|
||||
rel_offset % type->get_size_in_memory() == 0) {
|
||||
field.offset() + field.array_size() * inline_stride > offset) {
|
||||
if (field.type() == requesting_field.type() && rel_offset % inline_stride == 0) {
|
||||
// same type
|
||||
best_exact_arr.first = &field;
|
||||
best_exact_arr.second = array_idx;
|
||||
} else if (requesting_field.is_array() && rel_offset % type->get_size_in_memory() == 0 &&
|
||||
} else if (requesting_field.is_array() && rel_offset % inline_stride == 0 &&
|
||||
array_idx == 0) {
|
||||
// starts at the same offset as another array. just use the field with nothing extra
|
||||
best_exact = &field;
|
||||
@@ -2200,9 +2201,8 @@ std::optional<std::string> find_best_field_in_structure(const TypeSystem& ts,
|
||||
if (f_type && field.offset() + f_type->get_size_in_memory() > offset) {
|
||||
// struct that encompasses this field
|
||||
// simply search that structure for the field we want, offset by the field's offset
|
||||
auto best_field_in_struct =
|
||||
find_best_field_in_structure(ts, f_type, rel_offset % type->get_size_in_memory(),
|
||||
requesting_field, want_fixed, 0);
|
||||
auto best_field_in_struct = find_best_field_in_structure(
|
||||
ts, f_type, rel_offset % inline_stride, requesting_field, want_fixed, 0);
|
||||
if (best_field_in_struct) {
|
||||
best_struct_field_deref = best_field_in_struct;
|
||||
best_struct_arr.first = &field;
|
||||
|
||||
@@ -68,7 +68,10 @@ struct FieldReverseLookupInput {
|
||||
std::optional<DerefKind> deref = std::nullopt; // if we actually access memory
|
||||
int offset = 0; // if we apply a constant offset
|
||||
int stride = 0; // if we are doing a + (idx * stride)
|
||||
int stride2 = 0; // a + (idx * stride) + (idx2 * stride2)
|
||||
TypeSpec base_type; // the type of the thing we're accessing
|
||||
|
||||
bool has_stride() const { return stride || stride2; }
|
||||
};
|
||||
|
||||
constexpr double CONSTANT_INDEX_SCORE = -10.0;
|
||||
@@ -77,7 +80,7 @@ struct FieldReverseLookupOutput {
|
||||
struct Token {
|
||||
enum class Kind { FIELD, CONSTANT_IDX, VAR_IDX } kind;
|
||||
std::string name;
|
||||
int idx = -1;
|
||||
int idx = -1; // 0 for an index from stride and 1 from stride2
|
||||
double field_score = 0.0;
|
||||
|
||||
double score() {
|
||||
|
||||
@@ -32,6 +32,70 @@ Register get_expected_fpr_backup(int n, int total) {
|
||||
return fpr_backups.at((total - 1) - n);
|
||||
}
|
||||
|
||||
/*!
|
||||
* sd s7, 16(sp)
|
||||
* bgezal r0, L
|
||||
* sll r0, r0, 0
|
||||
* L26:
|
||||
* sd fp, 8(sp) ;; not done by interrupt handlers
|
||||
* daddiu fp, ra, -20
|
||||
* lw s7, L24(fp)
|
||||
* lw s7, 0(s7)
|
||||
* daddiu s7, s7, -8 ;; -16 in jak 1
|
||||
*/
|
||||
int match_called_from_c_prologue(const std::vector<Instruction>& instrs,
|
||||
const LinkedObjectFile& file,
|
||||
int start_word,
|
||||
int idx,
|
||||
bool* fp_backed_up) {
|
||||
if (idx + 7 >= int(instrs.size()) ||
|
||||
!is_no_link_gpr_store(instrs.at(idx), 8, make_gpr(Reg::S7), 16, make_gpr(Reg::SP))) {
|
||||
return -1;
|
||||
}
|
||||
idx++;
|
||||
|
||||
// branch to the instruction after the delay slot to get the pc in ra
|
||||
const auto& bgezal = instrs.at(idx);
|
||||
if (bgezal.kind != InstructionKind::BGEZAL || bgezal.get_src(0).get_reg() != make_gpr(Reg::R0)) {
|
||||
return -1;
|
||||
}
|
||||
int ra_idx = idx + 2;
|
||||
const auto& target = file.labels.at(bgezal.get_label_target());
|
||||
if (target.offset != (start_word + ra_idx) * 4 || !is_nop(instrs.at(idx + 1))) {
|
||||
return -1;
|
||||
}
|
||||
idx = ra_idx;
|
||||
|
||||
*fp_backed_up = is_no_link_gpr_store(instrs.at(idx), 8, make_gpr(Reg::FP), 8, make_gpr(Reg::SP));
|
||||
if (*fp_backed_up) {
|
||||
idx++;
|
||||
}
|
||||
|
||||
if (!is_gpr_2_imm_int(instrs.at(idx), InstructionKind::DADDIU, make_gpr(Reg::FP),
|
||||
make_gpr(Reg::RA), -(ra_idx - 1) * 4)) {
|
||||
return -1;
|
||||
}
|
||||
idx++;
|
||||
|
||||
const auto& s7_ptr = instrs.at(idx);
|
||||
if (s7_ptr.kind != InstructionKind::LW || s7_ptr.get_dst(0).get_reg() != make_gpr(Reg::S7) ||
|
||||
!s7_ptr.get_src(0).is_label() || s7_ptr.get_src(1).get_reg() != make_gpr(Reg::FP)) {
|
||||
return -1;
|
||||
}
|
||||
idx++;
|
||||
|
||||
if (!is_no_ll_gpr_load(instrs.at(idx), 4, true, make_gpr(Reg::S7), 0, make_gpr(Reg::S7))) {
|
||||
return -1;
|
||||
}
|
||||
idx++;
|
||||
|
||||
if (!is_gpr_2_imm_int(instrs.at(idx), InstructionKind::DADDIU, make_gpr(Reg::S7),
|
||||
make_gpr(Reg::S7), {})) {
|
||||
return -1;
|
||||
}
|
||||
return idx + 1;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Function::Function(int _start_word, int _end_word, GameVersion version)
|
||||
@@ -86,11 +150,26 @@ void Function::analyze_prologue(const LinkedObjectFile& file) {
|
||||
idx++;
|
||||
}
|
||||
|
||||
{
|
||||
// check for C callees and interrupt handlers (they back up s7 on the stack and restore it
|
||||
// later)
|
||||
bool c_fp_backed_up = false;
|
||||
int c_prologue_end = -1;
|
||||
if (prologue.ra_backed_up) {
|
||||
c_prologue_end =
|
||||
match_called_from_c_prologue(instructions, file, start_word, idx, &c_fp_backed_up);
|
||||
}
|
||||
if (c_prologue_end != -1) {
|
||||
prologue.called_from_c = true;
|
||||
prologue.fp_set = true;
|
||||
if (c_fp_backed_up) {
|
||||
prologue.fp_backed_up = true;
|
||||
prologue.fp_backup_offset = 8;
|
||||
}
|
||||
idx = c_prologue_end;
|
||||
} else {
|
||||
auto& instr = instructions.at(idx);
|
||||
|
||||
// storing s7 on the stack is done by interrupt handlers, which we probably don't want to
|
||||
// support
|
||||
// anything else storing s7 on the stack is probably asm
|
||||
if (instr.kind == InstructionKind::SD && instr.get_src(0).get_reg() == make_gpr(Reg::S7) &&
|
||||
instr.get_src(2).get_reg() == make_gpr(Reg::SP)) {
|
||||
lg::warn(
|
||||
@@ -104,7 +183,8 @@ void Function::analyze_prologue(const LinkedObjectFile& file) {
|
||||
}
|
||||
|
||||
// next is fp backup
|
||||
if (is_no_link_gpr_store(instructions.at(idx), 8, Register(Reg::GPR, Reg::FP), {},
|
||||
if (!prologue.called_from_c &&
|
||||
is_no_link_gpr_store(instructions.at(idx), 8, Register(Reg::GPR, Reg::FP), {},
|
||||
Register(Reg::GPR, Reg::SP))) {
|
||||
prologue.fp_backed_up = true;
|
||||
prologue.fp_backup_offset = get_gpr_store_offset_as_int(instructions.at(idx));
|
||||
@@ -269,9 +349,6 @@ void Function::analyze_prologue(const LinkedObjectFile& file) {
|
||||
ASSERT(prologue.total_stack_usage == total_stack);
|
||||
}
|
||||
|
||||
// it's fine to have the entire first basic block be the prologue - you could loop back to the
|
||||
// first instruction past the prologue.
|
||||
ASSERT(basic_blocks.at(0).end_word >= prologue_end);
|
||||
resize_first_block(prologue_end, file);
|
||||
prologue.decoded = true;
|
||||
|
||||
@@ -279,10 +356,9 @@ void Function::analyze_prologue(const LinkedObjectFile& file) {
|
||||
}
|
||||
|
||||
void Function::resize_first_block(int new_start, const LinkedObjectFile&) {
|
||||
basic_blocks.at(0).start_word = new_start;
|
||||
|
||||
if (basic_blocks.size() >= 2 && basic_blocks.at(1).start_word == new_start) {
|
||||
// block 1 is now zero size, so we should eliminate it
|
||||
// the prologue of a function called from C spans two blocks because of the bgezal.
|
||||
while (basic_blocks.size() >= 2 && basic_blocks.at(1).start_word <= new_start) {
|
||||
// block 0 is entirely prologue, so merge it into block 1
|
||||
auto& block0 = basic_blocks.at(0);
|
||||
auto& block1 = basic_blocks.at(1);
|
||||
block0.succ_ft = block1.succ_ft;
|
||||
@@ -309,6 +385,9 @@ void Function::resize_first_block(int new_start, const LinkedObjectFile&) {
|
||||
}
|
||||
basic_blocks.pop_back();
|
||||
}
|
||||
|
||||
ASSERT(basic_blocks.at(0).end_word >= new_start);
|
||||
basic_blocks.at(0).start_word = new_start;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -389,6 +468,13 @@ void Function::check_epilogue(const LinkedObjectFile& file) {
|
||||
ASSERT(is_jr_ra(instructions.at(idx)));
|
||||
idx--;
|
||||
|
||||
if (prologue.called_from_c && instructions.at(idx).kind == InstructionKind::EI) {
|
||||
idx--;
|
||||
ASSERT(instructions.at(idx).kind == InstructionKind::SYNCL);
|
||||
idx--;
|
||||
prologue.interrupt_handler = true;
|
||||
}
|
||||
|
||||
// restore gprs
|
||||
for (int i = 0; i < prologue.n_gpr_backup; i++) {
|
||||
int gpr_idx = prologue.n_gpr_backup - (1 + i);
|
||||
@@ -416,6 +502,13 @@ void Function::check_epilogue(const LinkedObjectFile& file) {
|
||||
idx--;
|
||||
}
|
||||
|
||||
// restore s7
|
||||
if (prologue.called_from_c) {
|
||||
ASSERT(
|
||||
is_no_ll_gpr_load(instructions.at(idx), 8, true, make_gpr(Reg::S7), 16, make_gpr(Reg::SP)));
|
||||
idx--;
|
||||
}
|
||||
|
||||
// restore ra
|
||||
if (prologue.ra_backed_up) {
|
||||
ASSERT(is_no_ll_gpr_load(instructions.at(idx), 8, true, make_gpr(Reg::RA),
|
||||
@@ -428,6 +521,12 @@ void Function::check_epilogue(const LinkedObjectFile& file) {
|
||||
basic_blocks.back().end_word = idx + 1;
|
||||
prologue.epilogue_ok = true;
|
||||
epilogue_start = idx + 1;
|
||||
|
||||
if (prologue.interrupt_handler) {
|
||||
warnings.info("Interrupt handler");
|
||||
} else if (prologue.called_from_c) {
|
||||
warnings.info("Called from C");
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
|
||||
@@ -161,6 +161,11 @@ class Function {
|
||||
|
||||
bool fp_set = false;
|
||||
|
||||
// callbacks and interrupt handlers back up s7 and rebuild s7/fp themselves
|
||||
bool called_from_c = false;
|
||||
// re-enables interrupts in the epilogue
|
||||
bool interrupt_handler = false;
|
||||
|
||||
int n_gpr_backup = 0;
|
||||
int gpr_backup_offset = -1;
|
||||
|
||||
|
||||
@@ -22,6 +22,42 @@ RegClass get_reg_kind(const Register& r) {
|
||||
return RegClass::INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* Try to resolve obj + (idx * stride) + (idx2 * stride2) as an access into a 2d array.
|
||||
*/
|
||||
ArrayFieldAccess* try_2d_array_access(const TP_Type& input_type,
|
||||
const IR2_RegOffset& ro,
|
||||
const DerefKind& dk,
|
||||
const Env& env,
|
||||
FormPool& pool,
|
||||
TypeSpec* result_type) {
|
||||
const auto& [stride, stride2] = input_type.get_sum_multipliers();
|
||||
FieldReverseLookupInput rd_in;
|
||||
rd_in.deref = dk;
|
||||
rd_in.base_type = input_type.get_obj_plus_const_mult_typespec();
|
||||
rd_in.stride = stride;
|
||||
rd_in.stride2 = stride2;
|
||||
rd_in.offset = ro.offset + input_type.get_sum_constant();
|
||||
auto rd = env.dts->ts.reverse_field_lookup(rd_in);
|
||||
if (!rd.success) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::vector<DerefToken> tokens;
|
||||
std::vector<int> index_strides;
|
||||
for (auto& token : rd.tokens) {
|
||||
tokens.push_back(to_token(token));
|
||||
if (token.kind == FieldReverseLookupOutput::Token::Kind::VAR_IDX) {
|
||||
index_strides.push_back(token.idx == 0 ? stride : stride2);
|
||||
}
|
||||
}
|
||||
auto access = pool.alloc_element<ArrayFieldAccess>(ro.var, tokens, 1, ro.offset,
|
||||
input_type.flipped_add_order());
|
||||
access->set_index_strides(index_strides, input_type.get_sum_constant());
|
||||
*result_type = rd.result_type;
|
||||
return access;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
ConditionElement* BranchOp::get_condition_as_form(FormPool& pool, const Env& env) const {
|
||||
@@ -367,7 +403,20 @@ FormElement* StoreOp::get_as_form(FormPool& pool, const Env& env) const {
|
||||
}
|
||||
}
|
||||
|
||||
if (input_type.kind == TP_Type::Kind::OBJECT_PLUS_PRODUCT_WITH_CONSTANT) {
|
||||
if (input_type.has_sum_multipliers()) {
|
||||
DerefKind dk;
|
||||
dk.is_store = true;
|
||||
dk.reg_kind = get_reg_kind(ro.reg);
|
||||
dk.size = m_size;
|
||||
TypeSpec result_type;
|
||||
if (auto access = try_2d_array_access(input_type, ro, dk, env, pool, &result_type)) {
|
||||
return pool.alloc_element<StoreArrayAccess>(
|
||||
access, m_value.as_expr(), m_my_idx, ro.var,
|
||||
get_typecast_for_atom(m_value, env, coerce_to_reg_type(result_type), m_my_idx));
|
||||
}
|
||||
}
|
||||
|
||||
if (input_type.is_plain_product_plus_obj()) {
|
||||
FieldReverseLookupInput rd_in;
|
||||
DerefKind dk;
|
||||
dk.is_store = true;
|
||||
@@ -608,7 +657,19 @@ Form* LoadVarOp::get_load_src(FormPool& pool, const Env& env) const {
|
||||
return pool.alloc_single_element_form<DynamicMethodAccess>(nullptr, ro.var);
|
||||
}
|
||||
|
||||
if (input_type.kind == TP_Type::Kind::OBJECT_PLUS_PRODUCT_WITH_CONSTANT) {
|
||||
if (input_type.has_sum_multipliers()) {
|
||||
DerefKind dk;
|
||||
dk.is_store = false;
|
||||
dk.reg_kind = get_reg_kind(ro.reg);
|
||||
dk.sign_extend = m_kind == Kind::SIGNED;
|
||||
dk.size = m_size;
|
||||
TypeSpec result_type;
|
||||
if (auto access = try_2d_array_access(input_type, ro, dk, env, pool, &result_type)) {
|
||||
return pool.alloc_single_form(nullptr, access);
|
||||
}
|
||||
}
|
||||
|
||||
if (input_type.is_plain_product_plus_obj()) {
|
||||
FieldReverseLookupInput rd_in;
|
||||
DerefKind dk;
|
||||
dk.is_store = false;
|
||||
|
||||
@@ -904,6 +904,11 @@ TypeState AsmOp::propagate_types_internal(const TypeState& input,
|
||||
result.get(m_dst->reg()) = TP_Type::make_from_ts(coerce_to_reg_type(field.type()));
|
||||
return result;
|
||||
}
|
||||
if (m_instr.src[1].get_imm() > 0 &&
|
||||
dts.ts.tc(TypeSpec("integer"), result.get(m_src[0]->reg()).typespec())) {
|
||||
result.get(m_dst->reg()) = TP_Type::make_from_ts("uint");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_dst.has_value()) {
|
||||
@@ -1008,9 +1013,11 @@ TP_Type LoadVarOp::get_src_type(const TypeState& input,
|
||||
if (method_id == GOAL_NEW_METHOD) {
|
||||
return TP_Type::make_non_object_new(method_type, TypeSpec(type_name));
|
||||
} else if (input_type.kind == TP_Type::Kind::TYPE_OF_TYPE_NO_VIRTUAL) {
|
||||
return TP_Type::make_non_virtual_method(method_type, TypeSpec(type_name), method_id);
|
||||
return TP_Type::make_non_virtual_method(method_type, TypeSpec(type_name), method_id,
|
||||
method_info.name);
|
||||
} else {
|
||||
return TP_Type::make_virtual_method(method_type, TypeSpec(type_name), method_id);
|
||||
return TP_Type::make_virtual_method(method_type, TypeSpec(type_name), method_id,
|
||||
method_info.name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1023,7 +1030,8 @@ TP_Type LoadVarOp::get_src_type(const TypeState& input,
|
||||
if (method_id != GOAL_NEW_METHOD && method_id != GOAL_RELOC_METHOD) {
|
||||
// this can get us the wrong thing for `new` methods. And maybe relocate?
|
||||
return TP_Type::make_non_virtual_method(
|
||||
method_info.type.substitute_for_method_call("object"), TypeSpec("object"), method_id);
|
||||
method_info.type.substitute_for_method_call("object"), TypeSpec("object"), method_id,
|
||||
method_info.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1314,6 +1314,23 @@ class DerefElement : public FormElement {
|
||||
std::vector<DerefToken> m_tokens;
|
||||
};
|
||||
|
||||
struct Match2dIndices {
|
||||
Form* idx[2] = {nullptr, nullptr};
|
||||
Form* base = nullptr;
|
||||
};
|
||||
|
||||
/*!
|
||||
* find the two indices of (+ (* idx stride) (* idx2 stride2) constant [base]).
|
||||
*/
|
||||
std::optional<Match2dIndices> match_2d_indices(Form* in,
|
||||
const std::vector<int>& strides,
|
||||
s64 constant,
|
||||
bool with_base,
|
||||
const Env& env,
|
||||
FormPool& pool);
|
||||
std::vector<DerefToken> fill_2d_index_placeholders(const std::vector<DerefToken>& tokens,
|
||||
const Match2dIndices& match);
|
||||
|
||||
class ArrayFieldAccess : public FormElement {
|
||||
public:
|
||||
ArrayFieldAccess(RegisterAccess source,
|
||||
@@ -1340,12 +1357,24 @@ class ArrayFieldAccess : public FormElement {
|
||||
|
||||
bool flipped() const { return m_flipped; }
|
||||
|
||||
void set_index_strides(std::vector<int> strides, s64 constant) {
|
||||
m_index_strides = std::move(strides);
|
||||
m_index_constant = constant;
|
||||
}
|
||||
|
||||
private:
|
||||
void update_with_val_2d(Form* new_val,
|
||||
const Env& env,
|
||||
FormPool& pool,
|
||||
std::vector<FormElement*>* result);
|
||||
|
||||
RegisterAccess m_source;
|
||||
std::vector<DerefToken> m_deref_tokens;
|
||||
int m_expected_stride = -1;
|
||||
int m_constant_offset = -1;
|
||||
bool m_flipped = false;
|
||||
std::vector<int> m_index_strides;
|
||||
s64 m_index_constant = 0;
|
||||
};
|
||||
|
||||
class StorePlainDeref : public FormElement {
|
||||
|
||||
@@ -902,9 +902,11 @@ void SimpleExpressionElement::update_from_stack_gpr_to_fpr(const Env& env,
|
||||
std::vector<FormElement*>* result,
|
||||
bool allow_side_effects) {
|
||||
auto src = m_expr.get_arg(0);
|
||||
auto src_type = env.get_types_before_op(src.var().idx()).get(src.var().reg());
|
||||
auto src_is_float = false;
|
||||
std::vector<FormElement*> src_fes;
|
||||
if (src.is_var()) {
|
||||
auto src_type = env.get_types_before_op(src.var().idx()).get(src.var().reg());
|
||||
src_is_float = env.dts->ts.tc(TypeSpec("float"), src_type.typespec());
|
||||
auto forms = pop_to_forms({src.var()}, env, pool, stack, allow_side_effects);
|
||||
for (auto x : forms.at(0)->elts()) {
|
||||
src_fes.push_back(x);
|
||||
@@ -916,7 +918,7 @@ void SimpleExpressionElement::update_from_stack_gpr_to_fpr(const Env& env,
|
||||
// set ourself to identity.
|
||||
m_expr = src.as_expr();
|
||||
|
||||
if (env.dts->ts.tc(TypeSpec("float"), src_type.typespec())) {
|
||||
if (src_is_float) {
|
||||
// got a float as an input, we can convert it to an FPR with no effect.
|
||||
for (auto x : src_fes) {
|
||||
result->push_back(x);
|
||||
@@ -932,6 +934,12 @@ void SimpleExpressionElement::update_from_stack_gpr_to_fpr(const Env& env,
|
||||
if (proper_float(flt)) {
|
||||
result->push_back(pool.alloc_element<ConstantFloatElement>(flt));
|
||||
return;
|
||||
} else if (frm->to_string(env) == "#x7f800000") {
|
||||
auto cast = pool.alloc_element<CastElement>(TypeSpec("float"), frm);
|
||||
env.func->warnings.warning("op {}: float inf {} moved to fpr", m_my_idx,
|
||||
frm->to_string(env), cast->to_string(env));
|
||||
result->push_back(cast);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1153,6 +1161,11 @@ void SimpleExpressionElement::update_from_stack_si_1(const Env& env,
|
||||
make_cast_if_needed(arg, in_type, TypeSpec("int"), pool, env)));
|
||||
}
|
||||
|
||||
namespace {
|
||||
Form* strip_int_or_uint_cast(Form* in);
|
||||
Form* match_index_product(Form* in, int stride);
|
||||
} // namespace
|
||||
|
||||
void SimpleExpressionElement::update_from_stack_add_i(const Env& env,
|
||||
FormPool& pool,
|
||||
FormStack& stack,
|
||||
@@ -1437,6 +1450,80 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env,
|
||||
throw std::runtime_error("Failed to match product_with_constant inline array access 2.");
|
||||
}
|
||||
}
|
||||
} else if ((arg1_type.is_product() && arg0_type.has_field_origin()) ||
|
||||
(arg0_type.is_product() && arg1_type.has_field_origin())) {
|
||||
// (+ (+ obj C1) (* idx C2)), where obj + C1 was already turned into a field access.
|
||||
// same path as the element access with index 0.
|
||||
bool field_first = arg1_type.is_product() && arg0_type.has_field_origin();
|
||||
const auto& field_type = field_first ? arg0_type : arg1_type;
|
||||
int stride = (field_first ? arg1_type : arg0_type).get_multiplier();
|
||||
auto elt = lookup_array_element_from_field(env.dts->ts, field_type, stride);
|
||||
auto idx = match_index_product(args.at(field_first ? 1 : 0), stride);
|
||||
auto deref =
|
||||
strip_int_or_uint_cast(args.at(field_first ? 0 : 1))->try_as_element<DerefElement>();
|
||||
if (elt && idx && deref && !deref->is_addr_of() &&
|
||||
deref->tokens().size() >= elt->tokens.size()) {
|
||||
const auto& old_tokens = deref->tokens();
|
||||
size_t start = old_tokens.size() - elt->tokens.size();
|
||||
std::vector<DerefToken> tokens(old_tokens.begin(), old_tokens.begin() + start);
|
||||
bool same_path = true;
|
||||
for (size_t i = 0; i < elt->tokens.size() && same_path; i++) {
|
||||
const auto& tok = elt->tokens.at(i);
|
||||
const auto& old_tok = old_tokens.at(start + i);
|
||||
switch (tok.kind) {
|
||||
case FieldReverseLookupOutput::Token::Kind::FIELD:
|
||||
same_path = old_tok.is_field_name(tok.name);
|
||||
tokens.push_back(old_tok);
|
||||
break;
|
||||
case FieldReverseLookupOutput::Token::Kind::CONSTANT_IDX:
|
||||
same_path = old_tok.is_int(tok.idx);
|
||||
tokens.push_back(old_tok);
|
||||
break;
|
||||
case FieldReverseLookupOutput::Token::Kind::VAR_IDX:
|
||||
same_path = old_tok.is_int(0);
|
||||
tokens.push_back(DerefToken::make_int_expr(idx));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (same_path) {
|
||||
result->push_back(pool.alloc_element<DerefElement>(deref->base(), false, tokens));
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (elt) {
|
||||
auto sum = pool.alloc_single_element_form<GenericElement>(
|
||||
nullptr, GenericOperator::make_fixed(FixedOperatorKind::ADDITION_PTR),
|
||||
args.at(field_first ? 0 : 1), args.at(field_first ? 1 : 0));
|
||||
result->push_back(
|
||||
pool.alloc_element<CastElement>(coerce_to_reg_type(elt->result_type), sum));
|
||||
return;
|
||||
}
|
||||
} else if (arg0_type.kind == TP_Type::Kind::PRODUCT_SUM ||
|
||||
arg1_type.kind == TP_Type::Kind::PRODUCT_SUM) {
|
||||
bool sum_first = arg0_type.kind == TP_Type::Kind::PRODUCT_SUM;
|
||||
const auto& sum_type = sum_first ? arg0_type : arg1_type;
|
||||
const auto& base_type = sum_first ? arg1_type : arg0_type;
|
||||
auto elt = lookup_2d_array_element(env.dts->ts, base_type.typespec(), sum_type);
|
||||
if (elt && base_type.kind == TP_Type::Kind::TYPESPEC) {
|
||||
std::vector<int> strides;
|
||||
const auto& [stride, stride2] = sum_type.get_product_sum_multipliers();
|
||||
for (auto& tok : elt->tokens) {
|
||||
if (tok.kind == FieldReverseLookupOutput::Token::Kind::VAR_IDX) {
|
||||
strides.push_back(tok.idx == 0 ? stride : stride2);
|
||||
}
|
||||
}
|
||||
auto match = match_2d_indices(args.at(sum_first ? 0 : 1), strides,
|
||||
sum_type.get_sum_constant(), false, env, pool);
|
||||
if (!match) {
|
||||
throw std::runtime_error(fmt::format("Failed to match 2d array access with add: {}",
|
||||
args.at(sum_first ? 0 : 1)->to_string(env)));
|
||||
}
|
||||
result->push_back(pool.alloc_element<DerefElement>(
|
||||
cast_stack_slot_var_if_needed(args.at(sum_first ? 1 : 0), base_type.typespec(), pool,
|
||||
env),
|
||||
false, fill_2d_index_placeholders(to_tokens(elt->tokens), *match)));
|
||||
return;
|
||||
}
|
||||
} else if (arg0_type.kind == TP_Type::Kind::INTEGER_CONSTANT) {
|
||||
// try to see if this is valid, from the type system.
|
||||
FieldReverseLookupInput input;
|
||||
@@ -1912,6 +1999,104 @@ Form* strip_int_or_uint_cast(Form* in) {
|
||||
}
|
||||
} // namespace
|
||||
|
||||
namespace {
|
||||
/*!
|
||||
* match (* idx stride) or (* stride idx) and return idx.
|
||||
*/
|
||||
Form* match_index_product(Form* in, int stride) {
|
||||
auto stride_matcher =
|
||||
Matcher::match_or({Matcher::cast("uint", Matcher::integer(stride)),
|
||||
Matcher::cast("int", Matcher::integer(stride)), Matcher::integer(stride)});
|
||||
auto idx_matcher = Matcher::match_or({Matcher::cast("uint", Matcher::any(0)),
|
||||
Matcher::cast("int", Matcher::any(0)), Matcher::any(0)});
|
||||
auto mult_matcher = Matcher::match_or(
|
||||
{Matcher::op_fixed(FixedOperatorKind::MULTIPLICATION, {idx_matcher, stride_matcher}),
|
||||
Matcher::op_fixed(FixedOperatorKind::MULTIPLICATION, {stride_matcher, idx_matcher})});
|
||||
mult_matcher = Matcher::match_or(
|
||||
{Matcher::cast("uint", mult_matcher), Matcher::cast("int", mult_matcher), mult_matcher});
|
||||
auto mr = match(mult_matcher, in);
|
||||
return mr.matched ? mr.maps.forms.at(0) : nullptr;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
std::optional<Match2dIndices> match_2d_indices(Form* in,
|
||||
const std::vector<int>& strides,
|
||||
s64 constant,
|
||||
bool with_base,
|
||||
const Env& env,
|
||||
FormPool& pool) {
|
||||
ASSERT(strides.size() == 2 && strides.at(0) != strides.at(1));
|
||||
int unit_slot = strides.at(0) == 1 ? 0 : (strides.at(1) == 1 ? 1 : -1);
|
||||
if (unit_slot != -1 && with_base) {
|
||||
return std::nullopt;
|
||||
}
|
||||
std::vector<Form*> terms;
|
||||
std::function<void(Form*)> flatten = [&](Form* f) {
|
||||
auto as_generic = strip_int_or_uint_cast(f)->try_as_element<GenericElement>();
|
||||
if (as_generic && (as_generic->op().is_fixed(FixedOperatorKind::ADDITION) ||
|
||||
as_generic->op().is_fixed(FixedOperatorKind::ADDITION_PTR))) {
|
||||
for (auto elt : as_generic->elts()) {
|
||||
flatten(elt);
|
||||
}
|
||||
} else {
|
||||
terms.push_back(f);
|
||||
}
|
||||
};
|
||||
flatten(in);
|
||||
|
||||
Match2dIndices result;
|
||||
s64 found_constant = 0;
|
||||
std::vector<Form*> unit_terms;
|
||||
for (auto term : terms) {
|
||||
bool used = false;
|
||||
for (int i = 0; i < 2 && !used; i++) {
|
||||
if (!result.idx[i] && i != unit_slot) {
|
||||
result.idx[i] = match_index_product(term, strides.at(i));
|
||||
used = result.idx[i];
|
||||
}
|
||||
}
|
||||
if (used) {
|
||||
continue;
|
||||
}
|
||||
if (auto as_int = get_goal_integer_constant(strip_int_or_uint_cast(term), env)) {
|
||||
found_constant += *as_int;
|
||||
} else if (unit_slot != -1) {
|
||||
unit_terms.push_back(strip_int_or_uint_cast(term));
|
||||
} else if (with_base && !result.base) {
|
||||
result.base = strip_int_or_uint_cast(term);
|
||||
} else {
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
|
||||
if (unit_terms.size() == 1) {
|
||||
result.idx[unit_slot] = unit_terms.front();
|
||||
} else if (unit_terms.size() > 1) {
|
||||
result.idx[unit_slot] = pool.alloc_single_element_form<GenericElement>(
|
||||
nullptr, GenericOperator::make_fixed(FixedOperatorKind::ADDITION), unit_terms);
|
||||
}
|
||||
|
||||
if (!result.idx[0] || !result.idx[1] || (with_base && !result.base) ||
|
||||
found_constant != constant) {
|
||||
return std::nullopt;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::vector<DerefToken> fill_2d_index_placeholders(const std::vector<DerefToken>& tokens,
|
||||
const Match2dIndices& match) {
|
||||
std::vector<DerefToken> result = tokens;
|
||||
int placeholder = 0;
|
||||
for (auto& x : result) {
|
||||
if (x.kind() == DerefToken::Kind::EXPRESSION_PLACEHOLDER) {
|
||||
ASSERT(placeholder < 2);
|
||||
x = DerefToken::make_int_expr(match.idx[placeholder++]);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
FormElement* SimpleExpressionElement::update_from_stack_logor_or_logand_helper(
|
||||
const Env& env,
|
||||
FixedOperatorKind kind,
|
||||
@@ -1950,6 +2135,13 @@ FormElement* SimpleExpressionElement::update_from_stack_logor_or_logand_helper(
|
||||
bitfield_info =
|
||||
dynamic_cast<BitFieldType*>(env.dts->ts.lookup_type(arg0_reg_type.get_bitfield_type()));
|
||||
ASSERT(bitfield_info);
|
||||
} else if (arg0_reg_type.kind == TP_Type::Kind::TYPESPEC) {
|
||||
// the variable isn't a bitfield, but it's cast to one here.
|
||||
bitfield_info =
|
||||
dynamic_cast<BitFieldType*>(env.dts->ts.lookup_type(arg0_reg_type.typespec()));
|
||||
if (bitfield_info) {
|
||||
bitfield_type = arg0_reg_type.typespec();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6288,6 +6480,21 @@ void ReturnElement::push_to_stack(const Env& env, FormPool& pool, FormStack& sta
|
||||
|
||||
namespace {
|
||||
|
||||
bool is_zero_extended_32(const Env& env, const RegisterAccess& var) {
|
||||
const auto& ops = env.func->ir2.atomic_ops->ops;
|
||||
const auto& defs = env.get_use_def_info(var).defs;
|
||||
if (defs.empty()) {
|
||||
return false;
|
||||
}
|
||||
for (const auto& def : defs) {
|
||||
auto load = dynamic_cast<const LoadVarOp*>(ops.at(def.op_id).get());
|
||||
if (!load || load->kind() != LoadVarOp::Kind::UNSIGNED || load->size() > 4) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void push_asm_srl_to_stack(const AsmOp* op,
|
||||
FormElement* form_elt,
|
||||
const Env& env,
|
||||
@@ -6325,6 +6532,19 @@ void push_asm_srl_to_stack(const AsmOp* op,
|
||||
ASSERT(other); // should immediately get a field.
|
||||
stack.push_value_to_reg(*dst, pool.alloc_single_form(nullptr, other), true,
|
||||
env.get_variable_type(*dst, true));
|
||||
} else if (integer > 0 && env.dts->ts.tc(TypeSpec("integer"), arg0_type)) {
|
||||
// srl shifts the lower 32 bits, the result is always zero-extended.
|
||||
Form* low = src_var;
|
||||
if (!is_zero_extended_32(env, *var)) {
|
||||
low = pool.form<GenericElement>(
|
||||
GenericOperator::make_fixed(FixedOperatorKind::LOGAND), src_var,
|
||||
pool.form<SimpleAtomElement>(SimpleAtom::make_int_constant(UINT32_MAX)));
|
||||
}
|
||||
auto shr = pool.alloc_element<GenericElement>(
|
||||
GenericOperator::make_fixed(FixedOperatorKind::SHR), low,
|
||||
pool.form<SimpleAtomElement>(SimpleAtom::make_int_constant(integer)));
|
||||
stack.push_value_to_reg(*dst, pool.alloc_single_form(nullptr, shr), true,
|
||||
env.get_variable_type(*dst, true));
|
||||
} else {
|
||||
stack.push_form_element(form_elt, true);
|
||||
// throw std::runtime_error(
|
||||
@@ -6711,11 +6931,48 @@ void DynamicMethodAccess::update_from_stack(const Env& env,
|
||||
// ArrayFieldAccess
|
||||
////////////////////////
|
||||
|
||||
/*!
|
||||
* Rebuild an access into a 2d array from (+ (* idx stride) (* idx2 stride2) constant base), in any
|
||||
* order and nesting.
|
||||
*/
|
||||
void ArrayFieldAccess::update_with_val_2d(Form* new_val,
|
||||
const Env& env,
|
||||
FormPool& pool,
|
||||
std::vector<FormElement*>* result) {
|
||||
std::optional<Match2dIndices> match;
|
||||
if (std::find(m_index_strides.begin(), m_index_strides.end(), 1) != m_index_strides.end()) {
|
||||
// the base can't be told apart from a stride 1 index, so use the order of the last add.
|
||||
auto as_generic = strip_int_or_uint_cast(new_val)->try_as_element<GenericElement>();
|
||||
if (as_generic && as_generic->elts().size() == 2 &&
|
||||
(as_generic->op().is_fixed(FixedOperatorKind::ADDITION) ||
|
||||
as_generic->op().is_fixed(FixedOperatorKind::ADDITION_PTR))) {
|
||||
auto base = as_generic->elts().at(m_flipped ? 1 : 0);
|
||||
auto rest = as_generic->elts().at(m_flipped ? 0 : 1);
|
||||
match = match_2d_indices(rest, m_index_strides, m_index_constant, false, env, pool);
|
||||
if (match) {
|
||||
match->base = strip_int_or_uint_cast(base);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
match = match_2d_indices(new_val, m_index_strides, m_index_constant, true, env, pool);
|
||||
}
|
||||
if (!match) {
|
||||
throw std::runtime_error("Failed to match 2d array access: " + new_val->to_string(env));
|
||||
}
|
||||
result->push_back(pool.alloc_element<DerefElement>(
|
||||
match->base, false, fill_2d_index_placeholders(m_deref_tokens, *match)));
|
||||
}
|
||||
|
||||
void ArrayFieldAccess::update_with_val(Form* new_val,
|
||||
const Env& env,
|
||||
FormPool& pool,
|
||||
std::vector<FormElement*>* result,
|
||||
bool) {
|
||||
if (!m_index_strides.empty()) {
|
||||
update_with_val_2d(new_val, env, pool, result);
|
||||
return;
|
||||
}
|
||||
|
||||
int power_of_two = 0;
|
||||
|
||||
if (m_constant_offset == 0) {
|
||||
|
||||
@@ -356,6 +356,52 @@ std::optional<BitFieldDef> get_bitfield_initial_set(Form* form,
|
||||
return {};
|
||||
}
|
||||
|
||||
/*!
|
||||
* Setting a field to a field of another bitfield:
|
||||
* (shl (the-as int (-> other g)) 8) or just (-> other r) for a field at bit 0.
|
||||
* Only allowed if the field we read fits in the field we set
|
||||
*/
|
||||
std::optional<BitFieldDef> get_bitfield_set_from_field_read(Form* value,
|
||||
const BitField& field,
|
||||
int offset_in_bitfield,
|
||||
const TypeSystem& ts,
|
||||
const Env& env) {
|
||||
Form* read = strip_int_or_uint_cast(value);
|
||||
int shift = 0;
|
||||
auto shl_matcher = Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::SHL),
|
||||
{Matcher::any(0), Matcher::any_integer(1)});
|
||||
auto mr = match(shl_matcher, read);
|
||||
if (mr.matched) {
|
||||
read = strip_int_or_uint_cast(mr.maps.forms.at(0));
|
||||
shift = mr.maps.ints.at(1);
|
||||
}
|
||||
if (shift != field.offset() - offset_in_bitfield) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
auto deref = read->try_as_element<DerefElement>();
|
||||
if (!deref || deref->is_addr_of() || deref->tokens().size() != 1 ||
|
||||
deref->tokens().front().kind() != DerefToken::Kind::FIELD_NAME) {
|
||||
return std::nullopt;
|
||||
}
|
||||
auto base = form_as_atom(deref->base());
|
||||
if (!base || !base->is_var()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
auto read_type =
|
||||
dynamic_cast<BitFieldType*>(ts.lookup_type(env.get_variable_type(base->var(), true)));
|
||||
BitField read_field;
|
||||
if (!read_type || !read_type->lookup_field(deref->tokens().front().field_name(), &read_field) ||
|
||||
read_field.size() > field.size()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
BitFieldDef def;
|
||||
def.value = read;
|
||||
def.field_name = field.name();
|
||||
def.is_signed = false;
|
||||
return def;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
void BitfieldAccessElement::push_pcpyud(const TypeSystem& ts, FormPool& pool, const Env& /*env*/) {
|
||||
@@ -490,8 +536,11 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step,
|
||||
int size = 64 - step.amount;
|
||||
int start_bit = end_bit - size;
|
||||
bool neg = false;
|
||||
int neg_shift = 0;
|
||||
if (start_bit < 0) {
|
||||
// throw std::runtime_error("push_step: Bad bitfield start bit");
|
||||
// the field ends up shifted left by however much the right shift fell short.
|
||||
neg_shift = -start_bit;
|
||||
size += start_bit;
|
||||
start_bit = 0;
|
||||
neg = true;
|
||||
@@ -509,7 +558,7 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step,
|
||||
auto result = pool.alloc_element<GenericElement>(
|
||||
GenericOperator::make_fixed(FixedOperatorKind::SHL),
|
||||
pool.form<CastElement>(TypeSpec("int"), pool.alloc_single_form(nullptr, deref)),
|
||||
pool.form<SimpleAtomElement>(SimpleAtom::make_int_constant(64 - step.amount)));
|
||||
pool.form<SimpleAtomElement>(SimpleAtom::make_int_constant(neg_shift)));
|
||||
return result;
|
||||
} else {
|
||||
return deref;
|
||||
@@ -621,6 +670,9 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step,
|
||||
ASSERT(field);
|
||||
|
||||
auto val = get_bitfield_initial_set(step.value, as_bitfield, ts, pcpyud_offset);
|
||||
if (!val) {
|
||||
val = get_bitfield_set_from_field_read(step.value, *field, pcpyud_offset, ts, env);
|
||||
}
|
||||
|
||||
if (!val) {
|
||||
throw std::runtime_error(
|
||||
@@ -781,6 +833,81 @@ Form* cast_sound_name(FormPool& pool, const Env& env, Form* in) {
|
||||
return pool.form<ConstantTokenElement>(fmt::format("(static-sound-name \"{}\")", name));
|
||||
}
|
||||
|
||||
std::optional<std::vector<Form*>> masked_sets_to_logior_args(const BitFieldType* type_info,
|
||||
Form* in,
|
||||
FormPool& pool,
|
||||
const Env& env) {
|
||||
auto any_matcher = [](int i) {
|
||||
return Matcher::match_or({Matcher::cast("uint", Matcher::any(i)),
|
||||
Matcher::cast("int", Matcher::any(i)), Matcher::any(i)});
|
||||
};
|
||||
auto clear_matcher =
|
||||
Matcher::op_fixed(FixedOperatorKind::LOGAND, {any_matcher(0), any_matcher(1)});
|
||||
auto set_matcher = Matcher::match_or(
|
||||
{Matcher::op_fixed(FixedOperatorKind::LOGIOR, {clear_matcher, any_matcher(2)}),
|
||||
Matcher::op_fixed(FixedOperatorKind::LOGIOR, {any_matcher(2), clear_matcher})});
|
||||
|
||||
struct FieldSet {
|
||||
u64 mask;
|
||||
Form* value;
|
||||
};
|
||||
std::vector<FieldSet> sets;
|
||||
Form* base = strip_int_or_uint_cast(in);
|
||||
while (true) {
|
||||
auto mr = match(set_matcher, base);
|
||||
if (!mr.matched) {
|
||||
break;
|
||||
}
|
||||
auto mask = get_goal_integer_constant(strip_int_or_uint_cast(mr.maps.forms.at(1)), env);
|
||||
if (!mask) {
|
||||
break;
|
||||
}
|
||||
sets.push_back({*mask, mr.maps.forms.at(2)});
|
||||
base = strip_int_or_uint_cast(mr.maps.forms.at(0));
|
||||
}
|
||||
|
||||
auto constant = get_goal_integer_constant(base, env);
|
||||
if (sets.empty() || !constant) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
u64 constant_bits = *constant;
|
||||
u64 dynamic_bits = 0;
|
||||
std::vector<Form*> dynamic_values;
|
||||
// innermost set first
|
||||
for (auto it = sets.rbegin(); it != sets.rend(); ++it) {
|
||||
auto& set = *it;
|
||||
if (dynamic_bits & ~set.mask) {
|
||||
// clears a field we already set, not a static def.
|
||||
return std::nullopt;
|
||||
}
|
||||
constant_bits &= set.mask;
|
||||
|
||||
auto value = strip_int_or_uint_cast(set.value);
|
||||
auto value_constant = get_goal_integer_constant(value, env);
|
||||
if (value_constant) {
|
||||
if (*value_constant & set.mask) {
|
||||
return std::nullopt;
|
||||
}
|
||||
constant_bits |= *value_constant;
|
||||
continue;
|
||||
}
|
||||
|
||||
auto field = find_field_from_mask(env.dts->ts, type_info, ~set.mask, false);
|
||||
auto def = get_bitfield_initial_set(value, type_info, env.dts->ts, 0);
|
||||
if (!field || !def || def->field_name != field->name()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
dynamic_bits |= ~set.mask;
|
||||
dynamic_values.push_back(set.value);
|
||||
}
|
||||
|
||||
std::vector<Form*> args = {
|
||||
pool.form<SimpleAtomElement>(SimpleAtom::make_int_constant(constant_bits))};
|
||||
args.insert(args.end(), dynamic_values.begin(), dynamic_values.end());
|
||||
return args;
|
||||
}
|
||||
|
||||
std::optional<std::vector<BitFieldDef>> get_field_defs_from_expr(const BitFieldType* type_info,
|
||||
Form* in,
|
||||
const TypeSpec& typespec,
|
||||
@@ -789,7 +916,11 @@ std::optional<std::vector<BitFieldDef>> get_field_defs_from_expr(const BitFieldT
|
||||
std::optional<int> offset) {
|
||||
auto in_as_generic = strip_int_or_uint_cast(in)->try_as_element<GenericElement>();
|
||||
std::vector<Form*> args;
|
||||
if (in_as_generic && in_as_generic->op().is_fixed(FixedOperatorKind::LOGIOR)) {
|
||||
auto masked_args =
|
||||
offset.value_or(0) == 0 ? masked_sets_to_logior_args(type_info, in, pool, env) : std::nullopt;
|
||||
if (masked_args) {
|
||||
args = *masked_args;
|
||||
} else if (in_as_generic && in_as_generic->op().is_fixed(FixedOperatorKind::LOGIOR)) {
|
||||
args = compact_nested_logiors(in_as_generic, env);
|
||||
} else {
|
||||
args = {strip_int_or_uint_cast(in)};
|
||||
|
||||
@@ -388,12 +388,20 @@ class ObjectFileDB {
|
||||
[[maybe_unused]] int fn = 0;
|
||||
if (data.linked_data.segments == 3) {
|
||||
for (size_t j = data.linked_data.functions_by_seg.at(seg).size(); j-- > 0;) {
|
||||
f(data.linked_data.functions_by_seg.at(seg).at(j));
|
||||
auto& func = data.linked_data.functions_by_seg.at(seg).at(j);
|
||||
if (ir2_function_filter && &func != ir2_function_filter) {
|
||||
continue;
|
||||
}
|
||||
f(func);
|
||||
fn++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if set, ir2 passes only run on this function (used to re-analyze one function
|
||||
// for the asm branch permuter)
|
||||
const Function* ir2_function_filter = nullptr;
|
||||
|
||||
// Danger: after adding all object files, we assume that the vector never reallocates.
|
||||
std::unordered_map<std::string, std::vector<ObjectFileData>> obj_files_by_name;
|
||||
std::unordered_map<std::string, std::vector<ObjectFileRecord>> obj_files_by_dgo;
|
||||
|
||||
@@ -578,7 +578,7 @@ int get_start_idx_process(Function& function,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind ::IDENTITY,
|
||||
if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind::IDENTITY,
|
||||
Register(Reg::GPR, Reg::GP), Register(Reg::GPR, Reg::GP))) {
|
||||
lg::print("[iim] op 2 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name());
|
||||
return -1;
|
||||
@@ -764,7 +764,7 @@ int get_start_idx(Function& function,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind ::IDENTITY,
|
||||
if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind::IDENTITY,
|
||||
Register(Reg::GPR, Reg::GP), Register(Reg::GPR, Reg::GP))) {
|
||||
lg::print("[iim] op 2 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name());
|
||||
return -1;
|
||||
@@ -827,7 +827,7 @@ int get_start_idx(Function& function,
|
||||
}
|
||||
op_idx++;
|
||||
|
||||
if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind ::IDENTITY,
|
||||
if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind::IDENTITY,
|
||||
Register(Reg::GPR, Reg::A2), Register(Reg::GPR, Reg::GP))) {
|
||||
lg::print("[iim] op 8 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name());
|
||||
return -1;
|
||||
|
||||
@@ -181,8 +181,14 @@ void clean_up_return_final(const Function& f, ReturnElement* ir) {
|
||||
ASSERT(dead);
|
||||
auto src = dynamic_cast<SimpleExpressionElement*>(dead->src()->try_as_single_element());
|
||||
ASSERT(src);
|
||||
ASSERT(src->expr().is_identity() && src->expr().get_arg(0).is_int() &&
|
||||
src->expr().get_arg(0).get_int() == 0);
|
||||
auto ok = src->expr().is_identity() && src->expr().get_arg(0).is_int() &&
|
||||
src->expr().get_arg(0).get_int() == 0;
|
||||
if (!ok) {
|
||||
throw std::runtime_error(
|
||||
fmt::format("secondary assertion hit in `clean_up_return_final` in function: {} ",
|
||||
f.guessed_name.to_string()));
|
||||
}
|
||||
ASSERT(ok);
|
||||
ir->dead_code = nullptr;
|
||||
}
|
||||
|
||||
|
||||
@@ -3790,7 +3790,7 @@
|
||||
|
||||
(deftype vif-bank (structure)
|
||||
((stat uint32 :offset-assert 0)
|
||||
(fbrst uint32 :offset 16)
|
||||
(fbrst vif-fbrst :offset 16)
|
||||
(err vif-err :offset 32)
|
||||
(mark uint32 :offset 48)
|
||||
(cycle uint32 :offset 64)
|
||||
|
||||
@@ -90,11 +90,6 @@
|
||||
"symlink2", // F: asm branching
|
||||
"dma-sync-hang",
|
||||
|
||||
// display
|
||||
"vblank-handler", // F: weird asm for interrupt handler
|
||||
"vif1-handler", // F: weird asm for interrupt handler
|
||||
"vif1-handler-debug",
|
||||
|
||||
// texture
|
||||
"adgif-shader<-texture!",
|
||||
|
||||
|
||||
@@ -6165,5 +6165,13 @@
|
||||
"target-collision-low-coverage": [
|
||||
["_stack_", 32, "cshape-reaction-flags"],
|
||||
["_stack_", 40, "cshape-moving-flags"]
|
||||
],
|
||||
"vif1-handler-debug": [
|
||||
[47, "v1", "vif-bank"],
|
||||
[50, "a0", "vif-bank"]
|
||||
],
|
||||
"vif1-handler": [
|
||||
[1, "v1", "vif-bank"],
|
||||
[4, "a0", "vif-bank"]
|
||||
]
|
||||
}
|
||||
@@ -3066,7 +3066,7 @@
|
||||
|
||||
(deftype vif-bank (structure)
|
||||
((stat uint32 :offset-assert 0)
|
||||
(fbrst uint32 :offset 16)
|
||||
(fbrst vif-fbrst :offset 16)
|
||||
(err vif-err :offset 32)
|
||||
(mark uint32 :offset 48)
|
||||
(cycle uint32 :offset 64)
|
||||
@@ -34427,7 +34427,7 @@ Consists of a header and a list of [[merc-effect]]s."
|
||||
"Incremented everytime a metric is sampled
|
||||
@see [[timer0-handler]]"
|
||||
int)
|
||||
(define-extern timer0-handler (function none))
|
||||
(define-extern timer0-handler (function int int int none))
|
||||
(define-extern sampler-start
|
||||
"Reset the [[timer-bank]] EE registers.
|
||||
- If [[*sampler-mem*]] is undefined, allocate 16.7MB in the debug segment
|
||||
|
||||
@@ -367,7 +367,6 @@
|
||||
[[35, 37], "a3", "qword"],
|
||||
[[35, 37], "a2", "qword"]
|
||||
],
|
||||
"(top-level-login eye-h)": [[[69, 77], "a1", "eye-control"]],
|
||||
"entity-actor-lookup": [["_stack_", 16, "res-tag"]],
|
||||
"entity-actor-count": [["_stack_", 16, "res-tag"]],
|
||||
"(method 0 path-control)": [["_stack_", 16, "res-tag"]],
|
||||
@@ -10020,7 +10019,8 @@
|
||||
[111, "v1", "shadow-dcache"],
|
||||
[116, "a0", "uint32"],
|
||||
[[188, 246], "gp", "shadow-dcache"],
|
||||
[93, "v1", "shadow-dcache"]
|
||||
[93, "v1", "shadow-dcache"],
|
||||
[123, "a1", "gs-rgbaq"]
|
||||
],
|
||||
"(method 40 battle)": [[26, "v0", "enemy-option"]],
|
||||
"(method 9 texture-anim)": [
|
||||
@@ -10157,5 +10157,16 @@
|
||||
],
|
||||
"(method 206 hal)": [[32, "a2", "bot"]],
|
||||
"(method 209 hal)": [[32, "v1", "bot"]],
|
||||
"(method 220 hal)": [[29, "v1", "bot"]]
|
||||
"(method 220 hal)": [[29, "v1", "bot"]],
|
||||
"vif1-handler": [
|
||||
[1, "v1", "vif-bank"],
|
||||
[4, "a0", "vif-bank"]
|
||||
],
|
||||
"vif1-handler-debug": [
|
||||
[2, "a0", "vif-bank"],
|
||||
[9, "a1", "timer-bank"],
|
||||
[48, "v1", "vif-bank"],
|
||||
[51, "a0", "vif-bank"]
|
||||
],
|
||||
"timer0-handler": [[17, "a0", "timer-bank"]]
|
||||
}
|
||||
@@ -4369,6 +4369,12 @@
|
||||
"s3-1": ["points", "(inline-array vector)"]
|
||||
}
|
||||
},
|
||||
"(method 10 menu-slider-option)": {
|
||||
"vars": {
|
||||
"sv-160": ["sv-160", "rgba"],
|
||||
"sv-240": ["sv-240", "rgba"]
|
||||
}
|
||||
},
|
||||
"(method 10 menu-missions-option)": {
|
||||
"args": ["this", "progress", "font-ctx", "arg3", "arg4"],
|
||||
"vars": {
|
||||
|
||||
@@ -3199,7 +3199,7 @@
|
||||
|
||||
(deftype vif-bank (structure)
|
||||
((stat uint32 :offset-assert 0)
|
||||
(fbrst uint32 :offset 16)
|
||||
(fbrst vif-fbrst :offset 16)
|
||||
(err vif-err :offset 32)
|
||||
(mark uint32 :offset 48)
|
||||
(cycle uint32 :offset 64)
|
||||
@@ -41044,7 +41044,7 @@
|
||||
(define-extern *sampler-mem* pointer)
|
||||
(define-extern *sampler-compare* uint)
|
||||
(define-extern *sampler-count* int)
|
||||
(define-extern timer0-handler (function none))
|
||||
(define-extern timer0-handler (function int int int none))
|
||||
(define-extern sampler-start (function none))
|
||||
(define-extern sampler-stop (function none))
|
||||
|
||||
|
||||
@@ -329,7 +329,6 @@
|
||||
],
|
||||
"joint-mod-blend-local-callback": [[[1, 28], "gp", "joint-mod-blend-local"]],
|
||||
"joint-mod-blend-world-callback": [[[1, 150], "gp", "joint-mod-blend-world"]],
|
||||
"(top-level-login eye-h)": [[77, "a3", "eye-control"]],
|
||||
"entity-actor-lookup": [["_stack_", 16, "res-tag"]],
|
||||
"entity-actor-count": [["_stack_", 16, "res-tag"]],
|
||||
"(method 3 collide-query)": [
|
||||
@@ -3708,6 +3707,7 @@
|
||||
[101, "s1", "process-focusable"],
|
||||
[113, "s1", "process-focusable"]
|
||||
],
|
||||
"(method 21 gravity-ring)": [[160, "s4", "rgba"]],
|
||||
"process-drawable-shock-effect-bullseye": [[85, "a0", "lightning-tracker"]],
|
||||
"(method 14 level-group)": [
|
||||
[62, "a0", "entity-actor"],
|
||||
@@ -4425,14 +4425,18 @@
|
||||
[5, "a0", "region-prim-area"]
|
||||
],
|
||||
"(method 9 region)": [
|
||||
[[55, 60], "a0", "drawable-region-prim"],
|
||||
[46, "a0", "drawable-inline-array-region-prim"],
|
||||
[77, "a0", "drawable-inline-array-region-prim"],
|
||||
[58, "v1", "region-prim-area"],
|
||||
[4, "a0", "region-prim-area"],
|
||||
[50, "v1", "drawable-region-prim"]
|
||||
[4, "a0", "region-prim-area"]
|
||||
],
|
||||
"(method 17 drawable-tree-region-prim)": [
|
||||
[[23, 28], "a0", "drawable-region-prim"],
|
||||
[4, "a0", "region-prim-area"]
|
||||
[23, "a0", "drawable-region-prim"],
|
||||
[27, "a0", "drawable-region-prim"],
|
||||
[21, "a0", "drawable-inline-array-region-prim"],
|
||||
[42, "a0", "drawable-inline-array-region-prim"],
|
||||
[4, "a0", "region-prim-area"],
|
||||
[26, "v1", "region-prim-area"]
|
||||
],
|
||||
"command-get-trans": [
|
||||
[40, "v1", "process-drawable"],
|
||||
@@ -6002,6 +6006,7 @@
|
||||
"(code opening sew-fence-gate)": [[18, "v1", "art-joint-anim"]],
|
||||
"(code open sew-fence-gate)": [[10, "v1", "art-joint-anim"]],
|
||||
"(code active sew-move-turret)": [[109, "v1", "art-joint-anim"]],
|
||||
"(method 161 sew-laser-turret)": [[28, "s0", "rgba"]],
|
||||
"(method 162 sew-laser-turret)": [
|
||||
[41, "v1", "process-focusable"],
|
||||
[45, "v1", "process-focusable"],
|
||||
@@ -9769,10 +9774,6 @@
|
||||
[62, "a0", "vector"],
|
||||
[51, "a0", "vector"]
|
||||
],
|
||||
"(method 20 rope-system)": [
|
||||
[11, "a1", "vector"],
|
||||
[16, "a1", "vector"]
|
||||
],
|
||||
"(code preparing-for-launch desert-rescue-transport)": [
|
||||
[10, "v1", "art-joint-anim"]
|
||||
],
|
||||
@@ -11405,7 +11406,8 @@
|
||||
[114, "v1", "shadow-dcache"],
|
||||
[119, "a0", "uint32"],
|
||||
[[191, 249], "gp", "shadow-dcache"],
|
||||
[96, "v1", "shadow-dcache"]
|
||||
[96, "v1", "shadow-dcache"],
|
||||
[126, "a1", "gs-rgbaq"]
|
||||
],
|
||||
"real-fog-texture-anim-func": [[[6, 160], "s2", "(pointer uint32)"]],
|
||||
"(method 22 bigmap)": [
|
||||
@@ -11891,5 +11893,16 @@
|
||||
[24, "a0", "timer-bank"],
|
||||
[1, "v1", "timer-bank"]
|
||||
],
|
||||
"(method 11 blow-tower-path-cursor)": [["_stack_", 52, "float"]]
|
||||
"(method 11 blow-tower-path-cursor)": [["_stack_", 52, "float"]],
|
||||
"vif1-handler-debug": [
|
||||
[2, "a0", "vif-bank"],
|
||||
[9, "a1", "timer-bank"],
|
||||
[48, "v1", "vif-bank"],
|
||||
[51, "a0", "vif-bank"]
|
||||
],
|
||||
"vif1-handler": [
|
||||
[1, "v1", "vif-bank"],
|
||||
[4, "a0", "vif-bank"]
|
||||
],
|
||||
"timer0-handler": [[17, "a0", "timer-bank"]]
|
||||
}
|
||||
@@ -2187,5 +2187,10 @@
|
||||
"s3-0": "player-scores",
|
||||
"s5-0": "player-rank-counts"
|
||||
}
|
||||
},
|
||||
"(method 21 gravity-ring)": {
|
||||
"vars": {
|
||||
"s4-1": ["s4-1", "rgba"]
|
||||
}
|
||||
}
|
||||
}
|
||||
+6463
-5768
File diff suppressed because it is too large.
Load diff
@@ -24,7 +24,7 @@
|
||||
// this generates a huge amount of output if you run it on the entire game.
|
||||
"disassemble_data": false,
|
||||
// unpack textures to assets folder
|
||||
"process_tpages": false,
|
||||
"process_tpages": true,
|
||||
// write goal imports for tpages and textures
|
||||
"write_tpage_imports": false,
|
||||
// unpack game text to assets folder
|
||||
@@ -38,12 +38,10 @@
|
||||
// write out a json file containing the art info mapping, run this with all objects allowed
|
||||
"dump_art_group_info": false,
|
||||
// write out a json file containing the joint node mapping, run this with all objects allowed
|
||||
// TODO - not done yet
|
||||
"dump_joint_geo_info": false,
|
||||
// write out a json file containing tpage and texture mappings, run with all objects allowed
|
||||
"dump_tex_info": false,
|
||||
// write out a json file containing the part group table, run with all objects allowed
|
||||
// TODO - not done yet
|
||||
"dump_part_group_table": false,
|
||||
// set to false to skip adding .STR files to the decompiler database
|
||||
"read_spools": false,
|
||||
|
||||
@@ -1,5 +1,40 @@
|
||||
{
|
||||
"profile": [[3, "(function profile-segment-array profile-collapse none)"]],
|
||||
"level-info": [
|
||||
[0, "(function int)"],
|
||||
[1, "(function int)"],
|
||||
[2, "(function int)"],
|
||||
[3, "(function int)"],
|
||||
[4, "(function int)"]
|
||||
],
|
||||
"vehicle-debris": [[15, "(function collide-shape-prim none)"]],
|
||||
"title-obs": [
|
||||
[7, "(function process-tree symbol)"],
|
||||
[30, "(function external-art-buffer none)"]
|
||||
],
|
||||
"gsound": [
|
||||
[3, "(function sound-id)"],
|
||||
[5, "(function none)"]
|
||||
],
|
||||
"pov-camera": [
|
||||
[
|
||||
7,
|
||||
"(function process int symbol event-message-block object :behavior pov-camera)"
|
||||
]
|
||||
],
|
||||
"debris": [[4, "(function pair)"]],
|
||||
"nav-control": [
|
||||
[0, "(function object nav-control none)"],
|
||||
[1, "(function object nav-control none)"],
|
||||
[2, "(function object nav-control none)"],
|
||||
[3, "(function object nav-control none)"],
|
||||
[4, "(function object nav-control none)"],
|
||||
[5, "(function object nav-control none)"],
|
||||
[6, "(function object nav-control none)"],
|
||||
[7, "(function object nav-control none)"],
|
||||
[8, "(function object nav-control none)"],
|
||||
[9, "(function object nav-control none)"]
|
||||
],
|
||||
"default-menu": [
|
||||
[3, "(function object)"],
|
||||
[4, "(function object)"],
|
||||
@@ -11,12 +46,13 @@
|
||||
[10, "(function object)"],
|
||||
[11, "(function object)"],
|
||||
[12, "(function object)"],
|
||||
[13, "(function object)"],
|
||||
[13, "(function int debug-menu-msg object)"],
|
||||
[14, "(function object)"],
|
||||
[15, "(function object)"],
|
||||
[16, "(function object)"],
|
||||
[17, "(function object)"],
|
||||
[18, "(function int debug-menu-msg float object)"],
|
||||
[19, "(function none)"],
|
||||
[20, "(function object)"],
|
||||
[21, "(function object)"],
|
||||
[22, "(function object)"],
|
||||
@@ -37,7 +73,7 @@
|
||||
[37, "(function int debug-menu-msg float object)"],
|
||||
[38, "(function int debug-menu-msg float object)"],
|
||||
[39, "(function int debug-menu-msg float object)"],
|
||||
[40, "(function object)"],
|
||||
[40, "(function int debug-menu-msg float object)"],
|
||||
[41, "(function object)"],
|
||||
[42, "(function int debug-menu-msg float object)"],
|
||||
[43, "(function int debug-menu-msg float object)"],
|
||||
@@ -204,17 +240,17 @@
|
||||
[204, "(function int debug-menu-msg float object)"],
|
||||
[205, "(function int debug-menu-msg float object)"],
|
||||
[206, "(function int debug-menu-msg float object)"],
|
||||
[207, "(function int debug-menu-msg float object)"],
|
||||
[207, "(function symbol debug-menu-msg float float object)"],
|
||||
[208, "(function symbol debug-menu-msg float float object)"],
|
||||
[209, "(function int debug-menu-msg float object)"],
|
||||
[210, "(function symbol debug-menu-msg float object)"],
|
||||
[210, "(function symbol debug-menu-msg float int object)"],
|
||||
[211, "(function symbol debug-menu-msg float float object)"],
|
||||
[212, "(function int debug-menu-msg float object)"],
|
||||
[213, "(function int debug-menu-msg float object)"],
|
||||
[214, "(function int debug-menu-msg float object)"],
|
||||
[212, "(function symbol debug-menu-msg float float object)"],
|
||||
[213, "(function symbol debug-menu-msg float float object)"],
|
||||
[214, "(function symbol debug-menu-msg float float object)"],
|
||||
[215, "(function symbol debug-menu-msg float float object)"],
|
||||
[216, "(function symbol debug-menu-msg float float object)"],
|
||||
[217, "(function int debug-menu-msg float object)"],
|
||||
[217, "(function symbol debug-menu-msg float int object)"],
|
||||
[218, "(function symbol debug-menu-msg float float object)"],
|
||||
[219, "(function symbol debug-menu-msg float float object)"],
|
||||
[220, "(function symbol debug-menu-msg float float object)"],
|
||||
@@ -237,15 +273,211 @@
|
||||
[237, "(function symbol debug-menu-msg float float object)"],
|
||||
[239, "(function symbol debug-menu-msg object)"],
|
||||
[240, "(function int debug-menu-msg float object)"],
|
||||
[241, "(function int debug-menu-msg float object)"],
|
||||
[242, "(function int debug-menu-msg float object)"],
|
||||
[243, "(function int debug-menu-msg float object)"],
|
||||
[241, "(function debug-menu debug-menu object)"],
|
||||
[242, "(function debug-menu debug-menu object)"],
|
||||
[243, "(function debug-menu debug-menu object)"],
|
||||
[244, "(function debug-menu debug-menu symbol)"],
|
||||
[245, "(function debug-menu debug-menu symbol)"],
|
||||
[246, "(function debug-menu debug-menu symbol)"],
|
||||
[247, "(function debug-menu debug-menu symbol)"]
|
||||
],
|
||||
"main": [
|
||||
[17, "(function int none)"],
|
||||
[15, "(function none)"],
|
||||
[14, "(function none)"],
|
||||
[13, "(function none)"],
|
||||
[5, "(function process-tree symbol)"],
|
||||
[3, "(function symbol :behavior process)"]
|
||||
],
|
||||
"memory-usage": [
|
||||
[2, "(function process-drawable symbol)"],
|
||||
[3, "(function basic symbol)"]
|
||||
],
|
||||
"intro-scenes2": [
|
||||
[0, "(function none :behavior scene-player)"],
|
||||
[1, "(function none :behavior scene-player)"]
|
||||
],
|
||||
"intro-scenes": [
|
||||
[0, "(function none :behavior scene-player)"],
|
||||
[1, "(function none :behavior scene-player)"],
|
||||
[2, "(function none :behavior scene-player)"],
|
||||
[3, "(function none :behavior scene-player)"],
|
||||
[4, "(function none :behavior scene-player)"],
|
||||
[5, "(function none :behavior scene-player)"],
|
||||
[6, "(function none :behavior scene-player)"],
|
||||
[7, "(function none :behavior scene-player)"],
|
||||
[8, "(function none :behavior scene-player)"],
|
||||
[9, "(function none :behavior scene-player)"],
|
||||
[10, "(function none :behavior scene-player)"],
|
||||
[11, "(function none :behavior scene-player)"],
|
||||
[12, "(function none :behavior scene-player)"],
|
||||
[13, "(function none :behavior scene-player)"],
|
||||
[14, "(function none :behavior scene-player)"],
|
||||
[15, "(function none :behavior scene-player)"],
|
||||
[16, "(function none :behavior scene-player)"],
|
||||
[17, "(function none :behavior scene-player)"],
|
||||
[18, "(function none :behavior scene-player)"],
|
||||
[19, "(function none :behavior scene-player)"],
|
||||
[20, "(function none :behavior scene-player)"],
|
||||
[21, "(function none :behavior scene-player)"],
|
||||
[22, "(function none :behavior scene-player)"],
|
||||
[23, "(function none :behavior scene-player)"],
|
||||
[24, "(function none :behavior scene-player)"],
|
||||
[25, "(function none :behavior scene-player)"],
|
||||
[26, "(function none :behavior scene-player)"],
|
||||
[27, "(function none :behavior scene-player)"],
|
||||
[28, "(function none :behavior scene-player)"],
|
||||
[29, "(function none :behavior scene-player)"],
|
||||
[30, "(function none :behavior scene-player)"],
|
||||
[31, "(function none :behavior scene-player)"],
|
||||
[32, "(function none :behavior scene-player)"],
|
||||
[33, "(function none :behavior scene-player)"],
|
||||
[34, "(function none :behavior scene-player)"],
|
||||
[35, "(function none :behavior scene-player)"],
|
||||
[36, "(function none :behavior scene-player)"],
|
||||
[37, "(function none :behavior scene-player)"],
|
||||
[38, "(function none :behavior scene-player)"],
|
||||
[39, "(function none :behavior scene-player)"],
|
||||
[40, "(function none :behavior scene-player)"],
|
||||
[41, "(function none :behavior scene-player)"],
|
||||
[42, "(function none :behavior scene-player)"],
|
||||
[43, "(function none :behavior scene-player)"],
|
||||
[44, "(function none :behavior scene-player)"],
|
||||
[45, "(function none :behavior scene-player)"]
|
||||
],
|
||||
"intro-scenes3": [
|
||||
[0, "(function none :behavior scene-player)"],
|
||||
[1, "(function none :behavior scene-player)"],
|
||||
[2, "(function none :behavior scene-player)"],
|
||||
[3, "(function none :behavior scene-player)"],
|
||||
[4, "(function none :behavior scene-player)"],
|
||||
[5, "(function none :behavior scene-player)"],
|
||||
[6, "(function none :behavior scene-player)"],
|
||||
[7, "(function none :behavior scene-player)"],
|
||||
[8, "(function none :behavior scene-player)"],
|
||||
[9, "(function none :behavior scene-player)"],
|
||||
[10, "(function none :behavior scene-player)"],
|
||||
[11, "(function none :behavior scene-player)"],
|
||||
[12, "(function none :behavior scene-player)"],
|
||||
[13, "(function none :behavior scene-player)"],
|
||||
[14, "(function none :behavior scene-player)"],
|
||||
[15, "(function none :behavior scene-player)"],
|
||||
[16, "(function none :behavior scene-player)"],
|
||||
[17, "(function none :behavior scene-player)"],
|
||||
[18, "(function none :behavior scene-player)"],
|
||||
[19, "(function none :behavior scene-player)"],
|
||||
[20, "(function none :behavior scene-player)"],
|
||||
[21, "(function none :behavior scene-player)"],
|
||||
[22, "(function none :behavior scene-player)"],
|
||||
[23, "(function none :behavior scene-player)"],
|
||||
[24, "(function none :behavior scene-player)"],
|
||||
[25, "(function none :behavior scene-player)"],
|
||||
[26, "(function none :behavior scene-player)"],
|
||||
[27, "(function none :behavior scene-player)"],
|
||||
[28, "(function none :behavior scene-player)"],
|
||||
[29, "(function none :behavior scene-player)"],
|
||||
[30, "(function none :behavior scene-player)"],
|
||||
[31, "(function none :behavior scene-player)"],
|
||||
[32, "(function none :behavior scene-player)"],
|
||||
[33, "(function none :behavior scene-player)"],
|
||||
[34, "(function none :behavior scene-player)"],
|
||||
[35, "(function none :behavior scene-player)"],
|
||||
[36, "(function none :behavior scene-player)"],
|
||||
[37, "(function none :behavior scene-player)"],
|
||||
[38, "(function none :behavior scene-player)"],
|
||||
[39, "(function none :behavior scene-player)"],
|
||||
[40, "(function none :behavior scene-player)"],
|
||||
[41, "(function none :behavior scene-player)"],
|
||||
[42, "(function none :behavior scene-player)"],
|
||||
[43, "(function none :behavior scene-player)"],
|
||||
[44, "(function none :behavior scene-player)"],
|
||||
[45, "(function none :behavior scene-player)"],
|
||||
[46, "(function none :behavior scene-player)"],
|
||||
[47, "(function none :behavior scene-player)"],
|
||||
[48, "(function none :behavior scene-player)"],
|
||||
[49, "(function none :behavior scene-player)"],
|
||||
[50, "(function none :behavior scene-player)"],
|
||||
[51, "(function none :behavior scene-player)"],
|
||||
[52, "(function none :behavior scene-player)"],
|
||||
[53, "(function none :behavior scene-player)"],
|
||||
[54, "(function none :behavior scene-player)"],
|
||||
[55, "(function none :behavior scene-player)"],
|
||||
[56, "(function none :behavior scene-player)"],
|
||||
[57, "(function none :behavior scene-player)"],
|
||||
[58, "(function none :behavior scene-player)"],
|
||||
[59, "(function none :behavior scene-player)"],
|
||||
[60, "(function none :behavior scene-player)"],
|
||||
[61, "(function none :behavior scene-player)"],
|
||||
[62, "(function none :behavior scene-player)"],
|
||||
[63, "(function none :behavior scene-player)"],
|
||||
[64, "(function none :behavior scene-player)"],
|
||||
[65, "(function none :behavior scene-player)"],
|
||||
[66, "(function none :behavior scene-player)"],
|
||||
[67, "(function none :behavior scene-player)"],
|
||||
[68, "(function none :behavior scene-player)"],
|
||||
[69, "(function none :behavior scene-player)"],
|
||||
[70, "(function none :behavior scene-player)"],
|
||||
[71, "(function none :behavior scene-player)"],
|
||||
[72, "(function none :behavior scene-player)"],
|
||||
[73, "(function none :behavior scene-player)"],
|
||||
[74, "(function none :behavior scene-player)"],
|
||||
[75, "(function none :behavior scene-player)"],
|
||||
[76, "(function none :behavior scene-player)"],
|
||||
[77, "(function none :behavior scene-player)"],
|
||||
[78, "(function none :behavior scene-player)"],
|
||||
[79, "(function none :behavior scene-player)"],
|
||||
[80, "(function none :behavior scene-player)"],
|
||||
[81, "(function none :behavior scene-player)"],
|
||||
[82, "(function none :behavior scene-player)"],
|
||||
[83, "(function none :behavior scene-player)"],
|
||||
[84, "(function none :behavior scene-player)"],
|
||||
[85, "(function none :behavior scene-player)"],
|
||||
[86, "(function none :behavior scene-player)"],
|
||||
[87, "(function none :behavior scene-player)"],
|
||||
[88, "(function none :behavior scene-player)"],
|
||||
[89, "(function none :behavior scene-player)"],
|
||||
[90, "(function none :behavior scene-player)"],
|
||||
[91, "(function none :behavior scene-player)"],
|
||||
[92, "(function none :behavior scene-player)"],
|
||||
[93, "(function none :behavior scene-player)"],
|
||||
[94, "(function none :behavior scene-player)"],
|
||||
[95, "(function none :behavior scene-player)"],
|
||||
[96, "(function none :behavior scene-player)"],
|
||||
[97, "(function none :behavior scene-player)"],
|
||||
[98, "(function none :behavior scene-player)"],
|
||||
[99, "(function none :behavior scene-player)"]
|
||||
],
|
||||
"editable-player": [
|
||||
[0, "(function object)"],
|
||||
[3, "(function object int float object)"],
|
||||
[4, "(function object int symbol)"],
|
||||
[32, "(function editable editable-region symbol)"],
|
||||
[33, "(function editable editable-region symbol)"],
|
||||
[36, "(function editable symbol)"]
|
||||
],
|
||||
"joint-mod": [[21, "(function cspace transformq none)"]],
|
||||
"merc-death": [[3, "(function time-frame :behavior process-drawable)"]],
|
||||
"trajectory": [[15, "(function trajectory none)"]]
|
||||
"editable": [[101, "(function object editable-filter)"]],
|
||||
"wvehicle-wheel": [[18, "(function collide-shape-prim none)"]],
|
||||
"trajectory": [[15, "(function trajectory none)"]],
|
||||
"settings": [
|
||||
[13, "(function engine-pers connection-pers object object symbol)"],
|
||||
[6, "(function engine-pers connection-pers object object symbol)"]
|
||||
],
|
||||
"game-info": [
|
||||
[6, "(function string symbol :behavior process)"],
|
||||
[
|
||||
14,
|
||||
"(function symbol symbol continue-point game-save object :behavior process)"
|
||||
]
|
||||
],
|
||||
"entity": [
|
||||
[11, "(function process object)"],
|
||||
[12, "(function process object)"],
|
||||
[18, "(function process object)"],
|
||||
[64, "(function process-drawable object)"],
|
||||
[68, "(function process-drawable handle)"]
|
||||
],
|
||||
"target-death": [[1, "(function continue-point target)"]],
|
||||
"credits-obs": [[7, "(function process symbol)"]]
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
{"adv-event-panel-ag":[[4,"adv-event-panel-exita-ja"],[3,"adv-event-panel-entera-ja"],[2,"adv-event-panel-idle-ja"],[1,"adv-event-panel-lod0-mg"],[0,"adv-event-panel-lod0-jg"]],"antenna-all-ag":[[2,"antenna-all-idle-ja"],[1,"antenna-all-lod0-mg"],[0,"antenna-all-lod0-jg"]],"ash-hr-cred-ag":[[3,"ash-hr-cred-turntable-ja"],[2,"ash-hr-cred-shadow-mg"],[1,"ash-hr-cred-lod0-mg"],[0,"ash-hr-cred-lod0-jg"]],"atoll-dish-ag":[[2,"atoll-dish-idle-ja"],[1,"atoll-dish-lod0-mg"],[0,"atoll-dish-lod0-jg"]],"atoll-rotor-ag":[[2,"atoll-rotor-idle-ja"],[1,"atoll-rotor-lod0-mg"],[0,"atoll-rotor-lod0-jg"]],"body-parts-tab-ag":[[4,"body-parts-tab-exita-ja"],[3,"body-parts-tab-entera-ja"],[2,"body-parts-tab-idle-ja"],[1,"body-parts-tab-lod0-mg"],[0,"body-parts-tab-lod0-jg"]],"bottom-bar-ag":[[6,"bottom-bar-exitb-ja"],[5,"bottom-bar-exita-ja"],[4,"bottom-bar-enterb-ja"],[3,"bottom-bar-entera-ja"],[2,"bottom-bar-idle-ja"],[1,"bottom-bar-lod0-mg"],[0,"bottom-bar-lod0-jg"]],"brd-pool-water-ag":[[2,"brd-pool-water-idle-ja"],[1,"brd-pool-water-lod0-mg"],[0,"brd-pool-water-lod0-jg"]],"car-color-tab-ag":[[4,"car-color-tab-exita-ja"],[3,"car-color-tab-entera-ja"],[2,"car-color-tab-idle-ja"],[1,"car-color-tab-lod0-mg"],[0,"car-color-tab-lod0-jg"]],"car-interior-ag":[[3,"car-interior-idle-ja"],[2,"car-interior-lod1-mg"],[1,"car-interior-lod0-mg"],[0,"car-interior-lod0-jg"]],"car-vert-tab-ag":[[4,"car-vert-tab-exita-ja"],[3,"car-vert-tab-entera-ja"],[2,"car-vert-tab-idle-ja"],[1,"car-vert-tab-lod0-mg"],[0,"car-vert-tab-lod0-jg"]],"cash-bar-ag":[[4,"cash-bar-exita-ja"],[3,"cash-bar-entera-ja"],[2,"cash-bar-idle-ja"],[1,"cash-bar-lod0-mg"],[0,"cash-bar-lod0-jg"]],"character-select-ag":[[4,"character-select-exitrb-ja"],[3,"character-select-entera-ja"],[2,"character-select-idle-ja"],[1,"character-select-lod0-mg"],[0,"character-select-lod0-jg"]],"cliffs-fence-debris-ag":[[7,"cliffs-fence-debris-railc-lod0-mg"],[6,"cliffs-fence-debris-railc-lod0-jg"],[5,"cliffs-fence-debris-railb-lod0-mg"],[4,"cliffs-fence-debris-railb-lod0-jg"],[3,"cliffs-fence-debris-raila-lod0-mg"],[2,"cliffs-fence-debris-raila-lod0-jg"],[1,"cliffs-fence-debris-post-lod0-mg"],[0,"cliffs-fence-debris-post-lod0-jg"]],"cliffs-wood-fence-a-ag":[[2,"cliffs-wood-fence-a-idle-ja"],[1,"cliffs-wood-fence-a-lod0-mg"],[0,"cliffs-wood-fence-a-lod0-jg"]],"cliffs-wood-fence-b-ag":[[2,"cliffs-wood-fence-b-idle-ja"],[1,"cliffs-wood-fence-b-lod0-mg"],[0,"cliffs-wood-fence-b-lod0-jg"]],"cliffs-wood-fence-c-ag":[[2,"cliffs-wood-fence-c-idle-ja"],[1,"cliffs-wood-fence-c-lod0-mg"],[0,"cliffs-wood-fence-c-lod0-jg"]],"cliffs-wood-fence-d-ag":[[2,"cliffs-wood-fence-d-idle-ja"],[1,"cliffs-wood-fence-d-lod0-mg"],[0,"cliffs-wood-fence-d-lod0-jg"]],"coli-atlas-base-ag":[[14,"coli-atlas-base-b-idle-ja"],[13,"coli-atlas-base-b-lod2-mg"],[12,"coli-atlas-base-b-lod1-mg"],[11,"coli-atlas-base-b-lod0-mg"],[10,"coli-atlas-base-b-lod0-jg"],[9,"coli-atlas-base-a-idle-ja"],[8,"coli-atlas-base-a-lod2-mg"],[7,"coli-atlas-base-a-lod1-mg"],[6,"coli-atlas-base-a-lod0-mg"],[5,"coli-atlas-base-a-lod0-jg"],[4,"coli-atlas-base-idle-ja"],[3,"coli-atlas-base-lod2-mg"],[2,"coli-atlas-base-lod1-mg"],[1,"coli-atlas-base-lod0-mg"],[0,"coli-atlas-base-lod0-jg"]],"coli-atlas-break-ag":[[8,"coli-atlas-break-b-idle-ja"],[7,"coli-atlas-break-b-lod0-mg"],[6,"coli-atlas-break-b-lod0-jg"],[5,"coli-atlas-break-a-idle-ja"],[4,"coli-atlas-break-a-lod0-mg"],[3,"coli-atlas-break-a-lod0-jg"],[2,"coli-atlas-break-idle-ja"],[1,"coli-atlas-break-lod0-mg"],[0,"coli-atlas-break-lod0-jg"]],"coli-atlas-globe-ag":[[4,"coli-atlas-globe-idle-ja"],[3,"coli-atlas-globe-lod2-mg"],[2,"coli-atlas-globe-lod1-mg"],[1,"coli-atlas-globe-lod0-mg"],[0,"coli-atlas-globe-lod0-jg"]],"coli-atlas-pillar-ag":[[4,"coli-atlas-pillar-idle-ja"],[3,"coli-atlas-pillar-lod2-mg"],[2,"coli-atlas-pillar-lod1-mg"],[1,"coli-atlas-pillar-lod0-mg"],[0,"coli-atlas-pillar-lod0-jg"]],"coli-atlas-statue-ag":[[4,"coli-atlas-statue-idle-ja"],[3,"coli-atlas-statue-lod2-mg"],[2,"coli-atlas-statue-lod1-mg"],[1,"coli-atlas-statue-lod0-mg"],[0,"coli-atlas-statue-lod0-jg"]],"coli-ball-collision-ag":[[2,"coli-ball-collision-idle-ja"],[1,"coli-ball-collision-lod0-mg"],[0,"coli-ball-collision-lod0-jg"]],"coli-bowl-a-ag":[[4,"coli-bowl-a-idle-ja"],[3,"coli-bowl-a-lod2-mg"],[2,"coli-bowl-a-lod1-mg"],[1,"coli-bowl-a-lod0-mg"],[0,"coli-bowl-a-lod0-jg"]],"coli-bowl-a-debris-ag":[[5,"coli-bowl-a-debris-c-lod0-mg"],[4,"coli-bowl-a-debris-c-lod0-jg"],[3,"coli-bowl-a-debris-b-lod0-mg"],[2,"coli-bowl-a-debris-b-lod0-jg"],[1,"coli-bowl-a-debris-a-lod0-mg"],[0,"coli-bowl-a-debris-a-lod0-jg"]],"coli-bowl-hanger-ag":[[4,"coli-bowl-hanger-idle-ja"],[3,"coli-bowl-hanger-lod2-mg"],[2,"coli-bowl-hanger-lod1-mg"],[1,"coli-bowl-hanger-lod0-mg"],[0,"coli-bowl-hanger-lod0-jg"]],"coli-bowl-hanger-debris-ag":[[5,"coli-bowl-hanger-debris-c-lod0-mg"],[4,"coli-bowl-hanger-debris-c-lod0-jg"],[3,"coli-bowl-hanger-debris-b-lod0-mg"],[2,"coli-bowl-hanger-debris-b-lod0-jg"],[1,"coli-bowl-hanger-debris-a-lod0-mg"],[0,"coli-bowl-Line truncated
|
||||
{"adv-event-panel-ag":[[0,"adv-event-panel-lod0-jg"],[1,"adv-event-panel-lod0-mg"],[2,"adv-event-panel-idle-ja"],[3,"adv-event-panel-entera-ja"],[4,"adv-event-panel-exita-ja"]],"antenna-all-ag":[[0,"antenna-all-lod0-jg"],[1,"antenna-all-lod0-mg"],[2,"antenna-all-idle-ja"]],"ash-hr-cred-ag":[[0,"ash-hr-cred-lod0-jg"],[1,"ash-hr-cred-lod0-mg"],[2,"ash-hr-cred-shadow-mg"],[3,"ash-hr-cred-turntable-ja"]],"atoll-dish-ag":[[0,"atoll-dish-lod0-jg"],[1,"atoll-dish-lod0-mg"],[2,"atoll-dish-idle-ja"]],"atoll-rotor-ag":[[0,"atoll-rotor-lod0-jg"],[1,"atoll-rotor-lod0-mg"],[2,"atoll-rotor-idle-ja"]],"body-parts-tab-ag":[[0,"body-parts-tab-lod0-jg"],[1,"body-parts-tab-lod0-mg"],[2,"body-parts-tab-idle-ja"],[3,"body-parts-tab-entera-ja"],[4,"body-parts-tab-exita-ja"]],"bottom-bar-ag":[[0,"bottom-bar-lod0-jg"],[1,"bottom-bar-lod0-mg"],[2,"bottom-bar-idle-ja"],[3,"bottom-bar-entera-ja"],[4,"bottom-bar-enterb-ja"],[5,"bottom-bar-exita-ja"],[6,"bottom-bar-exitb-ja"]],"brd-pool-water-ag":[[0,"brd-pool-water-lod0-jg"],[1,"brd-pool-water-lod0-mg"],[2,"brd-pool-water-idle-ja"]],"car-color-tab-ag":[[0,"car-color-tab-lod0-jg"],[1,"car-color-tab-lod0-mg"],[2,"car-color-tab-idle-ja"],[3,"car-color-tab-entera-ja"],[4,"car-color-tab-exita-ja"]],"car-interior-ag":[[0,"car-interior-lod0-jg"],[1,"car-interior-lod0-mg"],[2,"car-interior-lod1-mg"],[3,"car-interior-idle-ja"]],"car-vert-tab-ag":[[0,"car-vert-tab-lod0-jg"],[1,"car-vert-tab-lod0-mg"],[2,"car-vert-tab-idle-ja"],[3,"car-vert-tab-entera-ja"],[4,"car-vert-tab-exita-ja"]],"cash-bar-ag":[[0,"cash-bar-lod0-jg"],[1,"cash-bar-lod0-mg"],[2,"cash-bar-idle-ja"],[3,"cash-bar-entera-ja"],[4,"cash-bar-exita-ja"]],"character-select-ag":[[0,"character-select-lod0-jg"],[1,"character-select-lod0-mg"],[2,"character-select-idle-ja"],[3,"character-select-entera-ja"],[4,"character-select-exitrb-ja"]],"cliffs-fence-debris-ag":[[0,"cliffs-fence-debris-post-lod0-jg"],[1,"cliffs-fence-debris-post-lod0-mg"],[2,"cliffs-fence-debris-raila-lod0-jg"],[3,"cliffs-fence-debris-raila-lod0-mg"],[4,"cliffs-fence-debris-railb-lod0-jg"],[5,"cliffs-fence-debris-railb-lod0-mg"],[6,"cliffs-fence-debris-railc-lod0-jg"],[7,"cliffs-fence-debris-railc-lod0-mg"]],"cliffs-wood-fence-a-ag":[[0,"cliffs-wood-fence-a-lod0-jg"],[1,"cliffs-wood-fence-a-lod0-mg"],[2,"cliffs-wood-fence-a-idle-ja"]],"cliffs-wood-fence-b-ag":[[0,"cliffs-wood-fence-b-lod0-jg"],[1,"cliffs-wood-fence-b-lod0-mg"],[2,"cliffs-wood-fence-b-idle-ja"]],"cliffs-wood-fence-c-ag":[[0,"cliffs-wood-fence-c-lod0-jg"],[1,"cliffs-wood-fence-c-lod0-mg"],[2,"cliffs-wood-fence-c-idle-ja"]],"cliffs-wood-fence-d-ag":[[0,"cliffs-wood-fence-d-lod0-jg"],[1,"cliffs-wood-fence-d-lod0-mg"],[2,"cliffs-wood-fence-d-idle-ja"]],"coli-atlas-base-ag":[[0,"coli-atlas-base-lod0-jg"],[1,"coli-atlas-base-lod0-mg"],[2,"coli-atlas-base-lod1-mg"],[3,"coli-atlas-base-lod2-mg"],[4,"coli-atlas-base-idle-ja"],[5,"coli-atlas-base-a-lod0-jg"],[6,"coli-atlas-base-a-lod0-mg"],[7,"coli-atlas-base-a-lod1-mg"],[8,"coli-atlas-base-a-lod2-mg"],[9,"coli-atlas-base-a-idle-ja"],[10,"coli-atlas-base-b-lod0-jg"],[11,"coli-atlas-base-b-lod0-mg"],[12,"coli-atlas-base-b-lod1-mg"],[13,"coli-atlas-base-b-lod2-mg"],[14,"coli-atlas-base-b-idle-ja"]],"coli-atlas-break-ag":[[0,"coli-atlas-break-lod0-jg"],[1,"coli-atlas-break-lod0-mg"],[2,"coli-atlas-break-idle-ja"],[3,"coli-atlas-break-a-lod0-jg"],[4,"coli-atlas-break-a-lod0-mg"],[5,"coli-atlas-break-a-idle-ja"],[6,"coli-atlas-break-b-lod0-jg"],[7,"coli-atlas-break-b-lod0-mg"],[8,"coli-atlas-break-b-idle-ja"]],"coli-atlas-globe-ag":[[0,"coli-atlas-globe-lod0-jg"],[1,"coli-atlas-globe-lod0-mg"],[2,"coli-atlas-globe-lod1-mg"],[3,"coli-atlas-globe-lod2-mg"],[4,"coli-atlas-globe-idle-ja"]],"coli-atlas-pillar-ag":[[0,"coli-atlas-pillar-lod0-jg"],[1,"coli-atlas-pillar-lod0-mg"],[2,"coli-atlas-pillar-lod1-mg"],[3,"coli-atlas-pillar-lod2-mg"],[4,"coli-atlas-pillar-idle-ja"]],"coli-atlas-statue-ag":[[0,"coli-atlas-statue-lod0-jg"],[1,"coli-atlas-statue-lod0-mg"],[2,"coli-atlas-statue-lod1-mg"],[3,"coli-atlas-statue-lod2-mg"],[4,"coli-atlas-statue-idle-ja"]],"coli-ball-collision-ag":[[0,"coli-ball-collision-lod0-jg"],[1,"coli-ball-collision-lod0-mg"],[2,"coli-ball-collision-idle-ja"]],"coli-bowl-a-ag":[[0,"coli-bowl-a-lod0-jg"],[1,"coli-bowl-a-lod0-mg"],[2,"coli-bowl-a-lod1-mg"],[3,"coli-bowl-a-lod2-mg"],[4,"coli-bowl-a-idle-ja"]],"coli-bowl-a-debris-ag":[[0,"coli-bowl-a-debris-a-lod0-jg"],[1,"coli-bowl-a-debris-a-lod0-mg"],[2,"coli-bowl-a-debris-b-lod0-jg"],[3,"coli-bowl-a-debris-b-lod0-mg"],[4,"coli-bowl-a-debris-c-lod0-jg"],[5,"coli-bowl-a-debris-c-lod0-mg"]],"coli-bowl-hanger-ag":[[0,"coli-bowl-hanger-lod0-jg"],[1,"coli-bowl-hanger-lod0-mg"],[2,"coli-bowl-hanger-lod1-mg"],[3,"coli-bowl-hanger-lod2-mg"],[4,"coli-bowl-hanger-idle-ja"]],"coli-bowl-hanger-debris-ag":[[0,"coli-bowl-hanger-debris-a-lod0-jg"],[1,"coli-bowl-hanger-debris-a-lod0-mg"],[2,"coli-bowl-hanger-debris-b-lod0-jg"],[3,"coli-bowl-hanger-debris-b-lod0-mg"],[4,"coli-bowl-hanger-debris-c-lod0-jg"],[5,"coli-bowl-Line truncated
|
||||
@@ -19,7 +19,7 @@
|
||||
"(method 22 level)",
|
||||
"(method 11 medius-cache)",
|
||||
"(method 13 race-line)",
|
||||
"(method 11 collide-mesh)",
|
||||
"adgif-shader<-texture!",
|
||||
"symlink2",
|
||||
"(method 17 bounding-box)",
|
||||
"quad-copy!",
|
||||
@@ -34,14 +34,28 @@
|
||||
"generic-light-proc",
|
||||
"memcpy",
|
||||
"dma-count-until-done",
|
||||
"blerc-a-fragment"
|
||||
"test-to-from-spr",
|
||||
"test-from-spr",
|
||||
"test-to-spr",
|
||||
"test-seq-read",
|
||||
"test-worst-read",
|
||||
"test-seq-write",
|
||||
"test-worst-write",
|
||||
"blerc-a-fragment",
|
||||
"get-current-room-name-and-info"
|
||||
],
|
||||
"pair_functions_by_name": [
|
||||
"update-time-of-day",
|
||||
"ref",
|
||||
"ref&",
|
||||
"(method 4 pair)",
|
||||
// "(method 28 editable)",
|
||||
"execute-select",
|
||||
// "(method 29 editable)",
|
||||
// "(method 25 editable)",
|
||||
"last",
|
||||
"member",
|
||||
"display-loop-main",
|
||||
"nmember",
|
||||
"cspace-inspect-tree",
|
||||
"assoc",
|
||||
@@ -58,6 +72,7 @@
|
||||
"delete-car!",
|
||||
"insert-cons!",
|
||||
"debug-menu-rebuild",
|
||||
"(method 8 process-tree)",
|
||||
"debug-menu-find-from-template",
|
||||
"debug-menu-render",
|
||||
"debug-menu-context-select-next-or-prev-item",
|
||||
@@ -72,17 +87,61 @@
|
||||
"~0kfrags = ~d~256hfrags/call = ~f~%": 2,
|
||||
"~0ktris = ~d~256htris/frag = ~f~%": 2,
|
||||
"~0koutput = ~d~256houtput/call = ~f~%": 2,
|
||||
"~0knodes = ~d~256hnodes/call = ~f~%": 2
|
||||
"~0knodes = ~d~256hnodes/call = ~f~%": 2,
|
||||
"~0K~Name~130HID~+50HVol~+15HPitch~+24HPan~+18HEar~+24HDist~%": 0,
|
||||
"~130H~5D ~4D ~5D ~4D ~3D ~5,,0M~%": 6,
|
||||
"music-volume=~220h~f~%": 1,
|
||||
"dialog-volume=~220h~f~%": 1,
|
||||
"music-volume-during-speech=~220h~f~%": 1,
|
||||
"sfx-volume-during-speech=~220h~f~%": 1,
|
||||
"music-volume-ducked-by-sound=~220h~f~%": 1,
|
||||
"music-seek-speed=~220h~f~%": 1,
|
||||
"~%final music-volume: ~220h~f~%": 1,
|
||||
"final sfx-volume: ~220h~f~%": 1,
|
||||
"sfx-volume=~220h~f~%": 1
|
||||
},
|
||||
"blocks_ending_in_asm_branch": {
|
||||
"(method 82 vehicle)": [
|
||||
0, 1, 4, 5, 7, 12, 36, 37, 38, 40, 41, 43, 44, 46, 58, 62, 63, 65, 66, 70,
|
||||
71, 73, 74, 81, 84, 87, 88, 92, 93, 95, 96, 98, 102, 103, 105, 106, 110,
|
||||
111, 113, 114, 116, 117, 118, 119, 121, 122, 127
|
||||
],
|
||||
"(method 16 sparticle-launch-control)": [
|
||||
17, 18, 25, 35, 36, 39, 40, 41, 43, 44, 45, 48, 62, 65, 69, 70, 74, 75,
|
||||
79, 80, 91, 92, 93, 95, 96, 97, 100, 102
|
||||
],
|
||||
"(method 13 collide-shape-prim)": [5, 6],
|
||||
"(method 12 collide-shape-prim-group)": [5, 6],
|
||||
"(method 40 collide-shape)": [3, 9, 12, 18, 20, 22, 23, 26, 27, 30, 32],
|
||||
"(method 45 collide-shape)": [33],
|
||||
"(method 36 collide-shape)": [8, 9],
|
||||
"(method 15 collide-shape-prim-sphere)": [1, 2, 4],
|
||||
"(method 18 collide-shape-prim-sphere)": [0, 1, 2, 3, 4],
|
||||
"upload-vis-bits": [2, 6, 3, 0],
|
||||
"(method 21 nav-control)": [7, 15, 16, 32, 33, 34, 35, 45, 48],
|
||||
"(method 19 nav-mesh)": [9, 18, 19, 35, 36, 37, 38, 58, 61, 62, 64, 65, 68],
|
||||
"(method 41 nav-state)": [8, 9, 10, 11, 18, 19, 21],
|
||||
"(method 26 grid-hash)": [39, 35, 22, 15],
|
||||
"(method 16 collide-shape-prim-sphere)": [1, 2],
|
||||
"(method 17 nav-mesh-editable)": [0, 1, 2, 7, 9, 24, 28, 33],
|
||||
"load-game-text-info": [20, 21, 22, 24, 25, 26],
|
||||
"(method 18 mysql-nav-graph)": [0, 1, 2, 3, 4, 7, 9],
|
||||
"dm-play-task-with-continue": [0, 1, 2, 3, 4, 6],
|
||||
"(method 18 nav-control)": [11, 12, 19, 20, 31, 34],
|
||||
"(method 19 nav-control)": [9, 10],
|
||||
"find-closest-circle-ray-intersection": [0, 4, 15, 16, 17, 18],
|
||||
"cam-helper-temp": [38, 40],
|
||||
"level-remap-texture": [2, 3, 4, 5, 6],
|
||||
"bsp-camera-asm": [1, 2, 3, 4, 6, 7],
|
||||
"get-car-skel-part": [0, 1, 2, 4],
|
||||
"(method 9 curve-color-fast)": [0, 1],
|
||||
"evaluate-color-curve-fast": [0, 1],
|
||||
"sqlpipe-query": [21],
|
||||
"find-offending-process-focusable": [16, 19],
|
||||
"(method 10 simple-sprite-system)": [0],
|
||||
"(method 9 editable-region)": [63],
|
||||
"find-nearest-entity": [7, 9],
|
||||
"(method 49 process-drawable)": [2, 3, 7, 27, 28, 30],
|
||||
"(method 42 collide-shape)": [0, 1, 2, 3, 4, 7],
|
||||
"(method 18 collide-shape-prim-mesh)": [2, 3, 4, 5, 6, 7],
|
||||
"(method 12 collide-shape-prim-sphere)": [
|
||||
@@ -92,22 +151,35 @@
|
||||
"(method 12 collide-shape-prim-mesh)": [
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16
|
||||
],
|
||||
"(method 11 collide-mesh)": [2, 4],
|
||||
"(method 12 collide-mesh-cache)": [0, 1, 2, 3, 4, 5],
|
||||
"(method 10 collide-mesh)": [2],
|
||||
"add-debug-line-sphere": [0],
|
||||
"add-debug-box-with-transform": [0, 3],
|
||||
"unpack-comp-rle": [1, 3, 5, 6],
|
||||
"should-push-away-test-mesh": [2, 4],
|
||||
"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, 39, 43, 45
|
||||
],
|
||||
"(method 16 level)": [0, 1, 5, 13, 14, 15],
|
||||
"draw-drawable-tree-instance-shrub": [5, 7, 9, 11]
|
||||
"draw-drawable-tree-instance-shrub": [5, 7, 9, 11],
|
||||
"get-host-by-name": [17],
|
||||
"(anon-function 3 game-save)": [15, 16],
|
||||
"(anon-function 24 game-save)": [5],
|
||||
"draw-actor-marks": [8],
|
||||
"(method 13 collide-cache)": [7, 9],
|
||||
"(method 22 collide-cache)": [11, 12, 27, 28]
|
||||
},
|
||||
"dynamic_format_arg_counts": {
|
||||
"(trans auto-idle)": [[265, 1]],
|
||||
"(trans idle nav-mesh-editor)": [[525, 0]],
|
||||
"locate-sub": [[68, 3]]
|
||||
},
|
||||
"dynamic_format_arg_counts": {},
|
||||
"mips2c_functions_by_name": [
|
||||
"get-string-length-asm",
|
||||
"draw-string3d-asm",
|
||||
"draw-string-asm-packed",
|
||||
"collide-do-primitives",
|
||||
"moving-sphere-triangle-intersect",
|
||||
"calc-animation-from-spr",
|
||||
@@ -129,34 +201,39 @@
|
||||
"draw-large-polygon",
|
||||
"render-sky-quad",
|
||||
"render-sky-tri",
|
||||
"(method 17 sky-work)",
|
||||
"(method 32 sky-work)",
|
||||
"(method 31 sky-work)",
|
||||
// "(method 34 sky-work)", causes mips2c to assert
|
||||
"(method 29 sky-work)",
|
||||
"(method 30 sky-work)",
|
||||
// "(method 35 sky-work)", causes mips2c to assert
|
||||
"(method 16 sky-work)", // yes
|
||||
"(method 17 sky-work)", // yes
|
||||
"(method 28 sky-work)", // yes
|
||||
"(method 29 sky-work)", // yes
|
||||
"(method 30 sky-work)", // yes
|
||||
"(method 32 sky-work)", // yes
|
||||
"(method 33 sky-work)", // yes
|
||||
"(method 11 collide-hash)",
|
||||
"(method 12 collide-hash)",
|
||||
"fill-bg-using-box-new",
|
||||
"fill-bg-using-line-sphere-new",
|
||||
"(method 12 collide-mesh)",
|
||||
"(method 11 collide-mesh)",
|
||||
"(method 14 collide-mesh)",
|
||||
"(method 15 collide-mesh)",
|
||||
"cspace<-parented-transformq-joint!",
|
||||
"(method 13 collide-mesh)",
|
||||
"draw-large-polygon-ocean",
|
||||
"render-ocean-quad",
|
||||
"init-ocean-far-regs",
|
||||
"(method 15 ocean)",
|
||||
"(method 19 grid-hash)",
|
||||
"(method 20 grid-hash)",
|
||||
"(method 21 grid-hash)",
|
||||
"(method 22 grid-hash)",
|
||||
"(method 28 sphere-hash)",
|
||||
"(method 33 sphere-hash)",
|
||||
"(method 24 grid-hash)",
|
||||
"(method 35 sphere-hash)", // yes
|
||||
"(method 31 sphere-hash)", // yes
|
||||
"(method 34 sphere-hash)", // yes
|
||||
"(method 35 spatial-hash)", // yes
|
||||
"(method 40 spatial-hash)", // yes
|
||||
"(method 38 spatial-hash)", // yes
|
||||
"(method 34 spatial-hash)", // yes
|
||||
"(method 32 sphere-hash)",
|
||||
"(method 30 sphere-hash)",
|
||||
"(method 32 spatial-hash)",
|
||||
"(method 34 spatial-hash)",
|
||||
"(method 35 spatial-hash)",
|
||||
"(method 36 spatial-hash)",
|
||||
"(method 37 spatial-hash)",
|
||||
"(method 10 collide-shape-prim-mesh)",
|
||||
"(method 10 collide-shape-prim-sphere)",
|
||||
"(method 10 collide-shape-prim-group)",
|
||||
@@ -182,7 +259,7 @@
|
||||
"(method 17 nav-engine)",
|
||||
"(method 18 nav-engine)",
|
||||
"(method 21 nav-engine)",
|
||||
"(method 39 nav-state)",
|
||||
"(method 39 nav-state)", // yes
|
||||
"setup-blerc-chains-for-one-fragment",
|
||||
"blerc-execute",
|
||||
"ripple-create-wave-table",
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"adv-event-panel-lod0-jg":[[8,"bottomright"],[7,"topleft"],[6,"selectscreentype"],[5,"select_screen"],[4,"main"],[3,"cam"],[2,"prejoint"],[1,"align"]],"antenna-all-lod0-jg":[[8,"tail_b"],[7,"tail_a"],[6,"flag_d"],[5,"flag_c"],[4,"flag_b"],[3,"flag_a"],[2,"prejoint"],[1,"align"]],"ash-hr-cred-lod0-jg":[[89,"gun"],[88,"holster"],[87,"RlegDangle1_A"],[86,"RlegDangle2_A"],[85,"RlegDangle3_A"],[84,"Rball"],[83,"LlegDangle3_A"],[82,"LlegDangle2_A"],[81,"LlegDangle1_A"],[80,"Lball"],[79,"rcollar_C"],[78,"rcollar_B"],[77,"rcollar_A"],[76,"lcollar_C"],[75,"lcollar_B"],[74,"lcollar_A"],[73,"rtit_A"],[72,"ltit_A"],[71,"RpinkyC"],[70,"RpinkyB"],[69,"RpinkyA"],[68,"RringC"],[67,"RringB"],[66,"RringA"],[65,"RmiddleC"],[64,"RmiddleB"],[63,"RmiddleA"],[62,"RindexC"],[61,"RindexB"],[60,"RindexA"],[59,"RthumbC"],[58,"RthumbB"],[57,"RthumbA"],[56,"LpinkyC"],[55,"LpinkyB"],[54,"LpinkyA"],[53,"LringC"],[52,"LringB"],[51,"LringA"],[50,"LmiddleC"],[49,"LmiddleB"],[48,"LmiddleA"],[47,"LindexC"],[46,"LindexB"],[45,"LindexA"],[44,"LthumbC"],[43,"LthumbB"],[42,"LthumbA"],[41,"hairM_C"],[40,"hairM_B"],[39,"hairM_A1"],[38,"hairL2_C"],[37,"hairL2_B"],[36,"hairL2_A"],[35,"hairL1_C"],[34,"hairL1_B"],[33,"hairL1_A"],[32,"hairR2_C"],[31,"hairR2_B"],[30,"hairR2_A"],[29,"hairR1_C"],[28,"hairR1_B"],[27,"hairR1_A"],[26,"Rear_C"],[25,"Rear_B"],[24,"Lear_C"],[23,"Lear_B"],[22,"Rankle"],[21,"Rknee"],[20,"Rthigh"],[19,"Lankle"],[18,"Lknee"],[17,"Lthigh"],[16,"hips"],[15,"Rhand"],[14,"Relbow"],[13,"Rshoulder"],[12,"Lhand"],[11,"Lelbow"],[10,"Lshoulder"],[9,"Rear_A"],[8,"Lear_A"],[7,"head"],[6,"neck"],[5,"chest"],[4,"stomach"],[3,"main"],[2,"prejoint"],[1,"align"]],"atoll-dish-lod0-jg":[[4,"Yrotation"],[3,"main"],[2,"prejoint"],[1,"align"]],"atoll-rotor-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"body-parts-tab-lod0-jg":[[9,"bottomright"],[8,"topleft"],[7,"mapscreentype"],[6,"map_screen"],[5,"arm"],[4,"main"],[3,"cam"],[2,"prejoint"],[1,"align"]],"bottom-bar-lod0-jg":[[14,"bottomright3"],[13,"topleft3"],[12,"bottomright2"],[11,"topleft2"],[10,"bottomright1"],[9,"topleft1"],[8,"bottomright"],[7,"topleft"],[6,"bottombartype"],[5,"bottom_bar"],[4,"main"],[3,"cam"],[2,"prejoint"],[1,"align"]],"brd-pool-water-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"car-color-tab-lod0-jg":[[13,"color"],[12,"tri2"],[11,"tri1"],[10,"tri0"],[9,"bottomright"],[8,"topleft"],[7,"mapscreentype"],[6,"map_screen"],[5,"arm"],[4,"main"],[3,"cam"],[2,"prejoint"],[1,"align"]],"car-interior-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"car-vert-tab-lod0-jg":[[9,"bottomright"],[8,"topleft"],[7,"mapscreentype"],[6,"map_screen"],[5,"arm"],[4,"main"],[3,"cam"],[2,"prejoint"],[1,"align"]],"cash-bar-lod0-jg":[[9,"bottomright2"],[8,"topleft2"],[7,"bottomright"],[6,"topleft"],[5,"cash_bar"],[4,"main"],[3,"cam"],[2,"prejoint"],[1,"align"]],"character-select-lod0-jg":[[10,"bottomright_type"],[9,"topleft_type"],[8,"bottomright"],[7,"topleft"],[6,"mapscreentype"],[5,"map_screen"],[4,"main"],[3,"cam"],[2,"prejoint"],[1,"align"]],"cliffs-fence-debris-post-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"cliffs-fence-debris-raila-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"cliffs-fence-debris-railb-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"cliffs-fence-debris-railc-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"cliffs-wood-fence-a-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"cliffs-wood-fence-b-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"cliffs-wood-fence-c-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"cliffs-wood-fence-d-lod0-jg":[[3,"main"],[2,"prejoint"],[1,"align"]],"coli-atlas-base-a-lod0-jg":[[4,"coli_atlas_base_dust"],[3,"main"],[2,"prejoint"],[1,"align"]],"coli-atlas-base-b-lod0-jg":[[4,"coli_atlas_base_dust"],[3,"main"],[2,"prejoint"],[1,"align"]],"coli-atlas-base-lod0-jg":[[4,"coli_atlas_base_dust"],[3,"main"],[2,"prejoint"],[1,"align"]],"coli-atlas-break-a-lod0-jg":[[52,"ax"],[51,"aw"],[50,"av"],[49,"au"],[48,"at"],[47,"as"],[46,"ar"],[45,"aq"],[44,"ap"],[43,"ao"],[42,"an"],[41,"am"],[40,"al"],[39,"ak"],[38,"aj"],[37,"ai"],[36,"ah"],[35,"ag"],[34,"af"],[33,"ae"],[32,"ad"],[31,"ac"],[30,"ab"],[29,"aa"],[28,"z"],[27,"y"],[26,"x"],[25,"w"],[24,"v"],[23,"u"],[22,"t"],[21,"s"],[20,"r"],[19,"q"],[18,"p"],[17,"o"],[16,"n"],[15,"m"],[14,"l"],[13,"k"],[12,"j"],[11,"i"],[10,"h"],[9,"g"],[8,"f"],[7,"e"],[6,"d"],[5,"c"],[4,"b"],[3,"a"],[2,"prejoint"],[1,"align"]],"coli-atlas-break-b-lod0-jg":[[52,"cv"],[51,"cu"],[50,"ct"],[49,"cs"],[48,"cr"],[47,"cq"],[46,"cp"],[45,"co"],[44,"cn"],[43,"cm"],[42,"cl"],[41,"ck"],[40,"cj"],[39,"ci"],[38,"ch"],[37,"cg"],[36,"cf"],[35,"ce"],[34,"cd"],[33,"cc"],[32,"cb"],[31,"ca"],[30,"bz"],[29,"by"],[28,"bx"],[27,"bw"],[26,"bv"],[25,"bu"],[24,"bt"],[23,"bs"],[22,"br"],[21,"bq"],[20,"bp"],[19,"bo"],[18,"bn"],[17,"bm"],[16,"bl"],[15,"bk"],[14,"bj"],[13,"bi"],[12,"bh"],[11,"bg"],[10,"bf"],[9,"be"],[8,"bd"],[7,"bc"],[6,"bb"],[5,"ba"],[4,"az"],[3,"ay"],[2,"prejoint"],[1,"align"]],"coli-atlas-break-lod0-jg":[[94,"atlas_break"Line truncated
|
||||
{"adv-event-panel-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"select_screen"],[6,"selectscreentype"],[7,"topleft"],[8,"bottomright"]],"antenna-all-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"flag_a"],[4,"flag_b"],[5,"flag_c"],[6,"flag_d"],[7,"tail_a"],[8,"tail_b"]],"ash-hr-cred-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"stomach"],[5,"chest"],[6,"neck"],[7,"head"],[8,"Lear_A"],[9,"Rear_A"],[10,"Lshoulder"],[11,"Lelbow"],[12,"Lhand"],[13,"Rshoulder"],[14,"Relbow"],[15,"Rhand"],[16,"hips"],[17,"Lthigh"],[18,"Lknee"],[19,"Lankle"],[20,"Rthigh"],[21,"Rknee"],[22,"Rankle"],[23,"Lear_B"],[24,"Lear_C"],[25,"Rear_B"],[26,"Rear_C"],[27,"hairR1_A"],[28,"hairR1_B"],[29,"hairR1_C"],[30,"hairR2_A"],[31,"hairR2_B"],[32,"hairR2_C"],[33,"hairL1_A"],[34,"hairL1_B"],[35,"hairL1_C"],[36,"hairL2_A"],[37,"hairL2_B"],[38,"hairL2_C"],[39,"hairM_A1"],[40,"hairM_B"],[41,"hairM_C"],[42,"LthumbA"],[43,"LthumbB"],[44,"LthumbC"],[45,"LindexA"],[46,"LindexB"],[47,"LindexC"],[48,"LmiddleA"],[49,"LmiddleB"],[50,"LmiddleC"],[51,"LringA"],[52,"LringB"],[53,"LringC"],[54,"LpinkyA"],[55,"LpinkyB"],[56,"LpinkyC"],[57,"RthumbA"],[58,"RthumbB"],[59,"RthumbC"],[60,"RindexA"],[61,"RindexB"],[62,"RindexC"],[63,"RmiddleA"],[64,"RmiddleB"],[65,"RmiddleC"],[66,"RringA"],[67,"RringB"],[68,"RringC"],[69,"RpinkyA"],[70,"RpinkyB"],[71,"RpinkyC"],[72,"ltit_A"],[73,"rtit_A"],[74,"lcollar_A"],[75,"lcollar_B"],[76,"lcollar_C"],[77,"rcollar_A"],[78,"rcollar_B"],[79,"rcollar_C"],[80,"Lball"],[81,"LlegDangle1_A"],[82,"LlegDangle2_A"],[83,"LlegDangle3_A"],[84,"Rball"],[85,"RlegDangle3_A"],[86,"RlegDangle2_A"],[87,"RlegDangle1_A"],[88,"holster"],[89,"gun"]],"atoll-dish-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"Yrotation"]],"atoll-rotor-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"body-parts-tab-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"map_screen"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"]],"bottom-bar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"bottom_bar"],[6,"bottombartype"],[7,"topleft"],[8,"bottomright"],[9,"topleft1"],[10,"bottomright1"],[11,"topleft2"],[12,"bottomright2"],[13,"topleft3"],[14,"bottomright3"]],"brd-pool-water-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"car-color-tab-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"map_screen"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"],[10,"tri0"],[11,"tri1"],[12,"tri2"],[13,"color"]],"car-interior-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"car-vert-tab-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"arm"],[6,"map_screen"],[7,"mapscreentype"],[8,"topleft"],[9,"bottomright"]],"cash-bar-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"cash_bar"],[6,"topleft"],[7,"bottomright"],[8,"topleft2"],[9,"bottomright2"]],"character-select-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"cam"],[4,"main"],[5,"map_screen"],[6,"mapscreentype"],[7,"topleft"],[8,"bottomright"],[9,"topleft_type"],[10,"bottomright_type"]],"cliffs-fence-debris-post-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-fence-debris-raila-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-fence-debris-railb-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-fence-debris-railc-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-wood-fence-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-wood-fence-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-wood-fence-c-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"cliffs-wood-fence-d-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"]],"coli-atlas-base-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_atlas_base_dust"]],"coli-atlas-base-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_atlas_base_dust"]],"coli-atlas-base-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"main"],[4,"coli_atlas_base_dust"]],"coli-atlas-break-a-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"a"],[4,"b"],[5,"c"],[6,"d"],[7,"e"],[8,"f"],[9,"g"],[10,"h"],[11,"i"],[12,"j"],[13,"k"],[14,"l"],[15,"m"],[16,"n"],[17,"o"],[18,"p"],[19,"q"],[20,"r"],[21,"s"],[22,"t"],[23,"u"],[24,"v"],[25,"w"],[26,"x"],[27,"y"],[28,"z"],[29,"aa"],[30,"ab"],[31,"ac"],[32,"ad"],[33,"ae"],[34,"af"],[35,"ag"],[36,"ah"],[37,"ai"],[38,"aj"],[39,"ak"],[40,"al"],[41,"am"],[42,"an"],[43,"ao"],[44,"ap"],[45,"aq"],[46,"ar"],[47,"as"],[48,"at"],[49,"au"],[50,"av"],[51,"aw"],[52,"ax"]],"coli-atlas-break-b-lod0-jg":[[1,"align"],[2,"prejoint"],[3,"ay"],[4,"az"],[5,"ba"],[6,"bb"],[7,"bc"],[8,"bd"],[9,"be"],[10,"bf"],[11,"bg"],[12,"bh"],[13,"bi"],[14,"bj"],[15,"bk"],[16,"bl"],[17,"bm"],[18,"bn"],[19,"bo"],[20,"bp"],[21,"bq"],[22,"br"],[23,"bs"],[24,"bt"],[25,"bu"],[26,"bv"],[27,"bw"],[28,"bx"],[29,"by"],[30,"bz"],[31,"ca"],[32,"cb"],[33,"cc"],[34,"cd"],[35,"ce"],[36,"cf"],[37,"cg"],[38,"ch"],[39,"ci"],[40,"cj"],[41,"ck"],[42,"cl"],[43,"cm"],[44,"cn"],[45,"co"],[46,"cp"],[47,"cq"],[48,"cr"],[49,"cs"],[50,"ct"],[51,"cu"],[52,"cv"]],"coli-atlas-break-lod0-jg":[[1,"align"],[2,"pLine truncated
|
||||
@@ -2,6 +2,15 @@
|
||||
"ambient-h": [["L1", "(inline-array talker-speech-class)", 233]],
|
||||
"pat-h": [["L1", "(inline-array pat-mode-info)", 4]],
|
||||
"foreground-h": [["L4", "(pointer bucket-id-16)", 462]],
|
||||
"tfrag-methods": [
|
||||
["L92", "(inline-array tfrag-init-data)", 10],
|
||||
["L93", "(pointer bucket-id)", 12],
|
||||
["L94", "(pointer bucket-id)", 12],
|
||||
["L95", "(pointer bucket-id)", 12],
|
||||
["L96", "(pointer bucket-id)", 12],
|
||||
["L98", "(pointer bucket-id)", 12],
|
||||
["L99", "(pointer bucket-id)", 12]
|
||||
],
|
||||
"joint-mod": [["L212", "(inline-array vector)", 3]],
|
||||
"texture-anim-h": [["L1", "(pointer uint8)", 256]],
|
||||
"process-nettable-h": [["L13", "(pointer uint32)", 95]],
|
||||
@@ -12,6 +21,10 @@
|
||||
"timer-h": [["L15", "(pointer uint32)", 12]],
|
||||
"game-task-h": [["L178", "(pointer text-id)", 24]],
|
||||
"profile": [["L3", "(inline-array profile-spec)", 13]],
|
||||
"net-mgr-h": [
|
||||
["L12", "(inline-array net-aux-msg-handler)", 12],
|
||||
["L11", "(pointer uint32)", 512]
|
||||
],
|
||||
"task-control-h": [
|
||||
["L971", "uint64", true],
|
||||
["L973", "uint64", true],
|
||||
@@ -32,12 +45,12 @@
|
||||
["L70", "(pointer uint32)", 256],
|
||||
["L69", "(pointer uint32)", 256],
|
||||
["L68", "(pointer uint32)", 256],
|
||||
["L72", "(pointer uint32)", 12]
|
||||
["L72", "(inline-array mem-buffer)", 4]
|
||||
],
|
||||
"sprite": [["L52", "dma-packet"]],
|
||||
"headset-h": [
|
||||
["L8", "(pointer uint8)", 512],
|
||||
["L7", "(pointer uint8)", 512],
|
||||
["L8", "(pointer uint16)", 256],
|
||||
["L7", "(pointer uint16)", 256],
|
||||
["L6", "(pointer uint8)", 100],
|
||||
["L5", "(pointer uint8)", 160],
|
||||
["L4", "(pointer uint8)", 160],
|
||||
@@ -780,5 +793,395 @@
|
||||
["L295", "vector"],
|
||||
["L294", "vector"]
|
||||
],
|
||||
"net-time-trial-h": [["L5", "(inline-array timetrial-snapshot)", 938]]
|
||||
"net-time-trial-h": [["L5", "(inline-array timetrial-snapshot)", 938]],
|
||||
"process-drawable": [
|
||||
["L472", "vector"],
|
||||
["L471", "vector"]
|
||||
],
|
||||
"sprite-glow": [["L27", "dma-packet"]],
|
||||
"merc-blend-shape": [["L71", "(pointer int16)", 40]],
|
||||
"generic-merc": [["L178", "(inline-array invinitdata)", 8]],
|
||||
"ocean-trans-tables": [
|
||||
["L1", "(inline-array vector)", 4],
|
||||
["L2", "(pointer float)", 160],
|
||||
["L3", "(pointer float)", 100],
|
||||
["L4", "(pointer float)", 72],
|
||||
["L5", "(pointer float)", 72],
|
||||
["L6", "(pointer float)", 72],
|
||||
["L7", "(pointer float)", 72],
|
||||
["L8", "(pointer float)", 44],
|
||||
["L9", "(pointer float)", 44],
|
||||
["L10", "(pointer float)", 44],
|
||||
["L11", "(pointer float)", 44],
|
||||
["L12", "(pointer float)", 40],
|
||||
["L13", "(pointer float)", 40],
|
||||
["L14", "(pointer float)", 40],
|
||||
["L15", "(pointer float)", 40],
|
||||
["L16", "(pointer float)", 28],
|
||||
["L17", "(pointer float)", 28],
|
||||
["L18", "(pointer float)", 28],
|
||||
["L19", "(pointer float)", 28]
|
||||
],
|
||||
"intro-scenes2": [["L1142", "uint64", true]],
|
||||
"camera-facing-quad": [["L11", "vector"]],
|
||||
"credits-obs": [
|
||||
["L194", "cloth-params"],
|
||||
["L193", "cloth-params"],
|
||||
["L191", "cloth-params"],
|
||||
["L190", "cloth-params"],
|
||||
["L189", "cloth-params"]
|
||||
],
|
||||
"net-mgr-medius-clans-h": [
|
||||
["L351", "(pointer uint32)", 9],
|
||||
["L350", "(pointer uint8)", 200]
|
||||
],
|
||||
"car-tables": [["L1", "(pointer uint16)", 11]],
|
||||
"nav-control": [
|
||||
["L527", "uint64", true],
|
||||
["L526", "uint64", true]
|
||||
],
|
||||
"game-save": [["L532", "(pointer uint64)", 2]],
|
||||
"game-info": [
|
||||
["L309", "uint64", true],
|
||||
["L310", "uint64", true],
|
||||
["L311", "uint64", true],
|
||||
["L265", "uint64", true]
|
||||
],
|
||||
"entity": [["L450", "(pointer handle)", 1]],
|
||||
"part-tester": [
|
||||
["L166", "uint64", true],
|
||||
["L164", "uint64", true],
|
||||
["L165", "uint64", true],
|
||||
["L157", "uint64", true]
|
||||
],
|
||||
"cam-states": [
|
||||
["L689", "uint64", true],
|
||||
["L690", "uint64", true],
|
||||
["L688", "uint64", true],
|
||||
["L691", "uint64", true]
|
||||
],
|
||||
"udp-layer": [["L123", "(pointer uint32)", 256]],
|
||||
"headset": [
|
||||
["L167", "(pointer uint32)", 200],
|
||||
["L168", "(pointer uint32)", 200],
|
||||
["L169", "(pointer uint32)", 200],
|
||||
["L170", "(pointer uint32)", 200]
|
||||
],
|
||||
"net-aux-voice": [
|
||||
["L115", "(pointer int32)", 16],
|
||||
["L119", "(pointer int32)", 256]
|
||||
],
|
||||
"mem-buffer": [
|
||||
["L10", "vector"],
|
||||
["L9", "vector"]
|
||||
],
|
||||
"pad": [["L116", "(pointer uint32)", 192]],
|
||||
"keyboard": [["L273", "(pointer uint32)", 32]],
|
||||
"3d-menu-elements": [
|
||||
["L283", "uint64", true],
|
||||
["L282", "uint64", true],
|
||||
["L216", "vector"]
|
||||
],
|
||||
"wcar-bear": [
|
||||
["L102", "vector"],
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"]
|
||||
],
|
||||
"wcar-bobcat": [
|
||||
["L102", "vector"],
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"]
|
||||
],
|
||||
"wcar-cheetah": [
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"],
|
||||
["L95", "vector"]
|
||||
],
|
||||
"wcar-cougar": [
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"],
|
||||
["L95", "vector"]
|
||||
],
|
||||
"wcar-daxtermobile": [
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"],
|
||||
["L95", "vector"]
|
||||
],
|
||||
"wcar-falcon": [
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"],
|
||||
["L95", "vector"]
|
||||
],
|
||||
"wcar-gila": [
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"],
|
||||
["L95", "vector"]
|
||||
],
|
||||
"wcar-leopard": [
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"],
|
||||
["L95", "vector"]
|
||||
],
|
||||
"wcar-mongoose": [
|
||||
["L104", "vector"],
|
||||
["L103", "vector"],
|
||||
["L102", "vector"],
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"]
|
||||
],
|
||||
"wcar-panther": [
|
||||
["L103", "vector"],
|
||||
["L102", "vector"],
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"]
|
||||
],
|
||||
"wcar-possum": [
|
||||
["L103", "vector"],
|
||||
["L102", "vector"],
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"]
|
||||
],
|
||||
"wcar-snake": [
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"],
|
||||
["L95", "vector"]
|
||||
],
|
||||
"wcar-tiger": [
|
||||
["L102", "vector"],
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"]
|
||||
],
|
||||
"wcar-wolf": [
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"],
|
||||
["L95", "vector"]
|
||||
],
|
||||
"wcar-wombat": [
|
||||
["L101", "vector"],
|
||||
["L100", "vector"],
|
||||
["L99", "vector"],
|
||||
["L98", "vector"],
|
||||
["L97", "vector"],
|
||||
["L96", "vector"],
|
||||
["L95", "vector"]
|
||||
],
|
||||
"cam-layout": [
|
||||
["L893", "uint64", true],
|
||||
["L899", "uint64", true],
|
||||
["L898", "uint64", true],
|
||||
["L892", "uint64", true],
|
||||
["L895", "uint64", true],
|
||||
["L894", "uint64", true],
|
||||
["L897", "uint64", true],
|
||||
["L896", "uint64", true],
|
||||
["L802", "rgba", true],
|
||||
["L800", "rgba", true],
|
||||
["L798", "rgba", true],
|
||||
["L796", "rgba", true],
|
||||
["L794", "rgba", true],
|
||||
["L792", "rgba", true],
|
||||
["L889", "uint64", true],
|
||||
["L785", "vector"],
|
||||
["L802", "vector4w"],
|
||||
["L800", "vector4w"],
|
||||
["L798", "vector4w"],
|
||||
["L796", "vector4w"],
|
||||
["L794", "vector4w"],
|
||||
["L792", "vector4w"]
|
||||
],
|
||||
"cam-states-dbg": [
|
||||
["L60", "vector"],
|
||||
["L59", "vector"]
|
||||
],
|
||||
"coliseum-obs": [
|
||||
["L18", "vector"],
|
||||
["L17", "vector"]
|
||||
],
|
||||
"garage-obs": [
|
||||
["L110", "vector"],
|
||||
["L111", "vector"]
|
||||
],
|
||||
"kras-obs": [["L148", "attack-info"]],
|
||||
"peak-obs": [["L90", "attack-info"]],
|
||||
"snow-obs": [
|
||||
["L16", "vector"],
|
||||
["L15", "vector"]
|
||||
],
|
||||
"title-obs": [
|
||||
["L226", "uint64", true],
|
||||
["L226", "handle-wrapper"]
|
||||
],
|
||||
"loader": [
|
||||
["L1450", "uint64", true],
|
||||
["L1450", "uint64", true],
|
||||
["L1229", "string"]
|
||||
],
|
||||
"hud": [["L145", "vector"]],
|
||||
"lobby-net-h": [
|
||||
["L110", "(pointer uint32)", 84],
|
||||
["L114", "(pointer uint32)", 3840],
|
||||
["L115", "(pointer uint32)", 3840],
|
||||
["L116", "(pointer uint32)", 3840],
|
||||
["L117", "(pointer uint32)", 64],
|
||||
["L146", "uint64", true],
|
||||
["L148", "uint64", true],
|
||||
["L147", "uint64", true],
|
||||
["L145", "uint64", true],
|
||||
["L144", "uint64", true],
|
||||
["L119", "uint64", true]
|
||||
],
|
||||
"default-menu": [
|
||||
["L6893", "uint64", true],
|
||||
["L6899", "uint64", true],
|
||||
["L6236", "attack-info"],
|
||||
["L6242", "attack-info"],
|
||||
["L6896", "uint64", true],
|
||||
["L6894", "uint64", true],
|
||||
["L6895", "uint64", true],
|
||||
["L6898", "uint64", true],
|
||||
["L6897", "uint64", true]
|
||||
],
|
||||
"collide-cache": [["L220", "vector"]],
|
||||
"collide-shape": [
|
||||
["L323", "vector"],
|
||||
["L321", "vector"],
|
||||
["L314", "attack-info"]
|
||||
],
|
||||
"mood-funcs": [
|
||||
["L52", "uint64", true],
|
||||
["L53", "uint64", true]
|
||||
],
|
||||
"mood-funcs2": [["L47", "uint64", true]],
|
||||
"ocean": [["L137", "(pointer bucket-id)", 2]],
|
||||
"texture-anim-tables": [
|
||||
["L163", "uint64", true],
|
||||
["L152", "uint64", true],
|
||||
["L151", "uint64", true],
|
||||
["L150", "uint64", true]
|
||||
],
|
||||
"main": [["L564", "(pointer time-frame)", 2]],
|
||||
"net-mgr-muis": [
|
||||
["L83", "(pointer int32)", 32],
|
||||
["L82", "(pointer int32)", 32],
|
||||
["L81", "(pointer int32)", 32]
|
||||
],
|
||||
"nav-graph-editor": [
|
||||
["L480", "vector"],
|
||||
["L479", "vector"],
|
||||
["L478", "vector"],
|
||||
["L477", "vector"],
|
||||
["L476", "vector"],
|
||||
["L475", "vector"],
|
||||
["L474", "vector"],
|
||||
["L473", "vector"]
|
||||
],
|
||||
"nav-mesh-editor": [
|
||||
["L567", "uint64", true],
|
||||
["L511", "(inline-array triangulation-vert)", 256],
|
||||
["L510", "(inline-array triangulation-vert)", 256],
|
||||
["L562", "(pointer int32)", 1024],
|
||||
["L564", "uint64", true],
|
||||
["L563", "(inline-array vector)", 1024]
|
||||
],
|
||||
"lightning": [
|
||||
["L93", "uint64", true],
|
||||
["L93", "vector4w"]
|
||||
],
|
||||
"editable-player": [
|
||||
["L1515", "(inline-array vector4w)", 4],
|
||||
["L1551", "uint64", true]
|
||||
],
|
||||
"editable": [
|
||||
["L748", "rgba", true],
|
||||
["L749", "rgba", true],
|
||||
["L750", "rgba", true],
|
||||
["L751", "rgba", true],
|
||||
["L752", "rgba", true],
|
||||
["L753", "rgba", true],
|
||||
["L754", "rgba", true],
|
||||
["L755", "rgba", true],
|
||||
["L756", "rgba", true],
|
||||
["L757", "rgba", true],
|
||||
["L747", "uint64", true],
|
||||
["L705", "vector"]
|
||||
],
|
||||
"net-mgr-medius-rooms": [["L128", "(pointer uint8)", 128]],
|
||||
"net-mgr-playback": [["L59", "(inline-array vector4ub)", 128]],
|
||||
"net-mgr-sysmsg": [["L9", "(pointer int32)", 256]],
|
||||
"rigid-body-surface": [["L1", "(inline-array rigid-body-surface)", 8]],
|
||||
"vehicle-reticle": [
|
||||
["L343", "rgba", true],
|
||||
["L342", "rgba", true]
|
||||
],
|
||||
"wvehicle-states": [
|
||||
["L160", "vector"],
|
||||
["L159", "vector"]
|
||||
],
|
||||
"menumap-part": [["L197", "(pointer rgba)", 8]],
|
||||
"wvehicle-weapons-part": [["L142", "(pointer rgba)", 8]],
|
||||
"font": [["L474", "uint64", true]],
|
||||
"vehicle-net": [["L152", "(pointer int32)", 6]],
|
||||
"sky-tng": [
|
||||
["L134", "uint64", true],
|
||||
["L130", "uint64", true],
|
||||
["L133", "uint64", true],
|
||||
["L132", "uint64", true],
|
||||
["L131", "uint64", true],
|
||||
["L129", "vector"],
|
||||
["L128", "vector"],
|
||||
["L127", "vector"]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
[[65,"group-intro-car-explo-closeup"],[1,"group-rain-screend-drop-real"],[457,"group-sewer-spray"],[66,"group-outro-car-explo-closeup"],[393,"group-ship-fireworks"],[2,"group-stars"],[67,"group-intro-opening-debris-smoke"],[3,"group-sun"],[451,"group-temple-lava-firebelch"],[68,"group-intro-opening-debris-fire"],[387,"group-sewerwater-falls-splash"],[4,"group-green-sun"],[5,"group-moon"],[397,"group-kras-waterfall-casino-splash"],[6,"group-red-eco-strike-ground"],[7,"group-red-eco-spinkick"],[407,"group-docks-drainwater"],[8,"group-eco-blue"],[9,"group-eco-blue-collect"],[401,"group-kras-neon-sign-c"],[10,"group-part-vent-blue-active"],[11,"group-part-vent-blue-inactive"],[395,"group-pump-gas-leak"],[12,"group-eco-red"],[13,"group-eco-red-collect"],[405,"group-docks-sand-dump"],[14,"group-part-vent-red-active"],[15,"group-part-vent-red-inactive"],[415,"group-drome-bridge-night-glow-blinking"],[16,"group-part-vent-yellow-active"],[17,"group-part-vent-yellow-inactive"],[409,"group-docks-red-hangar-light"],[18,"group-eco-yellow"],[19,"group-eco-yellow-collect"],[403,"group-docks-drops-splash"],[20,"group-fuel-cell-starburst"],[21,"group-money-starburst"],[413,"group-drome-mist"],[22,"group-buzzer-effect"],[23,"group-blue-collect"],[487,"group-desert-dust-devil"],[24,"group-yellow-collect"],[25,"group-red-collect"],[26,"group-part-water-splash"],[27,"group-part-water-splash-small"],[411,"group-docks-rig-light-lamp"],[28,"group-blue-hit-ground-effect"],[29,"spartacus-group-glow-steady"],[485,"group-desert-hanging-fire"],[30,"spartacus-group-night-glow-steady"],[31,"spartacus-group-glow-blinking"],[431,"group-peak-blowing-snow-powder"],[32,"spartacus-group-night-glow-blinking"],[33,"spartacus-group-fire-tiny"],[425,"group-snow-icebreak-c"],[34,"spartacus-group-fire-small"],[35,"spartacus-group-fire-medium"],[419,"group-drome-waterfall-mist-medium-fall"],[36,"spartacus-group-fire-large"],[37,"spartacus-group-fire-huge"],[429,"group-snowball-moving"],[38,"spartacus-group-steam"],[39,"spartacus-group-chimney-smoke"],[439,"group-canyon-ocean-splash"],[40,"spartacus-group-chimney-double-smoke"],[41,"spartacus-group-water-splash"],[433,"group-peak-billowing-snow-curl-large"],[42,"group-vehicle-part-fire-trail-wheel"],[43,"group-vehicle-part-fire-trail-panels"],[427,"group-cliffs-fence-dust-small"],[44,"group-vehicle-part-fire-trail-bits"],[45,"group-vehicle-part-fire-trail-chasis"],[437,"group-canyon-leaf-fall"],[46,"group-vehicle-explosion"],[47,"group-vehicle-engine-start"],[447,"group-temple-lavasplash"],[48,"group-forcefield-burst"],[53,"group-jakx-fire"],[445,"group-temple-waterfalls-splash"],[54,"group-jakx-fire-thin"],[55,"group-jakx-huge-explosion"],[391,"group-firework3-burst"],[56,"group-intro-opening-missile-thrust"],[57,"group-intro-opening-missile-smoke"],[385,"group-haven-gen-light"],[58,"group-intro-opening-muzzle-flash"],[59,"group-intro-opening-bullet-sparks"],[443,"group-temple-lamp-light"],[60,"group-intro-opening-bullet-sparks-local"],[61,"group-intro-vehicle-tire-skid"],[389,"group-firework1-burst"],[62,"group-intro-vehicle-tire-skid-stop"],[63,"group-intro-vehicle-tire-skid-brake"],[463,"group-garage-steam"],[64,"group-outro-vehicle-tire-skid"],[69,"group-intro-opening-debris-fire-glow"],[461,"group-sewer-splash"],[70,"group-outro-crash-b-fire"],[71,"group-outro-b-rising-smoke"],[471,"group-garage-screen-small-btm"],[72,"group-outro-b-car-steam"],[73,"group-outro-b-dripping-gas"],[465,"group-garage-panellight-yellow"],[74,"group-outro-b-car-fire"],[75,"group-outro-b-final-explosion"],[459,"group-sewer-drip"],[76,"group-outro-crash-b-wheel"],[77,"group-intro-vehicle-roll-fire"],[469,"group-garage-screen-big"],[78,"group-intro-vehicle-roll-glow"],[79,"group-intro-debris-landing-dust"],[80,"group-intro-debris-landing-sparks"],[81,"group-intro-car-little-explo"],[473,"group-garage-smalltv-glow"],[82,"group-intro-barrel-dust"],[83,"group-intro-vehicle-tunnel-dust"],[467,"group-garage-panellight-purple"],[84,"group-intro-mine-tunnel-burning-car"],[85,"group-intro-mine-tunnel-burning-car-smoke"],[477,"group-desisle-ocean-splash"],[86,"group-intro-mine-tunnel-burning-car-glow"],[87,"group-intro-tunnel-mine-glow"],[88,"group-intro-mine-landing-sparks"],[89,"group-intro-mine-landing-dust"],[90,"group-intro-mine-tunnel-car-explosion"],[91,"group-intro-vehicle-tire-skid-smoke"],[475,"group-kcross-fence-dust"],[92,"group-intro-vehicle-tire-skid-smoke2"],[93,"group-intro-car-explosion-wall"],[94,"group-intro-railing-collision"],[95,"group-intro-car-splash-far"],[495,"group-desert-waterfall-mist-fall"],[96,"group-intro-car-water-splash"],[97,"group-intro-fishtank-bubbles"],[489,"group-desert-palace-fire-beacon"],[98,"group-rustyh-pouring-liquid"],[99,"group-rustyh-pouring-liquid2"],[100,"group-rustyh-splashing-liquid"],[101,"group-rustyh-splashing-liquid-fog"],[493,"group-stronghold-torchfire"],[102,"group-rustyh-flying-liquid"],[103,"group-rustyh-big-splashing-liquid"],[503,"group-fishtank-bubbles"],[104,"grouLine truncated
|
||||
@@ -99,7 +99,7 @@
|
||||
"spt-func-rocket": [[16, "vector"]],
|
||||
"(method 115 wcar-base)": [
|
||||
[16, "matrix"],
|
||||
[64, "collide-query"]
|
||||
[64, "wcar-added-stack-type1"]
|
||||
],
|
||||
"(method 41 nav-mesh)": [
|
||||
[16, "vector"],
|
||||
@@ -165,10 +165,7 @@
|
||||
[80, "vector"]
|
||||
],
|
||||
"update-mood-exterior": [[16, "vector"]],
|
||||
"(method 25 mem-buffer)": [
|
||||
[16, "quaternion"],
|
||||
[16, "quaternion"]
|
||||
],
|
||||
"(method 25 mem-buffer)": [[16, ["inline-array", "quaternion", 1]]],
|
||||
"joint-mod-joint-set*-world-handler": [[16, "matrix"]],
|
||||
"add-debug-box": [
|
||||
[16, "vector"],
|
||||
@@ -242,5 +239,617 @@
|
||||
[240, "vector"]
|
||||
],
|
||||
"(method 14 ragdoll)": [[144, "vector"]],
|
||||
"(method 10 ragdoll)": [[16, "vector"]]
|
||||
"(method 10 ragdoll)": [[16, "vector"]],
|
||||
"(code get-heap auto-save)": [
|
||||
[16, ["array", "int32", 2]],
|
||||
[32, ["array", "int32", 2]]
|
||||
],
|
||||
"(method 23 game-info)": [[16, ["array", "int16", 512]]],
|
||||
"vis-dist-additional-ok?": [[16, ["array", "int32", 1]]],
|
||||
"(method 30 path-control)": [
|
||||
[16, ["array", "float", 129]],
|
||||
[544, "vector"],
|
||||
[560, "vector"]
|
||||
],
|
||||
"(method 28 path-control)": [
|
||||
[80, "vector"],
|
||||
[16, "vector"],
|
||||
[32, "vector"],
|
||||
[48, "vector"],
|
||||
[64, "vector"]
|
||||
],
|
||||
"aux-voice-running": [
|
||||
[64, "medius-world-report"],
|
||||
[16, ["array", "int32", 2]]
|
||||
],
|
||||
"(method 21 load-state)": [
|
||||
[16, ["inline-array", "level-buffer-state", 18]],
|
||||
[592, ["inline-array", "level-buffer-state", 18]]
|
||||
],
|
||||
"(method 9 level-bounding-box)": [[16, ["inline-array", "vector", 2]]],
|
||||
"(method 46 process-drawable)": [
|
||||
[16, "collide-query"],
|
||||
[560, ["inline-array", "vector", 2]]
|
||||
],
|
||||
"(method 9 joint-control)": [[16, "vector"]],
|
||||
"(anon-function 1 intro-scenes2)": [[16, "vehicle-spawn-params"]],
|
||||
"(method 91 construction-object)": [[16, "vector"]],
|
||||
"slave-set-rotation!": [
|
||||
[96, "vector"],
|
||||
[112, "matrix"],
|
||||
[176, "vector"]
|
||||
],
|
||||
"(method 18 tracking-spline)": [[16, "tracking-spline-sampler"]],
|
||||
"master-track-target": [[16, "vector"]],
|
||||
"(method 10 end-credits-character-viewer)": [[16, "event-message-block"]],
|
||||
"(code running end-credits-character-viewer)": [
|
||||
[16, "event-message-block"],
|
||||
[96, ["array", "symbol", 18]],
|
||||
[176, "vehicle-spawn-params"]
|
||||
],
|
||||
"cam-helper-temp": [[16, ["inline-array", "vector", 3]]],
|
||||
"draw-grid": [
|
||||
[16, "vector"],
|
||||
[32, "vector"],
|
||||
[48, "vector"]
|
||||
],
|
||||
"(code cam-combiner-active)": [[16, "vector"]],
|
||||
"(method 36 spatial-hash)": [[16, ["inline-array", "vector", 2]]],
|
||||
"(method 17 sphere-hash)": [[16, "vector"]],
|
||||
"(method 33 sphere-hash)": [[16, "vector"]],
|
||||
"lightning-uniform-gen": [[16, "vector"]],
|
||||
"lightning-trail-uniform-gen": [[16, "vector"]],
|
||||
"lightning-trail-fractal-gen": [
|
||||
[16, "vector"],
|
||||
[32, "vector"],
|
||||
[48, "vector"],
|
||||
[64, "vector"]
|
||||
],
|
||||
"target-generic-event-handler": [[16, "event-message-block"]],
|
||||
"(method 12 nav-engine)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"debug-nav-validate-current-poly": [[16, "vector"]],
|
||||
"(method 15 nav-link-search-info)": [[32, "vector"]],
|
||||
"(method 14 nav-control)": [[16, "vector"]],
|
||||
"(method 18 nav-control)": [[16, "nav-control-cfs-work"]],
|
||||
"(method 19 nav-control)": [[16, "nav-control-cfs-work"]],
|
||||
"circle-tangent-directions": [[48, "vector"]],
|
||||
"(method 40 nav-state)": [
|
||||
[128, ["inline-array", "vector", 1]],
|
||||
[144, ["inline-array", "vector", 2]]
|
||||
],
|
||||
"(method 53 nav-state)": [
|
||||
[16, "vector"],
|
||||
[32, "nav-route-portal"],
|
||||
[80, ["inline-array", "vector", 3]],
|
||||
[192, "matrix"],
|
||||
[224, "nav-route-portal"]
|
||||
],
|
||||
"(method 9 nav-control)": [[16, "vector"]],
|
||||
"(method 16 debris-group)": [
|
||||
[64, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"debris-group-init-by-other": [[16, "vector"]],
|
||||
"merc-blend-shape": [[16, ["array", "int16", 128]]],
|
||||
"add-debug-flat-triangle-noclip": [[16, ["inline-array", "vector4w", 9]]],
|
||||
"(trans idle keyboard-control)": [[16, "symbol"]], // ?
|
||||
"update-stuff": [[16, "quaternion"]],
|
||||
"activate-bar": [[16, "vector"]],
|
||||
"(method 10 collide-mesh)": [[16, "oot-work"]],
|
||||
"camera-teleport-to-location": [[16, "matrix"]],
|
||||
"camera-teleport-to-entity": [[16, "matrix"]],
|
||||
"init-for-transform": [
|
||||
[16, "matrix"],
|
||||
[80, "matrix"],
|
||||
[192, "vector"]
|
||||
],
|
||||
"should-push-away-test-mesh": [[16, "oot-work"]],
|
||||
"(method 115 v-bear)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-bobcat)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-cheetah)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-drone)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-falcon)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"clmf-pos-rot": [[112, "matrix"]],
|
||||
"(method 9 actor-hash-buckets)": [
|
||||
[16, ["inline-array", "vector", 2]],
|
||||
[48, ["inline-array", "vector", 2]]
|
||||
],
|
||||
"(method 115 v-wombat)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-wolf)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-tiger)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-snake)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-possum)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-panther)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-mongoose)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-leopard)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-gila)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-daxtermobile)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"(method 115 v-cougar)": [
|
||||
[16, "quaternion"],
|
||||
[32, ["inline-array", "quaternion", 2]]
|
||||
],
|
||||
"cam-layout-entity-info": [[208, "vector"]],
|
||||
"(code cam-point-watch)": [[16, "vector"]],
|
||||
"cam-mouse-input": [[64, "vector"]],
|
||||
"add-a-bunch": [[16, "vector"]],
|
||||
"projectile-bounce-falling-post": [[16, "collide-query"]],
|
||||
"(method 69 projectile)": [[16, "collide-query"]],
|
||||
"projectile-update-velocity-add-gravity": [[16, "vector"]],
|
||||
"projectile-update-velocity-space-wars": [
|
||||
[16, "vector"],
|
||||
[64, "vector"]
|
||||
],
|
||||
"(method 71 construction-object)": [[80, "cquery-with-pad"]],
|
||||
"(method 18 ragdoll)": [[16, "collide-query"]],
|
||||
"(event idle can-leaves-floor)": [[16, ["inline-array", "matrix", 1]]],
|
||||
"(enter dropped ctf-flag)": [
|
||||
[16, "task-arrow-params"],
|
||||
[80, "vector"]
|
||||
],
|
||||
"flag-fall": [[560, "vector"]],
|
||||
"(exit carried ctf-flag)": [[16, "event-message-block"]],
|
||||
"(enter idle ctf-flag)": [[80, "vector"]],
|
||||
"(method 45 jungle-stone-snake-head)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"spawn-flame": [[16, "jungle-obs-stack-var0"]],
|
||||
"(post idle kras-fireworks-ship-a)": [[16, ["inline-array", "vector", 1]]],
|
||||
"(method 23 mysql-nav-graph)": [[16, ["inline-array", "vector", 5]]],
|
||||
"(post idle wm-fireworks-ship)": [[16, ["inline-array", "vector", 1]]],
|
||||
"(code explode peak-snowball)": [[32, "quaternion"]],
|
||||
"(method 71 peak-snowball)": [
|
||||
[16, "vector"],
|
||||
[32, ["inline-array", "collide-query", 1]]
|
||||
],
|
||||
"(method 10 visvol-edit-info)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 9 camera-facing-quad)": [[16, "camera-facing-quad-stackvar0"]],
|
||||
"(method 16 collide-cache)": [[16, "collide-puls-work"]],
|
||||
"test-closest-pt-in-triangle": [
|
||||
[16, "vector"],
|
||||
[32, "vector"],
|
||||
[48, "vector"]
|
||||
],
|
||||
"(method 14 collide-cache)": [[16, "bounding-box"]],
|
||||
"(method 20 collide-cache)": [[16, "matrix"]],
|
||||
"col-rend-draw": [[16, "matrix"]],
|
||||
"(method 63 collide-shape-moving)": [[48, "vector"]],
|
||||
"cshape-reaction-default": [[16, "vector"]],
|
||||
"(method 10 editable-plane)": [[16, ["inline-array", "vector", 4]]],
|
||||
"(method 13 editable-plane)": [[64, ["inline-array", "vector", 4]]],
|
||||
"(method 10 editable-face)": [[16, ["inline-array", "vector", 6]]],
|
||||
"(method 31 editable-face)": [
|
||||
[16, ["inline-array", "vector", 6]],
|
||||
[112, ["inline-array", "vector", 6]],
|
||||
[240, ["array", "editable-point", 6]],
|
||||
[304, "matrix"]
|
||||
],
|
||||
"(method 14 editable-face)": [
|
||||
[64, ["inline-array", "vector", 4]],
|
||||
[208, ["inline-array", "vector", 6]],
|
||||
[304, ["inline-array", "vector", 6]],
|
||||
[416, "vector"],
|
||||
[448, "vector"]
|
||||
],
|
||||
"(method 13 editable-face)": [[64, ["inline-array", "vector", 6]]],
|
||||
"(method 37 editable-face)": [[16, ["inline-array", "vector", 6]]],
|
||||
"(method 13 editable-array)": [
|
||||
[96, "vector"],
|
||||
[160, "vector"]
|
||||
],
|
||||
"cshape-reaction-update-state": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 70 wvehicle)": [[32, "update-engine-mix-state-work"]],
|
||||
"find-nearest-focusable": [[48, "vector"]],
|
||||
"(method 55 joint-exploder)": [[16, "bounding-box"]],
|
||||
"(method 53 ocean)": [[16, "vector"]],
|
||||
"(method 47 ocean)": [[16, "vector"]],
|
||||
"(method 40 ocean)": [[16, "vector"]],
|
||||
"(method 29 ocean)": [[16, "vector"]],
|
||||
"(method 30 ocean)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 54 ocean)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 55 ocean)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 56 ocean)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 57 ocean)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 13 ocean)": [[16, "vector"]],
|
||||
"update-camera": [[16, "camera-free-floating-move-info"]],
|
||||
"(method 92 construction-object)": [[16, "sprite-glow-data"]],
|
||||
"(code getting-universe-information net-mgr)": [
|
||||
[16, "medius-server-world-status-response"]
|
||||
],
|
||||
"camera-slave-debug": [
|
||||
[48, "matrix"],
|
||||
[144, "vector"]
|
||||
],
|
||||
"cam-layout-save-interesting": [[16, "vector"]],
|
||||
"cam-layout-save-align": [[16, "vector"]],
|
||||
"cam-layout-save-pivot": [[16, "vector"]],
|
||||
"cam-layout-entity-volume-info-create": [
|
||||
[32, "vector"],
|
||||
[48, "vector"],
|
||||
[64, "vector"],
|
||||
[80, "vector"],
|
||||
[96, "vector"],
|
||||
[128, "vector"],
|
||||
[144, "vector"]
|
||||
],
|
||||
"(method 59 nav-graph-editor)": [[16, "nav-poly"]],
|
||||
"(method 32 nav-graph-editor)": [[16, ["inline-array", "vector", 4]]],
|
||||
"(method 33 nav-graph-editor)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 30 nav-graph-editor)": [
|
||||
[32, "vector"],
|
||||
[48, ["inline-array", "vector", 2]],
|
||||
[112, "vector"],
|
||||
[128, "vector"],
|
||||
[144, "vector"]
|
||||
],
|
||||
"(method 36 nav-graph-editor)": [[16, ["inline-array", "vector", 4]]],
|
||||
"(method 38 nav-graph-editor)": [
|
||||
[80, "vector"],
|
||||
[656, "nav-poly"],
|
||||
[880, ["inline-array", "vector", 4]]
|
||||
],
|
||||
"(method 50 nav-graph-editor)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 48 nav-graph-editor)": [
|
||||
[48, "vector"],
|
||||
[96, "vector"],
|
||||
[128, "vector"]
|
||||
],
|
||||
"(method 14 nav-mesh-editable)": [
|
||||
[16, ["inline-array", "vector", 4]],
|
||||
[80, ["inline-array", "vector", 4]]
|
||||
],
|
||||
"(method 34 nav-graph-editor)": [
|
||||
[16, "vector"],
|
||||
[48, ["inline-array", "vector", 2]]
|
||||
],
|
||||
"(post draw-closest-minimap nav-graph-editor)": [
|
||||
[64, ["inline-array", "vector", 4]]
|
||||
],
|
||||
"update-height": [[16, "vector"]],
|
||||
"snap-level-navmesh": [
|
||||
[16, "vector"],
|
||||
[64, "vector"]
|
||||
],
|
||||
"(method 12 nav-mesh-editable)": [[32, "vector"]],
|
||||
"(method 15 nav-mesh-editable)": [[16, "vector"]],
|
||||
"(method 16 nav-mesh-editable)": [
|
||||
[16, "vector"],
|
||||
[48, "vector"]
|
||||
],
|
||||
"(method 10 nav-mesh-poly)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"],
|
||||
[48, "vector"],
|
||||
[64, "vector"],
|
||||
[80, "vector"],
|
||||
[96, "vector"],
|
||||
[112, "vector"],
|
||||
[128, "vector"]
|
||||
],
|
||||
"(method 52 nav-mesh-editor)": [[80, "vector"]],
|
||||
"(trans idle nav-mesh-editor)": [[16, "event-message-block"]],
|
||||
"(method 25 grid-hash)": [
|
||||
[16, "grid-hash-box"],
|
||||
[32, "grid-hash-box"],
|
||||
[48, "vector"],
|
||||
[64, "vector"]
|
||||
],
|
||||
"(method 26 grid-hash)": [[16, "vector"]],
|
||||
"(method 11 grid-hash)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 13 grid-hash)": [[16, "sphere"]],
|
||||
"(method 22 editable)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 14 editable-point)": [
|
||||
[32, "vector"],
|
||||
[48, "vector"],
|
||||
[80, ["inline-array", "vector", 4]]
|
||||
],
|
||||
"execute-mouse-move": [
|
||||
[16, "vector"],
|
||||
[32, "vector"],
|
||||
[48, "vector"],
|
||||
[64, "vector"],
|
||||
[80, "vector"],
|
||||
[112, "vector"]
|
||||
],
|
||||
"insert-wall": [[32, ["array", "int32", 2]]],
|
||||
"insert-box": [[32, ["array", "int32", 8]]],
|
||||
"(method 21 editable-entity)": [[80, "vector"]],
|
||||
"(method 51 editable-player)": [[16, "vector"]],
|
||||
"update-manipulator-position": [[16, "vector"]],
|
||||
"(code playing-playback-game net-mgr)": [
|
||||
[16, "event-message-block"],
|
||||
[96, "mem-buffer"]
|
||||
],
|
||||
"texture-anim-layer-draw": [
|
||||
[16, "matrix"],
|
||||
[80, "matrix"],
|
||||
[144, "matrix"],
|
||||
[208, "matrix"]
|
||||
],
|
||||
"handle-sys-msg": [[96, "medius-chat-fwd-message"]],
|
||||
"real-fog-texture-anim-func": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 220 wvehicle)": [
|
||||
[16, "vector"],
|
||||
[32, ["inline-array", "vector", 3]]
|
||||
],
|
||||
"wv-player-post-move-update": [[16, "event-message-block"]],
|
||||
"(method 133 wvehicle)": [[16, "vector"]],
|
||||
"(method 87 vehicle-wheel)": [[16, "rigid-body-move-work"]],
|
||||
"(method 68 wvehicle)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 229 wvehicle)": [[16, "matrix"]],
|
||||
"player-wait-control-hook": [[16, "vehicle-controls"]],
|
||||
"(enter explode wvehicle)": [
|
||||
[16, "event-message-block"],
|
||||
[96, ["inline-array", "vector", 2]]
|
||||
],
|
||||
"(post explode wvehicle)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(enter explode-into-nothing wvehicle)": [[16, "explosion-init-params"]],
|
||||
"(method 235 wvehicle)": [[32, ["inline-array", "vector", 3]]],
|
||||
"(method 234 wvehicle)": [
|
||||
[32, ["inline-array", "vector", 3]],
|
||||
[80, "vector"],
|
||||
[96, "vector4s-3"]
|
||||
],
|
||||
"spt-func-birth-on-height-die-drip-sewer": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"spt-func-birth-on-die4": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"spt-func-birth-on-die3": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"spt-func-birth-on-die2": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"spt-func-birth-on-die1": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"spt-func-birth-on-height-die-drops": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"part-jungle-bird10-path": [
|
||||
[80, "vector"],
|
||||
[96, "vector"]
|
||||
],
|
||||
"part-jungle-bird9-path": [[80, "vector"]],
|
||||
"spt-func-birth-on-pop": [[16, "vector"]],
|
||||
"spt-func-birth-on-height-die": [[16, "vector"]],
|
||||
"spt-func-birth-on-height-die-drip": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 16 nav-link-search-info)": [
|
||||
[16, "vector"],
|
||||
[48, "vector"]
|
||||
],
|
||||
"(method 41 nav-control)": [
|
||||
[16, "vector"],
|
||||
[48, ["inline-array", "vector", 2]]
|
||||
],
|
||||
"(method 11 nav-control)": [[16, "nav-poly"]],
|
||||
"(method 51 nav-state)": [[16, "nav-ray"]],
|
||||
"(method 54 nav-state)": [[112, "nav-ray"]],
|
||||
"(method 11 nav-state)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 24 nav-state)": [[16, ["inline-array", "vector", 2]]],
|
||||
"(method 28 nav-state)": [[208, "vector"]],
|
||||
"(method 34 nav-state)": [[16, ["inline-array", "vector", 2]]],
|
||||
"(method 31 nav-state)": [[112, "nav-ray"]],
|
||||
"(method 32 nav-state)": [[16, "nav-control-cfs-work"]],
|
||||
"(method 37 nav-state)": [[16, ["inline-array", "vector", 2]]],
|
||||
"(anon-function 9 nav-control)": [[16, ["inline-array", "vector", 2]]],
|
||||
"(anon-function 4 nav-control)": [[16, ["inline-array", "vector", 2]]],
|
||||
"(method 19 nav-mesh)": [[16, "nav-ray"]],
|
||||
"(method 21 nav-control)": [[16, "nav-ray"]],
|
||||
"(post idle peak-snowball)": [
|
||||
[48, "peak-obs-stackvar0"],
|
||||
[128, ["inline-array", "vector", 3]]
|
||||
],
|
||||
"(method 17 peak-snowball)": [[48, "peak-obs-stackvar0"]],
|
||||
"(method 71 coli-atlas-globe)": [
|
||||
[16, ["inline-array", "collide-query", 1]],
|
||||
[560, ["inline-array", "vector", 3]]
|
||||
],
|
||||
"(method 82 coli-atlas-globe)": [
|
||||
[16, "rigid-body-impact"],
|
||||
[96, "vector"]
|
||||
],
|
||||
"(method 80 coli-atlas-globe)": [[32, "peak-obs-stackvar0"]],
|
||||
"(method 45 kras-pump-break)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"(method 52 palm-tree)": [
|
||||
[16, "vector"],
|
||||
[32, "desarena-obs-stackvar0"]
|
||||
],
|
||||
"(method 55 palm-tree)": [[16, "vector"]],
|
||||
"(event vibrate palm-tree)": [[16, "vector"]],
|
||||
"(event idle palm-tree)": [[16, "vector"]],
|
||||
"part-menumap-bird1-path": [[80, "vector"]],
|
||||
"part-menumap-bird2-path": [[80, "vector"]],
|
||||
"part-menumap-bird3-path": [[80, "vector"]],
|
||||
"part-menumap-bird4-path": [[80, "vector"]],
|
||||
"part-menumap-bird5-path": [[80, "vector"]],
|
||||
"part-menumap-bird6-path": [[80, "vector"]],
|
||||
"part-menumap-bird7-path": [[80, "vector"]],
|
||||
"part-menumap-bird8-path": [[80, "vector"]],
|
||||
"part-menumap-bird9-path": [[80, "vector"]],
|
||||
"part-menumap-bird10-path": [[80, "vector"]],
|
||||
"spt-func-menumap-rocket": [[16, "vector"]],
|
||||
"spt-func-menumap-birth-on-die4": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"spt-func-menumap-birth-on-die3": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"spt-func-menumap-birth-on-die2": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"spt-func-menumap-birth-on-die1": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
],
|
||||
"birth-func-vws-adopt-velocity": [[16, "vector"]],
|
||||
"check-scorp-shell-level1": [[16, "vector"]],
|
||||
"check-scorp-shell-level2": [[16, "vector"]],
|
||||
"update-engine-mix-state": [[32, "vehicle-wheel-init-params"]],
|
||||
"(method 52 garage-turntable)": [
|
||||
[32, "vector"],
|
||||
[48, "vector"],
|
||||
[64, "vector"],
|
||||
[80, ["inline-array", "vector", 18]]
|
||||
],
|
||||
"(enter explode kras-pump-break-proxy)": [[16, "event-message-block"]],
|
||||
"(method 249 wvehicle)": [[16, "race-line-query-info"]],
|
||||
"(method 65 vehicle-debris)": [[16, "vehicle-hardpoint-info"]],
|
||||
"(method 87 vehicle-debris)": [[16, ["inline-array", "collide-query", 1]]],
|
||||
"(method 185 vehicle)": [[16, "vector"]],
|
||||
"(method 136 vehicle)": [[16, ["inline-array", "vector", 2]]],
|
||||
"test-vehicle-weapon": [[16, "event-message-block"]],
|
||||
"sound-name->string": [[16, ["array", "uint8", 16]]],
|
||||
"string->sound-name": [[16, ["array", "sound-name", 1]]],
|
||||
"vehicle-draw-thruster": [[16, "vehicle-thruster-work"]],
|
||||
"(method 45 collide-shape)": [[16, "do-push-aways-work"]],
|
||||
"(method 50 collide-shape)": [
|
||||
[32, "vector"],
|
||||
[48, "vector"]
|
||||
],
|
||||
"(method 18 collide-shape-prim-mesh)": [[16, "collide-tri-result"]],
|
||||
"(method 18 collide-shape-prim-sphere)": [
|
||||
[48, ["inline-array", "vector", 6]]
|
||||
],
|
||||
"(method 65 collide-shape-moving)": [[576, ["inline-array", "vector", 2]]],
|
||||
"(anon-function 5 gsound)": [
|
||||
[16, ["array", "symbol", 4]],
|
||||
[32, ["array", "symbol", 4]]
|
||||
],
|
||||
"doppler-pitch-shift": [[16, ["inline-array", "vector", 2]]],
|
||||
"(method 113 vehicle)": [[16, "vehicle-stack-type3"]],
|
||||
"(code target-intro)": [[16, "vector"]],
|
||||
"particle-adgif-callback": [[16, ["inline-array", "vector", 4]]],
|
||||
"sp-adjust-launch": [[16, "matrix"]],
|
||||
"sp-launch-particles-death": [[16, "matrix"]],
|
||||
"sp-relaunch-setup-fields": [[16, "matrix"]],
|
||||
"sparticle-rotate-to-vel-3d": [[16, "vector"]],
|
||||
"sparticle-respawn-heights": [[16, "vector"]],
|
||||
"sparticle-respawn-timer": [[16, "vector"]],
|
||||
"sparticle-3d-rotate-xz-to-camera": [[16, "vector"]],
|
||||
"spt-func-relative-pos": [
|
||||
[16, "vector"],
|
||||
[32, "vector"],
|
||||
[48, "vector"],
|
||||
[64, "matrix"],
|
||||
[128, "matrix"],
|
||||
[192, "matrix"]
|
||||
],
|
||||
"spt-func-turn-to-vel-radial": [[16, "vector"]],
|
||||
"(method 54 collectoid-draw)": [[16, ["inline-array", "vector", 2]]],
|
||||
"drop-collectoids": [[16, "net-powerup-spawn-params"]],
|
||||
"(method 15 sparticle-launch-control)": [[16, "sphere"]],
|
||||
"execute-part-engine": [[112, "matrix"]],
|
||||
"(method 17 collide-shape-prim-mesh)": [[16, "collide-tri-result"]],
|
||||
"update-time-of-day": [[16, "vector"]]
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
[[2147418112,{"idx":0,"name":"placeholder-white","tpage_name":"placeholder"}],[261029888,{"idx":0,"name":"snob-dirt-ground-01","tpage_name":"snobowlx-vis-alpha"}],[260898816,{"idx":0,"name":"kcro-ground-layover-a","tpage_name":"kcross-vis-alpha"}],[260702209,{"idx":1,"name":"snow-ground-overlay-01","tpage_name":"snowx-vis-alpha"}],[260702208,{"idx":0,"name":"snow-ground-overlay-02","tpage_name":"snowx-vis-alpha"}],[260571136,{"idx":0,"name":"peak-ground-snow-overlay-01","tpage_name":"peakb-vis-alpha"}],[260440064,{"idx":0,"name":"ice-snowoverlay-01","tpage_name":"icec-vis-alpha"}],[259981321,{"idx":9,"name":"pecker-yellowfur","tpage_name":"peccred-pris2"}],[259981320,{"idx":8,"name":"pecker-wingtop","tpage_name":"peccred-pris2"}],[259981319,{"idx":7,"name":"pecker-wingbottom","tpage_name":"peccred-pris2"}],[259981318,{"idx":6,"name":"pecker-teeth","tpage_name":"peccred-pris2"}],[259981317,{"idx":5,"name":"pecker-tail","tpage_name":"peccred-pris2"}],[259981316,{"idx":4,"name":"pecker-plume","tpage_name":"peccred-pris2"}],[259981314,{"idx":2,"name":"pecker-eyelid","tpage_name":"peccred-pris2"}],[259784705,{"idx":1,"name":"charHOLD","tpage_name":"thbcred-pris2"}],[259784704,{"idx":0,"name":"bam-eyelight","tpage_name":"thbcred-pris2"}],[259653673,{"idx":41,"name":"bam-eyelight","tpage_name":"ashcred-pris2"}],[259653672,{"idx":40,"name":"ashelin-whitestrap","tpage_name":"ashcred-pris2"}],[259653670,{"idx":38,"name":"ashelin-shortsleg","tpage_name":"ashcred-pris2"}],[259653669,{"idx":37,"name":"ashelin-shortscuff","tpage_name":"ashcred-pris2"}],[259653668,{"idx":36,"name":"ashelin-shortsback","tpage_name":"ashcred-pris2"}],[259653663,{"idx":31,"name":"ashelin-lowerlegging","tpage_name":"ashcred-pris2"}],[259653662,{"idx":30,"name":"ashelin-jacketrt","tpage_name":"ashcred-pris2"}],[259653661,{"idx":29,"name":"ashelin-jacketbody","tpage_name":"ashcred-pris2"}],[259653660,{"idx":28,"name":"ashelin-jacketbelt-end","tpage_name":"ashcred-pris2"}],[259653659,{"idx":27,"name":"ashelin-jacketbelt","tpage_name":"ashcred-pris2"}],[259653658,{"idx":26,"name":"ashelin-jacketback","tpage_name":"ashcred-pris2"}],[259653649,{"idx":17,"name":"ashelin-gunbarrel-01","tpage_name":"ashcred-pris2"}],[259653648,{"idx":16,"name":"ashelin-goggle","tpage_name":"ashcred-pris2"}],[259653647,{"idx":15,"name":"ashelin-glove","tpage_name":"ashcred-pris2"}],[259653646,{"idx":14,"name":"ashelin-face","tpage_name":"ashcred-pris2"}],[259653645,{"idx":13,"name":"ashelin-eyelid","tpage_name":"ashcred-pris2"}],[259653644,{"idx":12,"name":"ashelin-eyebrow","tpage_name":"ashcred-pris2"}],[259653643,{"idx":11,"name":"ashelin-eye","tpage_name":"ashcred-pris2"}],[259653642,{"idx":10,"name":"ashelin-collar","tpage_name":"ashcred-pris2"}],[259653641,{"idx":9,"name":"ashelin-chest","tpage_name":"ashcred-pris2"}],[259653640,{"idx":8,"name":"ashelin-buckle","tpage_name":"ashcred-pris2"}],[259653639,{"idx":7,"name":"ashelin-brownstrap","tpage_name":"ashcred-pris2"}],[259653638,{"idx":6,"name":"ashelin-bra","tpage_name":"ashcred-pris2"}],[259653637,{"idx":5,"name":"ashelin-boottop","tpage_name":"ashcred-pris2"}],[259653633,{"idx":1,"name":"ashelin-beltbuckle","tpage_name":"ashcred-pris2"}],[259457042,{"idx":18,"name":"daxterlense","tpage_name":"daxcred-pris2"}],[259457040,{"idx":16,"name":"daxterheadwidenew","tpage_name":"daxcred-pris2"}],[259457039,{"idx":15,"name":"daxtergoggles","tpage_name":"daxcred-pris2"}],[259457038,{"idx":14,"name":"daxterfoot-bottom","tpage_name":"daxcred-pris2"}],[259457037,{"idx":13,"name":"daxterfoot","tpage_name":"daxcred-pris2"}],[259457036,{"idx":12,"name":"daxterfinger","tpage_name":"daxcred-pris2"}],[259457035,{"idx":11,"name":"daxterear","tpage_name":"daxcred-pris2"}],[259457034,{"idx":10,"name":"daxterbolt","tpage_name":"daxcred-pris2"}],[259457033,{"idx":9,"name":"daxterbodyshort-eix","tpage_name":"daxcred-pris2"}],[259457032,{"idx":8,"name":"daxterarm","tpage_name":"daxcred-pris2"}],[259457031,{"idx":7,"name":"daxter-pants","tpage_name":"daxcred-pris2"}],[259457030,{"idx":6,"name":"daxter-orange","tpage_name":"daxcred-pris2"}],[259457029,{"idx":5,"name":"daxter-furhilite","tpage_name":"daxcred-pris2"}],[259457028,{"idx":4,"name":"daxter-eyelid","tpage_name":"daxcred-pris2"}],[259457027,{"idx":3,"name":"daxter-belt-02","tpage_name":"daxcred-pris2"}],[259457026,{"idx":2,"name":"daxter-belt-01","tpage_name":"daxcred-pris2"}],[259457025,{"idx":1,"name":"bam-hairhilite","tpage_name":"daxcred-pris2"}],[259457024,{"idx":0,"name":"bam-eyelight","tpage_name":"daxcred-pris2"}],[259391510,{"idx":22,"name":"gt-blitz-zipper-01","tpage_name":"gtbcred-pris2"}],[259391504,{"idx":16,"name":"gt-blitz-jacketsleeve","tpage_name":"gtbcred-pris2"}],[259391503,{"idx":15,"name":"gt-blitz-jacketdetails","tpage_name":"gtbcred-pris2"}],[259391502,{"idx":14,"name":"gt-blitz-jacketbody","tpage_name":"gtbcred-pris2"}],[259391501,{"idx":13,"name":"gt-blitz-handpalm","tpage_name":"gtbcred-pris2"}],[259391497,{"idx":9,"name":"gt-blitz-facenew","tpage_name"Line truncated
|
||||
[[197918735,{"idx":15,"name":"drome-concrete-01","tpage_name":"dromec-vis-tfrag"}],[176816166,{"idx":38,"name":"temple-a-sndstn-dtl03","tpage_name":"templex-vis-tfrag"}],[198770738,{"idx":50,"name":"atoll-sand-patch","tpage_name":"atollx-vis-tfrag"}],[257949719,{"idx":23,"name":"thug-a-maskb-leather-02","tpage_name":"thacred-pris2"}],[261029888,{"idx":0,"name":"snob-dirt-ground-01","tpage_name":"snobowlx-vis-alpha"}],[152174599,{"idx":7,"name":"time-freeze-circle-purple","tpage_name":"sprgstbx-pris"}],[227016705,{"idx":1,"name":"time-freeze-cage-cap","tpage_name":"peaktbox-pris"}],[242810881,{"idx":1,"name":"hud-rank-taryn-02","tpage_name":"tarlev-minimap"}],[172949579,{"idx":75,"name":"ice-snow-drift-01","tpage_name":"iceb-vis-tfrag"}],[111214641,{"idx":49,"name":"city-sideframe-plain","tpage_name":"havenx-vis-tfrag"}],[63111168,{"idx":0,"name":"city-slum-wire","tpage_name":"havena-vis-shrub"}],[186580996,{"idx":4,"name":"time-freeze-circle-purple","tpage_name":"cnsptbox-pris"}],[259457032,{"idx":8,"name":"daxterarm","tpage_name":"daxcred-pris2"}],[2147418112,{"idx":0,"name":"placeholder-white","tpage_name":"placeholder"}],[254148641,{"idx":33,"name":"kras-sign-b-neon-22","tpage_name":"dockkras-alpha"}],[169476150,{"idx":54,"name":"docks-blue-paint-04","tpage_name":"docksb-vis-tfrag"}],[194248727,{"idx":23,"name":"peak-precursor-bot-stuff-01","tpage_name":"icetourw-tfrag"}],[201195533,{"idx":13,"name":"haven-train-turbine-side","tpage_name":"dromdocx-vis-pris"}],[118358033,{"idx":17,"name":"kcro-metal-pipe-02","tpage_name":"kcross-vis-shrub"}],[148111378,{"idx":18,"name":"des-red-rock-01","tpage_name":"canyond-vis-tfrag"}],[111214705,{"idx":113,"name":"city-dirtywood","tpage_name":"havenx-vis-tfrag"}],[179896397,{"idx":77,"name":"peak-precursor-bot-01","tpage_name":"icebergx-vis-tfrag"}],[720925,{"idx":29,"name":"loadsave-screen","tpage_name":"level-default-shrub"}],[259653661,{"idx":29,"name":"ashelin-jacketbody","tpage_name":"ashcred-pris2"}],[173408268,{"idx":12,"name":"train-hanger-arrow-dest","tpage_name":"dockss-water"}],[167968769,{"idx":1,"name":"this-way-arrow-02","tpage_name":"jungles-water"}],[254935079,{"idx":39,"name":"jakx-jacketstraps-01","tpage_name":"jakcred-pris2"}],[155123728,{"idx":16,"name":"sewer-plate-03","tpage_name":"sewerf-vis-tfrag"}],[177799179,{"idx":11,"name":"peak-snow-treesnow","tpage_name":"peakd-vis-tfrag"}],[161546254,{"idx":14,"name":"jungle-bird-15","tpage_name":"havtours-sprite"}],[175570965,{"idx":21,"name":"temple-a-sndstn-trm06","tpage_name":"templeb-vis-tfrag"}],[86114313,{"idx":9,"name":"m-raptor-thigh","tpage_name":"deshunt2-pris"}],[260898816,{"idx":0,"name":"kcro-ground-layover-a","tpage_name":"kcross-vis-alpha"}],[42467354,{"idx":26,"name":"jungle-bark-green","tpage_name":"jungled-vis-tfrag"}],[25559065,{"idx":25,"name":"kras-metal-09","tpage_name":"krasx-vis-tfrag"}],[159776769,{"idx":1,"name":"artifact-blue-glow-01","tpage_name":"kcrosart-tfrag"}],[115605594,{"idx":90,"name":"city-inda-wallbase","tpage_name":"haveny-vis-tfrag"}],[108462081,{"idx":1,"name":"desa-stillwater","tpage_name":"desarenx-vis-water"}],[257949733,{"idx":37,"name":"thug-a-teeth","tpage_name":"thacred-pris2"}],[169214028,{"idx":76,"name":"docks-a-dup-sfalt-03","tpage_name":"docksa-vis-tfrag"}],[179044438,{"idx":86,"name":"peak-fm-rocktosnow-02","tpage_name":"peakx-vis-tfrag"}],[191102987,{"idx":11,"name":"world-map-tracks-02","tpage_name":"menumap-pris"}],[201195521,{"idx":1,"name":"haven-train-brown-bar","tpage_name":"dromdocx-vis-pris"}],[160038971,{"idx":59,"name":"can-cart","tpage_name":"canyonx-vis-tfrag"}],[41943088,{"idx":48,"name":"jungle-stone-block-tunnel-02","tpage_name":"junglee-vis-tfrag"}],[223215619,{"idx":3,"name":"this-way-scan","tpage_name":"temples-water"}],[118030402,{"idx":66,"name":"grg-wall-05","tpage_name":"garageb-tfrag"}],[128450699,{"idx":139,"name":"cty-fence","tpage_name":"havsewy-vis-tfrag"}],[260702209,{"idx":1,"name":"snow-ground-overlay-01","tpage_name":"snowx-vis-alpha"}],[191103010,{"idx":34,"name":"worldmap-kcro-metal-plate-01","tpage_name":"menumap-pris"}],[25559058,{"idx":18,"name":"kras-temp-neon-blue","tpage_name":"krasx-vis-tfrag"}],[142868487,{"idx":7,"name":"iscreen-metal-pipe-04","tpage_name":"garage-pris"}],[180617217,{"idx":1,"name":"artifact-blue-glow-01","tpage_name":"disleart-tfrag"}],[147390466,{"idx":2,"name":"spar-stone-top","tpage_name":"sparguse-vis-tfrag"}],[130482205,{"idx":29,"name":"sew-metal-33","tpage_name":"sewerx-vis-tfrag"}],[199229446,{"idx":6,"name":"atoll-ribbed","tpage_name":"atoll-vis-shrub"}],[260702208,{"idx":0,"name":"snow-ground-overlay-02","tpage_name":"snowx-vis-alpha"}],[50921549,{"idx":77,"name":"wstlander-02-shirt","tpage_name":"rustyh-pris"}],[201195530,{"idx":10,"name":"haven-train-orange-trim","tpage_name":"dromdocx-vis-pris"}],[178192476,{"idx":92,"name":"ice-rock-wall-01","tpage_name":"icex-vis-tfrag"}],[194248704,{"idx":0,"name":"peak-precursor-siding-02","tpage_name":"icetourw-tfrag"}],[104923198,{"idx":Line truncated
|
||||
File diff suppressed because it is too large.
Load diff
@@ -515,5 +515,49 @@
|
||||
},
|
||||
"vector-rad<-vector-deg/2!": {
|
||||
"args": ["out", "in"]
|
||||
},
|
||||
"(method 23 setting-control)": {
|
||||
"vars": {
|
||||
"s5-0": "user-cur",
|
||||
"s4-0": "user-targ"
|
||||
}
|
||||
},
|
||||
"(top-level-login settings)": {
|
||||
"vars": {
|
||||
"gp-0": "user-def",
|
||||
"s5-0": "user-cur"
|
||||
}
|
||||
},
|
||||
"(method 0 ambient-sound)": {
|
||||
"vars": {
|
||||
"sv-32": ["name", "sound-name"]
|
||||
}
|
||||
},
|
||||
"(method 18 load-state)": {
|
||||
"vars": {
|
||||
"s4-0": "script-ctxt"
|
||||
}
|
||||
},
|
||||
"(method 15 level-group)": {
|
||||
"vars": {
|
||||
"v0-8": ["v0-8", "(inline-array vector)"]
|
||||
}
|
||||
},
|
||||
"(method 10 cam-setting-data)": {
|
||||
"vars": {
|
||||
"a0-6": ["a0-6", "handle"],
|
||||
"a0-128": ["a0-128", "handle"],
|
||||
"a0-132": ["a0-132", "handle"]
|
||||
}
|
||||
},
|
||||
"(method 10 user-setting-data)": {
|
||||
"vars": {
|
||||
"v1-57": ["v1-57", "handle"]
|
||||
}
|
||||
},
|
||||
"(method 17 gui-control)": {
|
||||
"vars": {
|
||||
"v0-0": ["v0-0", "gui-status"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -215,6 +215,16 @@ std::string remove_trailing_spaces(const std::string& in) {
|
||||
}
|
||||
return short_name;
|
||||
}
|
||||
// List of characters that cannot occur in filenames on some platforms.
|
||||
const std::set<char> banned_chars = {'<', '>', ':', '"', '/', '\\', '|', '?', '*', '^'};
|
||||
std::string sanitize_name(const std::string& in) {
|
||||
auto copy = remove_trailing_spaces(in);
|
||||
for (auto& ch : copy) {
|
||||
if (banned_chars.contains(ch))
|
||||
ch = '_';
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
struct AudioFileInfo {
|
||||
std::string filename;
|
||||
@@ -346,7 +356,6 @@ void process_music(const fs::path& output_path, const fs::path& input_dir) {
|
||||
if (mus_name == "TWEAKVAL")
|
||||
continue;
|
||||
|
||||
std::vector<std::string> sfx_names;
|
||||
const size_t bank_offset = find_bank_offset(data); // Find where the music bank starts
|
||||
if (bank_offset == SIZE_MAX) {
|
||||
lg::error("'{}' is not a valid .MUS bank.", mus_name);
|
||||
@@ -443,7 +452,7 @@ void process_sfx(const fs::path& output_path, const fs::path& input_dir) {
|
||||
else
|
||||
name = "sound" + std::to_string(sound_index);
|
||||
|
||||
auto file_name = fmt::format("{}.wav", remove_trailing_spaces(name));
|
||||
auto file_name = fmt::format("{}.wav", sanitize_name(name));
|
||||
write_wave_file(left_samples, right_samples, snd::SAMPLE_RATE, output_folder / file_name);
|
||||
audio_len += left_samples.size() / (float)snd::SAMPLE_RATE;
|
||||
|
||||
|
||||
@@ -161,6 +161,11 @@ int run_decompilation_process(decompiler::Config config,
|
||||
db.dts.jg_info = config.jg_info_dump;
|
||||
}
|
||||
} else {
|
||||
if (config.dump_art_group_info || config.dump_joint_geo_info) {
|
||||
lg::error(
|
||||
"`dump_art_group_info` or `dump_joint_geo_info` enabled WITHOUT enabling "
|
||||
"`process_art_groups`");
|
||||
}
|
||||
lg::error("`process_art_groups` was false and no art-group-info dump was provided!");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1132,6 +1132,15 @@ void types2_for_add(types2::Type& type_out,
|
||||
return;
|
||||
}
|
||||
|
||||
// propagate integer math: a * C1 + b * C2 + C3
|
||||
if (arg1_type.is_integer_constant() && arg0_type.kind == TP_Type::Kind::PRODUCT_SUM) {
|
||||
const auto& [mult, mult2] = arg0_type.get_product_sum_multipliers();
|
||||
type_out.type = TP_Type::make_from_product_sum(
|
||||
mult, mult2, arg0_type.typespec(),
|
||||
arg0_type.get_sum_constant() + arg1_type.get_integer_constant());
|
||||
return;
|
||||
}
|
||||
|
||||
// propagate integer math: a + C1
|
||||
if (arg1_type.is_integer_constant() && is_int_or_uint(dts, arg0_type)) {
|
||||
TypeSpec sum_type = arg0_type.typespec();
|
||||
@@ -1202,6 +1211,35 @@ void types2_for_add(types2::Type& type_out,
|
||||
}
|
||||
}
|
||||
|
||||
// a * C1 + b * C2 (+ C3), possibly the two indices of a 2d array access.
|
||||
{
|
||||
auto as_product = [&](const TP_Type& t, int64_t* mult, int64_t* constant) {
|
||||
if (t.is_product()) {
|
||||
*mult = t.get_multiplier();
|
||||
*constant = 0;
|
||||
return true;
|
||||
}
|
||||
if (t.kind == TP_Type::Kind::INTEGER_CONSTANT_PLUS_VAR_MULT) {
|
||||
*mult = t.get_mult_int_constant();
|
||||
*constant = t.get_add_int_constant();
|
||||
return true;
|
||||
}
|
||||
if (t.kind == TP_Type::Kind::TYPESPEC && is_int_or_uint(dts, t)) {
|
||||
*mult = 1;
|
||||
*constant = 0;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
int64_t mult0, mult1, constant0, constant1;
|
||||
if (as_product(arg0_type, &mult0, &constant0) && as_product(arg1_type, &mult1, &constant1) &&
|
||||
mult0 != mult1) {
|
||||
type_out.type =
|
||||
TP_Type::make_from_product_sum(mult0, mult1, arg0_type.typespec(), constant0 + constant1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (common_int2_case(type_out, dts, arg0_type, arg1_type)) {
|
||||
return;
|
||||
}
|
||||
@@ -1218,11 +1256,14 @@ void types2_for_add(types2::Type& type_out,
|
||||
if (out.success) {
|
||||
if (out.results.size() == 1) {
|
||||
type_out.type = TP_Type::make_from_ts(coerce_to_reg_type(out.results.front().result_type));
|
||||
return;
|
||||
} else {
|
||||
types2_from_ambiguous_deref(output_instr, type_out, out.results, extras.tags_locked);
|
||||
return;
|
||||
}
|
||||
if (!out.results.front().addr_of && type_out.type &&
|
||||
type_out.type->kind == TP_Type::Kind::TYPESPEC) {
|
||||
type_out.type->set_field_origin(arg0_type.typespec(), arg1.get_int());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1281,6 +1322,20 @@ void types2_for_add(types2::Type& type_out,
|
||||
}
|
||||
}
|
||||
|
||||
// (+ (+ obj C1) (* a C2)), with obj + C1 already resolved to an element field access
|
||||
if (arg1_type.is_product()) {
|
||||
if (auto elt = lookup_array_element_from_field(dts.ts, arg0_type, arg1_type.get_multiplier())) {
|
||||
type_out.type = TP_Type::make_from_ts(coerce_to_reg_type(elt->result_type));
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (arg0_type.is_product()) {
|
||||
if (auto elt = lookup_array_element_from_field(dts.ts, arg1_type, arg0_type.get_multiplier())) {
|
||||
type_out.type = TP_Type::make_from_ts(coerce_to_reg_type(elt->result_type));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (arg0_type.is_product() && arg1_type.kind == TP_Type::Kind::TYPESPEC) {
|
||||
type_out.type =
|
||||
TP_Type::make_object_plus_product(arg1_type.typespec(), arg0_type.get_multiplier(), true);
|
||||
@@ -1368,6 +1423,15 @@ void types2_for_add(types2::Type& type_out,
|
||||
type_out.type = TP_Type::make_from_integer_constant_plus_var(
|
||||
arg0_type.get_integer_constant(), arg1_type.typespec(), sum_type);
|
||||
return;
|
||||
} else if (arg0_type.kind == TP_Type::Kind::PRODUCT_SUM) {
|
||||
if (auto elt = lookup_2d_array_element(dts.ts, arg1_type.typespec(), arg0_type)) {
|
||||
type_out.type = TP_Type::make_from_ts(coerce_to_reg_type(elt->result_type));
|
||||
return;
|
||||
}
|
||||
const auto& [mult, mult2] = arg0_type.get_product_sum_multipliers();
|
||||
type_out.type = TP_Type::make_object_plus_product_sum(arg1_type.typespec(), mult, mult2,
|
||||
arg0_type.get_sum_constant(), true);
|
||||
return;
|
||||
} else {
|
||||
type_out.type = TP_Type::make_object_plus_product(arg1_type.typespec(), 1, true);
|
||||
return;
|
||||
@@ -1375,6 +1439,17 @@ void types2_for_add(types2::Type& type_out,
|
||||
}
|
||||
}
|
||||
|
||||
if (arg1_type.kind == TP_Type::Kind::PRODUCT_SUM && tc(dts, TypeSpec("structure"), arg0_type)) {
|
||||
if (auto elt = lookup_2d_array_element(dts.ts, arg0_type.typespec(), arg1_type)) {
|
||||
type_out.type = TP_Type::make_from_ts(coerce_to_reg_type(elt->result_type));
|
||||
return;
|
||||
}
|
||||
const auto& [mult, mult2] = arg1_type.get_product_sum_multipliers();
|
||||
type_out.type = TP_Type::make_object_plus_product_sum(arg0_type.typespec(), mult, mult2,
|
||||
arg1_type.get_sum_constant(), false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (env.version >= GameVersion::Jak2 && tc(dts, TypeSpec("symbol"), arg1_type) &&
|
||||
is_int_or_uint(dts, arg0_type)) {
|
||||
if (arg0_type.is_integer_constant(jak2::SYM_TO_STRING_OFFSET)) {
|
||||
@@ -1753,6 +1828,11 @@ void AsmOp::propagate_types2(types2::Instruction& instr,
|
||||
out[m_dst->reg()]->type = TP_Type::make_from_ts(coerce_to_reg_type(field.type()));
|
||||
return;
|
||||
}
|
||||
if (m_instr.src[1].get_imm() > 0 &&
|
||||
dts.ts.tc(TypeSpec("integer"), src_type->type->typespec())) {
|
||||
out[m_dst->reg()]->type = TP_Type::make_from_ts("uint");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1964,8 +2044,8 @@ bool load_var_op_determine_type(types2::Type& type_out,
|
||||
return true;
|
||||
} else if (input_type.kind == TP_Type::Kind::TYPE_OF_TYPE_NO_VIRTUAL) {
|
||||
// normal non-virtual method access
|
||||
type_out.type =
|
||||
TP_Type::make_non_virtual_method(method_type, TypeSpec(type_name), method_id);
|
||||
type_out.type = TP_Type::make_non_virtual_method(method_type, TypeSpec(type_name),
|
||||
method_id, method_info.name);
|
||||
return true;
|
||||
} else {
|
||||
// normal virtual method access.
|
||||
@@ -1991,7 +2071,8 @@ bool load_var_op_determine_type(types2::Type& type_out,
|
||||
}
|
||||
}
|
||||
// nope
|
||||
type_out.type = TP_Type::make_virtual_method(method_type, TypeSpec(type_name), method_id);
|
||||
type_out.type = TP_Type::make_virtual_method(method_type, TypeSpec(type_name), method_id,
|
||||
method_info.name);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -2015,13 +2096,33 @@ bool load_var_op_determine_type(types2::Type& type_out,
|
||||
if (method_id != GOAL_NEW_METHOD && method_id != GOAL_RELOC_METHOD) {
|
||||
// this can get us the wrong thing for `new` methods. And maybe relocate?
|
||||
type_out.type = TP_Type::make_non_virtual_method(
|
||||
method_info.type.substitute_for_method_call("object"), TypeSpec("object"), method_id);
|
||||
method_info.type.substitute_for_method_call("object"), TypeSpec("object"), method_id,
|
||||
method_info.name);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (input_type.kind == TP_Type::Kind::OBJECT_PLUS_PRODUCT_WITH_CONSTANT) {
|
||||
if (input_type.has_sum_multipliers()) {
|
||||
FieldReverseLookupInput rd_in;
|
||||
DerefKind dk;
|
||||
dk.is_store = false;
|
||||
dk.reg_kind = get_reg_kind(ro.reg);
|
||||
dk.sign_extend = op.kind() == LoadVarOp::Kind::SIGNED;
|
||||
dk.size = op.size();
|
||||
rd_in.deref = dk;
|
||||
rd_in.base_type = input_type.get_obj_plus_const_mult_typespec();
|
||||
rd_in.stride = input_type.get_sum_multipliers().first;
|
||||
rd_in.stride2 = input_type.get_sum_multipliers().second;
|
||||
rd_in.offset = ro.offset + input_type.get_sum_constant();
|
||||
auto rd = dts.ts.reverse_field_lookup(rd_in);
|
||||
if (rd.success) {
|
||||
type_out.type = TP_Type::make_from_ts(coerce_to_reg_type(rd.result_type));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (input_type.is_plain_product_plus_obj()) {
|
||||
FieldReverseLookupInput rd_in;
|
||||
DerefKind dk;
|
||||
dk.is_store = false;
|
||||
|
||||
@@ -374,6 +374,7 @@ TP_Type DecompilerTypeSystem::tp_lca(const TP_Type& existing,
|
||||
}
|
||||
|
||||
case TP_Type::Kind::INTEGER_CONSTANT_PLUS_VAR_MULT:
|
||||
case TP_Type::Kind::PRODUCT_SUM:
|
||||
// a bit lazy here, but I don't think you can ever merge these.
|
||||
*changed = true;
|
||||
return TP_Type::make_from_ts("int");
|
||||
@@ -587,4 +588,52 @@ bool DecompilerTypeSystem::should_attempt_cast_simplify(const TypeSpec& expected
|
||||
|
||||
return !ts.tc(expected, actual);
|
||||
}
|
||||
|
||||
std::optional<FieldReverseLookupOutput> lookup_2d_array_element(const TypeSystem& ts,
|
||||
const TypeSpec& base_type,
|
||||
const TP_Type& product_sum) {
|
||||
FieldReverseLookupInput rd_in;
|
||||
rd_in.base_type = base_type;
|
||||
rd_in.stride = product_sum.get_product_sum_multipliers().first;
|
||||
rd_in.stride2 = product_sum.get_product_sum_multipliers().second;
|
||||
rd_in.offset = product_sum.get_sum_constant();
|
||||
auto rd = ts.reverse_field_lookup(rd_in);
|
||||
if (!rd.success || rd.addr_of) {
|
||||
return std::nullopt;
|
||||
}
|
||||
return rd;
|
||||
}
|
||||
|
||||
std::optional<FieldReverseLookupOutput> lookup_array_element_from_field(const TypeSystem& ts,
|
||||
const TP_Type& field_addr,
|
||||
int stride) {
|
||||
if (!field_addr.has_field_origin()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
FieldReverseLookupInput rd_in;
|
||||
rd_in.base_type = field_addr.field_origin_type();
|
||||
rd_in.offset = field_addr.field_origin_offset();
|
||||
auto field_rd = ts.reverse_field_lookup(rd_in);
|
||||
rd_in.stride = stride;
|
||||
auto rd = ts.reverse_field_lookup(rd_in);
|
||||
if (!rd.success || rd.addr_of || !rd.has_variable_token() || !field_rd.success ||
|
||||
field_rd.tokens.size() != rd.tokens.size()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < rd.tokens.size(); i++) {
|
||||
const auto& tok = rd.tokens.at(i);
|
||||
const auto& field_tok = field_rd.tokens.at(i);
|
||||
bool same = tok.kind == FieldReverseLookupOutput::Token::Kind::VAR_IDX
|
||||
? field_tok.kind == FieldReverseLookupOutput::Token::Kind::CONSTANT_IDX &&
|
||||
field_tok.idx == 0
|
||||
: tok.kind == field_tok.kind && tok.name == field_tok.name &&
|
||||
(tok.kind != FieldReverseLookupOutput::Token::Kind::CONSTANT_IDX ||
|
||||
tok.idx == field_tok.idx);
|
||||
if (!same) {
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
return rd;
|
||||
}
|
||||
} // namespace decompiler
|
||||
@@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <optional>
|
||||
|
||||
#include "common/goos/Reader.h"
|
||||
#include "common/goos/TextDB.h"
|
||||
#include "common/type_system/TypeSystem.h"
|
||||
@@ -104,4 +106,11 @@ class DecompilerTypeSystem {
|
||||
GameVersion m_version;
|
||||
mutable goos::Reader m_reader;
|
||||
};
|
||||
|
||||
std::optional<FieldReverseLookupOutput> lookup_2d_array_element(const TypeSystem& ts,
|
||||
const TypeSpec& base_type,
|
||||
const TP_Type& product_sum);
|
||||
std::optional<FieldReverseLookupOutput> lookup_array_element_from_field(const TypeSystem& ts,
|
||||
const TP_Type& field_addr,
|
||||
int stride);
|
||||
} // namespace decompiler
|
||||
@@ -41,6 +41,10 @@ std::string TP_Type::print() const {
|
||||
case Kind::PRODUCT_WITH_CONSTANT:
|
||||
return fmt::format("<value x {}>", m_int);
|
||||
case Kind::OBJECT_PLUS_PRODUCT_WITH_CONSTANT:
|
||||
if (m_sum_multipliers.first) {
|
||||
return fmt::format("<{} + {} + (value x {}) + (value x {})>", m_ts.print(), m_sum_constant,
|
||||
m_sum_multipliers.first, m_sum_multipliers.second);
|
||||
}
|
||||
return fmt::format("<{} + (value x {})>", m_ts.print(), m_int);
|
||||
case Kind::OBJECT_NEW_METHOD:
|
||||
return fmt::format("<(object-new) for {}>", m_ts.print());
|
||||
@@ -56,12 +60,17 @@ std::string TP_Type::print() const {
|
||||
return fmt::format("<integer {} + {}>", m_int, m_ts.print());
|
||||
case Kind::INTEGER_CONSTANT_PLUS_VAR_MULT:
|
||||
return fmt::format("<integer {} + ({} x {})>", m_int, m_extra_multiplier, m_ts.print());
|
||||
case Kind::PRODUCT_SUM:
|
||||
return fmt::format("<integer {} + (value x {}) + (value x {})>", m_sum_constant, m_int,
|
||||
m_extra_multiplier);
|
||||
case Kind::DYNAMIC_METHOD_ACCESS:
|
||||
return fmt::format("<dynamic-method-access>");
|
||||
case Kind::VIRTUAL_METHOD:
|
||||
return fmt::format("<vmethod {}>", m_ts.print());
|
||||
return fmt::format("<vmethod({}:{}) {}>", m_method_id,
|
||||
m_method_name.empty() ? "?" : m_method_name, m_ts.print());
|
||||
case Kind::NON_VIRTUAL_METHOD:
|
||||
return fmt::format("<method {}>", m_ts.print());
|
||||
return fmt::format("<method({}:{}) {}>", m_method_id,
|
||||
m_method_name.empty() ? "?" : m_method_name, m_ts.print());
|
||||
case Kind::LEFT_SHIFTED_BITFIELD:
|
||||
if (m_pcpyud) {
|
||||
return fmt::format("(<{}> << {}) :u", m_ts.print(), m_int);
|
||||
@@ -100,7 +109,8 @@ bool TP_Type::operator==(const TP_Type& other) const {
|
||||
|
||||
switch (kind) {
|
||||
case Kind::TYPESPEC:
|
||||
return m_ts == other.m_ts;
|
||||
return m_ts == other.m_ts && m_field_origin_type == other.m_field_origin_type &&
|
||||
m_field_origin_offset == other.m_field_origin_offset;
|
||||
case Kind::TYPE_OF_TYPE_OR_CHILD:
|
||||
return m_ts == other.m_ts;
|
||||
case Kind::TYPE_OF_TYPE_NO_VIRTUAL:
|
||||
@@ -116,7 +126,8 @@ bool TP_Type::operator==(const TP_Type& other) const {
|
||||
case Kind::PRODUCT_WITH_CONSTANT:
|
||||
return m_int == other.m_int;
|
||||
case Kind::OBJECT_PLUS_PRODUCT_WITH_CONSTANT:
|
||||
return m_ts == other.m_ts && m_int == other.m_int;
|
||||
return m_ts == other.m_ts && m_int == other.m_int &&
|
||||
m_sum_multipliers == other.m_sum_multipliers && m_sum_constant == other.m_sum_constant;
|
||||
case Kind::OBJECT_NEW_METHOD:
|
||||
return m_ts == other.m_ts;
|
||||
case Kind::NON_OBJECT_NEW_METHOD:
|
||||
@@ -135,6 +146,10 @@ bool TP_Type::operator==(const TP_Type& other) const {
|
||||
case Kind::INTEGER_CONSTANT_PLUS_VAR_MULT:
|
||||
return m_int == other.m_int && m_ts == other.m_ts &&
|
||||
m_extra_multiplier == other.m_extra_multiplier;
|
||||
case Kind::PRODUCT_SUM:
|
||||
return m_int == other.m_int && m_ts == other.m_ts &&
|
||||
m_extra_multiplier == other.m_extra_multiplier &&
|
||||
m_sum_constant == other.m_sum_constant;
|
||||
case Kind::LEFT_SHIFTED_BITFIELD:
|
||||
return m_int == other.m_int && m_ts == other.m_ts && m_pcpyud == other.m_pcpyud;
|
||||
case Kind::PCPYUD_BITFIELD:
|
||||
@@ -194,6 +209,7 @@ TypeSpec TP_Type::typespec() const {
|
||||
case Kind::INTEGER_CONSTANT:
|
||||
return TypeSpec("int");
|
||||
case Kind::INTEGER_CONSTANT_PLUS_VAR_MULT:
|
||||
case Kind::PRODUCT_SUM:
|
||||
return m_ts;
|
||||
case Kind::INTEGER_CONSTANT_PLUS_VAR:
|
||||
return m_method_from_type;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
|
||||
#include "common/common_types.h"
|
||||
#include "common/type_system/TypeSpec.h"
|
||||
@@ -32,6 +33,7 @@ class TP_Type {
|
||||
INTEGER_CONSTANT, // a constant integer.
|
||||
INTEGER_CONSTANT_PLUS_VAR, // constant + variable. for dynamic addr of
|
||||
INTEGER_CONSTANT_PLUS_VAR_MULT, // like var + 100 + 12 * var2
|
||||
PRODUCT_SUM, // constant + (val * multiplier) + (val2 * multiplier2)
|
||||
DYNAMIC_METHOD_ACCESS, // partial access into a
|
||||
VIRTUAL_METHOD,
|
||||
NON_VIRTUAL_METHOD,
|
||||
@@ -68,6 +70,7 @@ class TP_Type {
|
||||
case Kind::INTEGER_CONSTANT:
|
||||
case Kind::INTEGER_CONSTANT_PLUS_VAR:
|
||||
case Kind::INTEGER_CONSTANT_PLUS_VAR_MULT:
|
||||
case Kind::PRODUCT_SUM:
|
||||
case Kind::VIRTUAL_METHOD:
|
||||
case Kind::NON_VIRTUAL_METHOD:
|
||||
case Kind::LEFT_SHIFTED_BITFIELD:
|
||||
@@ -134,23 +137,27 @@ class TP_Type {
|
||||
|
||||
static TP_Type make_virtual_method(const TypeSpec& method_type,
|
||||
const TypeSpec& obj_type,
|
||||
int method_id) {
|
||||
int method_id,
|
||||
const std::string& method_name = {}) {
|
||||
TP_Type result;
|
||||
result.kind = Kind::VIRTUAL_METHOD;
|
||||
result.m_ts = method_type;
|
||||
result.m_method_from_type = obj_type;
|
||||
result.m_method_id = method_id;
|
||||
result.m_method_name = method_name;
|
||||
return result;
|
||||
}
|
||||
|
||||
static TP_Type make_non_virtual_method(const TypeSpec& method_type,
|
||||
const TypeSpec& obj_type,
|
||||
int method_id) {
|
||||
int method_id,
|
||||
const std::string& method_name = {}) {
|
||||
TP_Type result;
|
||||
result.kind = Kind::NON_VIRTUAL_METHOD;
|
||||
result.m_method_from_type = obj_type;
|
||||
result.m_ts = method_type;
|
||||
result.m_method_id = method_id;
|
||||
result.m_method_name = method_name;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -231,6 +238,19 @@ class TP_Type {
|
||||
return result;
|
||||
}
|
||||
|
||||
static TP_Type make_from_product_sum(int64_t multiplier,
|
||||
int64_t multiplier2,
|
||||
const TypeSpec& ts,
|
||||
int64_t constant = 0) {
|
||||
TP_Type result;
|
||||
result.kind = Kind::PRODUCT_SUM;
|
||||
result.m_int = multiplier;
|
||||
result.m_extra_multiplier = multiplier2;
|
||||
result.m_ts = ts;
|
||||
result.m_sum_constant = constant;
|
||||
return result;
|
||||
}
|
||||
|
||||
static TP_Type make_partial_dyanmic_vtable_access() {
|
||||
TP_Type result;
|
||||
result.kind = Kind::DYNAMIC_METHOD_ACCESS;
|
||||
@@ -264,6 +284,20 @@ class TP_Type {
|
||||
return result;
|
||||
}
|
||||
|
||||
/*!
|
||||
* obj + constant + (val * multiplier) + (val2 * multiplier2), 2d array access
|
||||
*/
|
||||
static TP_Type make_object_plus_product_sum(const TypeSpec& ts,
|
||||
int64_t multiplier,
|
||||
int64_t multiplier2,
|
||||
int64_t constant,
|
||||
bool flipped) {
|
||||
TP_Type result = make_object_plus_product(ts, 1, flipped);
|
||||
result.m_sum_multipliers = {multiplier, multiplier2};
|
||||
result.m_sum_constant = constant;
|
||||
return result;
|
||||
}
|
||||
|
||||
static TP_Type make_from_left_shift_bitfield(const TypeSpec& ts, int amount, bool pcpyud) {
|
||||
TP_Type result;
|
||||
result.kind = Kind::LEFT_SHIFTED_BITFIELD;
|
||||
@@ -371,6 +405,42 @@ class TP_Type {
|
||||
return m_extra_multiplier;
|
||||
}
|
||||
|
||||
std::pair<int64_t, int64_t> get_product_sum_multipliers() const {
|
||||
ASSERT(kind == Kind::PRODUCT_SUM);
|
||||
return {m_int, m_extra_multiplier};
|
||||
}
|
||||
|
||||
bool has_sum_multipliers() const {
|
||||
return kind == Kind::OBJECT_PLUS_PRODUCT_WITH_CONSTANT && m_sum_multipliers.first;
|
||||
}
|
||||
|
||||
const std::pair<int64_t, int64_t>& get_sum_multipliers() const {
|
||||
ASSERT(has_sum_multipliers());
|
||||
return m_sum_multipliers;
|
||||
}
|
||||
|
||||
void set_field_origin(const TypeSpec& base_type, int offset) {
|
||||
ASSERT(kind == Kind::TYPESPEC);
|
||||
m_field_origin_type = base_type;
|
||||
m_field_origin_offset = offset;
|
||||
}
|
||||
|
||||
bool has_field_origin() const {
|
||||
return kind == Kind::TYPESPEC && m_field_origin_type != TypeSpec();
|
||||
}
|
||||
|
||||
const TypeSpec& field_origin_type() const { return m_field_origin_type; }
|
||||
int field_origin_offset() const { return m_field_origin_offset; }
|
||||
|
||||
int64_t get_sum_constant() const {
|
||||
ASSERT(kind == Kind::PRODUCT_SUM || has_sum_multipliers());
|
||||
return m_sum_constant;
|
||||
}
|
||||
|
||||
bool is_plain_product_plus_obj() const {
|
||||
return kind == Kind::OBJECT_PLUS_PRODUCT_WITH_CONSTANT && !m_sum_constant;
|
||||
}
|
||||
|
||||
int get_left_shift() const {
|
||||
ASSERT(kind == Kind::LEFT_SHIFTED_BITFIELD);
|
||||
return m_int;
|
||||
@@ -402,6 +472,8 @@ class TP_Type {
|
||||
return m_method_id;
|
||||
}
|
||||
|
||||
const std::string& method_name() const { return m_method_name; }
|
||||
|
||||
bool flipped_add_order() const {
|
||||
ASSERT(kind == Kind::OBJECT_PLUS_PRODUCT_WITH_CONSTANT);
|
||||
return m_flipped_order;
|
||||
@@ -416,12 +488,17 @@ class TP_Type {
|
||||
TypeSpec m_ts;
|
||||
TypeSpec m_method_from_type; // hack, also stores sum type.
|
||||
int m_method_id = -1;
|
||||
std::string m_method_name;
|
||||
std::string m_str;
|
||||
int64_t m_int = 0;
|
||||
bool m_pcpyud = false; // have we extracted the top doubleword of a bitfield?
|
||||
bool m_flipped_order = false;
|
||||
|
||||
int64_t m_extra_multiplier = 0;
|
||||
std::pair<int64_t, int64_t> m_sum_multipliers = {0, 0};
|
||||
int64_t m_sum_constant = 0;
|
||||
TypeSpec m_field_origin_type;
|
||||
int m_field_origin_offset = 0;
|
||||
};
|
||||
|
||||
class TypeState {
|
||||
|
||||
@@ -1073,6 +1073,8 @@ const std::unordered_map<
|
||||
}},
|
||||
{GameVersion::JakX,
|
||||
{
|
||||
{"actor-hash-bucket",
|
||||
{{"data", ArrayFieldDecompMeta(TypeSpec("actor-cshape-ptr"), 16)}}},
|
||||
{"ocean-near-indices",
|
||||
{{"data", ArrayFieldDecompMeta(TypeSpec("ocean-near-index"), 32)}}},
|
||||
{"ocean-mid-masks", {{"data", ArrayFieldDecompMeta(TypeSpec("ocean-mid-mask"), 8)}}},
|
||||
@@ -1082,6 +1084,8 @@ const std::unordered_map<
|
||||
{{"init-specs", ArrayFieldDecompMeta(TypeSpec("sp-field-init-spec"), 16)}}},
|
||||
{"sparticle-launch-group",
|
||||
{{"launcher", ArrayFieldDecompMeta(TypeSpec("sparticle-group-item"), 32)}}},
|
||||
{"simple-sprite-system",
|
||||
{{"data", ArrayFieldDecompMeta(TypeSpec("sprite-glow-data"), 64)}}},
|
||||
{"continue-point",
|
||||
{{"want", ArrayFieldDecompMeta(TypeSpec("level-buffer-state-small"), 8)}}},
|
||||
{"vehicle-sound-info",
|
||||
@@ -1104,6 +1108,16 @@ const std::unordered_map<
|
||||
{
|
||||
{"local-pos-array", ArrayFieldDecompMeta(TypeSpec("vector"), 16)},
|
||||
}},
|
||||
{"attackable-hash",
|
||||
{
|
||||
{"procs", ArrayFieldDecompMeta(TypeSpec("handle"),
|
||||
8,
|
||||
ArrayFieldDecompMeta::Kind::REF_TO_INTEGER_ARR)},
|
||||
{"trans", ArrayFieldDecompMeta(TypeSpec("vector"), 16)},
|
||||
{"masks", ArrayFieldDecompMeta(TypeSpec("uint32"),
|
||||
4,
|
||||
ArrayFieldDecompMeta::Kind::REF_TO_INTEGER_ARR)},
|
||||
}},
|
||||
}}};
|
||||
|
||||
goos::Object decompile_structure(const TypeSpec& type,
|
||||
|
||||
@@ -1387,6 +1387,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000008f0e00000800000010010000,Gasia PlayStation Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000006f0e0000b20200000f010000,PDP Xbox One Controller,a:b0,b:b1,y:b3,x:b2,start:b7,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b12,dpleft:b14,dpdown:b13,dpright:b15,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000f025000021c1000010010000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000f0250000c283000010010000,Gioteck VX2 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
@@ -1738,6 +1739,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
0300000032150000030a000001010000,Razer Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000321500000b10000011010000,Razer Wolverine PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
|
||||
0300000032150000140a000001010000,Razer Wolverine Ultimate Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
0300000032150000290a000001010000,Razer Wolverine V2 Xbox,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
030000000d0f0000c100000010010000,Retro Bit Legacy16,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b12,leftshoulder:b4,lefttrigger:b6,misc1:b13,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000790000001100000010010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000632500007805000011010000,Retro Fighters D6,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
@@ -1849,6 +1851,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
05000000f51000008f01000001000000,Turtle Beach Rematch Nintendo Switch Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000100800000100000010010000,Twin PlayStation Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000c0160000e105000010010000,Ultimate Atari Fight Stick,a:b1,b:b2,back:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b4,righttrigger:b5,start:b8,x:b0,y:b3,platform:Linux,
|
||||
030000006f0e00001211000010010000,Unico MVS Mini Pad,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000151900005678000010010000,Uniplay U6,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000790000000600000007010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,
|
||||
@@ -2151,7 +2154,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
65366465656364636137653363376531,PS4 Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
|
||||
66613532303965383534396638613230,PS4 Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
|
||||
050000004c050000e60c0000fffe3f00,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
|
||||
050000004c050000e60c0000fffe3f80,PS5 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b2,y:b17,platform:Android,
|
||||
050000004c050000e60c0000fffe3f80,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b0,y:b2,platform:Android,
|
||||
050000004c050000e60c0000ffff3f00,PS5 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
|
||||
32346465346533616263386539323932,PS5 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
|
||||
32633532643734376632656664383733,PS5 Controller,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
|
||||
|
||||
@@ -1,181 +1,3 @@
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_12_collide_mesh {
|
||||
struct Cache {
|
||||
void* fake_scratchpad_data; // *fake-scratchpad-data*
|
||||
} cache;
|
||||
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
// nop // sll r0, r0, 0
|
||||
get_fake_spad_addr2(t0, cache.fake_scratchpad_data, 0, c);// lui t0, 28672
|
||||
c->lwu(v1, 8, a0); // lwu v1, 8(a0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lwu(a3, 12, a0); // lwu a3, 12(a0)
|
||||
bc = c->sgpr64(v1) == 0; // beq v1, r0, L7
|
||||
c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2)
|
||||
if (bc) {goto block_3;} // branch non-likely
|
||||
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf2, 16, a2); // lqc2 vf2, 16(a2)
|
||||
c->daddiu(t0, t0, -64); // daddiu t0, t0, -64
|
||||
c->lqc2(vf3, 32, a2); // lqc2 vf3, 32(a2)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf4, 48, a2); // lqc2 vf4, 48(a2)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf5, 0, a3); // lqc2 vf5, 0(a3)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf6, 16, a3); // lqc2 vf6, 16(a3)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf7, 32, a3); // lqc2 vf7, 32(a3)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf8, 48, a3); // lqc2 vf8, 48(a3)
|
||||
|
||||
block_2:
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
c->daddiu(a3, a3, 64); // daddiu a3, a3, 64
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf5); // vmaddax.xyzw acc, vf1, vf5
|
||||
c->daddiu(t0, t0, 64); // daddiu t0, t0, 64
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf5); // vmadday.xyzw acc, vf2, vf5
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf9, vf3, vf5); // vmaddz.xyzw vf9, vf3, vf5
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
c->lqc2(vf5, 0, a3); // lqc2 vf5, 0(a3)
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf6); // vmaddax.xyzw acc, vf1, vf6
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf6); // vmadday.xyzw acc, vf2, vf6
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf3, vf6); // vmaddz.xyzw vf10, vf3, vf6
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
c->lqc2(vf6, 16, a3); // lqc2 vf6, 16(a3)
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf7); // vmaddax.xyzw acc, vf1, vf7
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf7); // vmadday.xyzw acc, vf2, vf7
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf3, vf7); // vmaddz.xyzw vf11, vf3, vf7
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
c->lqc2(vf7, 32, a3); // lqc2 vf7, 32(a3)
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf8); // vmaddax.xyzw acc, vf1, vf8
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf8); // vmadday.xyzw acc, vf2, vf8
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf12, vf3, vf8); // vmaddz.xyzw vf12, vf3, vf8
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf8, 48, a3); // lqc2 vf8, 48(a3)
|
||||
c->daddiu(v1, v1, -4); // daddiu v1, v1, -4
|
||||
c->sqc2(vf9, 0, t0); // sqc2 vf9, 0(t0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sqc2(vf10, 16, t0); // sqc2 vf10, 16(t0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sqc2(vf11, 32, t0); // sqc2 vf11, 32(t0)
|
||||
bc = ((s64)c->sgpr64(v1)) > 0; // bgtz v1, L6
|
||||
c->sqc2(vf12, 48, t0); // sqc2 vf12, 48(t0)
|
||||
if (bc) {goto block_2;} // branch non-likely
|
||||
|
||||
|
||||
block_3:
|
||||
c->daddiu(v1, a0, 28); // daddiu v1, a0, 28
|
||||
// nop // sll r0, r0, 0
|
||||
get_fake_spad_addr2(a2, cache.fake_scratchpad_data, 0, c);// lui a2, 28672
|
||||
c->lwu(a0, 4, a0); // lwu a0, 4(a0)
|
||||
bc = c->sgpr64(a0) == 0; // beq a0, r0, L9
|
||||
c->lbu(t0, 0, v1); // lbu t0, 0(v1)
|
||||
if (bc) {goto block_6;} // branch non-likely
|
||||
|
||||
c->daddiu(a1, a1, -96); // daddiu a1, a1, -96
|
||||
c->lbu(a3, 1, v1); // lbu a3, 1(v1)
|
||||
c->dsll(t0, t0, 4); // dsll t0, t0, 4
|
||||
c->lbu(t2, 2, v1); // lbu t2, 2(v1)
|
||||
c->dsll(t1, a3, 4); // dsll t1, a3, 4
|
||||
c->lwu(a3, 4, v1); // lwu a3, 4(v1)
|
||||
c->dsll(t2, t2, 4); // dsll t2, t2, 4
|
||||
c->daddu(t0, t0, a2); // daddu t0, t0, a2
|
||||
c->daddu(t1, t1, a2); // daddu t1, t1, a2
|
||||
c->daddu(t2, t2, a2); // daddu t2, t2, a2
|
||||
|
||||
block_5:
|
||||
c->daddiu(a0, a0, -1); // daddiu a0, a0, -1
|
||||
c->lqc2(vf1, 0, t0); // lqc2 vf1, 0(t0)
|
||||
c->daddiu(v1, v1, 8); // daddiu v1, v1, 8
|
||||
c->lqc2(vf2, 0, t1); // lqc2 vf2, 0(t1)
|
||||
c->daddiu(a1, a1, 96); // daddiu a1, a1, 96
|
||||
c->lqc2(vf3, 0, t2); // lqc2 vf3, 0(t2)
|
||||
c->vsub(DEST::xyzw, vf4, vf2, vf1); // vsub.xyzw vf4, vf2, vf1
|
||||
c->sqc2(vf1, 0, a1); // sqc2 vf1, 0(a1)
|
||||
c->vmini(DEST::xyzw, vf8, vf1, vf2); // vmini.xyzw vf8, vf1, vf2
|
||||
c->sqc2(vf2, 16, a1); // sqc2 vf2, 16(a1)
|
||||
c->vsub(DEST::xyzw, vf5, vf3, vf1); // vsub.xyzw vf5, vf3, vf1
|
||||
c->sqc2(vf3, 32, a1); // sqc2 vf3, 32(a1)
|
||||
c->vmax(DEST::xyzw, vf9, vf1, vf2); // vmax.xyzw vf9, vf1, vf2
|
||||
c->lbu(t1, 0, v1); // lbu t1, 0(v1)
|
||||
c->vopmula(vf4, vf5); // vopmula.xyz acc, vf4, vf5
|
||||
c->lbu(t2, 1, v1); // lbu t2, 1(v1)
|
||||
c->vopmsub(vf6, vf5, vf4); // vopmsub.xyz vf6, vf5, vf4
|
||||
c->lbu(t0, 2, v1); // lbu t0, 2(v1)
|
||||
c->vmul(DEST::xyzw, vf7, vf6, vf6); // vmul.xyzw vf7, vf6, vf6
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmini(DEST::xyzw, vf8, vf8, vf3); // vmini.xyzw vf8, vf8, vf3
|
||||
c->dsll(t1, t1, 4); // dsll t1, t1, 4
|
||||
c->vmax(DEST::xyzw, vf9, vf9, vf3); // vmax.xyzw vf9, vf9, vf3
|
||||
c->dsll(t2, t2, 4); // dsll t2, t2, 4
|
||||
c->vmula_bc(DEST::w, BC::x, vf0, vf7); // vmulax.w acc, vf0, vf7
|
||||
c->dsll(t3, t0, 4); // dsll t3, t0, 4
|
||||
c->vmadda_bc(DEST::w, BC::y, vf0, vf7); // vmadday.w acc, vf0, vf7
|
||||
c->daddu(t0, t1, a2); // daddu t0, t1, a2
|
||||
c->vmadd_bc(DEST::w, BC::z, vf7, vf0, vf7); // vmaddz.w vf7, vf0, vf7
|
||||
c->daddu(t1, t2, a2); // daddu t1, t2, a2
|
||||
c->vrsqrt(vf0, BC::w, vf7, BC::w); // vrsqrt Q, vf0.w, vf7.w
|
||||
c->daddu(t2, t3, a2); // daddu t2, t3, a2
|
||||
c->vftoi0(DEST::xyzw, vf8, vf8); // vftoi0.xyzw vf8, vf8
|
||||
// nop // sll r0, r0, 0
|
||||
c->vftoi0(DEST::xyzw, vf9, vf9); // vftoi0.xyzw vf9, vf9
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
c->sqc2(vf8, 64, a1); // sqc2 vf8, 64(a1)
|
||||
c->vwaitq(); // vwaitq
|
||||
c->sqc2(vf9, 80, a1); // sqc2 vf9, 80(a1)
|
||||
c->vmulq(DEST::xyz, vf6, vf6); // vmulq.xyz vf6, vf6, Q
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
c->sqc2(vf6, 48, a1); // sqc2 vf6, 48(a1)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sw(a3, 60, a1); // sw a3, 60(a1)
|
||||
bc = c->sgpr64(a0) != 0; // bne a0, r0, L8
|
||||
c->lwu(a3, 4, v1); // lwu a3, 4(v1)
|
||||
if (bc) {goto block_5;} // branch non-likely
|
||||
|
||||
|
||||
block_6:
|
||||
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
|
||||
// nop // sll r0, r0, 0
|
||||
end_of_function:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
cache.fake_scratchpad_data = intern_from_c(-1, 0, "*fake-scratchpad-data*").c();
|
||||
gLinkedFunctionTable.reg("(method 12 collide-mesh)", execute, 512);
|
||||
}
|
||||
|
||||
} // namespace method_12_collide_mesh
|
||||
} // namespace Mips2C
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
@@ -483,4 +305,421 @@ void link() {
|
||||
}
|
||||
|
||||
} // namespace method_14_collide_mesh
|
||||
} // namespace Mips2C
|
||||
} // namespace Mips2C
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_11_collide_mesh {
|
||||
struct Cache {
|
||||
void* closest_pt_in_triangle; // closest-pt-in-triangle
|
||||
} cache;
|
||||
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
bool cop1_bc = false;
|
||||
c->daddiu(sp, sp, -160); // daddiu sp, sp, -160
|
||||
c->sd(ra, 0, sp); // sd ra, 0(sp)
|
||||
c->sq(s1, 64, sp); // sq s1, 64(sp)
|
||||
c->sq(s2, 80, sp); // sq s2, 80(sp)
|
||||
c->sq(s3, 96, sp); // sq s3, 96(sp)
|
||||
c->sq(s4, 112, sp); // sq s4, 112(sp)
|
||||
c->sq(s5, 128, sp); // sq s5, 128(sp)
|
||||
c->sq(gp, 144, sp); // sq gp, 144(sp)
|
||||
c->mov64(gp, a2); // or gp, a2, r0
|
||||
c->mov64(s5, a3); // or s5, a3, r0
|
||||
c->mov64(s3, t0); // or s3, t0, r0
|
||||
c->daddiu(s4, sp, 16); // daddiu s4, sp, 16
|
||||
c->lui(v1, 17141); // lui v1, 17141
|
||||
c->ori(v1, v1, 49807); // ori v1, v1, 49807
|
||||
// nop // sll r0, r0, 0
|
||||
c->mov64(s2, a1); // or s2, a1, r0
|
||||
c->lqc2(vf3, 0, s5); // lqc2 vf3, 0(s5)
|
||||
c->mov128_vf_gpr(vf14, v1); // qmtc2.i vf14, v1
|
||||
c->lwu(s1, 4, a0); // lwu s1, 4(a0)
|
||||
c->vadd_bc(DEST::w, BC::x, vf3, vf3, vf14); // vaddx.w vf3, vf3, vf14
|
||||
// nop // sll r0, r0, 0
|
||||
c->vsub_bc(DEST::xyzw, BC::w, vf12, vf3, vf3); // vsubw.xyzw vf12, vf3, vf3
|
||||
// nop // sll r0, r0, 0
|
||||
c->vadd_bc(DEST::xyzw, BC::w, vf13, vf3, vf3); // vaddw.xyzw vf13, vf3, vf3
|
||||
// nop // sll r0, r0, 0
|
||||
c->vftoi0(DEST::xyzw, vf12, vf12); // vftoi0.xyzw vf12, vf12
|
||||
// nop // sll r0, r0, 0
|
||||
c->vftoi0(DEST::xyzw, vf13, vf13); // vftoi0.xyzw vf13, vf13
|
||||
// nop // sll r0, r0, 0
|
||||
c->mov128_gpr_vf(v1, vf12); // qmfc2.i v1, vf12
|
||||
c->sqc2(vf12, 16, s4); // sqc2 vf12, 16(s4)
|
||||
c->mov128_gpr_vf(a0, vf13); // qmfc2.i a0, vf13
|
||||
c->sqc2(vf13, 32, s4); // sqc2 vf13, 32(s4)
|
||||
|
||||
block_1:
|
||||
bc = c->sgpr64(s1) == 0; // beq s1, r0, L34
|
||||
c->lwu(a2, 60, s2); // lwu a2, 60(s2)
|
||||
if (bc) {goto block_14;} // branch non-likely
|
||||
|
||||
c->addiu(a3, r0, 896); // addiu a3, r0, 896
|
||||
c->addiu(a1, r0, 0); // addiu a1, r0, 0
|
||||
c->and_(a2, a2, a3); // and a2, a2, a3
|
||||
c->addiu(a3, r0, 256); // addiu a3, r0, 256
|
||||
bc = c->sgpr64(a2) == c->sgpr64(a1); // beq a2, a1, L32
|
||||
c->daddiu(s1, s1, -1); // daddiu s1, s1, -1
|
||||
if (bc) {goto block_5;} // branch non-likely
|
||||
|
||||
if (((s64)c->sgpr64(a2)) != ((s64)c->sgpr64(a3))) {// bnel a2, a3, L31
|
||||
c->daddiu(s2, s2, 96); // daddiu s2, s2, 96
|
||||
goto block_1;
|
||||
}
|
||||
|
||||
block_5:
|
||||
// nop // sll r0, r0, 0
|
||||
c->lq(a2, 64, s2); // lq a2, 64(s2)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lq(a1, 80, s2); // lq a1, 80(s2)
|
||||
c->pcgtw(a2, a2, a0); // pcgtw a2, a2, a0
|
||||
c->mfc1(r0, f31); // mfc1 r0, f31
|
||||
c->pcgtw(a1, v1, a1); // pcgtw a1, v1, a1
|
||||
c->mfc1(r0, f31); // mfc1 r0, f31
|
||||
c->por(a1, a2, a1); // por a1, a2, a1
|
||||
// nop // sll r0, r0, 0
|
||||
c->ppach(a1, r0, a1); // ppach a1, r0, a1
|
||||
c->mfc1(r0, f31); // mfc1 r0, f31
|
||||
c->dsll(a1, a1, 16); // dsll a1, a1, 16
|
||||
// nop // sll r0, r0, 0
|
||||
if (((s64)c->sgpr64(a1)) != ((s64)0)) { // bnel a1, r0, L31
|
||||
c->daddiu(s2, s2, 96); // daddiu s2, s2, 96
|
||||
goto block_1;
|
||||
}
|
||||
|
||||
block_7:
|
||||
c->load_symbol2(t9, cache.closest_pt_in_triangle);// lw t9, closest-pt-in-triangle(s7)
|
||||
c->daddu(a0, r0, s4); // daddu a0, r0, s4
|
||||
c->mov64(a1, s5); // or a1, s5, r0
|
||||
c->daddu(a2, r0, s2); // daddu a2, r0, s2
|
||||
c->daddiu(a3, s2, 48); // daddiu a3, s2, 48
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->lqc2(vf2, 0, s4); // lqc2 vf2, 0(s4)
|
||||
c->lqc2(vf3, 0, s5); // lqc2 vf3, 0(s5)
|
||||
c->lqc2(vf1, 48, s2); // lqc2 vf1, 48(s2)
|
||||
c->lq(v1, 16, s4); // lq v1, 16(s4)
|
||||
c->lq(a0, 32, s4); // lq a0, 32(s4)
|
||||
c->vsub(DEST::xyzw, vf4, vf3, vf2); // vsub.xyzw vf4, vf3, vf2
|
||||
c->lwu(a1, 60, s2); // lwu a1, 60(s2)
|
||||
c->vmul(DEST::xyzw, vf5, vf4, vf1); // vmul.xyzw vf5, vf4, vf1
|
||||
c->lqc2(vf7, 0, s2); // lqc2 vf7, 0(s2)
|
||||
c->vmul(DEST::xyzw, vf6, vf4, vf4); // vmul.xyzw vf6, vf4, vf4
|
||||
c->lqc2(vf8, 16, s2); // lqc2 vf8, 16(s2)
|
||||
c->vmove(DEST::w, vf1, vf0); // vmove.w vf1, vf0
|
||||
c->lqc2(vf9, 32, s2); // lqc2 vf9, 32(s2)
|
||||
c->vadd_bc(DEST::y, BC::x, vf5, vf5, vf5); // vaddx.y vf5, vf5, vf5
|
||||
c->daddiu(s2, s2, 96); // daddiu s2, s2, 96
|
||||
c->vadd_bc(DEST::x, BC::y, vf6, vf6, vf6); // vaddy.x vf6, vf6, vf6
|
||||
c->mtc1(f5, s3); // mtc1 f5, s3
|
||||
c->vadd_bc(DEST::y, BC::z, vf5, vf5, vf5); // vaddz.y vf5, vf5, vf5
|
||||
c->lui(a2, 17141); // lui a2, 17141
|
||||
c->ori(a2, a2, 49807); // ori a2, a2, 49807
|
||||
c->mtc1(f3, a2); // mtc1 f3, a2
|
||||
c->vadd_bc(DEST::x, BC::z, vf6, vf6, vf6); // vaddz.x vf6, vf6, vf6
|
||||
c->lui(a2, -15232); // lui a2, -15232
|
||||
c->mtc1(f4, a2); // mtc1 f4, a2
|
||||
c->vsqrt(vf6, BC::x); // vsqrt Q, vf6.x
|
||||
c->mov128_gpr_vf(a2, vf5); // qmfc2.i a2, vf5
|
||||
c->vwaitq(); // vwaitq
|
||||
c->lwc1(f1, 12, s5); // lwc1 f1, 12(s5)
|
||||
c->vaddq(DEST::x, vf6, vf0); // vaddq.x vf6, vf0, Q
|
||||
c->vmove(DEST::xyzw, vf10, vf6); // vmove.xyzw vf10, vf6
|
||||
if (((s64)c->sgpr64(a2)) < 0) { // bltzl a2, L33
|
||||
c->vsub(DEST::xyzw, vf10, vf0, vf10); // vsub.xyzw vf10, vf0, vf10
|
||||
goto block_9;
|
||||
}
|
||||
|
||||
block_9:
|
||||
c->mov128_gpr_vf(a2, vf10); // qmfc2.i a2, vf10
|
||||
c->mtc1(f2, a2); // mtc1 f2, a2
|
||||
c->subs(f2, f2, f1); // sub.s f2, f2, f1
|
||||
cop1_bc = c->fprs[f5] < c->fprs[f2]; // c.lt.s f5, f2
|
||||
bc = cop1_bc; // bc1t L31
|
||||
c->vdiv(vf0, BC::w, vf6, BC::x); // vdiv Q, vf0.w, vf6.x
|
||||
if (bc) {goto block_1;} // branch non-likely
|
||||
|
||||
cop1_bc = c->fprs[f3] <= c->fprs[f2]; // c.le.s f3, f2
|
||||
bc = cop1_bc; // bc1t L31
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_1;} // branch non-likely
|
||||
|
||||
cop1_bc = c->fprs[f2] <= c->fprs[f4]; // c.le.s f2, f4
|
||||
bc = cop1_bc; // bc1t L31
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_1;} // branch non-likely
|
||||
|
||||
c->vwaitq(); // vwaitq
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmulq(DEST::xyzw, vf11, vf4); // vmulq.xyzw vf11, vf4, Q
|
||||
c->lui(a2, 16180); // lui a2, 16180
|
||||
c->ori(a2, a2, 65012); // ori a2, a2, 65012
|
||||
c->mtc1(f6, a2); // mtc1 f6, a2
|
||||
c->vmul(DEST::xyzw, vf5, vf11, vf1); // vmul.xyzw vf5, vf11, vf1
|
||||
c->vadd_bc(DEST::x, BC::y, vf5, vf5, vf5); // vaddy.x vf5, vf5, vf5
|
||||
c->vadd_bc(DEST::x, BC::z, vf5, vf5, vf5); // vaddz.x vf5, vf5, vf5
|
||||
c->mov128_gpr_vf(a2, vf5); // qmfc2.i a2, vf5
|
||||
c->mtc1(f7, a2); // mtc1 f7, a2
|
||||
cop1_bc = c->fprs[f7] < c->fprs[f6]; // c.lt.s f7, f6
|
||||
bc = cop1_bc; // bc1t L31
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_1;} // branch non-likely
|
||||
|
||||
c->mfc1(s3, f2); // mfc1 s3, f2
|
||||
c->sqc2(vf7, 0, gp); // sqc2 vf7, 0(gp)
|
||||
c->sqc2(vf8, 16, gp); // sqc2 vf8, 16(gp)
|
||||
c->sqc2(vf9, 32, gp); // sqc2 vf9, 32(gp)
|
||||
c->sqc2(vf2, 48, gp); // sqc2 vf2, 48(gp)
|
||||
c->sqc2(vf1, 64, gp); // sqc2 vf1, 64(gp)
|
||||
//beq r0, r0, L31 // beq r0, r0, L31
|
||||
c->sw(a1, 80, gp); // sw a1, 80(gp)
|
||||
goto block_1; // branch always
|
||||
|
||||
|
||||
block_14:
|
||||
c->mov64(v0, s3); // or v0, s3, r0
|
||||
c->ld(ra, 0, sp); // ld ra, 0(sp)
|
||||
c->lq(gp, 144, sp); // lq gp, 144(sp)
|
||||
c->lq(s5, 128, sp); // lq s5, 128(sp)
|
||||
c->lq(s4, 112, sp); // lq s4, 112(sp)
|
||||
c->lq(s3, 96, sp); // lq s3, 96(sp)
|
||||
c->lq(s2, 80, sp); // lq s2, 80(sp)
|
||||
c->lq(s1, 64, sp); // lq s1, 64(sp)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 160); // daddiu sp, sp, 160
|
||||
goto end_of_function; // return
|
||||
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
end_of_function:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
cache.closest_pt_in_triangle = intern_from_c(-1, 0, "closest-pt-in-triangle").c();
|
||||
gLinkedFunctionTable.reg("(method 11 collide-mesh)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_11_collide_mesh
|
||||
} // namespace Mips2C
|
||||
// add method_11_collide_mesh::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_11_collide_mesh { extern void link(); }
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_13_collide_mesh {
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
c->lwu(v1, 12, a0); // lwu v1, 12(a0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lwu(a0, 8, a0); // lwu a0, 8(a0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf1, 0, a1); // lqc2 vf1, 0(a1)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf2, 16, a1); // lqc2 vf2, 16(a1)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf3, 32, a1); // lqc2 vf3, 32(a1)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf4, 48, a1); // lqc2 vf4, 48(a1)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf5, 0, v1); // lqc2 vf5, 0(v1)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf6, 16, v1); // lqc2 vf6, 16(v1)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf7, 32, v1); // lqc2 vf7, 32(v1)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lqc2(vf8, 48, v1); // lqc2 vf8, 48(v1)
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
c->lqc2(vf9, 64, v1); // lqc2 vf9, 64(v1)
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf5); // vmaddax.xyzw acc, vf1, vf5
|
||||
c->lqc2(vf10, 80, v1); // lqc2 vf10, 80(v1)
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf5); // vmadday.xyzw acc, vf2, vf5
|
||||
c->lqc2(vf11, 96, v1); // lqc2 vf11, 96(v1)
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf5, vf3, vf5); // vmaddz.xyzw vf5, vf3, vf5
|
||||
c->lqc2(vf12, 112, v1); // lqc2 vf12, 112(v1)
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf6); // vmaddax.xyzw acc, vf1, vf6
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf6); // vmadday.xyzw acc, vf2, vf6
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf6, vf3, vf6); // vmaddz.xyzw vf6, vf3, vf6
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf7); // vmaddax.xyzw acc, vf1, vf7
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf7); // vmadday.xyzw acc, vf2, vf7
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf7, vf3, vf7); // vmaddz.xyzw vf7, vf3, vf7
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf8); // vmaddax.xyzw acc, vf1, vf8
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf8); // vmadday.xyzw acc, vf2, vf8
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf8, vf3, vf8); // vmaddz.xyzw vf8, vf3, vf8
|
||||
// nop // sll r0, r0, 0
|
||||
c->vftoi0(DEST::xyzw, vf13, vf5); // vftoi0.xyzw vf13, vf5
|
||||
c->sqc2(vf5, 0, a2); // sqc2 vf5, 0(a2)
|
||||
c->vftoi0(DEST::xyzw, vf14, vf6); // vftoi0.xyzw vf14, vf6
|
||||
c->sqc2(vf6, 32, a2); // sqc2 vf6, 32(a2)
|
||||
c->vftoi0(DEST::xyzw, vf15, vf7); // vftoi0.xyzw vf15, vf7
|
||||
c->sqc2(vf7, 64, a2); // sqc2 vf7, 64(a2)
|
||||
c->vftoi0(DEST::xyzw, vf16, vf8); // vftoi0.xyzw vf16, vf8
|
||||
c->sqc2(vf8, 96, a2); // sqc2 vf8, 96(a2)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sqc2(vf13, 16, a2); // sqc2 vf13, 16(a2)
|
||||
c->daddiu(a0, a0, -4); // daddiu a0, a0, -4
|
||||
c->sqc2(vf14, 48, a2); // sqc2 vf14, 48(a2)
|
||||
c->daddiu(v1, v1, 128); // daddiu v1, v1, 128
|
||||
c->sqc2(vf15, 80, a2); // sqc2 vf15, 80(a2)
|
||||
bc = ((s64)c->sgpr64(a0)) <= 0; // blez a0, L25
|
||||
c->sqc2(vf16, 112, a2); // sqc2 vf16, 112(a2)
|
||||
if (bc) {goto block_3;} // branch non-likely
|
||||
|
||||
|
||||
block_1:
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
c->lqc2(vf5, 0, v1); // lqc2 vf5, 0(v1)
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf9); // vmaddax.xyzw acc, vf1, vf9
|
||||
c->lqc2(vf6, 16, v1); // lqc2 vf6, 16(v1)
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf9); // vmadday.xyzw acc, vf2, vf9
|
||||
c->lqc2(vf7, 32, v1); // lqc2 vf7, 32(v1)
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf9, vf3, vf9); // vmaddz.xyzw vf9, vf3, vf9
|
||||
c->lqc2(vf8, 48, v1); // lqc2 vf8, 48(v1)
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf10); // vmaddax.xyzw acc, vf1, vf10
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf10); // vmadday.xyzw acc, vf2, vf10
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf3, vf10); // vmaddz.xyzw vf10, vf3, vf10
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf11); // vmaddax.xyzw acc, vf1, vf11
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf11); // vmadday.xyzw acc, vf2, vf11
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf3, vf11); // vmaddz.xyzw vf11, vf3, vf11
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf12); // vmaddax.xyzw acc, vf1, vf12
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf12); // vmadday.xyzw acc, vf2, vf12
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf12, vf3, vf12); // vmaddz.xyzw vf12, vf3, vf12
|
||||
// nop // sll r0, r0, 0
|
||||
c->vftoi0(DEST::xyzw, vf17, vf9); // vftoi0.xyzw vf17, vf9
|
||||
c->sqc2(vf9, 128, a2); // sqc2 vf9, 128(a2)
|
||||
c->vftoi0(DEST::xyzw, vf18, vf10); // vftoi0.xyzw vf18, vf10
|
||||
c->sqc2(vf10, 160, a2); // sqc2 vf10, 160(a2)
|
||||
c->vftoi0(DEST::xyzw, vf19, vf11); // vftoi0.xyzw vf19, vf11
|
||||
c->sqc2(vf11, 192, a2); // sqc2 vf11, 192(a2)
|
||||
c->vftoi0(DEST::xyzw, vf20, vf12); // vftoi0.xyzw vf20, vf12
|
||||
c->sqc2(vf12, 224, a2); // sqc2 vf12, 224(a2)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sqc2(vf17, 144, a2); // sqc2 vf17, 144(a2)
|
||||
c->daddiu(a0, a0, -4); // daddiu a0, a0, -4
|
||||
c->sqc2(vf18, 176, a2); // sqc2 vf18, 176(a2)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sqc2(vf19, 208, a2); // sqc2 vf19, 208(a2)
|
||||
bc = ((s64)c->sgpr64(a0)) <= 0; // blez a0, L25
|
||||
c->sqc2(vf20, 240, a2); // sqc2 vf20, 240(a2)
|
||||
if (bc) {goto block_3;} // branch non-likely
|
||||
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
c->lqc2(vf9, 64, v1); // lqc2 vf9, 64(v1)
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf5); // vmaddax.xyzw acc, vf1, vf5
|
||||
c->lqc2(vf10, 80, v1); // lqc2 vf10, 80(v1)
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf5); // vmadday.xyzw acc, vf2, vf5
|
||||
c->lqc2(vf11, 96, v1); // lqc2 vf11, 96(v1)
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf5, vf3, vf5); // vmaddz.xyzw vf5, vf3, vf5
|
||||
c->lqc2(vf12, 112, v1); // lqc2 vf12, 112(v1)
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
c->daddiu(a2, a2, 256); // daddiu a2, a2, 256
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf6); // vmaddax.xyzw acc, vf1, vf6
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf6); // vmadday.xyzw acc, vf2, vf6
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf6, vf3, vf6); // vmaddz.xyzw vf6, vf3, vf6
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf7); // vmaddax.xyzw acc, vf1, vf7
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf7); // vmadday.xyzw acc, vf2, vf7
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf7, vf3, vf7); // vmaddz.xyzw vf7, vf3, vf7
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf8); // vmaddax.xyzw acc, vf1, vf8
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf8); // vmadday.xyzw acc, vf2, vf8
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmadd_bc(DEST::xyzw, BC::z, vf8, vf3, vf8); // vmaddz.xyzw vf8, vf3, vf8
|
||||
// nop // sll r0, r0, 0
|
||||
c->vftoi0(DEST::xyzw, vf13, vf5); // vftoi0.xyzw vf13, vf5
|
||||
c->sqc2(vf5, 0, a2); // sqc2 vf5, 0(a2)
|
||||
c->vftoi0(DEST::xyzw, vf14, vf6); // vftoi0.xyzw vf14, vf6
|
||||
c->sqc2(vf6, 32, a2); // sqc2 vf6, 32(a2)
|
||||
c->vftoi0(DEST::xyzw, vf15, vf7); // vftoi0.xyzw vf15, vf7
|
||||
c->sqc2(vf7, 64, a2); // sqc2 vf7, 64(a2)
|
||||
c->vftoi0(DEST::xyzw, vf16, vf8); // vftoi0.xyzw vf16, vf8
|
||||
c->sqc2(vf8, 96, a2); // sqc2 vf8, 96(a2)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sqc2(vf13, 16, a2); // sqc2 vf13, 16(a2)
|
||||
c->daddiu(a0, a0, -4); // daddiu a0, a0, -4
|
||||
c->sqc2(vf14, 48, a2); // sqc2 vf14, 48(a2)
|
||||
c->daddiu(v1, v1, 128); // daddiu v1, v1, 128
|
||||
c->sqc2(vf15, 80, a2); // sqc2 vf15, 80(a2)
|
||||
bc = ((s64)c->sgpr64(a0)) > 0; // bgtz a0, L24
|
||||
c->sqc2(vf16, 112, a2); // sqc2 vf16, 112(a2)
|
||||
if (bc) {goto block_1;} // branch non-likely
|
||||
|
||||
|
||||
block_3:
|
||||
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
|
||||
// nop // sll r0, r0, 0
|
||||
end_of_function:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
gLinkedFunctionTable.reg("(method 13 collide-mesh)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_13_collide_mesh
|
||||
} // namespace Mips2C
|
||||
// add method_13_collide_mesh::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_13_collide_mesh { extern void link(); }
|
||||
@@ -4,206 +4,121 @@
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace calc_animation_from_spr {
|
||||
struct Cache {
|
||||
void* fake_scratchpad_data; // *fake-scratchpad-data*
|
||||
void* clear_frame_accumulator; // clear-frame-accumulator
|
||||
void* decompress_fixed_data_to_accumulator; // decompress-fixed-data-to-accumulator
|
||||
void* decompress_frame_data_pair_to_accumulator; // decompress-frame-data-pair-to-accumulator
|
||||
void* decompress_frame_data_to_accumulator; // decompress-frame-data-to-accumulator
|
||||
void* normalize_frame_quaternions; // normalize-frame-quaternions
|
||||
} cache;
|
||||
|
||||
namespace cspace_parented_transformq_joint {
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
c->mov64(v1, a1); // or v1, a1, r0
|
||||
c->daddiu(sp, sp, -192); // daddiu sp, sp, -192
|
||||
c->sq(s0, 0, sp); // sq s0, 0(sp)
|
||||
c->sq(s1, 16, sp); // sq s1, 16(sp)
|
||||
c->sq(s2, 32, sp); // sq s2, 32(sp)
|
||||
c->sq(s3, 48, sp); // sq s3, 48(sp)
|
||||
c->sq(s4, 64, sp); // sq s4, 64(sp)
|
||||
c->sq(s5, 80, sp); // sq s5, 80(sp)
|
||||
c->sq(s6, 96, sp); // sq s6, 96(sp)
|
||||
c->sq(t8, 112, sp); // sq t8, 112(sp)
|
||||
c->sq(t9, 128, sp); // sq t9, 128(sp)
|
||||
c->sq(gp, 144, sp); // sq gp, 144(sp)
|
||||
c->sq(fp, 160, sp); // sq fp, 160(sp)
|
||||
c->sq(ra, 176, sp); // sq ra, 176(sp)
|
||||
c->daddiu(sp, sp, -16); // daddiu sp, sp, -16
|
||||
c->mov128_vf_gpr(vf15, r0); // qmtc2.i vf15, r0
|
||||
c->sw(a1, 0, sp); // sw a1, 0(sp)
|
||||
get_fake_spad_addr2(v1, cache.fake_scratchpad_data, 0, c);// lui v1, 28672
|
||||
c->lw(s1, 2384, v1); // lw s1, 2384(v1)
|
||||
c->daddiu(t7, v1, 1808); // daddiu t7, v1, 1808
|
||||
c->lui(s0, 4096); // lui s0, 4096
|
||||
c->daddiu(t1, v1, 7328); // daddiu t1, v1, 7328
|
||||
bc = c->sgpr64(s1) == 0; // beq s1, r0, L20
|
||||
c->ori(s0, s0, 54272); // ori s0, s0, 54272
|
||||
if (bc) {goto block_12;} // branch non-likely
|
||||
|
||||
c->lw(t2, 0, t7); // lw t2, 0(t7)
|
||||
c->addiu(t3, r0, 7392); // addiu t3, r0, 7392
|
||||
c->lw(t4, 4, t7); // lw t4, 4(t7)
|
||||
c->addiu(v1, r0, 256); // addiu v1, r0, 256
|
||||
c->sw(t2, 16, s0); // sw t2, 16(s0)
|
||||
c->vadd_bc(DEST::xyzw, BC::w, vf14, vf15, vf0); // vaddw.xyzw vf14, vf15, vf0
|
||||
c->sw(t3, 128, s0); // sw t3, 128(s0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sw(t4, 32, s0); // sw t4, 32(s0)
|
||||
// Unknown instr: sync.l
|
||||
c->sw(v1, 0, s0); // sw v1, 0(s0)
|
||||
// Unknown instr: sync.l
|
||||
c->load_symbol2(t9, cache.clear_frame_accumulator);// lw t9, clear-frame-accumulator(s7)
|
||||
c->vadd(DEST::yz, vf14, vf14, vf14); // vadd.yz vf14, vf14, vf14
|
||||
c->lw(s2, 0, sp); // lw s2, 0(sp)
|
||||
// nop // sll r0, r0, 0
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->vadd(DEST::yz, vf14, vf14, vf14); // vadd.yz vf14, vf14, vf14
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
|
||||
block_2:
|
||||
c->lw(v1, 0, s0); // lw v1, 0(s0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->andi(v1, v1, 256); // andi v1, v1, 256
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(v1) != 0; // bne v1, r0, L16
|
||||
c->lw(a3, 0, a0); // lw a3, 0(a0)
|
||||
c->lui(v1, 16256); // lui v1, 16256
|
||||
c->lqc2(vf5, 16, a1); // lqc2 vf5, 16(a1)
|
||||
c->mtc1(f0, v1); // mtc1 f0, v1
|
||||
c->lw(t0, 16, a3); // lw t0, 16(a3)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lw(a2, 16, a0); // lw a2, 16(a0)
|
||||
c->vadd(DEST::xyzw, vf6, vf5, vf5); // vadd.xyzw vf6, vf5, vf5
|
||||
c->lwc1(f1, 64, t0); // lwc1 f1, 64(t0)
|
||||
c->vadd_bc(DEST::x, BC::w, vf2, vf0, vf5); // vaddw.x vf2, vf0, vf5
|
||||
c->lqc2(vf15, 0, a1); // lqc2 vf15, 0(a1)
|
||||
c->vadd_bc(DEST::y, BC::z, vf2, vf0, vf5); // vaddz.y vf2, vf0, vf5
|
||||
c->lqc2(vf1, 32, a1); // lqc2 vf1, 32(a1)
|
||||
c->divs(f4, f0, f1); // div.s f4, f0, f1
|
||||
c->lqc2(vf7, 0, t0); // lqc2 vf7, 0(t0)
|
||||
c->vsub_bc(DEST::z, BC::y, vf2, vf0, vf5); // vsuby.z vf2, vf0, vf5
|
||||
c->lqc2(vf8, 16, t0); // lqc2 vf8, 16(t0)
|
||||
c->vsub_bc(DEST::w, BC::w, vf2, vf0, vf0); // vsubw.w vf2, vf0, vf0
|
||||
c->lqc2(vf9, 32, t0); // lqc2 vf9, 32(t0)
|
||||
c->vsub_bc(DEST::x, BC::z, vf3, vf0, vf5); // vsubz.x vf3, vf0, vf5
|
||||
c->lqc2(vf10, 48, t0); // lqc2 vf10, 48(t0)
|
||||
c->vadd_bc(DEST::y, BC::w, vf3, vf0, vf5); // vaddw.y vf3, vf0, vf5
|
||||
c->lwc1(f2, 68, t0); // lwc1 f2, 68(t0)
|
||||
c->vadd_bc(DEST::z, BC::x, vf3, vf0, vf5); // vaddx.z vf3, vf0, vf5
|
||||
c->sqc2(vf1, 64, a2); // sqc2 vf1, 64(a2)
|
||||
c->vsub_bc(DEST::w, BC::w, vf3, vf0, vf0); // vsubw.w vf3, vf0, vf0
|
||||
c->lwc1(f3, 72, t0); // lwc1 f3, 72(t0)
|
||||
c->vadd_bc(DEST::x, BC::y, vf4, vf0, vf5); // vaddy.x vf4, vf0, vf5
|
||||
c->lw(v1, 76, t0); // lw v1, 76(t0)
|
||||
c->vsub_bc(DEST::y, BC::x, vf4, vf0, vf5); // vsubx.y vf4, vf0, vf5
|
||||
c->mfc1(t1, f4); // mfc1 t1, f4
|
||||
c->vadd_bc(DEST::z, BC::w, vf4, vf0, vf5); // vaddw.z vf4, vf0, vf5
|
||||
c->divs(f4, f0, f2); // div.s f4, f0, f2
|
||||
c->vsub_bc(DEST::w, BC::w, vf4, vf0, vf0); // vsubw.w vf4, vf0, vf0
|
||||
c->vopmula(vf6, vf2); // vopmula.xyz acc, vf6, vf2
|
||||
c->vopmsub(vf2, vf2, vf6); // vopmsub.xyz vf2, vf2, vf6
|
||||
c->vopmula(vf6, vf3); // vopmula.xyz acc, vf6, vf3
|
||||
c->vopmsub(vf3, vf3, vf6); // vopmsub.xyz vf3, vf3, vf6
|
||||
c->vopmula(vf6, vf4); // vopmula.xyz acc, vf6, vf4
|
||||
c->vopmsub(vf4, vf4, vf6); // vopmsub.xyz vf4, vf4, vf6
|
||||
c->vadd_bc(DEST::x, BC::w, vf2, vf2, vf0); // vaddw.x vf2, vf2, vf0
|
||||
c->vadd_bc(DEST::y, BC::w, vf3, vf3, vf0); // vaddw.y vf3, vf3, vf0
|
||||
c->vadd_bc(DEST::z, BC::w, vf4, vf4, vf0); // vaddw.z vf4, vf4, vf0
|
||||
c->mfc1(t2, f4); // mfc1 t2, f4
|
||||
bc = c->sgpr64(v1) != 0; // bne v1, r0, L64
|
||||
c->divs(f4, f0, f3); // div.s f4, f0, f3
|
||||
if (bc) {goto block_2;} // branch non-likely
|
||||
|
||||
c->lw(t2, 8, t7); // lw t2, 8(t7)
|
||||
c->addiu(t3, r0, 9600); // addiu t3, r0, 9600
|
||||
c->lw(t4, 12, t7); // lw t4, 12(t7)
|
||||
c->addiu(v1, r0, 256); // addiu v1, r0, 256
|
||||
c->sw(t2, 16, s0); // sw t2, 16(s0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sw(t3, 128, s0); // sw t3, 128(s0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sw(t4, 32, s0); // sw t4, 32(s0)
|
||||
// Unknown instr: sync.l
|
||||
c->sw(v1, 0, s0); // sw v1, 0(s0)
|
||||
// Unknown instr: sync.l
|
||||
c->lw(a2, 16, t7); // lw a2, 16(t7)
|
||||
get_fake_spad_addr2(a1, cache.fake_scratchpad_data, 0, c);// lui a1, 28672
|
||||
c->load_symbol2(t9, cache.decompress_fixed_data_to_accumulator);// lw t9, decompress-fixed-data-to-accumulator(s7)
|
||||
c->daddiu(a1, a1, 7392); // daddiu a1, a1, 7392
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->daddiu(s1, s1, -1); // daddiu s1, s1, -1
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
|
||||
block_4:
|
||||
c->lw(v1, 0, s0); // lw v1, 0(s0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->andi(v1, v1, 256); // andi v1, v1, 256
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(v1) != 0; // bne v1, r0, L17
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_4;} // branch non-likely
|
||||
|
||||
bc = c->sgpr64(s1) == 0; // beq s1, r0, L18
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_7;} // branch non-likely
|
||||
|
||||
c->lw(t2, 24, t7); // lw t2, 24(t7)
|
||||
c->addiu(t3, r0, 7392); // addiu t3, r0, 7392
|
||||
c->lw(t4, 28, t7); // lw t4, 28(t7)
|
||||
c->addiu(v1, r0, 256); // addiu v1, r0, 256
|
||||
c->sw(t2, 16, s0); // sw t2, 16(s0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sw(t3, 128, s0); // sw t3, 128(s0)
|
||||
// nop // sll r0, r0, 0
|
||||
c->sw(t4, 32, s0); // sw t4, 32(s0)
|
||||
// Unknown instr: sync.l
|
||||
c->sw(v1, 0, s0); // sw v1, 0(s0)
|
||||
// Unknown instr: sync.l
|
||||
|
||||
block_7:
|
||||
c->lw(t0, 20, t7); // lw t0, 20(t7)
|
||||
get_fake_spad_addr2(a1, cache.fake_scratchpad_data, 0, c);// lui a1, 28672
|
||||
c->lw(a2, 16, t7); // lw a2, 16(t7)
|
||||
c->daddiu(a1, a1, 9600); // daddiu a1, a1, 9600
|
||||
bc = c->sgpr64(t0) == 0; // beq t0, r0, L19
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_10;} // branch non-likely
|
||||
|
||||
c->lw(a3, 12, t7); // lw a3, 12(t7)
|
||||
// nop // sll r0, r0, 0
|
||||
c->load_symbol2(t9, cache.decompress_frame_data_pair_to_accumulator);// lw t9, decompress-frame-data-pair-to-accumulator(s7)
|
||||
// nop // sll r0, r0, 0
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(a3, a3, 3); // sll a3, a3, 3
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
bc = c->sgpr64(s1) != 0; // bne s1, r0, L16
|
||||
c->daddiu(t7, t7, 24); // daddiu t7, t7, 24
|
||||
if (bc) {goto block_2;} // branch non-likely
|
||||
|
||||
c->load_symbol2(t9, cache.normalize_frame_quaternions);// lw t9, normalize-frame-quaternions(s7)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lw(s2, 0, sp); // lw s2, 0(sp)
|
||||
// nop // sll r0, r0, 0
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
// nop // sll r0, r0, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->daddiu(sp, sp, 16); // daddiu sp, sp, 16
|
||||
// nop // sll r0, r0, 0
|
||||
c->lq(s0, 0, sp); // lq s0, 0(sp)
|
||||
c->lq(s1, 16, sp); // lq s1, 16(sp)
|
||||
c->lq(s2, 32, sp); // lq s2, 32(sp)
|
||||
c->lq(s3, 48, sp); // lq s3, 48(sp)
|
||||
c->lq(s4, 64, sp); // lq s4, 64(sp)
|
||||
c->lq(s5, 80, sp); // lq s5, 80(sp)
|
||||
c->lq(s6, 96, sp); // lq s6, 96(sp)
|
||||
c->lq(t8, 112, sp); // lq t8, 112(sp)
|
||||
c->lq(t9, 128, sp); // lq t9, 128(sp)
|
||||
c->lq(gp, 144, sp); // lq gp, 144(sp)
|
||||
c->lq(ra, 176, sp); // lq ra, 176(sp)
|
||||
c->lq(fp, 160, sp); // lq fp, 160(sp)
|
||||
c->vmul_bc(DEST::xyzw, BC::x, vf2, vf2, vf1); // vmulx.xyzw vf2, vf2, vf1
|
||||
c->vmul_bc(DEST::xyzw, BC::y, vf3, vf3, vf1); // vmuly.xyzw vf3, vf3, vf1
|
||||
c->vmul_bc(DEST::xyzw, BC::z, vf4, vf4, vf1); // vmulz.xyzw vf4, vf4, vf1
|
||||
c->vmula_bc(DEST::xyzw, BC::x, vf7, vf2); // vmulax.xyzw acc, vf7, vf2
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf8, vf2); // vmadday.xyzw acc, vf8, vf2
|
||||
c->vmadda_bc(DEST::xyzw, BC::z, vf9, vf2); // vmaddaz.xyzw acc, vf9, vf2
|
||||
c->vmadd_bc(DEST::xyzw, BC::w, vf11, vf10, vf2); // vmaddw.xyzw vf11, vf10, vf2
|
||||
c->vmula_bc(DEST::xyzw, BC::x, vf7, vf3); // vmulax.xyzw acc, vf7, vf3
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf8, vf3); // vmadday.xyzw acc, vf8, vf3
|
||||
c->vmadda_bc(DEST::xyzw, BC::z, vf9, vf3); // vmaddaz.xyzw acc, vf9, vf3
|
||||
c->vmadd_bc(DEST::xyzw, BC::w, vf12, vf10, vf3); // vmaddw.xyzw vf12, vf10, vf3
|
||||
c->vmula_bc(DEST::xyzw, BC::x, vf7, vf4); // vmulax.xyzw acc, vf7, vf4
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf8, vf4); // vmadday.xyzw acc, vf8, vf4
|
||||
c->vmadda_bc(DEST::xyzw, BC::z, vf9, vf4); // vmaddaz.xyzw acc, vf9, vf4
|
||||
c->vmadd_bc(DEST::xyzw, BC::w, vf13, vf10, vf4); // vmaddw.xyzw vf13, vf10, vf4
|
||||
c->vmula_bc(DEST::xyzw, BC::x, vf7, vf15); // vmulax.xyzw acc, vf7, vf15
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf8, vf15); // vmadday.xyzw acc, vf8, vf15
|
||||
c->vmadda_bc(DEST::xyzw, BC::z, vf9, vf15); // vmaddaz.xyzw acc, vf9, vf15
|
||||
c->vmadd_bc(DEST::xyzw, BC::w, vf14, vf10, vf0); // vmaddw.xyzw vf14, vf10, vf0
|
||||
c->sqc2(vf11, 0, a2); // sqc2 vf11, 0(a2)
|
||||
c->sqc2(vf12, 16, a2); // sqc2 vf12, 16(a2)
|
||||
c->sqc2(vf13, 32, a2); // sqc2 vf13, 32(a2)
|
||||
c->sqc2(vf14, 48, a2); // sqc2 vf14, 48(a2)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 192); // daddiu sp, sp, 192
|
||||
// nop // sll r0, r0, 0
|
||||
goto end_of_function; // return
|
||||
|
||||
|
||||
block_10:
|
||||
c->load_symbol2(t9, cache.decompress_frame_data_to_accumulator);// lw t9, decompress-frame-data-to-accumulator(s7)
|
||||
// nop // sll r0, r0, 0
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
// nop // sll r0, r0, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
bc = c->sgpr64(s1) != 0; // bne s1, r0, L16
|
||||
c->daddiu(t7, t7, 24); // daddiu t7, t7, 24
|
||||
if (bc) {goto block_2;} // branch non-likely
|
||||
|
||||
c->load_symbol2(t9, cache.normalize_frame_quaternions);// lw t9, normalize-frame-quaternions(s7)
|
||||
// nop // sll r0, r0, 0
|
||||
c->lw(s2, 0, sp); // lw s2, 0(sp)
|
||||
// nop // sll r0, r0, 0
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
// nop // sll r0, r0, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
|
||||
block_12:
|
||||
c->daddiu(sp, sp, 16); // daddiu sp, sp, 16
|
||||
// nop // sll r0, r0, 0
|
||||
c->lq(s0, 0, sp); // lq s0, 0(sp)
|
||||
c->lq(s1, 16, sp); // lq s1, 16(sp)
|
||||
c->lq(s2, 32, sp); // lq s2, 32(sp)
|
||||
c->lq(s3, 48, sp); // lq s3, 48(sp)
|
||||
c->lq(s4, 64, sp); // lq s4, 64(sp)
|
||||
c->lq(s5, 80, sp); // lq s5, 80(sp)
|
||||
c->lq(s6, 96, sp); // lq s6, 96(sp)
|
||||
c->lq(t8, 112, sp); // lq t8, 112(sp)
|
||||
c->lq(t9, 128, sp); // lq t9, 128(sp)
|
||||
c->lq(gp, 144, sp); // lq gp, 144(sp)
|
||||
c->lq(ra, 176, sp); // lq ra, 176(sp)
|
||||
c->lq(fp, 160, sp); // lq fp, 160(sp)
|
||||
block_2:
|
||||
c->pextlw(t1, t2, t1); // pextlw t1, t2, t1
|
||||
c->vmul_bc(DEST::xyzw, BC::x, vf2, vf2, vf1); // vmulx.xyzw vf2, vf2, vf1
|
||||
c->vmul_bc(DEST::xyzw, BC::y, vf3, vf3, vf1); // vmuly.xyzw vf3, vf3, vf1
|
||||
c->vmul_bc(DEST::xyzw, BC::z, vf4, vf4, vf1); // vmulz.xyzw vf4, vf4, vf1
|
||||
c->mfc1(t3, f4); // mfc1 t3, f4
|
||||
c->pcpyld(t1, t3, t1); // pcpyld t1, t3, t1
|
||||
c->mov128_vf_gpr(vf16, t1); // qmtc2.i vf16, t1
|
||||
c->vmul(DEST::xyzw, vf2, vf2, vf16); // vmul.xyzw vf2, vf2, vf16
|
||||
c->vmul(DEST::xyzw, vf3, vf3, vf16); // vmul.xyzw vf3, vf3, vf16
|
||||
c->vmul(DEST::xyzw, vf4, vf4, vf16); // vmul.xyzw vf4, vf4, vf16
|
||||
c->vmula_bc(DEST::xyzw, BC::x, vf7, vf2); // vmulax.xyzw acc, vf7, vf2
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf8, vf2); // vmadday.xyzw acc, vf8, vf2
|
||||
c->vmadda_bc(DEST::xyzw, BC::z, vf9, vf2); // vmaddaz.xyzw acc, vf9, vf2
|
||||
c->vmadd_bc(DEST::xyzw, BC::w, vf11, vf10, vf2); // vmaddw.xyzw vf11, vf10, vf2
|
||||
c->vmula_bc(DEST::xyzw, BC::x, vf7, vf3); // vmulax.xyzw acc, vf7, vf3
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf8, vf3); // vmadday.xyzw acc, vf8, vf3
|
||||
c->vmadda_bc(DEST::xyzw, BC::z, vf9, vf3); // vmaddaz.xyzw acc, vf9, vf3
|
||||
c->vmadd_bc(DEST::xyzw, BC::w, vf12, vf10, vf3); // vmaddw.xyzw vf12, vf10, vf3
|
||||
c->vmula_bc(DEST::xyzw, BC::x, vf7, vf4); // vmulax.xyzw acc, vf7, vf4
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf8, vf4); // vmadday.xyzw acc, vf8, vf4
|
||||
c->vmadda_bc(DEST::xyzw, BC::z, vf9, vf4); // vmaddaz.xyzw acc, vf9, vf4
|
||||
c->vmadd_bc(DEST::xyzw, BC::w, vf13, vf10, vf4); // vmaddw.xyzw vf13, vf10, vf4
|
||||
c->vmula_bc(DEST::xyzw, BC::x, vf7, vf15); // vmulax.xyzw acc, vf7, vf15
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf8, vf15); // vmadday.xyzw acc, vf8, vf15
|
||||
c->vmadda_bc(DEST::xyzw, BC::z, vf9, vf15); // vmaddaz.xyzw acc, vf9, vf15
|
||||
c->vmadd_bc(DEST::xyzw, BC::w, vf14, vf10, vf0); // vmaddw.xyzw vf14, vf10, vf0
|
||||
c->sqc2(vf11, 0, a2); // sqc2 vf11, 0(a2)
|
||||
c->sqc2(vf12, 16, a2); // sqc2 vf12, 16(a2)
|
||||
c->sqc2(vf13, 32, a2); // sqc2 vf13, 32(a2)
|
||||
c->sqc2(vf14, 48, a2); // sqc2 vf14, 48(a2)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 192); // daddiu sp, sp, 192
|
||||
// nop // sll r0, r0, 0
|
||||
goto end_of_function; // return
|
||||
|
||||
//jr ra // jr ra
|
||||
@@ -218,14 +133,11 @@ end_of_function:
|
||||
}
|
||||
|
||||
void link() {
|
||||
cache.fake_scratchpad_data = intern_from_c(-1, 0, "*fake-scratchpad-data*").c();
|
||||
cache.clear_frame_accumulator = intern_from_c(-1, 0, "clear-frame-accumulator").c();
|
||||
cache.decompress_fixed_data_to_accumulator = intern_from_c(-1, 0, "decompress-fixed-data-to-accumulator").c();
|
||||
cache.decompress_frame_data_pair_to_accumulator = intern_from_c(-1, 0, "decompress-frame-data-pair-to-accumulator").c();
|
||||
cache.decompress_frame_data_to_accumulator = intern_from_c(-1, 0, "decompress-frame-data-to-accumulator").c();
|
||||
cache.normalize_frame_quaternions = intern_from_c(-1, 0, "normalize-frame-quaternions").c();
|
||||
gLinkedFunctionTable.reg("calc-animation-from-spr", execute, 512);
|
||||
gLinkedFunctionTable.reg("cspace<-parented-transformq-joint!", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace calc_animation_from_spr
|
||||
} // namespace Mips2C
|
||||
} // namespace cspace_parented_transformq_joint
|
||||
} // namespace Mips2C
|
||||
// add cspace_parented_transformq_joint::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace cspace_parented_transformq_joint { extern void link(); }
|
||||
+504
-158
@@ -342,153 +342,9 @@ void link() {
|
||||
|
||||
} // namespace method_32_sky_work
|
||||
} // namespace Mips2C
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_31_sky_work {
|
||||
struct Cache {
|
||||
void* z_vector; // *z-vector*
|
||||
void* vector_normalize; // vector-normalize!
|
||||
} cache;
|
||||
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
c->daddiu(sp, sp, -80); // daddiu sp, sp, -80
|
||||
c->sd(ra, 0, sp); // sd ra, 0(sp)
|
||||
c->sq(s4, 32, sp); // sq s4, 32(sp)
|
||||
c->sq(s5, 48, sp); // sq s5, 48(sp)
|
||||
c->sq(gp, 64, sp); // sq gp, 64(sp)
|
||||
c->mov64(gp, a0); // or gp, a0, r0
|
||||
c->mov64(s4, a1); // or s4, a1, r0
|
||||
c->mov64(s5, a2); // or s5, a2, r0
|
||||
c->daddiu(v1, s4, 32); // daddiu v1, s4, 32
|
||||
c->mov64(a0, s5); // or a0, s5, r0
|
||||
c->lq(a0, 0, a0); // lq a0, 0(a0)
|
||||
c->sq(a0, 0, v1); // sq a0, 0(v1)
|
||||
c->load_symbol2(t9, cache.vector_normalize); // lw t9, vector-normalize!(s7)
|
||||
c->daddiu(a0, s4, 32); // daddiu a0, s4, 32
|
||||
c->lui(a1, 16256); // lui a1, 16256
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->daddu(a1, r0, s4); // daddu a1, r0, s4
|
||||
c->load_symbol2(v1, cache.z_vector); // lw v1, *z-vector*(s7)
|
||||
c->daddiu(a0, s4, 32); // daddiu a0, s4, 32
|
||||
c->lqc2(vf1, 0, v1); // lqc2 vf1, 0(v1)
|
||||
c->lqc2(vf2, 0, a0); // lqc2 vf2, 0(a0)
|
||||
c->vopmula(vf1, vf2); // vopmula.xyz acc, vf1, vf2
|
||||
c->vopmsub(vf3, vf2, vf1); // vopmsub.xyz vf3, vf2, vf1
|
||||
c->sqc2(vf3, 0, a1); // sqc2 vf3, 0(a1)
|
||||
c->load_symbol2(t9, cache.vector_normalize); // lw t9, vector-normalize!(s7)
|
||||
c->daddu(a0, r0, s4); // daddu a0, r0, s4
|
||||
c->lui(a1, 16256); // lui a1, 16256
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->daddiu(a1, s4, 16); // daddiu a1, s4, 16
|
||||
c->daddiu(v1, s4, 32); // daddiu v1, s4, 32
|
||||
c->daddu(a0, r0, s4); // daddu a0, r0, s4
|
||||
c->lqc2(vf1, 0, v1); // lqc2 vf1, 0(v1)
|
||||
c->lqc2(vf2, 0, a0); // lqc2 vf2, 0(a0)
|
||||
c->vopmula(vf1, vf2); // vopmula.xyz acc, vf1, vf2
|
||||
c->vopmsub(vf3, vf2, vf1); // vopmsub.xyz vf3, vf2, vf1
|
||||
c->sqc2(vf3, 0, a1); // sqc2 vf3, 0(a1)
|
||||
c->load_symbol2(t9, cache.vector_normalize); // lw t9, vector-normalize!(s7)
|
||||
c->daddiu(a0, s4, 16); // daddiu a0, s4, 16
|
||||
c->lui(a1, 16256); // lui a1, 16256
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->daddiu(s4, sp, 16); // daddiu s4, sp, 16
|
||||
c->mov64(v1, s4); // or v1, s4, r0
|
||||
c->lq(a0, 0, s5); // lq a0, 0(s5)
|
||||
c->sq(a0, 0, v1); // sq a0, 0(v1)
|
||||
c->load_symbol2(t9, cache.vector_normalize); // lw t9, vector-normalize!(s7)
|
||||
c->mov64(a0, s4); // or a0, s4, r0
|
||||
c->lui(a1, -16512); // lui a1, -16512
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->mtc1(f0, r0); // mtc1 f0, r0
|
||||
c->lui(v1, 16256); // lui v1, 16256
|
||||
c->mtc1(f1, v1); // mtc1 f1, v1
|
||||
c->lui(v1, 16800); // lui v1, 16800
|
||||
c->mtc1(f2, v1); // mtc1 f2, v1
|
||||
c->lui(v1, 15692); // lui v1, 15692
|
||||
c->ori(v1, v1, 52429); // ori v1, v1, 52429
|
||||
c->mtc1(f3, v1); // mtc1 f3, v1
|
||||
c->lwc1(f4, 4, s4); // lwc1 f4, 4(s4)
|
||||
c->adds(f3, f3, f4); // add.s f3, f3, f4
|
||||
c->muls(f2, f2, f3); // mul.s f2, f2, f3
|
||||
c->mins(f1, f1, f2); // min.s f1, f1, f2
|
||||
c->maxs(f0, f0, f1); // max.s f0, f0, f1
|
||||
c->addiu(v1, r0, 0); // addiu v1, r0, 0
|
||||
//beq r0, r0, L43 // beq r0, r0, L43
|
||||
// nop // sll r0, r0, 0
|
||||
goto block_2; // branch always
|
||||
|
||||
|
||||
block_1:
|
||||
c->lui(a0, 17152); // lui a0, 17152
|
||||
c->mtc1(f1, a0); // mtc1 f1, a0
|
||||
c->lui(a0, 16640); // lui a0, 16640
|
||||
c->mtc1(f2, a0); // mtc1 f2, a0
|
||||
c->mtc1(f3, v1); // mtc1 f3, v1
|
||||
c->cvtsw(f3, f3); // cvt.s.w f3, f3
|
||||
c->muls(f2, f2, f3); // mul.s f2, f2, f3
|
||||
c->subs(f1, f1, f2); // sub.s f1, f1, f2
|
||||
c->muls(f1, f1, f0); // mul.s f1, f1, f0
|
||||
c->dsll(a0, v1, 4); // dsll a0, v1, 4
|
||||
c->daddiu(a0, a0, 528); // daddiu a0, a0, 528
|
||||
c->daddu(a0, a0, gp); // daddu a0, a0, gp
|
||||
c->cvtws(f2, f1); // cvt.w.s f2, f1
|
||||
c->swc1(f2, 0, a0); // swc1 f2, 0(a0)
|
||||
c->cvtws(f2, f1); // cvt.w.s f2, f1
|
||||
c->swc1(f2, 4, a0); // swc1 f2, 4(a0)
|
||||
c->cvtws(f1, f1); // cvt.w.s f1, f1
|
||||
c->swc1(f1, 8, a0); // swc1 f1, 8(a0)
|
||||
c->addiu(a1, r0, 128); // addiu a1, r0, 128
|
||||
c->sw(a1, 12, a0); // sw a1, 12(a0)
|
||||
c->daddiu(v1, v1, 1); // daddiu v1, v1, 1
|
||||
|
||||
block_2:
|
||||
c->slti(a0, v1, 16); // slti a0, v1, 16
|
||||
bc = c->sgpr64(a0) != 0; // bne a0, r0, L42
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_1;} // branch non-likely
|
||||
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
c->gprs[v0].du64[0] = 0; // or v0, r0, r0
|
||||
c->ld(ra, 0, sp); // ld ra, 0(sp)
|
||||
c->lq(gp, 64, sp); // lq gp, 64(sp)
|
||||
c->lq(s5, 48, sp); // lq s5, 48(sp)
|
||||
c->lq(s4, 32, sp); // lq s4, 32(sp)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 80); // daddiu sp, sp, 80
|
||||
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.z_vector = intern_from_c(-1, 0, "*z-vector*").c();
|
||||
cache.vector_normalize = intern_from_c(-1, 0, "vector-normalize!").c();
|
||||
gLinkedFunctionTable.reg("(method 31 sky-work)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_31_sky_work
|
||||
} // namespace Mips2C
|
||||
|
||||
// add method_32_sky_work::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_32_sky_work { extern void link(); }
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
@@ -497,7 +353,7 @@ using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_30_sky_work {
|
||||
struct Cache {
|
||||
// TODO FIX - void* adgif_shader<_texture_simple; // adgif-shader<-texture-simple!
|
||||
void* adgif_shader_texture_simple; // adgif-shader<-texture-simple!
|
||||
void* lookup_texture_by_id_fast; // lookup-texture-by-id-fast
|
||||
} cache;
|
||||
|
||||
@@ -686,7 +542,7 @@ block_15:
|
||||
c->lq(v1, 16, gp); // lq v1, 16(gp)
|
||||
c->sq(v1, 16, s5); // sq v1, 16(s5)
|
||||
c->daddiu(s4, s5, 32); // daddiu s4, s5, 32
|
||||
// TODO - fix c->load_symbol2(t9, cache.adgif_shader<_texture_simple);// lw t9, adgif-shader<-texture-simple!(s7)
|
||||
c->load_symbol2(t9, cache.adgif_shader_texture_simple);// lw t9, adgif-shader<-texture-simple!(s7)
|
||||
c->mov64(a0, s4); // or a0, s4, r0
|
||||
c->lwu(a1, 16, sp); // lwu a1, 16(sp)
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
@@ -699,7 +555,7 @@ block_15:
|
||||
c->lq(v1, 16, gp); // lq v1, 16(gp)
|
||||
c->sq(v1, 352, s5); // sq v1, 352(s5)
|
||||
c->daddiu(s5, s5, 368); // daddiu s5, s5, 368
|
||||
// TODO FIX - c->load_symbol2(t9, cache.adgif_shader<_texture_simple);// lw t9, adgif-shader<-texture-simple!(s7)
|
||||
c->load_symbol2(t9, cache.adgif_shader_texture_simple);// lw t9, adgif-shader<-texture-simple!(s7)
|
||||
c->mov64(a0, s5); // or a0, s5, r0
|
||||
c->lwu(a1, 20, sp); // lwu a1, 20(sp)
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
@@ -730,14 +586,16 @@ end_of_function:
|
||||
}
|
||||
|
||||
void link() {
|
||||
// TODO FIX - cache.adgif_shader<_texture_simple = intern_from_c(-1, 0, "adgif-shader<-texture-simple!").c();
|
||||
cache.adgif_shader_texture_simple = intern_from_c(-1, 0, "adgif-shader<-texture-simple!").c();
|
||||
cache.lookup_texture_by_id_fast = intern_from_c(-1, 0, "lookup-texture-by-id-fast").c();
|
||||
gLinkedFunctionTable.reg("(method 30 sky-work)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_30_sky_work
|
||||
} // namespace Mips2C
|
||||
|
||||
// add method_30_sky_work::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_30_sky_work { extern void link(); }
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
@@ -746,7 +604,7 @@ using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_29_sky_work {
|
||||
struct Cache {
|
||||
// TODO - fix void* adgif_shader<_texture_simple; // adgif-shader<-texture-simple!
|
||||
void* adgif_shader_texture_simple; // adgif-shader<-texture-simple!
|
||||
void* lookup_texture_by_id_fast; // lookup-texture-by-id-fast
|
||||
} cache;
|
||||
|
||||
@@ -890,7 +748,7 @@ block_12:
|
||||
c->lq(a0, 16, gp); // lq a0, 16(gp)
|
||||
c->sq(a0, 16, v1); // sq a0, 16(v1)
|
||||
c->daddiu(s5, v1, 32); // daddiu s5, v1, 32
|
||||
// TODO fix - c->load_symbol2(t9, cache.adgif_shader<_texture_simple);// lw t9, adgif-shader<-texture-simple!(s7)
|
||||
c->load_symbol2(t9, cache.adgif_shader_texture_simple);// lw t9, adgif-shader<-texture-simple!(s7)
|
||||
c->mov64(a0, s5); // or a0, s5, r0
|
||||
c->lwu(a1, 16, sp); // lwu a1, 16(sp)
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
@@ -921,14 +779,16 @@ end_of_function:
|
||||
}
|
||||
|
||||
void link() {
|
||||
// TODO - fix cache.adgif_shader<_texture_simple = intern_from_c(-1, 0, "adgif-shader<-texture-simple!").c();
|
||||
cache.adgif_shader_texture_simple = intern_from_c(-1, 0, "adgif-shader<-texture-simple!").c();
|
||||
cache.lookup_texture_by_id_fast = intern_from_c(-1, 0, "lookup-texture-by-id-fast").c();
|
||||
gLinkedFunctionTable.reg("(method 29 sky-work)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_29_sky_work
|
||||
} // namespace Mips2C
|
||||
|
||||
// add method_29_sky_work::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_29_sky_work { extern void link(); }
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
@@ -983,7 +843,9 @@ void link() {
|
||||
|
||||
} // namespace method_17_sky_work
|
||||
} // namespace Mips2C
|
||||
|
||||
// add method_17_sky_work::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_17_sky_work { extern void link(); }
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
@@ -1804,4 +1666,488 @@ void link() {
|
||||
}
|
||||
|
||||
} // namespace set_tex_offset
|
||||
} // namespace Mips2C
|
||||
} // namespace Mips2C
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_16_sky_work {
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
bool cop1_bc = false;
|
||||
c->daddiu(sp, sp, -32); // daddiu sp, sp, -32
|
||||
c->lwu(a2, 176, a1); // lwu a2, 176(a1)
|
||||
c->daddiu(v1, sp, 16); // daddiu v1, sp, 16
|
||||
c->sq(r0, 0, v1); // sq r0, 0(v1)
|
||||
c->daddiu(a1, a0, 1472); // daddiu a1, a0, 1472
|
||||
c->mov64(a3, v1); // or a3, v1, r0
|
||||
c->daddiu(t0, a2, 812); // daddiu t0, a2, 812
|
||||
c->lq(t0, 0, t0); // lq t0, 0(t0)
|
||||
c->sq(t0, 0, a3); // sq t0, 0(a3)
|
||||
c->mtc1(f0, r0); // mtc1 f0, r0
|
||||
c->lwc1(f1, 928, a2); // lwc1 f1, 928(a2)
|
||||
cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1
|
||||
bc = !cop1_bc; // bc1f L87
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_2;} // branch non-likely
|
||||
|
||||
c->lui(a3, 16256); // lui a3, 16256
|
||||
c->mtc1(f0, a3); // mtc1 f0, a3
|
||||
c->lwc1(f1, 4, v1); // lwc1 f1, 4(v1)
|
||||
c->adds(f0, f0, f1); // add.s f0, f0, f1
|
||||
c->swc1(f0, 4, v1); // swc1 f0, 4(v1)
|
||||
c->mfc1(a3, f0); // mfc1 a3, f0
|
||||
//beq r0, r0, L88 // beq r0, r0, L88
|
||||
// nop // sll r0, r0, 0
|
||||
goto block_3; // branch always
|
||||
|
||||
|
||||
block_2:
|
||||
c->lui(a3, -16512); // lui a3, -16512
|
||||
c->mtc1(f0, a3); // mtc1 f0, a3
|
||||
c->lwc1(f1, 4, v1); // lwc1 f1, 4(v1)
|
||||
c->adds(f0, f0, f1); // add.s f0, f0, f1
|
||||
c->swc1(f0, 4, v1); // swc1 f0, 4(v1)
|
||||
c->mfc1(a3, f0); // mfc1 a3, f0
|
||||
|
||||
block_3:
|
||||
c->daddiu(a3, a0, 1024); // daddiu a3, a0, 1024
|
||||
c->lwc1(f0, 908, a2); // lwc1 f0, 908(a2)
|
||||
c->swc1(f0, 0, a3); // swc1 f0, 0(a3)
|
||||
c->lwc1(f0, 128, a2); // lwc1 f0, 128(a2)
|
||||
c->swc1(f0, 4, a3); // swc1 f0, 4(a3)
|
||||
c->lwc1(f0, 124, a2); // lwc1 f0, 124(a2)
|
||||
c->swc1(f0, 8, a3); // swc1 f0, 8(a3)
|
||||
c->lui(t0, 16256); // lui t0, 16256
|
||||
c->mtc1(f0, t0); // mtc1 f0, t0
|
||||
c->swc1(f0, 12, a3); // swc1 f0, 12(a3)
|
||||
c->lqc2(vf31, 0, a1); // lqc2 vf31, 0(a1)
|
||||
c->lqc2(vf30, 16, a1); // lqc2 vf30, 16(a1)
|
||||
c->lqc2(vf29, 32, a1); // lqc2 vf29, 32(a1)
|
||||
c->lqc2(vf28, 48, a1); // lqc2 vf28, 48(a1)
|
||||
c->lqc2(vf14, 780, a2); // lqc2 vf14, 780(a2)
|
||||
c->lqc2(vf26, 796, a2); // lqc2 vf26, 796(a2)
|
||||
c->lqc2(vf25, 0, v1); // lqc2 vf25, 0(v1)
|
||||
c->lqc2(vf13, 1024, a0); // lqc2 vf13, 1024(a0)
|
||||
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::z, vf25, vf0); // vmove.z vf25, vf0
|
||||
c->vmove(DEST::xyzw, vf24, vf0); // vmove.xyzw vf24, vf0
|
||||
c->vmove(DEST::xyzw, vf23, vf0); // vmove.xyzw vf23, vf0
|
||||
c->mov128_gpr_vf(v1, vf23); // qmfc2.i v1, vf23
|
||||
c->gprs[v0].du64[0] = 0; // or v0, r0, r0
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 32); // daddiu sp, sp, 32
|
||||
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() {
|
||||
gLinkedFunctionTable.reg("(method 16 sky-work)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_16_sky_work
|
||||
} // namespace Mips2C
|
||||
// add method_16_sky_work::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_16_sky_work { extern void link(); }
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_28_sky_work {
|
||||
struct Cache {
|
||||
void* adgif_shader_texture_simple; // adgif-shader<-texture-simple!
|
||||
void* lookup_texture_by_id_fast; // lookup-texture-by-id-fast
|
||||
} cache;
|
||||
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
bool cop1_bc = false;
|
||||
c->daddiu(sp, sp, -64); // daddiu sp, sp, -64
|
||||
c->sd(ra, 0, sp); // sd ra, 0(sp)
|
||||
c->sq(s5, 32, sp); // sq s5, 32(sp)
|
||||
c->sq(gp, 48, sp); // sq gp, 48(sp)
|
||||
c->mov64(gp, a0); // or gp, a0, r0
|
||||
c->mov64(s5, a2); // or s5, a2, r0
|
||||
c->sw(a1, 1916, gp); // sw a1, 1916(gp)
|
||||
c->load_symbol2(t9, cache.lookup_texture_by_id_fast);// lw t9, lookup-texture-by-id-fast(s7)
|
||||
c->lui(v1, 128); // lui v1, 128
|
||||
c->ori(a0, v1, 2304); // ori a0, v1, 2304
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->sw(v0, 16, sp); // sw v0, 16(sp)
|
||||
c->lwu(v1, 16, sp); // lwu v1, 16(sp)
|
||||
bc = c->sgpr64(s7) == c->sgpr64(v1); // beq s7, v1, L56
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
if (bc) {goto block_14;} // branch non-likely
|
||||
|
||||
c->lqc2(vf15, 1184, gp); // lqc2 vf15, 1184(gp)
|
||||
c->vmula_bc(DEST::xyzw, BC::x, vf31, vf15); // vmulax.xyzw acc, vf31, vf15
|
||||
c->lqc2(vf1, 224, gp); // lqc2 vf1, 224(gp)
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf15); // vmadday.xyzw acc, vf30, vf15
|
||||
c->lqc2(vf4, 240, gp); // lqc2 vf4, 240(gp)
|
||||
c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf15); // vmaddaz.xyzw acc, vf29, vf15
|
||||
c->lqc2(vf2, 784, gp); // lqc2 vf2, 784(gp)
|
||||
c->vmadd_bc(DEST::xyzw, BC::w, vf15, vf28, vf0); // vmaddw.xyzw vf15, vf28, vf0
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmul(DEST::xyzw, vf16, vf15, vf14); // vmul.xyzw vf16, vf15, vf14
|
||||
c->lqc2(vf5, 800, gp); // lqc2 vf5, 800(gp)
|
||||
c->vdiv(vf0, BC::w, vf16, BC::w); // vdiv Q, vf0.w, vf16.w
|
||||
c->lqc2(vf8, 32, gp); // lqc2 vf8, 32(gp)
|
||||
c->lqc2(vf11, 48, gp); // lqc2 vf11, 48(gp)
|
||||
c->lqc2(vf3, 416, gp); // lqc2 vf3, 416(gp)
|
||||
c->lqc2(vf6, 432, gp); // lqc2 vf6, 432(gp)
|
||||
c->vwaitq(); // vwaitq
|
||||
c->vmulq(DEST::xyz, vf15, vf15); // vmulq.xyz vf15, vf15, Q
|
||||
c->vmulq(DEST::xyzw, vf16, vf26); // vmulq.xyzw vf16, vf26, Q
|
||||
c->vmul_bc(DEST::xyzw, BC::w, vf1, vf1, vf16); // vmulw.xyzw vf1, vf1, vf16
|
||||
c->vmul_bc(DEST::xyzw, BC::w, vf4, vf4, vf16); // vmulw.xyzw vf4, vf4, vf16
|
||||
c->vadd(DEST::xyzw, vf15, vf15, vf25); // vadd.xyzw vf15, vf15, vf25
|
||||
c->vadd(DEST::xyz, vf1, vf1, vf15); // vadd.xyz vf1, vf1, vf15
|
||||
c->vadd(DEST::xyz, vf4, vf4, vf15); // vadd.xyz vf4, vf4, vf15
|
||||
c->vftoi4(DEST::xyz, vf1, vf1); // vftoi4.xyz vf1, vf1
|
||||
c->vftoi4(DEST::xyzw, vf4, vf4); // vftoi4.xyzw vf4, vf4
|
||||
c->sqc2(vf1, 1600, gp); // sqc2 vf1, 1600(gp)
|
||||
c->sqc2(vf4, 1616, gp); // sqc2 vf4, 1616(gp)
|
||||
c->lw(v1, 1612, gp); // lw v1, 1612(gp)
|
||||
c->mtc1(f0, v1); // mtc1 f0, v1
|
||||
c->mtc1(f1, r0); // mtc1 f1, r0
|
||||
cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1
|
||||
bc = !cop1_bc; // bc1f L54
|
||||
c->daddiu(v1, s7, 4); // daddiu v1, s7, 4
|
||||
if (bc) {goto block_3;} // branch non-likely
|
||||
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
|
||||
block_3:
|
||||
if (((s64)c->sgpr64(s7)) == ((s64)c->sgpr64(v1))) {// beql s7, v1, L55
|
||||
c->mov64(v1, v1); // or v1, v1, r0
|
||||
goto block_12;
|
||||
}
|
||||
|
||||
block_5:
|
||||
c->lw(v1, 1600, gp); // lw v1, 1600(gp)
|
||||
c->lw(a0, 556, s5); // lw a0, 556(s5)
|
||||
c->dsll(a0, a0, 4); // dsll a0, a0, 4
|
||||
c->slt(v1, v1, a0); // slt v1, v1, a0
|
||||
c->daddiu(a0, s7, 4); // daddiu a0, s7, 4
|
||||
c->movz(a0, s7, v1); // movz a0, s7, v1
|
||||
if (((s64)c->sgpr64(s7)) == ((s64)c->sgpr64(a0))) {// beql s7, a0, L55
|
||||
c->mov64(v1, a0); // or v1, a0, r0
|
||||
goto block_12;
|
||||
}
|
||||
|
||||
block_7:
|
||||
c->lw(v1, 1604, gp); // lw v1, 1604(gp)
|
||||
c->lw(a0, 560, s5); // lw a0, 560(s5)
|
||||
c->dsll(a0, a0, 4); // dsll a0, a0, 4
|
||||
c->slt(v1, v1, a0); // slt v1, v1, a0
|
||||
c->daddiu(a0, s7, 4); // daddiu a0, s7, 4
|
||||
c->movz(a0, s7, v1); // movz a0, s7, v1
|
||||
if (((s64)c->sgpr64(s7)) == ((s64)c->sgpr64(a0))) {// beql s7, a0, L55
|
||||
c->mov64(v1, a0); // or v1, a0, r0
|
||||
goto block_12;
|
||||
}
|
||||
|
||||
block_9:
|
||||
c->addiu(v1, r0, 28672); // addiu v1, r0, 28672
|
||||
c->lw(a0, 1616, gp); // lw a0, 1616(gp)
|
||||
c->slt(v1, v1, a0); // slt v1, v1, a0
|
||||
c->daddiu(a0, s7, 4); // daddiu a0, s7, 4
|
||||
c->movz(a0, s7, v1); // movz a0, s7, v1
|
||||
if (((s64)c->sgpr64(s7)) == ((s64)c->sgpr64(a0))) {// beql s7, a0, L55
|
||||
c->mov64(v1, a0); // or v1, a0, r0
|
||||
goto block_12;
|
||||
}
|
||||
|
||||
block_11:
|
||||
c->addiu(v1, r0, 29440); // addiu v1, r0, 29440
|
||||
c->lw(a0, 1620, gp); // lw a0, 1620(gp)
|
||||
c->slt(a0, v1, a0); // slt a0, v1, a0
|
||||
c->daddiu(v1, s7, 4); // daddiu v1, s7, 4
|
||||
c->movz(v1, s7, a0); // movz v1, s7, a0
|
||||
|
||||
block_12:
|
||||
bc = c->sgpr64(s7) == c->sgpr64(v1); // beq s7, v1, L56
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
if (bc) {goto block_14;} // branch non-likely
|
||||
|
||||
c->lwu(v1, 1916, gp); // lwu v1, 1916(gp)
|
||||
c->lwu(t0, 4, v1); // lwu t0, 4(v1)
|
||||
c->vsub(DEST::z, vf1, vf0, vf0); // vsub.z vf1, vf0, vf0
|
||||
c->vsub(DEST::z, vf4, vf0, vf0); // vsub.z vf4, vf0, vf0
|
||||
c->sqc2(vf8, 112, t0); // sqc2 vf8, 112(t0)
|
||||
c->sqc2(vf11, 128, t0); // sqc2 vf11, 128(t0)
|
||||
c->sqc2(vf3, 144, t0); // sqc2 vf3, 144(t0)
|
||||
c->sqc2(vf2, 160, t0); // sqc2 vf2, 160(t0)
|
||||
c->sqc2(vf1, 176, t0); // sqc2 vf1, 176(t0)
|
||||
c->sqc2(vf5, 192, t0); // sqc2 vf5, 192(t0)
|
||||
c->sqc2(vf4, 208, t0); // sqc2 vf4, 208(t0)
|
||||
c->sqc2(vf8, 224, t0); // sqc2 vf8, 224(t0)
|
||||
c->sqc2(vf11, 240, t0); // sqc2 vf11, 240(t0)
|
||||
c->sqc2(vf6, 256, t0); // sqc2 vf6, 256(t0)
|
||||
c->sqc2(vf2, 272, t0); // sqc2 vf2, 272(t0)
|
||||
c->sqc2(vf1, 288, t0); // sqc2 vf1, 288(t0)
|
||||
c->sqc2(vf5, 304, t0); // sqc2 vf5, 304(t0)
|
||||
c->sqc2(vf4, 320, t0); // sqc2 vf4, 320(t0)
|
||||
c->lwu(v1, 1916, gp); // lwu v1, 1916(gp)
|
||||
c->lwu(v1, 4, v1); // lwu v1, 4(v1)
|
||||
c->lq(a0, 0, gp); // lq a0, 0(gp)
|
||||
c->sq(a0, 0, v1); // sq a0, 0(v1)
|
||||
c->lq(a0, 16, gp); // lq a0, 16(gp)
|
||||
c->sq(a0, 16, v1); // sq a0, 16(v1)
|
||||
c->daddiu(s5, v1, 32); // daddiu s5, v1, 32
|
||||
c->load_symbol2(t9, cache.adgif_shader_texture_simple);// lw t9, adgif-shader<-texture-simple!(s7)
|
||||
c->mov64(a0, s5); // or a0, s5, r0
|
||||
c->lwu(a1, 16, sp); // lwu a1, 16(sp)
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->addiu(v1, r0, 72); // addiu v1, r0, 72
|
||||
c->sd(v1, 64, s5); // sd v1, 64(s5)
|
||||
c->lwu(v1, 1916, gp); // lwu v1, 1916(gp)
|
||||
c->lwu(v1, 4, v1); // lwu v1, 4(v1)
|
||||
c->daddiu(v1, v1, 336); // daddiu v1, v1, 336
|
||||
c->lwu(a0, 1916, gp); // lwu a0, 1916(gp)
|
||||
c->sw(v1, 4, a0); // sw v1, 4(a0)
|
||||
|
||||
block_14:
|
||||
c->gprs[v0].du64[0] = 0; // or v0, r0, r0
|
||||
c->ld(ra, 0, sp); // ld ra, 0(sp)
|
||||
c->lq(gp, 48, sp); // lq gp, 48(sp)
|
||||
c->lq(s5, 32, sp); // lq s5, 32(sp)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 64); // daddiu sp, sp, 64
|
||||
goto end_of_function; // return
|
||||
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
end_of_function:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
cache.adgif_shader_texture_simple = intern_from_c(-1, 0, "adgif-shader<-texture-simple!").c();
|
||||
cache.lookup_texture_by_id_fast = intern_from_c(-1, 0, "lookup-texture-by-id-fast").c();
|
||||
gLinkedFunctionTable.reg("(method 28 sky-work)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_28_sky_work
|
||||
} // namespace Mips2C
|
||||
// add method_28_sky_work::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_28_sky_work { extern void link(); }
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_33_sky_work {
|
||||
struct Cache {
|
||||
void* adgif_shader_texture_simple; // adgif-shader<-texture-simple!
|
||||
void* lookup_texture_by_id_fast; // lookup-texture-by-id-fast
|
||||
} cache;
|
||||
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
c->daddiu(sp, sp, -64); // daddiu sp, sp, -64
|
||||
c->sd(ra, 0, sp); // sd ra, 0(sp)
|
||||
c->sq(s4, 16, sp); // sq s4, 16(sp)
|
||||
c->sq(s5, 32, sp); // sq s5, 32(sp)
|
||||
c->sq(gp, 48, sp); // sq gp, 48(sp)
|
||||
c->mov64(gp, a0); // or gp, a0, r0
|
||||
c->mov64(s5, a2); // or s5, a2, r0
|
||||
c->sw(a1, 1916, gp); // sw a1, 1916(gp)
|
||||
c->load_symbol2(t9, cache.lookup_texture_by_id_fast);// lw t9, lookup-texture-by-id-fast(s7)
|
||||
c->lui(v1, 128); // lui v1, 128
|
||||
c->ori(a0, v1, 2560); // ori a0, v1, 2560
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->mov64(a1, v0); // or a1, v0, r0
|
||||
bc = c->sgpr64(s7) == c->sgpr64(a1); // beq s7, a1, L31
|
||||
c->mov64(t0, s7); // or t0, s7, r0
|
||||
if (bc) {goto block_14;} // branch non-likely
|
||||
|
||||
c->lwu(v1, 1916, gp); // lwu v1, 1916(gp)
|
||||
c->lwu(v1, 4, v1); // lwu v1, 4(v1)
|
||||
c->lq(a0, 0, gp); // lq a0, 0(gp)
|
||||
c->sq(a0, 0, v1); // sq a0, 0(v1)
|
||||
c->lq(a0, 16, gp); // lq a0, 16(gp)
|
||||
c->sq(a0, 16, v1); // sq a0, 16(v1)
|
||||
c->daddiu(s4, v1, 32); // daddiu s4, v1, 32
|
||||
c->load_symbol2(t9, cache.adgif_shader_texture_simple);// lw t9, adgif-shader<-texture-simple!(s7)
|
||||
c->mov64(a0, s4); // or a0, s4, r0
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->addiu(v1, r0, 72); // addiu v1, r0, 72
|
||||
c->sd(v1, 64, s4); // sd v1, 64(s4)
|
||||
c->lwu(v1, 1916, gp); // lwu v1, 1916(gp)
|
||||
c->lwu(v1, 4, v1); // lwu v1, 4(v1)
|
||||
c->daddiu(v1, v1, 112); // daddiu v1, v1, 112
|
||||
c->lwu(a0, 1916, gp); // lwu a0, 1916(gp)
|
||||
c->sw(v1, 4, a0); // sw v1, 4(a0)
|
||||
c->lwu(v1, 1916, gp); // lwu v1, 1916(gp)
|
||||
c->lwu(t0, 4, v1); // lwu t0, 4(v1)
|
||||
c->mov64(v1, gp); // or v1, gp, r0
|
||||
c->addiu(a1, r0, 0); // addiu a1, r0, 0
|
||||
c->lqc2(vf2, 784, gp); // lqc2 vf2, 784(gp)
|
||||
c->lqc2(vf5, 800, gp); // lqc2 vf5, 800(gp)
|
||||
c->lqc2(vf8, 32, gp); // lqc2 vf8, 32(gp)
|
||||
c->lqc2(vf11, 48, gp); // lqc2 vf11, 48(gp)
|
||||
c->addiu(a0, r0, 0); // addiu a0, r0, 0
|
||||
//beq r0, r0, L30 // beq r0, r0, L30
|
||||
// nop // sll r0, r0, 0
|
||||
goto block_12; // branch always
|
||||
|
||||
|
||||
block_2:
|
||||
c->lqc2(vf15, 1920, v1); // lqc2 vf15, 1920(v1)
|
||||
c->daddiu(v1, v1, 16); // daddiu v1, v1, 16
|
||||
c->vmula_bc(DEST::xyzw, BC::x, vf31, vf15); // vmulax.xyzw acc, vf31, vf15
|
||||
c->lqc2(vf1, 384, gp); // lqc2 vf1, 384(gp)
|
||||
c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf15); // vmadday.xyzw acc, vf30, vf15
|
||||
c->lqc2(vf4, 400, gp); // lqc2 vf4, 400(gp)
|
||||
c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf15); // vmaddaz.xyzw acc, vf29, vf15
|
||||
c->daddu(a2, gp, a1); // daddu a2, gp, a1
|
||||
c->vmadd_bc(DEST::xyzw, BC::w, vf15, vf28, vf0); // vmaddw.xyzw vf15, vf28, vf0
|
||||
// nop // sll r0, r0, 0
|
||||
c->vmul(DEST::xyzw, vf16, vf15, vf14); // vmul.xyzw vf16, vf15, vf14
|
||||
c->lqc2(vf3, 528, a2); // lqc2 vf3, 528(a2)
|
||||
c->vdiv(vf0, BC::w, vf16, BC::w); // vdiv Q, vf0.w, vf16.w
|
||||
c->daddiu(a1, a1, 16); // daddiu a1, a1, 16
|
||||
c->vwaitq(); // vwaitq
|
||||
c->andi(a1, a1, 255); // andi a1, a1, 255
|
||||
c->vmulq(DEST::xyz, vf15, vf15); // vmulq.xyz vf15, vf15, Q
|
||||
c->vadd(DEST::xyzw, vf15, vf15, vf25); // vadd.xyzw vf15, vf15, vf25
|
||||
c->vadd(DEST::xyz, vf1, vf1, vf15); // vadd.xyz vf1, vf1, vf15
|
||||
c->vadd(DEST::xyz, vf4, vf4, vf15); // vadd.xyz vf4, vf4, vf15
|
||||
c->vftoi4(DEST::xyzw, vf1, vf1); // vftoi4.xyzw vf1, vf1
|
||||
c->vftoi4(DEST::xyzw, vf4, vf4); // vftoi4.xyzw vf4, vf4
|
||||
c->sqc2(vf1, 1600, gp); // sqc2 vf1, 1600(gp)
|
||||
c->sqc2(vf4, 1616, gp); // sqc2 vf4, 1616(gp)
|
||||
c->lw(a2, 1600, gp); // lw a2, 1600(gp)
|
||||
c->lw(a3, 556, s5); // lw a3, 556(s5)
|
||||
c->dsll(a3, a3, 4); // dsll a3, a3, 4
|
||||
c->slt(a2, a2, a3); // slt a2, a2, a3
|
||||
c->daddiu(a3, s7, 4); // daddiu a3, s7, 4
|
||||
c->movz(a3, s7, a2); // movz a3, s7, a2
|
||||
if (((s64)c->sgpr64(s7)) == ((s64)c->sgpr64(a3))) {// beql s7, a3, L28
|
||||
c->mov64(a2, a3); // or a2, a3, r0
|
||||
goto block_9;
|
||||
}
|
||||
|
||||
block_4:
|
||||
c->lw(a2, 1604, gp); // lw a2, 1604(gp)
|
||||
c->lw(a3, 560, s5); // lw a3, 560(s5)
|
||||
c->dsll(a3, a3, 4); // dsll a3, a3, 4
|
||||
c->slt(a2, a2, a3); // slt a2, a2, a3
|
||||
c->daddiu(a3, s7, 4); // daddiu a3, s7, 4
|
||||
c->movz(a3, s7, a2); // movz a3, s7, a2
|
||||
if (((s64)c->sgpr64(s7)) == ((s64)c->sgpr64(a3))) {// beql s7, a3, L28
|
||||
c->mov64(a2, a3); // or a2, a3, r0
|
||||
goto block_9;
|
||||
}
|
||||
|
||||
block_6:
|
||||
c->addiu(a2, r0, 28672); // addiu a2, r0, 28672
|
||||
c->lw(a3, 1616, gp); // lw a3, 1616(gp)
|
||||
c->slt(a2, a2, a3); // slt a2, a2, a3
|
||||
c->daddiu(a3, s7, 4); // daddiu a3, s7, 4
|
||||
c->movz(a3, s7, a2); // movz a3, s7, a2
|
||||
if (((s64)c->sgpr64(s7)) == ((s64)c->sgpr64(a3))) {// beql s7, a3, L28
|
||||
c->mov64(a2, a3); // or a2, a3, r0
|
||||
goto block_9;
|
||||
}
|
||||
|
||||
block_8:
|
||||
c->addiu(a2, r0, 29440); // addiu a2, r0, 29440
|
||||
c->lw(a3, 1620, gp); // lw a3, 1620(gp)
|
||||
c->slt(a3, a2, a3); // slt a3, a2, a3
|
||||
c->daddiu(a2, s7, 4); // daddiu a2, s7, 4
|
||||
c->movz(a2, s7, a3); // movz a2, s7, a3
|
||||
|
||||
block_9:
|
||||
bc = c->sgpr64(s7) == c->sgpr64(a2); // beq s7, a2, L29
|
||||
c->mov64(a2, s7); // or a2, s7, r0
|
||||
if (bc) {goto block_11;} // branch non-likely
|
||||
|
||||
c->vsub(DEST::z, vf1, vf0, vf0); // vsub.z vf1, vf0, vf0
|
||||
c->vsub(DEST::z, vf4, vf0, vf0); // vsub.z vf4, vf0, vf0
|
||||
c->sqc2(vf8, 0, t0); // sqc2 vf8, 0(t0)
|
||||
c->sqc2(vf11, 16, t0); // sqc2 vf11, 16(t0)
|
||||
c->sqc2(vf3, 32, t0); // sqc2 vf3, 32(t0)
|
||||
c->sqc2(vf2, 48, t0); // sqc2 vf2, 48(t0)
|
||||
c->sqc2(vf1, 64, t0); // sqc2 vf1, 64(t0)
|
||||
c->sqc2(vf5, 80, t0); // sqc2 vf5, 80(t0)
|
||||
c->sqc2(vf4, 96, t0); // sqc2 vf4, 96(t0)
|
||||
c->daddiu(t0, t0, 112); // daddiu t0, t0, 112
|
||||
c->mov64(a2, t0); // or a2, t0, r0
|
||||
|
||||
block_11:
|
||||
c->daddiu(a0, a0, 1); // daddiu a0, a0, 1
|
||||
|
||||
block_12:
|
||||
c->slti(a2, a0, 512); // slti a2, a0, 512
|
||||
bc = c->sgpr64(a2) != 0; // bne a2, r0, L27
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_2;} // branch non-likely
|
||||
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
c->lwu(v1, 1916, gp); // lwu v1, 1916(gp)
|
||||
c->sw(t0, 4, v1); // sw t0, 4(v1)
|
||||
|
||||
block_14:
|
||||
c->mov64(v1, t0); // or v1, t0, r0
|
||||
c->gprs[v0].du64[0] = 0; // or v0, r0, r0
|
||||
c->ld(ra, 0, sp); // ld ra, 0(sp)
|
||||
c->lq(gp, 48, sp); // lq gp, 48(sp)
|
||||
c->lq(s5, 32, sp); // lq s5, 32(sp)
|
||||
c->lq(s4, 16, sp); // lq s4, 16(sp)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 64); // daddiu sp, sp, 64
|
||||
goto end_of_function; // return
|
||||
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
end_of_function:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
cache.adgif_shader_texture_simple = intern_from_c(-1, 0, "adgif-shader<-texture-simple!").c();
|
||||
cache.lookup_texture_by_id_fast = intern_from_c(-1, 0, "lookup-texture-by-id-fast").c();
|
||||
gLinkedFunctionTable.reg("(method 33 sky-work)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_33_sky_work
|
||||
} // namespace Mips2C
|
||||
// add method_33_sky_work::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_33_sky_work { extern void link(); }
|
||||
@@ -1,353 +1,3 @@
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_19_grid_hash {
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
c->daddiu(sp, sp, -32); // daddiu sp, sp, -32
|
||||
c->sd(ra, 0, sp); // sd ra, 0(sp)
|
||||
c->sq(gp, 16, sp); // sq gp, 16(sp)
|
||||
c->addiu(v1, r0, 0); // addiu v1, r0, 0
|
||||
//beq r0, r0, L235 // beq r0, r0, L235
|
||||
// nop // sll r0, r0, 0
|
||||
goto block_2; // branch always
|
||||
|
||||
|
||||
block_1:
|
||||
c->daddu(a3, v1, a0); // daddu a3, v1, a0
|
||||
c->lb(a3, 24, a3); // lb a3, 24(a3)
|
||||
c->daddu(t0, v1, a2); // daddu t0, v1, a2
|
||||
c->sb(a3, 0, t0); // sb a3, 0(t0)
|
||||
c->addiu(a3, r0, -1); // addiu a3, r0, -1
|
||||
c->daddu(t0, v1, a2); // daddu t0, v1, a2
|
||||
c->sb(a3, 3, t0); // sb a3, 3(t0)
|
||||
c->daddiu(v1, v1, 1); // daddiu v1, v1, 1
|
||||
|
||||
block_2:
|
||||
c->slti(a3, v1, 3); // slti a3, v1, 3
|
||||
bc = c->sgpr64(a3) != 0; // bne a3, r0, L234
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_1;} // branch non-likely
|
||||
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
c->lh(v1, 10, a0); // lh v1, 10(a0)
|
||||
c->lb(a3, 24, a0); // lb a3, 24(a0)
|
||||
c->mult3(a3, a3, v1); // mult3 a3, a3, v1
|
||||
c->lb(t0, 26, a0); // lb t0, 26(a0)
|
||||
c->mult3(t0, t0, a3); // mult3 t0, t0, a3
|
||||
c->lb(t1, 24, a0); // lb t1, 24(a0)
|
||||
c->lb(t2, 26, a0); // lb t2, 26(a0)
|
||||
c->lb(t3, 25, a0); // lb t3, 25(a0)
|
||||
c->dsra(t4, a1, 3); // dsra t4, a1, 3
|
||||
c->daddu(t4, r0, t4); // daddu t4, r0, t4
|
||||
c->lwu(a0, 28, a0); // lwu a0, 28(a0)
|
||||
c->daddu(a0, t4, a0); // daddu a0, t4, a0
|
||||
c->addiu(t4, r0, 1); // addiu t4, r0, 1
|
||||
c->andi(a1, a1, 7); // andi a1, a1, 7
|
||||
if (((s64)c->sgpr64(a1)) >= 0) { // bgezl a1, L236
|
||||
c->dsllv(a1, t4, a1); // dsllv a1, t4, a1
|
||||
goto block_6;
|
||||
}
|
||||
|
||||
block_5:
|
||||
c->dsubu(a1, r0, a1); // dsubu a1, r0, a1
|
||||
c->dsrav(a1, t4, a1); // dsrav a1, t4, a1
|
||||
|
||||
block_6:
|
||||
c->addiu(t4, r0, 0); // addiu t4, r0, 0
|
||||
//beq r0, r0, L243 // beq r0, r0, L243
|
||||
// nop // sll r0, r0, 0
|
||||
goto block_16; // branch always
|
||||
|
||||
|
||||
block_7:
|
||||
c->mov64(t5, a0); // or t5, a0, r0
|
||||
c->addiu(t6, r0, 0); // addiu t6, r0, 0
|
||||
//beq r0, r0, L242 // beq r0, r0, L242
|
||||
// nop // sll r0, r0, 0
|
||||
goto block_14; // branch always
|
||||
|
||||
|
||||
block_8:
|
||||
c->mov64(t7, t5); // or t7, t5, r0
|
||||
c->addiu(t8, r0, 0); // addiu t8, r0, 0
|
||||
//beq r0, r0, L241 // beq r0, r0, L241
|
||||
// nop // sll r0, r0, 0
|
||||
goto block_12; // branch always
|
||||
|
||||
|
||||
block_9:
|
||||
c->lbu(t9, 0, t7); // lbu t9, 0(t7)
|
||||
c->and_(t9, t9, a1); // and t9, t9, a1
|
||||
bc = c->sgpr64(t9) == 0; // beq t9, r0, L240
|
||||
c->mov64(t9, s7); // or t9, s7, r0
|
||||
if (bc) {goto block_11;} // branch non-likely
|
||||
|
||||
c->lb(t9, 0, a2); // lb t9, 0(a2)
|
||||
c->mov64(t9, t9); // or t9, t9, r0
|
||||
c->mov64(ra, t8); // or ra, t8, r0
|
||||
c->slt(gp, t9, ra); // slt gp, t9, ra
|
||||
c->movz(t9, ra, gp); // movz t9, ra, gp
|
||||
c->sb(t9, 0, a2); // sb t9, 0(a2)
|
||||
c->lb(t9, 1, a2); // lb t9, 1(a2)
|
||||
c->mov64(t9, t9); // or t9, t9, r0
|
||||
c->mov64(ra, t4); // or ra, t4, r0
|
||||
c->slt(gp, t9, ra); // slt gp, t9, ra
|
||||
c->movz(t9, ra, gp); // movz t9, ra, gp
|
||||
c->sb(t9, 1, a2); // sb t9, 1(a2)
|
||||
c->lb(t9, 2, a2); // lb t9, 2(a2)
|
||||
c->mov64(t9, t9); // or t9, t9, r0
|
||||
c->mov64(ra, t6); // or ra, t6, r0
|
||||
c->slt(gp, t9, ra); // slt gp, t9, ra
|
||||
c->movz(t9, ra, gp); // movz t9, ra, gp
|
||||
c->sb(t9, 2, a2); // sb t9, 2(a2)
|
||||
c->lb(t9, 3, a2); // lb t9, 3(a2)
|
||||
c->mov64(t9, t9); // or t9, t9, r0
|
||||
c->mov64(ra, t8); // or ra, t8, r0
|
||||
c->slt(gp, t9, ra); // slt gp, t9, ra
|
||||
c->movn(t9, ra, gp); // movn t9, ra, gp
|
||||
c->sb(t9, 3, a2); // sb t9, 3(a2)
|
||||
c->lb(t9, 4, a2); // lb t9, 4(a2)
|
||||
c->mov64(t9, t9); // or t9, t9, r0
|
||||
c->mov64(ra, t4); // or ra, t4, r0
|
||||
c->slt(gp, t9, ra); // slt gp, t9, ra
|
||||
c->movn(t9, ra, gp); // movn t9, ra, gp
|
||||
c->sb(t9, 4, a2); // sb t9, 4(a2)
|
||||
c->lb(t9, 5, a2); // lb t9, 5(a2)
|
||||
c->mov64(gp, t9); // or gp, t9, r0
|
||||
c->mov64(t9, t6); // or t9, t6, r0
|
||||
c->slt(ra, gp, t9); // slt ra, gp, t9
|
||||
c->movn(gp, t9, ra); // movn gp, t9, ra
|
||||
c->sb(gp, 5, a2); // sb gp, 5(a2)
|
||||
|
||||
block_11:
|
||||
c->daddu(t7, t7, v1); // daddu t7, t7, v1
|
||||
c->daddiu(t8, t8, 1); // daddiu t8, t8, 1
|
||||
|
||||
block_12:
|
||||
c->slt(t9, t8, t1); // slt t9, t8, t1
|
||||
bc = c->sgpr64(t9) != 0; // bne t9, r0, L239
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_9;} // branch non-likely
|
||||
|
||||
c->mov64(t7, s7); // or t7, s7, r0
|
||||
c->mov64(t7, s7); // or t7, s7, r0
|
||||
c->daddu(t5, t5, a3); // daddu t5, t5, a3
|
||||
c->daddiu(t6, t6, 1); // daddiu t6, t6, 1
|
||||
|
||||
block_14:
|
||||
c->slt(t7, t6, t2); // slt t7, t6, t2
|
||||
bc = c->sgpr64(t7) != 0; // bne t7, r0, L238
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_8;} // branch non-likely
|
||||
|
||||
c->mov64(t5, s7); // or t5, s7, r0
|
||||
c->mov64(t5, s7); // or t5, s7, r0
|
||||
c->daddu(a0, a0, t0); // daddu a0, a0, t0
|
||||
c->daddiu(t4, t4, 1); // daddiu t4, t4, 1
|
||||
|
||||
block_16:
|
||||
c->slt(t5, t4, t3); // slt t5, t4, t3
|
||||
bc = c->sgpr64(t5) != 0; // bne t5, r0, L237
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_7;} // branch non-likely
|
||||
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
c->gprs[v0].du64[0] = 0; // or v0, r0, r0
|
||||
c->ld(ra, 0, sp); // ld ra, 0(sp)
|
||||
c->lq(gp, 16, sp); // lq gp, 16(sp)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 32); // daddiu sp, sp, 32
|
||||
goto end_of_function; // return
|
||||
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
end_of_function:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
gLinkedFunctionTable.reg("(method 19 grid-hash)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_19_grid_hash
|
||||
} // namespace Mips2C
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_38_spatial_hash {
|
||||
struct Cache {
|
||||
void* perf_stats; // *perf-stats*
|
||||
} cache;
|
||||
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
bool cop1_bc = false;
|
||||
c->daddiu(sp, sp, -112); // daddiu sp, sp, -112
|
||||
c->sd(ra, 0, sp); // sd ra, 0(sp)
|
||||
c->sq(s3, 48, sp); // sq s3, 48(sp)
|
||||
c->sq(s4, 64, sp); // sq s4, 64(sp)
|
||||
c->sq(s5, 80, sp); // sq s5, 80(sp)
|
||||
c->sq(gp, 96, sp); // sq gp, 96(sp)
|
||||
c->mov64(s5, a0); // or s5, a0, r0
|
||||
c->mov64(gp, a1); // or gp, a1, r0
|
||||
c->mov64(s4, a2); // or s4, a2, r0
|
||||
c->mov64(s3, a3); // or s3, a3, r0
|
||||
c->load_symbol2(v1, cache.perf_stats); // lw v1, *perf-stats*(s7)
|
||||
c->daddiu(v1, v1, 116); // daddiu v1, v1, 116
|
||||
c->gprs[v1].du64[0] = 0; // or v1, r0, r0
|
||||
c->mov64(a0, s5); // or a0, s5, r0
|
||||
c->lwu(v1, -4, a0); // lwu v1, -4(a0)
|
||||
c->lwu(t9, 112, v1); // lwu t9, 112(v1)
|
||||
c->daddiu(a1, s5, 4); // daddiu a1, s5, 4
|
||||
c->mov64(a2, gp); // or a2, gp, r0
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->mov64(v1, v0); // or v1, v0, r0
|
||||
c->lwu(v1, 0, s5); // lwu v1, 0(s5)
|
||||
c->daddiu(v1, v1, 12); // daddiu v1, v1, 12
|
||||
c->sw(v1, 16, sp); // sw v1, 16(sp)
|
||||
c->mov64(a0, s5); // or a0, s5, r0
|
||||
c->lwu(v1, -4, a0); // lwu v1, -4(a0)
|
||||
c->lwu(t9, 104, v1); // lwu t9, 104(v1)
|
||||
c->daddiu(a1, s5, 4); // daddiu a1, s5, 4
|
||||
c->lwu(a2, 16, sp); // lwu a2, 16(sp)
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->mov64(v1, v0); // or v1, v0, r0
|
||||
c->sd(r0, 24, sp); // sd r0, 24(sp)
|
||||
c->sw(s5, 32, sp); // sw s5, 32(sp)
|
||||
c->sw(s4, 36, sp); // sw s4, 36(sp)
|
||||
c->sd(s3, 40, sp); // sd s3, 40(sp)
|
||||
c->lwu(v1, 32, sp); // lwu v1, 32(sp)
|
||||
c->lh(v1, 10, v1); // lh v1, 10(v1)
|
||||
c->lwu(a0, 16, sp); // lwu a0, 16(sp)
|
||||
c->gprs[a1].du64[0] = 0; // or a1, r0, r0
|
||||
// nop // sll r0, r0, 0
|
||||
|
||||
block_1:
|
||||
c->dsll(a2, a1, 3); // dsll a2, a1, 3
|
||||
c->lbu(a3, 0, a0); // lbu a3, 0(a0)
|
||||
bc = c->sgpr64(a3) == 0; // beq a3, r0, L27
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_7;} // branch non-likely
|
||||
|
||||
|
||||
block_2:
|
||||
c->andi(t0, a3, 1); // andi t0, a3, 1
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(t0) == 0; // beq t0, r0, L26
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_6;} // branch non-likely
|
||||
|
||||
c->lwu(t0, 32, sp); // lwu t0, 32(sp)
|
||||
c->lwu(t0, 84, t0); // lwu t0, 84(t0)
|
||||
c->dsll(t1, a2, 4); // dsll t1, a2, 4
|
||||
c->daddu(t0, t0, t1); // daddu t0, t0, t1
|
||||
c->mov64(t1, gp); // or t1, gp, r0
|
||||
c->mov64(t2, t0); // or t2, t0, r0
|
||||
c->lqc2(vf2, 0, t1); // lqc2 vf2, 0(t1)
|
||||
c->lqc2(vf3, 0, t2); // lqc2 vf3, 0(t2)
|
||||
c->vsub(DEST::xyzw, vf1, vf3, vf2); // vsub.xyzw vf1, vf3, vf2
|
||||
c->vmul(DEST::xyzw, vf1, vf1, vf1); // vmul.xyzw vf1, vf1, vf1
|
||||
c->vadd_bc(DEST::x, BC::y, vf1, vf1, vf1); // vaddy.x vf1, vf1, vf1
|
||||
c->vadd_bc(DEST::x, BC::z, vf1, vf1, vf1); // vaddz.x vf1, vf1, vf1
|
||||
c->mov128_gpr_vf(t1, vf1); // qmfc2.i t1, vf1
|
||||
c->mtc1(f0, t1); // mtc1 f0, t1
|
||||
c->lwc1(f1, 12, gp); // lwc1 f1, 12(gp)
|
||||
c->lwc1(f2, 12, t0); // lwc1 f2, 12(t0)
|
||||
c->adds(f1, f1, f2); // add.s f1, f1, f2
|
||||
c->muls(f1, f1, f1); // mul.s f1, f1, f1
|
||||
c->mfc1(t0, f1); // mfc1 t0, f1
|
||||
c->mtc1(f1, t0); // mtc1 f1, t0
|
||||
cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1
|
||||
bc = !cop1_bc; // bc1f L26
|
||||
c->mov64(t0, s7); // or t0, s7, r0
|
||||
if (bc) {goto block_6;} // branch non-likely
|
||||
|
||||
c->ld(t0, 24, sp); // ld t0, 24(sp)
|
||||
c->ld(t1, 40, sp); // ld t1, 40(sp)
|
||||
c->slt(t0, t0, t1); // slt t0, t0, t1
|
||||
bc = c->sgpr64(t0) == 0; // beq t0, r0, L26
|
||||
c->mov64(t0, s7); // or t0, s7, r0
|
||||
if (bc) {goto block_6;} // branch non-likely
|
||||
|
||||
c->dsll(t0, a2, 4); // dsll t0, a2, 4
|
||||
c->lwu(t1, 32, sp); // lwu t1, 32(sp)
|
||||
c->lwu(t1, 100, t1); // lwu t1, 100(t1)
|
||||
c->daddu(t0, t0, t1); // daddu t0, t0, t1
|
||||
c->lwu(t0, 0, t0); // lwu t0, 0(t0)
|
||||
c->lwu(t1, 36, sp); // lwu t1, 36(sp)
|
||||
c->ld(t2, 24, sp); // ld t2, 24(sp)
|
||||
c->dsll(t2, t2, 2); // dsll t2, t2, 2
|
||||
c->daddu(t1, t1, t2); // daddu t1, t1, t2
|
||||
c->sw(t0, 0, t1); // sw t0, 0(t1)
|
||||
c->ld(t0, 24, sp); // ld t0, 24(sp)
|
||||
c->daddiu(t0, t0, 1); // daddiu t0, t0, 1
|
||||
c->sd(t0, 24, sp); // sd t0, 24(sp)
|
||||
// nop // sll r0, r0, 0
|
||||
|
||||
block_6:
|
||||
c->dsra(a3, a3, 1); // dsra a3, a3, 1
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(a3) != 0; // bne a3, r0, L25
|
||||
c->daddiu(a2, a2, 1); // daddiu a2, a2, 1
|
||||
if (bc) {goto block_2;} // branch non-likely
|
||||
|
||||
|
||||
block_7:
|
||||
c->daddiu(a1, a1, 1); // daddiu a1, a1, 1
|
||||
c->daddiu(a0, a0, 1); // daddiu a0, a0, 1
|
||||
c->slt(a2, a1, v1); // slt a2, a1, v1
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(a2) != 0; // bne a2, r0, L24
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_1;} // branch non-likely
|
||||
|
||||
c->load_symbol2(v1, cache.perf_stats); // lw v1, *perf-stats*(s7)
|
||||
c->daddiu(v1, v1, 116); // daddiu v1, v1, 116
|
||||
c->gprs[v1].du64[0] = 0; // or v1, r0, r0
|
||||
c->ld(v0, 24, sp); // ld v0, 24(sp)
|
||||
c->ld(ra, 0, sp); // ld ra, 0(sp)
|
||||
c->lq(gp, 96, sp); // lq gp, 96(sp)
|
||||
c->lq(s5, 80, sp); // lq s5, 80(sp)
|
||||
c->lq(s4, 64, sp); // lq s4, 64(sp)
|
||||
c->lq(s3, 48, sp); // lq s3, 48(sp)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 112); // daddiu sp, sp, 112
|
||||
goto end_of_function; // return
|
||||
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
end_of_function:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
cache.perf_stats = intern_from_c(-1, 0, "*perf-stats*").c();
|
||||
gLinkedFunctionTable.reg("(method 38 spatial-hash)", execute, 512);
|
||||
}
|
||||
|
||||
} // namespace method_38_spatial_hash
|
||||
} // namespace Mips2C
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
@@ -663,7 +313,9 @@ void link() {
|
||||
|
||||
} // namespace method_35_spatial_hash
|
||||
} // namespace Mips2C
|
||||
|
||||
// add method_35_spatial_hash::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_35_spatial_hash { extern void link(); }
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
@@ -708,121 +360,6 @@ void link() {
|
||||
} // namespace method_33_sphere_hash
|
||||
} // namespace Mips2C
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_28_sphere_hash {
|
||||
struct Cache {
|
||||
void* mem_copy; // mem-copy!
|
||||
} cache;
|
||||
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
c->daddiu(sp, sp, -64); // daddiu sp, sp, -64
|
||||
c->sd(ra, 0, sp); // sd ra, 0(sp)
|
||||
c->sq(s4, 16, sp); // sq s4, 16(sp)
|
||||
c->sq(s5, 32, sp); // sq s5, 32(sp)
|
||||
c->sq(gp, 48, sp); // sq gp, 48(sp)
|
||||
c->mov64(s5, a0); // or s5, a0, r0
|
||||
c->mov64(s4, a1); // or s4, a1, r0
|
||||
c->lh(gp, 56, s5); // lh gp, 56(s5)
|
||||
c->lh(v1, 88, s5); // lh v1, 88(s5)
|
||||
c->slt(v1, gp, v1); // slt v1, gp, v1
|
||||
bc = c->sgpr64(v1) == 0; // beq v1, r0, L96
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_5;} // branch non-likely
|
||||
|
||||
c->lwu(v1, 84, s5); // lwu v1, 84(s5)
|
||||
c->dsll(a0, gp, 4); // dsll a0, gp, 4
|
||||
c->daddu(a0, v1, a0); // daddu a0, v1, a0
|
||||
c->load_symbol2(t9, cache.mem_copy); // lw t9, mem-copy!(s7)
|
||||
c->mov64(a1, s4); // or a1, s4, r0
|
||||
c->addiu(a2, r0, 16); // addiu a2, r0, 16
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->addiu(v1, r0, 0); // addiu v1, r0, 0
|
||||
//beq r0, r0, L95 // beq r0, r0, L95
|
||||
// nop // sll r0, r0, 0
|
||||
goto block_3; // branch always
|
||||
|
||||
|
||||
block_2:
|
||||
c->dsll(a0, v1, 2); // dsll a0, v1, 2
|
||||
c->daddu(a0, a0, s5); // daddu a0, a0, s5
|
||||
c->lwc1(f0, 32, a0); // lwc1 f0, 32(a0)
|
||||
c->dsll(a0, v1, 2); // dsll a0, v1, 2
|
||||
c->daddu(a0, a0, s4); // daddu a0, a0, s4
|
||||
c->lwc1(f1, 0, a0); // lwc1 f1, 0(a0)
|
||||
c->lwc1(f2, 12, s4); // lwc1 f2, 12(s4)
|
||||
c->subs(f1, f1, f2); // sub.s f1, f1, f2
|
||||
c->mins(f0, f0, f1); // min.s f0, f0, f1
|
||||
c->dsll(a0, v1, 2); // dsll a0, v1, 2
|
||||
c->daddu(a0, a0, s5); // daddu a0, a0, s5
|
||||
c->swc1(f0, 32, a0); // swc1 f0, 32(a0)
|
||||
c->dsll(a0, v1, 2); // dsll a0, v1, 2
|
||||
c->daddu(a0, a0, s5); // daddu a0, a0, s5
|
||||
c->lwc1(f0, 44, a0); // lwc1 f0, 44(a0)
|
||||
c->dsll(a0, v1, 2); // dsll a0, v1, 2
|
||||
c->daddu(a0, a0, s4); // daddu a0, a0, s4
|
||||
c->lwc1(f1, 0, a0); // lwc1 f1, 0(a0)
|
||||
c->lwc1(f2, 12, s4); // lwc1 f2, 12(s4)
|
||||
c->adds(f1, f1, f2); // add.s f1, f1, f2
|
||||
c->maxs(f0, f0, f1); // max.s f0, f0, f1
|
||||
c->dsll(a0, v1, 2); // dsll a0, v1, 2
|
||||
c->daddu(a0, a0, s5); // daddu a0, a0, s5
|
||||
c->swc1(f0, 44, a0); // swc1 f0, 44(a0)
|
||||
c->daddiu(v1, v1, 1); // daddiu v1, v1, 1
|
||||
|
||||
block_3:
|
||||
c->slti(a0, v1, 3); // slti a0, v1, 3
|
||||
bc = c->sgpr64(a0) != 0; // bne a0, r0, L94
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_2;} // branch non-likely
|
||||
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
c->mov64(v1, s7); // or v1, s7, r0
|
||||
c->lh(v1, 56, s5); // lh v1, 56(s5)
|
||||
c->daddiu(v1, v1, 1); // daddiu v1, v1, 1
|
||||
c->sh(v1, 56, s5); // sh v1, 56(s5)
|
||||
//beq r0, r0, L97 // beq r0, r0, L97
|
||||
// nop // sll r0, r0, 0
|
||||
goto block_6; // branch always
|
||||
|
||||
|
||||
block_5:
|
||||
c->addiu(gp, r0, -1); // addiu gp, r0, -1
|
||||
c->mov64(v1, gp); // or v1, gp, r0
|
||||
|
||||
block_6:
|
||||
c->mov64(v0, gp); // or v0, gp, r0
|
||||
c->ld(ra, 0, sp); // ld ra, 0(sp)
|
||||
c->lq(gp, 48, sp); // lq gp, 48(sp)
|
||||
c->lq(s5, 32, sp); // lq s5, 32(sp)
|
||||
c->lq(s4, 16, sp); // lq s4, 16(sp)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 64); // daddiu sp, sp, 64
|
||||
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.mem_copy = intern_from_c(-1, 0, "mem-copy!").c();
|
||||
gLinkedFunctionTable.reg("(method 28 sphere-hash)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_28_sphere_hash
|
||||
} // namespace Mips2C
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
@@ -1224,4 +761,506 @@ void link() {
|
||||
}
|
||||
|
||||
} // namespace method_20_grid_hash
|
||||
} // namespace Mips2C
|
||||
} // namespace Mips2C
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_21_grid_hash {
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
c->lh(v1, 10, a0); // lh v1, 10(a0)
|
||||
c->lb(a3, 24, a0); // lb a3, 24(a0)
|
||||
c->mult3(a3, a3, v1); // mult3 a3, a3, v1
|
||||
c->lb(t0, 26, a0); // lb t0, 26(a0)
|
||||
c->mult3(t0, t0, a3); // mult3 t0, t0, a3
|
||||
c->addiu(t1, r0, 1); // addiu t1, r0, 1
|
||||
c->lb(t2, 0, a1); // lb t2, 0(a1)
|
||||
c->dsubu(t1, t1, t2); // dsubu t1, t1, t2
|
||||
c->lb(t2, 3, a1); // lb t2, 3(a1)
|
||||
c->daddu(t1, t1, t2); // daddu t1, t1, t2
|
||||
c->addiu(t2, r0, 1); // addiu t2, r0, 1
|
||||
c->lb(t3, 2, a1); // lb t3, 2(a1)
|
||||
c->dsubu(t2, t2, t3); // dsubu t2, t2, t3
|
||||
c->lb(t3, 5, a1); // lb t3, 5(a1)
|
||||
c->daddu(t2, t2, t3); // daddu t2, t2, t3
|
||||
c->addiu(t3, r0, 1); // addiu t3, r0, 1
|
||||
c->lb(t4, 1, a1); // lb t4, 1(a1)
|
||||
c->dsubu(t3, t3, t4); // dsubu t3, t3, t4
|
||||
c->lb(t4, 4, a1); // lb t4, 4(a1)
|
||||
c->daddu(t3, t3, t4); // daddu t3, t3, t4
|
||||
c->lb(t4, 0, a1); // lb t4, 0(a1)
|
||||
c->mult3(t4, t4, v1); // mult3 t4, t4, v1
|
||||
c->lb(t5, 1, a1); // lb t5, 1(a1)
|
||||
c->mult3(t5, t5, t0); // mult3 t5, t5, t0
|
||||
c->daddu(t4, t4, t5); // daddu t4, t4, t5
|
||||
c->lb(a1, 2, a1); // lb a1, 2(a1)
|
||||
c->mult3(a1, a1, a3); // mult3 a1, a1, a3
|
||||
c->daddu(a1, t4, a1); // daddu a1, t4, a1
|
||||
c->dsra(t4, a2, 3); // dsra t4, a2, 3
|
||||
c->daddu(a1, a1, t4); // daddu a1, a1, t4
|
||||
c->daddu(a1, r0, a1); // daddu a1, r0, a1
|
||||
c->lwu(a0, 28, a0); // lwu a0, 28(a0)
|
||||
c->daddu(a0, a1, a0); // daddu a0, a1, a0
|
||||
c->addiu(a1, r0, 1); // addiu a1, r0, 1
|
||||
c->andi(a2, a2, 7); // andi a2, a2, 7
|
||||
if (((s64)c->sgpr64(a2)) >= 0) { // bgezl a2, L185
|
||||
c->dsllv(a1, a1, a2); // dsllv a1, a1, a2
|
||||
goto block_3;
|
||||
}
|
||||
|
||||
block_2:
|
||||
c->dsubu(a2, r0, a2); // dsubu a2, r0, a2
|
||||
c->dsrav(a1, a1, a2); // dsrav a1, a1, a2
|
||||
|
||||
block_3:
|
||||
c->nor(a1, a1, r0); // nor a1, a1, r0
|
||||
c->mov64(a2, t3); // or a2, t3, r0
|
||||
|
||||
block_4:
|
||||
c->mov64(t3, t2); // or t3, t2, r0
|
||||
c->mov64(t4, a0); // or t4, a0, r0
|
||||
|
||||
block_5:
|
||||
c->mov64(t5, t1); // or t5, t1, r0
|
||||
c->mov64(t6, t4); // or t6, t4, r0
|
||||
|
||||
block_6:
|
||||
// nop // sll r0, r0, 0
|
||||
c->lbu(t7, 0, t6); // lbu t7, 0(t6)
|
||||
// nop // sll r0, r0, 0
|
||||
c->and_(t7, t7, a1); // and t7, t7, a1
|
||||
c->daddiu(t5, t5, -1); // daddiu t5, t5, -1
|
||||
c->sb(t7, 0, t6); // sb t7, 0(t6)
|
||||
bc = c->sgpr64(t5) != 0; // bne t5, r0, L188
|
||||
c->daddu(t6, t6, v1); // daddu t6, t6, v1
|
||||
if (bc) {goto block_6;} // branch non-likely
|
||||
|
||||
c->daddiu(t3, t3, -1); // daddiu t3, t3, -1
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(t3) != 0; // bne t3, r0, L187
|
||||
c->daddu(t4, t4, a3); // daddu t4, t4, a3
|
||||
if (bc) {goto block_5;} // branch non-likely
|
||||
|
||||
c->daddiu(a2, a2, -1); // daddiu a2, a2, -1
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(a2) != 0; // bne a2, r0, L186
|
||||
c->daddu(a0, a0, t0); // daddu a0, a0, t0
|
||||
if (bc) {goto block_4;} // branch non-likely
|
||||
|
||||
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
|
||||
// nop // sll r0, r0, 0
|
||||
end_of_function:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
gLinkedFunctionTable.reg("(method 21 grid-hash)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_21_grid_hash
|
||||
} // namespace Mips2C
|
||||
// add method_21_grid_hash::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_21_grid_hash { extern void link(); }
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_24_grid_hash {
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
c->lq(v1, 0, a2); // lq v1, 0(a2)
|
||||
c->mov128_vf_gpr(vf1, v1); // qmtc2.i vf1, v1
|
||||
c->lq(v1, 12, a0); // lq v1, 12(a0)
|
||||
c->mov128_vf_gpr(vf5, v1); // qmtc2.i vf5, v1
|
||||
c->vsub_bc(DEST::xyzw, BC::w, vf3, vf1, vf1); // vsubw.xyzw vf3, vf1, vf1
|
||||
c->vadd_bc(DEST::xyzw, BC::w, vf2, vf1, vf1); // vaddw.xyzw vf2, vf1, vf1
|
||||
c->lq(v1, 28, a0); // lq v1, 28(a0)
|
||||
c->mov128_vf_gpr(vf4, v1); // qmtc2.i vf4, v1
|
||||
c->vmr32(DEST::xyzw, vf4, vf4); // vmr32.xyzw vf4, vf4
|
||||
c->vsub(DEST::xyzw, vf6, vf3, vf4); // vsub.xyzw vf6, vf3, vf4
|
||||
c->vsub(DEST::xyzw, vf7, vf2, vf4); // vsub.xyzw vf7, vf2, vf4
|
||||
c->vmul(DEST::xyzw, vf6, vf6, vf5); // vmul.xyzw vf6, vf6, vf5
|
||||
c->vmul(DEST::xyzw, vf7, vf7, vf5); // vmul.xyzw vf7, vf7, vf5
|
||||
c->vftoi0(DEST::xyz, vf6, vf6); // vftoi0.xyz vf6, vf6
|
||||
c->vftoi0(DEST::xyz, vf7, vf7); // vftoi0.xyz vf7, vf7
|
||||
c->nor(v1, r0, r0); // nor v1, r0, r0
|
||||
c->lw(a0, 24, a0); // lw a0, 24(a0)
|
||||
c->sll(a2, a0, 8); // sll a2, a0, 8
|
||||
c->lui(a0, 1); // lui a0, 1
|
||||
c->srl(a2, a2, 8); // srl a2, a2, 8
|
||||
c->ori(a0, a0, 257); // ori a0, a0, 257
|
||||
c->dsubu(a0, a2, a0); // dsubu a0, a2, a0
|
||||
// nop // sll r0, r0, 0
|
||||
c->pextlb(a0, r0, a0); // pextlb a0, r0, a0
|
||||
// nop // sll r0, r0, 0
|
||||
c->pextlh(a0, r0, a0); // pextlh a0, r0, a0
|
||||
// nop // sll r0, r0, 0
|
||||
c->mov128_gpr_vf(a3, vf6); // qmfc2.i a3, vf6
|
||||
c->mov128_gpr_vf(a2, vf7); // qmfc2.i a2, vf7
|
||||
c->pmaxw(a3, a3, r0); // pmaxw a3, a3, r0
|
||||
c->pmaxw(a2, a2, r0); // pmaxw a2, a2, r0
|
||||
c->pminw(a3, a3, a0); // pminw a3, a3, a0
|
||||
c->pminw(a0, a2, a0); // pminw a0, a2, a0
|
||||
c->ppach(a2, r0, a3); // ppach a2, r0, a3
|
||||
c->ppach(a3, r0, a0); // ppach a3, r0, a0
|
||||
c->ppacb(a0, r0, a2); // ppacb a0, r0, a2
|
||||
c->ppacb(a2, r0, a3); // ppacb a2, r0, a3
|
||||
c->dsll(a2, a2, 24); // dsll a2, a2, 24
|
||||
c->or_(a0, a0, a2); // or a0, a0, a2
|
||||
c->dsll32(v1, v1, 16); // dsll32 v1, v1, 16
|
||||
c->ld(a2, 0, a1); // ld a2, 0(a1)
|
||||
c->and_(v1, a2, v1); // and v1, a2, v1
|
||||
c->or_(v1, v1, a0); // or v1, v1, a0
|
||||
c->sd(v1, 0, a1); // sd v1, 0(a1)
|
||||
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:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
gLinkedFunctionTable.reg("(method 24 grid-hash)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_24_grid_hash
|
||||
} // namespace Mips2C
|
||||
// add method_24_grid_hash::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_24_grid_hash { extern void link(); }
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_35_sphere_hash {
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
c->daddiu(sp, sp, -48); // daddiu sp, sp, -48
|
||||
c->sd(ra, 0, sp); // sd ra, 0(sp)
|
||||
c->sq(s5, 16, sp); // sq s5, 16(sp)
|
||||
c->sq(gp, 32, sp); // sq gp, 32(sp)
|
||||
c->mov64(s5, a0); // or s5, a0, r0
|
||||
c->mov64(gp, a2); // or gp, a2, r0
|
||||
c->mov64(a0, s5); // or a0, s5, r0
|
||||
c->lwu(v1, -4, a0); // lwu v1, -4(a0)
|
||||
c->lwu(t9, 112, v1); // lwu t9, 112(v1)
|
||||
c->daddiu(v1, s5, 4); // daddiu v1, s5, 4
|
||||
c->mov64(a2, a1); // or a2, a1, r0
|
||||
c->mov64(a1, v1); // or a1, v1, r0
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->mov64(v1, v0); // or v1, v0, r0
|
||||
c->mov64(t0, s5); // or t0, s5, r0
|
||||
c->daddiu(t1, s5, 4); // daddiu t1, s5, 4
|
||||
c->lh(v1, 10, t0); // lh v1, 10(t0)
|
||||
c->lb(a0, 24, t0); // lb a0, 24(t0)
|
||||
c->mult3(a0, a0, v1); // mult3 a0, a0, v1
|
||||
c->lb(a1, 26, t0); // lb a1, 26(t0)
|
||||
c->mult3(a1, a1, a0); // mult3 a1, a1, a0
|
||||
c->addiu(a2, r0, 1); // addiu a2, r0, 1
|
||||
c->lb(a3, 0, t1); // lb a3, 0(t1)
|
||||
c->dsubu(a2, a2, a3); // dsubu a2, a2, a3
|
||||
c->lb(a3, 3, t1); // lb a3, 3(t1)
|
||||
c->daddu(a2, a2, a3); // daddu a2, a2, a3
|
||||
c->addiu(a3, r0, 1); // addiu a3, r0, 1
|
||||
c->lb(t2, 2, t1); // lb t2, 2(t1)
|
||||
c->dsubu(a3, a3, t2); // dsubu a3, a3, t2
|
||||
c->lb(t2, 5, t1); // lb t2, 5(t1)
|
||||
c->daddu(a3, a3, t2); // daddu a3, a3, t2
|
||||
c->addiu(t2, r0, 1); // addiu t2, r0, 1
|
||||
c->lb(t3, 1, t1); // lb t3, 1(t1)
|
||||
c->dsubu(t2, t2, t3); // dsubu t2, t2, t3
|
||||
c->lb(t3, 4, t1); // lb t3, 4(t1)
|
||||
c->daddu(t2, t2, t3); // daddu t2, t2, t3
|
||||
c->lb(t3, 0, t1); // lb t3, 0(t1)
|
||||
c->mult3(t3, t3, v1); // mult3 t3, t3, v1
|
||||
c->lb(t4, 1, t1); // lb t4, 1(t1)
|
||||
c->mult3(t4, t4, a1); // mult3 t4, t4, a1
|
||||
c->daddu(t3, t3, t4); // daddu t3, t3, t4
|
||||
c->lb(t1, 2, t1); // lb t1, 2(t1)
|
||||
c->mult3(t1, t1, a0); // mult3 t1, t1, a0
|
||||
c->daddu(t1, t3, t1); // daddu t1, t3, t1
|
||||
c->dsra(t3, gp, 3); // dsra t3, gp, 3
|
||||
c->daddu(t1, t1, t3); // daddu t1, t1, t3
|
||||
c->daddu(t1, r0, t1); // daddu t1, r0, t1
|
||||
c->lwu(t0, 28, t0); // lwu t0, 28(t0)
|
||||
c->daddu(t0, t1, t0); // daddu t0, t1, t0
|
||||
c->addiu(t1, r0, 1); // addiu t1, r0, 1
|
||||
c->andi(t3, gp, 7); // andi t3, gp, 7
|
||||
if (((s64)c->sgpr64(t3)) >= 0) { // bgezl t3, L84
|
||||
c->dsllv(t1, t1, t3); // dsllv t1, t1, t3
|
||||
goto block_3;
|
||||
}
|
||||
|
||||
block_2:
|
||||
c->dsubu(t3, r0, t3); // dsubu t3, r0, t3
|
||||
c->dsrav(t1, t1, t3); // dsrav t1, t1, t3
|
||||
|
||||
block_3:
|
||||
c->nor(t1, t1, r0); // nor t1, t1, r0
|
||||
c->mov64(t2, t2); // or t2, t2, r0
|
||||
// nop // sll r0, r0, 0
|
||||
|
||||
block_4:
|
||||
c->mov64(t3, a3); // or t3, a3, r0
|
||||
c->mov64(t4, t0); // or t4, t0, r0
|
||||
|
||||
block_5:
|
||||
c->mov64(t5, a2); // or t5, a2, r0
|
||||
c->mov64(t6, t4); // or t6, t4, r0
|
||||
|
||||
block_6:
|
||||
// nop // sll r0, r0, 0
|
||||
c->lbu(t7, 0, t6); // lbu t7, 0(t6)
|
||||
// nop // sll r0, r0, 0
|
||||
c->and_(t7, t7, t1); // and t7, t7, t1
|
||||
c->daddiu(t5, t5, -1); // daddiu t5, t5, -1
|
||||
c->sb(t7, 0, t6); // sb t7, 0(t6)
|
||||
bc = c->sgpr64(t5) != 0; // bne t5, r0, L87
|
||||
c->daddu(t6, t6, v1); // daddu t6, t6, v1
|
||||
if (bc) {goto block_6;} // branch non-likely
|
||||
|
||||
c->daddiu(t3, t3, -1); // daddiu t3, t3, -1
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(t3) != 0; // bne t3, r0, L86
|
||||
c->daddu(t4, t4, a0); // daddu t4, t4, a0
|
||||
if (bc) {goto block_5;} // branch non-likely
|
||||
|
||||
c->daddiu(t2, t2, -1); // daddiu t2, t2, -1
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(t2) != 0; // bne t2, r0, L85
|
||||
c->daddu(t0, t0, a1); // daddu t0, t0, a1
|
||||
if (bc) {goto block_4;} // branch non-likely
|
||||
|
||||
c->gprs[v1].du64[0] = 0; // or v1, r0, r0
|
||||
c->gprs[v0].du64[0] = 0; // or v0, r0, r0
|
||||
c->ld(ra, 0, sp); // ld ra, 0(sp)
|
||||
c->lq(gp, 32, sp); // lq gp, 32(sp)
|
||||
c->lq(s5, 16, sp); // lq s5, 16(sp)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 48); // daddiu sp, sp, 48
|
||||
goto end_of_function; // return
|
||||
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
end_of_function:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
gLinkedFunctionTable.reg("(method 35 sphere-hash)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_35_sphere_hash
|
||||
} // namespace Mips2C
|
||||
// add method_35_sphere_hash::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_35_sphere_hash { extern void link(); }
|
||||
|
||||
//--------------------------MIPS2C---------------------
|
||||
// clang-format off
|
||||
#include "game/mips2c/mips2c_private.h"
|
||||
#include "game/kernel/jakx/kscheme.h"
|
||||
using ::jakx::intern_from_c;
|
||||
namespace Mips2C::jakx {
|
||||
namespace method_40_spatial_hash {
|
||||
struct Cache {
|
||||
void* mem_copy; // mem-copy!
|
||||
} cache;
|
||||
|
||||
u64 execute(void* ctxt) {
|
||||
auto* c = (ExecutionContext*)ctxt;
|
||||
bool bc = false;
|
||||
u32 call_addr = 0;
|
||||
c->daddiu(sp, sp, -96); // daddiu sp, sp, -96
|
||||
c->sd(ra, 0, sp); // sd ra, 0(sp)
|
||||
c->sq(s2, 16, sp); // sq s2, 16(sp)
|
||||
c->sq(s3, 32, sp); // sq s3, 32(sp)
|
||||
c->sq(s4, 48, sp); // sq s4, 48(sp)
|
||||
c->sq(s5, 64, sp); // sq s5, 64(sp)
|
||||
c->sq(gp, 80, sp); // sq gp, 80(sp)
|
||||
c->mov64(s5, a0); // or s5, a0, r0
|
||||
c->mov64(s4, a2); // or s4, a2, r0
|
||||
c->lh(gp, 56, s5); // lh gp, 56(s5)
|
||||
c->lh(v1, 88, s5); // lh v1, 88(s5)
|
||||
c->slt(v1, gp, v1); // slt v1, gp, v1
|
||||
bc = c->sgpr64(v1) == 0; // beq v1, r0, L33
|
||||
// nop // sll r0, r0, 0
|
||||
if (bc) {goto block_11;} // branch non-likely
|
||||
|
||||
c->lwu(v1, 84, s5); // lwu v1, 84(s5)
|
||||
c->dsll(a0, gp, 4); // dsll a0, gp, 4
|
||||
c->daddu(s3, v1, a0); // daddu s3, v1, a0
|
||||
c->lwu(v1, 100, s5); // lwu v1, 100(s5)
|
||||
c->dsll(a0, gp, 4); // dsll a0, gp, 4
|
||||
c->daddu(s2, v1, a0); // daddu s2, v1, a0
|
||||
c->load_symbol2(t9, cache.mem_copy); // lw t9, mem-copy!(s7)
|
||||
c->mov64(a0, s3); // or a0, s3, r0
|
||||
c->addiu(a2, r0, 16); // addiu a2, r0, 16
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->sw(s4, 0, s2); // sw s4, 0(s2)
|
||||
c->mov64(a0, s5); // or a0, s5, r0
|
||||
c->lwu(v1, -4, a0); // lwu v1, -4(a0)
|
||||
c->lwu(t9, 112, v1); // lwu t9, 112(v1)
|
||||
c->daddiu(a1, s5, 4); // daddiu a1, s5, 4
|
||||
c->mov64(a2, s3); // or a2, s3, r0
|
||||
call_addr = c->gprs[t9].du32[0]; // function call:
|
||||
c->sll(v0, ra, 0); // sll v0, ra, 0
|
||||
c->jalr(call_addr); // jalr ra, t9
|
||||
c->mov64(v1, v0); // or v1, v0, r0
|
||||
c->mov64(t1, s5); // or t1, s5, r0
|
||||
c->daddiu(t2, s5, 4); // daddiu t2, s5, 4
|
||||
c->mov64(a3, gp); // or a3, gp, r0
|
||||
c->lh(v1, 10, t1); // lh v1, 10(t1)
|
||||
c->lb(a0, 24, t1); // lb a0, 24(t1)
|
||||
c->mult3(a0, a0, v1); // mult3 a0, a0, v1
|
||||
c->lb(a1, 26, t1); // lb a1, 26(t1)
|
||||
c->mult3(a1, a1, a0); // mult3 a1, a1, a0
|
||||
c->addiu(a2, r0, 1); // addiu a2, r0, 1
|
||||
c->lb(t0, 0, t2); // lb t0, 0(t2)
|
||||
c->dsubu(a2, a2, t0); // dsubu a2, a2, t0
|
||||
c->lb(t0, 3, t2); // lb t0, 3(t2)
|
||||
c->daddu(a2, a2, t0); // daddu a2, a2, t0
|
||||
c->addiu(t0, r0, 1); // addiu t0, r0, 1
|
||||
c->lb(t3, 2, t2); // lb t3, 2(t2)
|
||||
c->dsubu(t0, t0, t3); // dsubu t0, t0, t3
|
||||
c->lb(t3, 5, t2); // lb t3, 5(t2)
|
||||
c->daddu(t0, t0, t3); // daddu t0, t0, t3
|
||||
c->addiu(t3, r0, 1); // addiu t3, r0, 1
|
||||
c->lb(t4, 1, t2); // lb t4, 1(t2)
|
||||
c->dsubu(t3, t3, t4); // dsubu t3, t3, t4
|
||||
c->lb(t4, 4, t2); // lb t4, 4(t2)
|
||||
c->daddu(t3, t3, t4); // daddu t3, t3, t4
|
||||
c->lb(t4, 0, t2); // lb t4, 0(t2)
|
||||
c->mult3(t4, t4, v1); // mult3 t4, t4, v1
|
||||
c->lb(t5, 1, t2); // lb t5, 1(t2)
|
||||
c->mult3(t5, t5, a1); // mult3 t5, t5, a1
|
||||
c->daddu(t4, t4, t5); // daddu t4, t4, t5
|
||||
c->lb(t2, 2, t2); // lb t2, 2(t2)
|
||||
c->mult3(t2, t2, a0); // mult3 t2, t2, a0
|
||||
c->daddu(t2, t4, t2); // daddu t2, t4, t2
|
||||
c->dsra(t4, a3, 3); // dsra t4, a3, 3
|
||||
c->daddu(t2, t2, t4); // daddu t2, t2, t4
|
||||
c->daddu(t2, r0, t2); // daddu t2, r0, t2
|
||||
c->lwu(t1, 28, t1); // lwu t1, 28(t1)
|
||||
c->daddu(t1, t2, t1); // daddu t1, t2, t1
|
||||
c->addiu(t2, r0, 1); // addiu t2, r0, 1
|
||||
c->andi(a3, a3, 7); // andi a3, a3, 7
|
||||
if (((s64)c->sgpr64(a3)) >= 0) { // bgezl a3, L29
|
||||
c->dsllv(a3, t2, a3); // dsllv a3, t2, a3
|
||||
goto block_4;
|
||||
}
|
||||
|
||||
block_3:
|
||||
c->dsubu(a3, r0, a3); // dsubu a3, r0, a3
|
||||
c->dsrav(a3, t2, a3); // dsrav a3, t2, a3
|
||||
|
||||
block_4:
|
||||
c->mov64(t2, t3); // or t2, t3, r0
|
||||
|
||||
block_5:
|
||||
c->mov64(t3, t0); // or t3, t0, r0
|
||||
c->mov64(t4, t1); // or t4, t1, r0
|
||||
|
||||
block_6:
|
||||
c->mov64(t5, a2); // or t5, a2, r0
|
||||
c->mov64(t6, t4); // or t6, t4, r0
|
||||
|
||||
block_7:
|
||||
// nop // sll r0, r0, 0
|
||||
c->lbu(t7, 0, t6); // lbu t7, 0(t6)
|
||||
// nop // sll r0, r0, 0
|
||||
c->or_(t7, t7, a3); // or t7, t7, a3
|
||||
c->daddiu(t5, t5, -1); // daddiu t5, t5, -1
|
||||
c->sb(t7, 0, t6); // sb t7, 0(t6)
|
||||
bc = c->sgpr64(t5) != 0; // bne t5, r0, L32
|
||||
c->daddu(t6, t6, v1); // daddu t6, t6, v1
|
||||
if (bc) {goto block_7;} // branch non-likely
|
||||
|
||||
c->daddiu(t3, t3, -1); // daddiu t3, t3, -1
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(t3) != 0; // bne t3, r0, L31
|
||||
c->daddu(t4, t4, a0); // daddu t4, t4, a0
|
||||
if (bc) {goto block_6;} // branch non-likely
|
||||
|
||||
c->daddiu(t2, t2, -1); // daddiu t2, t2, -1
|
||||
// nop // sll r0, r0, 0
|
||||
bc = c->sgpr64(t2) != 0; // bne t2, r0, L30
|
||||
c->daddu(t1, t1, a1); // daddu t1, t1, a1
|
||||
if (bc) {goto block_5;} // branch non-likely
|
||||
|
||||
c->gprs[v1].du64[0] = 0; // or v1, r0, r0
|
||||
c->lh(v1, 56, s5); // lh v1, 56(s5)
|
||||
c->daddiu(v1, v1, 1); // daddiu v1, v1, 1
|
||||
c->sh(v1, 56, s5); // sh v1, 56(s5)
|
||||
//beq r0, r0, L34 // beq r0, r0, L34
|
||||
// nop // sll r0, r0, 0
|
||||
goto block_12; // branch always
|
||||
|
||||
|
||||
block_11:
|
||||
c->addiu(gp, r0, -1); // addiu gp, r0, -1
|
||||
c->mov64(v1, gp); // or v1, gp, r0
|
||||
|
||||
block_12:
|
||||
c->mov64(v0, gp); // or v0, gp, r0
|
||||
c->ld(ra, 0, sp); // ld ra, 0(sp)
|
||||
c->lq(gp, 80, sp); // lq gp, 80(sp)
|
||||
c->lq(s5, 64, sp); // lq s5, 64(sp)
|
||||
c->lq(s4, 48, sp); // lq s4, 48(sp)
|
||||
c->lq(s3, 32, sp); // lq s3, 32(sp)
|
||||
c->lq(s2, 16, sp); // lq s2, 16(sp)
|
||||
//jr ra // jr ra
|
||||
c->daddiu(sp, sp, 96); // daddiu sp, sp, 96
|
||||
goto end_of_function; // return
|
||||
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
// nop // sll r0, r0, 0
|
||||
end_of_function:
|
||||
return c->gprs[v0].du64[0];
|
||||
}
|
||||
|
||||
void link() {
|
||||
cache.mem_copy = intern_from_c(-1, 0, "mem-copy!").c();
|
||||
gLinkedFunctionTable.reg("(method 40 spatial-hash)", execute, 256);
|
||||
}
|
||||
|
||||
} // namespace method_40_spatial_hash
|
||||
} // namespace Mips2C
|
||||
// add method_40_spatial_hash::link to the link callback table for the object file.
|
||||
// FWD DEC:
|
||||
namespace method_40_spatial_hash { extern void link(); }
|
||||
@@ -414,23 +414,17 @@ namespace init_boundary_regs { extern void link(); }
|
||||
namespace draw_boundary_polygon { extern void link(); }
|
||||
namespace render_boundary_quad { extern void link(); }
|
||||
namespace render_boundary_tri { extern void link(); }
|
||||
// namespace set_sky_vf27 { extern void link(); }
|
||||
namespace generic_light_proc { extern void link(); }
|
||||
namespace generic_envmap_proc { extern void link(); }
|
||||
// namespace generic_prepare_dma_double { extern void link(); }
|
||||
namespace generic_prepare_dma_single { extern void link(); }
|
||||
namespace generic_warp_source_proc { extern void link(); }
|
||||
namespace generic_warp_dest_proc { extern void link(); }
|
||||
namespace generic_warp_dest { extern void link(); }
|
||||
namespace generic_warp_envmap_dest { extern void link(); }
|
||||
namespace generic_no_light_proc { extern void link(); }
|
||||
// namespace method_9_font_work { extern void link(); }
|
||||
// namespace draw_string_asm { extern void link(); }
|
||||
// namespace get_string_length { extern void link(); }
|
||||
namespace adgif_shader_texture_with_update { extern void link(); }
|
||||
namespace moving_sphere_triangle_intersect { extern void link(); }
|
||||
namespace collide_do_primitives { extern void link(); }
|
||||
// namespace cspace_parented_transformq_joint { extern void link(); }
|
||||
namespace foreground_check_longest_edge_asm { extern void link(); }
|
||||
namespace foreground_merc { extern void link(); }
|
||||
namespace foreground_generic_merc { extern void link(); }
|
||||
@@ -440,9 +434,7 @@ namespace method_11_collide_hash { extern void link(); }
|
||||
namespace method_12_collide_hash { extern void link(); }
|
||||
namespace fill_bg_using_box_new { extern void link(); }
|
||||
namespace fill_bg_using_line_sphere_new { extern void link(); }
|
||||
namespace method_12_collide_mesh { extern void link(); }
|
||||
namespace method_14_collide_mesh { extern void link(); }
|
||||
// namespace method_15_collide_mesh { extern void link(); }
|
||||
namespace method_10_collide_shape_prim_mesh { extern void link(); }
|
||||
namespace method_10_collide_shape_prim_sphere { extern void link(); }
|
||||
namespace method_10_collide_shape_prim_group { extern void link(); }
|
||||
@@ -454,20 +446,11 @@ namespace method_10_collide_cache_prim { extern void link(); }
|
||||
namespace method_17_collide_cache { extern void link(); }
|
||||
namespace method_9_collide_puss_work { extern void link(); }
|
||||
namespace method_10_collide_puss_work { extern void link(); }
|
||||
// namespace method_18_grid_hash { extern void link(); }
|
||||
namespace method_19_grid_hash { extern void link(); }
|
||||
namespace method_20_grid_hash { extern void link(); }
|
||||
namespace method_22_grid_hash { extern void link(); }
|
||||
namespace method_28_sphere_hash { extern void link(); }
|
||||
// namespace method_32_sphere_hash { extern void link(); }
|
||||
// namespace method_29_sphere_hash { extern void link(); }
|
||||
namespace method_30_sphere_hash { extern void link(); }
|
||||
// namespace method_31_sphere_hash { extern void link(); }
|
||||
// namespace method_32_spatial_hash { extern void link(); }
|
||||
// namespace method_38_spatial_hash { extern void link(); }
|
||||
namespace method_35_spatial_hash { extern void link(); }
|
||||
namespace method_36_spatial_hash { extern void link(); }
|
||||
namespace method_34_spatial_hash { extern void link(); }
|
||||
namespace sparticle_motion_blur { extern void link(); }
|
||||
namespace sp_launch_particles_var { extern void link(); }
|
||||
namespace particle_adgif { extern void link(); }
|
||||
@@ -490,9 +473,6 @@ namespace ripple_matrix_scale { extern void link(); }
|
||||
namespace ripple_apply_wave_table { extern void link(); }
|
||||
namespace ripple_create_wave_table { extern void link(); }
|
||||
namespace ripple_execute_init { extern void link(); }
|
||||
// namespace method_14_ocean { extern void link(); }
|
||||
// namespace method_15_ocean { extern void link(); }
|
||||
// namespace method_16_ocean { extern void link(); }
|
||||
namespace init_ocean_far_regs { extern void link(); }
|
||||
namespace draw_large_polygon_ocean { extern void link(); }
|
||||
namespace render_ocean_quad { extern void link(); }
|
||||
@@ -511,11 +491,7 @@ namespace render_sky_tri { extern void link(); }
|
||||
namespace method_17_sky_work { extern void link(); }
|
||||
namespace method_29_sky_work { extern void link(); }
|
||||
namespace method_30_sky_work { extern void link(); }
|
||||
namespace method_31_sky_work { extern void link(); }
|
||||
// namespace method_34_sky_work { extern void link(); }
|
||||
// namespace method_35_sky_work { extern void link(); }
|
||||
namespace method_32_sky_work { extern void link(); }
|
||||
// namespace set_sky_vf23_value { extern void link(); }
|
||||
namespace shadow_xform_verts { extern void link(); }
|
||||
namespace shadow_calc_dual_verts { extern void link(); }
|
||||
namespace shadow_scissor_edges { extern void link(); }
|
||||
@@ -533,7 +509,16 @@ namespace shadow_add_single_tris { extern void link(); }
|
||||
namespace shadow_add_double_tris { extern void link(); }
|
||||
namespace shadow_execute { extern void link(); }
|
||||
namespace method_21_cloth_system { extern void link(); }
|
||||
}
|
||||
namespace method_16_sky_work { extern void link(); }
|
||||
namespace method_28_sky_work { extern void link(); }
|
||||
namespace method_33_sky_work { extern void link(); }
|
||||
namespace method_11_collide_mesh { extern void link(); }
|
||||
namespace method_13_collide_mesh { extern void link(); }
|
||||
namespace method_21_grid_hash { extern void link(); }
|
||||
namespace method_24_grid_hash { extern void link(); }
|
||||
namespace method_35_sphere_hash { extern void link(); }
|
||||
namespace method_40_spatial_hash { extern void link(); }
|
||||
namespace cspace_parented_transformq_joint { extern void link(); }}
|
||||
// clang-format on
|
||||
|
||||
LinkedFunctionTable gLinkedFunctionTable;
|
||||
@@ -801,27 +786,20 @@ PerGameVersion<std::unordered_map<std::string, std::vector<void (*)()>>> gMips2C
|
||||
jakx::light_hash_count_items::link, jakx::light_hash_add_items::link}},
|
||||
{"debug",
|
||||
{
|
||||
jakx::debug_line_clip::link, jakx::init_boundary_regs::link,
|
||||
jakx::draw_boundary_polygon::link, jakx::render_boundary_quad::link,
|
||||
// jakx::render_boundary_tri::link, jakx::set_sky_vf27::link
|
||||
jakx::debug_line_clip::link,
|
||||
jakx::init_boundary_regs::link,
|
||||
jakx::draw_boundary_polygon::link,
|
||||
jakx::render_boundary_quad::link,
|
||||
}},
|
||||
{"generic-effect",
|
||||
{jakx::generic_light_proc::link, jakx::generic_envmap_proc::link,
|
||||
// jakx::generic_prepare_dma_double::link,
|
||||
jakx::generic_prepare_dma_single::link, jakx::generic_warp_source_proc::link,
|
||||
jakx::generic_warp_dest_proc::link, jakx::generic_warp_dest::link,
|
||||
jakx::generic_warp_envmap_dest::link, jakx::generic_no_light_proc::link}},
|
||||
// {"font",
|
||||
// {jakx::method_9_font_work::link,
|
||||
// jakx::draw_string_asm::link,
|
||||
// jakx::get_string_length::link}},
|
||||
{"texture", {jakx::adgif_shader_texture_with_update::link}},
|
||||
{"collide-func",
|
||||
{jakx::moving_sphere_triangle_intersect::link, jakx::collide_do_primitives::link}},
|
||||
{"joint",
|
||||
{
|
||||
// jakx::cspace_parented_transformq_joint::link
|
||||
}},
|
||||
{"joint", {jakx::cspace_parented_transformq_joint::link}},
|
||||
{"foreground",
|
||||
{jakx::foreground_check_longest_edge_asm::link, jakx::foreground_generic_merc::link,
|
||||
jakx::foreground_merc::link, jakx::foreground_draw_hud::link}},
|
||||
@@ -830,9 +808,8 @@ PerGameVersion<std::unordered_map<std::string, std::vector<void (*)()>>> gMips2C
|
||||
{jakx::method_11_collide_hash::link, jakx::method_12_collide_hash::link,
|
||||
jakx::fill_bg_using_box_new::link, jakx::fill_bg_using_line_sphere_new::link}},
|
||||
{"collide-mesh",
|
||||
{jakx::method_12_collide_mesh::link, jakx::method_14_collide_mesh::link,
|
||||
// jakx::method_15_collide_mesh::link,
|
||||
jakx::method_10_collide_shape_prim_mesh::link}},
|
||||
{jakx::method_14_collide_mesh::link, jakx::method_10_collide_shape_prim_mesh::link,
|
||||
jakx::method_11_collide_mesh::link, jakx::method_13_collide_mesh::link}},
|
||||
{"collide-cache",
|
||||
{jakx::method_10_collide_shape_prim_mesh::link,
|
||||
jakx::method_10_collide_shape_prim_sphere::link,
|
||||
@@ -843,19 +820,11 @@ PerGameVersion<std::unordered_map<std::string, std::vector<void (*)()>>> gMips2C
|
||||
jakx::method_10_collide_cache_prim::link, jakx::method_17_collide_cache::link,
|
||||
jakx::method_9_collide_puss_work::link, jakx::method_10_collide_puss_work::link}},
|
||||
{"spatial-hash",
|
||||
{
|
||||
// jakx::method_18_grid_hash::link,
|
||||
jakx::method_19_grid_hash::link, jakx::method_20_grid_hash::link,
|
||||
jakx::method_22_grid_hash::link, jakx::method_28_sphere_hash::link,
|
||||
// jakx::method_32_sphere_hash::link,
|
||||
// jakx::method_29_sphere_hash::link,
|
||||
jakx::method_30_sphere_hash::link,
|
||||
// jakx::method_31_sphere_hash::link,
|
||||
// jakx::method_32_spatial_hash::link,
|
||||
// jakx::method_38_spatial_hash::link,
|
||||
jakx::method_35_spatial_hash::link, jakx::method_36_spatial_hash::link,
|
||||
// jakx::method_34_spatial_hash::link
|
||||
}},
|
||||
{jakx::method_20_grid_hash::link, jakx::method_22_grid_hash::link,
|
||||
jakx::method_30_sphere_hash::link, jakx::method_36_spatial_hash::link,
|
||||
jakx::method_21_grid_hash::link, jakx::method_24_grid_hash::link,
|
||||
jakx::method_35_sphere_hash::link, jakx::method_35_spatial_hash::link,
|
||||
jakx::method_40_spatial_hash::link}},
|
||||
{"sparticle-launcher",
|
||||
{jakx::sparticle_motion_blur::link, jakx::sp_launch_particles_var::link,
|
||||
jakx::particle_adgif::link, jakx::sp_init_fields::link}},
|
||||
@@ -872,12 +841,7 @@ PerGameVersion<std::unordered_map<std::string, std::vector<void (*)()>>> gMips2C
|
||||
{"ripple",
|
||||
{jakx::ripple_matrix_scale::link, jakx::ripple_apply_wave_table::link,
|
||||
jakx::ripple_create_wave_table::link, jakx::ripple_execute_init::link}},
|
||||
{"ocean-vu0",
|
||||
{
|
||||
// jakx::method_14_ocean::link,
|
||||
// jakx::method_15_ocean::link,
|
||||
// jakx::method_16_ocean::link
|
||||
}},
|
||||
{"ocean-vu0", {}},
|
||||
{"ocean",
|
||||
{jakx::init_ocean_far_regs::link, jakx::draw_large_polygon_ocean::link,
|
||||
jakx::render_ocean_quad::link}},
|
||||
@@ -889,12 +853,9 @@ PerGameVersion<std::unordered_map<std::string, std::vector<void (*)()>>> gMips2C
|
||||
{"sky-tng",
|
||||
{jakx::set_tex_offset::link, jakx::render_sky_quad::link, jakx::render_sky_tri::link,
|
||||
jakx::method_17_sky_work::link, jakx::method_29_sky_work::link,
|
||||
jakx::method_30_sky_work::link, jakx::method_31_sky_work::link,
|
||||
// jakx::method_34_sky_work::link,
|
||||
// jakx::method_35_sky_work::link,
|
||||
jakx::method_32_sky_work::link,
|
||||
// jakx::set_sky_vf23_value::link,
|
||||
jakx::draw_large_polygon::link}},
|
||||
jakx::method_30_sky_work::link, jakx::method_32_sky_work::link,
|
||||
jakx::draw_large_polygon::link, jakx::method_16_sky_work::link,
|
||||
jakx::method_28_sky_work::link, jakx::method_33_sky_work::link}},
|
||||
{"shadow-cpu",
|
||||
{jakx::shadow_xform_verts::link, jakx::shadow_execute::link,
|
||||
jakx::shadow_calc_dual_verts::link, jakx::shadow_scissor_edges::link,
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
;; Common layout of hardware registers shared between the two VIFs
|
||||
(deftype vif-bank (structure)
|
||||
((stat uint32)
|
||||
(fbrst uint32 :offset 16)
|
||||
(fbrst vif-fbrst :offset 16)
|
||||
(err vif-err :offset 32)
|
||||
(mark uint32 :offset 48)
|
||||
(cycle uint32 :offset 64)
|
||||
|
||||
@@ -133,7 +133,7 @@ It type checks the arguments for the entry function.
|
||||
(set! docstring (first body)))
|
||||
(when (not (null? *defstate-type-stack*))
|
||||
(fmt #t
|
||||
"*defstate-type-stack* leaked! An error probably happened in a previous defstate. stack is: {}"
|
||||
"*defstate-type-stack* leaked! An error probably happened in a previous defstate. stack is: {}\n"
|
||||
*defstate-type-stack*))
|
||||
(set! *defstate-type-stack* '())
|
||||
(when virtual
|
||||
|
||||
@@ -664,7 +664,7 @@
|
||||
(set! (-> s5-1 max quad) (-> v1-34 quad))
|
||||
)
|
||||
(dotimes (s4-1 (-> gp-0 num-joints))
|
||||
(add-point! s5-1 (the-as vector (+ (the-as uint (-> gp-0 joint 0 mat trans)) (* 240 s4-1))))
|
||||
(add-point! s5-1 (-> gp-0 joint s4-1 mat trans))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -881,8 +881,8 @@
|
||||
)
|
||||
(while (!= s4-0 -134250495)
|
||||
(camera-line
|
||||
(the-as vector (-> this point s5-0))
|
||||
(the-as vector (-> this point s4-0))
|
||||
(-> this point s5-0 position)
|
||||
(-> this point s4-0 position)
|
||||
(new 'static 'vector4w :x #x80 :y #x80 :z #x80 :w #x80)
|
||||
)
|
||||
(set! s5-0 s4-0)
|
||||
@@ -893,7 +893,7 @@
|
||||
(camera-cross
|
||||
(new 'static 'vector :y 1024.0)
|
||||
(new 'static 'vector :z 1024.0)
|
||||
(the-as vector (-> this point s5-0))
|
||||
(-> this point s5-0 position)
|
||||
(new 'static 'vector4w :x #xff :w #x80)
|
||||
(meters 0.25)
|
||||
)
|
||||
@@ -1022,7 +1022,7 @@
|
||||
(meters 0.25)
|
||||
)
|
||||
)
|
||||
(let ((f30-0 (* 0.5 (-> *camera-combiner* fov))))
|
||||
(let ((f30-0 (/ (-> *camera-combiner* fov) 2)))
|
||||
(camera-fov-frame
|
||||
(-> *camera-combiner* inv-camera-rot)
|
||||
(camera-pos)
|
||||
@@ -1034,9 +1034,9 @@
|
||||
)
|
||||
(cond
|
||||
((= (-> arg0 blend-to-type) (camera-blend-to-type unknown-2))
|
||||
(let ((f0-2 (* 0.5 (-> arg0 fov))))
|
||||
(let ((f0-2 (/ (-> arg0 fov) 2)))
|
||||
(camera-fov-frame
|
||||
(the-as matrix (-> *camera-combiner* tracking))
|
||||
(-> *camera-combiner* tracking inv-mat)
|
||||
(-> arg0 trans)
|
||||
f0-2
|
||||
0.75
|
||||
@@ -1046,9 +1046,9 @@
|
||||
)
|
||||
)
|
||||
(else
|
||||
(let ((f0-4 (* 0.5 (-> arg0 fov))))
|
||||
(let ((f0-4 (/ (-> arg0 fov) 2)))
|
||||
(camera-fov-frame
|
||||
(the-as matrix (-> arg0 tracking))
|
||||
(-> arg0 tracking inv-mat)
|
||||
(-> arg0 trans)
|
||||
f0-4
|
||||
0.75
|
||||
@@ -1531,7 +1531,7 @@
|
||||
|
||||
(defun camera-master-debug ((arg0 camera-master))
|
||||
(when *display-cam-other*
|
||||
(let ((f0-1 (* 0.5 (-> *camera-other-fov* data))))
|
||||
(let ((f0-1 (/ (-> *camera-other-fov* data) 2)))
|
||||
(camera-fov-frame
|
||||
*camera-other-matrix*
|
||||
*camera-other-trans*
|
||||
@@ -1545,7 +1545,7 @@
|
||||
(let ((s4-0 (new 'stack-no-clear 'vector))
|
||||
(s5-0 *camera-other-trans*)
|
||||
)
|
||||
(vector+float*! s4-0 s5-0 (the-as vector (-> *camera-other-matrix* vector)) 2048.0)
|
||||
(vector+float*! s4-0 s5-0 (-> *camera-other-matrix* vector 0) 2048.0)
|
||||
(camera-line s5-0 s4-0 (new 'static 'vector4w :x #xff :w #x80))
|
||||
(vector+float*! s4-0 s5-0 (-> *camera-other-matrix* vector 1) 2048.0)
|
||||
(camera-line s5-0 s4-0 (new 'static 'vector4w :y #xff :w #x80))
|
||||
@@ -1636,7 +1636,7 @@
|
||||
(set! (-> a1-0 trans w) 1.0)
|
||||
(debug-set-camera-pos-rot! a0-0 a1-0)
|
||||
)
|
||||
(send-event *camera* 'set-fov (degrees 64))
|
||||
(send-event *camera* 'set-fov 11650.845)
|
||||
(clear *camera-old-level*)
|
||||
(format *camera-old-level* "dig3a")
|
||||
(set! *camera-old-cpu* 4815)
|
||||
|
||||
@@ -476,15 +476,9 @@
|
||||
(+! (-> this point v1-3 incarnation) 1)
|
||||
(let ((v1-11 (-> this point arg0 next)))
|
||||
(set! (-> this summed-len) (- (-> this summed-len) (-> this point arg0 tp-length)))
|
||||
(vector-!
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 arg0)))
|
||||
(-> this point v1-11 position)
|
||||
(-> this point arg0 position)
|
||||
)
|
||||
(vector-! (-> this point arg0 direction) (-> this point v1-11 position) (-> this point arg0 position))
|
||||
)
|
||||
(set! (-> this point arg0 tp-length)
|
||||
(vector-normalize-ret-len! (the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 arg0))) 1.0)
|
||||
)
|
||||
(set! (-> this point arg0 tp-length) (vector-normalize-ret-len! (-> this point arg0 direction) 1.0))
|
||||
(+! (-> this summed-len) (-> this point arg0 tp-length))
|
||||
(+! (-> this used-count) -1)
|
||||
)
|
||||
@@ -554,12 +548,7 @@
|
||||
)
|
||||
0.0
|
||||
(while (not (or (= a0-14 -134250495) (= a0-14 (-> this end-point))))
|
||||
(let ((f1-2 (vector-dot
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 v1-15)))
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 a0-14)))
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((f1-2 (vector-dot (-> this point v1-15 direction) (-> this point a0-14 direction))))
|
||||
(when (>= f1-2 f0-2)
|
||||
(set! f0-2 f1-2)
|
||||
(set! a1-1 v1-15)
|
||||
@@ -596,11 +585,7 @@
|
||||
)
|
||||
)
|
||||
(if (< (* (-> this point s4-1 tp-length)
|
||||
(+ 1.0 (vector-dot
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 s4-1)))
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 v1-11)))
|
||||
)
|
||||
)
|
||||
(+ 1.0 (vector-dot (-> this point s4-1 direction) (-> this point v1-11 direction)))
|
||||
)
|
||||
arg0
|
||||
)
|
||||
@@ -621,14 +606,8 @@
|
||||
(let ((s3-0 (-> this free-point))
|
||||
(s2-0 (-> this end-point))
|
||||
)
|
||||
(vector-!
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 s2-0)))
|
||||
arg0
|
||||
(-> this point s2-0 position)
|
||||
)
|
||||
(set! (-> this point s2-0 tp-length)
|
||||
(vector-normalize-ret-len! (the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 s2-0))) 1.0)
|
||||
)
|
||||
(vector-! (-> this point s2-0 direction) arg0 (-> this point s2-0 position))
|
||||
(set! (-> this point s2-0 tp-length) (vector-normalize-ret-len! (-> this point s2-0 direction) 1.0))
|
||||
(if (< (-> this point s2-0 tp-length) arg1)
|
||||
(return 0)
|
||||
)
|
||||
@@ -736,11 +715,7 @@
|
||||
)
|
||||
(while (and (!= v1-18 (-> this end-point)) (!= v1-18 (-> this next-to-last-point)) (!= v1-18 arg1))
|
||||
(let ((s1-0 (-> this point v1-18 next)))
|
||||
(vector-!
|
||||
s2-0
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 s1-0)))
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 v1-18)))
|
||||
)
|
||||
(vector-! s2-0 (-> this point s1-0 direction) (-> this point v1-18 direction))
|
||||
(let* ((f0-5 (vector-normalize-ret-len! s2-0 1.0))
|
||||
(f0-6 (/ f0-5 2))
|
||||
(f26-0 (* (fmin 1.0 f0-6) f30-0 (vector-dot arg0 s2-0)))
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
(when (>= (vector4-dot s5-0 (the-as vector (-> this leading))) 0.0)
|
||||
(let* ((v1-7 (-> this sections))
|
||||
(a0-3 (-> v1-7 length))
|
||||
(a3-0 (the-as object (-> this leading)))
|
||||
(a3-0 (-> this leading))
|
||||
)
|
||||
(dotimes (s3-1 a0-3)
|
||||
(let ((s2-0 (-> v1-7 data s3-1)))
|
||||
@@ -102,7 +102,7 @@
|
||||
(when (and (>= f0-9 -41984.0) (>= 41779.2 f0-9))
|
||||
(let* ((a0-11 (new 'stack-no-clear 'vector))
|
||||
(s1-0 (new 'stack-no-clear 'vector))
|
||||
(f30-0 (ray-plane-equation-intersect a0-11 s5-0 (-> s2-0 pull-dir) (the-as vector a3-0)))
|
||||
(f30-0 (ray-plane-equation-intersect a0-11 s5-0 (-> s2-0 pull-dir) a3-0))
|
||||
(f0-10 (ray-plane-equation-intersect s1-0 s5-0 (-> s2-0 pull-dir) (-> s2-0 trailing)))
|
||||
)
|
||||
(let ((a0-13 (new 'stack-no-clear 'vector)))
|
||||
@@ -152,7 +152,7 @@
|
||||
(return #f)
|
||||
)
|
||||
)
|
||||
(set! a3-0 (+ (the-as uint (-> v1-7 data 0 trailing)) (* s3-1 64)))
|
||||
(set! a3-0 (-> v1-7 data s3-1 trailing))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -243,24 +243,15 @@
|
||||
(format *stdcon* ")~%")
|
||||
(vector-average!
|
||||
(-> s4-0 trans)
|
||||
(the-as
|
||||
vector
|
||||
(+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> s3-0 runtime-node-id-1)))
|
||||
)
|
||||
(the-as
|
||||
vector
|
||||
(+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> s3-0 runtime-node-id-2)))
|
||||
)
|
||||
(-> this nav-graph node-array data (-> s3-0 runtime-node-id-1) position)
|
||||
(-> this nav-graph node-array data (-> s3-0 runtime-node-id-2) position)
|
||||
)
|
||||
(dotimes (s3-1 (-> this nav-graph visnode-array length))
|
||||
(let ((v1-23 (-> this nav-graph visnode-array data s3-1)))
|
||||
(when (and (= (-> v1-23 runtime-edge-id) arg0) (not (logtest? (-> v1-23 mysql-save-flag) (mysql-save-flag delete))))
|
||||
(vector-!
|
||||
(-> s4-0 vector 0)
|
||||
(the-as
|
||||
vector
|
||||
(+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> v1-23 runtime-node-id)))
|
||||
)
|
||||
(-> this nav-graph node-array data (-> v1-23 runtime-node-id) position)
|
||||
(-> s4-0 trans)
|
||||
)
|
||||
(vector-normalize! (-> s4-0 vector 0) (fmax 15360.0 (+ -15360.0 (vector-length (-> s4-0 vector 0)))))
|
||||
@@ -1180,8 +1171,8 @@
|
||||
((zero? v1-20)
|
||||
(format #t "Undo move-node ~D~%" (-> s4-0 id))
|
||||
(vector-!
|
||||
(the-as vector (+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> s4-0 index))))
|
||||
(the-as vector (+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> s4-0 index))))
|
||||
(-> this nav-graph node-array data (-> s4-0 index) position)
|
||||
(-> this nav-graph node-array data (-> s4-0 index) position)
|
||||
(-> s4-0 move-vec)
|
||||
)
|
||||
(nav-graph-editor-method-54 this (-> s4-0 index))
|
||||
@@ -1412,10 +1403,7 @@
|
||||
(let ((a0-4 (nav-graph-editor-method-49 this)))
|
||||
(vector-!
|
||||
(-> a0-4 move-vec)
|
||||
(the-as
|
||||
vector
|
||||
(+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> this selected-index)))
|
||||
)
|
||||
(-> this nav-graph node-array data (-> this selected-index) position)
|
||||
(-> a0-4 move-vec)
|
||||
)
|
||||
)
|
||||
@@ -1438,13 +1426,7 @@
|
||||
(logior! (-> a0-5 mysql-save-flag) (mysql-save-flag update))
|
||||
)
|
||||
(set! (-> v1-3 index) (-> self selected-index))
|
||||
(set! (-> v1-3 move-vec quad)
|
||||
(-> (the-as
|
||||
(pointer uint128)
|
||||
(+ (the-as uint (-> self nav-graph node-array data 0 position)) (* 80 (-> self selected-index)))
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! (-> v1-3 move-vec quad) (-> self nav-graph node-array data (-> self selected-index) position quad))
|
||||
)
|
||||
)
|
||||
:code sleep-code
|
||||
@@ -1516,11 +1498,11 @@
|
||||
(add-debug-line-sphere
|
||||
#t
|
||||
(bucket-id debug2)
|
||||
(the-as vector (+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> this edge-src))))
|
||||
(-> this nav-graph node-array data (-> this edge-src) position)
|
||||
(vector-!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(-> this mouse-hit)
|
||||
(the-as vector (+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> this edge-src))))
|
||||
(-> this nav-graph node-array data (-> this edge-src) position)
|
||||
)
|
||||
1024.0
|
||||
(if (>= (-> this selected-index) 0)
|
||||
|
||||
@@ -20,7 +20,29 @@
|
||||
)
|
||||
|
||||
(define *sampler-count* "Incremented everytime a metric is sampled
|
||||
@see [[timer0-handler]]" 0)
|
||||
@see [[timer0-handler]]" 0)
|
||||
|
||||
(defun-debug timer0-handler ((arg0 int) (arg1 int) (arg2 int))
|
||||
(let* ((v1-0 arg2)
|
||||
(v1-1 (logand #x3ffffff v1-0))
|
||||
)
|
||||
(when (< (the-as uint v1-1) (the-as uint #x2000000))
|
||||
(let ((v1-4 (&+ *sampler-mem* (* (shr v1-1 3) 4))))
|
||||
(+! (-> (the-as (pointer uint32) v1-4)) 1)
|
||||
)
|
||||
(set! *sampler-count* (+ *sampler-count* 1))
|
||||
)
|
||||
)
|
||||
(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)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; og:preserve-this
|
||||
; (set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode))
|
||||
|
||||
|
||||
(defun-debug sampler-start ()
|
||||
"Reset the [[timer-bank]] EE registers.
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
(when v1-1
|
||||
(dotimes (a0-4 3)
|
||||
(dotimes (a1-0 3)
|
||||
(set! (-> (the-as (pointer int32) (+ (+ (* a0-4 16) (* a1-0 4)) (the-as int *texture-masks*))))
|
||||
(set! (-> *texture-masks* data a0-4 mask data a1-0)
|
||||
(logior (-> (the-as (pointer int32) (+ (* a1-0 4) (the-as int *texture-masks*) (* a0-4 16))) 0)
|
||||
(-> (the-as (pointer int32) (+ (* a1-0 4) (the-as int v1-1) (* a0-4 16))) 15)
|
||||
)
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(deftype eye (structure)
|
||||
"Data for a single eye."
|
||||
((data vector 2 :inline)
|
||||
(x float :overlay-at (-> data 0 data 0))
|
||||
(y float :overlay-at (-> data 0 data 1))
|
||||
@@ -23,6 +24,7 @@
|
||||
|
||||
|
||||
(deftype eye-control (structure)
|
||||
"Information about the state of both eyes of a [[process-drawable]]."
|
||||
((process handle)
|
||||
(draw-flag symbol)
|
||||
(different-eyes symbol)
|
||||
@@ -37,6 +39,7 @@
|
||||
|
||||
|
||||
(deftype eye-control-array (basic)
|
||||
"An array of [[eye-control]]s."
|
||||
((data eye-control 16 :inline)
|
||||
)
|
||||
)
|
||||
@@ -50,6 +53,7 @@
|
||||
|
||||
|
||||
(deftype eye-work (structure)
|
||||
"Eye renderer DMA data."
|
||||
((sprite-tmpl dma-gif-packet :inline)
|
||||
(sprite-tmpl2 dma-gif-packet :inline)
|
||||
(adgif-tmpl dma-gif-packet :inline)
|
||||
@@ -72,7 +76,7 @@
|
||||
|
||||
(dotimes (v1-6 6)
|
||||
(dotimes (a0-10 16)
|
||||
(let ((a1-14 (the-as eye-control (+ (+ (* 96 a0-10) 28 (* 1552 v1-6)) (the-as int *eye-control-arrays*)))))
|
||||
(let ((a1-14 (-> *eye-control-arrays* data v1-6 data a0-10)))
|
||||
(set! (-> a1-14 process) (the-as handle #f))
|
||||
(set! (-> a1-14 draw-flag) #t)
|
||||
(set! (-> a1-14 shaders) (the-as (inline-array adgif-shader) #f))
|
||||
|
||||
@@ -1016,7 +1016,7 @@
|
||||
(when (not (-> *blit-displays-work* screen-copied))
|
||||
(dotimes (gp-0 6)
|
||||
(dotimes (s5-0 16)
|
||||
(let* ((s4-0 (the-as eye-control (+ (+ (* 96 s5-0) 28 (* 1552 gp-0)) (the-as int *eye-control-arrays*))))
|
||||
(let* ((s4-0 (-> *eye-control-arrays* data gp-0 data s5-0))
|
||||
(v1-8 (handle->process (-> s4-0 process)))
|
||||
)
|
||||
(when (and v1-8
|
||||
@@ -1305,10 +1305,9 @@
|
||||
)
|
||||
|
||||
(defun set-eye-draw-flag ((arg0 symbol) (arg1 int))
|
||||
(let ((s5-0 (-> *eye-control-arrays* data (/ arg1 20) data (mod arg1 20)))
|
||||
)
|
||||
(let ((s5-0 (-> *eye-control-arrays* data (/ arg1 20) data (mod arg1 20))))
|
||||
(format 0 "flag: ~a eye-slot: ~d ~%" arg0 arg1)
|
||||
(set! (-> (the-as eye-control s5-0) draw-flag) arg0)
|
||||
(set! (-> s5-0 draw-flag) arg0)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
|
||||
@@ -844,20 +844,7 @@
|
||||
)
|
||||
(if *ocean-map-sewer*
|
||||
(set! (-> *ocean-map-sewer* ocean-colors colors 1271)
|
||||
(the-as
|
||||
rgba
|
||||
(logior (logand (logior (logand (logior (logand (logior (logand 0 -256) (shr (shl (the int (* 19.0 f0-7)) 56) 56)) -65281)
|
||||
(shr (shl (the int (* 24.5 f0-7)) 56) 48)
|
||||
)
|
||||
-16711681
|
||||
)
|
||||
(shr (shl (the int (* 16.0 f0-7)) 56) 40)
|
||||
)
|
||||
(the-as uint #xffffffff00ffffff)
|
||||
)
|
||||
(shl #x8000 16)
|
||||
)
|
||||
)
|
||||
(new 'static 'rgba :a #x80 :r (the int (* 19.0 f0-7)) :g (the int (* 24.5 f0-7)) :b (the int (* 16.0 f0-7)))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -127,18 +127,18 @@
|
||||
)
|
||||
(dotimes (data-idx 8)
|
||||
(vector-float*!
|
||||
(the-as vector (-> *overide-table* mood-fog-table data data-idx))
|
||||
(the-as vector (-> *overide-table* mood-fog-table data data-idx))
|
||||
(-> *overide-table* mood-fog-table data data-idx fog-color)
|
||||
(-> *overide-table* mood-fog-table data data-idx fog-color)
|
||||
(-> *overide-table* mood-fog-table data data-idx fog-color w)
|
||||
)
|
||||
(vector-float*!
|
||||
(the-as vector (-> *overide-table* mood-color-table data data-idx))
|
||||
(the-as vector (-> *overide-table* mood-color-table data data-idx))
|
||||
(-> *overide-table* mood-color-table data data-idx lgt-color)
|
||||
(-> *overide-table* mood-color-table data data-idx lgt-color)
|
||||
(-> *overide-table* mood-color-table data data-idx lgt-color w)
|
||||
)
|
||||
(vector-float*!
|
||||
(the-as vector (+ (the-as uint (-> *overide-table* mood-color-table data 0 amb-color)) (* data-idx 32)))
|
||||
(the-as vector (+ (the-as uint (-> *overide-table* mood-color-table data 0 amb-color)) (* data-idx 32)))
|
||||
(-> *overide-table* mood-color-table data data-idx amb-color)
|
||||
(-> *overide-table* mood-color-table data data-idx amb-color)
|
||||
(-> *overide-table* mood-color-table data data-idx amb-color w)
|
||||
)
|
||||
(set! (-> *overide-table* mood-fog-table data data-idx fog-color w) 128.0)
|
||||
|
||||
@@ -404,8 +404,8 @@
|
||||
(-> *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)
|
||||
(-> *overide-table* mood-color-table data v1-7 amb-color)
|
||||
(-> *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)
|
||||
@@ -556,8 +556,8 @@
|
||||
)
|
||||
(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)
|
||||
(let ((v1-119 (-> arg0 light-group s5-4 lights s4-3)))
|
||||
(vector-normalize! (-> v1-119 direction) 1.0)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -379,12 +379,12 @@
|
||||
(pad uint8 30)
|
||||
(level level 7 :inline)
|
||||
(level0 level :inline :overlay-at (-> level 0))
|
||||
(level1 level :inline :offset 5488)
|
||||
(level2 level :inline :offset 10720)
|
||||
(level3 level :inline :offset 15952)
|
||||
(level4 level :inline :offset 21184)
|
||||
(level5 level :inline :offset 26416)
|
||||
(default-level level :inline :offset 31648)
|
||||
(level1 level :inline :overlay-at (-> level 1))
|
||||
(level2 level :inline :overlay-at (-> level 2))
|
||||
(level3 level :inline :overlay-at (-> level 3))
|
||||
(level4 level :inline :overlay-at (-> level 4))
|
||||
(level5 level :inline :overlay-at (-> level 5))
|
||||
(default-level level :inline :overlay-at (-> level 6))
|
||||
(pad2 uint8 4)
|
||||
)
|
||||
(:methods
|
||||
|
||||
@@ -53,42 +53,26 @@
|
||||
)
|
||||
(cond
|
||||
((= (logand (/ (the int (-> s5-0 w)) 2) 1) 1)
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a1-2 16) (* a1-2 4)) (the-as int arg0)))) f30-0)
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a1-2 16) (* a0-21 4)) (the-as int arg0)))) (* f28-0 f24-0))
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a1-2 16) (* v1-17 4)) (the-as int arg0)))) (* f28-0 f26-0))
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a0-21 16) (* a1-2 4)) (the-as int arg0)))) (* f28-0 f4-0))
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a0-21 16) (* a0-21 4)) (the-as int arg0))))
|
||||
(- f0-17 (* f30-0 f3-0))
|
||||
)
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a0-21 16) (* v1-17 4)) (the-as int arg0))))
|
||||
(- (- f2-0) (* f30-0 f1-1))
|
||||
)
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* v1-17 16) (* a1-2 4)) (the-as int arg0)))) (- (* f28-0 f22-0)))
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* v1-17 16) (* a0-21 4)) (the-as int arg0))))
|
||||
(+ f1-1 (* f30-0 f2-0))
|
||||
)
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* v1-17 16) (* v1-17 4)) (the-as int arg0))))
|
||||
(+ (- f3-0) (* f30-0 f0-17))
|
||||
)
|
||||
(set! (-> arg0 vector a1-2 data a1-2) f30-0)
|
||||
(set! (-> arg0 vector a1-2 data a0-21) (* f28-0 f24-0))
|
||||
(set! (-> arg0 vector a1-2 data v1-17) (* f28-0 f26-0))
|
||||
(set! (-> arg0 vector a0-21 data a1-2) (* f28-0 f4-0))
|
||||
(set! (-> arg0 vector a0-21 data a0-21) (- f0-17 (* f30-0 f3-0)))
|
||||
(set! (-> arg0 vector a0-21 data v1-17) (- (- f2-0) (* f30-0 f1-1)))
|
||||
(set! (-> arg0 vector v1-17 data a1-2) (- (* f28-0 f22-0)))
|
||||
(set! (-> arg0 vector v1-17 data a0-21) (+ f1-1 (* f30-0 f2-0)))
|
||||
(set! (-> arg0 vector v1-17 data v1-17) (+ (- f3-0) (* f30-0 f0-17)))
|
||||
)
|
||||
(else
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a1-2 16) (* a1-2 4)) (the-as int arg0)))) (* f30-0 f22-0))
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a1-2 16) (* a0-21 4)) (the-as int arg0))))
|
||||
(+ (- f1-1) (* f28-0 f2-0))
|
||||
)
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a1-2 16) (* v1-17 4)) (the-as int arg0))))
|
||||
(+ f3-0 (* f28-0 f0-17))
|
||||
)
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a0-21 16) (* a1-2 4)) (the-as int arg0)))) (* f30-0 f4-0))
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a0-21 16) (* a0-21 4)) (the-as int arg0))))
|
||||
(+ f0-17 (* f28-0 f3-0))
|
||||
)
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* a0-21 16) (* v1-17 4)) (the-as int arg0))))
|
||||
(+ (- f2-0) (* f28-0 f1-1))
|
||||
)
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* v1-17 16) (* a1-2 4)) (the-as int arg0)))) (- f28-0))
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* v1-17 16) (* a0-21 4)) (the-as int arg0)))) (* f30-0 f24-0))
|
||||
(set! (-> (the-as (pointer float) (+ (+ (* v1-17 16) (* v1-17 4)) (the-as int arg0)))) (* f30-0 f26-0))
|
||||
(set! (-> arg0 vector a1-2 data a1-2) (* f30-0 f22-0))
|
||||
(set! (-> arg0 vector a1-2 data a0-21) (+ (- f1-1) (* f28-0 f2-0)))
|
||||
(set! (-> arg0 vector a1-2 data v1-17) (+ f3-0 (* f28-0 f0-17)))
|
||||
(set! (-> arg0 vector a0-21 data a1-2) (* f30-0 f4-0))
|
||||
(set! (-> arg0 vector a0-21 data a0-21) (+ f0-17 (* f28-0 f3-0)))
|
||||
(set! (-> arg0 vector a0-21 data v1-17) (+ (- f2-0) (* f28-0 f1-1)))
|
||||
(set! (-> arg0 vector v1-17 data a1-2) (- f28-0))
|
||||
(set! (-> arg0 vector v1-17 data a0-21) (* f30-0 f24-0))
|
||||
(set! (-> arg0 vector v1-17 data v1-17) (* f30-0 f26-0))
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -110,72 +94,32 @@
|
||||
)
|
||||
(cond
|
||||
((= (logand (/ arg2 2) 1) 1)
|
||||
(let ((f30-0 (sqrtf (+ (square (-> (the-as (pointer float) (+ (+ (* s2-0 4) (* s3-0 16)) (the-as int arg1)))))
|
||||
(square (-> (the-as (pointer float) (+ (+ (* s1-0 4) (* s3-0 16)) (the-as int arg1)))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((f30-0 (sqrtf (+ (square (-> arg1 vector s3-0 data s2-0)) (square (-> arg1 vector s3-0 data s1-0))))))
|
||||
(cond
|
||||
((< 0.00000000001 f30-0)
|
||||
(set! (-> arg0 x) (atan
|
||||
(-> (the-as (pointer float) (+ (+ (* s2-0 4) (* s3-0 16)) (the-as int arg1))))
|
||||
(-> (the-as (pointer float) (+ (+ (* s1-0 4) (* s3-0 16)) (the-as int arg1))))
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 y) (atan f30-0 (-> (the-as (pointer float) (+ (+ (* s3-0 4) (* s3-0 16)) (the-as int arg1))))))
|
||||
(set! (-> arg0 z) (atan
|
||||
(-> (the-as (pointer float) (+ (+ (* s3-0 4) (* s2-0 16)) (the-as int arg1))))
|
||||
(- (-> (the-as (pointer float) (+ (+ (* s3-0 4) (* s1-0 16)) (the-as int arg1)))))
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 x) (atan (-> arg1 vector s3-0 data s2-0) (-> arg1 vector s3-0 data s1-0)))
|
||||
(set! (-> arg0 y) (atan f30-0 (-> arg1 vector s3-0 data s3-0)))
|
||||
(set! (-> arg0 z) (atan (-> arg1 vector s2-0 data s3-0) (- (-> arg1 vector s1-0 data s3-0))))
|
||||
)
|
||||
(else
|
||||
(set! (-> arg0 x) (atan
|
||||
(- (-> (the-as (pointer float) (+ (+ (* s1-0 4) (* s2-0 16)) (the-as int arg1)))))
|
||||
(-> (the-as (pointer float) (+ (+ (* s2-0 4) (* s2-0 16)) (the-as int arg1))))
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 y) (atan f30-0 (-> (the-as (pointer float) (+ (+ (* s3-0 4) (* s3-0 16)) (the-as int arg1))))))
|
||||
(set! (-> arg0 x) (atan (- (-> arg1 vector s2-0 data s1-0)) (-> arg1 vector s2-0 data s2-0)))
|
||||
(set! (-> arg0 y) (atan f30-0 (-> arg1 vector s3-0 data s3-0)))
|
||||
(set! (-> arg0 z) 0.0)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(else
|
||||
(let ((f30-1 (sqrtf (+ (square (-> (the-as (pointer float) (+ (+ (* s3-0 4) (* s3-0 16)) (the-as int arg1)))))
|
||||
(square (-> (the-as (pointer float) (+ (+ (* s3-0 4) (* s2-0 16)) (the-as int arg1)))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((f30-1 (sqrtf (+ (square (-> arg1 vector s3-0 data s3-0)) (square (-> arg1 vector s2-0 data s3-0))))))
|
||||
(cond
|
||||
((< 0.00000000001 f30-1)
|
||||
(set! (-> arg0 x)
|
||||
(atan
|
||||
(-> (the-as (pointer float) (+ (+ (* s2-0 4) (* s1-0 16)) (the-as int arg1))))
|
||||
(-> (the-as (pointer float) (+ (+ (* s1-0 4) (* s1-0 16)) (the-as int arg1))))
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 y)
|
||||
(atan (- (-> (the-as (pointer float) (+ (+ (* s3-0 4) (* s1-0 16)) (the-as int arg1))))) f30-1)
|
||||
)
|
||||
(set! (-> arg0 z) (atan
|
||||
(-> (the-as (pointer float) (+ (+ (* s3-0 4) (* s2-0 16)) (the-as int arg1))))
|
||||
(-> (the-as (pointer float) (+ (+ (* s3-0 4) (* s3-0 16)) (the-as int arg1))))
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 x) (atan (-> arg1 vector s1-0 data s2-0) (-> arg1 vector s1-0 data s1-0)))
|
||||
(set! (-> arg0 y) (atan (- (-> arg1 vector s1-0 data s3-0)) f30-1))
|
||||
(set! (-> arg0 z) (atan (-> arg1 vector s2-0 data s3-0) (-> arg1 vector s3-0 data s3-0)))
|
||||
)
|
||||
(else
|
||||
(set! (-> arg0 x)
|
||||
(atan
|
||||
(- (-> (the-as (pointer float) (+ (+ (* s1-0 4) (* s2-0 16)) (the-as int arg1)))))
|
||||
(-> (the-as (pointer float) (+ (+ (* s2-0 4) (* s2-0 16)) (the-as int arg1))))
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 y)
|
||||
(atan (- (-> (the-as (pointer float) (+ (+ (* s3-0 4) (* s1-0 16)) (the-as int arg1))))) f30-1)
|
||||
)
|
||||
(set! (-> arg0 x) (atan (- (-> arg1 vector s2-0 data s1-0)) (-> arg1 vector s2-0 data s2-0)))
|
||||
(set! (-> arg0 y) (atan (- (-> arg1 vector s1-0 data s3-0)) f30-1))
|
||||
(set! (-> arg0 z) 0.0)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -519,48 +519,24 @@
|
||||
(set! a3-0 2)
|
||||
(set! v1-4 0)
|
||||
)
|
||||
(when (< (-> (the-as (pointer float) (+ (+ (* a2-0 4) (* a2-0 16)) (the-as int arg1)))) (-> arg1 vector 2 z))
|
||||
(when (< (-> arg1 vector a2-0 data a2-0) (-> arg1 vector 2 z))
|
||||
(set! a2-0 2)
|
||||
(set! a3-0 0)
|
||||
(set! v1-4 1)
|
||||
)
|
||||
(let ((f0-12
|
||||
(sqrtf
|
||||
(+ (- 1.0
|
||||
(+ (-> (the-as (pointer float) (+ (+ (* a3-0 4) (* a3-0 16)) (the-as int arg1))))
|
||||
(-> (the-as (pointer float) (+ (+ (* v1-4 4) (* v1-4 16)) (the-as int arg1))))
|
||||
)
|
||||
)
|
||||
(-> (the-as (pointer float) (+ (+ (* a2-0 4) (* a2-0 16)) (the-as int arg1))))
|
||||
(let ((f0-12 (sqrtf (+ (- 1.0 (+ (-> arg1 vector a3-0 data a3-0) (-> arg1 vector v1-4 data v1-4)))
|
||||
(-> arg1 vector a2-0 data a2-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 data a2-0) (/ f0-12 2))
|
||||
(if (!= f0-12 0.0)
|
||||
(set! f0-12 (/ 0.5 f0-12))
|
||||
)
|
||||
(set! (-> arg0 w)
|
||||
(* (- (-> (the-as (pointer float) (+ (+ (* v1-4 4) (* a3-0 16)) (the-as int arg1))))
|
||||
(-> (the-as (pointer float) (+ (+ (* a3-0 4) (* v1-4 16)) (the-as int arg1))))
|
||||
)
|
||||
f0-12
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 data a3-0)
|
||||
(* (+ (-> (the-as (pointer float) (+ (+ (* a3-0 4) (* a2-0 16)) (the-as int arg1))))
|
||||
(-> (the-as (pointer float) (+ (+ (* a2-0 4) (* a3-0 16)) (the-as int arg1))))
|
||||
)
|
||||
f0-12
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 data v1-4)
|
||||
(* (+ (-> (the-as (pointer float) (+ (+ (* v1-4 4) (* a2-0 16)) (the-as int arg1))))
|
||||
(-> (the-as (pointer float) (+ (+ (* a2-0 4) (* v1-4 16)) (the-as int arg1))))
|
||||
)
|
||||
f0-12
|
||||
)
|
||||
)
|
||||
(set! (-> arg0 w) (* (- (-> arg1 vector a3-0 data v1-4) (-> arg1 vector v1-4 data a3-0)) f0-12))
|
||||
(set! (-> arg0 data a3-0) (* (+ (-> arg1 vector a2-0 data a3-0) (-> arg1 vector a3-0 data a2-0)) f0-12))
|
||||
(set! (-> arg0 data v1-4) (* (+ (-> arg1 vector a2-0 data v1-4) (-> arg1 vector v1-4 data a2-0)) f0-12))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
(defmethod chain-physics-method-14 ((this chain-physics) (arg0 vector) (arg1 int))
|
||||
(vector-float*!
|
||||
arg0
|
||||
(the-as vector (+ (the-as uint (-> this chain-joints 0 velocity)) (* (+ arg1 1) 64)))
|
||||
(-> this chain-joints (+ arg1 1) velocity)
|
||||
(fmin 0.9 (lerp-scale 0.2 1.0 (the float arg1) 0.0 4.0))
|
||||
)
|
||||
0
|
||||
|
||||
@@ -49,28 +49,28 @@ Types related to VIF: the PS2's Vector Interface.
|
||||
|
||||
(deftype vif-bank (structure)
|
||||
((stat uint32)
|
||||
(fbrst uint32 :offset 16)
|
||||
(err vif-err :offset 32)
|
||||
(mark uint32 :offset 48)
|
||||
(cycle uint32 :offset 64)
|
||||
(mode uint32 :offset 80)
|
||||
(num uint32 :offset 96)
|
||||
(mask uint32 :offset 112)
|
||||
(code uint32 :offset 128)
|
||||
(itops uint32 :offset 144)
|
||||
(base uint32 :offset 160)
|
||||
(offset uint32 :offset 176)
|
||||
(tops uint32 :offset 192)
|
||||
(itop uint32 :offset 208)
|
||||
(top uint32 :offset 224)
|
||||
(r0 uint32 :offset 256)
|
||||
(r1 uint32 :offset 272)
|
||||
(r2 uint32 :offset 288)
|
||||
(r3 uint32 :offset 304)
|
||||
(c0 uint32 :offset 320)
|
||||
(c1 uint32 :offset 336)
|
||||
(c2 uint32 :offset 352)
|
||||
(c3 uint32 :offset 368)
|
||||
(fbrst vif-fbrst :offset 16)
|
||||
(err vif-err :offset 32)
|
||||
(mark uint32 :offset 48)
|
||||
(cycle uint32 :offset 64)
|
||||
(mode uint32 :offset 80)
|
||||
(num uint32 :offset 96)
|
||||
(mask uint32 :offset 112)
|
||||
(code uint32 :offset 128)
|
||||
(itops uint32 :offset 144)
|
||||
(base uint32 :offset 160)
|
||||
(offset uint32 :offset 176)
|
||||
(tops uint32 :offset 192)
|
||||
(itop uint32 :offset 208)
|
||||
(top uint32 :offset 224)
|
||||
(r0 uint32 :offset 256)
|
||||
(r1 uint32 :offset 272)
|
||||
(r2 uint32 :offset 288)
|
||||
(r3 uint32 :offset 304)
|
||||
(c0 uint32 :offset 320)
|
||||
(c1 uint32 :offset 336)
|
||||
(c2 uint32 :offset 352)
|
||||
(c3 uint32 :offset 368)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -241,11 +241,7 @@
|
||||
(let ((a1-9 (new 'stack-no-clear 'collide-query)))
|
||||
(set! (-> a1-9 start-pos quad) (-> this root trans quad))
|
||||
(+! (-> a1-9 start-pos y) 6144.0)
|
||||
(vector-!
|
||||
(-> a1-9 move-dist)
|
||||
(the-as vector (+ (the-as uint (-> s4-0 holds 0 world-mat trans)) (* 192 gp-0)))
|
||||
(-> a1-9 start-pos)
|
||||
)
|
||||
(vector-! (-> a1-9 move-dist) (-> s4-0 holds gp-0 world-mat trans) (-> a1-9 start-pos))
|
||||
(let ((v1-41 a1-9))
|
||||
(set! (-> v1-41 radius) 2048.0)
|
||||
(set! (-> v1-41 collide-with) (collide-spec backgnd obstacle hit-by-others-list pusher))
|
||||
|
||||
@@ -1013,7 +1013,7 @@
|
||||
(set! (-> self strings v1-9 pos 3) 0)
|
||||
)
|
||||
(dotimes (v1-12 30)
|
||||
(let ((a0-18 (&+ (-> self sprites 0 color2) (* v1-12 64))))
|
||||
(let ((a0-18 (-> self sprites v1-12 color2)))
|
||||
(set! (-> a0-18 0) 128)
|
||||
(set! (-> a0-18 1) 128)
|
||||
(set! (-> a0-18 2) 128)
|
||||
|
||||
@@ -169,7 +169,7 @@ It type checks the arguments for the entry function.
|
||||
(when (and (> (length body) 1) (string? (first body)))
|
||||
(set! docstring (first body)))
|
||||
(when (not (null? *defstate-type-stack*))
|
||||
(fmt #t "*defstate-type-stack* leaked! An error probably happened in a previous defstate. stack is: {}"
|
||||
(fmt #t "*defstate-type-stack* leaked! An error probably happened in a previous defstate. stack is: {}\n"
|
||||
*defstate-type-stack*)
|
||||
)
|
||||
(set! *defstate-type-stack* '())
|
||||
|
||||
@@ -2372,11 +2372,11 @@
|
||||
(let ((v1-3 (-> s4-0 feet s0-0)))
|
||||
(let ((a1-2 s2-0))
|
||||
(let ((a0-2 s2-0))
|
||||
(let ((a2-1 (+ (the-as uint (-> s4-0 feet 0 real-position)) (* 112 s0-0))))
|
||||
(let ((a2-1 (-> s4-0 feet s0-0 real-position)))
|
||||
(let ((a3-3 0.25))
|
||||
(.mov vf7 a3-3)
|
||||
)
|
||||
(.lvf vf5 (&-> (the-as (pointer int128) a2-1)))
|
||||
(.lvf vf5 (&-> a2-1 quad))
|
||||
)
|
||||
(.lvf vf4 (&-> a0-2 quad))
|
||||
)
|
||||
|
||||
@@ -368,7 +368,7 @@
|
||||
(object-type-info-array traffic-object-type-info 21 :inline)
|
||||
(tracker-array traffic-tracker 2 :inline)
|
||||
(citizen-tracker-array traffic-tracker :inline :overlay-at (-> tracker-array 0))
|
||||
(vehicle-tracker-array traffic-tracker :inline :offset 7024)
|
||||
(vehicle-tracker-array traffic-tracker :inline :overlay-at (-> tracker-array 1))
|
||||
(inactive-object-array handle 420)
|
||||
(suppressor traffic-suppressor :inline)
|
||||
(danger-sphere-count int8)
|
||||
|
||||
@@ -170,11 +170,11 @@
|
||||
(rider-hand-offset vector 2 :inline)
|
||||
(section-array vehicle-section-info 4 :inline)
|
||||
(section-bike-front vehicle-section-info :inline :overlay-at (-> section-array 0))
|
||||
(section-bike-rear vehicle-section-info :inline :offset 560)
|
||||
(section-bike-rear vehicle-section-info :inline :overlay-at (-> section-array 1))
|
||||
(section-car-front-left vehicle-section-info :inline :overlay-at (-> section-array 0))
|
||||
(section-car-rear-left vehicle-section-info :inline :overlay-at section-bike-rear)
|
||||
(section-car-front-right vehicle-section-info :inline :offset 592)
|
||||
(section-car-rear-right vehicle-section-info :inline :offset 624)
|
||||
(section-car-rear-left vehicle-section-info :inline :overlay-at (-> section-array 1))
|
||||
(section-car-front-right vehicle-section-info :inline :overlay-at (-> section-array 2))
|
||||
(section-car-rear-right vehicle-section-info :inline :overlay-at (-> section-array 3))
|
||||
(explosion vehicle-explosion-info)
|
||||
(engine-pitch-scale float)
|
||||
(engine-pitch-offset float)
|
||||
|
||||
@@ -63,11 +63,11 @@
|
||||
(s5-0 (-> gp-0 node-array length))
|
||||
)
|
||||
(dotimes (s4-0 s5-0)
|
||||
(let ((s3-0 (+ (the-as uint (-> gp-0 node-array data 0 position)) (* 80 s4-0))))
|
||||
(let ((s3-0 (-> gp-0 node-array data s4-0 position)))
|
||||
(when (< s4-0 (+ s5-0 -1))
|
||||
(let ((s2-0 (+ s4-0 1)))
|
||||
(while (< s2-0 s5-0)
|
||||
(let ((s1-0 (+ (the-as uint (-> gp-0 node-array data 0 position)) (* 80 s2-0))))
|
||||
(let ((s1-0 (-> gp-0 node-array data s2-0 position)))
|
||||
(dotimes (v1-8 (-> gp-0 edge-array length))
|
||||
(let* ((a1-1 (-> gp-0 edge-array data v1-8))
|
||||
(a0-8 (-> a1-1 runtime-node-id-1))
|
||||
@@ -82,9 +82,9 @@
|
||||
(set! v1-10 #f)
|
||||
(label cfg-19)
|
||||
(when (not v1-10)
|
||||
(when (and (< (vector-vector-distance (the-as vector s3-0) (the-as vector s1-0)) 122880.0)
|
||||
(probe-for-clear-collision? (the-as vector s3-0) (the-as vector s1-0))
|
||||
(probe-for-clear-collision? (the-as vector s1-0) (the-as vector s3-0))
|
||||
(when (and (< (vector-vector-distance s3-0 s1-0) 122880.0)
|
||||
(probe-for-clear-collision? s3-0 s1-0)
|
||||
(probe-for-clear-collision? s1-0 s3-0)
|
||||
)
|
||||
(let ((v1-17 (alloc-new-edge! gp-0)))
|
||||
(when (!= v1-17 -1)
|
||||
@@ -128,28 +128,21 @@
|
||||
)
|
||||
(dotimes (s3-0 s5-0)
|
||||
(when (nonzero? (-> gp-0 node-array data s3-0 nav_node_id))
|
||||
(let ((s2-0 (the-as object (+ (the-as uint (-> gp-0 node-array data 0 position)) (* 80 s3-0)))))
|
||||
(format
|
||||
#t
|
||||
"(~d (~m ~m ~m) ("
|
||||
s4-0
|
||||
(-> (the-as vector s2-0) x)
|
||||
(-> (the-as vector s2-0) y)
|
||||
(-> (the-as vector s2-0) z)
|
||||
)
|
||||
(let ((s2-0 (-> gp-0 node-array data s3-0 position)))
|
||||
(format #t "(~d (~m ~m ~m) (" s4-0 (-> s2-0 x) (-> s2-0 y) (-> s2-0 z))
|
||||
(dotimes (s1-0 (-> gp-0 edge-array length))
|
||||
(let* ((v1-11 (-> gp-0 edge-array data s1-0))
|
||||
(s0-0 (-> v1-11 runtime-node-id-1))
|
||||
(sv-16 (-> v1-11 runtime-node-id-2))
|
||||
)
|
||||
(when (= s3-0 s0-0)
|
||||
(let ((a1-2 (+ (the-as uint (-> gp-0 node-array data 0 position)) (* 80 sv-16))))
|
||||
(format #t "(~d ~m) " sv-16 (vector-vector-distance (the-as vector s2-0) (the-as vector a1-2)))
|
||||
(let ((a1-2 (-> gp-0 node-array data sv-16 position)))
|
||||
(format #t "(~d ~m) " sv-16 (vector-vector-distance s2-0 a1-2))
|
||||
)
|
||||
)
|
||||
(when (= s3-0 sv-16)
|
||||
(let ((a1-4 (+ (the-as uint (-> gp-0 node-array data 0 position)) (* 80 s0-0))))
|
||||
(format #t "(~d ~m) " s0-0 (vector-vector-distance (the-as vector s2-0) (the-as vector a1-4)))
|
||||
(let ((a1-4 (-> gp-0 node-array data s0-0 position)))
|
||||
(format #t "(~d ~m) " s0-0 (vector-vector-distance s2-0 a1-4))
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -429,9 +422,7 @@
|
||||
(when (nonzero? (-> s5-0 node-array data s2-0 nav_node_id))
|
||||
(let ((v1-9 (new 'global 'hover-nav-bsp-point)))
|
||||
(set! (-> v1-9 index) s3-0)
|
||||
(set! (-> v1-9 pos quad)
|
||||
(-> (the-as (pointer uint128) (+ (the-as uint (-> s5-0 node-array data 0 position)) (* 80 s2-0))))
|
||||
)
|
||||
(set! (-> v1-9 pos quad) (-> s5-0 node-array data s2-0 position quad))
|
||||
(let ((a1-7 (-> gp-0 root point-list))
|
||||
(a0-8 (&-> gp-0 root point-list))
|
||||
)
|
||||
|
||||
@@ -348,7 +348,7 @@
|
||||
(set! (-> this strings s3-0 flags) (font-flags kerning large))
|
||||
(set! (-> this strings s3-0 color) (font-color white))
|
||||
(set-as-offset-from!
|
||||
(the-as hud-sprite (&+ (-> this strings 0 pos) (* 48 s3-0)))
|
||||
(the-as hud-sprite (-> this strings s3-0 pos))
|
||||
(the-as vector4w (-> this strings 1 pos))
|
||||
5
|
||||
(+ (* 28 s4-0) 40)
|
||||
@@ -364,7 +364,7 @@
|
||||
(set! (-> this strings s3-1 flags) (font-flags kerning right large))
|
||||
(set! (-> this strings s3-1 color) (font-color white))
|
||||
(set-as-offset-from!
|
||||
(the-as hud-sprite (&+ (-> this strings 0 pos) (* 48 s3-1)))
|
||||
(the-as hud-sprite (-> this strings s3-1 pos))
|
||||
(the-as vector4w (-> this strings 2 pos))
|
||||
0
|
||||
(+ (* 28 s4-0) 40)
|
||||
|
||||
@@ -986,7 +986,7 @@
|
||||
(set! (-> self draw) -1)
|
||||
(set! (-> self active) #f)
|
||||
(dotimes (v1-36 2)
|
||||
(let ((a0-14 (&+ (-> self sprites 0 color2) (* v1-36 64))))
|
||||
(let ((a0-14 (-> self sprites v1-36 color2)))
|
||||
(set! (-> a0-14 0) 128)
|
||||
(set! (-> a0-14 1) 128)
|
||||
(set! (-> a0-14 2) 128)
|
||||
|
||||
@@ -851,10 +851,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
;; og:preserve-this hack
|
||||
;; original
|
||||
;; (vector-reset! (+ (the-as uint (-> this chain-joints 0 velocity)) (* 48 s5-0)))
|
||||
(vector-reset! (-> this chain-joints s5-0 velocity)) ;; hack
|
||||
(vector-reset! (-> this chain-joints s5-0 velocity))
|
||||
(mode-set! (-> this chain-joints s5-0 joint-mod) (joint-mod-mode joint-set-world))
|
||||
)
|
||||
(set! (-> this chain-joints 7 position quad) (-> this chain-joints 6 position quad))
|
||||
@@ -894,12 +891,7 @@
|
||||
(vector+float*! sv-160 sv-160 (-> s2-0 value) f28-0)
|
||||
(set! f28-0 (fmin 1.0 (+ 0.2 f28-0)))
|
||||
(when (< s0-0 7)
|
||||
(vector+float*!
|
||||
sv-160
|
||||
sv-160
|
||||
(the-as vector (+ (the-as uint (-> this chain-joints 0 velocity)) (* 48 (+ s0-0 1))))
|
||||
f30-0
|
||||
)
|
||||
(vector+float*! sv-160 sv-160 (-> this chain-joints (+ s0-0 1) velocity) f30-0)
|
||||
(set! f30-0 (fmin 0.9 (+ 0.2 f30-0)))
|
||||
)
|
||||
(vector-! s1-0 sv-160 s4-0)
|
||||
|
||||
@@ -582,15 +582,13 @@
|
||||
(vector-lerp!
|
||||
s3-0
|
||||
s3-0
|
||||
(the-as vector (+ (the-as uint (-> self foot-locks 0 old-position)) (* s4-0 64)))
|
||||
(-> self foot-locks s4-0 old-position)
|
||||
(parameter-ease-sin-clamp (-> self foot-locks s4-0 lock value))
|
||||
)
|
||||
(set! (-> self foot-locks s4-0 initialized) #t)
|
||||
)
|
||||
(handle-copy! (-> self joint-ik s4-0) s3-0)
|
||||
(set! (-> (the-as (pointer uint128) (+ (the-as uint (-> self foot-locks 0 old-position)) (* s4-0 64))))
|
||||
(-> s3-0 quad)
|
||||
)
|
||||
(set! (-> self foot-locks s4-0 old-position quad) (-> s3-0 quad))
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -963,12 +961,7 @@
|
||||
)
|
||||
(vector-matrix*! arg0 arg0 s2-3)
|
||||
)
|
||||
(vector+float*!
|
||||
arg0
|
||||
arg0
|
||||
(the-as vector (+ (the-as uint (-> this chain-joints 0 velocity)) (* arg1 64)))
|
||||
(lerp-scale 0.9 0.5 (the float arg1) 0.0 20.0)
|
||||
)
|
||||
(vector+float*! arg0 arg0 (-> this chain-joints arg1 velocity) (lerp-scale 0.9 0.5 (the float arg1) 0.0 20.0))
|
||||
)
|
||||
)
|
||||
(let ((v1-124 (-> arg2 parent)))
|
||||
@@ -1017,20 +1010,10 @@
|
||||
(< 18.0 f30-1)
|
||||
(and (< f30-1 39.0) (> arg1 0) (< arg1 9))
|
||||
)
|
||||
(vector+float*!
|
||||
arg0
|
||||
arg0
|
||||
(the-as vector (+ (the-as uint (-> this chain-joints 0 velocity)) (* (+ arg1 -1) 64)))
|
||||
0.9
|
||||
)
|
||||
(vector+float*! arg0 arg0 (-> this chain-joints (+ arg1 -1) velocity) 0.9)
|
||||
)
|
||||
((-> this move-with-parent)
|
||||
(vector+float*!
|
||||
arg0
|
||||
arg0
|
||||
(the-as vector (+ (the-as uint (-> this chain-joints 0 velocity)) (* (+ arg1 -1) 64)))
|
||||
0.8
|
||||
)
|
||||
(vector+float*! arg0 arg0 (-> this chain-joints (+ arg1 -1) velocity) 0.8)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -1583,12 +1566,7 @@
|
||||
;; WARN: Return type mismatch vector vs none.
|
||||
(defmethod apply-gravity ((this metalkor-spinner-chain-physics) (arg0 vector) (arg1 int) (arg2 process-drawable))
|
||||
(vector-float*! arg0 (-> this gravity) (-> this gravity-mult))
|
||||
(vector+float*!
|
||||
arg0
|
||||
arg0
|
||||
(the-as vector (+ (the-as uint (-> this chain-joints 0 velocity)) (* arg1 64)))
|
||||
(-> this velocity-mult)
|
||||
)
|
||||
(vector+float*! arg0 arg0 (-> this chain-joints arg1 velocity) (-> this velocity-mult))
|
||||
(none)
|
||||
)
|
||||
|
||||
|
||||
@@ -710,7 +710,7 @@
|
||||
(when (< s0-0 10)
|
||||
(let ((sv-1600 sv-1904))
|
||||
(let ((sv-1568 sv-1904)
|
||||
(sv-1584 (the-as vector (+ (the-as uint (-> this chain-joints 0 velocity)) (* (+ s0-0 1) 64))))
|
||||
(sv-1584 (-> this chain-joints (+ s0-0 1) velocity))
|
||||
(f0-24 (fmin 0.9 (lerp-scale 0.2 1.0 (the float s0-0) 0.0 4.0)))
|
||||
)
|
||||
(.lvf vf2 (&-> sv-1584 quad))
|
||||
|
||||
@@ -942,7 +942,7 @@
|
||||
(set! (-> self draw) -1)
|
||||
(set! (-> self active) #f)
|
||||
(dotimes (v1-40 2)
|
||||
(let ((a0-16 (&+ (-> self sprites 0 color2) (* v1-40 64))))
|
||||
(let ((a0-16 (-> self sprites v1-40 color2)))
|
||||
(set! (-> a0-16 0) 128)
|
||||
(set! (-> a0-16 1) 128)
|
||||
(set! (-> a0-16 2) 128)
|
||||
|
||||
@@ -28,17 +28,13 @@
|
||||
(-> this gravity)
|
||||
(* 4096.0 (-> self clock time-adjust-ratio) (lerp-scale 0.01 0.1 (the float arg1) 0.0 5.0))
|
||||
)
|
||||
(vector+float*! arg0 arg0 (the-as vector (+ (the-as uint (-> this chain-joints 0 velocity)) (* arg1 64))) 0.2)
|
||||
(vector+float*! arg0 arg0 (-> this chain-joints arg1 velocity) 0.2)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
(defmethod chain-physics-method-14 ((this jellyfish-chain-physics) (arg0 vector) (arg1 int))
|
||||
(vector-float*!
|
||||
arg0
|
||||
(the-as vector (+ (the-as uint (-> this chain-joints 0 velocity)) (* (+ arg1 1) 64)))
|
||||
(lerp-scale 0.1 0.9 (the float arg1) 0.0 5.0)
|
||||
)
|
||||
(vector-float*! arg0 (-> this chain-joints (+ arg1 1) velocity) (lerp-scale 0.1 0.9 (the float arg1) 0.0 5.0))
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
@@ -706,7 +706,7 @@ For example, geyser rock dummies, or the jak 1 zoomer."
|
||||
(vector-copy! (-> s5-1 max) v1-34)
|
||||
)
|
||||
(dotimes (s4-1 (-> gp-0 num-joints))
|
||||
(add-point! s5-1 (the-as vector (+ (the-as uint (-> gp-0 joint 0 mat trans)) (* 240 s4-1))))
|
||||
(add-point! s5-1 (-> gp-0 joint s4-1 mat trans))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -533,15 +533,9 @@
|
||||
(+! (-> this point v1-3 incarnation) 1)
|
||||
(let ((v1-11 (-> this point arg0 next)))
|
||||
(set! (-> this summed-len) (- (-> this summed-len) (-> this point arg0 tp-length)))
|
||||
(vector-!
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 arg0)))
|
||||
(-> this point v1-11 position)
|
||||
(-> this point arg0 position)
|
||||
)
|
||||
(vector-! (-> this point arg0 direction) (-> this point v1-11 position) (-> this point arg0 position))
|
||||
)
|
||||
(set! (-> this point arg0 tp-length)
|
||||
(vector-normalize-ret-len! (the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 arg0))) 1.0)
|
||||
)
|
||||
(set! (-> this point arg0 tp-length) (vector-normalize-ret-len! (-> this point arg0 direction) 1.0))
|
||||
(+! (-> this summed-len) (-> this point arg0 tp-length))
|
||||
(+! (-> this used-count) -1)
|
||||
)
|
||||
@@ -611,12 +605,7 @@
|
||||
)
|
||||
0.0
|
||||
(while (not (or (= a0-14 -134250495) (= a0-14 (-> this end-point))))
|
||||
(let ((f1-2 (vector-dot
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 v1-15)))
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 a0-14)))
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((f1-2 (vector-dot (-> this point v1-15 direction) (-> this point a0-14 direction))))
|
||||
(when (>= f1-2 f0-2)
|
||||
(set! f0-2 f1-2)
|
||||
(set! a1-1 v1-15)
|
||||
@@ -653,11 +642,7 @@
|
||||
)
|
||||
)
|
||||
(if (< (* (-> this point s4-1 tp-length)
|
||||
(+ 1.0 (vector-dot
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 s4-1)))
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 v1-11)))
|
||||
)
|
||||
)
|
||||
(+ 1.0 (vector-dot (-> this point s4-1 direction) (-> this point v1-11 direction)))
|
||||
)
|
||||
arg0
|
||||
)
|
||||
@@ -678,14 +663,8 @@
|
||||
(let ((s3-0 (-> this free-point))
|
||||
(s2-0 (-> this end-point))
|
||||
)
|
||||
(vector-!
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 s2-0)))
|
||||
arg0
|
||||
(-> this point s2-0 position)
|
||||
)
|
||||
(set! (-> this point s2-0 tp-length)
|
||||
(vector-normalize-ret-len! (the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 s2-0))) 1.0)
|
||||
)
|
||||
(vector-! (-> this point s2-0 direction) arg0 (-> this point s2-0 position))
|
||||
(set! (-> this point s2-0 tp-length) (vector-normalize-ret-len! (-> this point s2-0 direction) 1.0))
|
||||
(if (< (-> this point s2-0 tp-length) arg1)
|
||||
(return 0)
|
||||
)
|
||||
@@ -739,7 +718,7 @@
|
||||
)
|
||||
(vector+! arg1 arg1 s2-0)
|
||||
)
|
||||
(vector+! arg2 arg2 (the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 (-> arg3 cur-pt)))))
|
||||
(vector+! arg2 arg2 (-> this point (-> arg3 cur-pt) direction))
|
||||
(return arg1)
|
||||
)
|
||||
(else
|
||||
@@ -790,11 +769,7 @@
|
||||
)
|
||||
(while (and (!= v1-18 (-> this end-point)) (!= v1-18 (-> this next-to-last-point)) (!= v1-18 arg1))
|
||||
(let ((s1-0 (-> this point v1-18 next)))
|
||||
(vector-!
|
||||
s2-0
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 s1-0)))
|
||||
(the-as vector (+ (the-as uint (-> this point 0 direction)) (* 48 v1-18)))
|
||||
)
|
||||
(vector-! s2-0 (-> this point s1-0 direction) (-> this point v1-18 direction))
|
||||
(let* ((f0-5 (vector-normalize-ret-len! s2-0 1.0))
|
||||
(f0-6 (/ f0-5 2))
|
||||
(f26-0 (* (fmin 1.0 f0-6) f30-0 (vector-dot arg0 s2-0)))
|
||||
|
||||
@@ -191,13 +191,7 @@ Unlike the fast version, this stores x values exactly like you'd expect."
|
||||
(dotimes (s4-0 (-> this pts length))
|
||||
(when (>= (-> this pts data s4-0 first) arg0)
|
||||
(let ((a3-4 (lerp-scale 0.0 1.0 arg0 (-> this pts data (+ s4-0 -1) first) (-> this pts data s4-0 first))))
|
||||
(return (rgbaf-lerp!
|
||||
arg1
|
||||
(the-as rgbaf (+ (the-as uint (-> this pts data 0 second)) (* (+ s4-0 -1) 32)))
|
||||
(the-as rgbaf (+ (the-as uint (-> this pts data 0 second)) (* s4-0 32)))
|
||||
a3-4
|
||||
)
|
||||
)
|
||||
(return (rgbaf-lerp! arg1 (-> this pts data (+ s4-0 -1) second) (-> this pts data s4-0 second) a3-4))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
(when (>= (vector4-dot s5-0 (the-as vector (-> this leading))) 0.0)
|
||||
(let* ((s1-0 (-> this sections))
|
||||
(s2-0 (-> s1-0 length))
|
||||
(a3-0 (the-as object (-> this leading)))
|
||||
(a3-0 (-> this leading))
|
||||
)
|
||||
(dotimes (s4-0 s2-0)
|
||||
(let ((s3-0 (-> s1-0 data s4-0)))
|
||||
@@ -96,7 +96,7 @@
|
||||
(when (and (>= f0-9 -41984.0) (>= 41779.2 f0-9))
|
||||
(let* ((a0-11 (new 'stack-no-clear 'vector))
|
||||
(sv-192 (new 'stack-no-clear 'vector))
|
||||
(f30-0 (ray-plane-equation-intersect a0-11 s5-0 (-> s3-0 pull-dir) (the-as vector a3-0)))
|
||||
(f30-0 (ray-plane-equation-intersect a0-11 s5-0 (-> s3-0 pull-dir) a3-0))
|
||||
(f0-10 (ray-plane-equation-intersect sv-192 s5-0 (-> s3-0 pull-dir) (-> s3-0 trailing)))
|
||||
)
|
||||
(vector+*! (new 'stack-no-clear 'vector) (-> s3-0 start) (-> s3-0 pull-dir) 12288.0)
|
||||
@@ -151,7 +151,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! a3-0 (+ (the-as uint (-> s1-0 data 0 trailing)) (* 80 s4-0)))
|
||||
(set! a3-0 (-> s1-0 data s4-0 trailing))
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -168,7 +168,7 @@
|
||||
(when (>= (vector4-dot s5-0 (the-as vector (-> this leading))) 0.0)
|
||||
(let* ((v1-7 (-> this sections))
|
||||
(a0-3 (-> v1-7 length))
|
||||
(a3-0 (the-as object (-> this leading)))
|
||||
(a3-0 (-> this leading))
|
||||
)
|
||||
(dotimes (s3-1 a0-3)
|
||||
(let ((s2-0 (-> v1-7 data s3-1)))
|
||||
@@ -182,7 +182,7 @@
|
||||
(when (and (>= f0-9 -41984.0) (>= 41779.2 f0-9))
|
||||
(let* ((a0-11 (new 'stack-no-clear 'vector))
|
||||
(s1-0 (new 'stack-no-clear 'vector))
|
||||
(f30-0 (ray-plane-equation-intersect a0-11 s5-0 (-> s2-0 pull-dir) (the-as vector a3-0)))
|
||||
(f30-0 (ray-plane-equation-intersect a0-11 s5-0 (-> s2-0 pull-dir) a3-0))
|
||||
(f0-10 (ray-plane-equation-intersect s1-0 s5-0 (-> s2-0 pull-dir) (-> s2-0 trailing)))
|
||||
)
|
||||
(vector+*! (new 'stack-no-clear 'vector) (-> s2-0 start) (-> s2-0 pull-dir) 12288.0)
|
||||
@@ -206,7 +206,7 @@
|
||||
(return #f)
|
||||
)
|
||||
)
|
||||
(set! a3-0 (+ (the-as uint (-> v1-7 data 0 trailing)) (* 80 s3-1)))
|
||||
(set! a3-0 (-> v1-7 data s3-1 trailing))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1320,20 +1320,8 @@
|
||||
(when (and (logtest? (-> v1-3 minimap_edge_flag) (nav-minimap-edge-flag blocker))
|
||||
(not (logtest? (-> v1-3 mysql-save-flag) (mysql-save-flag delete)))
|
||||
)
|
||||
(set! (-> s3-0 0 quad)
|
||||
(-> (the-as
|
||||
(pointer uint128)
|
||||
(+ (the-as uint (-> this node-array data 0 position)) (* 80 (-> v1-3 runtime-node-id-1)))
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! (-> s3-0 1 quad)
|
||||
(-> (the-as
|
||||
(pointer uint128)
|
||||
(+ (the-as uint (-> this node-array data 0 position)) (* 80 (-> v1-3 runtime-node-id-2)))
|
||||
)
|
||||
)
|
||||
)
|
||||
(vector-copy! (-> s3-0 0) (-> this node-array data (-> v1-3 runtime-node-id-1) position))
|
||||
(vector-copy! (-> s3-0 1) (-> this node-array data (-> v1-3 runtime-node-id-2) position))
|
||||
(vector-! (-> s3-0 2) (-> s3-0 1) (-> s3-0 0))
|
||||
(set! (-> s3-0 2 y) 0.0)
|
||||
(vector-normalize! (-> s3-0 2) 1.0)
|
||||
|
||||
@@ -1268,8 +1268,8 @@
|
||||
(((nav-com-type undo-move-node))
|
||||
(format #t "Undo move-node ~D~%" (-> s4-0 id))
|
||||
(vector-!
|
||||
(the-as vector (+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> s4-0 index))))
|
||||
(the-as vector (+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> s4-0 index))))
|
||||
(-> this nav-graph node-array data (-> s4-0 index) position)
|
||||
(-> this nav-graph node-array data (-> s4-0 index) position)
|
||||
(-> s4-0 move-vec)
|
||||
)
|
||||
(nav-graph-editor-method-58 this (-> s4-0 index))
|
||||
@@ -1508,10 +1508,7 @@
|
||||
(let ((a0-4 (get-last-cmd this)))
|
||||
(vector-!
|
||||
(-> a0-4 move-vec)
|
||||
(the-as
|
||||
vector
|
||||
(+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> this selected-index)))
|
||||
)
|
||||
(-> this nav-graph node-array data (-> this selected-index) position)
|
||||
(-> a0-4 move-vec)
|
||||
)
|
||||
)
|
||||
@@ -1535,13 +1532,7 @@
|
||||
(logior! (-> a0-5 mysql-save-flag) (mysql-save-flag update))
|
||||
)
|
||||
(set! (-> v1-3 index) (-> self selected-index))
|
||||
(set! (-> v1-3 move-vec quad)
|
||||
(-> (the-as
|
||||
(pointer uint128)
|
||||
(+ (the-as uint (-> self nav-graph node-array data 0 position)) (* 80 (-> self selected-index)))
|
||||
)
|
||||
)
|
||||
)
|
||||
(vector-copy! (-> v1-3 move-vec) (-> self nav-graph node-array data (-> self selected-index) position))
|
||||
)
|
||||
(mysql-nav-graph-method-22 (-> self nav-graph))
|
||||
)
|
||||
@@ -1614,11 +1605,11 @@
|
||||
(add-debug-line-sphere
|
||||
#t
|
||||
(bucket-id debug)
|
||||
(the-as vector (+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> this edge-src))))
|
||||
(-> this nav-graph node-array data (-> this edge-src) position)
|
||||
(vector-!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(-> this mouse-hit)
|
||||
(the-as vector (+ (the-as uint (-> this nav-graph node-array data 0 position)) (* 80 (-> this edge-src))))
|
||||
(-> this nav-graph node-array data (-> this edge-src) position)
|
||||
)
|
||||
1024.0
|
||||
(if (>= (-> this selected-index) 0)
|
||||
|
||||
@@ -18,11 +18,28 @@
|
||||
|
||||
(define *sampler-count* 0)
|
||||
|
||||
;; ERROR: function was not converted to expressions. Cannot decompile.
|
||||
(defun-debug timer0-handler ((arg0 int) (arg1 int) (arg2 int))
|
||||
(let* ((v1-0 arg2)
|
||||
(v1-1 (logand #x3ffffff v1-0))
|
||||
)
|
||||
(when (< (the-as uint v1-1) (the-as uint #x2000000))
|
||||
(let ((v1-4 (&+ *sampler-mem* (* (shr v1-1 3) 4))))
|
||||
(+! (-> (the-as (pointer uint32) v1-4)) 1)
|
||||
)
|
||||
(set! *sampler-count* (+ *sampler-count* 1))
|
||||
)
|
||||
)
|
||||
(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)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; og:preserve-this
|
||||
; (set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode))
|
||||
|
||||
|
||||
(defun-debug sampler-start ()
|
||||
(set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode))
|
||||
(set! (-> (the-as timer-bank #x10000000) count) (the-as uint 0))
|
||||
|
||||
@@ -336,6 +336,7 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; WARN: op 30: float inf #x7f800000 moved to fpr
|
||||
(defmethod path-control-method-28 ((this path-control) (arg0 vector) (arg1 vector) (arg2 symbol))
|
||||
(let ((sv-96 (new 'stack-no-clear 'vector))
|
||||
(sv-100 (new 'stack-no-clear 'vector))
|
||||
@@ -347,7 +348,6 @@
|
||||
(sv-124 (the-as float -1.0))
|
||||
)
|
||||
(get-point-in-path! this sv-96 0.0 'interp)
|
||||
;; og:preserve-this
|
||||
(set! sv-112 (the-as float #x7f800000))
|
||||
(when (not arg2)
|
||||
(set! sv-124 (path-control-method-22 this arg0))
|
||||
|
||||
Loaded 100 of 1047 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user