Merge remote-tracking branch 'refs/remotes/origin/main'

This commit is contained in:
camila314 2023-10-22 13:43:22 -05:00
commit 3794f64b6b
129 changed files with 590 additions and 318 deletions

View file

@ -1,7 +1,17 @@
name: Bug Report
description: Report a bug where something is not working as expected in Geode Loader (not specific mods), which does not crash the game.
description: Report a Geode bug (not mods themselves) where something is not working as expected in Geode Loader (not mods created by others), which does not crash the game.
labels: [ "unverified", "bug" ]
body:
- type: checkboxes
attributes:
label: Geode Issue
description: |
The Geode repository is for issues of *Geode Loader*, not individual mods created by other developers.
When submitting a bug report, please make sure that the bug is *actually* related to ***Geode Loader itself*** and not to a mod or mod combination.
Failing to do this will get your issue *closed without explanation*.
options:
- label: I confirm that this bug is NOT related to a mod but directly to Geode Loader itself.
required: true
- type: dropdown
id: platform
attributes:

View file

@ -1,7 +1,17 @@
name: Crash Report
description: Report a bug that crashes the game or prevents startup caused by Geode Loader (not individual mods).
description: Report a Geode bug (not mods themselves) that crashes the game or prevents startup caused by Geode Loader (not mods created by others).
labels: [ "unverified", "crash" ]
body:
- type: checkboxes
attributes:
label: Geode Issue
description: |
The Geode repository is for issues of *Geode Loader*, not individual mods created by other developers.
When submitting a crash report, please make sure that the crash is *actually* related to ***Geode Loader itself*** and not to a mod or mod combination.
Failing to do this will get your issue *closed without explanation*.
options:
- label: I confirm that this crash is NOT related to a mod but directly to Geode Loader itself.
required: true
- type: dropdown
id: platform
attributes:

View file

@ -146,21 +146,13 @@ jobs:
files: geode-win/XInput9_1_0.dll geode-win/Geode.dll geode-win/GeodeUpdater.exe geode-win/Geode.lib geode-win/Geode.pdb
dest: geode-${{ steps.ref.outputs.hash }}-win.zip
# TODO change in 2.0.0
- name: Zip Windows Resources
uses: vimtor/action-zip@v1.1
with:
files: geode-win/resources
dest: resources-win.zip
# This is basically a hack because of line endings. Blame windows.
- name: Zip MacOS Resources
- name: Zip Resources
uses: vimtor/action-zip@v1.1
with:
files: geode-mac/resources
dest: resources-mac.zip
dest: resources.zip
- name: Update Nightly Release
- name: Update Development Release
uses: andelf/nightly-release@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@ -174,5 +166,4 @@ jobs:
./geode-installer-${{ steps.ref.outputs.hash }}-win.exe
./geode-${{ steps.ref.outputs.hash }}-mac.zip
./geode-${{ steps.ref.outputs.hash }}-win.zip
./resources-win.zip
./resources-mac.zip
./resources.zip

View file

@ -28,8 +28,7 @@ jobs:
mv dev/geode-installer-*-win.exe geode-installer-v${{ steps.ref.outputs.version }}-win.exe
mv dev/geode-*-mac.zip geode-v${{ steps.ref.outputs.version }}-mac.zip
mv dev/geode-*-win.zip geode-v${{ steps.ref.outputs.version }}-win.zip
mv dev/resources-win.zip resources-win.zip
mv dev/resources-mac.zip resources-mac.zip
mv dev/resources.zip resources.zip
- name: Create Draft Release
uses: softprops/action-gh-release@v1
@ -49,5 +48,4 @@ jobs:
./geode-installer-v${{ steps.ref.outputs.version }}-win.exe
./geode-v${{ steps.ref.outputs.version }}-mac.zip
./geode-v${{ steps.ref.outputs.version }}-win.zip
./resources-win.zip
./resources-mac.zip
./resources.zip

View file

@ -3,6 +3,9 @@ name: Test Offsets
on:
workflow_dispatch:
push:
paths:
- 'bindings/**' # only when adjusting bindings
- 'loader/test/members/**'
branches:
- '**' # every branch
- '!no-build-**' # unless marked as no-build

17
.gitignore vendored
View file

