Skip to content

feat(overlays): 50 pure-C ports, plus #69, #70 and #71 merged - #72

Merged
Lynder063 merged 38 commits into
mainfrom
feat/pure-c-lombyte-ports
Oct 14, 2026
Merged

Lynder063 merged 38 commits into
mainfrom
feat/pure-c-lombyte-ports

Conversation

@Lynder063

@Lynder063 Lynder063 commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

One PR for today's overlay work.

🤖 Generated with Claude Code

cnobis and others added 30 commits October 14, 2026 19:08
Moves a moby along its facing by the given scale and pushes it back out
of walls, then optionally snaps it to its path. Adapted from Lombyte's
FUN_L06_002e9b60. The wall check is called through a second name with
Lombyte's argument order, which sets up the call as retail does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The draw callback of the fading sprite effect that func_L06_0030D2A0
registers: projects the moby to the screen and draws one textured quad
that grows and fades with its timer. Adapted from Lombyte's
FUN_L06_0030bfa8. Its declaration now takes the moby.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tests whether the segment from start to end crosses the path with the
given index, in the plane of the segment's direction. Adapted from
Lombyte's FUN_L00_00261968, with the file's own vector type and second
names for the callees, whose prototypes the file declares later with its
own types.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Spawns a class 0x1A1 moby at a random angle and radius around an origin,
moving along a direction, sized and slowed by how far the angle is from
that direction. Adapted from Lombyte's FUN_L09_002efe48, with the
parameters in this file's declared order and the moby fields under their
names in include/moby.h.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A draw callback that covers the screen with 32-pixel tiles of a random
part of effect texture 30, faded in by the moby's timer. Adapted from
Lombyte's FUN_L01_00302438, with the screen size read through
D_0013E15A + 0x4A6 as other files here do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Finds the first of the level's ledge spots whose sphere holds a point and
whose owner reports a hit within reach of the hero, the reach depending on
the hero's control mode, and returns the spot's owner, kind and hit.
Adapted from Lombyte's FUN_L00_0020cd08. The parameters keep the types
the file declares and take their real types inside.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Spawns one moby from the owner's spawn class at a position, sets it up
from its class header, splits the owner's unkB4 count with it and returns
it. When no moby is free it reports the owner's save id instead. Adapted
from Lombyte's FUN_L09_0030a778, with the moby fields Lombyte names under
their unkXX names in include/moby.h.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The tilting platform on Pokitaru: its rot.y springs back through a damped
spin, the hero standing on it tilts it toward his side, and a tilt past
the level's limit knocks him into the falling state. Adapted from
Lombyte's FUN_L11_0030eb90. Level 11's constants sit 0x90 above their US
addresses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The draw callback of an Oltanis racer: two glow quads at its lamp
(pvars 0xE0) and its tail (pvars 0x200), each turned toward a fixed
point of the level. Adapted from Lombyte's FUN_L14_002d71f0. Its
declaration now takes the moby.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The update of a spinning pickup on Oltanis: it removes itself when its
mission slot is unset, otherwise floats and turns in place, and when the
hero touches it starts a cutscene, then saves, queues its dialogue and a
help message and removes itself. Adapted from Lombyte's
FUN_L14_00305758. PAL shows dialogue 0x53E5 where the US build shows
0x53E0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The update of the Oltanis mine cart: a hit stops it, bursts it, and on
the third one in level 14 plays a voice line once; then it either starts
on its path, runs it, or waits out its timer and restarts at the path's
first point. Adapted from Lombyte's FUN_L14_002fc0f0. PAL plays
dialogue 0x53DB where the US build plays 0x53D6.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bursts sparks around a moby: for each of the level's burst count, a
random start near the moby and a random velocity along the given
direction, then a level-defined number of sparks with random sizes,
colours, lifetimes and fades. Adapted from Lombyte's FUN_L01_002ef770.
Level 1's constants sit 0x90 above their US addresses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Picks the nearest box or mine (classes 0x3B1, 0x400, 0x515, 0x516)
within 12 units and at the moby's height, from its target group or else
the level's moby list, skipping ones already used, and marks the search
done. Adapted from Lombyte's FUN_L06_002f2910, with its moby and vars
types cut down to the fields this function reads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Draws three nested glow quads around a point on Veldin's second visit,
facing a fixed position, after resetting the point's rotation on the
frame its timer comes due. Adapted from Lombyte's FUN_L18_002f9780.
Level 18's data sits 0x80 to 0x90 above its US addresses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Draws a Gemlik beam from a point of the moby to the target in its pvars
as a chain of textured quads one step apart, scrolling with the frame
counter and fading over its last ten units. Adapted from Lombyte's
FUN_L13_002ea8c8, with a plain field for the quad's reserved word.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…unctions

