Internals Reference
Confirmed classes, methods, RVAs and field offsets from reverse engineering (single game build)
Internals Reference
Classes, methods and field offsets found by reverse engineering the game. In BepInEx code, use the names; the numbers are for locating the same member in a dump or decompiler.
How these were obtained
- Names, field offsets and RVAs come from the
dump.csproduced by Il2CppDumper (input:GameAssembly.dllandglobal-metadata.dat). - Behavior notes (what a method really checks, call order, data layouts) come from decompiling the same binary in Ghidra after applying Il2CppDumper's Ghidra script. For a PE file Ghidra's address is
0x180000000+ RVA. - Anything marked as tested was also confirmed by a live run in game.
Build specific
All RVAs and offsets are from one game build. They move after a game update; re-run Il2CppDumper to get new ones, and rely on the names.
RVAs are relative to the base of GameAssembly.dll.
Methods
| Class | Method | RVA | Notes |
|---|---|---|---|
Cheats |
get_Available |
0x52A840 |
force true to enable dev console |
Cheats |
CheckAvailable |
0x528D40 |
force true |
IslandGrid |
Awake |
0x6130C0 |
good place to set HardLimit.radius |
IslandGrid |
CanPlaceBuilding |
0x6143A0 |
|
IslandGrid |
ImportIsland |
0x616340 |
private, patchable |
IslandGrid |
ExportIsland |
0x614900 |
|
IslandGrid |
Generate |
0x614EB0 |
|
IslandGrid |
GenerateJob |
0x614D90 |
|
IslandGrid |
SaveIslandToClipboard |
0x61A690 |
unreliable (see below) |
IslandGrid |
LoadIslandFromClipboard |
0x616810 |
unreliable (see below) |
Island |
get_Owner |
0x61F7D0 |
|
Player |
get_UserName |
0x473BB0 |
|
Player |
get_StartGameReady |
0x571AB0 |
|
Player |
get_Island |
0x508770 |
|
PlayerSummary |
Update |
0x5AA420 |
|
PlayerSummary |
OnSyncPhase |
0x5AA1A0 |
|
GameState |
Island(Player) |
0x5F2F60 |
|
GameState |
Update |
0x5F70E0 |
per-frame patch point |
BuildData |
CanBuildType |
0x628760 |
IsBuildable -> Unlocked -> SteamDemo -> HasResource |
BuildData |
CanRemoveNature |
0x6288B0 |
inline check: TREE / ROCK / SCORCHED_EARTH / LAVA |
BuildData |
CleanTile |
0x628AB0 |
|
NatureTile |
Cleanable |
0x61FE70 |
not called by CanRemoveNature |
CleanTileTool |
Use |
0x589B90 |
only fires a UnityEvent |
CleanTileTool |
Yield |
0x589CF0 |
|
BuildingType |
get_DisplayName |
0x5F0E10 |
|
BuildingTypes |
get_Types |
0x5717B0 |
ids in save-file order; did not fire in testing, see below |
RulesBuilding |
OnEnable |
0x5471E0 |
holds BuildingTypes at +0x18 |
GridTransform |
Transform |
0x6105D0 |
point + rotation + translation |
Fields
| Class | Field | Offset |
|---|---|---|
IslandGrid |
size (int2) |
0xF0 |
IslandGrid |
generationParameters |
0x1E8 (HardLimit.radius at +0) |
IslandGrid |
snapshotIslandSize |
0x298 |
IslandGrid |
arraySize |
0x2AC |
Island |
grid |
0x98 |
Island |
owner (NetworkedVar<Player>) |
0x90 |
Player |
UserName (string) |
0x110 |
PlayerSummary |
island |
0xD0 |
PlayerSummary |
attackers (List<Image>) |
0xE8 (_size at +0x18) |
PlayerSummary |
gameState |
0xC8 |
BuildingType |
localPositions (int2[]) |
0x18 |
BuildingType |
localPositionsInWater |
0x20 |
BuildingType |
id |
0x10 |
BuildingType |
tier / maxHealth |
0x78 / 0x80 |
BuildingType |
cost block | 0x58 - 0x74 |
BuildData |
island grid chain | +0xA0 -> grid +0x98 |
UnlockBuildingTechnology |
BuildingTypes* / id |
0x38 / 0x40 |
Known quirks
BuildingTypes.get_Typesdid not fire when patched late, even with buildings on screen: theBuildingTypesobject is created before a late patch is applied (RulesBuilding.OnEnable).BuildData.Unlocked(BuildingType)is called repeatedly, so a patch on it can capture aBuildingType, and from there theBuildingType[]that contains it. Patching early (pluginLoad) may avoid the problem - untested.SaveIslandToClipboard/LoadIslandFromClipboardrely onGUIUtility.systemCopyBufferand were unreliable when called outsideOnGUI. Prefer callingExportIsland/ImportIslandand handling the clipboard yourself.