@ -45,20 +45,29 @@ build2
build-docs/
bin
# Ignore docs folders
docs/**
docs
# Ignore codegenned files
loader/src/internal/about.hpp
loader/src/internal/resources.hpp
loader/resources/mod.json
loader/resources/version
loader/resources/blanks/rename.js
loader/resources/about.md
loader/resources/changelog.md
loader/resources/support.md
# Ignore generated files
installer/mac/*.pkg
installer/windows/*.exe
# Ignore fod's include directories which are stored in this funny file
fods-catgirl-hideout.txt
# Ignore I don't even know what that is probably fod's flash testing script
test-docs.bat
# krita files too because alk is funny
# Ignore krita files too because we don't want our project files shaking my head
**/*.kra
installer/mac/*.pkg
installer/windows/*.exe

View file

@ -1,5 +1,33 @@
# Geode Changelog
## v1.3.5
* Follow redirect in web::utils functions (a942a45)
* Lots of bindings
* Make codegen symbols private visibility (696a2ca)
* Add deadstrip to macos (0d62940)
* Readd the nullptr check in InstallListPopup::createCells (499f256)
* Fix garagelayer ids on not logged in users (dd0179c)
## v1.3.4
* Implement string setting character filters (cf8fbba)
* Update bindings
## v1.3.3
* Reunify resources.zip (81de161)
## v1.3.2
* Fix alignment of some textures (8f39c38)
* Bring back unknown problems (0663569)
* Fix some Windows 7 incompatibility (2d2bdd1)
* Remove enabled from the crashlogs (5b7d318)
* Make index unzipping async (7c582f1)
* Fix mods by developer crashing when mod was toggled (a6a47bf)
* Fix nested lists in the markdown (2723588)
* Fix search paths (8f39c38, aa55ebe)
## v1.3.1
* Fix TulipHook not relocating RIP relative operands on MacOS (6cad19d)
## v1.3.0
* Completely remove runtime enabling & disabling of mods (d817749)
* Patches auto enabling can be disabled (69821f3)

View file

@ -96,7 +96,7 @@ if (PROJECT_IS_TOP_LEVEL AND NOT GEODE_BUILDING_DOCS)
set(TULIP_LINK_SOURCE ON)
endif()
set(CMAKE_WARN_DEPRECATED OFF CACHE BOOL "" FORCE)
CPMAddPackage("gh:geode-sdk/TulipHook#2e4cb5a")
CPMAddPackage("gh:geode-sdk/TulipHook#3423a29")
set(CMAKE_WARN_DEPRECATED ON CACHE BOOL "" FORCE)
# Silence warnings from dependencies
@ -185,7 +185,14 @@ target_include_directories(GeodeCodegenSources PRIVATE
${GEODE_LOADER_PATH}/include/Geode/cocos/extensions
${GEODE_LOADER_PATH}/include/Geode/fmod
)
set_target_properties(GeodeCodegenSources PROPERTIES CXX_VISIBILITY_PRESET hidden)
target_compile_features(GeodeCodegenSources PUBLIC cxx_std_20)
if (APPLE)
target_compile_options(GeodeCodegenSources PUBLIC -ffunction-sections -fdata-sections)
target_link_options(GeodeCodegenSources PUBLIC -dead_strip)
endif()
if (NOT GEODE_DISABLE_PRECOMPILED_HEADERS)
target_precompile_headers(GeodeCodegenSources INTERFACE
"${GEODE_LOADER_PATH}/include/Geode/Bindings.hpp"
@ -218,6 +225,11 @@ else()
set(GEODE_PLATFORM_BIN_PATH ${GEODE_BIN_PATH}/${PROJECT_VERSION}/${GEODE_PLATFORM_BINARY})
endif()
if (WIN32)
# This allows you to compile in debug mode
add_compile_definitions(_HAS_ITERATOR_DEBUGGING=0)
endif()
if (PROJECT_IS_TOP_LEVEL)
add_subdirectory(loader)

View file

@ -1 +1 @@
1.3.0
1.3.5

View file

@ -87,6 +87,11 @@ class cocos2d::CCCallFuncO {
static auto create(cocos2d::CCObject*, cocos2d::SEL_CallFuncO, cocos2d::CCObject*) = mac 0x455940;
}
[[link(win)]]
class cocos2d::CCCallFuncND {
static auto create(cocos2d::CCObject*, cocos2d::SEL_CallFuncND, void*) = mac 0x455470;
}
[[link(win)]]
class cocos2d::CCClippingNode {
CCClippingNode() {
@ -121,6 +126,11 @@ class cocos2d::CCClippingNode {
// void updateConnected() = win 0xc7fb0;
//}
[[link(win)]]
class cocos2d::CCConfiguration {
void gatherGPUInfo() = mac 0x2a6e10;
}
[[link(win)]]
class cocos2d::CCDelayTime {
static cocos2d::CCDelayTime* create(float) = mac 0x1f4380;
@ -174,7 +184,7 @@ class cocos2d::CCDirector {
auto convertToGL(cocos2d::CCPoint const&) = mac 0x24a210;
auto convertToUI(cocos2d::CCPoint const&) = mac 0x24a340;
auto drawScene() = mac 0x249690;
auto willSwitchToScene(cocos2d::CCScene* scene);
auto willSwitchToScene(cocos2d::CCScene* scene) = mac 0x24a520;
auto setOpenGLView(cocos2d::CCEGLView *pobOpenGLView) = mac 0x249be0;
auto updateScreenScale(cocos2d::CCSize) = mac 0x249f10;
auto setContentScaleFactor(float);
@ -291,7 +301,7 @@ class cocos2d::CCEGLViewProtocol {
auto getScaleX() const = mac 0x29e300;
auto getScaleY() const = mac 0x29e310;
virtual auto setDesignResolutionSize(float, float, ResolutionPolicy);
auto setFrameSize(float, float) = mac 0x29d960;
virtual void setFrameSize(float, float) = mac 0x29d960;
}
[[link(win)]]
@ -318,6 +328,7 @@ class cocos2d::CCFileUtils : cocos2d::TypeInfo {
class cocos2d::CCGLProgram {
auto setUniformsForBuiltins() = mac 0x232c70;
auto use() = mac 0x231d70;
bool compileShader(unsigned int* shader, unsigned int type, const char* source) = mac 0x231a30;
}
[[link(win)]]
@ -359,6 +370,7 @@ class cocos2d::CCImage {
class cocos2d::CCKeyboardDispatcher {
bool dispatchKeyboardMSG(cocos2d::enumKeyCodes, bool) = mac 0xe8190;
const char* keyToString(cocos2d::enumKeyCodes) = mac 0xe8450;
void updateModifierKeys(bool shft, bool ctrl, bool alt, bool cmd) = mac 0xe8430;
}
[[link(win)]]
@ -379,6 +391,7 @@ class cocos2d::CCKeypadHandler {
[[link(win)]]
class cocos2d::CCLabelBMFont {
CCLabelBMFont() = mac 0x347b60;
static cocos2d::CCLabelBMFont* create(char const*, char const*) = mac 0x347660;
auto limitLabelWidth(float, float, float) = mac 0x34a6e0, ios 0x21b740;
auto setFntFile(char const*) = mac 0x34a5f0;
@ -386,7 +399,7 @@ class cocos2d::CCLabelBMFont {
static auto create() = mac 0x3473f0;
virtual auto init() = mac 0x347b10, ios 0x2198e0;
bool initWithString(const char* str, const char* fnt, float width, cocos2d::CCTextAlignment align, cocos2d::CCPoint offset);
bool initWithString(const char* str, const char* fnt, float width, cocos2d::CCTextAlignment align, cocos2d::CCPoint offset) = mac 0x347710;
virtual auto setScaleX(float) = mac 0x34a5b0, ios 0x21b6e8;
virtual auto setScaleY(float) = mac 0x34a5d0, ios 0x21b714;
virtual auto setScale(float) = mac 0x34a590, ios 0x21b6bc;
@ -630,6 +643,12 @@ class cocos2d::CCNode {
virtual auto cleanup() = mac 0x123100, ios 0x15e3a4;
auto convertToNodeSpace(cocos2d::CCPoint const&) = mac 0x124750, ios 0x15f55c;
auto convertToWorldSpace(cocos2d::CCPoint const&) = mac 0x124790;
cocos2d::CCPoint convertToNodeSpaceAR(cocos2d::CCPoint const& worldPoint) {
return convertToNodeSpace(worldPoint) - getAnchorPointInPoints();
}
cocos2d::CCPoint convertToWorldSpaceAR(cocos2d::CCPoint const& nodePoint) {
return convertToWorldSpace(nodePoint + getAnchorPointInPoints());
}
static cocos2d::CCNode* create() = mac 0x1230a0;
virtual auto draw() = mac 0x123840, ios 0x15e974;
auto getActionByTag(int) = mac 0x123ee0;
@ -891,6 +910,7 @@ class cocos2d::CCSet {
class cocos2d::CCShaderCache {
static auto sharedShaderCache() = mac 0xe6d10;
auto programForKey(const char*) = mac 0xe7d40;
void reloadDefaultShaders();
}
[[link(win)]]
@ -1127,6 +1147,7 @@ class cocos2d::CCTouchHandler {
[[link(win)]]
class cocos2d::CCTransitionFade {
static cocos2d::CCTransitionFade* create(float, cocos2d::CCScene*) = mac 0x8ea30, ios 0x12c244;
virtual bool initWithDuration(float t, cocos2d::CCScene* scene, cocos2d::ccColor3B const& color) = mac 0x8e930;
}
[[link(win)]]
@ -1248,16 +1269,30 @@ class cocos2d::extension::CCScrollView {
[[link(win)]]
class cocos2d {
static auto FNTConfigLoadFile(char const*) = mac 0x344f10;
static auto ccGLUseProgram(GLuint) = mac 0x1ae540;
static auto ccGLBlendFunc(GLenum, GLenum) = mac 0x1ae560;
static auto ccDrawSolidRect(cocos2d::CCPoint, cocos2d::CCPoint, cocos2d::_ccColor4F) = mac 0xecf00;
static auto ccGLEnableVertexAttribs(unsigned int) = mac 0x1ae740;
static auto ccGLBindTexture2D(GLuint) = mac 0x1ae610;
static auto ccGLBindTexture2DN(GLuint, GLuint) = mac 0x1ae650;
static float ccpDistance(cocos2d::CCPoint const&, cocos2d::CCPoint const&) = mac 0x1aaf90;
static auto ccDrawLine(cocos2d::CCPoint const&, cocos2d::CCPoint const&) = mac 0xeccc0;
static void ccDrawPoly(cocos2d::CCPoint const*, unsigned int, bool) = mac 0xed0a0;
static void ccDrawColor4B(GLubyte, GLubyte, GLubyte, GLubyte) = mac 0xeddd0;
static void CCMessageBox(const char* msg, const char* title) = mac 0xbabc0;
}
//uintptr_t macNumberOfDraws() {
// return geode::base::get() + 0x69ae90;
//}
//void ccIncrementGLDraws(int n) {
//#ifdef GEODE_IS_MACOS
// *reinterpret_cast<int*>(macNumberOfDraws()) += n;
//#else
// CC_INCREMENT_GL_DRAWS(n);
//#endif
//}
[[link(win)]]
class DS_Dictionary {
DS_Dictionary() = mac 0xbe9a0;
@ -1277,4 +1312,4 @@ class pugi::xml_document {
~xml_document() = mac 0x393b50;
}
// clang-format on
// clang-format on

View file

@ -253,7 +253,7 @@ class ButtonSprite : cocos2d::CCSprite {
void updateBGImage(const char*) = mac 0x502d0, win 0x13af0;
static ButtonSprite* create(char const*, float) = mac 0x4fa60;
void setString(const char* txt) = mac 0x4fec0, win 0x14030;
void updateSpriteBGSize() = win 0x13c00;
void updateSpriteBGSize() = mac 0x4f5d0, win 0x13c00;
void setColor(cocos2d::ccColor3B color) = mac 0x50410, win 0x143e0;
PAD = mac 0x18, win 0x18;
@ -261,7 +261,7 @@ class ButtonSprite : cocos2d::CCSprite {
cocos2d::CCSprite* m_subSprite;
cocos2d::CCSprite* m_subBGSprite;
cocos2d::extension::CCScale9Sprite* m_BGSprite;
PAD = win 0x8;
PAD = mac 0xC, win 0x8;
cocos2d::CCPoint m_spritePosition;
}
@ -280,6 +280,10 @@ class CCAnimatedSprite : cocos2d::CCSprite {
class CCAnimateFrameCache : cocos2d::CCObject {
static CCAnimateFrameCache* sharedSpriteFrameCache() = mac 0x2e4df0, win 0x158f0;
void addSpriteFramesWithFile(const char* file) = win 0x159b0;
cocos2d::CCDictionary* m_unknown1;
cocos2d::CCDictionary* m_unknown2;
cocos2d::CCDictionary* m_unknown3;
}
class CCBlockLayer : cocos2d::CCLayerColor {
@ -905,6 +909,8 @@ class CommentUploadDelegate {
}
class ConfigureHSVWidget : cocos2d::CCNode {
bool init(int abs, cocos2d::ccHSVValue val) = win 0x4a3f0, mac 0x237310;
void updateLabels() = win 0x4adf0, mac 0x237df0;
cocos2d::CCLabelBMFont* m_hueLabel;
cocos2d::CCLabelBMFont* m_saturationLabel;
cocos2d::CCLabelBMFont* m_brightnessLabel;
@ -945,15 +951,15 @@ class CreateMenuItem : CCMenuItemSpriteExtra {
class CreatorLayer : cocos2d::CCLayer, cocos2d::CCSceneTransitionDelegate, DialogDelegate {
void onBack(cocos2d::CCObject*) = win 0x4fae0;
void onChallenge(cocos2d::CCObject*) = mac 0x142960, win 0x4f1b0;
void onLeaderboards(cocos2d::CCObject*) = win 0x4ed20;
void onLeaderboards(cocos2d::CCObject*) = mac 0x142920, win 0x4ed20;
void onMyLevels(cocos2d::CCObject*) = mac 0x142b70, win 0x4eaa0;
void onSavedLevels(cocos2d::CCObject*) = mac 0x142860, win 0x4ebe0;
void onDailyLevel(cocos2d::CCObject*) = win 0x4f170;
void onWeeklyLevel(cocos2d::CCObject*) = win 0x4f190;
void onFeaturedLevels(cocos2d::CCObject*) = win 0x4edf0;
void onFameLevels(cocos2d::CCObject*) = win 0x4ee70;
void onMapPacks(cocos2d::CCObject*) = win 0x4efb0;
void onOnlineLevels(cocos2d::CCObject*) = win 0x4ef60;
void onDailyLevel(cocos2d::CCObject*) = mac 0x142980, win 0x4f170;
void onWeeklyLevel(cocos2d::CCObject*) = mac 0x1429a0, win 0x4f190;
void onFeaturedLevels(cocos2d::CCObject*) = mac 0x142a20, win 0x4edf0;
void onFameLevels(cocos2d::CCObject*) = mac 0x142a80, win 0x4ee70;
void onMapPacks(cocos2d::CCObject*) = mac 0x1429c0, win 0x4efb0;
void onOnlineLevels(cocos2d::CCObject*) = mac 0x142ae0, win 0x4ef60;
void onGauntlets(cocos2d::CCObject*) = mac 0x142b20, win 0x4f0a0;
void onSecretVault(cocos2d::CCObject*) = win 0x4f1d0;
void onTreasureRoom(cocos2d::CCObject*) = win 0x4f540;
@ -1007,16 +1013,44 @@ class CustomSongLayer : FLAlertLayer, FLAlertLayerProtocol, TextInputDelegate, G
}
class CustomSongWidget : cocos2d::CCNode, MusicDownloadDelegate, FLAlertLayerProtocol {
bool init(SongInfoObject*, LevelSettingsObject*, bool, bool, bool, bool, bool hideBackground) = mac 0x37be20, win 0x685b0;
bool init(SongInfoObject*, LevelSettingsObject*, bool, bool, bool, bool, bool) = mac 0x37be20, win 0x685b0;
void FLAlert_Clicked(FLAlertLayer*, bool) {}
void loadSongInfoFinished(SongInfoObject*) {}
void startDownload() = win 0x69610;
void startMonitorDownload() = win 0x696b0;
void updatePlaybackBtn() = win 0x69970;
void updateSongInfo() = win 0x69bf0;
void updateSongObject(SongInfoObject* song) = win 0x69280, mac 0x37d690;
void onCancelDownload(cocos2d::CCObject*) = win 0x693b0;
void onDownload(cocos2d::CCObject*) = win 0x69540;
void onGetSongInfo(cocos2d::CCObject*) = win 0x69490;
void onMore(cocos2d::CCObject*) = win 0x68e20;
void onPlayback(cocos2d::CCObject*) = win 0x697b0;
void onSelect(cocos2d::CCObject*) = win 0x69760;
SongInfoObject* m_songInfo;
PAD = win 0x1C;
cocos2d::CCMenu* m_buttonMenu;
cocos2d::CCLabelBMFont* m_songLabel;
cocos2d::CCLabelBMFont* m_artistLabel;
cocos2d::CCLabelBMFont* m_songIDLabel;
cocos2d::CCLabelBMFont* m_errorLabel;
CCMenuItemSpriteExtra* m_downloadBtn;
PAD = win 0x30;
CCMenuItemSpriteExtra* m_cancelDownloadBtn;
CCMenuItemSpriteExtra* m_selectSongBtn;
CCMenuItemSpriteExtra* m_getSongInfoBtn;
CCMenuItemSpriteExtra* m_playMusicBtn;
CCMenuItemSpriteExtra* m_moreBtn;
cocos2d::CCSprite* m_sliderGroove;
cocos2d::CCSprite* m_sliderBar;
LevelSettingsObject* m_levelSettings;
bool m_showSelectSongBtn;
bool m_showPlayMusicBtn;
bool m_showDownloadButtons;
bool m_isNotDownloading;
bool m_hasDefaultSong;
int m_customSongID;
bool m_unkBool;
}
class CustomizeObjectLayer : FLAlertLayer, TextInputDelegate, HSVWidgetPopupDelegate, ColorSelectDelegate, ColorSetupDelegate {
@ -1027,7 +1061,7 @@ class CustomizeObjectLayer : FLAlertLayer, TextInputDelegate, HSVWidgetPopupDele
void onClose(cocos2d::CCObject*) = mac 0xdf660, win 0x57ac0;
void updateSelected(int channelID) = mac 0xe0970, win 0x57850;
bool init(GameObject* target, cocos2d::CCArray* targets) = mac 0xdd560, win 0x53e00;
void onHSV(cocos2d::CCObject* sender) = win 0x567c0;
void onHSV(cocos2d::CCObject* sender) = win 0x567c0, mac 0xdfa00;
void toggleVisible() = mac 0xe1140, win 0x56fb0;
void highlightSelected(ButtonSprite* target) = mac 0xe0aa0, win 0x579d0;
void updateCustomColorLabels() = mac 0xdff40, win 0x576d0;
@ -1036,8 +1070,8 @@ class CustomizeObjectLayer : FLAlertLayer, TextInputDelegate, HSVWidgetPopupDele
// inlined in most places
void updateChannelLabel(int channel) = mac 0xe06e0, win 0x56f50;
virtual void hsvPopupClosed(HSVWidgetPopup* popup, cocos2d::ccHSVValue value) = win 0x56990;
virtual void colorSelectClosed(cocos2d::CCNode*) = mac 0xe0c70, win 0x564a0;
virtual void textChanged(CCTextInputNode* input) = mac 0xe16a0, win 0x574d0;
virtual void colorSelectClosed(cocos2d::CCNode*) = mac 0xe0610, win 0x564a0;
virtual void textChanged(CCTextInputNode* input) = mac 0xe1470, win 0x574d0;
inline CustomizeObjectLayer() {}
~CustomizeObjectLayer() = win 0x53c30;
@ -1074,7 +1108,7 @@ class CustomizeObjectLayer : FLAlertLayer, TextInputDelegate, HSVWidgetPopupDele
}
class DailyLevelPage : FLAlertLayer, FLAlertLayerProtocol, GJDailyLevelDelegate, LevelDownloadDelegate {
static DailyLevelPage* create(bool weekly) = win 0x6a860;
static DailyLevelPage* create(bool weekly) = mac 0x108ac0, win 0x6a860;
bool init(bool weekly) = mac 0x108C90, win 0x6a900;
virtual void updateTimers(float) = mac 0x109780, win 0x6bef0;
virtual void show() = mac 0x10a4b0, win 0x3f360;
@ -1136,9 +1170,9 @@ class DrawGridLayer : cocos2d::CCLayer {
return editorLayer->m_drawGridLayer;
}
bool init(cocos2d::CCNode* grid, LevelEditorLayer* editor) = win 0x16c4d0;
void draw() = win 0x16ce90;
virtual void update(float) = win 0x16cd80;
bool init(cocos2d::CCNode* grid, LevelEditorLayer* editor) = win 0x16c4d0, mac 0x2729a0;
virtual void draw() = win 0x16ce90, mac 0xa3c40;
virtual void update(float) = win 0x16cd80, mac 0xa3b30;
void clearPlayerPoints() {
m_playerNodePoints->removeAllObjects();
m_player2NodePoints->removeAllObjects();
@ -1207,6 +1241,7 @@ class EditButtonBar : cocos2d::CCNode {
int rowCount, int columnCount
) = mac 0x350e60, win 0x6e450;
bool init(cocos2d::CCArray* buttons, int, bool, int rowCount, int columnCount, cocos2d::CCPoint pos) = win 0x6e550;
cocos2d::CCPoint m_position;
int m_unknown;
bool m_unknownBool;
@ -1273,7 +1308,7 @@ class EditorPauseLayer : CCBlockLayer, FLAlertLayerProtocol {
bool init(LevelEditorLayer*) = mac 0x13c7a0, win 0x730e0, ios 0x280cb8;
void onExitEditor(cocos2d::CCObject* sender) = mac 0x13f180, win 0x75660;
void playStep2() = mac 0x13f040, win 0x75440;
void onResume(cocos2d::CCObject* sender) = win 0x74fe0;
void onResume(cocos2d::CCObject* sender) = mac 0x13e170, win 0x74fe0;
void onSaveAndPlay(cocos2d::CCObject* sender) = mac 0x13e1b0, win 0x753d0;
void onSaveAndExit(cocos2d::CCObject* sender) = mac 0x13e230, win 0x75620;
void onSave(cocos2d::CCObject* sender) = mac 0x13e290, win 0x755a0;
@ -1304,6 +1339,8 @@ class EditorUI : cocos2d::CCLayer, FLAlertLayerProtocol, ColorSelectDelegate, GJ
void create(LevelEditorLayer*) = mac 0x8a80, win 0x76270;
cocos2d::CCArray* createCustomItems() = mac 0x1ddf0, win 0x7a370;
void onDeleteCustomItem(cocos2d::CCObject* pSender) = win 0x7a280, mac 0x29860;
void onNewCustomItem(cocos2d::CCObject* pSender) = win 0x79fd0, mac 0x24480;
void deselectAll() = mac 0x1f300, win 0x86af0;
void onDeselectAll(cocos2d::CCObject*) = mac 0x19cd0, win 0x86ac0;
void disableButton(CreateMenuItem*) = mac 0x1c0f0, win 0x78af0;
@ -1353,8 +1390,8 @@ class EditorUI : cocos2d::CCLayer, FLAlertLayerProtocol, ColorSelectDelegate, GJ
void onCreateButton(cocos2d::CCObject* sender) = mac 0x1fd70, win 0x854f0;
CCMenuItemSpriteExtra* getSpriteButton(const char* sprite, cocos2d::SEL_MenuHandler callback, cocos2d::CCMenu* menu, float scale) = mac 0xb500, win 0x78bf0;
cocos2d::CCPoint offsetForKey(int objID) = win 0x92310;
void updateDeleteMenu() = win 0x7c5d0;
void updateCreateMenu(bool updateTab) = mac 0x1e960, win 0x85530;
void updateDeleteMenu() = win 0x7c5d0, mac 0x1e960;
void updateCreateMenu(bool updateTab) = mac 0x1ba80, win 0x85530;
void toggleMode(cocos2d::CCObject* sender) = mac 0x187b0, win 0x7ad20;
void zoomIn(cocos2d::CCObject* sender) = mac 0xc0c0, win 0x877c0;
void zoomOut(cocos2d::CCObject* sender) = mac 0xc120, win 0x87830;
@ -1379,6 +1416,7 @@ class EditorUI : cocos2d::CCLayer, FLAlertLayerProtocol, ColorSelectDelegate, GJ
void editGroup(cocos2d::CCObject* sender) = win 0x8d720;
void moveObjectCall(cocos2d::CCObject* sender) = mac 0x29830, win 0x8db30;
void moveObjectCall(EditCommand command) = mac 0x29b80, win 0x8db50;
cocos2d::CCPoint* moveForCommand(cocos2d::CCPoint* point, EditCommand command) = win 0x8d890;
void transformObjectCall(cocos2d::CCObject* sender) = mac 0x29860, win 0x8def0;
void transformObjectCall(EditCommand command) = mac 0x29d90, win 0x8df10;
void transformObject(GameObject* obj, EditCommand command, bool snap) = mac 0x2b0b0, win 0x8e250;
@ -1403,6 +1441,7 @@ class EditorUI : cocos2d::CCLayer, FLAlertLayerProtocol, ColorSelectDelegate, GJ
void onSettings(cocos2d::CCObject* sender) = win 0x77fe0;
void activateRotationControl(cocos2d::CCObject* sender) = win 0x8fe70, mac 0x24480;
void activateScaleControl(cocos2d::CCObject* sender) = mac 0x24c80, win 0x889b0;
void deactivateScaleControl() = win 0x88bf0, mac 0xb290;
void dynamicGroupUpdate(bool idk) = win 0x8ad10;
void createRockOutline() = win 0x89c10;
void createRockEdges() = win 0x88ec0;
@ -1412,8 +1451,8 @@ class EditorUI : cocos2d::CCLayer, FLAlertLayerProtocol, ColorSelectDelegate, GJ
void onPasteState(cocos2d::CCObject* sender) = mac 0x19ee0, win 0x884c0;
void onGroupSticky(cocos2d::CCObject* sender) = mac 0xc180, win 0x87a80;
void onUngroupSticky(cocos2d::CCObject* sender) = mac 0xc1d0, win 0x87ac0;
void onGoToLayer(cocos2d::CCObject* sender) = win 0x886b0;
void onGoToBaseLayer(cocos2d::CCObject* sender) = win 0x88790;
void onGoToLayer(cocos2d::CCObject* sender) = mac 0x19fa0, win 0x886b0;
void onGoToBaseLayer(cocos2d::CCObject* sender) = mac 0x1a270, win 0x88790;
void onToggleGuide(cocos2d::CCObject* sender) = mac 0x19da0, win 0x79160;
void editColor(cocos2d::CCObject* sender) = mac 0x19190, win 0x8d3c0;
void alignObjects(cocos2d::CCArray* objs, bool alignY) = mac 0x2cea0, win 0x8f320;
@ -1422,6 +1461,8 @@ class EditorUI : cocos2d::CCLayer, FLAlertLayerProtocol, ColorSelectDelegate, GJ
void sliderChanged(cocos2d::CCObject* slider) = mac 0xaed0, win 0x78cc0;
void repositionObjectsToCenter(cocos2d::CCArray* objs, cocos2d::CCPoint center, bool ignoreGroupParent) = mac 0x1fcd0, win 0x88410;
virtual void draw() = win 0x8fbe0;
float valueFromXPos(float val) = win 0x78e30, mac 0x1c810;
void processSelectObjects(cocos2d::CCArray*) = win 0x86f70, mac 0x24110;
bool m_isPlayingMusic;
EditButtonBar* m_buttonBar;
@ -1629,9 +1670,12 @@ class EffectGameObject : GameObject {
PAD = mac 0x28, win 0x24;
}
class EndLevelLayer {
class EndLevelLayer : cocos2d::CCLayer {
static EndLevelLayer* create() = mac 0x2787d0, win 0x94b50;
void customSetup() = win 0x94cb0;
const char* getCoinString(void* p0) = win 0x96270;
const char* getEndText() = win 0x964A0;
void onMenu(cocos2d::CCObject* sender) = mac 0x27a500, win 0x96c10;
void onEdit(cocos2d::CCObject* sender) = mac 0x27a640, win 0x96d30;
}
@ -1705,7 +1749,7 @@ class FLAlertLayer : cocos2d::CCLayerColor {
cocos2d::ccColor3B m_color2;
ButtonSprite* m_button1;
ButtonSprite* m_button2;
cocos2d::CCLayerColor* m_scrollingLayer;
ScrollingLayer* m_scrollingLayer;
int m_joystickConnected;
bool m_containsBorder;
bool m_noAction;
@ -1717,15 +1761,17 @@ class FLAlertLayerProtocol {
class FMODAudioEngine : cocos2d::CCNode {
static FMODAudioEngine* sharedEngine() = mac 0x20ef80, win 0x239f0;
void setupAudioEngine() = win 0x23a70;
void preloadEffect(gd::string filename) = win 0x24240;
bool isBackgroundMusicPlaying() = win 0x24050;
bool isBackgroundMusicPlaying(gd::string path) = win 0x24080;
void playBackgroundMusic(gd::string path, bool fade, bool paused) = win 0x23d80;
void setBackgroundMusicTime(float time) = win 0x23fb0;
virtual void update(float) = win 0x23b20;
cocos2d::CCDictionary* m_dictionary;
std::string m_filePath;
gd::string m_filePath;
float m_backgroundMusicVolume;
float m_effectsVolume;
float m_pulse1;
@ -1756,8 +1802,8 @@ class FMODSound : cocos2d::CCNode {
class FriendRequestDelegate {}
class FriendsProfilePage : FLAlertLayer, FLAlertLayerProtocol, UploadActionDelegate, UploadPopupDelegate, UserListDelegate {
static FriendsProfilePage* create(UserListType) = win 0x9ce80;
bool init(UserListType) = win 0x9cf30;
static FriendsProfilePage* create(UserListType) = win 0x9ce80, mac 0x3a9570;
bool init(UserListType) = win 0x9cf30, mac 0x3a9770;
}
class GJAccountBackupDelegate {
@ -1786,11 +1832,16 @@ class GJAccountLoginDelegate {
class GJAccountManager : cocos2d::CCNode {
static GJAccountManager* sharedState() = mac 0x85070, win 0x107d50;
static GJAccountManager* get() {
return GJAccountManager::sharedState();
}
gd::string getGJP() = mac 0x89520, win 0x10abb0;
PAD = mac 0x8, win 0x4;
gd::string m_password;
gd::string m_username;
int m_accountID;
int m_playerID;
}
class GJAccountSyncDelegate {
@ -2282,7 +2333,7 @@ class GJGameLevel : cocos2d::CCNode {
void getLengthKey(int) = mac 0x2dbba0;
void getNormalPercent() = mac 0x2b8b20;
void levelWasAltered() = mac 0x2db530, win 0xbd550;
void savePercentage(int, bool, int, int, bool) = mac 0x2db700;
void savePercentage(int, bool, int, int, bool) = mac 0x2db700, win 0xbd5c0;
void dataLoaded(DS_Dictionary* dict) = mac 0x2dc0e0, win 0xbded0, ios 0x6fca4;
GJDifficulty getAverageDifficulty() = win 0xbd9b0;
gd::string getUnpackedLevelDescription() = mac 0x2DDB50, win 0xbf890;
@ -2421,11 +2472,15 @@ class GJGarageLayer : cocos2d::CCLayer, TextInputDelegate, FLAlertLayerProtocol,
void onDartIcon(cocos2d::CCObject* sender) = win 0x128420;
void onRobotIcon(cocos2d::CCObject* sender) = win 0x1286d0;
void onSpiderIcon(cocos2d::CCObject* sender) = win 0x128890;
void onPlayerDeathEffect(cocos2d::CCObject* sender) = win 0x128a50;
void onPlayerTrail(cocos2d::CCObject* sender) = win 0x128af0;
void onShards(cocos2d::CCObject* sender) = win 0x12ad70;
void onBack(cocos2d::CCObject* sender) = win 0x12adf0;
void onShop(cocos2d::CCObject* sender) = win 0x12ad90;
void setupColorSelect() = mac 0x1b7500;
PAD = mac 0x10, win 0x8;
void showCircleWave() = win 0x12aad0;
void showBlackCircleWave() = win 0x12a9d0;
PAD = mac 0x10, win 0x4;
CCTextInputNode* m_nameInput;
SimplePlayer* m_playerPreview;
PAD = mac 0x10, win 0x8;
@ -2536,6 +2591,7 @@ class GJRobotSprite : CCAnimatedSprite {
virtual void hideSecondary() = mac 0x34c3b0, win 0x146c90;
static GJRobotSprite* create() = mac 0x34ac00, win 0x1457a0;
void updateColor02(cocos2d::_ccColor3B) = mac 0x34bbd0, win 0x1461c0;
void updateGlowColor(cocos2d::_ccColor3B, bool) = win 0x1460C0;
void updateFrame(int) = mac 0x34bdd0, win 0x146700;
void hideGlow() = mac 0x34b860;
@ -2582,21 +2638,21 @@ class GJScaleControl : cocos2d::CCLayer {
virtual void ccTouchMoved(cocos2d::CCTouch*, cocos2d::CCEvent*) = mac 0x31e60, win 0x94840;
virtual void ccTouchEnded(cocos2d::CCTouch*, cocos2d::CCEvent*) = mac 0x31fb0, win 0x94940;
virtual void ccTouchCancelled(cocos2d::CCTouch*, cocos2d::CCEvent*) = mac 0x32060, win 0x2dea0; // shared with many others
void updateLabel(float value) = win 0x94990;
void updateLabel(float value) = win 0x94990, mac 0x31c90;
void loadValues(GameObject* obj, cocos2d::CCArray* objs) = win 0x94590, mac 0x24f40;
Slider* m_slider;
unsigned int m_touchID;
float m_value;
PAD = mac 0x8, win 0x4;
bool m_shouldSnapAt1;
cocos2d::CCLabelBMFont* m_label;
GJScaleControlDelegate* m_delegate;
}
class GJScaleControlDelegate {
virtual void scaleChanged(float) {}
virtual void scaleChangeBegin() {}
virtual void scaleChangeEnded() {}
virtual void scaleChanged(float) {}
}
class GJScoreCell : TableViewCell, FLAlertLayerProtocol {
@ -2659,7 +2715,7 @@ class GJSpiderSprite : GJRobotSprite {
class GJSpriteColor : cocos2d::CCNode {
int m_colorID;
int m_defaultColorID;
float m_unk_0F4;
float m_opacity;
cocos2d::ccHSVValue m_hsv;
bool m_usesHSV;
float unk_10C;
@ -3046,7 +3102,9 @@ class GameManager : GManager {
void loadGround(int) = mac 0x1cc8e0, win 0xc9a50;
void reloadAll(bool, bool, bool) = mac 0x1d08a0, win 0xce950;
void reloadAllStep2() = mac 0x1d0940, win 0xce9e0, ios 0x23b1f4;
void reloadAllStep5() = mac 0x1d0b00;
void reloadAllStep3() = win 0xceb10;
void reloadAllStep4() = win 0xceb80;
void reloadAllStep5() = mac 0x1d0b00, win 0xcebf0;
void reportPercentageForLevel(int, int, bool) = mac 0x1c5b00;
void setGameVariable(const char*, bool) = mac 0x1cca80, win 0xc9b50;
void setIntGameVariable(const char*, int) = mac 0x1cd0e0, win 0xca230;
@ -3257,15 +3315,16 @@ class GameObject : CCSpritePlus {
void addToTempOffset(float, float) = mac 0x335700;
void calculateOrientedBox() = mac 0x342b20, win 0xef1a0;
void canChangeCustomColor() = mac 0x342db0;
cocos2d::_ccColor3B& colorForMode(int, bool) = mac 0x343460, win 0xef8d0;
float groupOpacityMod() = win 0xebda0;
cocos2d::_ccColor3B& colorForMode(int colorMode, bool isMain) = mac 0x343460, win 0xef8d0;
cocos2d::_ccColor3B& groupColor(cocos2d::_ccColor3B const&, bool) = win 0xef9e0;
cocos2d::_ccColor3B& getActiveColorForMode(int, bool) = mac 0x343860, win 0xefb10;
void commonSetup() = mac 0x2f5570, win 0xcfac0;
void copyGroups(GameObject*) = mac 0x33ae30, win 0xeb9d0;
static GameObject* createWithFrame(const char*) = mac 0x2f5490, win 0xcf8f0;
static GameObject* createWithKey(int) = mac 0x2f4ce0, win 0xcf4f0;
void destroyObject() = mac 0x336a00;
void determineSlopeDirection() = mac 0x33a9e0, win 0xeb670;
cocos2d::_ccColor3B& getActiveColorForMode(int, bool) = mac 0x343860, win 0xefb10;
void getBallFrame(int) = mac 0x341bf0;
cocos2d::CCPoint getBoxOffset() = mac 0x3353d0, win 0xef350;
const cocos2d::_ccColor3B& getColorIndex() = mac 0x343b90;
@ -3285,7 +3344,7 @@ class GameObject : CCSpritePlus {
void groupWasDisabled() = mac 0x33b110;
void groupWasEnabled() = mac 0x33b0f0;
void hasBeenActivated() = mac 0x342a80;
void hasBeenActivatedByPlayer(GameObject*) = mac 0x342a50;
bool hasBeenActivatedByPlayer(GameObject*) = mac 0x342a50, win 0xEF110;
void hasSecondaryColor() = mac 0x342f80;
void ignoreEnter() = mac 0x3352a0;
void ignoreFade() = mac 0x335290;
@ -3296,7 +3355,15 @@ class GameObject : CCSpritePlus {
void loadGroupsFromString(gd::string str) = mac 0x33b380, win 0xebcb0;
static GameObject* objectFromString(gd::string, bool) = mac 0x33b720, win 0xebe50;
void playShineEffect() = mac 0x2fa9d0, win 0xeab20;
void quickUpdatePosition() = mac 0x335790;
//void quickUpdatePosition() = mac 0x335790;
// inlined on windows
void quickUpdatePosition() {
cocos2d::CCPoint newPos = getRealPosition();
this->setPosition(newPos);
if (m_detailSprite && !m_hasDetailColor) {
m_detailSprite->setPosition(newPos);
}
}
void removeGlow() = mac 0x2f7f70;
void resetGroupDisabled() = mac 0x2fa7e0;
void saveActiveColors() = mac 0x33d250, win 0xee3e0;
@ -3325,8 +3392,7 @@ class GameObject : CCSpritePlus {
bool canAllowMultiActivate() = mac 0x343ca0, win 0xf06b0;
void createGroupContainer(int size) = mac 0x33aca0, win 0xeb870;
bool m_unk3;
bool m_isBlueMaybe;
cocos2d::_ccColor3B m_color;
float m_unk2;
float m_unk;
float m_unk3f;
@ -3429,7 +3495,7 @@ class GameObject : CCSpritePlus {
int m_objectID;
bool m_unk364;
bool m_unk365;
bool m_unk366;
bool m_ignoreEnter;
bool m_ignoreFade;
bool m_unk368;
bool m_unk369;
@ -3483,8 +3549,8 @@ class GameObject : CCSpritePlus {
int m_unk414;
PAD = mac 0xc, win 0xc;
cocos2d::CCPoint m_firstPosition;
bool m_unk42C;
bool m_unk42D;
bool m_queuedForPositionUpdate;
bool m_shouldUpdateFirstPosition;
PAD = mac 0x6, win 0x6;
bool m_isAnimated;
PAD = mac 0x7, win 0x7;
@ -3501,7 +3567,7 @@ class GameObject : CCSpritePlus {
GJEffectManager* m_effectManager;
bool m_unk458;
bool m_unk459;
bool m_unk45A;
bool m_inOptimizedGroup;
bool m_wasForcedRotatedPositionUpdateIdk;
PAD = mac 0x8, win 0x8;
bool m_orbMultiActivate;
@ -3546,7 +3612,8 @@ class GameStatsManager : cocos2d::CCNode {
int getBaseCurrencyForLevel(GJGameLevel*) = mac 0x43470, win 0xf8530;
GJChallengeItem* getChallenge(int id) = mac 0x451f0, win 0xa2fb0;
void getSecretCoinKey(char const*) = mac 0x429f0;
int getStat(char const*) = mac 0x3d310, win 0xf3580;
int getStat(char const* type) = mac 0x3d310, win 0xf3580;
void setStat(char const* type, int amount) = win 0xf3690;
void hasPendingUserCoin(char const*) = mac 0x42730, win 0xf7c50;
void hasSecretCoin(char const*) = mac 0x40730, win 0xf7dc0;
void hasUserCoin(char const*) = mac 0x427e0, win 0xf7ae0;
@ -3558,6 +3625,7 @@ class GameStatsManager : cocos2d::CCNode {
void storeSecretCoin(char const*) = mac 0x42a10;
void storeUserCoin(char const*) = mac 0x42890;
bool isItemUnlocked(UnlockType type, int id) = win 0xfbb80;
void checkAchievement(char const* type) = win 0xf37c0;
PAD = mac 0x50, win 0x28;
cocos2d::CCDictionary* m_dailyChests;
@ -3594,7 +3662,7 @@ class GameToolbox {
static cocos2d::CCDictionary* stringSetupToDict(gd::string text, char const* delimeter) = mac 0x28d700, win 0x272a0;
static CCMenuItemToggler* createToggleButton(gd::string text, cocos2d::SEL_MenuHandler onToggled, bool isToggled, cocos2d::CCMenu* toggleMenu, cocos2d::CCPoint position, cocos2d::CCNode* callbackTarget, cocos2d::CCNode* labelParent, cocos2d::CCArray* toggleArray) = mac 0x28bc90, win 0x25fe0;
static CCMenuItemToggler* createToggleButton(gd::string text, cocos2d::SEL_MenuHandler onToggled, bool isToggled, cocos2d::CCMenu* toggleMenu, cocos2d::CCPoint position, cocos2d::CCNode* callbackTarget, cocos2d::CCNode* labelParent, float checkboxScale, float labelSize, float maxWidth, cocos2d::CCPoint labelOffset, const char* unknown, bool anchorHorizontally, int toggleTag, cocos2d::CCArray* toggleArray) = mac 0x28bdd0, win 0x25fe0;
static cocos2d::ccColor3B transformColor(cocos2d::ccColor3B const& src, cocos2d::ccHSVValue hsv) = win 0x26a60;
static cocos2d::ccColor3B transformColor(cocos2d::ccColor3B const& src, cocos2d::ccHSVValue hsv) = win 0x26a60, mac 0x28c950;
static void alignItemsHorisontally(cocos2d::CCArray* array, float pad, cocos2d::CCPoint start, bool idk) = win 0x25b20;
static gd::map<gd::string, gd::string> stringSetupToMap(gd::string, char const*) = mac 0x28d4c0;
static cocos2d::ccColor3B multipliedColorValue(cocos2d::ccColor3B color1, cocos2d::ccColor3B color2, float factor) = win 0x26CE0;
@ -3633,7 +3701,7 @@ class GauntletSelectLayer {
class GhostTrailEffect {}
class HSVWidgetPopup : FLAlertLayer {
bool init(cocos2d::_ccHSVValue value, HSVWidgetPopupDelegate* delegate, gd::string title);
bool init(cocos2d::_ccHSVValue value, HSVWidgetPopupDelegate* delegate, gd::string title) = win 0x49f10, mac 0x236d30;
void onClose(cocos2d::CCObject* sender) = win 0x4a280;
ConfigureHSVWidget* m_configureWidget;
@ -3656,7 +3724,7 @@ class HardStreak : cocos2d::CCDrawNode {
void reset() = mac 0x5c930;
void resumeStroke() = mac 0x5c210;
void stopStroke() = mac 0x5c8f0, win 0x14e460;
void updateStroke(float) = mac 0x5c240, win 0x14e530;
callback void updateStroke(float) = mac 0x5c240, win 0x14e530;
cocos2d::CCArray* m_pointsArr;
cocos2d::CCPoint m_currentPoint;
@ -3752,6 +3820,7 @@ class LevelBrowserLayer : cocos2d::CCLayer, LevelManagerDelegate, FLAlertLayerPr
void updateLevelsLabel() = mac 0x255450, win 0x15c350;
void onRefresh(cocos2d::CCObject* sender) = mac 0x253090;
void onInfo(cocos2d::CCObject* sender) = mac 0x253170, win 0x15cb00;
void onNew(cocos2d::CCObject* sender) = win 0x15cbf0, mac 0x252ac0;
static LevelBrowserLayer* create(GJSearchObject* search) = mac 0x251210, win 0x159fa0, ios 0x2d0a00;
PAD = win 0x4, mac 0x8;
@ -3826,7 +3895,7 @@ class LevelEditorLayer : GJBaseGameLayer, LevelSettingsDelegate {
virtual void calculateColorValues(EffectGameObject*, EffectGameObject*, int, float, ColorActionSprite*, GJEffectManager*) = mac 0x9c590, win 0x166f90;
virtual void addToGroup(GameObject*, int, bool) = mac 0x9dab0, win 0x167310;
virtual void removeFromGroup(GameObject*, int) = mac 0x9db60, win 0x1673a0;
virtual void timeForXPos(float) = mac 0x9c7d0, win 0x167210;
virtual float timeForXPos(float) = mac 0x9c7d0, win 0x167210;
virtual void xPosForTime(float) = mac 0x9c800, win 0x167250;
virtual void levelSettingsUpdated() = mac 0x93f30, win 0x1606c0;
static LevelEditorLayer* create(GJGameLevel* level) = mac 0x90fb0, win 0x15ed60, ios 0x261628;
@ -3845,7 +3914,7 @@ class LevelEditorLayer : GJBaseGameLayer, LevelSettingsDelegate {
cocos2d::CCArray* createObjectsFromString(gd::string, bool) = mac 0x94730, win 0x160980;
void getLastObjectX() = mac 0x9c860, win 0x167290;
gd::string getLevelString() = mac 0x97790, win 0x162480;
void getNextColorChannel() = mac 0x9a610;
int getNextColorChannel() = mac 0x9a610, win 0x164e10;
void getNextFreeBlockID(cocos2d::CCArray*) = mac 0x9a4e0;
int getNextFreeGroupID(cocos2d::CCArray*) = mac 0x9a1b0, win 0x164ae0;
void getNextFreeItemID(cocos2d::CCArray*) = mac 0x9a390;
@ -4011,16 +4080,24 @@ class LevelEditorLayer : GJBaseGameLayer, LevelSettingsDelegate {
class LevelInfoLayer : cocos2d::CCLayer, LevelDownloadDelegate, LevelUpdateDelegate, RateLevelDelegate, LikeItemDelegate, FLAlertLayerProtocol, LevelDeleteDelegate, NumberInputDelegate, SetIDPopupDelegate {
static LevelInfoLayer* create(GJGameLevel* level) = mac 0x15f290, win 0x175d50;
bool init(GJGameLevel* level) = win 0x175df0, mac 0x15f520;
void onGarage(cocos2d::CCObject* sender) = win 0x177c10;
void onGarage(cocos2d::CCObject* sender) = win 0x177c10, mac 0x163ac0;
void onViewProfile(cocos2d::CCObject* sender) = mac 0x1617d0, win 0x17ac90;
void onLevelInfo(cocos2d::CCObject* sender) = mac 0x163880, win 0x17acf0;
void setupProgressBars() = win 0x177fc0;
void setupProgressBars() = win 0x177fc0, mac 0x1627e0;
void setupLevelInfo() = mac 0x161C80, win 0x178680;
void downloadLevel() = win 0x177d90;
void downloadLevel() = win 0x177d90, mac 0x161b90;
void onPlay(cocos2d::CCObject* sender) = mac 0x161840, win 0x179730;
void onBack(cocos2d::CCObject* sender) = mac 0x163810, win 0x17C110;
void onDelete(cocos2d::CCObject* sender) = mac 0x162f30, win 0x17A2B0;
virtual void levelDownloadFinished(GJGameLevel*) = mac 0x164C00, win 0x1790C0;
virtual void levelUpdateFinished(GJGameLevel*, UpdateResponse) = mac 0x164E60, win 0x1792B0;
virtual void keyBackClicked() = win 0x17C1D0;
void showUpdateAlert(UpdateResponse) = mac 0x164ED0, win 0x179300;
void updateLabelValues() = mac 0x164090, win 0x17b170;
void onRate(cocos2d::CCObject* sender) = win 0x17a530;
PAD = win 0x4, mac 0x8;
cocos2d::CCMenu* m_playBtnMenu;
@ -4030,13 +4107,13 @@ class LevelInfoLayer : cocos2d::CCLayer, LevelDownloadDelegate, LevelUpdateDeleg
CCMenuItemSpriteExtra* m_starRateBtn;
CCMenuItemSpriteExtra* m_demonRateBtn;
PAD = win 0x4, mac 0x8;
CCMenuItemToggler* m_toggler;
cocos2d::CCLabelBMFont* m_label0;
cocos2d::CCLabelBMFont* m_label1;
cocos2d::CCLabelBMFont* m_label2;
cocos2d::CCLabelBMFont* m_label3;
cocos2d::CCLabelBMFont* m_label4;
cocos2d::CCLabelBMFont* m_label5;
CCMenuItemToggler* m_ldmToggler;
cocos2d::CCLabelBMFont* m_ldmLabel;
cocos2d::CCLabelBMFont* m_lengthLabel;
cocos2d::CCLabelBMFont* m_downloadsLabel;
cocos2d::CCLabelBMFont* m_likesLabel;
cocos2d::CCLabelBMFont* m_orbsLabel;
cocos2d::CCLabelBMFont* m_folderLabel;
CCMenuItemSpriteExtra* m_cloneBtn;
PAD = win 0x4, mac 0x8;
}
@ -4079,6 +4156,7 @@ class LevelSearchLayer : cocos2d::CCLayer {
class LevelSelectLayer : cocos2d::CCLayer {
static LevelSelectLayer* create(int lvl) = win 0x185500;
bool init(int lvl) = win 0x1855a0, mac 0x2384e0;
PAD = win 0x10;
BoomScrollLayer* m_scrollLayer;
@ -4088,6 +4166,15 @@ class LevelSettingsDelegate {
virtual void levelSettingsUpdated() {}
}
class SecretLayer2 : cocos2d::CCLayer, TextInputDelegate, FLAlertLayerProtocol, DialogDelegate {
static SecretLayer2* create() = win 0x21FD70;
bool init() = win 0x21FE10, mac 0x25fe70;
bool onSubmit(cocos2d::CCObject*) = win 0x221ac0, mac 0x2611a0;
void updateSearchLabel(const char* text) = win 0x222FC0, mac 0x260e10;
void showCompletedLevel() = win 0x220C10;
}
class SecretLayer4 : cocos2d::CCLayer, TextInputDelegate, FLAlertLayerProtocol, DialogDelegate {
static SecretLayer4* create() = mac 0x1ed500;
static cocos2d::CCScene* scene() = mac 0x1ed4c0;
@ -4195,6 +4282,7 @@ class LikeItemLayer : FLAlertLayer {
class ListButtonBar : cocos2d::CCNode {
BoomScrollLayer* m_scrollLayer;
void switchedPage(int page) = win 0x29c50;
}
class ListButtonBarDelegate {}
@ -4257,7 +4345,6 @@ class LocalLevelManager : GManager {
cocos2d::CCDictionary* getAllLevelsInDict() = mac 0x35e3d0, win 0x18d7c0;
PAD = mac 0x4, win 0x1C;
cocos2d::CCDictionary* m_loadData;
cocos2d::CCDictionary* m_levelData;
cocos2d::CCArray* m_localLevels;
@ -4310,7 +4397,7 @@ class MenuLayer : cocos2d::CCLayer, FLAlertLayerProtocol, GooglePlayDelegate {
class MessageListDelegate {}
class MoreSearchLayer : FLAlertLayer {
static MoreSearchLayer* create() = mac 0x38ab40, win 0x182520;
static MoreSearchLayer* create() = mac 0x388180, win 0x182520;
virtual bool init() = mac 0x3896b0, win 0x1825c0;
void onClose(cocos2d::CCObject*) = mac 0x38aa40, win 0x1848f0;
}
@ -4319,7 +4406,7 @@ class MoreOptionsLayer : FLAlertLayer, TextInputDelegate, GooglePlayDelegate {
static MoreOptionsLayer* create() = win 0x1de850;
virtual bool init() = mac 0x43f470, win 0x1DE8F0;
void addToggle(const char* name, const char* key, const char* info) = mac 0x440430, win 0x1df6b0;
void onKeybindings(cocos2d::CCObject* sender) = win 0x749d0;
void onKeybindings(cocos2d::CCObject* sender) = mac 0x4410e0, win 0x749d0;
void onToggle(cocos2d::CCObject* sender) = mac 0x441370;
}
@ -4467,11 +4554,14 @@ class PauseLayer : CCBlockLayer {
void createToggleButton(gd::string caption, cocos2d::SEL_MenuHandler callback, bool on, cocos2d::CCMenu* menu, cocos2d::CCPoint pos) = mac 0x20c890, win 0x1e5570;
virtual void customSetup() = mac 0x20b300, win 0x1e4620;
void onRestart(cocos2d::CCObject* sender) = win 0x1e6040;
void onRestart(cocos2d::CCObject* sender) = mac 0x20c860, win 0x1e6040;
void onPracticeMode(cocos2d::CCObject* sender) = mac 0x20c6d0, win 0x1e5f30;
void onNormalMode(cocos2d::CCObject* sender) = mac 0x20c720, win 0x1e5f60;
void onResume(cocos2d::CCObject* sender) = mac 0x20c760, win 0x1e5fa0;
virtual void keyDown(cocos2d::enumKeyCodes) = mac 0x20cc80, win 0x1E6580;
void musicSliderChanged(cocos2d::CCObject* sender) = win 0x1e5ce0;
void sfxSliderChanged(cocos2d::CCObject* sender) = win 0x1ddfa0;
void musicSliderChanged(cocos2d::CCObject* sender) = win 0x1e5ce0, mac 0x20cb00;
void sfxSliderChanged(cocos2d::CCObject* sender) = win 0x1ddfa0, mac 0x20cb40;
bool m_unknown;
bool m_unknown2;
@ -4624,7 +4714,7 @@ class PlayLayer : GJBaseGameLayer, CCCircleWaveDelegate, CurrencyRewardDelegate,
void spawnFirework() = mac 0x74200;
void spawnParticle(char const*, int, cocos2d::tCCPositionType, cocos2d::CCPoint) = mac 0x76330;
void spawnPlayer2() = mac 0x7d170, win 0x2089e0;
void startGame() = mac 0x726b0;
void startGame() = mac 0x726b0, win 0x1fd390;
void startMusic() = mac 0x72910, win 0x20C8F0;
void startRecording() = mac 0x7fec0;
void startRecordingDelayed() = mac 0x7fed0;
@ -4635,12 +4725,13 @@ class PlayLayer : GJBaseGameLayer, CCCircleWaveDelegate, CurrencyRewardDelegate,
void switchToRobotMode(PlayerObject*, GameObject*, bool) = mac 0x7bc80;
void switchToRollMode(PlayerObject*, GameObject*, bool) = mac 0x7bbe0;
void switchToSpiderMode(PlayerObject*, GameObject*, bool) = mac 0x7bd20;
void timeForXPos(float) = mac 0x7d120, win 0x2087d0;
void timeForXPos2(float, bool) = mac 0x293eb0, win 0x1fd3d0;
callback float timeForXPos(float) = mac 0x7d120, win 0x2087d0;
float timeForXPos2(float, bool) = mac 0x293eb0, win 0x208800;
callback float xPosForTime(float) = mac 0x7d140, win 0x208840;
void toggleBGEffectVisibility(bool) = mac 0x7fe80;
void toggleDualMode(GameObject*, bool, PlayerObject*, bool) = mac 0x7bf90, win 0x208880;
void toggleFlipped(bool, bool) = mac 0x7bdc0, win 0x20ab20;
void toggleGhostEffect(int) = mac 0x7fe40;
void toggleGhostEffect(int) = mac 0x7fe40, win 0x1f8930;
void toggleGlitter(bool) = mac 0x70e00, win 0x20a0d0;
void togglePracticeMode(bool) = mac 0x7f9e0, win 0x20d0d0;
void toggleProgressbar() = mac 0x6eeb0, win 0x208160;
@ -4665,7 +4756,6 @@ class PlayLayer : GJBaseGameLayer, CCCircleWaveDelegate, CurrencyRewardDelegate,
virtual void visit() = mac 0x75ef0, win 0x200020;
void visitWithColorFlash() = mac 0x761f0, win 0x200190;
void willSwitchToMode(int, PlayerObject*) = mac 0x7b9e0;
void xPosForTime(float) = mac 0x7d140, win 0x208840;
~PlayLayer() = mac 0x6b090, win 0x1fafc0;
float unused4c8;
@ -4696,7 +4786,7 @@ class PlayLayer : GJBaseGameLayer, CCCircleWaveDelegate, CurrencyRewardDelegate,
EndPortalObject* m_endPortal;
cocos2d::CCArray* m_checkpoints;
cocos2d::CCArray* m_speedObjects;
cocos2d::CCArray* unk340;
cocos2d::CCArray* m_allSpeedObjects;
cocos2d::CCArray* unk344;
cocos2d::CCSprite* unk348;
float m_backgroundRepeat;
@ -4870,7 +4960,7 @@ class PlayerObject : GameObject, AnimatedSpriteDelegate {
void boostPlayer(float) = mac 0x21d6b0, win 0x1f8f30;
void bumpPlayer(float, int) = mac 0x22d890;
void buttonDown(PlayerButton) = mac 0x22b7e0;
void checkSnapJumpToObject(GameObject*) = mac 0x2217f0;
void checkSnapJumpToObject(GameObject*) = mac 0x2217f0, win 0x1ece70;
bool collidedWithObject(float fl, GameObject* obj) {
auto rect = obj->getObjectRect();
return collidedWithObject(fl, obj, rect);
@ -5015,7 +5105,7 @@ class PlayerObject : GameObject, AnimatedSpriteDelegate {
PAD = mac 0x14, win 0x14;
bool m_unk4D4;
cocos2d::CCArray* m_particleSystems;
bool m_unk4DC;
bool m_hasGlow;
bool m_isHidden;
int m_hasGhostTrail;
GhostTrailEffect* m_ghostTrail;
@ -5177,8 +5267,15 @@ class RateStarsLayer : FLAlertLayer, UploadPopupDelegate, UploadActionDelegate {
UploadActionPopup* m_rateAction;
RateLevelDelegate* m_rateDelegate;
static RateStarsLayer* create(int levelID, bool isModSuggest) = mac 0x135e50;
bool init(int levelID, bool isModSuggest) = mac 0x136050;
static RateStarsLayer* create(int levelID, bool isModSuggest) = mac 0x135e50, win 0x2155f0;
bool init(int levelID, bool isModSuggest) = mac 0x136050, win 0x2156a0;
}
class RateLevelLayer : FLAlertLayer {
RateLevelLayer() = win 0x214a80;
virtual ~RateLevelLayer() = win 0x214b40;
bool init(int levelID) = win 0x214cb0;
}
class RetryLevelLayer {
@ -5206,6 +5303,11 @@ class RingObject : EffectGameObject {
class ScrollingLayer : cocos2d::CCLayerColor {
static ScrollingLayer* create(cocos2d::CCSize, cocos2d::CCPoint, float) = mac 0x41a900, win 0x2d8e0;
PAD = win 0x28;
float m_layerHeight;
PAD = win 0x4;
cocos2d::CCLayer* m_scrollLayer;
cocos2d::CCNode* m_parent;
}
class SelectArtLayer {
@ -5239,6 +5341,9 @@ class SetGroupIDLayer : FLAlertLayer, TextInputDelegate {
void updateZOrder() = win 0x22e3d0;
void onAddGroup(cocos2d::CCObject* sender) = mac 0x1967d0, win 0x22de20;
void onClose(cocos2d::CCObject* sender) = mac 0x1966a0, win 0x22e830;
void onEditorLayer(cocos2d::CCObject* sender) = win 0x22d690, mac 0x196800;
void onEditorLayer2(cocos2d::CCObject* sender) = win 0x22d710, mac 0x196a40;
void onZOrder(cocos2d::CCObject* sender) = win 0x22de80, mac 0x196920;
GameObject* m_targetObject;
cocos2d::CCArray* m_targetObjects;
@ -5349,12 +5454,14 @@ class SetupOpacityPopup : FLAlertLayer {
class SetupPickupTriggerPopup : FLAlertLayer {
static SetupPickupTriggerPopup* create(EffectGameObject*, cocos2d::CCArray*) = mac 0x35e70, win 0x23d4a0;
bool init(EffectGameObject* obj, cocos2d::CCArray* arr) = win 0x23d550, mac 0x36070;
void onItemIDArrow(cocos2d::CCObject*) = mac 0x37100;
void onNextItemID(cocos2d::CCObject*) = mac 0x37260;
void textChanged(CCTextInputNode*) = mac 0x37ca0;
void updateItemID() = mac 0x37ab0, win 0x23e4f0;
PAD = win 0xc;
PAD = win 0xc, mac 0x18;
CCTextInputNode* m_itemIDInput;
CCTextInputNode* m_countInput;
}
@ -5376,6 +5483,11 @@ class SetupPulsePopup : FLAlertLayer, cocos2d::extension::ColorPickerDelegate, T
int m_pulseMode; // 0x38c on mac
}
class SetupRotatePopup : FLAlertLayer {
void onClose(cocos2d::CCObject*) = win 0x244150;
virtual void keyBackClicked() = win 0x2441a0;
}
class SetupShakePopup : FLAlertLayer {
static SetupShakePopup* create(EffectGameObject*, cocos2d::CCArray*) = mac 0x3adc00;
}
@ -5431,9 +5543,9 @@ class SimplePlayer : cocos2d::CCSprite {
static SimplePlayer* create(int iconID) = mac 0x1b6140, win 0x12bd80;
void updatePlayerFrame(int iconID, IconType iconType) = mac 0x1b62f0, win 0x12c650;
void updateColors() = mac 0x1ba1f0, win 0x12c440, ios 0x224f2c;
void setFrames(const char* firstLayer, const char* secondLayer, const char* birdDome, const char* outlineSprite, const char* detailSprite) = win 0x12c9e0;
void setFrames(const char* firstLayer, const char* secondLayer, const char* birdDome, const char* outlineSprite, const char* detailSprite) = mac 0x1bca10, win 0x12c9e0;
virtual void setColor(const cocos2d::ccColor3B& color) = mac 0x1bc9b0, win 0x12c410;
virtual void setOpacity(unsigned char opacity) = win 0x12cb90;
virtual void setOpacity(unsigned char opacity) = mac 0x135370, win 0x12cb90;
cocos2d::CCSprite* m_firstLayer;
cocos2d::CCSprite* m_secondLayer;
@ -5464,7 +5576,7 @@ class Slider : cocos2d::CCLayer {
SliderTouchLogic* m_touchLogic;
cocos2d::CCSprite* m_sliderBar;
cocos2d::CCSprite* m_groove;
float m_unknown;
float m_width;
float m_height;
}
@ -5537,10 +5649,11 @@ class SpawnTriggerAction : cocos2d::CCNode {
}
class SpeedObject : cocos2d::CCNode {
float m_unknown;
float m_somethingToCompare;
float m_idk3;
float m_idk4;
Speed m_speed;
float m_xPos;
GameObject* m_object;
static SpeedObject* create(GameObject* object, Speed speed, float x) = win 0x20de70;
}
class SpritePartDelegate {}
@ -5740,7 +5853,7 @@ class UILayer : cocos2d::CCLayerColor {
virtual void keyDown(cocos2d::enumKeyCodes key) = mac 0x280470, win 0x25f890;
virtual void keyUp(cocos2d::enumKeyCodes key) = mac 0x280600, win 0x25fa10;
UILayer() = win 0x25f230;
~UILayer() = win 0x25fef0;
~UILayer() = win 0x25fef0, mac 0x280c90;
PAD = mac 0x16, win 0x8, android 0x8;
cocos2d::CCMenu* m_checkPointMenu;

View file

@ -1,7 +1,7 @@
set(GEODE_CLI_MINIMUM_VERSION 1.0.5)
# Find Geode CLI
if (NOT DEFINED GEODE_CLI)
if (NOT DEFINED GEODE_CLI OR GEODE_CLI STREQUAL "GEODE_CLI-NOTFOUND")
find_program(GEODE_CLI NAMES geode.exe geode-cli.exe geode geode-cli PATHS ${CLI_PATH})
endif()
@ -59,7 +59,7 @@ function(setup_geode_mod proname)
if(GEODE_CLI STREQUAL "GEODE_CLI-NOTFOUND")
message(FATAL_ERROR
"setup_geode_mod called, but Geode CLI was not found - "
"Please install CLI: https://docs.geode-sdk.org/info/installcli/"
"Please install CLI: https://docs.geode-sdk.org/"
)
return()
endif()
@ -307,6 +307,8 @@ function(package_geode_resources_now proname src dest header_dest)
if (NOT FILE_NAME STREQUAL ".geode_cache" AND NOT FILE_SHOULD_HASH EQUAL -1)
file(SHA256 ${file} COMPUTED_HASH)
file(SIZE ${file} FILE_SIZE)
message(STATUS "Hashed ${file} to ${COMPUTED_HASH} (${FILE_SIZE} bytes)")
list(APPEND HEADER_FILE "\t{ \"${FILE_NAME}\", \"${COMPUTED_HASH}\" },\n")
# list(APPEND HEADER_FILE "\t\"${FILE_NAME}\",\n")

View file

@ -46,6 +46,7 @@ elseif (GEODE_TARGET_PLATFORM STREQUAL "MacOS")
target_link_libraries(${PROJECT_NAME} INTERFACE
"-framework Cocoa"
"-framework OpenGL"
${CURL_LIBRARIES}
${GEODE_LOADER_PATH}/include/link/libfmod.dylib
)

View file

@ -185,7 +185,8 @@ std::string generateBindingHeader(Root const& root, ghc::filesystem::path const&
single_output += fmt::format(::format_strings::class_start,
fmt::arg("class_name", cls.name),
fmt::arg("base_classes", supers)
fmt::arg("base_classes", supers)//,
// fmt::arg("hidden", str_if("GEODE_HIDDEN ", (codegen::platform & (Platform::Mac | Platform::iOS)) != Platform::None))
);
// what.

View file

@ -27,10 +27,13 @@ execute_process(
)
# Package info file for internal representation
set(GEODE_RESOURCES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/resources)
configure_file(resources/mod.json.in ${CMAKE_CURRENT_SOURCE_DIR}/resources/mod.json)
file(READ resources/mod.json LOADER_MOD_JSON)
configure_file(${GEODE_ROOT_PATH}/VERSION ${CMAKE_CURRENT_SOURCE_DIR}/resources/version COPYONLY)
configure_file(${GEODE_ROOT_PATH}/CHANGELOG.md ${CMAKE_CURRENT_SOURCE_DIR}/resources/changelog.md COPYONLY)
configure_file(${GEODE_ROOT_PATH}/VERSION ${GEODE_RESOURCES_PATH}/version COPYONLY)
configure_file(${GEODE_RESOURCES_PATH}/about.md.in ${GEODE_RESOURCES_PATH}/about.md NEWLINE_STYLE LF)
configure_file(${GEODE_ROOT_PATH}/CHANGELOG.md ${GEODE_RESOURCES_PATH}/changelog.md NEWLINE_STYLE LF)
configure_file(${GEODE_RESOURCES_PATH}/support.md.in ${GEODE_RESOURCES_PATH}/support.md NEWLINE_STYLE LF)
configure_file(src/internal/about.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/src/internal/about.hpp)
# Source files

View file

@ -405,8 +405,11 @@ namespace gd {
}
~vector() {
for (auto i = m_start; i != m_finish; ++i) {
delete i;
if (m_start) {
for (auto& x : *this) {
x.~T();
}
delete m_start;
}
}

View file

@ -90,6 +90,7 @@ protected:
bool m_bIsSendCleanupToScene;
public:
GEODE_CUSTOM_CONSTRUCTOR_COCOS(CCTransitionScene, CCScene)
/**
* @js ctor
*/
@ -147,6 +148,7 @@ public:
* @js ctor
*/
CCTransitionSceneOriented();
GEODE_CUSTOM_CONSTRUCTOR_COCOS(CCTransitionSceneOriented, CCTransitionScene)
/**
* @js NA
* @lua NA
@ -171,6 +173,7 @@ public:
* @js ctor
*/
CCTransitionRotoZoom();
GEODE_CUSTOM_CONSTRUCTOR_COCOS(CCTransitionRotoZoom, CCTransitionScene)
/**
* @js NA
* @lua NA
@ -623,6 +626,7 @@ public:
* @js ctor
*/
CCTransitionFade();
GEODE_CUSTOM_CONSTRUCTOR_COCOS(CCTransitionFade, CCTransitionScene)
/**
* @js NA
* @lua NA

View file

@ -3,12 +3,8 @@
#include <android/log.h>
#ifdef GEODE_EXPORTING
#define CC_DLL __attribute__((visibility("default")))
#else
#define CC_DLL
#endif
#define ACTUAL_CC_DLL CC_DLL
#define CC_DLL
#define ACTUAL_CC_DLL
#define CC_NO_MESSAGE_PSEUDOASSERT(cond) \
if (!(cond)) { \

View file

@ -3,12 +3,8 @@
#include <assert.h>
#ifdef GEODE_EXPORTING
#define CC_DLL __attribute__((visibility("default")))
#else
#define CC_DLL
#endif
#define ACTUAL_CC_DLL CC_DLL
#define CC_DLL //__attribute__((visibility("hidden")))
#define ACTUAL_CC_DLL
#define CC_ASSERT(cond) assert(cond)

View file

@ -3,12 +3,8 @@
#include <assert.h>
#ifdef GEODE_EXPORTING
#define CC_DLL __attribute__((visibility("default")))
#else
#define CC_DLL
#endif
#define ACTUAL_CC_DLL CC_DLL
#define CC_DLL //__attribute__((visibility("hidden")))
#define ACTUAL_CC_DLL
#if CC_DISABLE_ASSERT > 0

View file

@ -271,7 +271,7 @@ public:
*/
inline const GLuint getProgram() { return m_uProgram; }
protected:
private:
bool updateUniformLocation(GLint location, GLvoid* data, unsigned int bytes);
const char* description();
bool compileShader(GLuint * shader, GLenum type, const GLchar* source);