The fifteen functions of this branch are exact now: their near misses and
functional files go, with their rows in functional.tsv.

nonmatching/README.md is regenerated with tools/nonmatching.py's index().
It also catches up with main on three rows: func_L09_00306DD8's staged
file is gone, and func_L05_00317B68 and func_L00_001F8750 moved to
functional/ and game/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Regenerated with gen_progress_report.py --no-build after build_sn.sh, and
--check says it is current. The fifteen functions of this branch are new.
Main's totals said 4372 while its units already summed to 4374, so the
total moves by 17.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The C as adapted used volatile to steer the compiler, which says nothing
about what the original source did. Each matches as plain C:

- func_L18_002FABE0: the four floats at D_L18_001625E0 are one vector,
  written in turn and passed by address, so they are an array.
- func_L09_0030BB28: the three stores to the returned object go in the
  order 0x94, 0x68, 0x6C, and m needs no forced reload.
- func_L01_00303810: coordinate needs no volatile at all.

overlay_file_check: 3 files, 0 problems.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A moby on Aridia that rolls back and forth along its heading: state 0
starts it, states 1 and 2 speed it up to the level's limit and slow it
down before turning, state 3 moves at full speed, and every state moves
it through func_L00_002617B0. Adapted from Lombyte's FUN_L02_002dc6b0,
written as a switch where Lombyte dispatches with gotos. Level 2's
constants sit 0x90 above their US addresses, and frame_time_sq is read
with MACRO_ADDR rather than through its literal address.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Draws a HUD panel that slides open with its element's open counter: a
three-part frame, an animated icon, and a label whose colour pulses with
the frame counter. It draws nothing while the hero is in vehicle mode 2
or state 50. Adapted from Lombyte's FUN_L00_0023a2d0, without its
volatile on the display flag and with the two candidate heights as plain
locals. Level 0's data sits 0xD4 to 0xE4 above its US addresses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Carried by OpenRAC tools/port.py from Lombyte's matched C (identical
code at other addresses), each checked EXACT against its whole file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s matched now

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The hero's periodic probes on Rilgar: every third frame the wall in
front of him (distance, angle, and whether it is a moby that blocks),
every fifth frame a ledge in front while he is on the ground, and while
he carries an object in control modes 0x15 and 0x16 it moves the object
to his hands. Adapted from Lombyte's FUN_L05_0024bdc0, with the hero's
fields under their names in include/hero.h and the ledge distance as a
plain statement rather than a comma expression in the condition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The damage step of a Pokitaru chain enemy: links hit this frame wear
down its health, and each time the health crosses a link's share the
last link dies, takes the hit link's place, and the following links
shift up in the chain. When no link is left it bursts, spawns three
debris pieces and removes itself. Adapted from Lombyte's
FUN_L11_00317c98, without the assignments Lombyte hides in a call's
argument, which the bytes do not need.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An Orxon moby that shuffles a ten-entry order from the level's table on
spawn and keeps it in its pvars, then while active draws through
func_L10_002DBA50 when the hero's view reaches it and keeps its looping
voice alive; state 2 releases the voice. Adapted from Lombyte's
FUN_L10_002da2c8.

The shuffle buffer and state 2's position share one stack slot in
retail, which Lombyte's union reproduces. Separate arrays come within 8
bytes but place the position elsewhere, and arrays scoped to their case
blocks change the size, so the union stays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A breakable Novalis object: when something hits it with force, it plays
its sound, throws 200 dust particles and 40 debris chunks in one of
three colours around itself, and removes itself. Adapted from Lombyte's
FUN_L01_002f9810. The first loop's locals sit in a block of their own,
which lets the second loop reuse their stack slots as retail does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…unctions

The six functions of this branch are exact now: their near misses and
functional files go, with their rows in functional.tsv.

nonmatching/README.md is regenerated with tools/nonmatching.py's index().
It also catches up with main on three rows: func_L09_00306DD8's staged
file is gone, and func_L05_00317B68 and func_L00_001F8750 moved to
functional/ and game/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cnobis and others added 4 commits October 14, 2026 22:36
Regenerated with gen_progress_report.py --no-build after build_sn.sh, and
--check says it is current. The six functions of this branch are new.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Plain C only: no __asm__ symbol aliases, SDATA or qcopy/qzero.
Joins added for six split heads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@decomp-dev

decomp-dev Bot commented Oct 14, 2026

Copy link
Copy Markdown

