Skip to content

GD Update Procedure

mat edited this page Nov 18, 2024 · 3 revisions

GD just got an update? fuck! but also here are some steps for it

Bindings

0. Is the update only out on Windows?

if the update is only out on windows, just copy the folder for the latest bindings and remove the address for all functions. use something like ghidra version tracking to find a bunch of addresses automatically, making use of the SyncBromaScript probably

now go to the geode part


This ↓ is assuming there is an android version

1. Generate clean bindings for the old version

this is so we can diff it, to apply the patches. See the comments on generate.mjs in the bindings repo, run it to get a clean broma

2. Analyze the new version on ghidra

can be the armv7 version, i think we only ever tried that. See the DumpVirtuals.java script on the bindings repo

After that is done, put the new virtuals.json in the bindings repo

3. Generate clean bindings for the new version

do the steps of 1 but now with the symbol info from the new version (and the new virtuals.json too)

4. Diff the two bromas

run something like git diff old.bro new.bro > changes.diff to get the diff between the two versions.

5. Apply the diff

copy the entire bindings folder for the old version, remove any function addresses (if there are any),
and then apply the .diff file to the GeometryDash.bro
* idk the command for doing that lol

diffing is a terrible idea and its very prone to wrong syntax, dont bother with this method


Geode

now its on the loader side of things

0. Edit the GEODE_GD_VERSION

go edit the GEODE_GD_VERSION cmake variable: https://github.com/geode-sdk/geode/blob/main/CMakeLists.txt#L172

if this is an windows update, go add it to the gd version timestamp map as well: https://github.com/geode-sdk/geode/blob/main/loader/src/platform/windows/gdTimestampMap.hpp#L11

1. (android) Generate stubs

generate stubs for the new android binary (do this for both arches!!)

  • arm-linux-androideabi-objcopy --only-section=.dynsym --only-section=.dynstr libcocos2dcpp.so

you can get that weird objcopy from the r17c NDK, but also you can use the regular objcopy in termux lol

2. (windows) generate windows libs

youll probably need to update libcocos2d.lib (and extensions)

use a script like this to generate the .lib from the dlls: https://gist.github.com/matcool/05f8d1dbfa594ef81550dca49c76f01f

for gdstring.lib use this: https://gist.github.com/matcool/3261e808bfc2785436b4ff2a3807b2e7

3. patch addresses

Geode has some patch and hook addresses embedded like dynamic_cast for macos and empty gd::string for android and fnt cache patch and glfw box patch for windows

there might be some stuff i forgot right now


ok i think thats all?

go bother chloe to update her symbol server too