make member check and size check less confusing

This commit is contained in:
altalk23 2023-12-20 18:36:54 +03:00
parent 3aa3ae7dce
commit 7c0d7ba57a
4 changed files with 171 additions and 152 deletions

View file

@ -4,36 +4,38 @@
// Add known android struct members here // Add known android struct members here
GEODE_SIZE_CHECK(CCObject, 0x34);
// needed classes are ones in the ids folder and some generic ones (i think they are already done though so only ids) // needed classes are ones in the ids folder and some generic ones (i think they are already done though so only ids)
GEODE_MEMBER_CHECK(GameManager, m_playLayer, 0x138); // GEODE_MEMBER_CHECK(GameManager, m_playLayer, 0x138);
GEODE_MEMBER_CHECK(GameManager, m_levelEditorLayer, 0x13c); // GEODE_MEMBER_CHECK(GameManager, m_levelEditorLayer, 0x13c);
GEODE_MEMBER_CHECK(GameManager, m_canGetLevelSaveData, 0x28c); // GEODE_MEMBER_CHECK(GameManager, m_canGetLevelSaveData, 0x28c);
static_assert(sizeof(GJBaseGameLayer) == 0x2cc); // static_assert(sizeof(GJBaseGameLayer) == 0x2cc);
GEODE_MEMBER_CHECK(PlayLayer, unknown4e8, 0x2e8); // GEODE_MEMBER_CHECK(PlayLayer, unknown4e8, 0x2e8);
GEODE_MEMBER_CHECK(PlayLayer, m_endPortal, 0x324); // GEODE_MEMBER_CHECK(PlayLayer, m_endPortal, 0x324);
GEODE_MEMBER_CHECK(PlayLayer, m_bottomGround, 0x37c); // GEODE_MEMBER_CHECK(PlayLayer, m_bottomGround, 0x37c);
GEODE_MEMBER_CHECK(PlayLayer, m_topGround, 0x380); // GEODE_MEMBER_CHECK(PlayLayer, m_topGround, 0x380);
GEODE_MEMBER_CHECK(PlayLayer, m_level, 0x470); // GEODE_MEMBER_CHECK(PlayLayer, m_level, 0x470);
GEODE_MEMBER_CHECK(PlayLayer, m_shouldTryToKick, 0x4e0); // GEODE_MEMBER_CHECK(PlayLayer, m_shouldTryToKick, 0x4e0);
static_assert(sizeof(GameObject) == 0x42c); // static_assert(sizeof(GameObject) == 0x42c);
GEODE_MEMBER_CHECK(GameStatsManager, m_dailyChests, 0x110); // GEODE_MEMBER_CHECK(GameStatsManager, m_dailyChests, 0x110);
GEODE_MEMBER_CHECK(GameStatsManager, m_completedLevels, 0x164); // GEODE_MEMBER_CHECK(GameStatsManager, m_completedLevels, 0x164);
GEODE_MEMBER_CHECK(DailyLevelPage, m_weekly, 0x1ed); // GEODE_MEMBER_CHECK(DailyLevelPage, m_weekly, 0x1ed);
GEODE_MEMBER_CHECK(TeleportPortalObject, m_orangePortal, 0x430); // GEODE_MEMBER_CHECK(TeleportPortalObject, m_orangePortal, 0x430);
GEODE_MEMBER_CHECK(EditorUI, m_rotationControl, 0x16c); // GEODE_MEMBER_CHECK(EditorUI, m_rotationControl, 0x16c);
GEODE_MEMBER_CHECK(EditorUI, m_updateTimeMarkers, 0x1a4); // GEODE_MEMBER_CHECK(EditorUI, m_updateTimeMarkers, 0x1a4);
GEODE_MEMBER_CHECK(EditorUI, m_selectedObjects, 0x1bc); // GEODE_MEMBER_CHECK(EditorUI, m_selectedObjects, 0x1bc);
GEODE_MEMBER_CHECK(EditorUI, m_selectedObject, 0x2c4); // GEODE_MEMBER_CHECK(EditorUI, m_selectedObject, 0x2c4);
GEODE_MEMBER_CHECK(MoreSearchLayer, m_enterSongID, 0x1E4); // GEODE_MEMBER_CHECK(MoreSearchLayer, m_enterSongID, 0x1E4);
GEODE_MEMBER_CHECK(MoreSearchLayer, m_songLeftBtn, 0x1D4); // GEODE_MEMBER_CHECK(MoreSearchLayer, m_songLeftBtn, 0x1D4);
#endif #endif

