Decompile the effect_027 overlay - #87
Merged
Merged
Conversation
Full-Life links eighteen of the library units, one fewer than effect_039: it carries no lib/tint, driving the four D_800EF738 entries from its own opcode handlers instead, and its entry sets up three task pools where Drain sets up four. Ring sizes 0x31 and 0x8B. 100 of its 125 functions come from src/effect/lib and 23 more are bodies already written for effect_001, effect_025, effect_028 and effect_052. The two that are new are the entry point and the bank carve, which is effect_039's with Full-Life's own constants. func_801A9490 is the exception that has to be written out rather than ported: it has the same shape as effect_025's func_801A548C but calls effectDrawScriptRun where that one calls effectStepCounter, since Full-Life links no lib/step. Masked bodies compare equal because call targets are relocations, so the callee has to be read off the aligned symbol streams. Nothing here belongs in the library. Six of the twenty-one bodies the library does not own appear more than once inside a single overlay -- one no-op reaches 169 copies -- so they are copied script handlers, not linked members. The seven that are single-copy everywhere still fail the test that decides it: a linked object's members are always adjacent, whereas these keep different neighbours in every program that carries them, and some appear without the members they would share an object with.
Report for SLUS_008.92 (763b96a - 9cf9536)Total code: 1506276 bytes (+39864 bytes) ✅ 168 new matches
...and 138 more new matches |
The four tint entries are walked through a cursor, so the loop index is never read; it was written as a countdown only because that is the shape gcc emits. The ascending form is what the surrounding handlers use and assembles the same. lib/common.c keeps its countdown: that one indexes text[i] and fills the hex digits from the least significant nibble, so its direction carries meaning.
Both walk a cursor and never read the index, which is exactly the shape that invites rewriting them ascending. Doing so assembles differently and effect_025 stops matching, so the countdown has to stay and should say why.
Only effect_025 links these units today, so citing it as the thing that breaks would read as if the other overlays were free to rewrite the loop. What holds is that the ascending form generates different code.
Nothing else in the effect sources marks up code in a doc comment that way.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fully decompile the full life effect overlay