View file

@ -31,7 +31,7 @@ FMOD_RESULT F_API FMOD_File_GetDiskBusy (int *busy);
/*
FMOD System factory functions. Use this to create an FMOD System Instance. below you will see FMOD_System_Init/Close to get started.
*/
FMOD_RESULT F_API FMOD_System_Create (FMOD_SYSTEM **system);
FMOD_RESULT /*F_API*/ FMOD_System_Create (FMOD_SYSTEM **system);
FMOD_RESULT F_API FMOD_System_Release (FMOD_SYSTEM *system);
/*

View file

@ -85,14 +85,14 @@ namespace geode {
ghc::filesystem::path getPackagePath() const;
VersionInfo getVersion() const;
bool isEnabled() const;
bool isLoaded() const;
[[deprecated("use isEnabled instead")]] bool isLoaded() const;
bool supportsDisabling() const;
bool canDisable() const;
bool canEnable() const;
[[deprecated("always true")]] bool canDisable() const;
[[deprecated("always true")]] bool canEnable() const;
bool needsEarlyLoad() const;
[[deprecated]] bool supportsUnloading() const;
[[deprecated("use wasSuccessfullyLoaded instead")]] bool wasSuccesfullyLoaded() const;
bool wasSuccessfullyLoaded() const;
[[deprecated("always false")]] bool supportsUnloading() const;
[[deprecated("use isEnabled instead")]] bool wasSuccesfullyLoaded() const;
[[deprecated("use isEnabled instead")]] bool wasSuccessfullyLoaded() const;
[[deprecated("use getMetadata instead")]] ModInfo getModInfo() const;
ModMetadata getMetadata() const;
ghc::filesystem::path getTempDir() const;
@ -398,6 +398,6 @@ namespace geode {
};
}
inline char const* operator"" _spr(char const* str, size_t) {
GEODE_HIDDEN inline char const* operator"" _spr(char const* str, size_t) {
return geode::Mod::get()->expandSpriteName(str);
}

View file

@ -96,6 +96,11 @@ namespace geode {
*/
std::optional<std::string> match;
/**
* The CCTextInputNode's allowed character filter
*/
std::optional<std::string> filter;
static Result<StringSetting> parse(JsonMaybeObject& obj);
};