View file

@ -6,19 +6,36 @@ struct False {
static constexpr auto value = false; static constexpr auto value = false;
}; };
template<int Difference, class Class, class Member, bool Predicate> template<int Difference, int Expected, int Current, class Class, class Member, bool Predicate>
struct MemberIsOffsetBy { struct MemberIsOffsetBy {
static_assert(False<Difference>::value, "Member is offset by this value"); static_assert(False<Difference, Expected, Current>::value, "Member is offset by this value (Difference, Expected, Current)");
}; };
template<int Difference, class Class, class Member> template<int Difference, int Expected, int Current, class Class, bool Predicate>
struct SizeIsOffsetBy {
static_assert(False<Difference, Expected, Current>::value, "Size is offset by this value (Difference, Expected, Current)");
};
template<int Difference, int Expected, int Current, class Class, class Member>
struct MemberIsOffsetBy<Difference, Class, Member, true> { struct MemberIsOffsetBy<Difference, Class, Member, true> {
}; };
template <class Member, class Class, int Offset, int Expected> template<int Difference, int Expected, int Current, class Class>
struct SingleChecker { struct SizeIsOffsetBy<Difference, Class, true> {
using IsOffsetBy = MemberIsOffsetBy<Offset - Expected, Class, Member, Expected == Offset>;
}; };
#define GEODE_MEMBER_CHECK(Class_, Member_, Offset_) class Member_; SingleChecker<Member_, Class_, offsetof(Class_, Member_), Offset_>::IsOffsetBy GEODE_CONCAT(OffsetBy, __LINE__) template <class Member, class Class, int Offset, int Expected>
struct SingleMemberChecker {
using IsOffsetBy = MemberIsOffsetBy<Offset - Expected, Expected, Offset, Class, Member, Expected == Offset>;
};
template <class Class, int Offset, int Expected>
struct SingleSizeChecker {
using IsOffsetBy = MemberIsOffsetBy<Offset - Expected, Expected, Offset, Class, Member, Expected == Offset>;
};
#define GEODE_MEMBER_CHECK(Class_, Member_, Offset_) class Member_; SingleMemberChecker<Member_, Class_, offsetof(Class_, Member_), Offset_>::IsOffsetBy GEODE_CONCAT(OffsetBy, __LINE__)
#define GEODE_SIZE_CHECK(Class_, Offset_) class Class_; SingleMemberChecker<Class_, sizeof(Class_), Offset_>::IsOffsetBy GEODE_CONCAT(OffsetBy, __LINE__)

View file

