Skip to content

Add Celeste Any% + IL Autosplitters + Splits - #25

Open
rellort1 wants to merge 9 commits into
LibreSplit:mainfrom
rellort1:main
Open

Add Celeste Any% + IL Autosplitters + Splits#25
rellort1 wants to merge 9 commits into
LibreSplit:mainfrom
rellort1:main

Conversation

@rellort1

Copy link
Copy Markdown

I havent tested every chapter in every split, but everything I tested was working.

The split logic will break if people skip/undo/manually split, requires LibreSplit/LibreSplit#369 to fix, but this felt like the best solution to handle all the edge cases and also allow for easily reusing on the other categories when I get around to that.

@Penaz91

Penaz91 commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Chonky PR here, I see! Do you prefer waiting for 369 to be merged or do you prefer having things merged sooner and go back to edit stuff later?

@rellort1

Copy link
Copy Markdown
Author

I think its fine, theoretically you shouldnt need to do any of those things in the first place :p I guess it would be good to add it to the readme at least.

@Penaz91 Penaz91 self-assigned this Jul 15, 2026
Comment thread auto-splitters/Celeste/celeste-any.lua Outdated
@tomdicarlo

Copy link
Copy Markdown

I was just about to start working on a Celeste implementation, so very serendipitous timing that you put this together 😄

@tomdicarlo

tomdicarlo commented Jul 22, 2026

Copy link
Copy Markdown

Minor nitpick, the room start for 2a awake is 2 rooms early. This is when I was testing any% checkpoint. It should trigger in the room with the checkpoint, not when you actually wake up. I haven't had a chance yet to figure out how to get the room numbers, but I will when I get the chance.

EDIT: Just checked and it's end_3 instead of end_0 for both of the checkpoint lua scripts

@tomdicarlo

tomdicarlo commented Jul 22, 2026

Copy link
Copy Markdown

Another issue I had that stopped this from running out of the box was an address read issue:

error running function 'state': ...ources/auto-splitters/Celeste/celeste_any_checkpoint.lua:156: attempt to perform arithmetic on local 'firstDomain' (a nil value)
[readAddress] EFAULT: Invalid memory space/address
[readAddress] The address argument cannot be nil. Check your auto splitter code.
error running function 'state': ...ources/auto-splitters/Celeste/celeste_any_checkpoint.lua:156: attempt to perform arithmetic on local 'firstDomain' (a nil value)

There's always the possibility I've misconfigured something on my end that would cause this. But my (admittedly vibecoded) solution was to add the following function and locals at the top of the 4 lua scripts:

local _read = readAddress
local base = 0
function readAddress(typ, addr, ...)
    if type(addr) == "number" and addr >= base then
        return _read(typ, addr - base, ...)
    else
        return _read(typ, addr, ...)
    end
end

and then modify the startup function as follows:


function startup()
    refreshRate = 60
    useGameTime = true
    base = getBaseAddress()
end

From my understanding, it seems like at least my machine doesn't like the the absolute virtual addresses that the Celeste scripts use by default. So this just converts them to offsets.

Not sure if this is a hackjob; but it has made everything run very smoothly on my end.

@rellort1

Copy link
Copy Markdown
Author

Minor nitpick, the room start for 2a awake is 2 rooms early. This is when I was testing any% checkpoint. It should trigger in the room with the checkpoint, not when you actually wake up. I haven't had a chance yet to figure out how to get the room numbers, but I will when I get the chance.

EDIT: Just checked and it's end_3 instead of end_0 for both of the checkpoint lua scripts

yeah, we generally use that room instead of the checkpoint room in-game since it kinda makes more sense and feels better. the newest splits on src for instance all use end_0 instead of end_3

@rellort1

rellort1 commented Jul 23, 2026

Copy link
Copy Markdown
Author

Another issue I had that stopped this from running out of the box was an address read issue:

error running function 'state': ...ources/auto-splitters/Celeste/celeste_any_checkpoint.lua:156: attempt to perform arithmetic on local 'firstDomain' (a nil value)
[readAddress] EFAULT: Invalid memory space/address
[readAddress] The address argument cannot be nil. Check your auto splitter code.
error running function 'state': ...ources/auto-splitters/Celeste/celeste_any_checkpoint.lua:156: attempt to perform arithmetic on local 'firstDomain' (a nil value)

There's always the possibility I've misconfigured something on my end that would cause this. But my (admittedly vibecoded) solution was to add the following function and locals at the top of the 4 lua scripts:

local _read = readAddress
local base = 0
function readAddress(typ, addr, ...)
    if type(addr) == "number" and addr >= base then
        return _read(typ, addr - base, ...)
    else
        return _read(typ, addr, ...)
    end
end

and then modify the startup function as follows:


function startup()
    refreshRate = 60
    useGameTime = true
    base = getBaseAddress()
end

From my understanding, it seems like at least my machine doesn't like the the absolute virtual addresses that the Celeste scripts use by default. So this just converts them to offsets.

Not sure if this is a hackjob; but it has made everything run very smoothly on my end.

hmm, someone else I had given it to was also getting that same error, so I think its like a distro specific thing? that solution seems fine to me, I dont think its better to like add the offset manually to every readAddress.

@rellort1

Copy link
Copy Markdown
Author

that also has the added benefit of no longer needing LIBRESPLIT_DISABLE_IOCTL_MAPS=1 so thats nice

@tomdicarlo

Copy link
Copy Markdown

Minor nitpick, the room start for 2a awake is 2 rooms early. This is when I was testing any% checkpoint. It should trigger in the room with the checkpoint, not when you actually wake up. I haven't had a chance yet to figure out how to get the room numbers, but I will when I get the chance.

EDIT: Just checked and it's end_3 instead of end_0 for both of the checkpoint lua scripts

yeah, we generally use that room instead of the checkpoint room in-game since it kinda makes more sense and feels better. the newest splits on src for instance all use end_0 instead of end_3

Makes sense! It's super easy to swap it on my end and can definitely be personal preference for most folks.

@tomdicarlo

Copy link
Copy Markdown

Been playing around with it more, and another thing I think would be helpful would be to a bigger default width and height for all of the split files. I've been using "width": 350,
"height": 600 and it is much better than the 60/80 being used in most of them.

@tomdicarlo

tomdicarlo commented Jul 28, 2026

Copy link
Copy Markdown

Was just going for a full run, and I noticed that the splits for any% 6b route checkpoints still is the 6a route. Should be 6a Start, Lake, Casette, 6b start/ Reflection / Rock Bottom/ Reprieve.

EDIT: Actually I can see with the existing splits you wouldn't include Lake, since it's just the one room.

@rellort1

Copy link
Copy Markdown
Author

Been playing around with it more, and another thing I think would be helpful would be to a bigger default width and height for all of the split files. I've been using "width": 350, "height": 600 and it is much better than the 60/80 being used in most of them.

mmm, true, thats just the default you get when you convert. Im not sure what the best size is, but I assume most people will have to change it anyway since the window gets resized on every reset.

@rellort1

Copy link
Copy Markdown
Author

Was just going for a full run, and I noticed that the splits for any% 6b route checkpoints still is the 6a route. Should be 6a Start, Lake, Casette, 6b start/ Reflection / Rock Bottom/ Reprieve.

EDIT: Actually I can see with the existing splits you wouldn't include Lake, since it's just the one room.

I didnt include the 2 room hollow split cause I think its a little silly, but unbeknownst to me most people do include hollows so I added it :p

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