View file

@ -5,7 +5,7 @@
namespace geode::modifier {
template <uint32_t Id>
uintptr_t address();
GEODE_HIDDEN uintptr_t address();
Result<tulip::hook::HandlerMetadata> handlerMetadataForAddress(uintptr_t address);
}

View file

@ -13,6 +13,7 @@ namespace geode {
class GEODE_DLL SceneManager {
protected:
cocos2d::CCArray* m_persistedNodes;
cocos2d::CCScene* m_lastScene = nullptr;
bool setup();

View file

@ -953,7 +953,7 @@ namespace geode::cocos {
return m_arr ? m_arr->count() : 0;
}
T operator[](size_t index) {
T* operator[](size_t index) {
return static_cast<T*>(m_arr->objectAtIndex(index));
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,26 @@
#include <Geode/modify/CCTextInputNode.hpp>
using namespace geode::prelude;
// rob only uses `CCTextInputNode`s in mostly-flat hierarchies, which still
// happen to work with the weird vanilla code. this fix makes it work even in
// deep hierarchies, because the vanilla code uses `getParent` and manually
// calculates the child location in the world space based on that rather than
// using `convertToNodeSpace`.
struct CCTextInputNodeFix : Modify<CCTextInputNodeFix, CCTextInputNode> {
bool ccTouchBegan(CCTouch* touch, CCEvent* event) {
auto const touchPos = touch->getLocation();
auto const size = this->getContentSize();
auto const pos = this->convertToNodeSpace(touchPos) + m_textField->getAnchorPoint() * size;
if (pos.x < 0 || pos.x > size.width || pos.y < 0 || pos.y > size.height)
return false;
if (m_delegate && !m_delegate->allowTextInput(this))
return false;
this->onClickTrackNode(true);
return true;
}
};

View file

@ -16,7 +16,7 @@ struct CustomLoadingLayer : Modify<CustomLoadingLayer, LoadingLayer> {
void updateLoadedModsLabel() {
auto allMods = Loader::get()->getAllMods();
auto count = std::count_if(allMods.begin(), allMods.end(), [&](auto& item) {
return item->isLoaded();
return item->isEnabled();
});
auto str = fmt::format("Geode: Loaded {}/{} mods", count, allMods.size());
m_fields->m_loadedModsLabel->setCString(str.c_str());

Some files were not shown because too many files have changed in this diff Show more