@ -2,97 +2,97 @@
#ifdef GEODE_IS_MACOS #ifdef GEODE_IS_MACOS
// PlayerObject // // PlayerObject
GEODE_MEMBER_CHECK(PlayerObject, m_collisionLog, 0x518); // GEODE_MEMBER_CHECK(PlayerObject, m_collisionLog, 0x518);
GEODE_MEMBER_CHECK(PlayerObject, m_particleSystems, 0x590); // GEODE_MEMBER_CHECK(PlayerObject, m_particleSystems, 0x590);
GEODE_MEMBER_CHECK(PlayerObject, m_waveTrail, 0x600); // GEODE_MEMBER_CHECK(PlayerObject, m_waveTrail, 0x600);
GEODE_MEMBER_CHECK(PlayerObject, m_objectSnappedTo, 0x690); // GEODE_MEMBER_CHECK(PlayerObject, m_objectSnappedTo, 0x690);
GEODE_MEMBER_CHECK(PlayerObject, m_playerColor1, 0x7c2); // GEODE_MEMBER_CHECK(PlayerObject, m_playerColor1, 0x7c2);
// EditorUI // // EditorUI
GEODE_MEMBER_CHECK(EditorUI, m_buttonBar, 0x1a0); // GEODE_MEMBER_CHECK(EditorUI, m_buttonBar, 0x1a0);
GEODE_MEMBER_CHECK(EditorUI, m_scaleControl, 0x208); // GEODE_MEMBER_CHECK(EditorUI, m_scaleControl, 0x208);
GEODE_MEMBER_CHECK(EditorUI, m_swipeEnabled, 0x23c); // GEODE_MEMBER_CHECK(EditorUI, m_swipeEnabled, 0x23c);
GEODE_MEMBER_CHECK(EditorUI, m_updateTimeMarkers, 0x244); // GEODE_MEMBER_CHECK(EditorUI, m_updateTimeMarkers, 0x244);
GEODE_MEMBER_CHECK(EditorUI, m_selectedObjects, 0x260); // GEODE_MEMBER_CHECK(EditorUI, m_selectedObjects, 0x260);
GEODE_MEMBER_CHECK(EditorUI, m_selectedObject, 0x440); // GEODE_MEMBER_CHECK(EditorUI, m_selectedObject, 0x440);
// LevelEditorLayer // // LevelEditorLayer
GEODE_MEMBER_CHECK(LevelEditorLayer, m_editorUI, 0x5d8); // GEODE_MEMBER_CHECK(LevelEditorLayer, m_editorUI, 0x5d8);
GEODE_MEMBER_CHECK(LevelEditorLayer, m_level, 0x618); // GEODE_MEMBER_CHECK(LevelEditorLayer, m_level, 0x618);
// PlayLayer // // PlayLayer
GEODE_MEMBER_CHECK(PlayLayer, unknown518, 0x518); // GEODE_MEMBER_CHECK(PlayLayer, unknown518, 0x518);
GEODE_MEMBER_CHECK(PlayLayer, unknown5f4, 0x5f4); // GEODE_MEMBER_CHECK(PlayLayer, unknown5f4, 0x5f4);
GEODE_MEMBER_CHECK(PlayLayer, unknown680, 0x680); // GEODE_MEMBER_CHECK(PlayLayer, unknown680, 0x680);
GEODE_MEMBER_CHECK(PlayLayer, m_replayInputs, 0x6a8); // GEODE_MEMBER_CHECK(PlayLayer, m_replayInputs, 0x6a8);
GEODE_MEMBER_CHECK(PlayLayer, m_level, 0x728); // GEODE_MEMBER_CHECK(PlayLayer, m_level, 0x728);
GEODE_MEMBER_CHECK(PlayLayer, m_shouldTryToKick, 0x7a8); // GEODE_MEMBER_CHECK(PlayLayer, m_shouldTryToKick, 0x7a8);
// GameManager // // GameManager
GEODE_MEMBER_CHECK(GameManager, m_playLayer, 0x180); // GEODE_MEMBER_CHECK(GameManager, m_playLayer, 0x180);
GEODE_MEMBER_CHECK(GameManager, m_levelEditorLayer, 0x188); // GEODE_MEMBER_CHECK(GameManager, m_levelEditorLayer, 0x188);
GEODE_MEMBER_CHECK(GameManager, m_menuLayer, 0x198); // GEODE_MEMBER_CHECK(GameManager, m_menuLayer, 0x198);
GEODE_MEMBER_CHECK(GameManager, m_playerUDID, 0x1b8); // GEODE_MEMBER_CHECK(GameManager, m_playerUDID, 0x1b8);
GEODE_MEMBER_CHECK(GameManager, m_playerUserID, 0x1cc); // GEODE_MEMBER_CHECK(GameManager, m_playerUserID, 0x1cc);
GEODE_MEMBER_CHECK(GameManager, m_playerFrame, 0x200); // GEODE_MEMBER_CHECK(GameManager, m_playerFrame, 0x200);
GEODE_MEMBER_CHECK(GameManager, m_clickedGarage, 0x2a2); // todo: find why this is not 0x2a2 // GEODE_MEMBER_CHECK(GameManager, m_clickedGarage, 0x2a2); // todo: find why this is not 0x2a2
// GameObject // // GameObject
GEODE_MEMBER_CHECK(GameObject, m_baseColorID, 0x27c); // GEODE_MEMBER_CHECK(GameObject, m_baseColorID, 0x27c);
GEODE_MEMBER_CHECK(GameObject, m_detailColorID, 0x280); // GEODE_MEMBER_CHECK(GameObject, m_detailColorID, 0x280);
GEODE_MEMBER_CHECK(GameObject, m_active, 0x2e5); // GEODE_MEMBER_CHECK(GameObject, m_active, 0x2e5);
GEODE_MEMBER_CHECK(GameObject, m_baseSprite, 0x348); // GEODE_MEMBER_CHECK(GameObject, m_baseSprite, 0x348);
GEODE_MEMBER_CHECK(GameObject, m_startPosition, 0x37c); // GEODE_MEMBER_CHECK(GameObject, m_startPosition, 0x37c);
GEODE_MEMBER_CHECK(GameObject, m_baseColor, 0x410); // GEODE_MEMBER_CHECK(GameObject, m_baseColor, 0x410);
GEODE_MEMBER_CHECK(GameObject, m_groups, 0x458); // GEODE_MEMBER_CHECK(GameObject, m_groups, 0x458);
GEODE_MEMBER_CHECK(GameObject, m_effectManager, 0x4d8); // GEODE_MEMBER_CHECK(GameObject, m_effectManager, 0x4d8);
// EffectGameObject // // EffectGameObject
GEODE_MEMBER_CHECK(EffectGameObject, m_duration, 0x4f0); // GEODE_MEMBER_CHECK(EffectGameObject, m_duration, 0x4f0);
GEODE_MEMBER_CHECK(EffectGameObject, m_followMod, 0x530); // GEODE_MEMBER_CHECK(EffectGameObject, m_followMod, 0x530);
GEODE_MEMBER_CHECK(EffectGameObject, m_hsvValue, 0x560); // GEODE_MEMBER_CHECK(EffectGameObject, m_hsvValue, 0x560);
GEODE_MEMBER_CHECK(EffectGameObject, m_spawnDelay, 0x588); // GEODE_MEMBER_CHECK(EffectGameObject, m_spawnDelay, 0x588);
GEODE_MEMBER_CHECK(EffectGameObject, m_itemBlockAID, 0x5b0); // GEODE_MEMBER_CHECK(EffectGameObject, m_itemBlockAID, 0x5b0);
// TeleportPortalObject // // TeleportPortalObject
GEODE_MEMBER_CHECK(TeleportPortalObject, m_orangePortal, 0x4f8); // GEODE_MEMBER_CHECK(TeleportPortalObject, m_orangePortal, 0x4f8);
// StartPosObject // // StartPosObject
GEODE_MEMBER_CHECK(StartPosObject, m_levelSettings, 0x5e0); // GEODE_MEMBER_CHECK(StartPosObject, m_levelSettings, 0x5e0);
// SetupPulsePopup // // SetupPulsePopup
GEODE_MEMBER_CHECK(SetupPulsePopup, m_currentColorSpr, 0x2d0); // GEODE_MEMBER_CHECK(SetupPulsePopup, m_currentColorSpr, 0x2d0);
GEODE_MEMBER_CHECK(SetupPulsePopup, m_pulseMode, 0x38c); // GEODE_MEMBER_CHECK(SetupPulsePopup, m_pulseMode, 0x38c);
// ColorSelectPopup // // ColorSelectPopup
GEODE_MEMBER_CHECK(ColorSelectPopup, m_copyColor, 0x372); // GEODE_MEMBER_CHECK(ColorSelectPopup, m_copyColor, 0x372);
// LevelInfoLayer // // LevelInfoLayer
GEODE_MEMBER_CHECK(LevelInfoLayer, m_level, 0x1c0); // GEODE_MEMBER_CHECK(LevelInfoLayer, m_level, 0x1c0);
// LevelBrowserLayer // // LevelBrowserLayer
GEODE_MEMBER_CHECK(LevelBrowserLayer, m_rightArrow, 0x1a8); // GEODE_MEMBER_CHECK(LevelBrowserLayer, m_rightArrow, 0x1a8);
GEODE_MEMBER_CHECK(LevelBrowserLayer, m_leftArrow, 0x1b0); // GEODE_MEMBER_CHECK(LevelBrowserLayer, m_leftArrow, 0x1b0);
GEODE_MEMBER_CHECK(LevelBrowserLayer, m_searchObject, 0x1d8); // GEODE_MEMBER_CHECK(LevelBrowserLayer, m_searchObject, 0x1d8);
GEODE_MEMBER_CHECK(LevelBrowserLayer, m_itemCount, 0x208); // GEODE_MEMBER_CHECK(LevelBrowserLayer, m_itemCount, 0x208);
// LocalLevelManager // // LocalLevelManager
GEODE_MEMBER_CHECK(LocalLevelManager, m_localLevels, 0x140); // GEODE_MEMBER_CHECK(LocalLevelManager, m_localLevels, 0x140);
// GameStatsManager // // GameStatsManager
GEODE_MEMBER_CHECK(GameStatsManager, m_dailyChests, 0x170); // GEODE_MEMBER_CHECK(GameStatsManager, m_dailyChests, 0x170);
GEODE_MEMBER_CHECK(GameStatsManager, m_completedLevels, 0x200); // GEODE_MEMBER_CHECK(GameStatsManager, m_completedLevels, 0x200);
GEODE_MEMBER_CHECK(GameStatsManager, m_weeklyChest, 0x278); // GEODE_MEMBER_CHECK(GameStatsManager, m_weeklyChest, 0x278);
// DailyLevelPage // // DailyLevelPage
GEODE_MEMBER_CHECK(DailyLevelPage, m_weekly, 0x291); // GEODE_MEMBER_CHECK(DailyLevelPage, m_weekly, 0x291);
// GameLevelManager // // GameLevelManager
GEODE_MEMBER_CHECK(GameLevelManager, m_weeklyID, 0x1a8); // GEODE_MEMBER_CHECK(GameLevelManager, m_weeklyID, 0x1a8);
GEODE_MEMBER_CHECK(GameLevelManager, m_gauntletLevels, 0x1b0); // GEODE_MEMBER_CHECK(GameLevelManager, m_gauntletLevels, 0x1b0);
GEODE_MEMBER_CHECK(GameLevelManager, m_timerDict, 0x1e8); // GEODE_MEMBER_CHECK(GameLevelManager, m_timerDict, 0x1e8);
GEODE_MEMBER_CHECK(GameLevelManager, m_accountIDtoUserIDDict, 0x1f8); // GEODE_MEMBER_CHECK(GameLevelManager, m_accountIDtoUserIDDict, 0x1f8);
GEODE_MEMBER_CHECK(GameLevelManager, m_userIDtoAccountIDDict, 0x200); // GEODE_MEMBER_CHECK(GameLevelManager, m_userIDtoAccountIDDict, 0x200);
#endif #endif

View file

@ -2,64 +2,64 @@
#ifdef GEODE_IS_WINDOWS #ifdef GEODE_IS_WINDOWS
GEODE_MEMBER_CHECK(cocos2d::CCApplication, m_fVsyncInterval, 0x8c); // GEODE_MEMBER_CHECK(cocos2d::CCApplication, m_fVsyncInterval, 0x8c);
GEODE_MEMBER_CHECK(AppDelegate, m_runningScene, 0xa0); // GEODE_MEMBER_CHECK(AppDelegate, m_runningScene, 0xa0);
GEODE_MEMBER_CHECK(GameObject, m_effectPlistName, 0x278); // GEODE_MEMBER_CHECK(GameObject, m_effectPlistName, 0x278);
GEODE_MEMBER_CHECK(GameObject, m_effectManager, 0x454); // GEODE_MEMBER_CHECK(GameObject, m_effectManager, 0x454);
GEODE_MEMBER_CHECK(GameObject, m_firstPosition, 0x424); // GEODE_MEMBER_CHECK(GameObject, m_firstPosition, 0x424);
GEODE_MEMBER_CHECK(PlayerObject, m_unk484, 0x484); // GEODE_MEMBER_CHECK(PlayerObject, m_unk484, 0x484);
GEODE_MEMBER_CHECK(PlayerObject, m_ghostTrail, 0x4E4); // GEODE_MEMBER_CHECK(PlayerObject, m_ghostTrail, 0x4E4);
GEODE_MEMBER_CHECK(PlayerObject, m_waveTrail, 0x514); // GEODE_MEMBER_CHECK(PlayerObject, m_waveTrail, 0x514);
GEODE_MEMBER_CHECK(PlayerObject, m_isDart, 0x63b); // GEODE_MEMBER_CHECK(PlayerObject, m_isDart, 0x63b);
GEODE_MEMBER_CHECK(PlayerObject, m_isDashing, 0x641); // GEODE_MEMBER_CHECK(PlayerObject, m_isDashing, 0x641);
GEODE_MEMBER_CHECK(EditorUI, m_buttonBar, 0x134); // GEODE_MEMBER_CHECK(EditorUI, m_buttonBar, 0x134);
GEODE_MEMBER_CHECK(EditorUI, m_hideableUIElementArray, 0x13c); // GEODE_MEMBER_CHECK(EditorUI, m_hideableUIElementArray, 0x13c);
GEODE_MEMBER_CHECK(EditorUI, m_gridSize, 0x140); // GEODE_MEMBER_CHECK(EditorUI, m_gridSize, 0x140);
GEODE_MEMBER_CHECK(EditorUI, m_objectInfoLabel, 0x168); // GEODE_MEMBER_CHECK(EditorUI, m_objectInfoLabel, 0x168);
GEODE_MEMBER_CHECK(EditorUI, m_scaleControl, 0x17c); // GEODE_MEMBER_CHECK(EditorUI, m_scaleControl, 0x17c);
GEODE_MEMBER_CHECK(EditorUI, m_selectedObject, 0x2c4); // GEODE_MEMBER_CHECK(EditorUI, m_selectedObject, 0x2c4);
GEODE_MEMBER_CHECK(LevelEditorLayer, m_editorUI, 0x380); // GEODE_MEMBER_CHECK(LevelEditorLayer, m_editorUI, 0x380);
GEODE_MEMBER_CHECK(LevelEditorLayer, m_level, 0x3a8); // GEODE_MEMBER_CHECK(LevelEditorLayer, m_level, 0x3a8);
GEODE_MEMBER_CHECK(GameManager, m_valueKeeper, 0x110); // GEODE_MEMBER_CHECK(GameManager, m_valueKeeper, 0x110);
GEODE_MEMBER_CHECK(GameManager, m_loaded, 0x148); // GEODE_MEMBER_CHECK(GameManager, m_loaded, 0x148);
GEODE_MEMBER_CHECK(GameManager, m_playLayer, 0x164); // GEODE_MEMBER_CHECK(GameManager, m_playLayer, 0x164);
GEODE_MEMBER_CHECK(GameManager, m_levelEditorLayer, 0x168); // GEODE_MEMBER_CHECK(GameManager, m_levelEditorLayer, 0x168);
GEODE_MEMBER_CHECK(GameManager, m_playerUDID, 0x180); // GEODE_MEMBER_CHECK(GameManager, m_playerUDID, 0x180);
GEODE_MEMBER_CHECK(GameManager, m_backgroundMusicVolume, 0x1c0); // GEODE_MEMBER_CHECK(GameManager, m_backgroundMusicVolume, 0x1c0);
GEODE_MEMBER_CHECK(GameManager, m_sceneEnum, 0x1dc); // GEODE_MEMBER_CHECK(GameManager, m_sceneEnum, 0x1dc);
GEODE_MEMBER_CHECK(GameManager, m_ratePower, 0x2d0); // GEODE_MEMBER_CHECK(GameManager, m_ratePower, 0x2d0);
GEODE_MEMBER_CHECK(PlayLayer, m_startPos, 0x32c); // GEODE_MEMBER_CHECK(PlayLayer, m_startPos, 0x32c);
GEODE_MEMBER_CHECK(PlayLayer, m_screenRingObjects, 0x36c); // GEODE_MEMBER_CHECK(PlayLayer, m_screenRingObjects, 0x36c);
GEODE_MEMBER_CHECK(PlayLayer, m_bottomGround, 0x38c); // GEODE_MEMBER_CHECK(PlayLayer, m_bottomGround, 0x38c);
GEODE_MEMBER_CHECK(PlayLayer, m_topGround, 0x390); // GEODE_MEMBER_CHECK(PlayLayer, m_topGround, 0x390);
GEODE_MEMBER_CHECK(PlayLayer, m_isDead, 0x39c); // GEODE_MEMBER_CHECK(PlayLayer, m_isDead, 0x39c);
GEODE_MEMBER_CHECK(PlayLayer, m_levelLength, 0x3b4); // GEODE_MEMBER_CHECK(PlayLayer, m_levelLength, 0x3b4);
GEODE_MEMBER_CHECK(PlayLayer, m_attemptLabel, 0x3bc); // GEODE_MEMBER_CHECK(PlayLayer, m_attemptLabel, 0x3bc);
GEODE_MEMBER_CHECK(PlayLayer, m_sliderGrooveSprite, 0x404); // GEODE_MEMBER_CHECK(PlayLayer, m_sliderGrooveSprite, 0x404);
GEODE_MEMBER_CHECK(PlayLayer, m_gravitySprites, 0x424); // GEODE_MEMBER_CHECK(PlayLayer, m_gravitySprites, 0x424);
GEODE_MEMBER_CHECK(PlayLayer, m_level, 0x488); // GEODE_MEMBER_CHECK(PlayLayer, m_level, 0x488);
GEODE_MEMBER_CHECK(PlayLayer, m_isTestMode, 0x494); // GEODE_MEMBER_CHECK(PlayLayer, m_isTestMode, 0x494);
GEODE_MEMBER_CHECK(PlayLayer, m_antiCheatObject, 0x530); // GEODE_MEMBER_CHECK(PlayLayer, m_antiCheatObject, 0x530);
GEODE_MEMBER_CHECK(PlayLayer, m_disableGravityEffect, 0x536); // GEODE_MEMBER_CHECK(PlayLayer, m_disableGravityEffect, 0x536);
GEODE_MEMBER_CHECK(GJBaseGameLayer, m_boundingBox, 0x120); // GEODE_MEMBER_CHECK(GJBaseGameLayer, m_boundingBox, 0x120);
GEODE_MEMBER_CHECK(GJBaseGameLayer, m_player1, 0x224); // GEODE_MEMBER_CHECK(GJBaseGameLayer, m_player1, 0x224);
GEODE_MEMBER_CHECK(GJBaseGameLayer, m_groups, 0x274); // GEODE_MEMBER_CHECK(GJBaseGameLayer, m_groups, 0x274);
GEODE_MEMBER_CHECK(GJBaseGameLayer, m_attemptClickCount, 0x2b4); // GEODE_MEMBER_CHECK(GJBaseGameLayer, m_attemptClickCount, 0x2b4);
static_assert(sizeof(GJBaseGameLayer) == 0x2cc); // static_assert(sizeof(GJBaseGameLayer) == 0x2cc);
GEODE_MEMBER_CHECK(AudioEffectsLayer, m_unk19C, 0x19c); // GEODE_MEMBER_CHECK(AudioEffectsLayer, m_unk19C, 0x19c);
GEODE_MEMBER_CHECK(GameStatsManager, m_dailyChests, 0x114); // GEODE_MEMBER_CHECK(GameStatsManager, m_dailyChests, 0x114);
GEODE_MEMBER_CHECK(GameStatsManager, m_completedLevels, 0x144); // GEODE_MEMBER_CHECK(GameStatsManager, m_completedLevels, 0x144);
GEODE_MEMBER_CHECK(DailyLevelPage, m_weekly, 0x1ed); // GEODE_MEMBER_CHECK(DailyLevelPage, m_weekly, 0x1ed);
#endif #endif