Report for SCES_509.16 (e1ee2ee - 6da18e1)

📈 Matched code: 83.46% (+1.07%, +39600 bytes)

✅ 80 new matches
Unit Item Bytes Before After
Shared level code func_L00_002D7298 +3588 0.00% 100.00%
Level 15: Quartu func_L15_002AB4A8 +1736 0.00% 100.00%
Shared level code func_L00_002E74B0 +1716 0.00% 100.00%
Shared level code func_L13_002E3010 +1664 0.00% 100.00%
Shared level code func_L06_00309170 +1664 0.00% 100.00%
Level 11: Pokitaru func_L11_00310BF0 +1648 0.00% 100.00%
Shared level code func_L00_002E91D0 +1612 0.00% 100.00%
Level 08: Batalia func_L08_00308A00 +1612 0.00% 100.00%
Level 06: Blarg Station (Nebula G34) func_L06_003045A0 +1512 0.00% 100.00%
Shared level code func_L00_002147C0 +1440 0.00% 100.00%
Level 03: Kerwan func_L03_002DD158 +1408 0.00% 100.00%
Level 11: Pokitaru func_L11_0030F4F8 +1349 17.14% 100.00%
Shared level code func_L00_002EA4C0 +1288 0.00% 100.00%
Level 15: Quartu func_L15_0029C1D0 +1184 0.00% 100.00%
Shared level code func_L14_002DFA70 +1064 0.00% 100.00%
Level 01: Novalis func_L01_002FABE8 +992 0.00% 100.00%
Level 10: Orxon func_L10_002DB688 +964 0.00% 100.00%
Shared level code func_L00_0023AC68 +880 0.00% 100.00%
Shared level code func_L02_002DDAE8 +864 0.00% 100.00%
Level 15: Quartu func_L15_002C62A8 +816 0.00% 100.00%
Level 18: Veldin (return) func_L18_002F1780 +816 0.00% 100.00%
Level 18: Veldin (return) func_L18_002FABE0 +792 0.00% 100.00%
Level 04: Eudora func_L04_00293578 +716 0.00% 100.00%
Shared level code func_L00_002CD110 +680 0.00% 100.00%
Shared level code func_L00_00209940 +632 0.00% 100.00%
Shared level code func_L00_0020D3A0 +588 0.00% 100.00%
Shared level code func_L01_00303810 +524 0.00% 100.00%
Shared level code func_L05_002F63FC +284 0.00% 100.00%
Shared level code func_L03_002E9AF8 +276 100.00% 100.00%
Shared level code func_L05_002F62E8 +244 0.00% 100.00%

...and 50 more new matches

🥀 4 broken matches
Unit Item Bytes Before After
Shared level code func_L11_0030A8C8 -756 100.00% 0.00%
Shared level code func_L08_00211A38 -748 100.00% 0.00%
Shared level code func_L00_0029AFB8 -544 100.00% 0.00%
Shared level code func_L03_002E99F0 -36 100.00% 0.00%

Lynder063 and others added 4 commits October 14, 2026 23:01
# Conflicts:
#	nonmatching/README.md
#	nonmatching/functional.tsv
#	progress/report.json
#	src/overlays/l18_veldin2/vendor_002F9D48.c
#	src/overlays/shared/help_0020CDF0.c
#	src/overlays/shared/vendor_002F7700.c
# Conflicts:
#	nonmatching/README.md
#	nonmatching/functional.tsv
#	nonmatching/shared/func_L06_0030D3E8.c
#	progress/report.json
#	src/overlays/l04_eudora/vuchain_00293490.c
#	src/overlays/l06_blarg/vendor_002FE5D0.c
#	src/overlays/l15_quartu/vendor_0029C1D0.c
#	src/overlays/shared/mobyutil_00261B00.c
#	src/overlays/shared/vendor_002B2A28.c
#	src/overlays/shared/vendor_002C96D0.c
#	src/overlays/shared/vendor_002D1168.c
# Conflicts:
#	THIRD_PARTY_NOTICES.md
#	nonmatching/README.md
#	nonmatching/functional.tsv
#	progress/report.json
#	src/overlays/l01_novalis/vendor_002FABE8.c
#	src/overlays/l10_orxon/vendor_00296BD8.c
#	src/overlays/shared/hud_00235960.c
#	src/overlays/shared/vendor_002A5218.c
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Lynder063 Lynder063 changed the title feat(overlays): 50 functions in pure C, ported from Lombyte feat(overlays): 50 pure-C ports, plus #69, #70 and #71 merged Oct 14, 2026
@Lynder063
Lynder063 merged commit 9d10e94 into main Oct 14, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants