├── .clang-format ├── .editorconfig ├── .git-blame-ignore-revs ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── config.yml │ ├── crash-report.yml │ ├── feature-request.yml │ └── question.yml ├── actions │ ├── build-debug-info-post │ │ └── action.yml │ ├── build-debug-info │ │ └── action.yml │ ├── setup-cache │ │ └── action.yml │ ├── setup-dump-sym │ │ └── action.yml │ └── setup-ninja │ │ └── action.yml ├── scripts │ └── parse-release.py └── workflows │ ├── build.yml │ ├── check-changelog.yml │ ├── draft.yml │ ├── update-site.yml │ └── upload-release.yml ├── .gitignore ├── CHANGELOG.md ├── CMakeLists.txt ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── EULA ├── LICENSE.txt ├── README.md ├── VERSION ├── cmake ├── CPM.cmake ├── GeodeFile.cmake ├── Platform.cmake └── PlatformDetect.cmake ├── entry.cpp ├── flash.toml ├── installer ├── linux │ └── install.sh ├── mac │ ├── Scripts │ │ └── postinstall │ └── package.sh └── windows │ ├── Graphics │ ├── banner.bmp │ ├── logo_inst.ico │ └── logo_uninst.ico │ ├── Language Files │ ├── CzechExtra.nsh │ ├── EnglishExtra.nsh │ ├── FinnishExtra.nsh │ ├── FrenchExtra.nsh │ ├── GermanExtra.nsh │ ├── GreekExtra.nsh │ ├── JapaneseExtra.nsh │ ├── KoreanExtra.nsh │ ├── PolishExtra.nsh │ ├── PortugueseBRExtra.nsh │ ├── PortugueseExtra.nsh │ ├── RussianExtra.nsh │ ├── SimpChineseExtra.nsh │ ├── SpanishExtra.nsh │ ├── SpanishInternationalExtra.nsh │ ├── SwedishExtra.nsh │ ├── TradChineseExtra.nsh │ ├── TurkishExtra.nsh │ └── UkrainianExtra.nsh │ ├── dl-vcr.ps1 │ └── installer.nsi ├── loader ├── CMakeLists.txt ├── README.md ├── hash │ ├── hash.cpp │ ├── hash.hpp │ ├── picosha2.h │ ├── sha3.cpp │ └── sha3.h ├── include │ ├── Geode │ │ ├── Bindings.hpp │ │ ├── DefaultInclude.hpp │ │ ├── Geode.hpp │ │ ├── Loader.hpp │ │ ├── Modify.hpp │ │ ├── Prelude.hpp │ │ ├── UI.hpp │ │ ├── Utils.hpp │ │ ├── c++stl │ │ │ ├── aliastl.hpp │ │ │ ├── gdstdlib.hpp │ │ │ ├── gnustl.hpp │ │ │ ├── gnustl │ │ │ │ ├── alloc_traits.h │ │ │ │ ├── allocator.h │ │ │ │ ├── array.h │ │ │ │ ├── c++allocator.hpp │ │ │ │ ├── c++config-arm64.h │ │ │ │ ├── c++config-armeabi-v7a.h │ │ │ │ ├── c++config.h │ │ │ │ ├── concept_check.h │ │ │ │ ├── cpp_type_traits.h │ │ │ │ ├── exception_defines.h │ │ │ │ ├── ext │ │ │ │ │ ├── aligned_buffer.h │ │ │ │ │ ├── alloc_traits.h │ │ │ │ │ ├── new_allocator.h │ │ │ │ │ ├── numeric_traits.h │ │ │ │ │ └── rb_tree.h │ │ │ │ ├── functexcept.h │ │ │ │ ├── functional_hash.h │ │ │ │ ├── hash_bytes.h │ │ │ │ ├── hash_specialization.hpp │ │ │ │ ├── hashtable.h │ │ │ │ ├── hashtable_policy.h │ │ │ │ ├── initializer_list.h │ │ │ │ ├── memoryfwd.h │ │ │ │ ├── move.h │ │ │ │ ├── new_allocator.h │ │ │ │ ├── predefined_ops.h │ │ │ │ ├── ptr_traits.h │ │ │ │ ├── range_access.h │ │ │ │ ├── regex_error.h │ │ │ │ ├── stl_algobase.h │ │ │ │ ├── stl_bvector.h │ │ │ │ ├── stl_construct.h │ │ │ │ ├── stl_function.h │ │ │ │ ├── stl_iterator.h │ │ │ │ ├── stl_iterator_base_funcs.h │ │ │ │ ├── stl_iterator_base_types.h │ │ │ │ ├── stl_map.h │ │ │ │ ├── stl_pair.h │ │ │ │ ├── stl_relops.h │ │ │ │ ├── stl_set.h │ │ │ │ ├── stl_tree.h │ │ │ │ ├── stl_uninitialized.h │ │ │ │ ├── stl_vector.h │ │ │ │ ├── tuple.h │ │ │ │ ├── type_traits.h │ │ │ │ ├── unordered_map.h │ │ │ │ ├── unordered_map.hpp │ │ │ │ ├── unordered_set.h │ │ │ │ ├── unordered_set.hpp │ │ │ │ ├── uses_allocator.h │ │ │ │ ├── utility.h │ │ │ │ └── vector.tcc │ │ │ └── string.hpp │ │ ├── cocos │ │ │ ├── .gitignore │ │ │ ├── CCCamera.h │ │ │ ├── CCConfiguration.h │ │ │ ├── CCDirector.h │ │ │ ├── CCScheduler.h │ │ │ ├── CMakeLists.txt │ │ │ ├── actions │ │ │ │ ├── CCAction.h │ │ │ │ ├── CCActionCamera.h │ │ │ │ ├── CCActionCatmullRom.h │ │ │ │ ├── CCActionEase.h │ │ │ │ ├── CCActionGrid.h │ │ │ │ ├── CCActionGrid3D.h │ │ │ │ ├── CCActionInstant.h │ │ │ │ ├── CCActionInterval.h │ │ │ │ ├── CCActionManager.h │ │ │ │ ├── CCActionPageTurn3D.h │ │ │ │ ├── CCActionProgressTimer.h │ │ │ │ ├── CCActionTiledGrid.h │ │ │ │ └── CCActionTween.h │ │ │ ├── base_nodes │ │ │ │ ├── CCAtlasNode.h │ │ │ │ ├── CCGLBufferedNode.h │ │ │ │ └── CCNode.h │ │ │ ├── ccFPSImages.h │ │ │ ├── cocoa │ │ │ │ ├── CCAffineTransform.h │ │ │ │ ├── CCArray.h │ │ │ │ ├── CCAutoreleasePool.h │ │ │ │ ├── CCBool.h │ │ │ │ ├── CCDataVisitor.h │ │ │ │ ├── CCDictionary.h │ │ │ │ ├── CCDouble.h │ │ │ │ ├── CCFloat.h │ │ │ │ ├── CCGeometry.h │ │ │ │ ├── CCInteger.h │ │ │ │ ├── CCNS.h │ │ │ │ ├── CCObject.h │ │ │ │ ├── CCSet.h │ │ │ │ ├── CCString.h │ │ │ │ └── CCZone.h │ │ │ ├── draw_nodes │ │ │ │ ├── CCDrawNode.h │ │ │ │ └── CCDrawingPrimitives.h │ │ │ ├── effects │ │ │ │ ├── CCGrabber.h │ │ │ │ └── CCGrid.h │ │ │ ├── extensions │ │ │ │ ├── AssetsManager │ │ │ │ │ └── AssetsManager.h │ │ │ │ ├── ExtensionMacros.h │ │ │ │ ├── GUI │ │ │ │ │ ├── CCControlExtension │ │ │ │ │ │ ├── CCControl.h │ │ │ │ │ │ ├── CCControlButton.h │ │ │ │ │ │ ├── CCControlColourPicker.h │ │ │ │ │ │ ├── CCControlExtensions.h │ │ │ │ │ │ ├── CCControlHuePicker.h │ │ │ │ │ │ ├── CCControlPotentiometer.h │ │ │ │ │ │ ├── CCControlSaturationBrightnessPicker.h │ │ │ │ │ │ ├── CCControlSlider.h │ │ │ │ │ │ ├── CCControlStepper.h │ │ │ │ │ │ ├── CCControlSwitch.h │ │ │ │ │ │ ├── CCControlUtils.h │ │ │ │ │ │ ├── CCInvocation.h │ │ │ │ │ │ ├── CCScale9Sprite.h │ │ │ │ │ │ └── ColorPickerDelegate.h │ │ │ │ │ ├── CCEditBox │ │ │ │ │ │ ├── CCEditBox.h │ │ │ │ │ │ ├── CCEditBoxImpl.h │ │ │ │ │ │ ├── CCEditBoxImplAndroid.h │ │ │ │ │ │ ├── CCEditBoxImplIOS.h │ │ │ │ │ │ ├── CCEditBoxImplMac.h │ │ │ │ │ │ ├── CCEditBoxImplTizen.h │ │ │ │ │ │ ├── CCEditBoxImplWin.h │ │ │ │ │ │ └── CCEditBoxImplWp8.h │ │ │ │ │ └── CCScrollView │ │ │ │ │ │ ├── CCScrollView.h │ │ │ │ │ │ ├── CCSorting.h │ │ │ │ │ │ ├── CCTableView.h │ │ │ │ │ │ └── CCTableViewCell.h │ │ │ │ ├── LocalStorage │ │ │ │ │ └── LocalStorage.h │ │ │ │ ├── cocos-ext.h │ │ │ │ ├── libExtensions.lib │ │ │ │ ├── network │ │ │ │ │ ├── HttpClient.h │ │ │ │ │ ├── HttpRequest.h │ │ │ │ │ ├── HttpResponse.h │ │ │ │ │ └── WebSocket.h │ │ │ │ ├── physics_nodes │ │ │ │ │ ├── CCPhysicsDebugNode.h │ │ │ │ │ └── CCPhysicsSprite.h │ │ │ │ └── spine │ │ │ │ │ ├── Animation.h │ │ │ │ │ ├── AnimationState.h │ │ │ │ │ ├── AnimationStateData.h │ │ │ │ │ ├── Atlas.h │ │ │ │ │ ├── AtlasAttachmentLoader.h │ │ │ │ │ ├── Attachment.h │ │ │ │ │ ├── AttachmentLoader.h │ │ │ │ │ ├── Bone.h │ │ │ │ │ ├── BoneData.h │ │ │ │ │ ├── CCSkeleton.h │ │ │ │ │ ├── CCSkeletonAnimation.h │ │ │ │ │ ├── Json.h │ │ │ │ │ ├── RegionAttachment.h │ │ │ │ │ ├── Skeleton.h │ │ │ │ │ ├── SkeletonData.h │ │ │ │ │ ├── SkeletonJson.h │ │ │ │ │ ├── Skin.h │ │ │ │ │ ├── Slot.h │ │ │ │ │ ├── SlotData.h │ │ │ │ │ ├── extension.h │ │ │ │ │ ├── spine-cocos2dx.h │ │ │ │ │ └── spine.h │ │ │ ├── include │ │ │ │ ├── CCEventType.h │ │ │ │ ├── CCProtocols.h │ │ │ │ ├── ccConfig.h │ │ │ │ ├── ccMacros.h │ │ │ │ ├── ccTypeInfo.h │ │ │ │ ├── ccTypes.h │ │ │ │ └── cocos2d.h │ │ │ ├── kazmath │ │ │ │ └── include │ │ │ │ │ └── kazmath │ │ │ │ │ ├── GL │ │ │ │ │ ├── mat4stack.h │ │ │ │ │ └── matrix.h │ │ │ │ │ ├── aabb.h │ │ │ │ │ ├── kazmath.h │ │ │ │ │ ├── mat3.h │ │ │ │ │ ├── mat4.h │ │ │ │ │ ├── neon_matrix_impl.h │ │ │ │ │ ├── plane.h │ │ │ │ │ ├── quaternion.h │ │ │ │ │ ├── ray2.h │ │ │ │ │ ├── utility.h │ │ │ │ │ ├── vec2.h │ │ │ │ │ ├── vec3.h │ │ │ │ │ └── vec4.h │ │ │ ├── keypad_dispatcher │ │ │ │ ├── CCKeypadDelegate.h │ │ │ │ └── CCKeypadDispatcher.h │ │ │ ├── label_nodes │ │ │ │ ├── CCLabelAtlas.h │ │ │ │ ├── CCLabelBMFont.h │ │ │ │ └── CCLabelTTF.h │ │ │ ├── layers_scenes_transitions_nodes │ │ │ │ ├── CCLayer.h │ │ │ │ ├── CCScene.h │ │ │ │ ├── CCTransition.h │ │ │ │ ├── CCTransitionPageTurn.h │ │ │ │ └── CCTransitionProgress.h │ │ │ ├── menu_nodes │ │ │ │ ├── CCMenu.h │ │ │ │ └── CCMenuItem.h │ │ │ ├── misc_nodes │ │ │ │ ├── CCClippingNode.h │ │ │ │ ├── CCMotionStreak.h │ │ │ │ ├── CCProgressTimer.h │ │ │ │ └── CCRenderTexture.h │ │ │ ├── particle_nodes │ │ │ │ ├── CCParticleBatchNode.h │ │ │ │ ├── CCParticleExamples.h │ │ │ │ ├── CCParticleSystem.h │ │ │ │ ├── CCParticleSystemQuad.h │ │ │ │ └── firePngData.h │ │ │ ├── platform │ │ │ │ ├── CCAccelerometer.h │ │ │ │ ├── CCAccelerometerDelegate.h │ │ │ │ ├── CCApplicationProtocol.h │ │ │ │ ├── CCCommon.h │ │ │ │ ├── CCDevice.h │ │ │ │ ├── CCEGLViewProtocol.h │ │ │ │ ├── CCFileUtils.h │ │ │ │ ├── CCGL.h │ │ │ │ ├── CCImage.h │ │ │ │ ├── CCImageCommon_cpp.h │ │ │ │ ├── CCPlatformConfig.h │ │ │ │ ├── CCPlatformDefine.h │ │ │ │ ├── CCPlatformMacros.h │ │ │ │ ├── CCSAXParser.h │ │ │ │ ├── CCStdC.h │ │ │ │ ├── CCThread.h │ │ │ │ ├── IncludeCurl.h │ │ │ │ ├── IncludeJpegLib.h │ │ │ │ ├── IncludePThread.h │ │ │ │ ├── IncludeTiffio.h │ │ │ │ ├── IncludeZlib.h │ │ │ │ ├── android │ │ │ │ │ ├── CCAccelerometer.cpp │ │ │ │ │ ├── CCAccelerometer.h │ │ │ │ │ ├── CCApplication.cpp │ │ │ │ │ ├── CCApplication.h │ │ │ │ │ ├── CCCommon.cpp │ │ │ │ │ ├── CCDevice.cpp │ │ │ │ │ ├── CCEGLView.cpp │ │ │ │ │ ├── CCEGLView.h │ │ │ │ │ ├── CCFileUtilsAndroid.cpp │ │ │ │ │ ├── CCFileUtilsAndroid.h │ │ │ │ │ ├── CCGL.h │ │ │ │ │ ├── CCImage.cpp │ │ │ │ │ ├── CCPlatformDefine.h │ │ │ │ │ ├── CCStdC.h │ │ │ │ │ ├── java │ │ │ │ │ │ ├── .classpath │ │ │ │ │ │ ├── .project │ │ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ │ │ ├── ant.properties │ │ │ │ │ │ ├── build.xml │ │ │ │ │ │ ├── proguard-project.txt │ │ │ │ │ │ ├── project.properties │ │ │ │ │ │ ├── res │ │ │ │ │ │ │ └── .gitignore │ │ │ │ │ │ └── src │ │ │ │ │ │ │ └── org │ │ │ │ │ │ │ └── cocos2dx │ │ │ │ │ │ │ └── lib │ │ │ │ │ │ │ ├── Cocos2dxAccelerometer.java │ │ │ │ │ │ │ ├── Cocos2dxActivity.java │ │ │ │ │ │ │ ├── Cocos2dxBitmap.java │ │ │ │ │ │ │ ├── Cocos2dxETCLoader.java │ │ │ │ │ │ │ ├── Cocos2dxEditBoxDialog.java │ │ │ │ │ │ │ ├── Cocos2dxEditText.java │ │ │ │ │ │ │ ├── Cocos2dxGLSurfaceView.java │ │ │ │ │ │ │ ├── Cocos2dxHandler.java │ │ │ │ │ │ │ ├── Cocos2dxHelper.java │ │ │ │ │ │ │ ├── Cocos2dxLocalStorage.java │ │ │ │ │ │ │ ├── Cocos2dxMusic.java │ │ │ │ │ │ │ ├── Cocos2dxRenderer.java │ │ │ │ │ │ │ ├── Cocos2dxSound.java │ │ │ │ │ │ │ ├── Cocos2dxTextInputWraper.java │ │ │ │ │ │ │ └── Cocos2dxTypefaces.java │ │ │ │ │ └── jni │ │ │ │ │ │ ├── DPIJni.cpp │ │ │ │ │ │ ├── DPIJni.h │ │ │ │ │ │ ├── IMEJni.cpp │ │ │ │ │ │ ├── IMEJni.h │ │ │ │ │ │ ├── Java_org_cocos2dx_lib_Cocos2dxAccelerometer.cpp │ │ │ │ │ │ ├── Java_org_cocos2dx_lib_Cocos2dxBitmap.cpp │ │ │ │ │ │ ├── Java_org_cocos2dx_lib_Cocos2dxBitmap.h │ │ │ │ │ │ ├── Java_org_cocos2dx_lib_Cocos2dxHelper.cpp │ │ │ │ │ │ ├── Java_org_cocos2dx_lib_Cocos2dxHelper.h │ │ │ │ │ │ ├── Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp │ │ │ │ │ │ ├── JniHelper.cpp │ │ │ │ │ │ ├── JniHelper.h │ │ │ │ │ │ └── TouchesJni.cpp │ │ │ │ ├── ios │ │ │ │ │ ├── AccelerometerDelegateWrapper.h │ │ │ │ │ ├── AccelerometerDelegateWrapper.mm │ │ │ │ │ ├── CCAccelerometer.h │ │ │ │ │ ├── CCAccelerometer.mm │ │ │ │ │ ├── CCApplication.h │ │ │ │ │ ├── CCApplication.mm │ │ │ │ │ ├── CCCommon.mm │ │ │ │ │ ├── CCDevice.mm │ │ │ │ │ ├── CCDirectorCaller.h │ │ │ │ │ ├── CCDirectorCaller.mm │ │ │ │ │ ├── CCEGLView.h │ │ │ │ │ ├── CCEGLView.mm │ │ │ │ │ ├── CCES2Renderer.h │ │ │ │ │ ├── CCES2Renderer.m │ │ │ │ │ ├── CCESRenderer.h │ │ │ │ │ ├── CCFileUtilsIOS.h │ │ │ │ │ ├── CCFileUtilsIOS.mm │ │ │ │ │ ├── CCGL.h │ │ │ │ │ ├── CCImage.mm │ │ │ │ │ ├── CCLock.h │ │ │ │ │ ├── CCPlatformDefine.h │ │ │ │ │ ├── CCStdC.h │ │ │ │ │ ├── CCThread.mm │ │ │ │ │ ├── EAGLView.h │ │ │ │ │ ├── EAGLView.mm │ │ │ │ │ ├── OpenGL_Internal.h │ │ │ │ │ └── Simulation │ │ │ │ │ │ ├── AccelerometerSimulation.h │ │ │ │ │ │ └── AccelerometerSimulation.m │ │ │ │ ├── mac │ │ │ │ │ ├── CCAccelerometer.h │ │ │ │ │ ├── CCApplication.h │ │ │ │ │ ├── CCApplication.mm │ │ │ │ │ ├── CCCommon.mm │ │ │ │ │ ├── CCDevice.mm │ │ │ │ │ ├── CCDirectorCaller.h │ │ │ │ │ ├── CCDirectorCaller.mm │ │ │ │ │ ├── CCEGLView.h │ │ │ │ │ ├── CCEGLView.mm │ │ │ │ │ ├── CCEventDispatcher.h │ │ │ │ │ ├── CCEventDispatcher.mm │ │ │ │ │ ├── CCFileUtilsMac.h │ │ │ │ │ ├── CCFileUtilsMac.mm │ │ │ │ │ ├── CCGL.h │ │ │ │ │ ├── CCImage.mm │ │ │ │ │ ├── CCPlatformDefine.h │ │ │ │ │ ├── CCStdC.h │ │ │ │ │ ├── CCThread.mm │ │ │ │ │ ├── CCWindow.h │ │ │ │ │ ├── CCWindow.m │ │ │ │ │ ├── EAGLView.h │ │ │ │ │ └── EAGLView.mm │ │ │ │ ├── platform.h │ │ │ │ ├── third_party │ │ │ │ │ ├── android │ │ │ │ │ │ └── prebuilt │ │ │ │ │ │ │ ├── libcurl │ │ │ │ │ │ │ └── include │ │ │ │ │ │ │ │ └── curl │ │ │ │ │ │ │ │ ├── curl.h │ │ │ │ │ │ │ │ ├── curlbuild.h │ │ │ │ │ │ │ │ ├── curlrules.h │ │ │ │ │ │ │ │ ├── curlver.h │ │ │ │ │ │ │ │ ├── easy.h │ │ │ │ │ │ │ │ ├── mprintf.h │ │ │ │ │ │ │ │ ├── multi.h │ │ │ │ │ │ │ │ ├── stdcheaders.h │ │ │ │ │ │ │ │ ├── typecheck-gcc.h │ │ │ │ │ │ │ │ └── types.h │ │ │ │ │ │ │ ├── libjpeg │ │ │ │ │ │ │ └── include │ │ │ │ │ │ │ │ ├── jconfig.h │ │ │ │ │ │ │ │ ├── jerror.h │ │ │ │ │ │ │ │ ├── jmorecfg.h │ │ │ │ │ │ │ │ └── jpeglib.h │ │ │ │ │ │ │ ├── libpng │ │ │ │ │ │ │ └── include │ │ │ │ │ │ │ │ ├── png.h.REMOVED.git-id │ │ │ │ │ │ │ │ ├── pngconf.h │ │ │ │ │ │ │ │ └── pngusr.h │ │ │ │ │ │ │ ├── libtiff │ │ │ │ │ │ │ └── include │ │ │ │ │ │ │ │ ├── tiff.h │ │ │ │ │ │ │ │ ├── tiffconf.h │ │ │ │ │ │ │ │ ├── tiffio.h │ │ │ │ │ │ │ │ └── tiffvers.h │ │ │ │ │ │ │ └── libwebp │ │ │ │ │ │ │ └── include │ │ │ │ │ │ │ ├── decode.h │ │ │ │ │ │ │ ├── encode.h │ │ │ │ │ │ │ └── types.h │ │ │ │ │ ├── android64 │ │ │ │ │ │ └── prebuilt │ │ │ │ │ │ │ ├── libcurl │ │ │ │ │ │ │ └── include │ │ │ │ │ │ │ │ └── curl │ │ │ │ │ │ │ │ ├── curl.h │ │ │ │ │ │ │ │ ├── curlbuild.h │ │ │ │ │ │ │ │ ├── curlrules.h │ │ │ │ │ │ │ │ ├── curlver.h │ │ │ │ │ │ │ │ ├── easy.h │ │ │ │ │ │ │ │ ├── mprintf.h │ │ │ │ │ │ │ │ ├── multi.h │ │ │ │ │ │ │ │ ├── stdcheaders.h │ │ │ │ │ │ │ │ ├── typecheck-gcc.h │ │ │ │ │ │ │ │ └── types.h │ │ │ │ │ │ │ ├── libjpeg │ │ │ │ │ │ │ └── include │ │ │ │ │ │ │ │ ├── jconfig.h │ │ │ │ │ │ │ │ ├── jerror.h │ │ │ │ │ │ │ │ ├── jmorecfg.h │ │ │ │ │ │ │ │ └── jpeglib.h │ │ │ │ │ │ │ ├── libpng │ │ │ │ │ │ │ └── include │ │ │ │ │ │ │ │ ├── png.h.REMOVED.git-id │ │ │ │ │ │ │ │ ├── pngconf.h │ │ │ │ │ │ │ │ └── pngusr.h │ │ │ │ │ │ │ ├── libtiff │ │ │ │ │ │ │ └── include │ │ │ │ │ │ │ │ ├── tiff.h │ │ │ │ │ │ │ │ ├── tiffconf.h │ │ │ │ │ │ │ │ ├── tiffio.h │ │ │ │ │ │ │ │ └── tiffvers.h │ │ │ │ │ │ │ └── libwebp │ │ │ │ │ │ │ └── include │ │ │ │ │ │ │ ├── decode.h │ │ │ │ │ │ │ ├── encode.h │ │ │ │ │ │ │ └── types.h │ │ │ │ │ ├── ios │ │ │ │ │ │ ├── curl │ │ │ │ │ │ │ ├── curl.h │ │ │ │ │ │ │ ├── curlbuild.h │ │ │ │ │ │ │ ├── curlrules.h │ │ │ │ │ │ │ ├── curlver.h │ │ │ │ │ │ │ ├── easy.h │ │ │ │ │ │ │ ├── mprintf.h │ │ │ │ │ │ │ ├── multi.h │ │ │ │ │ │ │ ├── stdcheaders.h │ │ │ │ │ │ │ └── typecheck-gcc.h │ │ │ │ │ │ ├── libraries │ │ │ │ │ │ │ ├── libcurl.a.REMOVED.git-id │ │ │ │ │ │ │ └── libwebp.a.REMOVED.git-id │ │ │ │ │ │ └── webp │ │ │ │ │ │ │ ├── decode.h │ │ │ │ │ │ │ ├── encode.h │ │ │ │ │ │ │ └── types.h │ │ │ │ │ ├── mac │ │ │ │ │ │ ├── libraries │ │ │ │ │ │ │ └── libwebp.a.REMOVED.git-id │ │ │ │ │ │ └── webp │ │ │ │ │ │ │ ├── decode.h │ │ │ │ │ │ │ ├── encode.h │ │ │ │ │ │ │ └── types.h │ │ │ │ │ └── win32 │ │ │ │ │ │ ├── OGLES │ │ │ │ │ │ └── GL │ │ │ │ │ │ │ ├── glew.h │ │ │ │ │ │ │ ├── glxew.h │ │ │ │ │ │ │ └── wglew.h │ │ │ │ │ │ ├── curl │ │ │ │ │ │ ├── curl.h │ │ │ │ │ │ ├── curlbuild.h │ │ │ │ │ │ ├── curlrules.h │ │ │ │ │ │ ├── curlver.h │ │ │ │ │ │ ├── easy.h │ │ │ │ │ │ ├── mprintf.h │ │ │ │ │ │ ├── multi.h │ │ │ │ │ │ ├── stdcheaders.h │ │ │ │ │ │ └── typecheck-gcc.h │ │ │ │ │ │ ├── iconv │ │ │ │ │ │ └── iconv.h │ │ │ │ │ │ ├── libjpeg │ │ │ │ │ │ ├── jconfig.h │ │ │ │ │ │ ├── jconfig_linux.h │ │ │ │ │ │ ├── jconfig_win.h │ │ │ │ │ │ ├── jerror.h │ │ │ │ │ │ ├── jmorecfg.h │ │ │ │ │ │ └── jpeglib.h │ │ │ │ │ │ ├── libpng │ │ │ │ │ │ ├── png.h.REMOVED.git-id │ │ │ │ │ │ └── pngconf.h │ │ │ │ │ │ ├── libraries │ │ │ │ │ │ ├── glew32.dll.REMOVED.git-id │ │ │ │ │ │ ├── glew32.lib.REMOVED.git-id │ │ │ │ │ │ ├── iconv.dll.REMOVED.git-id │ │ │ │ │ │ ├── libcurl.dll.REMOVED.git-id │ │ │ │ │ │ ├── libjpeg.lib.REMOVED.git-id │ │ │ │ │ │ ├── libpng.lib.REMOVED.git-id │ │ │ │ │ │ ├── libtiff.dll.REMOVED.git-id │ │ │ │ │ │ └── libwebp.lib.REMOVED.git-id │ │ │ │ │ │ ├── libtiff │ │ │ │ │ │ ├── tiff.h │ │ │ │ │ │ ├── tiffconf.h │ │ │ │ │ │ ├── tiffio.h │ │ │ │ │ │ └── tiffvers.h │ │ │ │ │ │ ├── libwebp │ │ │ │ │ │ ├── decode.h │ │ │ │ │ │ ├── encode.h │ │ │ │ │ │ └── types.h │ │ │ │ │ │ ├── pthread │ │ │ │ │ │ ├── pthread.h │ │ │ │ │ │ ├── sched.h │ │ │ │ │ │ └── semaphore.h │ │ │ │ │ │ └── zlib │ │ │ │ │ │ ├── zconf.h │ │ │ │ │ │ └── zlib.h │ │ │ │ └── win32 │ │ │ │ │ ├── CCAccelerometer.h │ │ │ │ │ ├── CCApplication.h │ │ │ │ │ ├── CCControllerState.h │ │ │ │ │ ├── CCEGLView.h │ │ │ │ │ ├── CCFileUtilsWin32.h │ │ │ │ │ ├── CCGL.h │ │ │ │ │ ├── CCPlatformDefine.h │ │ │ │ │ ├── CCStdC.h │ │ │ │ │ ├── CXBOXController.h │ │ │ │ │ └── compat │ │ │ │ │ └── stdint.h │ │ │ ├── robtop │ │ │ │ ├── content │ │ │ │ │ └── CCContentManager.h │ │ │ │ ├── glfw │ │ │ │ │ ├── glfw3.h │ │ │ │ │ └── glfw3native.h │ │ │ │ ├── keyboard_dispatcher │ │ │ │ │ ├── CCKeyboardDelegate.h │ │ │ │ │ └── CCKeyboardDispatcher.h │ │ │ │ ├── mouse_dispatcher │ │ │ │ │ ├── CCMouseDelegate.h │ │ │ │ │ └── CCMouseDispatcher.h │ │ │ │ ├── scene_nodes │ │ │ │ │ └── CCSceneTransitionDelegate.h │ │ │ │ ├── special_nodes │ │ │ │ │ └── CCLightning.h │ │ │ │ ├── sprite_nodes │ │ │ │ │ ├── CCFontSprite.h │ │ │ │ │ └── CCSpriteExtra.h │ │ │ │ └── xml │ │ │ │ │ ├── DS_Dictionary.h │ │ │ │ │ ├── ObjectDecoder.h │ │ │ │ │ ├── pugiconfig.hpp │ │ │ │ │ ├── pugixml.hpp │ │ │ │ │ └── readme.txt │ │ │ ├── script_support │ │ │ │ └── CCScriptSupport.h │ │ │ ├── shaders │ │ │ │ ├── CCGLProgram.h │ │ │ │ ├── CCShaderCache.h │ │ │ │ ├── ccGLStateCache.h │ │ │ │ ├── ccShaderEx_SwitchMask_frag.h │ │ │ │ ├── ccShader_PositionColorLengthTexture_frag.h │ │ │ │ ├── ccShader_PositionColorLengthTexture_vert.h │ │ │ │ ├── ccShader_PositionColor_frag.h │ │ │ │ ├── ccShader_PositionColor_vert.h │ │ │ │ ├── ccShader_PositionTextureA8Color_frag.h │ │ │ │ ├── ccShader_PositionTextureA8Color_vert.h │ │ │ │ ├── ccShader_PositionTextureColorAlphaTest_frag.h │ │ │ │ ├── ccShader_PositionTextureColor_frag.h │ │ │ │ ├── ccShader_PositionTextureColor_vert.h │ │ │ │ ├── ccShader_PositionTexture_frag.h │ │ │ │ ├── ccShader_PositionTexture_uColor_frag.h │ │ │ │ ├── ccShader_PositionTexture_uColor_vert.h │ │ │ │ ├── ccShader_PositionTexture_vert.h │ │ │ │ ├── ccShader_Position_uColor_frag.h │ │ │ │ ├── ccShader_Position_uColor_vert.h │ │ │ │ └── ccShaders.h │ │ │ ├── sprite_nodes │ │ │ │ ├── CCAnimation.h │ │ │ │ ├── CCAnimationCache.h │ │ │ │ ├── CCSprite.h │ │ │ │ ├── CCSpriteBatchNode.h │ │ │ │ ├── CCSpriteFrame.h │ │ │ │ └── CCSpriteFrameCache.h │ │ │ ├── support │ │ │ │ ├── CCNotificationCenter.h │ │ │ │ ├── CCPointExtension.h │ │ │ │ ├── CCProfiling.h │ │ │ │ ├── CCVertex.h │ │ │ │ ├── TransformUtils.h │ │ │ │ ├── base64.h │ │ │ │ ├── ccUTF8.h │ │ │ │ ├── ccUtils.h │ │ │ │ ├── component │ │ │ │ │ ├── CCComponent.h │ │ │ │ │ └── CCComponentContainer.h │ │ │ │ ├── data_support │ │ │ │ │ ├── ccCArray.h │ │ │ │ │ ├── uthash.h │ │ │ │ │ └── utlist.h │ │ │ │ ├── image_support │ │ │ │ │ └── TGAlib.h │ │ │ │ ├── tinyxml2 │ │ │ │ │ └── tinyxml2.h │ │ │ │ ├── user_default │ │ │ │ │ └── CCUserDefault.h │ │ │ │ └── zip_support │ │ │ │ │ ├── ZipUtils.h │ │ │ │ │ ├── ioapi.h │ │ │ │ │ ├── unzip.h │ │ │ │ │ ├── zip.h │ │ │ │ │ └── zipMacro.h │ │ │ ├── text_input_node │ │ │ │ ├── CCIMEDelegate.h │ │ │ │ ├── CCIMEDispatcher.h │ │ │ │ └── CCTextFieldTTF.h │ │ │ ├── textures │ │ │ │ ├── CCTexture2D.h │ │ │ │ ├── CCTextureAtlas.h │ │ │ │ ├── CCTextureCache.h │ │ │ │ ├── CCTextureETC.h │ │ │ │ └── CCTexturePVR.h │ │ │ ├── tilemap_parallax_nodes │ │ │ │ ├── CCParallaxNode.h │ │ │ │ ├── CCTMXLayer.h │ │ │ │ ├── CCTMXObjectGroup.h │ │ │ │ ├── CCTMXTiledMap.h │ │ │ │ ├── CCTMXXMLParser.h │ │ │ │ └── CCTileMapAtlas.h │ │ │ └── touch_dispatcher │ │ │ │ ├── CCTouch.h │ │ │ │ ├── CCTouchDelegateProtocol.h │ │ │ │ ├── CCTouchDispatcher.h │ │ │ │ └── CCTouchHandler.h │ │ ├── external │ │ │ └── fts │ │ │ │ └── fts_fuzzy_match.h │ │ ├── fmod │ │ │ ├── fmod.h │ │ │ ├── fmod.hpp │ │ │ ├── fmod_android.h │ │ │ ├── fmod_codec.h │ │ │ ├── fmod_common.h │ │ │ ├── fmod_dsp.h │ │ │ ├── fmod_dsp_effects.h │ │ │ ├── fmod_errors.h │ │ │ └── fmod_output.h │ │ ├── loader │ │ │ ├── Dirs.hpp │ │ │ ├── Dispatch.hpp │ │ │ ├── Event.hpp │ │ │ ├── EventV2.hpp │ │ │ ├── GameEvent.hpp │ │ │ ├── Hook.hpp │ │ │ ├── IPC.hpp │ │ │ ├── Loader.hpp │ │ │ ├── Log.hpp │ │ │ ├── Mod.hpp │ │ │ ├── ModEvent.hpp │ │ │ ├── ModMetadata.hpp │ │ │ ├── ModSettingsManager.hpp │ │ │ ├── Setting.hpp │ │ │ ├── SettingV3.hpp │ │ │ ├── Tulip.hpp │ │ │ └── Types.hpp │ │ ├── modify │ │ │ ├── AsStaticFunction.hpp │ │ │ ├── Comparer.hpp │ │ │ ├── Field.hpp │ │ │ ├── IDManager.hpp │ │ │ ├── Modify.hpp │ │ │ └── Traits.hpp │ │ ├── platform │ │ │ ├── ItaniumCast.hpp │ │ │ ├── android.hpp │ │ │ ├── cplatform.h │ │ │ ├── ios.hpp │ │ │ ├── macos.hpp │ │ │ ├── platform.hpp │ │ │ └── windows.hpp │ │ ├── ui │ │ │ ├── BasedButton.hpp │ │ │ ├── BasedButtonSprite.hpp │ │ │ ├── Border.hpp │ │ │ ├── BreakLine.hpp │ │ │ ├── ColorPickPopup.hpp │ │ │ ├── EnterLayerEvent.hpp │ │ │ ├── General.hpp │ │ │ ├── GeodeUI.hpp │ │ │ ├── IconButtonSprite.hpp │ │ │ ├── Layout.hpp │ │ │ ├── LazySprite.hpp │ │ │ ├── ListView.hpp │ │ │ ├── LoadingSpinner.hpp │ │ │ ├── MDPopup.hpp │ │ │ ├── MDTextArea.hpp │ │ │ ├── Notification.hpp │ │ │ ├── Popup.hpp │ │ │ ├── SceneManager.hpp │ │ │ ├── ScrollLayer.hpp │ │ │ ├── Scrollbar.hpp │ │ │ ├── SelectList.hpp │ │ │ ├── SimpleAxisLayout.hpp │ │ │ ├── SpacerNode.hpp │ │ │ ├── TextArea.hpp │ │ │ ├── TextInput.hpp │ │ │ └── TextRenderer.hpp │ │ └── utils │ │ │ ├── ColorProvider.hpp │ │ │ ├── JsonValidation.hpp │ │ │ ├── NodeIDs.hpp │ │ │ ├── ObjcHook.hpp │ │ │ ├── SeedValue.hpp │ │ │ ├── Task.hpp │ │ │ ├── VersionInfo.hpp │ │ │ ├── addresser.hpp │ │ │ ├── async.hpp │ │ │ ├── base64.hpp │ │ │ ├── casts.hpp │ │ │ ├── cocos.hpp │ │ │ ├── file.hpp │ │ │ ├── function.hpp │ │ │ ├── general.hpp │ │ │ ├── map.hpp │ │ │ ├── permission.hpp │ │ │ ├── ranges.hpp │ │ │ ├── string.hpp │ │ │ ├── terminate.hpp │ │ │ ├── timer.hpp │ │ │ └── web.hpp │ └── link │ │ ├── android32 │ │ ├── libcocos2dcpp.so │ │ ├── libcrypto.a │ │ ├── libcurl.a │ │ ├── libfmod.so │ │ ├── libnghttp2.a │ │ ├── libnghttp3.a │ │ ├── libngtcp2.a │ │ ├── libngtcp2_crypto_boringssl.a │ │ └── libssl.a │ │ ├── android64 │ │ ├── libcocos2dcpp.so │ │ ├── libcrypto.a │ │ ├── libcurl.a │ │ ├── libfmod.so │ │ ├── libnghttp2.a │ │ ├── libnghttp3.a │ │ ├── libngtcp2.a │ │ ├── libngtcp2_crypto_boringssl.a │ │ └── libssl.a │ │ ├── ios │ │ ├── libcrypto.a │ │ ├── libcurl.a │ │ ├── libnghttp2.a │ │ └── libssl.a │ │ ├── macos │ │ ├── libcrypto.a │ │ ├── libcurl.a │ │ ├── libfmod.dylib │ │ ├── libnghttp2.a │ │ ├── libnghttp3.a │ │ ├── libngtcp2.a │ │ ├── libngtcp2_crypto_boringssl.a │ │ └── libssl.a │ │ └── win64 │ │ ├── fmod.lib │ │ ├── gd-libcurl.lib │ │ ├── glew32.lib │ │ ├── libExtensions.lib │ │ ├── libcocos2d.lib │ │ ├── libcurl.lib │ │ └── nghttp2.lib ├── launcher │ ├── mac │ │ ├── Bootstrapper.cpp │ │ ├── CMakeLists.txt │ │ └── FakeGeode.cpp │ └── windows │ │ ├── CMakeLists.txt │ │ ├── Updater.cpp │ │ └── proxyLoader.cpp ├── resources │ ├── about.md.in │ ├── blanks │ │ ├── baseAccount_Normal_Blue.png │ │ ├── baseAccount_Normal_Gray.png │ │ ├── baseAccount_Normal_Purple.png │ │ ├── baseCategory_Big_Green.png │ │ ├── baseCircle_BigAlt_Blue.png │ │ ├── baseCircle_BigAlt_Cyan.png │ │ ├── baseCircle_BigAlt_DarkAqua.png │ │ ├── baseCircle_BigAlt_DarkPurple.png │ │ ├── baseCircle_BigAlt_Gray.png │ │ ├── baseCircle_BigAlt_Green.png │ │ ├── baseCircle_BigAlt_Pink.png │ │ ├── baseCircle_Big_Blue.png │ │ ├── baseCircle_Big_Cyan.png │ │ ├── baseCircle_Big_DarkAqua.png │ │ ├── baseCircle_Big_DarkPurple.png │ │ ├── baseCircle_Big_Gray.png │ │ ├── baseCircle_Big_Green.png │ │ ├── baseCircle_Big_Pink.png │ │ ├── baseCircle_Large_Blue.png │ │ ├── baseCircle_Large_Cyan.png │ │ ├── baseCircle_Large_DarkAqua.png │ │ ├── baseCircle_Large_DarkPurple.png │ │ ├── baseCircle_Large_Gray.png │ │ ├── baseCircle_Large_Green.png │ │ ├── baseCircle_Large_Pink.png │ │ ├── baseCircle_MediumAlt_Blue.png │ │ ├── baseCircle_MediumAlt_Cyan.png │ │ ├── baseCircle_MediumAlt_DarkAqua.png │ │ ├── baseCircle_MediumAlt_DarkPurple.png │ │ ├── baseCircle_MediumAlt_Gray.png │ │ ├── baseCircle_MediumAlt_Green.png │ │ ├── baseCircle_MediumAlt_Pink.png │ │ ├── baseCircle_Medium_Blue.png │ │ ├── baseCircle_Medium_Cyan.png │ │ ├── baseCircle_Medium_DarkAqua.png │ │ ├── baseCircle_Medium_DarkPurple.png │ │ ├── baseCircle_Medium_Gray.png │ │ ├── baseCircle_Medium_Green.png │ │ ├── baseCircle_Medium_Pink.png │ │ ├── baseCircle_SmallAlt_Blue.png │ │ ├── baseCircle_SmallAlt_Cyan.png │ │ ├── baseCircle_SmallAlt_DarkAqua.png │ │ ├── baseCircle_SmallAlt_DarkPurple.png │ │ ├── baseCircle_SmallAlt_Gray.png │ │ ├── baseCircle_SmallAlt_Green.png │ │ ├── baseCircle_SmallAlt_Pink.png │ │ ├── baseCircle_Small_Blue.png │ │ ├── baseCircle_Small_Cyan.png │ │ ├── baseCircle_Small_DarkAqua.png │ │ ├── baseCircle_Small_DarkPurple.png │ │ ├── baseCircle_Small_Gray.png │ │ ├── baseCircle_Small_Green.png │ │ ├── baseCircle_Small_Pink.png │ │ ├── baseCircle_Tiny_Blue.png │ │ ├── baseCircle_Tiny_Cyan.png │ │ ├── baseCircle_Tiny_DarkAqua.png │ │ ├── baseCircle_Tiny_DarkPurple.png │ │ ├── baseCircle_Tiny_Gray.png │ │ ├── baseCircle_Tiny_Green.png │ │ ├── baseCircle_Tiny_Pink.png │ │ ├── baseCross_Huge_Green.png │ │ ├── baseCross_Small_Green.png │ │ ├── baseEditor_Normal_Aqua.png │ │ ├── baseEditor_Normal_Blue.png │ │ ├── baseEditor_Normal_BrightGreen.png │ │ ├── baseEditor_Normal_Cyan.png │ │ ├── baseEditor_Normal_DarkGray.png │ │ ├── baseEditor_Normal_DimGreen.png │ │ ├── baseEditor_Normal_Gray.png │ │ ├── baseEditor_Normal_Green.png │ │ ├── baseEditor_Normal_LightBlue.png │ │ ├── baseEditor_Normal_Magenta.png │ │ ├── baseEditor_Normal_Orange.png │ │ ├── baseEditor_Normal_Pink.png │ │ ├── baseEditor_Normal_Salmon.png │ │ ├── baseEditor_Normal_Teal.png │ │ ├── baseIconSelect_Normal_Selected.png │ │ ├── baseIconSelect_Normal_Unselected.png │ │ ├── baseLeaderboard_Normal_Blue.png │ │ ├── baseTab_Normal_Selected.png │ │ ├── baseTab_Normal_Unselected.png │ │ ├── baseTab_Normal_UnselectedDark.png │ │ └── svgs │ │ │ ├── baseCircle_Big.svg │ │ │ ├── baseCircle_BigAlt.svg │ │ │ ├── baseCircle_Large.svg │ │ │ ├── baseCircle_Medium.svg │ │ │ ├── baseCircle_MediumAlt.svg │ │ │ ├── baseCircle_Small.svg │ │ │ ├── baseCircle_SmallAlt.svg │ │ │ ├── baseCircle_Tiny.svg │ │ │ ├── baseEditor_Normal.svg │ │ │ └── gen.py │ ├── category-bg.png │ ├── category-dot.png │ ├── changelog.png │ ├── close.png │ ├── delete-white.png │ ├── double-nav.png │ ├── download.png │ ├── exclamation-red.png │ ├── exclamation.png │ ├── external-link.png │ ├── file-add.png │ ├── file.png │ ├── fonts │ │ ├── Ubuntu-Bold.ttf │ │ ├── Ubuntu-BoldItalic.ttf │ │ ├── Ubuntu-Italic.ttf │ │ ├── Ubuntu-Regular.ttf │ │ └── UbuntuMono-Regular.ttf │ ├── geode-list-side.png │ ├── geode-list-top.png │ ├── gift.png │ ├── github.png │ ├── globe.png │ ├── grid-view.png │ ├── homepage.png │ ├── hue-sliders.png │ ├── images │ │ ├── GE_button_01.png │ │ ├── GE_button_02.png │ │ ├── GE_button_03.png │ │ ├── GE_button_04.png │ │ ├── GE_button_05.png │ │ ├── GE_square01.png │ │ ├── GE_square02.png │ │ ├── GE_square03.png │ │ ├── black-square.png │ │ ├── inverseborder.png │ │ ├── scrollbar.png │ │ ├── tab-gradient-mask.png │ │ ├── tab-gradient.png │ │ └── white-square.png │ ├── info-alert.png │ ├── info-warning.png │ ├── install.png │ ├── logos │ │ ├── geode-circle.png │ │ ├── geode-logo-color.png │ │ ├── geode-logo-outline-gold.png │ │ ├── geode-logo-outline.png │ │ ├── geode-logo.png │ │ ├── logo-base.png │ │ └── logo-glow.png │ ├── message.png │ ├── mod.json.in │ ├── mods-list-bottom-gd.png │ ├── mods-list-bottom.png │ ├── mods-list-side-gd.png │ ├── mods-list-side.png │ ├── mods-list-top-gd.png │ ├── mods-list-top.png │ ├── modtober │ │ ├── modtober24-banner-2.png │ │ ├── modtober24-banner.png │ │ └── modtober24-popup.png │ ├── news.png │ ├── persistent.png │ ├── reload.png │ ├── reset-gold.png │ ├── reset.png │ ├── save.png │ ├── search.png │ ├── settings.png │ ├── sounds │ │ ├── byeNotif00.ogg │ │ ├── newNotif00.ogg │ │ ├── newNotif01.ogg │ │ ├── newNotif02.ogg │ │ └── newNotif03.ogg │ ├── support.md.in │ ├── swelve │ │ ├── swelve-layer0.png │ │ ├── swelve-layer1.png │ │ ├── swelve-layer2.png │ │ └── swelve-layer3.png │ ├── tab-bg.png │ ├── tag-featured.png │ ├── tag-joke.png │ ├── tag-modtober-long.png │ ├── tag-modtober-winner-long.png │ ├── tag-modtober-winner.png │ ├── tag-modtober.png │ ├── tag-paid-long.png │ ├── tag-paid.png │ ├── update.png │ ├── updates-available.png │ ├── updates-failed.png │ ├── updates-installed.png │ └── version.png ├── src │ ├── c++stl │ │ ├── string-impl.hpp │ │ └── string.cpp │ ├── cocos2d-ext │ │ ├── AnchorLayout.cpp │ │ ├── AxisLayout.cpp │ │ ├── CCArray.cpp │ │ ├── CCClippingNode.cpp │ │ ├── CCFileUtils.cpp │ │ ├── CCKeyboardDispatcher.cpp │ │ ├── CCKeyboardHandler.cpp │ │ ├── CopySizeLayout.cpp │ │ ├── Getters.cpp │ │ ├── Layout.cpp │ │ ├── SimpleAxisLayout.cpp │ │ ├── SpacerNode.cpp │ │ ├── ZipUtils.cpp │ │ └── zip │ │ │ ├── ioapi.cpp │ │ │ ├── unzip.cpp │ │ │ └── zip.cpp │ ├── curl │ │ ├── curl.h │ │ ├── curlver.h │ │ ├── easy.h │ │ ├── header.h │ │ ├── mprintf.h │ │ ├── multi.h │ │ ├── options.h │ │ ├── stdcheaders.h │ │ ├── system.h │ │ ├── typecheck-gcc.h │ │ ├── urlapi.h │ │ └── websockets.h │ ├── hooks │ │ ├── AddExtraKeys.cpp │ │ ├── AddExtraKeys.mm │ │ ├── AndroidExceptionFix.cpp │ │ ├── AndroidSaveFix.cpp │ │ ├── CCMenuItemActivateFix.cpp │ │ ├── CCSceneCrashFix.cpp │ │ ├── CompileShaderFix.cpp │ │ ├── DynamicCastFix.cpp │ │ ├── FMODFix.cpp │ │ ├── GeodeNodeMetadata.cpp │ │ ├── ImpostorPlayLayerFix.cpp │ │ ├── LoadingLayer.cpp │ │ ├── MenuLayer.cpp │ │ ├── MessageBoxFix.cpp │ │ ├── ProfilePageFix.cpp │ │ ├── ShutdownFix.cpp │ │ ├── TextInputNodeFix.cpp │ │ ├── WindowsFontCacheFix.cpp │ │ ├── persist.cpp │ │ ├── save.cpp │ │ └── update.cpp │ ├── ids │ │ ├── IDManager.cpp │ │ ├── LoadingLayer.cpp │ │ └── MenuLayer.cpp │ ├── internal │ │ ├── FileWatcher.hpp │ │ ├── FixModIssues.cpp │ │ ├── FixModIssues.hpp │ │ ├── about.cpp.in │ │ ├── about.hpp │ │ ├── crashlog.cpp │ │ └── crashlog.hpp │ ├── load.cpp │ ├── load.hpp │ ├── load.mm │ ├── loader │ │ ├── CopyButtonSetting.cpp │ │ ├── CopyButtonSetting.hpp │ │ ├── Dirs.cpp │ │ ├── Dispatch.cpp │ │ ├── Event.cpp │ │ ├── GameEvent.cpp │ │ ├── Hook.cpp │ │ ├── HookImpl.cpp │ │ ├── HookImpl.hpp │ │ ├── IPC.cpp │ │ ├── IPC.hpp │ │ ├── Loader.cpp │ │ ├── LoaderImpl.cpp │ │ ├── LoaderImpl.hpp │ │ ├── Log.cpp │ │ ├── LogImpl.hpp │ │ ├── Mod.cpp │ │ ├── ModEvent.cpp │ │ ├── ModImpl.cpp │ │ ├── ModImpl.hpp │ │ ├── ModMetadataImpl.cpp │ │ ├── ModMetadataImpl.hpp │ │ ├── ModPatch.cpp │ │ ├── ModPatch.hpp │ │ ├── ModSettingsManager.cpp │ │ ├── Patch.cpp │ │ ├── PatchImpl.cpp │ │ ├── PatchImpl.hpp │ │ ├── SettingNode.hpp │ │ ├── SettingNodeV3.cpp │ │ ├── SettingNodeV3.hpp │ │ ├── SettingV3.cpp │ │ ├── Tulip.cpp │ │ ├── console.hpp │ │ ├── updater.cpp │ │ └── updater.hpp │ ├── platform │ │ ├── android │ │ │ ├── FileWatcher.cpp │ │ │ ├── IPC.cpp │ │ │ ├── LoaderImpl.cpp │ │ │ ├── ModImpl.cpp │ │ │ ├── backtrace │ │ │ │ ├── ScopedFd.hpp │ │ │ │ └── execinfo.hpp │ │ │ ├── console.cpp │ │ │ ├── crashlog.cpp │ │ │ ├── gdstdlib.cpp │ │ │ ├── input.cpp │ │ │ ├── internalString.hpp │ │ │ ├── main.cpp │ │ │ └── util.cpp │ │ ├── ios │ │ │ ├── FileWatcher.mm │ │ │ ├── LoaderImpl.mm │ │ │ ├── ModImpl.cpp │ │ │ ├── crashlog.mm │ │ │ ├── main.mm │ │ │ └── util.mm │ │ ├── mac │ │ │ ├── Cocos2d.cpp │ │ │ ├── FileWatcher.mm │ │ │ ├── LoaderImpl.mm │ │ │ ├── ModImpl.cpp │ │ │ ├── crashlog.mm │ │ │ ├── gdstdlib.cpp │ │ │ ├── main.mm │ │ │ └── util.mm │ │ └── windows │ │ │ ├── FileWatcher.cpp │ │ │ ├── IPC.cpp │ │ │ ├── LoaderImpl.cpp │ │ │ ├── ModImpl.cpp │ │ │ ├── NFD_LICENSE │ │ │ ├── console.cpp │ │ │ ├── crashlog.cpp │ │ │ ├── crashlogWindow.cpp │ │ │ ├── ehdata_structs.hpp │ │ │ ├── gdTimestampMap.hpp │ │ │ ├── info.rc.in │ │ │ ├── main.cpp │ │ │ ├── nfdwin.cpp │ │ │ ├── nfdwin.hpp │ │ │ └── util.cpp │ ├── server │ │ ├── DownloadManager.cpp │ │ ├── DownloadManager.hpp │ │ ├── Server.cpp │ │ └── Server.hpp │ ├── ui │ │ ├── GeodeUI.cpp │ │ ├── GeodeUIEvent.cpp │ │ ├── GeodeUIEvent.hpp │ │ ├── mods │ │ │ ├── GeodeStyle.cpp │ │ │ ├── GeodeStyle.hpp │ │ │ ├── ModsLayer.cpp │ │ │ ├── ModsLayer.hpp │ │ │ ├── SwelvyBG.cpp │ │ │ ├── SwelvyBG.hpp │ │ │ ├── UpdateModListState.cpp │ │ │ ├── UpdateModListState.hpp │ │ │ ├── events │ │ │ │ ├── EventWinnerAnimation.cpp │ │ │ │ └── EventWinnerAnimation.hpp │ │ │ ├── list │ │ │ │ ├── ModDeveloperItem.cpp │ │ │ │ ├── ModDeveloperItem.hpp │ │ │ │ ├── ModDeveloperList.cpp │ │ │ │ ├── ModDeveloperList.hpp │ │ │ │ ├── ModItem.cpp │ │ │ │ ├── ModItem.hpp │ │ │ │ ├── ModList.cpp │ │ │ │ ├── ModList.hpp │ │ │ │ ├── ModProblemItem.cpp │ │ │ │ ├── ModProblemItem.hpp │ │ │ │ ├── ModProblemList.cpp │ │ │ │ └── ModProblemList.hpp │ │ │ ├── popups │ │ │ │ ├── ConfirmInstall.cpp │ │ │ │ ├── ConfirmInstall.hpp │ │ │ │ ├── ConfirmUninstallPopup.cpp │ │ │ │ ├── ConfirmUninstallPopup.hpp │ │ │ │ ├── DevPopup.cpp │ │ │ │ ├── DevPopup.hpp │ │ │ │ ├── FiltersPopup.cpp │ │ │ │ ├── FiltersPopup.hpp │ │ │ │ ├── ModErrorPopup.cpp │ │ │ │ ├── ModErrorPopup.hpp │ │ │ │ ├── ModPopup.cpp │ │ │ │ ├── ModPopup.hpp │ │ │ │ ├── SortPopup.cpp │ │ │ │ └── SortPopup.hpp │ │ │ ├── settings │ │ │ │ ├── ModSettingsPopup.cpp │ │ │ │ └── ModSettingsPopup.hpp │ │ │ ├── sources │ │ │ │ ├── InstalledModListSource.cpp │ │ │ │ ├── ModListSource.cpp │ │ │ │ ├── ModListSource.hpp │ │ │ │ ├── ModPackListSource.cpp │ │ │ │ ├── ModSource.cpp │ │ │ │ ├── ModSource.hpp │ │ │ │ └── ServerModListSource.cpp │ │ │ └── test │ │ │ │ └── UITest.cpp │ │ └── nodes │ │ │ ├── BasedButton.cpp │ │ │ ├── BasedButtonSprite.cpp │ │ │ ├── Border.cpp │ │ │ ├── BreakLine.cpp │ │ │ ├── ColorPickPopup.cpp │ │ │ ├── EnterLayerEvent.cpp │ │ │ ├── General.cpp │ │ │ ├── IconButtonSprite.cpp │ │ │ ├── LazySprite.cpp │ │ │ ├── ListView.cpp │ │ │ ├── LoadingSpinner.cpp │ │ │ ├── MDPopup.cpp │ │ │ ├── MDTextArea.cpp │ │ │ ├── Notification.cpp │ │ │ ├── Popup.cpp │ │ │ ├── SceneManager.cpp │ │ │ ├── ScrollLayer.cpp │ │ │ ├── Scrollbar.cpp │ │ │ ├── TextArea.cpp │ │ │ ├── TextInput.cpp │ │ │ └── TextRenderer.cpp │ └── utils │ │ ├── ColorProvider.cpp │ │ ├── JsonValidation.cpp │ │ ├── PlatformID.cpp │ │ ├── VersionInfo.cpp │ │ ├── addresser.cpp │ │ ├── base64.cpp │ │ ├── cocos.cpp │ │ ├── file.cpp │ │ ├── general.cpp │ │ ├── string.cpp │ │ ├── terminate.cpp │ │ ├── thread.cpp │ │ ├── thread.hpp │ │ ├── time.cpp │ │ └── web.cpp └── test │ ├── CMakeLists.txt │ ├── dependency │ ├── CMakeLists.txt │ ├── main.cpp │ ├── main.hpp │ └── mod.json.in │ └── main │ ├── CMakeLists.txt │ ├── main.cpp │ └── mod.json.in └── title.png /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://editorconfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*.{cpp,hpp,h,c,md,toml,json}] 7 | charset = utf-8 8 | trim_trailing_whitespace = true -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # add clang format (#62) 2 | 11e81e3d64313d319955d9a214ad0ded78985bed 3 | 2bb416ba77f2f01897cc10a1afac40c957feadfc 4 | 5 | # whole lot of whitespace changes 6 | 0cecd677561d1992859f30dc1e233d8d5d83c9ad 7 | 8 | # trim trailing whitespaces 9 | 9603adf8eebd9ea5cc2ff396db64899694de7fd3 10 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | loader/include/Geode/cocos/** linguist-vendored 2 | loader/include/Geode/external/** linguist-vendored 3 | loader/include/Geode/fmod/** linguist-vendored -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Discord link 4 | about: Find us at https://discord.gg/9e43WMKzhp -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yml: -------------------------------------------------------------------------------- 1 | name: Ask a Question 2 | description: Ask a question regarding this project. 3 | labels: [ "question" ] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | If you are in need of quick response, Discord may be a better place. We are quite active on Discord, so you may get responses quicker. 9 | - type: textarea 10 | id: question 11 | attributes: 12 | label: Your Question 13 | description: Feel free to ask any question regarding this project here. 14 | placeholder: "Example: How can I...?" 15 | validations: 16 | required: true 17 | - type: markdown 18 | attributes: 19 | value: Thank you for taking the time to ask me a question. 20 | -------------------------------------------------------------------------------- /.github/actions/build-debug-info/action.yml: -------------------------------------------------------------------------------- 1 | name: Prepare for Build Debug Info 2 | description: Provides debug info for the build process 3 | 4 | inputs: 5 | has-sccache: 6 | description: 'Whether the build action has sccache' 7 | required: true 8 | outputs: 9 | extra-configure: 10 | description: 'Extra stuff for CMake configure step' 11 | value: | 12 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 13 | cp ./build/compile_commands.json ./build-debug-info/ 14 | extra-build: 15 | description: 'Extra stuff for CMake build step' 16 | value: | 17 | python3 ./ninjatracing/ninjatracing ./build/.ninja_log > ./build-debug-info/ninja-trace.json 18 | ${{ inputs.has-sccache && 'sccache --show-adv-stats' || '' }} 19 | 20 | runs: 21 | using: "composite" 22 | steps: 23 | - name: Prepare 24 | shell: bash 25 | run: | 26 | mkdir ./build-debug-info 27 | echo "SCCACHE_ERROR_LOG=$GITHUB_WORKSPACE/build-debug-info/sccache-log.txt" >> $GITHUB_ENV 28 | echo "SCCACHE_LOG=debug" >> $GITHUB_ENV 29 | echo "RUST_BACKTRACE=1" >> $GITHUB_ENV 30 | 31 | - name: Checkout ninjatracing 32 | uses: actions/checkout@v4 33 | with: 34 | repository: 'nico/ninjatracing' 35 | path: ninjatracing 36 | submodules: recursive 37 | -------------------------------------------------------------------------------- /.github/actions/setup-dump-sym/action.yml: -------------------------------------------------------------------------------- 1 | name: Setup Breakpad Dump Symbols 2 | description: Sets up + builds the dump_syms utility from Breakpad 3 | 4 | inputs: 5 | dump_syms_version: 6 | description: "Revision of mozilla/dump_syms repository to fetch" 7 | required: true 8 | default: "v2.3.3" 9 | outputs: 10 | binary-path: 11 | description: "Path of the dump_syms utility, including the executable." 12 | value: ${{ steps.get-path.outputs.binary-path }} 13 | 14 | runs: 15 | using: "composite" 16 | steps: 17 | - uses: dtolnay/rust-toolchain@stable 18 | id: toolchain 19 | 20 | - uses: actions/cache@v4 21 | id: binary-cache 22 | with: 23 | path: "./dump_syms/target/release/dump_syms" 24 | key: dump_syms-${{ inputs.dump_syms_version }}-${{steps.toolchain.outputs.cachekey}} 25 | 26 | - uses: actions/checkout@v4 27 | if: steps.binary-cache.outputs.cache-hit != 'true' 28 | with: 29 | repository: "mozilla/dump_syms" 30 | ref: ${{ inputs.dump_syms_version }} 31 | path: "./dump_syms" 32 | 33 | - run: cargo build --release 34 | shell: bash 35 | if: steps.binary-cache.outputs.cache-hit != 'true' 36 | working-directory: "./dump_syms" 37 | 38 | - run: echo "binary-path=$(realpath target/release/dump_syms)" >> "$GITHUB_OUTPUT" 39 | shell: bash 40 | id: get-path 41 | working-directory: "./dump_syms" 42 | -------------------------------------------------------------------------------- /.github/actions/setup-ninja/action.yml: -------------------------------------------------------------------------------- 1 | name: Setup Ninja 2 | description: Sets up Ninja 3 | 4 | inputs: 5 | host: 6 | description: 'Host platform: win, mac or linux' 7 | required: true 8 | 9 | runs: 10 | using: "composite" 11 | steps: 12 | - name: Setup 13 | shell: bash 14 | run: | 15 | curl -L https://github.com/ninja-build/ninja/releases/latest/download/ninja-${{ inputs.host }}.zip -o ninja.zip 16 | 7z x ninja.zip -o"$GITHUB_WORKSPACE/ninja" 17 | echo "$GITHUB_WORKSPACE/ninja" >> $GITHUB_PATH 18 | -------------------------------------------------------------------------------- /.github/scripts/parse-release.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import json 3 | import os 4 | 5 | platform_info = { 6 | "win": None, 7 | "android": None, 8 | "mac": None, 9 | "ios": None, 10 | } 11 | 12 | in_parse_section = False 13 | with open("CMakeLists.txt", "r") as f: 14 | for line in f: 15 | if line == "# end GEODE_GD_VERSION\n": 16 | in_parse_section = False 17 | break 18 | 19 | if in_parse_section: 20 | [platform, version] = [x.strip() for x in line.removeprefix("#").split(":")] 21 | if platform in platform_info: 22 | platform_info[platform] = version 23 | else: 24 | print(f"WARNING: unknown platform {platform} with version {version}") 25 | 26 | if line == "# begin GEODE_GD_VERSION\n": 27 | in_parse_section = True 28 | 29 | for k, v in platform_info.items(): 30 | if not v: 31 | print(f"WARNING: missing version for platform {k}") 32 | else: 33 | print(f"{k}: {v}") 34 | 35 | env_file = os.getenv("GITHUB_OUTPUT") 36 | with open(env_file, "a") as gh_env: 37 | data = json.dumps(platform_info) 38 | gh_env.write(f"PLATFORM_INFO< 4 | #include 5 | #include 6 | 7 | std::string calculateSHA3_256(std::filesystem::path const& path); 8 | 9 | std::string calculateSHA256(std::filesystem::path const& path); 10 | 11 | std::string calculateSHA256Text(std::filesystem::path const& path); 12 | 13 | /** 14 | * Calculates the SHA256 hash of the given data, 15 | * used for verifying mods. 16 | */ 17 | std::string calculateHash(std::span data); 18 | -------------------------------------------------------------------------------- /loader/include/Geode/Bindings.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifdef _MSC_VER 4 | #pragma warning(disable : 4251) // dll-interface 5 | #pragma warning(disable : 4099) // type first seen as 'class' 6 | #pragma warning(disable : 4584) // CCKeyboardDelegate included twice in UILayer 7 | #endif 8 | 9 | #include 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | #define CLASSPARAM(...) 22 | #define STRUCTPARAM(...) 23 | 24 | #include 25 | -------------------------------------------------------------------------------- /loader/include/Geode/Geode.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Bindings.hpp" 4 | #include "Loader.hpp" 5 | #include "UI.hpp" 6 | #include "Utils.hpp" 7 | #include "modify/Modify.hpp" // doesn't include generated modify 8 | -------------------------------------------------------------------------------- /loader/include/Geode/Loader.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "loader/Hook.hpp" 4 | #include "loader/Loader.hpp" 5 | #include "loader/Log.hpp" 6 | #include "loader/Mod.hpp" 7 | #include "loader/ModEvent.hpp" 8 | #include "loader/EventV2.hpp" 9 | #include "loader/Setting.hpp" 10 | #include "loader/Dirs.hpp" 11 | 12 | #include 13 | -------------------------------------------------------------------------------- /loader/include/Geode/Modify.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "modify/Modify.hpp" 4 | 5 | #include 6 | 7 | using namespace geode::modifier; -------------------------------------------------------------------------------- /loader/include/Geode/Prelude.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Because C++ doesn't like using 4 | // namespaces that don't exist 5 | namespace geode { 6 | namespace addresser {} 7 | namespace cast {} 8 | namespace cocos {} 9 | namespace utils {} 10 | namespace helper {} 11 | namespace op {} 12 | namespace stream {} 13 | namespace view {} 14 | } 15 | 16 | namespace cocos2d { 17 | namespace extension {} 18 | } 19 | 20 | namespace geode { 21 | namespace prelude { 22 | using namespace ::geode; 23 | using namespace ::geode::addresser; 24 | using namespace ::geode::cast; 25 | using namespace ::geode::cocos; 26 | using namespace ::geode::helper; 27 | using namespace ::geode::utils; 28 | using namespace ::geode::op; 29 | using namespace ::geode::stream; 30 | using namespace ::geode::view; 31 | using namespace ::cocos2d; 32 | using namespace ::cocos2d::extension; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /loader/include/Geode/UI.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ui/BasedButton.hpp" 4 | #include "ui/BasedButtonSprite.hpp" 5 | #include "ui/Border.hpp" 6 | #include "ui/BreakLine.hpp" 7 | #include "ui/ColorPickPopup.hpp" 8 | #include "ui/EnterLayerEvent.hpp" 9 | #include "ui/SpacerNode.hpp" 10 | #include "ui/General.hpp" 11 | #include "ui/IconButtonSprite.hpp" 12 | #include "ui/Layout.hpp" 13 | #include "ui/LazySprite.hpp" 14 | #include "ui/ListView.hpp" 15 | #include "ui/LoadingSpinner.hpp" 16 | #include "ui/MDPopup.hpp" 17 | #include "ui/MDTextArea.hpp" 18 | #include "ui/Notification.hpp" 19 | #include "ui/Popup.hpp" 20 | #include "ui/SceneManager.hpp" 21 | #include "ui/Scrollbar.hpp" 22 | #include "ui/ScrollLayer.hpp" 23 | #include "ui/SelectList.hpp" 24 | #include "ui/SimpleAxisLayout.hpp" 25 | #include "ui/SpacerNode.hpp" 26 | #include "ui/TextArea.hpp" 27 | #include "ui/TextInput.hpp" 28 | #include "ui/TextRenderer.hpp" 29 | -------------------------------------------------------------------------------- /loader/include/Geode/Utils.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "DefaultInclude.hpp" 4 | #include "utils/VersionInfo.hpp" 5 | #include "utils/ranges.hpp" 6 | #include "utils/casts.hpp" 7 | #include "utils/cocos.hpp" 8 | #include "utils/map.hpp" 9 | #include "utils/string.hpp" 10 | #include "utils/file.hpp" 11 | #include "utils/permission.hpp" 12 | #include "utils/general.hpp" 13 | #include "utils/timer.hpp" 14 | #include "utils/ObjcHook.hpp" 15 | -------------------------------------------------------------------------------- /loader/include/Geode/c++stl/aliastl.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | namespace gd { 10 | template 11 | using vector = std::vector; 12 | 13 | template 14 | using map = std::map; 15 | 16 | template 17 | using unordered_map = std::unordered_map; 18 | 19 | template 20 | using set = std::set; 21 | 22 | template 23 | using unordered_set = std::unordered_set; 24 | 25 | template 26 | using pair = std::pair; 27 | } -------------------------------------------------------------------------------- /loader/include/Geode/c++stl/gdstdlib.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "string.hpp" 6 | 7 | #if defined(GEODE_IS_ANDROID) 8 | #include "gnustl.hpp" 9 | #else 10 | #include "aliastl.hpp" 11 | #endif 12 | -------------------------------------------------------------------------------- /loader/include/Geode/c++stl/gnustl/c++config.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #if UINTPTR_MAX > 0xffffffff 6 | # include "c++config-arm64.h" 7 | #else 8 | # include "c++config-armeabi-v7a.h" 9 | #endif 10 | 11 | #include "type_traits.h" 12 | 13 | #define _GLIBCXX_NODISCARD __attribute__ ((__warn_unused_result__)) 14 | #define _GLIBCXX20_CONSTEXPR constexpr 15 | #define _GLIBCXX17_CONSTEXPR constexpr 16 | #define _GLIBCXX14_CONSTEXPR constexpr 17 | #define _GLIBCXX_NOEXCEPT_IF(...) noexcept(__VA_ARGS__) 18 | 19 | # define __glibcxx_requires_valid_range(_First,_Last) -------------------------------------------------------------------------------- /loader/include/Geode/c++stl/gnustl/hash_specialization.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "functional_hash.h" 3 | 4 | namespace geode::stl { 5 | template <> 6 | struct hash : public __hash_base { 7 | size_t operator()(const gd::string& s) const noexcept { 8 | return _Hash_impl::hash(s.data(), s.size()); 9 | } 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/.gitignore: -------------------------------------------------------------------------------- 1 | # Macos be like 2 | **/.DS_Store 3 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.21) 2 | 3 | project(cocos-headers CXX) 4 | 5 | add_library(cocos2d INTERFACE) 6 | 7 | target_include_directories(cocos2d INTERFACE 8 | include 9 | extensions 10 | ) 11 | 12 | target_link_libraries(cocos2d INTERFACE 13 | ${GEODE_LOADER_PATH}/include/link/libcocos2d.lib 14 | ${GEODE_LOADER_PATH}/include/link/libExtensions.lib 15 | ) 16 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/cocoa/CCInteger.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCINTEGER_H__ 2 | #define __CCINTEGER_H__ 3 | 4 | #include "CCObject.h" 5 | 6 | NS_CC_BEGIN 7 | 8 | /** 9 | * @addtogroup data_structures 10 | * @{ 11 | * @js NA 12 | */ 13 | 14 | class CC_DLL CCInteger : public CCObject 15 | { 16 | GEODE_FRIEND_MODIFY 17 | public: 18 | CCInteger(int v) 19 | : m_nValue(v) {} 20 | int getValue() const {return m_nValue;} 21 | void setValue(int v) { m_nValue = v; }; 22 | 23 | static CCInteger* create(int v) 24 | { 25 | CCInteger* pRet = new CCInteger(v); 26 | pRet->autorelease(); 27 | return pRet; 28 | } 29 | 30 | /* override functions 31 | * @lua NA 32 | */ 33 | virtual void acceptVisitor(CCDataVisitor &visitor) { visitor.visit(this); } 34 | 35 | public: 36 | int m_nValue; 37 | }; 38 | 39 | // end of data_structure group 40 | /// @} 41 | 42 | NS_CC_END 43 | 44 | #endif /* __CCINTEGER_H__ */ 45 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/extensions/cocos-ext.h: -------------------------------------------------------------------------------- 1 | #ifndef __COCOS2D_EXT_H__ 2 | #define __COCOS2D_EXT_H__ 3 | 4 | #include "ExtensionMacros.h" 5 | #include "../include/ccMacros.h" 6 | 7 | #include "GUI/CCControlExtension/CCControlExtensions.h" 8 | #include "GUI/CCScrollView/CCScrollView.h" 9 | #include "GUI/CCScrollView/CCTableView.h" 10 | #include "GUI/CCEditBox/CCEditBox.h" 11 | 12 | #include "network/HttpRequest.h" 13 | #include "network/HttpResponse.h" 14 | #include "network/HttpClient.h" 15 | 16 | 17 | // Physics integration 18 | #if CC_ENABLE_CHIPMUNK_INTEGRATION || CC_ENABLE_BOX2D_INTEGRATION 19 | #include "physics_nodes/CCPhysicsDebugNode.h" 20 | #include "physics_nodes/CCPhysicsSprite.h" 21 | #endif 22 | 23 | #ifndef RT_ADD 24 | #include "spine/spine-cocos2dx.h" 25 | #endif 26 | 27 | #endif /* __COCOS2D_EXT_H__ */ 28 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/extensions/libExtensions.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/Geode/cocos/extensions/libExtensions.lib -------------------------------------------------------------------------------- /loader/include/Geode/cocos/include/CCEventType.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __CCEVENT_TYPE_H__ 3 | #define __CCEVENT_TYPE_H__ 4 | 5 | /** 6 | * This header is used for defining event types using in CCNotificationCenter 7 | */ 8 | 9 | // The application will come to foreground. 10 | // This message is used for reloading resources before come to foreground on Android. 11 | // This message is posted in main.cpp. 12 | #define EVENT_COME_TO_FOREGROUND "event_come_to_foreground" 13 | 14 | // The application will come to background. 15 | // This message is used for doing something before coming to background, such as save CCRenderTexture. 16 | // This message is posted in cocos2dx/platform/android/jni/MessageJni.cpp. 17 | #define EVENT_COME_TO_BACKGROUND "event_come_to_background" 18 | 19 | #endif // __CCEVENT_TYPE_H__ 20 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/CCAccelerometer.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __CC_ACCELEROMETER_GENERIC_H__ 3 | #define __CC_ACCELEROMETER_GENERIC_H__ 4 | 5 | #include "CCPlatformConfig.h" 6 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 7 | #include "win32/CCAccelerometer.h" 8 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 9 | #include "ios/CCAccelerometer.h" 10 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 11 | #include "android/CCAccelerometer.h" 12 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) 13 | #include "mac/CCAccelerometer.h" 14 | #endif 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/CCDevice.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCDEVICE_H__ 2 | #define __CCDEVICE_H__ 3 | 4 | #include "CCPlatformMacros.h" 5 | 6 | NS_CC_BEGIN 7 | /** 8 | @js NA 9 | @lua NA 10 | */ 11 | class CC_DLL CCDevice 12 | { 13 | GEODE_FRIEND_MODIFY 14 | private: 15 | 16 | 17 | CCDevice(); 18 | public: 19 | GEODE_CUSTOM_CONSTRUCTOR_BEGIN(CCDevice) 20 | /** 21 | * Gets the DPI of device 22 | * @return The DPI of device. 23 | */ 24 | static int getDPI(); 25 | }; 26 | 27 | 28 | NS_CC_END 29 | 30 | #endif /* __CCDEVICE_H__ */ 31 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/CCGL.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __CC_GL_GENERIC_H__ 3 | #define __CC_GL_GENERIC_H__ 4 | 5 | #include "CCPlatformConfig.h" 6 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 7 | #include "win32/CCGL.h" 8 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 9 | #include "ios/CCGL.h" 10 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 11 | #include "android/CCGL.h" 12 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) 13 | #include "mac/CCGL.h" 14 | #endif 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/CCPlatformDefine.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __CC_PLATFORM_DEFINE_GENERIC_H__ 3 | #define __CC_PLATFORM_DEFINE_GENERIC_H__ 4 | 5 | #include "CCPlatformConfig.h" 6 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 7 | #include "win32/CCPlatformDefine.h" 8 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 9 | #include "ios/CCPlatformDefine.h" 10 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 11 | #include "android/CCPlatformDefine.h" 12 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) 13 | #include "mac/CCPlatformDefine.h" 14 | #endif 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/CCStdC.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef __CC_STD_C_GENERIC_H__ 3 | #define __CC_STD_C_GENERIC_H__ 4 | 5 | #include "CCPlatformConfig.h" 6 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 7 | #include "win32/CCStdC.h" 8 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 9 | #include "ios/CCStdC.h" 10 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 11 | #include "android/CCStdC.h" 12 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) 13 | #include "mac/CCStdC.h" 14 | #endif 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/IncludeCurl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CCPlatformConfig.h" 4 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 5 | #include "third_party/win32/curl/curl.h" 6 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 7 | // nothing? 8 | #include "third_party/ios/curl/curl.h" 9 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID && __arm__) 10 | #include "third_party/android/prebuilt/libcurl/include/curl/curl.h" 11 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID && __aarch64__) 12 | #include "third_party/android64/prebuilt/libcurl/include/curl/curl.h" 13 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) 14 | // nothing? 15 | #include 16 | #endif 17 | 18 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/IncludeJpegLib.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CCPlatformConfig.h" 4 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 5 | #include "third_party/win32/libjpeg/jpeglib.h" 6 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 7 | // nothing? 8 | #include 9 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID && __arm__) 10 | #include "third_party/android/prebuilt/libjpeg/include/jpeglib.h" 11 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID && __aarch64__) 12 | #include "third_party/android64/prebuilt/libjpeg/include/jpeglib.h" 13 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) 14 | // nothing? 15 | #include 16 | #endif 17 | 18 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/IncludePThread.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CCPlatformConfig.h" 4 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 5 | #include "third_party/win32/pthread/pthread.h" 6 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 7 | // nothing? 8 | #include 9 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 10 | // nothing? 11 | #include 12 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) 13 | // nothing? 14 | #include 15 | #endif 16 | 17 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/IncludeTiffio.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CCPlatformConfig.h" 4 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 5 | #include "third_party/win32/libtiff/tiffio.h" 6 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 7 | // nothing? 8 | #include 9 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID && __arm__) 10 | #include "third_party/android/prebuilt/libtiff/include/tiffio.h" 11 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID && __aarch64__) 12 | #include "third_party/android64/prebuilt/libtiff/include/tiffio.h" 13 | #elif (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) 14 | // nothing? 15 | #include 16 | #endif 17 | 18 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/IncludeZlib.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CCPlatformConfig.h" 4 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 5 | #include "third_party/win32/zlib/zlib.h" 6 | #else 7 | #include 8 | // i don't know where other platform get zlib 9 | #endif 10 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/CCDevice.cpp: -------------------------------------------------------------------------------- 1 | #include "../platform/CCDevice.h" 2 | #include "jni/DPIJni.h" 3 | 4 | NS_CC_BEGIN 5 | 6 | int CCDevice::getDPI() 7 | { 8 | static int dpi = -1; 9 | if (dpi == -1) 10 | { 11 | dpi = (int)getDPIJNI(); 12 | } 13 | return dpi; 14 | } 15 | 16 | NS_CC_END 17 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/java/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/java/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | libcocos2dx 4 | 5 | 6 | 7 | 8 | 9 | com.android.ide.eclipse.adt.ResourceManagerBuilder 10 | 11 | 12 | 13 | 14 | com.android.ide.eclipse.adt.PreCompilerBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.jdt.core.javabuilder 20 | 21 | 22 | 23 | 24 | com.android.ide.eclipse.adt.ApkBuilder 25 | 26 | 27 | 28 | 29 | 30 | com.android.ide.eclipse.adt.AndroidNature 31 | org.eclipse.jdt.core.javanature 32 | 33 | 34 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/java/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/java/ant.properties: -------------------------------------------------------------------------------- 1 | # This file is used to override default values used by the Ant build system. 2 | # 3 | # This file must be checked into Version Control Systems, as it is 4 | # integral to the build system of your project. 5 | 6 | # This file is only used by the Ant script. 7 | 8 | # You can use this to override default values such as 9 | # 'source.dir' for the location of your java source folder and 10 | # 'out.dir' for the location of your output folder. 11 | 12 | # You can also use it define how the release builds are signed by declaring 13 | # the following properties: 14 | # 'key.store' for the location of your keystore and 15 | # 'key.alias' for the name of the key to use. 16 | # The password will be asked during the build when you use the 'release' target. 17 | 18 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/java/proguard-project.txt: -------------------------------------------------------------------------------- 1 | # To enable ProGuard in your project, edit project.properties 2 | # to define the proguard.config property as described in that file. 3 | # 4 | # Add project specific ProGuard rules here. 5 | # By default, the flags in this file are appended to flags specified 6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt 7 | # You can edit the include path and order by changing the ProGuard 8 | # include property in project.properties. 9 | # 10 | # For more details, see 11 | # http://developer.android.com/guide/developing/tools/proguard.html 12 | 13 | # Add any project specific keep options here: 14 | 15 | # If your project uses WebView with JS, uncomment the following 16 | # and specify the fully qualified class name to the JavaScript interface 17 | # class: 18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 19 | # public *; 20 | #} 21 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/java/project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system edit 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | # 10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 12 | 13 | android.library=true 14 | # Project target. 15 | target=android-8 16 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/java/res/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/Geode/cocos/platform/android/java/res/.gitignore -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/jni/DPIJni.cpp: -------------------------------------------------------------------------------- 1 | #include "DPIJni.h" 2 | #include "jni/JniHelper.h" 3 | 4 | USING_NS_CC; 5 | 6 | extern "C" { 7 | 8 | int getDPIJNI() 9 | { 10 | JniMethodInfo t; 11 | jint ret = -1; 12 | if (JniHelper::getStaticMethodInfo(t, "org/cocos2dx/lib/Cocos2dxHelper", "getDPI", "()I")) { 13 | ret = t.env->CallStaticIntMethod(t.classID, t.methodID); 14 | t.env->DeleteLocalRef(t.classID); 15 | } 16 | return ret; 17 | } 18 | 19 | } // extern "C" -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/jni/DPIJni.h: -------------------------------------------------------------------------------- 1 | #ifndef __DPIJNI_H__ 2 | #define __DPIJNI_H__ 3 | 4 | extern "C" { 5 | 6 | int getDPIJNI(); 7 | 8 | } // extern "C" 9 | 10 | #endif /* __DPIJNI_H__ */ 11 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxAccelerometer.cpp: -------------------------------------------------------------------------------- 1 | #include "../cocoa/CCGeometry.h" 2 | #include "platform/android/CCAccelerometer.h" 3 | #include "../CCEGLView.h" 4 | #include "JniHelper.h" 5 | #include 6 | #include "CCDirector.h" 7 | 8 | using namespace cocos2d; 9 | 10 | extern "C" { 11 | JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxAccelerometer_onSensorChanged(JNIEnv* env, jobject thiz, jfloat x, jfloat y, jfloat z, jlong timeStamp) { 12 | CCDirector* pDirector = CCDirector::sharedDirector(); 13 | pDirector->getAccelerometer()->update(x, y, z, timeStamp); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/ios/CCDevice.mm: -------------------------------------------------------------------------------- 1 | #include "CCDevice.h" 2 | #import 3 | 4 | NS_CC_BEGIN 5 | 6 | int CCDevice::getDPI() 7 | { 8 | static int dpi = -1; 9 | 10 | if (dpi == -1) 11 | { 12 | float scale = 1.0f; 13 | 14 | if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { 15 | scale = [[UIScreen mainScreen] scale]; 16 | } 17 | 18 | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 19 | dpi = 132 * scale; 20 | } else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 21 | dpi = 163 * scale; 22 | } else { 23 | dpi = 160 * scale; 24 | } 25 | } 26 | return dpi; 27 | } 28 | 29 | NS_CC_END 30 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/ios/CCPlatformDefine.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCPLATFORMDEFINE_H__ 2 | #define __CCPLATFORMDEFINE_H__ 3 | 4 | #include 5 | 6 | #define CC_DLL //__attribute__((visibility("hidden"))) 7 | #define ACTUAL_CC_DLL 8 | 9 | #define CC_ASSERT(cond) assert(cond) 10 | 11 | 12 | #define CC_UNUSED_PARAM(unusedparam) (void)unusedparam 13 | 14 | /* Define NULL pointer value */ 15 | #ifndef NULL 16 | #ifdef __cplusplus 17 | #define NULL 0 18 | #else 19 | #define NULL ((void *)0) 20 | #endif 21 | #endif 22 | 23 | 24 | 25 | #endif /* __CCPLATFORMDEFINE_H__*/ 26 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/mac/CCDevice.mm: -------------------------------------------------------------------------------- 1 | #include "../platform/CCDevice.h" 2 | 3 | NS_CC_BEGIN 4 | 5 | int CCDevice::getDPI() 6 | { 7 | //TODO: 8 | return 160; 9 | } 10 | 11 | NS_CC_END 12 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/mac/CCPlatformDefine.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCPLATFORMDEFINE_H__ 2 | #define __CCPLATFORMDEFINE_H__ 3 | 4 | #include 5 | 6 | #define CC_DLL //__attribute__((visibility("hidden"))) 7 | #define ACTUAL_CC_DLL 8 | 9 | 10 | #if CC_DISABLE_ASSERT > 0 11 | #define CC_ASSERT(cond) 12 | #else 13 | #define CC_ASSERT(cond) assert(cond) 14 | #endif 15 | 16 | #define CC_UNUSED_PARAM(unusedparam) (void)unusedparam 17 | 18 | /* Define NULL pointer value */ 19 | #ifndef NULL 20 | #ifdef __cplusplus 21 | #define NULL 0 22 | #else 23 | #define NULL ((void *)0) 24 | #endif 25 | #endif 26 | 27 | 28 | 29 | #endif /* __CCPLATFORMDEFINE_H__*/ 30 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/android/prebuilt/libcurl/include/curl/types.h: -------------------------------------------------------------------------------- 1 | /* not used */ 2 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/android/prebuilt/libpng/include/png.h.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | d379dead7addc477467d2ac1e1476a6570d96345 -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/android/prebuilt/libpng/include/pngusr.h: -------------------------------------------------------------------------------- 1 | #define PNG_USER_PRIVATEBUILD "Skia build; no MNG features" 2 | #define PNG_USER_DLLFNAME_POSTFIX "Sk" 3 | #define PNG_NO_MNG_FEATURES 4 | #define PNG_NO_READ_GAMMA 5 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/android/prebuilt/libtiff/include/tiffvers.h: -------------------------------------------------------------------------------- 1 | #define TIFFLIB_VERSION_STR "LIBTIFF, Version 3.9.2\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." 2 | /* 3 | * This define can be used in code that requires 4 | * compilation-related definitions specific to a 5 | * version or versions of the library. Runtime 6 | * version checking should be done based on the 7 | * string returned by TIFFGetVersion. 8 | */ 9 | #define TIFFLIB_VERSION 20091104 10 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/android64/prebuilt/libcurl/include/curl/types.h: -------------------------------------------------------------------------------- 1 | /* not used */ 2 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/android64/prebuilt/libpng/include/png.h.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | d379dead7addc477467d2ac1e1476a6570d96345 -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/android64/prebuilt/libpng/include/pngusr.h: -------------------------------------------------------------------------------- 1 | #define PNG_USER_PRIVATEBUILD "Skia build; no MNG features" 2 | #define PNG_USER_DLLFNAME_POSTFIX "Sk" 3 | #define PNG_NO_MNG_FEATURES 4 | #define PNG_NO_READ_GAMMA 5 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/android64/prebuilt/libtiff/include/tiffvers.h: -------------------------------------------------------------------------------- 1 | #define TIFFLIB_VERSION_STR "LIBTIFF, Version 3.9.2\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." 2 | /* 3 | * This define can be used in code that requires 4 | * compilation-related definitions specific to a 5 | * version or versions of the library. Runtime 6 | * version checking should be done based on the 7 | * string returned by TIFFGetVersion. 8 | */ 9 | #define TIFFLIB_VERSION 20091104 10 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/ios/libraries/libcurl.a.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | c135286e812602cc184684b59b4d074f723ef4a5 -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/ios/libraries/libwebp.a.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | c26c3c22887023d322926dcbbd0f69377deedaf8 -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/mac/libraries/libwebp.a.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | 98a9f91fff796092bb7afab1f50fb11c3fe696d9 -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/win32/libpng/png.h.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | 643b7d7658d92033567b857d7e4cee5f1e22ba6a -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/win32/libraries/glew32.dll.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | cbce7da7692ddd7eb16880ec7b05e0faa8139c1a -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/win32/libraries/glew32.lib.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | 03be6ad746e36147d633ec0e6a55e6bdb30a3a9d -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/win32/libraries/iconv.dll.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | df718829fc0141a05d8a2b2dee34b24a0f61bb2c -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/win32/libraries/libcurl.dll.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | 9f7be42cbdf2ecadd9209f4c0e1b0b9359bba4c8 -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/win32/libraries/libjpeg.lib.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | 8b248b13bee6428a3dd5c23d276c7d67d14a7c29 -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/win32/libraries/libpng.lib.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | 3563d99402fdc14accccc23688caa88b545fc439 -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/win32/libraries/libtiff.dll.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | b93dbf63b6d3b716e3fa8d261ea7fda90117e4bf -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/win32/libraries/libwebp.lib.REMOVED.git-id: -------------------------------------------------------------------------------- 1 | 57782b915d0ed9f5a96dabe430122d7d04dbff36 -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/third_party/win32/libtiff/tiffvers.h: -------------------------------------------------------------------------------- 1 | #define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.0.1\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." 2 | /* 3 | * This define can be used in code that requires 4 | * compilation-related definitions specific to a 5 | * version or versions of the library. Runtime 6 | * version checking should be done based on the 7 | * string returned by TIFFGetVersion. 8 | */ 9 | #define TIFFLIB_VERSION 20120218 10 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/win32/CCControllerState.h: -------------------------------------------------------------------------------- 1 | #ifndef __CC_CONTROLLER_STATE_WIN32_H__ 2 | #define __CC_CONTROLLER_STATE_WIN32_H__ 3 | 4 | #include "../../include/ccMacros.h" 5 | #include "CCStdC.h" 6 | 7 | NS_CC_BEGIN 8 | 9 | class CC_DLL CCControllerState 10 | { 11 | GEODE_FRIEND_MODIFY 12 | public: 13 | DWORD m_packetNumber; 14 | WORD m_buttons; 15 | unsigned char m_leftTrigger; 16 | unsigned char m_rightTrigger; 17 | short m_thumbLX; 18 | short m_thumbLY; 19 | short m_thumbRX; 20 | short m_thumbRY; 21 | }; 22 | 23 | NS_CC_END 24 | 25 | #endif -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/win32/CCPlatformDefine.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCPLATFORMDEFINE_H__ 2 | #define __CCPLATFORMDEFINE_H__ 3 | 4 | #ifdef __MINGW32__ 5 | #include 6 | #endif 7 | 8 | 9 | 10 | #if defined(_USRDLL) 11 | #define CC_DLL 12 | #define ACTUAL_CC_DLL 13 | #else // use a DLL library 14 | #define CC_DLL 15 | #define ACTUAL_CC_DLL __declspec(dllimport) 16 | #endif 17 | 18 | #include 19 | 20 | #if CC_DISABLE_ASSERT > 0 21 | #define CC_ASSERT(cond) 22 | #else 23 | #define CC_ASSERT(cond) assert(cond) 24 | #endif 25 | #define CC_UNUSED_PARAM(unusedparam) (void)unusedparam 26 | 27 | /* Define NULL pointer value */ 28 | #ifndef NULL 29 | #ifdef __cplusplus 30 | #define NULL 0 31 | #else 32 | #define NULL ((void *)0) 33 | #endif 34 | #endif 35 | 36 | 37 | 38 | #endif /* __CCPLATFORMDEFINE_H__*/ 39 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/platform/win32/CXBOXController.h: -------------------------------------------------------------------------------- 1 | #ifndef __CXBOXCONTROLLER_WIN32_H__ 2 | #define __CXBOXCONTROLLER_WIN32_H__ 3 | 4 | #include "../../include/ccMacros.h" 5 | #include "CCStdC.h" 6 | #include "CCControllerState.h" 7 | #include 8 | 9 | class CC_DLL CXBOXController 10 | { 11 | GEODE_FRIEND_MODIFY 12 | public: 13 | //CCControllerHandler(); 14 | //CCControllerState getState(); 15 | //void updateConnected(); 16 | 17 | XINPUT_STATE m_xinputState; 18 | int m_userIndex; 19 | bool m_controllerConnected; 20 | bool m_dpadUp; 21 | bool m_dpadDown; 22 | bool m_dpadLeft; 23 | bool m_dpadRight; 24 | bool m_start; 25 | bool m_back; 26 | bool m_lt; 27 | bool m_rt; 28 | bool m_lb; 29 | bool m_rb; 30 | bool m_buttonA; 31 | bool m_buttonB; 32 | bool m_buttonX; 33 | bool m_buttonY; 34 | }; 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/robtop/content/CCContentManager.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCCONTENT_MANAGER_H__ 2 | #define __CCCONTENT_MANAGER_H__ 3 | 4 | #include "../../include/ccMacros.h" 5 | #include "../../cocoa/CCObject.h" 6 | #include "../../cocoa/CCDictionary.h" 7 | 8 | 9 | // not in cocos2d namespace 10 | // @note RobTop Addition 11 | class CC_DLL CCContentManager : public cocos2d::CCObject 12 | { 13 | public: 14 | static CCContentManager* sharedManager(); 15 | CCContentManager() {} 16 | GEODE_CUSTOM_CONSTRUCTOR_COCOS(CCContentManager, CCObject) 17 | 18 | bool init(); 19 | 20 | cocos2d::CCDictionary* addDict(const char* dict, bool unk); 21 | cocos2d::CCDictionary* addDictDS(const char* dict); 22 | 23 | void clearCache(); 24 | public: 25 | cocos2d::CCDictionary* m_pDictCache; 26 | }; 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/robtop/mouse_dispatcher/CCMouseDelegate.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCMOUSE_DELEGATE_H__ 2 | #define __CCMOUSE_DELEGATE_H__ 3 | 4 | #include "../../include/ccMacros.h" 5 | #include "../../cocoa/CCObject.h" 6 | 7 | NS_CC_BEGIN 8 | 9 | // @note RobTop Addition 10 | class CC_DLL CCMouseDelegate 11 | { 12 | public: 13 | virtual void rightKeyDown() {} 14 | 15 | virtual void rightKeyUp() {} 16 | 17 | virtual void scrollWheel(float x, float y) {} 18 | 19 | //pretty certain there's no fields, based on initializer 20 | }; 21 | 22 | // @note RobTop Addition 23 | class CC_DLL CCMouseHandler : public CCObject 24 | { 25 | public: 26 | GEODE_CUSTOM_CONSTRUCTOR_COCOS(CCMouseHandler, CCObject) 27 | inline CCMouseHandler() = default; 28 | 29 | virtual ~CCMouseHandler(); 30 | 31 | CCMouseHandler& operator=(const CCMouseHandler&); 32 | 33 | CCMouseDelegate* getDelegate(); 34 | 35 | static CCMouseHandler* handlerWithDelegate(CCMouseDelegate* pDelegate); 36 | 37 | virtual bool initWithDelegate(CCMouseDelegate* pDelegate); 38 | 39 | void setDelegate(CCMouseDelegate* pDelegate); 40 | 41 | public: 42 | CCMouseDelegate* m_pDelegate; 43 | }; 44 | 45 | NS_CC_END 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/robtop/mouse_dispatcher/CCMouseDispatcher.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCMOUSE_DISPATCHER_H__ 2 | #define __CCMOUSE_DISPATCHER_H__ 3 | 4 | #include "CCMouseDelegate.h" 5 | #include "../../cocoa/CCArray.h" 6 | 7 | NS_CC_BEGIN 8 | 9 | // @note RobTop Addition 10 | class CC_DLL CCMouseDispatcher : public CCObject 11 | { 12 | GEODE_FRIEND_MODIFY 13 | public: 14 | GEODE_CUSTOM_CONSTRUCTOR_COCOS(CCMouseDispatcher, CCObject) 15 | CCMouseDispatcher(); 16 | virtual ~CCMouseDispatcher(); 17 | 18 | void addDelegate(CCMouseDelegate* pDelegate); 19 | 20 | void removeDelegate(CCMouseDelegate* pDelegate); 21 | 22 | void forceAddDelegate(CCMouseDelegate* pDelegate); 23 | 24 | void forceRemoveDelegate(CCMouseDelegate* pDelegate); 25 | 26 | bool dispatchScrollMSG(float x, float y); 27 | 28 | public: 29 | CCArray* m_pMouseHandlers; 30 | bool m_bLocked; 31 | bool m_bToAdd; 32 | bool m_bToRemove; 33 | ccCArray* m_pHandlersToAdd; 34 | ccCArray* m_pHandlersToRemove; 35 | }; 36 | 37 | NS_CC_END 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/robtop/scene_nodes/CCSceneTransitionDelegate.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCSCENE_TRANSITION_DELEGATE_H__ 2 | #define __CCSCENE_TRANSITION_DELEGATE_H__ 3 | 4 | #include "../../include/ccMacros.h" 5 | 6 | NS_CC_BEGIN 7 | 8 | // @note RobTop Addition 9 | class CC_DLL CCSceneTransitionDelegate { 10 | public: 11 | virtual void sceneWillResume(void) {} 12 | }; 13 | 14 | NS_CC_END 15 | 16 | 17 | #endif //__CCSCENE_TRANSITION_DELEGATE_H__ -------------------------------------------------------------------------------- /loader/include/Geode/cocos/robtop/sprite_nodes/CCFontSprite.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCFONTSPRITE_H__ 2 | #define __CCFONTSPRITE_H__ 3 | 4 | #include "../../include/ccMacros.h" 5 | #include "CCSpriteExtra.h" 6 | 7 | NS_CC_BEGIN 8 | 9 | // @note RobTop Addition 10 | class CC_DLL CCFontSprite : public CCSpriteExtra { 11 | public: 12 | CCFontSprite() 13 | : m_bUseInstant(false) 14 | , m_fInstantTime(0.0f) 15 | , m_fDelay(0.0f) 16 | , m_fShakesPerSecond(0.0f) 17 | , m_fShakeIntensity(0.0f) 18 | , m_fShakeElapsed(0.0f) 19 | , m_nShakeIndex(0) 20 | {} 21 | virtual ~CCFontSprite() {} 22 | GEODE_CUSTOM_CONSTRUCTOR_COCOS(CCFontSprite, CCSpriteExtra); 23 | 24 | public: 25 | bool m_bUseInstant; 26 | float m_fInstantTime; 27 | float m_fDelay; 28 | float m_fShakesPerSecond; 29 | float m_fShakeIntensity; 30 | float m_fShakeElapsed; 31 | int m_nShakeIndex; 32 | CCPoint m_obShakePosition; 33 | }; 34 | 35 | NS_CC_END 36 | 37 | #endif // __CCFONTSPRITE_H__ 38 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/robtop/sprite_nodes/CCSpriteExtra.h: -------------------------------------------------------------------------------- 1 | #ifndef __CCSPRITEEXTRA_H__ 2 | #define __CCSPRITEEXTRA_H__ 3 | 4 | #include "../../include/ccMacros.h" 5 | #include "../../sprite_nodes/CCSprite.h" 6 | 7 | NS_CC_BEGIN 8 | 9 | // @note RobTop Addition 10 | class CC_DLL CCSpriteExtra : public CCSprite { 11 | public: 12 | CCSpriteExtra() : m_fXOffset(0.0f), m_fYOffset(0.0f) {} 13 | GEODE_CUSTOM_CONSTRUCTOR_COCOS(CCSpriteExtra, CCSprite); 14 | 15 | inline float getXOffset() const { return m_fXOffset; } 16 | inline float getYOffset() const { return m_fYOffset; } 17 | 18 | inline void setXOffset(float offset) { m_fXOffset = offset; } 19 | inline void setYOffset(float offset) { m_fYOffset = offset; } 20 | 21 | protected: 22 | float m_fXOffset; 23 | float m_fYOffset; 24 | }; 25 | 26 | NS_CC_END 27 | 28 | #endif // __CCSPRITEEXTRA_H__ 29 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/robtop/xml/ObjectDecoder.h: -------------------------------------------------------------------------------- 1 | #ifndef __OBJECTDECODER_H__ 2 | #define __OBJECTDECODER_H__ 3 | 4 | #include "../../include/cocos2d.h" 5 | 6 | // @note RobTop Addition 7 | class CC_DLL ObjectDecoderDelegate { 8 | public: 9 | virtual cocos2d::CCObject* getDecodedObject(int objectType, DS_Dictionary* data) { return nullptr; } 10 | }; 11 | 12 | // @note RobTop Addition 13 | class CC_DLL ObjectDecoder : public cocos2d::CCNode { 14 | public: 15 | ObjectDecoder() : m_delegate(nullptr) {} 16 | ~ObjectDecoder() {} 17 | GEODE_CUSTOM_CONSTRUCTOR_COCOS(ObjectDecoder, cocos2d::CCNode); 18 | 19 | static ObjectDecoder* sharedDecoder(); 20 | 21 | cocos2d::CCObject* getDecodedObject(int, DS_Dictionary*); 22 | 23 | virtual bool init(); 24 | 25 | public: 26 | ObjectDecoderDelegate* m_delegate; 27 | }; 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/shaders/ccShaderEx_SwitchMask_frag.h: -------------------------------------------------------------------------------- 1 | " \n\ 2 | #ifdef GL_ES \n\ 3 | precision lowp float; \n\ 4 | #endif \n\ 5 | \n\ 6 | varying vec4 v_fragmentColor; \n\ 7 | varying vec2 v_texCoord; \n\ 8 | uniform sampler2D u_texture; \n\ 9 | uniform sampler2D u_mask; \n\ 10 | \n\ 11 | void main() \n\ 12 | { \n\ 13 | vec4 texColor = texture2D(u_texture, v_texCoord); \n\ 14 | vec4 maskColor = texture2D(u_mask, v_texCoord); \n\ 15 | vec4 finalColor = vec4(texColor.r, texColor.g, texColor.b, maskColor.a * texColor.a); \n\ 16 | gl_FragColor = v_fragmentColor * finalColor; \n\ 17 | } \n\ 18 | "; 19 | -------------------------------------------------------------------------------- /loader/include/Geode/cocos/support/zip_support/zipMacro.h: -------------------------------------------------------------------------------- 1 | #ifndef __SUPPORT_ZIPUTILS_MACROS_H__ 2 | #define __SUPPORT_ZIPUTILS_MACROS_H__ 3 | 4 | /** 5 | * This macro is for being able to define the 6 | * Zip Utils stuff while not screwing ourselves 7 | * over with undefined symbols with CC_DLL 8 | */ 9 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) 10 | #ifdef GEODE_EXPORTING 11 | #define CC_ZIP_DLL __declspec(dllexport) 12 | #else 13 | #define CC_ZIP_DLL __declspec(dllimport) 14 | #endif 15 | #else 16 | #define CC_ZIP_DLL __attribute__((visibility("default"))) 17 | #endif 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /loader/include/Geode/fmod/fmod_android.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "fmod_common.h" 4 | #include 5 | 6 | extern "C" FMOD_RESULT F_API FMOD_Android_JNI_Init(JavaVM *vm, jobject javaActivity); 7 | extern "C" FMOD_RESULT F_API FMOD_Android_JNI_Close(); -------------------------------------------------------------------------------- /loader/include/Geode/loader/EventV2.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Event.hpp" 4 | 5 | namespace geode::event::v2 { 6 | template 7 | struct WrapFilter : public EventFilter { 8 | std::function m_filterFunc; 9 | 10 | WrapFilter(std::function ff) : m_filterFunc(ff) {} 11 | 12 | ListenerResult handle(std::function fn, T* event) { 13 | if (m_filterFunc(event)) 14 | return fn(event); 15 | return ListenerResult::Propagate; 16 | } 17 | }; 18 | 19 | template 20 | struct EventHandler : public EventListener> { 21 | EventHandler(std::function filterFunc) : EventListener>(WrapFilter(filterFunc)) {} 22 | 23 | EventHandler& listen(std::function fn) { 24 | bind(fn); 25 | return *this; 26 | } 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /loader/include/Geode/loader/GameEvent.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Event.hpp" 4 | 5 | namespace geode { 6 | enum class GameEventType { 7 | /// Fired when the game finishes loading, and only once. 8 | /// The event is triggered right after MenuLayer is initialized and already 9 | /// available, so popups can be shown. 10 | Loaded, 11 | }; 12 | 13 | class GEODE_DLL GameEvent final : public Event { 14 | protected: 15 | GameEventType m_type; 16 | 17 | public: 18 | GameEvent(GameEventType type); 19 | GameEventType getType() const; 20 | }; 21 | 22 | class GEODE_DLL GameEventFilter final : public EventFilter { 23 | public: 24 | using Callback = void(GameEvent*); 25 | 26 | protected: 27 | GameEventType m_type; 28 | 29 | public: 30 | ListenerResult handle(std::function fn, GameEvent* event); 31 | 32 | GameEventFilter(GameEventType type); 33 | GameEventFilter(GameEventFilter const&) = default; 34 | }; 35 | } -------------------------------------------------------------------------------- /loader/include/Geode/loader/Tulip.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include "../Prelude.hpp" 6 | 7 | namespace geode::hook { 8 | /** 9 | * Create a calling convention wrapper for a function. 10 | */ 11 | GEODE_DLL Result createWrapper( 12 | void* address, 13 | tulip::hook::WrapperMetadata const& metadata 14 | ) noexcept; 15 | 16 | /** 17 | * Create an abstract calling convention handler for TulipHook 18 | */ 19 | GEODE_DLL std::shared_ptr createConvention( 20 | tulip::hook::TulipConvention convention 21 | ) noexcept; 22 | } 23 | -------------------------------------------------------------------------------- /loader/include/Geode/modify/Comparer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "Traits.hpp" 3 | 4 | namespace geode::modifier { 5 | struct compare { 6 | template 7 | struct constructor { 8 | constexpr static inline bool value = false; 9 | }; 10 | 11 | template 12 | struct constructor< 13 | Derived, Base, Ret(Parameters...), 14 | std::void_t(&Derived::constructor 15 | ))>> { 16 | constexpr static inline bool value = true; 17 | }; 18 | 19 | template 20 | struct destructor { 21 | constexpr static inline bool value = false; 22 | }; 23 | 24 | template 25 | struct destructor< 26 | Derived, Base, Ret(Parameters...), 27 | std::void_t(&Derived::destructor) 28 | )>> { 29 | constexpr static inline bool value = true; 30 | }; 31 | 32 | #include 33 | }; 34 | } 35 | -------------------------------------------------------------------------------- /loader/include/Geode/platform/android.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include "ItaniumCast.hpp" 6 | 7 | namespace geode { 8 | struct PlatformInfo { 9 | void* m_so; 10 | }; 11 | } 12 | 13 | namespace geode::base { 14 | /*GEODE_NOINLINE inline*/ uintptr_t get(); 15 | } 16 | 17 | -------------------------------------------------------------------------------- /loader/include/Geode/platform/ios.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include "ItaniumCast.hpp" 8 | 9 | namespace geode { 10 | using dylib_t = void*; 11 | 12 | struct PlatformInfo { 13 | dylib_t m_dylib; 14 | }; 15 | } 16 | 17 | namespace geode::base { 18 | GEODE_NOINLINE inline uintptr_t get() { 19 | static uintptr_t base = []() -> uintptr_t { 20 | for(uint32_t gdii = 0; gdii < _dyld_image_count(); gdii++) { 21 | std::string_view imageName(_dyld_get_image_name(gdii)); 22 | 23 | if (imageName.ends_with("GeometryJump")) { 24 | return _dyld_get_image_vmaddr_slide(gdii) + 0x100000000; 25 | } 26 | } 27 | return 0; 28 | }(); 29 | 30 | return base; 31 | } 32 | } 33 | 34 | extern "C" inline uintptr_t _geode_ios_base() { 35 | return geode::base::get(); 36 | } 37 | -------------------------------------------------------------------------------- /loader/include/Geode/platform/macos.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include "ItaniumCast.hpp" 8 | 9 | namespace geode { 10 | using dylib_t = void*; 11 | 12 | struct PlatformInfo { 13 | dylib_t m_dylib; 14 | }; 15 | } 16 | 17 | namespace geode::base { 18 | GEODE_NOINLINE inline uintptr_t get() { 19 | // on arm macos, launching through steam seems to set image 0 to some steam helper library 20 | // i don't know why... :( 21 | 22 | static uintptr_t base = []() { 23 | // dyld man page says this is unsafe but idc 24 | auto image_count = _dyld_image_count(); 25 | 26 | for (auto i = 0u; i < image_count; i++) { 27 | std::string_view image_name = _dyld_get_image_name(i); 28 | if (!image_name.ends_with(".dylib")) { 29 | return _dyld_get_image_vmaddr_slide(i) + 0x100000000; 30 | } 31 | } 32 | 33 | // we couldn't find the base, so just assume it's 0 34 | // should probably have an error for this, but geode::log isn't available yet 35 | return _dyld_get_image_vmaddr_slide(0) + 0x100000000; 36 | }(); 37 | return base; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /loader/include/Geode/ui/BasedButton.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "BasedButtonSprite.hpp" 4 | 5 | #include 6 | 7 | #pragma warning(disable : 4275) 8 | 9 | namespace geode { 10 | class GEODE_DLL TabButton : public CCMenuItemToggler { 11 | public: 12 | static TabButton* create( 13 | TabBaseColor unselected, TabBaseColor selected, char const* text, 14 | cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callback 15 | ); 16 | 17 | static TabButton* create( 18 | char const* text, cocos2d::CCObject* target, cocos2d::SEL_MenuHandler callback 19 | ); 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /loader/include/Geode/ui/BreakLine.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace geode { 6 | class GEODE_DLL BreakLine : public cocos2d::CCNode { 7 | protected: 8 | cocos2d::ccColor4F m_color; 9 | 10 | void draw() override; 11 | bool init(float width, float height, cocos2d::ccColor4F color); 12 | public: 13 | /** 14 | * Create a break line to act as a separator 15 | * @param width Width of the line 16 | * @param height Height of the line 17 | * @param color The color of the line 18 | */ 19 | static BreakLine* create( 20 | float width, 21 | float height = 1.f, 22 | cocos2d::ccColor4F color = {1.f, 1.f, 1.f, .2f} 23 | ); 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /loader/include/Geode/ui/LoadingSpinner.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace geode { 6 | /** 7 | * An eternally spinning loading circle. Essentially just a more convenient 8 | * alternative to RobTop's `LoadingCircle` class, as this one respects its 9 | * content size and is a lot more stripped down (not requiring a `show` 10 | * method or anything - it just works!) 11 | */ 12 | class GEODE_DLL LoadingSpinner : public cocos2d::CCNode { 13 | protected: 14 | cocos2d::CCSprite* m_spinner; 15 | 16 | bool init(float size); 17 | 18 | void spin(); 19 | 20 | public: 21 | /** 22 | * Create a loading circle 23 | * @param size The diameter of the circle in Cocos units 24 | */ 25 | static LoadingSpinner* create(float size); 26 | 27 | void setVisible(bool visible) override; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /loader/include/Geode/ui/MDPopup.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "MDTextArea.hpp" 4 | #include "Popup.hpp" 5 | 6 | namespace geode { 7 | /** 8 | * FLAlertLayer with support for Markdown. See MDTextArea 9 | * for details on what features of MD are supported. 10 | */ 11 | class GEODE_DLL MDPopup : 12 | public Popup< 13 | std::string const&, std::string const&, char const*, char const*, 14 | std::function> { 15 | protected: 16 | std::function m_onClick = nullptr; 17 | 18 | bool setup( 19 | std::string const& title, std::string const& info, char const* btn1, char const* btn2, 20 | std::function onClick 21 | ) override; 22 | 23 | void onBtn(CCObject*); 24 | 25 | static float estimateHeight(std::string const& content); 26 | 27 | public: 28 | static MDPopup* create( 29 | std::string const& title, std::string const& content, char const* btn1, 30 | char const* btn2 = nullptr, std::function onClick = nullptr 31 | ); 32 | 33 | static MDPopup* create( 34 | bool compatibilityMode, std::string const& title, std::string const& content, 35 | char const* btn1, char const* btn2 = nullptr, std::function onClick = nullptr 36 | ); 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /loader/include/Geode/ui/SceneManager.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../DefaultInclude.hpp" 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | namespace geode { 11 | struct SceneSwitch; 12 | 13 | class GEODE_DLL SceneManager final { 14 | protected: 15 | std::vector> m_persistedNodes; 16 | cocos2d::CCScene* m_lastScene = nullptr; 17 | 18 | virtual ~SceneManager(); 19 | 20 | void willSwitchToScene(cocos2d::CCScene* scene); 21 | 22 | friend struct SceneSwitch; 23 | 24 | public: 25 | static SceneManager* get(); 26 | 27 | /** 28 | * Adds a node to the list of persisted nodes, which are kept across scene changes. 29 | * @param node The node to keep across scenes. 30 | */ 31 | void keepAcrossScenes(cocos2d::CCNode* node); 32 | 33 | /** 34 | * Removes a node from the list of persisted nodes. 35 | * @param node The node to forget. 36 | */ 37 | void forget(cocos2d::CCNode* node); 38 | 39 | /** 40 | * Gets a span of the persisted nodes. To add new nodes to the list, use keepAcrossScenes. 41 | */ 42 | std::span const> getPersistedNodes(); 43 | }; 44 | } 45 | -------------------------------------------------------------------------------- /loader/include/Geode/ui/Scrollbar.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | namespace geode { 8 | class GEODE_DLL Scrollbar : public cocos2d::CCLayer { 9 | protected: 10 | CCScrollLayerExt* m_target = nullptr; 11 | cocos2d::extension::CCScale9Sprite* m_track; 12 | cocos2d::extension::CCScale9Sprite* m_thumb; 13 | cocos2d::CCPoint m_clickOffset; 14 | float m_width; 15 | bool m_resizeThumb; 16 | bool m_trackIsRotated; 17 | bool m_hoverHighlight; 18 | bool m_touchDown = false; 19 | 20 | bool ccTouchBegan(cocos2d::CCTouch* touch, cocos2d::CCEvent* event) override; 21 | void ccTouchMoved(cocos2d::CCTouch* touch, cocos2d::CCEvent* event) override; 22 | void ccTouchEnded(cocos2d::CCTouch* touch, cocos2d::CCEvent* event) override; 23 | void ccTouchCancelled(cocos2d::CCTouch* touch, cocos2d::CCEvent* event) override; 24 | void scrollWheel(float y, float x) override; 25 | void registerWithTouchDispatcher() override; 26 | 27 | void draw() override; 28 | 29 | bool init(CCScrollLayerExt* list); 30 | 31 | public: 32 | void setTarget(CCScrollLayerExt* list); 33 | 34 | static Scrollbar* create(CCScrollLayerExt* list); 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /loader/include/Geode/utils/permission.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace geode::utils::permission { 7 | enum class Permission { 8 | ReadAllFiles = 0x3, // maintain compatibility with some older mods 9 | RecordAudio 10 | }; 11 | 12 | /** 13 | * Request whether the given permission is granted to Geode by the operating system. 14 | * @param permission The permission 15 | */ 16 | bool GEODE_DLL getPermissionStatus(Permission permission); 17 | 18 | /** 19 | * Request a permission to be granted by the operating system. 20 | * @param permission The permission 21 | * @param callback The callback, passed value is 'true' if permission was granted and 'false' otherwise. 22 | */ 23 | void GEODE_DLL requestPermission(Permission permission, std::function callback); 24 | } -------------------------------------------------------------------------------- /loader/include/link/android32/libcocos2dcpp.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android32/libcocos2dcpp.so -------------------------------------------------------------------------------- /loader/include/link/android32/libcrypto.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android32/libcrypto.a -------------------------------------------------------------------------------- /loader/include/link/android32/libcurl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android32/libcurl.a -------------------------------------------------------------------------------- /loader/include/link/android32/libfmod.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android32/libfmod.so -------------------------------------------------------------------------------- /loader/include/link/android32/libnghttp2.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android32/libnghttp2.a -------------------------------------------------------------------------------- /loader/include/link/android32/libnghttp3.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android32/libnghttp3.a -------------------------------------------------------------------------------- /loader/include/link/android32/libngtcp2.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android32/libngtcp2.a -------------------------------------------------------------------------------- /loader/include/link/android32/libngtcp2_crypto_boringssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android32/libngtcp2_crypto_boringssl.a -------------------------------------------------------------------------------- /loader/include/link/android32/libssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android32/libssl.a -------------------------------------------------------------------------------- /loader/include/link/android64/libcocos2dcpp.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android64/libcocos2dcpp.so -------------------------------------------------------------------------------- /loader/include/link/android64/libcrypto.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android64/libcrypto.a -------------------------------------------------------------------------------- /loader/include/link/android64/libcurl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android64/libcurl.a -------------------------------------------------------------------------------- /loader/include/link/android64/libfmod.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android64/libfmod.so -------------------------------------------------------------------------------- /loader/include/link/android64/libnghttp2.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android64/libnghttp2.a -------------------------------------------------------------------------------- /loader/include/link/android64/libnghttp3.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android64/libnghttp3.a -------------------------------------------------------------------------------- /loader/include/link/android64/libngtcp2.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android64/libngtcp2.a -------------------------------------------------------------------------------- /loader/include/link/android64/libngtcp2_crypto_boringssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android64/libngtcp2_crypto_boringssl.a -------------------------------------------------------------------------------- /loader/include/link/android64/libssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/android64/libssl.a -------------------------------------------------------------------------------- /loader/include/link/ios/libcrypto.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/ios/libcrypto.a -------------------------------------------------------------------------------- /loader/include/link/ios/libcurl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/ios/libcurl.a -------------------------------------------------------------------------------- /loader/include/link/ios/libnghttp2.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/ios/libnghttp2.a -------------------------------------------------------------------------------- /loader/include/link/ios/libssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/ios/libssl.a -------------------------------------------------------------------------------- /loader/include/link/macos/libcrypto.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/macos/libcrypto.a -------------------------------------------------------------------------------- /loader/include/link/macos/libcurl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/macos/libcurl.a -------------------------------------------------------------------------------- /loader/include/link/macos/libfmod.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/macos/libfmod.dylib -------------------------------------------------------------------------------- /loader/include/link/macos/libnghttp2.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/macos/libnghttp2.a -------------------------------------------------------------------------------- /loader/include/link/macos/libnghttp3.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/macos/libnghttp3.a -------------------------------------------------------------------------------- /loader/include/link/macos/libngtcp2.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/macos/libngtcp2.a -------------------------------------------------------------------------------- /loader/include/link/macos/libngtcp2_crypto_boringssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/macos/libngtcp2_crypto_boringssl.a -------------------------------------------------------------------------------- /loader/include/link/macos/libssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/macos/libssl.a -------------------------------------------------------------------------------- /loader/include/link/win64/fmod.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/win64/fmod.lib -------------------------------------------------------------------------------- /loader/include/link/win64/gd-libcurl.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/win64/gd-libcurl.lib -------------------------------------------------------------------------------- /loader/include/link/win64/glew32.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/win64/glew32.lib -------------------------------------------------------------------------------- /loader/include/link/win64/libExtensions.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/win64/libExtensions.lib -------------------------------------------------------------------------------- /loader/include/link/win64/libcocos2d.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/win64/libcocos2d.lib -------------------------------------------------------------------------------- /loader/include/link/win64/libcurl.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/win64/libcurl.lib -------------------------------------------------------------------------------- /loader/include/link/win64/nghttp2.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/include/link/win64/nghttp2.lib -------------------------------------------------------------------------------- /loader/launcher/mac/Bootstrapper.cpp: -------------------------------------------------------------------------------- 1 | extern "C" void fake(); 2 | __attribute__((constructor)) void _entry() { 3 | fake(); 4 | } -------------------------------------------------------------------------------- /loader/launcher/mac/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.21) 2 | 3 | 4 | add_library(GeodeBootstrapper SHARED Bootstrapper.cpp) 5 | target_compile_features(GeodeBootstrapper PUBLIC cxx_std_17) 6 | set_target_properties(GeodeBootstrapper PROPERTIES 7 | PREFIX "" 8 | OUTPUT_NAME "GeodeBootstrapper" 9 | LIBRARY_OUTPUT_DIRECTORY "${GEODE_BIN_PATH}/nightly" 10 | RUNTIME_OUTPUT_DIRECTORY "${GEODE_BIN_PATH}/nightly" 11 | ) 12 | 13 | target_link_libraries(GeodeBootstrapper PRIVATE) 14 | 15 | add_library(FakeGeode SHARED FakeGeode.cpp) 16 | target_compile_features(FakeGeode PUBLIC cxx_std_17) 17 | set_target_properties(FakeGeode PROPERTIES 18 | PREFIX "" 19 | OUTPUT_NAME "Geode" 20 | ) 21 | 22 | set_target_properties(GeodeBootstrapper PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE) 23 | set_target_properties(GeodeBootstrapper PROPERTIES INSTALL_RPATH "./") 24 | 25 | set_target_properties(FakeGeode PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE) 26 | set_target_properties(FakeGeode PROPERTIES INSTALL_RPATH "./") 27 | 28 | target_link_libraries(GeodeBootstrapper PRIVATE FakeGeode) 29 | -------------------------------------------------------------------------------- /loader/launcher/mac/FakeGeode.cpp: -------------------------------------------------------------------------------- 1 | extern "C" void fake() {} -------------------------------------------------------------------------------- /loader/resources/blanks/baseAccount_Normal_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseAccount_Normal_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseAccount_Normal_Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseAccount_Normal_Gray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseAccount_Normal_Purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseAccount_Normal_Purple.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCategory_Big_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCategory_Big_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_BigAlt_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_BigAlt_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_BigAlt_Cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_BigAlt_Cyan.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_BigAlt_DarkAqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_BigAlt_DarkAqua.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_BigAlt_DarkPurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_BigAlt_DarkPurple.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_BigAlt_Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_BigAlt_Gray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_BigAlt_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_BigAlt_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_BigAlt_Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_BigAlt_Pink.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Big_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Big_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Big_Cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Big_Cyan.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Big_DarkAqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Big_DarkAqua.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Big_DarkPurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Big_DarkPurple.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Big_Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Big_Gray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Big_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Big_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Big_Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Big_Pink.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Large_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Large_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Large_Cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Large_Cyan.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Large_DarkAqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Large_DarkAqua.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Large_DarkPurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Large_DarkPurple.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Large_Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Large_Gray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Large_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Large_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Large_Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Large_Pink.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_MediumAlt_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_MediumAlt_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_MediumAlt_Cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_MediumAlt_Cyan.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_MediumAlt_DarkAqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_MediumAlt_DarkAqua.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_MediumAlt_DarkPurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_MediumAlt_DarkPurple.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_MediumAlt_Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_MediumAlt_Gray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_MediumAlt_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_MediumAlt_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_MediumAlt_Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_MediumAlt_Pink.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Medium_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Medium_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Medium_Cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Medium_Cyan.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Medium_DarkAqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Medium_DarkAqua.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Medium_DarkPurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Medium_DarkPurple.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Medium_Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Medium_Gray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Medium_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Medium_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Medium_Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Medium_Pink.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_SmallAlt_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_SmallAlt_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_SmallAlt_Cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_SmallAlt_Cyan.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_SmallAlt_DarkAqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_SmallAlt_DarkAqua.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_SmallAlt_DarkPurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_SmallAlt_DarkPurple.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_SmallAlt_Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_SmallAlt_Gray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_SmallAlt_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_SmallAlt_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_SmallAlt_Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_SmallAlt_Pink.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Small_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Small_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Small_Cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Small_Cyan.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Small_DarkAqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Small_DarkAqua.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Small_DarkPurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Small_DarkPurple.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Small_Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Small_Gray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Small_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Small_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Small_Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Small_Pink.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Tiny_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Tiny_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Tiny_Cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Tiny_Cyan.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Tiny_DarkAqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Tiny_DarkAqua.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Tiny_DarkPurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Tiny_DarkPurple.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Tiny_Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Tiny_Gray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Tiny_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Tiny_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCircle_Tiny_Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCircle_Tiny_Pink.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCross_Huge_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCross_Huge_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseCross_Small_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseCross_Small_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_Aqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_Aqua.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_BrightGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_BrightGreen.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_Cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_Cyan.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_DarkGray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_DarkGray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_DimGreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_DimGreen.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_Gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_Gray.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_Green.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_LightBlue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_LightBlue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_Magenta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_Magenta.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_Orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_Orange.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_Pink.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_Salmon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_Salmon.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseEditor_Normal_Teal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseEditor_Normal_Teal.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseIconSelect_Normal_Selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseIconSelect_Normal_Selected.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseIconSelect_Normal_Unselected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseIconSelect_Normal_Unselected.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseLeaderboard_Normal_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseLeaderboard_Normal_Blue.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseTab_Normal_Selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseTab_Normal_Selected.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseTab_Normal_Unselected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseTab_Normal_Unselected.png -------------------------------------------------------------------------------- /loader/resources/blanks/baseTab_Normal_UnselectedDark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/blanks/baseTab_Normal_UnselectedDark.png -------------------------------------------------------------------------------- /loader/resources/category-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/category-bg.png -------------------------------------------------------------------------------- /loader/resources/category-dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/category-dot.png -------------------------------------------------------------------------------- /loader/resources/changelog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/changelog.png -------------------------------------------------------------------------------- /loader/resources/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/close.png -------------------------------------------------------------------------------- /loader/resources/delete-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/delete-white.png -------------------------------------------------------------------------------- /loader/resources/double-nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/double-nav.png -------------------------------------------------------------------------------- /loader/resources/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/download.png -------------------------------------------------------------------------------- /loader/resources/exclamation-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/exclamation-red.png -------------------------------------------------------------------------------- /loader/resources/exclamation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/exclamation.png -------------------------------------------------------------------------------- /loader/resources/external-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/external-link.png -------------------------------------------------------------------------------- /loader/resources/file-add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/file-add.png -------------------------------------------------------------------------------- /loader/resources/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/file.png -------------------------------------------------------------------------------- /loader/resources/fonts/Ubuntu-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/fonts/Ubuntu-Bold.ttf -------------------------------------------------------------------------------- /loader/resources/fonts/Ubuntu-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/fonts/Ubuntu-BoldItalic.ttf -------------------------------------------------------------------------------- /loader/resources/fonts/Ubuntu-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/fonts/Ubuntu-Italic.ttf -------------------------------------------------------------------------------- /loader/resources/fonts/Ubuntu-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/fonts/Ubuntu-Regular.ttf -------------------------------------------------------------------------------- /loader/resources/fonts/UbuntuMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/fonts/UbuntuMono-Regular.ttf -------------------------------------------------------------------------------- /loader/resources/geode-list-side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/geode-list-side.png -------------------------------------------------------------------------------- /loader/resources/geode-list-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/geode-list-top.png -------------------------------------------------------------------------------- /loader/resources/gift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/gift.png -------------------------------------------------------------------------------- /loader/resources/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/github.png -------------------------------------------------------------------------------- /loader/resources/globe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/globe.png -------------------------------------------------------------------------------- /loader/resources/grid-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/grid-view.png -------------------------------------------------------------------------------- /loader/resources/homepage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/homepage.png -------------------------------------------------------------------------------- /loader/resources/hue-sliders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/hue-sliders.png -------------------------------------------------------------------------------- /loader/resources/images/GE_button_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/GE_button_01.png -------------------------------------------------------------------------------- /loader/resources/images/GE_button_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/GE_button_02.png -------------------------------------------------------------------------------- /loader/resources/images/GE_button_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/GE_button_03.png -------------------------------------------------------------------------------- /loader/resources/images/GE_button_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/GE_button_04.png -------------------------------------------------------------------------------- /loader/resources/images/GE_button_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/GE_button_05.png -------------------------------------------------------------------------------- /loader/resources/images/GE_square01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/GE_square01.png -------------------------------------------------------------------------------- /loader/resources/images/GE_square02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/GE_square02.png -------------------------------------------------------------------------------- /loader/resources/images/GE_square03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/GE_square03.png -------------------------------------------------------------------------------- /loader/resources/images/black-square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/black-square.png -------------------------------------------------------------------------------- /loader/resources/images/inverseborder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/inverseborder.png -------------------------------------------------------------------------------- /loader/resources/images/scrollbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/scrollbar.png -------------------------------------------------------------------------------- /loader/resources/images/tab-gradient-mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/tab-gradient-mask.png -------------------------------------------------------------------------------- /loader/resources/images/tab-gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/tab-gradient.png -------------------------------------------------------------------------------- /loader/resources/images/white-square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/images/white-square.png -------------------------------------------------------------------------------- /loader/resources/info-alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/info-alert.png -------------------------------------------------------------------------------- /loader/resources/info-warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/info-warning.png -------------------------------------------------------------------------------- /loader/resources/install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/install.png -------------------------------------------------------------------------------- /loader/resources/logos/geode-circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/logos/geode-circle.png -------------------------------------------------------------------------------- /loader/resources/logos/geode-logo-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/logos/geode-logo-color.png -------------------------------------------------------------------------------- /loader/resources/logos/geode-logo-outline-gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/logos/geode-logo-outline-gold.png -------------------------------------------------------------------------------- /loader/resources/logos/geode-logo-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/logos/geode-logo-outline.png -------------------------------------------------------------------------------- /loader/resources/logos/geode-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/logos/geode-logo.png -------------------------------------------------------------------------------- /loader/resources/logos/logo-base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/logos/logo-base.png -------------------------------------------------------------------------------- /loader/resources/logos/logo-glow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/logos/logo-glow.png -------------------------------------------------------------------------------- /loader/resources/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/message.png -------------------------------------------------------------------------------- /loader/resources/mods-list-bottom-gd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/mods-list-bottom-gd.png -------------------------------------------------------------------------------- /loader/resources/mods-list-bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/mods-list-bottom.png -------------------------------------------------------------------------------- /loader/resources/mods-list-side-gd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/mods-list-side-gd.png -------------------------------------------------------------------------------- /loader/resources/mods-list-side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/mods-list-side.png -------------------------------------------------------------------------------- /loader/resources/mods-list-top-gd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/mods-list-top-gd.png -------------------------------------------------------------------------------- /loader/resources/mods-list-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/mods-list-top.png -------------------------------------------------------------------------------- /loader/resources/modtober/modtober24-banner-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/modtober/modtober24-banner-2.png -------------------------------------------------------------------------------- /loader/resources/modtober/modtober24-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/modtober/modtober24-banner.png -------------------------------------------------------------------------------- /loader/resources/modtober/modtober24-popup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/modtober/modtober24-popup.png -------------------------------------------------------------------------------- /loader/resources/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/news.png -------------------------------------------------------------------------------- /loader/resources/persistent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/persistent.png -------------------------------------------------------------------------------- /loader/resources/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/reload.png -------------------------------------------------------------------------------- /loader/resources/reset-gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/reset-gold.png -------------------------------------------------------------------------------- /loader/resources/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/reset.png -------------------------------------------------------------------------------- /loader/resources/save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/save.png -------------------------------------------------------------------------------- /loader/resources/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/search.png -------------------------------------------------------------------------------- /loader/resources/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/settings.png -------------------------------------------------------------------------------- /loader/resources/sounds/byeNotif00.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/sounds/byeNotif00.ogg -------------------------------------------------------------------------------- /loader/resources/sounds/newNotif00.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/sounds/newNotif00.ogg -------------------------------------------------------------------------------- /loader/resources/sounds/newNotif01.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/sounds/newNotif01.ogg -------------------------------------------------------------------------------- /loader/resources/sounds/newNotif02.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/sounds/newNotif02.ogg -------------------------------------------------------------------------------- /loader/resources/sounds/newNotif03.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/sounds/newNotif03.ogg -------------------------------------------------------------------------------- /loader/resources/support.md.in: -------------------------------------------------------------------------------- 1 | Thank you for using **Geode**! -------------------------------------------------------------------------------- /loader/resources/swelve/swelve-layer0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/swelve/swelve-layer0.png -------------------------------------------------------------------------------- /loader/resources/swelve/swelve-layer1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/swelve/swelve-layer1.png -------------------------------------------------------------------------------- /loader/resources/swelve/swelve-layer2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/swelve/swelve-layer2.png -------------------------------------------------------------------------------- /loader/resources/swelve/swelve-layer3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/swelve/swelve-layer3.png -------------------------------------------------------------------------------- /loader/resources/tab-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/tab-bg.png -------------------------------------------------------------------------------- /loader/resources/tag-featured.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/tag-featured.png -------------------------------------------------------------------------------- /loader/resources/tag-joke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/tag-joke.png -------------------------------------------------------------------------------- /loader/resources/tag-modtober-long.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/tag-modtober-long.png -------------------------------------------------------------------------------- /loader/resources/tag-modtober-winner-long.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/tag-modtober-winner-long.png -------------------------------------------------------------------------------- /loader/resources/tag-modtober-winner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/tag-modtober-winner.png -------------------------------------------------------------------------------- /loader/resources/tag-modtober.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/tag-modtober.png -------------------------------------------------------------------------------- /loader/resources/tag-paid-long.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/tag-paid-long.png -------------------------------------------------------------------------------- /loader/resources/tag-paid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/tag-paid.png -------------------------------------------------------------------------------- /loader/resources/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/update.png -------------------------------------------------------------------------------- /loader/resources/updates-available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/updates-available.png -------------------------------------------------------------------------------- /loader/resources/updates-failed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/updates-failed.png -------------------------------------------------------------------------------- /loader/resources/updates-installed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/updates-installed.png -------------------------------------------------------------------------------- /loader/resources/version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/resources/version.png -------------------------------------------------------------------------------- /loader/src/c++stl/string-impl.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace geode::stl { 5 | struct StringImpl { 6 | StringData& data; 7 | 8 | // clear but assumes the existing data is uninit, 9 | // so basically a default ctor 10 | void setEmpty(); 11 | 12 | // frees the existing string 13 | void free(); 14 | 15 | char* getStorage(); 16 | void setStorage(std::string_view); 17 | 18 | size_t getSize(); 19 | void setSize(size_t); 20 | 21 | size_t getCapacity(); 22 | void setCapacity(size_t); 23 | }; 24 | } -------------------------------------------------------------------------------- /loader/src/cocos2d-ext/CCArray.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace cocos2d; 4 | 5 | #pragma warning(push) 6 | #pragma warning(disable : 4273) 7 | 8 | CCObject* CCArray::firstObject() { 9 | if (data->num) { 10 | return data->arr[0]; 11 | } 12 | return nullptr; 13 | } 14 | 15 | void CCArray::removeFirstObject(bool bReleaseObj) { 16 | this->removeObjectAtIndex(0, bReleaseObj); 17 | } 18 | 19 | CCArray* CCArray::shallowCopy() { 20 | auto r = CCArray::createWithCapacity(this->capacity()); 21 | r->addObjectsFromArray(this); 22 | return r; 23 | } 24 | 25 | #pragma warning(pop) 26 | -------------------------------------------------------------------------------- /loader/src/cocos2d-ext/CCKeyboardHandler.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace cocos2d; 4 | 5 | #ifdef GEODE_IS_IOS 6 | 7 | CCKeyboardHandler::~CCKeyboardHandler() {} 8 | 9 | CCKeyboardDelegate* CCKeyboardHandler::getDelegate() 10 | { 11 | return m_pDelegate; 12 | } 13 | 14 | CCKeyboardHandler* CCKeyboardHandler::handlerWithDelegate(CCKeyboardDelegate* pDelegate) 15 | { 16 | CCKeyboardHandler* handler = new CCKeyboardHandler(); 17 | 18 | if (handler->initWithDelegate(pDelegate)) 19 | { 20 | handler->autorelease(); 21 | return handler; 22 | } 23 | 24 | handler->release(); 25 | return nullptr; 26 | } 27 | 28 | bool CCKeyboardHandler::initWithDelegate(CCKeyboardDelegate* pDelegate) 29 | { 30 | m_pDelegate = pDelegate; 31 | return true; 32 | } 33 | 34 | void CCKeyboardHandler::setDelegate(CCKeyboardDelegate* pDelegate) 35 | { 36 | m_pDelegate = pDelegate; 37 | } 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /loader/src/cocos2d-ext/Getters.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace cocos2d; 4 | 5 | #pragma warning(push) 6 | #pragma warning(disable : 4273) 7 | 8 | CCKeyboardDispatcher* CCKeyboardDispatcher::get() { 9 | return CCDirector::get()->getKeyboardDispatcher(); 10 | } 11 | 12 | CCTouchDispatcher* CCTouchDispatcher::get() { 13 | return CCDirector::sharedDirector()->getTouchDispatcher(); 14 | } 15 | 16 | CCApplication* CCApplication::get() { 17 | return CCApplication::sharedApplication(); 18 | } 19 | 20 | CCDirector* CCDirector::get() { 21 | return CCDirector::sharedDirector(); 22 | } 23 | 24 | CCEGLView* CCEGLView::get() { 25 | return CCDirector::sharedDirector()->getOpenGLView(); 26 | } 27 | 28 | CCFileUtils* CCFileUtils::get() { 29 | return CCFileUtils::sharedFileUtils(); 30 | } 31 | 32 | CCSpriteFrameCache* CCSpriteFrameCache::get() { 33 | return CCSpriteFrameCache::sharedSpriteFrameCache(); 34 | } 35 | 36 | CCTextureCache* CCTextureCache::get() { 37 | return CCTextureCache::sharedTextureCache(); 38 | } 39 | 40 | CCScene* CCScene::get() { 41 | return CCDirector::get()->getRunningScene(); 42 | } 43 | 44 | CCScheduler* CCScheduler::get() { 45 | return CCDirector::get()->getScheduler(); 46 | } 47 | 48 | #pragma warning(pop) 49 | -------------------------------------------------------------------------------- /loader/src/hooks/AndroidSaveFix.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #ifdef GEODE_IS_ANDROID 4 | #include 5 | 6 | using namespace geode::prelude; 7 | 8 | void* g_decodeAddress = nullptr; 9 | 10 | int base64DecodeHook(uint8_t* input, uint32_t length, uint8_t** output, bool urlSafe) { 11 | *output = new uint8_t[(size_t)(length * 3) / 4 + 4]; 12 | 13 | uint32_t outLength = 0; 14 | int ret = reinterpret_cast(g_decodeAddress)(input, length, *output, &outLength, urlSafe); 15 | if (ret > 0) { 16 | delete[] *output; 17 | *output = nullptr; 18 | outLength = 0; 19 | } 20 | 21 | return outLength; 22 | } 23 | 24 | $execute { 25 | // This fixes a crash when using the base64Decode function in cocos2d-x, due to 26 | // floating-point precision errors causing the output buffer to be too small. 27 | // This issue can cause large save files to crash the game. 28 | 29 | auto handle = dlopen("libcocos2dcpp.so", RTLD_LAZY | RTLD_NOLOAD); 30 | g_decodeAddress = dlsym(handle, "_ZN7cocos2d13_base64DecodeEPKhjPhPjb"); 31 | auto decodeAddress = dlsym(handle, "base64Decode"); 32 | 33 | if (g_decodeAddress && decodeAddress) (void)Mod::get()->hook(decodeAddress, &base64DecodeHook, "base64Decode"); 34 | } 35 | #endif 36 | -------------------------------------------------------------------------------- /loader/src/hooks/CCMenuItemActivateFix.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace geode::prelude; 6 | 7 | class $modify(CCMenuItem) { 8 | void activate() { 9 | this->retain(); 10 | CCMenuItem::activate(); 11 | this->release(); 12 | } 13 | }; 14 | 15 | class $modify(CCMenu) { 16 | void ccTouchEnded(CCTouch* touch, CCEvent* event) { 17 | this->retain(); 18 | CCMenu::ccTouchEnded(touch, event); 19 | this->release(); 20 | } 21 | }; -------------------------------------------------------------------------------- /loader/src/hooks/CCSceneCrashFix.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace geode::prelude; 5 | 6 | class $modify(CCScene) { 7 | int getHighestChildZ() { 8 | if(this->getChildrenCount() == 0) return 0; 9 | 10 | return CCScene::getHighestChildZ(); 11 | } 12 | }; -------------------------------------------------------------------------------- /loader/src/hooks/ImpostorPlayLayerFix.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace geode::prelude; 5 | 6 | // When pressing spacebar during the transition into LevelSelectLayer, 7 | // a PlayLayer will be created but it will never be added to a scene. 8 | // It will still exist in memory, potentially causing issues in mods, i.e. Custom Keybinds. 9 | // 10 | // This workaround solves the issue by making it impossible to start the level during a transition. 11 | 12 | struct CustomLevelPage : Modify { 13 | GEODE_FORWARD_COMPAT_DISABLE_HOOKS("Impostor PlayLayer fix") 14 | 15 | void onPlay(cocos2d::CCObject* sender) { 16 | if (!typeinfo_cast(CCScene::get())) { 17 | LevelPage::onPlay(sender); 18 | } 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /loader/src/hooks/ProfilePageFix.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace geode::prelude; 5 | 6 | // Fixes the names not showing up on profile links 7 | struct CustomProfilePage : Modify { 8 | GEODE_FORWARD_COMPAT_DISABLE_HOOKS("ProfilePage fix") 9 | 10 | virtual void getUserInfoFinished(GJUserScore* info) { 11 | m_usernameLabel->setString(info->m_userName.c_str()); 12 | m_usernameLabel->limitLabelWidth(info->m_modBadge > 0 ? 140.f : 160.0f, 0.8f, 0.0f); 13 | ProfilePage::getUserInfoFinished(info); 14 | } 15 | }; -------------------------------------------------------------------------------- /loader/src/hooks/ShutdownFix.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #ifdef GEODE_IS_MACOS 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace geode::prelude; 8 | 9 | // This fixes a crash on macOS when the game is closed, 10 | // where the game tries to call Steam API functions 11 | // after the Steam API has been shut down. 12 | 13 | void shutdownGameHook(void* self, SEL sel) { 14 | auto director = CCDirector::sharedDirector(); 15 | director->pause(); 16 | director->getScheduler()->unscheduleAll(); 17 | // call the original 18 | reinterpret_cast(objc_msgSend)(self, sel); 19 | } 20 | 21 | $execute { 22 | if (auto hook = ObjcHook::create( 23 | "AppController", 24 | "shutdownGame", 25 | &shutdownGameHook 26 | )) { 27 | (void) Mod::get()->claimHook(hook.unwrap()); 28 | } 29 | }; 30 | #endif 31 | -------------------------------------------------------------------------------- /loader/src/hooks/TextInputNodeFix.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #ifdef GEODE_IS_ANDROID 4 | 5 | using namespace geode::prelude; 6 | 7 | // TODO: commenting cause cctextinputnode is changed enough that i'm not sure how it works now 8 | 9 | // struct TextNodeFix : Modify { 10 | // bool onTextFieldInsertText(cocos2d::CCTextFieldTTF* field, char const* text, int count) { 11 | // auto change = count >= m_maxLabelLength ? 1 : 0; 12 | 13 | // m_maxLabelLength += change; 14 | // auto ret = CCTextInputNode::onTextFieldInsertText(field, text, count); 15 | // m_maxLabelLength -= change; 16 | // return ret; 17 | // } 18 | // }; 19 | 20 | #endif -------------------------------------------------------------------------------- /loader/src/hooks/update.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace geode::prelude; 4 | 5 | #include 6 | 7 | struct FunctionQueue : Modify { 8 | void update(float dt) { 9 | LoaderImpl::get()->executeMainThreadQueue(); 10 | return CCScheduler::update(dt); 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /loader/src/ids/IDManager.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace geode; 4 | 5 | NodeIDs* NodeIDs::get() { 6 | static auto inst = new NodeIDs; 7 | return inst; 8 | } 9 | -------------------------------------------------------------------------------- /loader/src/ids/LoadingLayer.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace geode::prelude; 6 | using namespace geode::node_ids; 7 | 8 | $register_ids(LoadingLayer) { 9 | setIDs( 10 | this, 0, 11 | "bg-texture", 12 | "gd-logo", 13 | "robtop-logo", 14 | "cocos2d-logo", 15 | "fmod-logo", 16 | "loading-text", 17 | "text-area", 18 | "progress-slider" 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /loader/src/internal/FixModIssues.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace internal { 4 | void tryAutoFixModIssues(); 5 | bool hasTriedToFixIssues(); 6 | } 7 | -------------------------------------------------------------------------------- /loader/src/internal/about.cpp.in: -------------------------------------------------------------------------------- 1 | #include "about.hpp" 2 | 3 | geode::VersionInfo about::getLoaderVersion() { 4 | return { 5 | @PROJECT_VERSION_MAJOR@, 6 | @PROJECT_VERSION_MINOR@, 7 | @PROJECT_VERSION_PATCH@, 8 | @PROJECT_VERSION_TAG_CONSTR@ 9 | }; 10 | } 11 | const char* about::getLoaderVersionStr() { return "@PROJECT_VERSION@@PROJECT_VERSION_SUFFIX@"; } 12 | const char* about::getLoaderCommitHash() { return "@GEODE_COMMIT_HASH@"; } 13 | const char* about::getBindingsCommitHash() { return "@GEODE_BINDINGS_COMMIT_HASH@"; } 14 | const char* about::getLoaderModJson() { return R"JSON_SEPARATOR(@LOADER_MOD_JSON@)JSON_SEPARATOR"; } 15 | -------------------------------------------------------------------------------- /loader/src/internal/about.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace about { 6 | GEODE_DLL geode::VersionInfo getLoaderVersion(); 7 | GEODE_DLL const char* getLoaderVersionStr(); 8 | GEODE_DLL const char* getLoaderCommitHash(); 9 | GEODE_DLL const char* getBindingsCommitHash(); 10 | GEODE_DLL const char* getLoaderModJson(); 11 | }; 12 | -------------------------------------------------------------------------------- /loader/src/load.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | bool safeModeCheck(); 3 | int geodeEntry(void* platformData); -------------------------------------------------------------------------------- /loader/src/load.mm: -------------------------------------------------------------------------------- 1 | #include "load.hpp" 2 | #include 3 | 4 | #ifdef GEODE_IS_MACOS 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | bool safeModeCheck() { 13 | if (CGEventSourceKeyState(kCGEventSourceStateHIDSystemState, (CGKeyCode)56)) { // 56 is Shift key 14 | NSAlert *alert = [NSAlert new]; 15 | alert.messageText = @"The shift key was held down. Would you like to enable safe mode?"; 16 | [alert addButtonWithTitle:@"Yes"]; 17 | NSButton *cancelButton = [alert addButtonWithTitle:@"No"]; 18 | alert.window.defaultButtonCell = cancelButton.cell; 19 | NSModalResponse choice = [alert runModal]; 20 | // if Yes is clicked 21 | return choice == NSAlertFirstButtonReturn; 22 | } 23 | return false; 24 | } 25 | 26 | #endif -------------------------------------------------------------------------------- /loader/src/loader/Dispatch.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace geode::prelude; 4 | 5 | std::unordered_map& geode::dispatchPools() { 6 | static std::unordered_map pools; 7 | return pools; 8 | } -------------------------------------------------------------------------------- /loader/src/loader/GameEvent.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace geode::prelude; 4 | 5 | GameEvent::GameEvent(GameEventType type) : m_type(type) {} 6 | 7 | GameEventType GameEvent::getType() const { 8 | return m_type; 9 | } 10 | 11 | ListenerResult GameEventFilter::handle(std::function fn, GameEvent* event) { 12 | if (event->getType() == m_type) { 13 | fn(event); 14 | } 15 | return ListenerResult::Propagate; 16 | } 17 | 18 | GameEventFilter::GameEventFilter(GameEventType type) : m_type(type) {} -------------------------------------------------------------------------------- /loader/src/loader/IPC.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace geode::ipc { 7 | void setup(); 8 | matjson::Value processRaw(void* rawHandle, std::string const& buffer); 9 | } 10 | -------------------------------------------------------------------------------- /loader/src/loader/ModPatch.cpp: -------------------------------------------------------------------------------- 1 | #include "ModPatch.hpp" 2 | 3 | Mod* ModPatch::getOwner() const { 4 | return m_owner; 5 | } 6 | 7 | Result<> ModPatch::setOwner(geode::Mod* mod) { 8 | if (mod && m_owner) { 9 | return Err("Cannot directly replace owner of an already owned mod"); 10 | } 11 | m_owner = mod; 12 | return Ok(); 13 | } 14 | 15 | bool ModPatch::isEnabled() const { 16 | return m_enabled; 17 | } 18 | 19 | bool ModPatch::getAutoEnable() const { 20 | return m_autoEnable; 21 | } 22 | 23 | void ModPatch::setAutoEnable(bool autoEnable) { 24 | m_autoEnable = autoEnable; 25 | } 26 | -------------------------------------------------------------------------------- /loader/src/loader/ModPatch.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | using namespace geode::prelude; 6 | 7 | class ModPatch { 8 | public: 9 | Mod* m_owner = nullptr; 10 | bool m_enabled = false; 11 | bool m_autoEnable = true; 12 | 13 | [[nodiscard]] Mod* getOwner() const; 14 | Result<> setOwner(Mod* mod); 15 | 16 | [[nodiscard]] bool isEnabled() const; 17 | virtual Result<> enable() = 0; 18 | virtual Result<> disable() = 0; 19 | 20 | [[nodiscard]] bool getAutoEnable() const; 21 | void setAutoEnable(bool autoEnable); 22 | }; 23 | -------------------------------------------------------------------------------- /loader/src/loader/Patch.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "PatchImpl.hpp" 3 | 4 | using namespace geode::prelude; 5 | 6 | Patch::Patch(std::shared_ptr&& impl) : m_impl(std::move(impl)) { m_impl->m_self = this; } 7 | Patch::~Patch() = default; 8 | 9 | std::shared_ptr Patch::create(void* address, const ByteVector& patch) { 10 | return Impl::create(address, patch); 11 | } 12 | 13 | Mod* Patch::getOwner() const { 14 | return m_impl->getOwner(); 15 | } 16 | 17 | bool Patch::isEnabled() const { 18 | return m_impl->isEnabled(); 19 | } 20 | 21 | Result<> Patch::enable() { 22 | return m_impl->enable(); 23 | } 24 | 25 | Result<> Patch::disable() { 26 | return m_impl->disable(); 27 | } 28 | 29 | bool Patch::getAutoEnable() const { 30 | return m_impl->getAutoEnable(); 31 | } 32 | 33 | void Patch::setAutoEnable(bool autoEnable) { 34 | return m_impl->setAutoEnable(autoEnable); 35 | } 36 | 37 | ByteVector const& Patch::getBytes() const { 38 | return m_impl->getBytes(); 39 | } 40 | 41 | Result<> Patch::updateBytes(const ByteVector& bytes) { 42 | return m_impl->updateBytes(bytes); 43 | } 44 | 45 | uintptr_t Patch::getAddress() const { 46 | return m_impl->getAddress(); 47 | } 48 | 49 | matjson::Value Patch::getRuntimeInfo() const { 50 | return m_impl->getRuntimeInfo(); 51 | } 52 | -------------------------------------------------------------------------------- /loader/src/loader/PatchImpl.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include "ModImpl.hpp" 7 | #include "ModPatch.hpp" 8 | 9 | using namespace geode::prelude; 10 | 11 | class Patch::Impl final : ModPatch { 12 | public: 13 | Impl(void* address, ByteVector original, ByteVector patch); 14 | ~Impl(); 15 | 16 | static std::shared_ptr create(void* address, const ByteVector& patch); 17 | static std::vector& allEnabled(); 18 | 19 | Patch* m_self = nullptr; 20 | void* m_address; 21 | ByteVector m_original; 22 | ByteVector m_patch; 23 | 24 | Result<> enable(); 25 | Result<> disable(); 26 | 27 | ByteVector const& getBytes() const; 28 | Result<> updateBytes(const ByteVector& bytes); 29 | 30 | uintptr_t getAddress() const; 31 | matjson::Value getRuntimeInfo() const; 32 | 33 | friend class Patch; 34 | friend class Mod; 35 | }; 36 | -------------------------------------------------------------------------------- /loader/src/loader/SettingNode.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "SettingNodeV3.hpp" 3 | 4 | using namespace geode::prelude; 5 | 6 | using TitleSettingNode = TitleSettingNodeV3; 7 | using BoolSettingNode = BoolSettingNodeV3; 8 | template 9 | using NumberSettingNode = NumberSettingNodeV3; 10 | using IntSettingNode = IntSettingNodeV3; 11 | using FloatSettingNode = FloatSettingNodeV3; 12 | using StringSettingNode = StringSettingNodeV3; 13 | using FileSettingNode = FileSettingNodeV3; 14 | using Color3BSettingNode = Color3BSettingNodeV3; 15 | using Color4BSettingNode = Color4BSettingNodeV3; 16 | using UnresolvedCustomSettingNode = UnresolvedCustomSettingNodeV3; -------------------------------------------------------------------------------- /loader/src/loader/Tulip.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | using namespace geode::prelude; 5 | 6 | Result geode::hook::createWrapper( 7 | void* address, 8 | tulip::hook::WrapperMetadata const& metadata 9 | ) noexcept { 10 | return tulip::hook::createWrapper(address, metadata); 11 | } 12 | 13 | std::shared_ptr geode::hook::createConvention( 14 | tulip::hook::TulipConvention convention 15 | ) noexcept { 16 | return tulip::hook::createConvention(convention); 17 | } 18 | -------------------------------------------------------------------------------- /loader/src/loader/console.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace geode::console { 7 | // intended for setting up an already attached console 8 | // for example, if the game was launched with a debugger, it'd already have a console attached 9 | // so we can setup that console regardless of the setting 10 | void setup(); 11 | // if the setting is on, we call tryOpenIfClosed, and if there's no console attached yet 12 | // (e.g. from a debugger, see above), this function should create a new console 13 | // and attach it (perhaps, by calling setup again, see windows impl for an example) 14 | void openIfClosed(); 15 | 16 | void log(std::string const& msg, Severity severity); 17 | void messageBox(char const* title, std::string const& info, Severity severity = Severity::Error); 18 | } 19 | -------------------------------------------------------------------------------- /loader/src/platform/android/FileWatcher.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | FileWatcher::FileWatcher( 4 | std::filesystem::path const& file, FileWatchCallback callback, ErrorCallback error 5 | ) { 6 | m_filemode = std::filesystem::is_regular_file(file); 7 | 8 | m_platformHandle = nullptr; 9 | m_file = file; 10 | m_callback = callback; 11 | m_error = error; 12 | } 13 | 14 | FileWatcher::~FileWatcher() { 15 | } 16 | 17 | void FileWatcher::watch() { 18 | // TODO: setup inotify or something 19 | } 20 | 21 | bool FileWatcher::watching() const { 22 | return false; 23 | } 24 | -------------------------------------------------------------------------------- /loader/src/platform/android/IPC.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace geode::prelude; 6 | 7 | void ipc::setup() { 8 | log::debug("IPC is not supported on this platform!"); 9 | } 10 | -------------------------------------------------------------------------------- /loader/src/platform/android/console.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | using namespace geode::prelude; 7 | 8 | namespace { 9 | android_LogPriority getLogSeverityForSeverity(Severity severity) { 10 | switch (severity) { 11 | case Severity::Debug: return ANDROID_LOG_DEBUG; 12 | case Severity::Info: return ANDROID_LOG_INFO; 13 | case Severity::Warning: return ANDROID_LOG_WARN; 14 | case Severity::Error: return ANDROID_LOG_ERROR; 15 | default: return ANDROID_LOG_DEFAULT; 16 | } 17 | } 18 | } 19 | 20 | void console::setup() { } 21 | void console::openIfClosed() { } 22 | 23 | void console::log(std::string const& msg, Severity severity) { 24 | __android_log_print( 25 | getLogSeverityForSeverity(severity), 26 | "Geode", 27 | "%s", 28 | msg.c_str() 29 | ); 30 | } 31 | 32 | void console::messageBox(char const* title, std::string const& info, Severity severity) { 33 | // console::log(info, severity); 34 | cocos2d::CCMessageBox(info.c_str(), title); 35 | } 36 | -------------------------------------------------------------------------------- /loader/src/platform/android/internalString.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | void setEmptyInternalString(gd::string* str); -------------------------------------------------------------------------------- /loader/src/platform/ios/ModImpl.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace geode::prelude; 8 | 9 | template 10 | T findSymbolOrMangled(void* dylib, char const* name, char const* mangled) { 11 | auto res = reinterpret_cast(dlsym(dylib, name)); 12 | if (!res) { 13 | res = reinterpret_cast(dlsym(dylib, mangled)); 14 | } 15 | return res; 16 | } 17 | 18 | Result<> Mod::Impl::loadPlatformBinary() { 19 | auto dylib = 20 | dlopen((m_tempDirName / m_metadata.getBinaryName()).string().c_str(), RTLD_LAZY); 21 | if (dylib) { 22 | if (m_platformInfo) { 23 | delete m_platformInfo; 24 | } 25 | m_platformInfo = new PlatformInfo { dylib }; 26 | 27 | auto geodeImplicitEntry = findSymbolOrMangled(dylib, "geodeImplicitEntry", "_Z17geodeImplicitEntryv"); 28 | if (geodeImplicitEntry) { 29 | geodeImplicitEntry(); 30 | } 31 | 32 | auto geodeCustomEntry = findSymbolOrMangled(dylib, "geodeCustomEntry", "_Z15geodeCustomEntryv"); 33 | if (geodeCustomEntry) { 34 | geodeCustomEntry(); 35 | } 36 | 37 | return Ok(); 38 | } 39 | std::string err = (char const*)dlerror(); 40 | return Err("Unable to load the DYLIB: dlerror returned (" + err + ")"); 41 | } 42 | -------------------------------------------------------------------------------- /loader/src/platform/mac/ModImpl.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace geode::prelude; 8 | 9 | template 10 | T findSymbolOrMangled(void* dylib, char const* name, char const* mangled) { 11 | auto res = reinterpret_cast(dlsym(dylib, name)); 12 | if (!res) { 13 | res = reinterpret_cast(dlsym(dylib, mangled)); 14 | } 15 | return res; 16 | } 17 | 18 | Result<> Mod::Impl::loadPlatformBinary() { 19 | auto dylib = 20 | dlopen((m_tempDirName / m_metadata.getBinaryName()).string().c_str(), RTLD_LAZY); 21 | if (dylib) { 22 | if (m_platformInfo) { 23 | delete m_platformInfo; 24 | } 25 | m_platformInfo = new PlatformInfo { dylib }; 26 | 27 | auto geodeImplicitEntry = findSymbolOrMangled(dylib, "geodeImplicitEntry", "_Z17geodeImplicitEntryv"); 28 | if (geodeImplicitEntry) { 29 | geodeImplicitEntry(); 30 | } 31 | 32 | auto geodeCustomEntry = findSymbolOrMangled(dylib, "geodeCustomEntry", "_Z15geodeCustomEntryv"); 33 | if (geodeCustomEntry) { 34 | geodeCustomEntry(); 35 | } 36 | 37 | return Ok(); 38 | } 39 | std::string err = (char const*)dlerror(); 40 | return Err("Unable to load the DYLIB: dlerror returned (" + err + ")"); 41 | } 42 | -------------------------------------------------------------------------------- /loader/src/platform/mac/gdstdlib.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/loader/src/platform/mac/gdstdlib.cpp -------------------------------------------------------------------------------- /loader/src/platform/windows/NFD_LICENSE: -------------------------------------------------------------------------------- 1 | This software is provided 'as-is', without any express or implied 2 | warranty. In no event will the authors be held liable for any damages 3 | arising from the use of this software. 4 | 5 | Permission is granted to anyone to use this software for any purpose, 6 | including commercial applications, and to alter it and redistribute it 7 | freely, subject to the following restrictions: 8 | 9 | 1. The origin of this software must not be misrepresented; you must not 10 | claim that you wrote the original software. If you use this software 11 | in a product, an acknowledgment in the product documentation would be 12 | appreciated but is not required. 13 | 2. Altered source versions must be plainly marked as such, and must not be 14 | misrepresented as being the original software. 15 | 3. This notice may not be removed or altered from any source distribution. 16 | -------------------------------------------------------------------------------- /loader/src/platform/windows/info.rc.in: -------------------------------------------------------------------------------- 1 | 1 VERSIONINFO 2 | FILEVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 3 | PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 4 | FILEFLAGSMASK 0x17L 5 | #ifdef _DEBUG 6 | FILEFLAGS 0x1L 7 | #else 8 | FILEFLAGS 0x0L 9 | #endif 10 | FILEOS 0x4L 11 | FILETYPE 0x1L 12 | FILESUBTYPE 0x0L 13 | BEGIN 14 | BLOCK "StringFileInfo" 15 | BEGIN 16 | BLOCK "080904b0" 17 | BEGIN 18 | VALUE "Comments", "Geode Mod Loader" 19 | VALUE "CompanyName", "Geode Development Team" 20 | VALUE "FileDescription", "Geode mod loader." 21 | VALUE "FileVersion", "@PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0" 22 | VALUE "InternalName", "@PROJECT_NAME@" 23 | VALUE "LegalCopyright", "2025 The Geode Team" 24 | VALUE "OriginalFilename", "@PROJECT_NAME@.dll" 25 | VALUE "ProductName", "Geode Loader" 26 | VALUE "ProductVersion", "@PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0" 27 | END 28 | END 29 | BLOCK "VarFileInfo" 30 | BEGIN 31 | VALUE "Translation", 0x809, 1200 32 | END 33 | END 34 | -------------------------------------------------------------------------------- /loader/src/ui/GeodeUIEvent.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "mods/popups/ModPopup.hpp" 5 | #include "mods/list/ModItem.hpp" 6 | 7 | using namespace geode::prelude; 8 | 9 | class ModPopupUIEvent::Impl { 10 | public: 11 | ModPopup* popup; 12 | 13 | Impl(ModPopup* popup) 14 | : popup(popup) {} 15 | }; 16 | 17 | class ModItemUIEvent::Impl { 18 | public: 19 | ModItem* item; 20 | 21 | Impl(ModItem* item) 22 | : item(item) {} 23 | }; 24 | 25 | class ModLogoUIEvent::Impl { 26 | public: 27 | CCNode* sprite; 28 | std::string modID; 29 | 30 | Impl(CCNode* sprite, std::string const& modID) 31 | : sprite(sprite), modID(modID) {} 32 | }; 33 | -------------------------------------------------------------------------------- /loader/src/ui/mods/SwelvyBG.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | using namespace geode::prelude; 6 | 7 | class SwelvyBG : public CCNode { 8 | protected: 9 | bool init(); 10 | 11 | void updateSpritePosition(float dt); 12 | 13 | public: 14 | static SwelvyBG* create(); 15 | }; 16 | -------------------------------------------------------------------------------- /loader/src/ui/mods/UpdateModListState.cpp: -------------------------------------------------------------------------------- 1 | #include "UpdateModListState.hpp" 2 | 3 | UpdateModListStateEvent::UpdateModListStateEvent(UpdateState&& target) : target(target) {} 4 | 5 | ListenerResult UpdateModListStateFilter::handle(std::function fn, UpdateModListStateEvent* event) { 6 | if ( 7 | // If the listener wants to hear all state updates then let it 8 | std::holds_alternative(m_target) || 9 | // If the event is update everything then update everything 10 | std::holds_alternative(event->target) || 11 | // Otherwise only run if the event is what is asked for 12 | m_target == event->target 13 | ) { 14 | fn(event); 15 | } 16 | return ListenerResult::Propagate; 17 | } 18 | 19 | UpdateModListStateFilter::UpdateModListStateFilter() : m_target(UpdateWholeState()) {} 20 | UpdateModListStateFilter::UpdateModListStateFilter(UpdateState&& target) : m_target(target) {} 21 | -------------------------------------------------------------------------------- /loader/src/ui/mods/events/EventWinnerAnimation.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | using namespace geode::prelude; 6 | 7 | // NOTE: this has a generic name because we should have modtober info 8 | 9 | class EventWinnerAnimation : public CCMenu { 10 | protected: 11 | CCLayerColor* m_bg; 12 | 13 | bool init(); 14 | 15 | void onClose(CCObject*); 16 | 17 | public: 18 | static EventWinnerAnimation* create(); 19 | }; 20 | -------------------------------------------------------------------------------- /loader/src/ui/mods/list/ModDeveloperItem.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include "ui/mods/popups/DevPopup.hpp" 10 | 11 | using namespace geode::prelude; 12 | 13 | class ModDeveloperItem : public CCNode { 14 | protected: 15 | CCScale9Sprite* m_bg; 16 | DevListPopup* m_popup; 17 | public: 18 | static ModDeveloperItem* create( 19 | DevListPopup* popup, 20 | std::string developer, 21 | CCSize const& size, 22 | std::optional displayName = std::nullopt, 23 | bool addMoreButton = true 24 | ); 25 | private: 26 | bool init( 27 | DevListPopup* popup, 28 | std::string developer, 29 | CCSize const& size, 30 | std::optional displayName, 31 | bool addMoreButton 32 | ); 33 | void onMoreByThisDev(CCObject* sender); 34 | }; 35 | -------------------------------------------------------------------------------- /loader/src/ui/mods/list/ModDeveloperList.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include "ui/mods/popups/DevPopup.hpp" 10 | #include "ui/mods/sources/ModSource.hpp" 11 | 12 | using namespace geode::prelude; 13 | 14 | class ModDeveloperList : public CCNode { 15 | protected: 16 | ModSource m_source; 17 | ScrollLayer* m_list; 18 | CCScale9Sprite* m_bg; 19 | public: 20 | static ModDeveloperList* create( 21 | DevListPopup* popup, 22 | ModSource const& source, 23 | CCSize const& size 24 | ); 25 | protected: 26 | bool init( 27 | DevListPopup* popup, 28 | ModSource const& source, 29 | CCSize const& size 30 | ); 31 | }; 32 | -------------------------------------------------------------------------------- /loader/src/ui/mods/list/ModProblemItem.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace geode::prelude; 10 | 11 | class ModProblemItem : public CCNode { 12 | protected: 13 | enum class Severity { 14 | Error, 15 | Info 16 | }; 17 | LoadProblem m_problem; 18 | Mod* m_source; 19 | CCScale9Sprite* m_bg; 20 | ModProblemItem::Severity m_severity; 21 | public: 22 | static ModProblemItem* create(Mod* source, LoadProblem problem, CCSize const& size); 23 | protected: 24 | bool init(Mod* source, LoadProblem problem, CCSize const& size); 25 | ModProblemItem::Severity computeSeverity(); 26 | bool showFixButton(); 27 | bool showInfoButton(); 28 | void onInfo(CCObject*); 29 | CCSprite* createSeverityIcon(); 30 | std::string createProblemMessage(); 31 | }; 32 | -------------------------------------------------------------------------------- /loader/src/ui/mods/list/ModProblemList.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | using namespace geode::prelude; 11 | 12 | class ModProblemList : public CCNode { 13 | protected: 14 | Mod* m_mod; 15 | ScrollLayer* m_list; 16 | CCScale9Sprite* m_bg; 17 | public: 18 | static ModProblemList* create( 19 | Mod* mod, 20 | CCSize const& size 21 | ); 22 | protected: 23 | bool init( 24 | Mod* mod, 25 | CCSize const& size 26 | ); 27 | }; 28 | -------------------------------------------------------------------------------- /loader/src/ui/mods/popups/ConfirmInstall.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class ConfirmInstall final { 4 | protected: 5 | 6 | public: 7 | static void startConfirming(); 8 | }; 9 | void askConfirmModInstalls(); 10 | 11 | -------------------------------------------------------------------------------- /loader/src/ui/mods/popups/ConfirmUninstallPopup.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "../UpdateModListState.hpp" 5 | 6 | using namespace geode::prelude; 7 | 8 | class ConfirmUninstallPopup : public Popup { 9 | protected: 10 | Mod* m_mod; 11 | CCMenuItemToggler* m_deleteDataToggle; 12 | 13 | bool setup(Mod* mod) override; 14 | 15 | void onUninstall(CCObject*); 16 | 17 | public: 18 | static ConfirmUninstallPopup* create(Mod* mod); 19 | }; 20 | -------------------------------------------------------------------------------- /loader/src/ui/mods/popups/DevPopup.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "../GeodeStyle.hpp" 4 | #include "../sources/ModSource.hpp" 5 | #include 6 | 7 | class DevListPopup : public GeodePopup { 8 | protected: 9 | ModSource m_source; 10 | public: 11 | static DevListPopup* create(ModSource const&); 12 | void onClose(cocos2d::CCObject*); 13 | private: 14 | bool setup(ModSource const&); 15 | void createList(); 16 | void onMoreByThisDev(CCObject* sender); 17 | }; 18 | -------------------------------------------------------------------------------- /loader/src/ui/mods/popups/FiltersPopup.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include "../sources/ModListSource.hpp" 6 | #include "../GeodeStyle.hpp" 7 | #include 8 | 9 | using namespace geode::prelude; 10 | 11 | class FiltersPopup : public GeodePopup { 12 | protected: 13 | ModListSource* m_source; 14 | CCMenu* m_tagsMenu; 15 | std::unordered_set m_selectedTags; 16 | EventListener>> m_tagsListener; 17 | CCMenuItemToggler* m_enabledModsOnly = nullptr; 18 | CCMenuItemToggler* m_enabledModsFirst = nullptr; 19 | TextInput* m_developerNameInput = nullptr; 20 | 21 | bool setup(ModListSource* src) override; 22 | void updateTags(); 23 | 24 | void onLoadTags(typename server::ServerRequest>::Event* event); 25 | void onResetTags(CCObject*); 26 | void onResetDevName(CCObject*); 27 | void onSelectTag(CCObject* sender); 28 | void onClose(CCObject* sender) override; 29 | 30 | public: 31 | static FiltersPopup* create(ModListSource* src); 32 | }; 33 | -------------------------------------------------------------------------------- /loader/src/ui/mods/popups/ModErrorPopup.cpp: -------------------------------------------------------------------------------- 1 | #include "ModErrorPopup.hpp" 2 | #include 3 | #include "ui/mods/GeodeStyle.hpp" 4 | #include "ui/mods/list/ModProblemList.hpp" 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | bool ModErrorPopup::setup(Mod* mod) { 13 | m_mod = mod; 14 | this->setTitle(fmt::format("Errors for {}", mod->getName())); 15 | 16 | this->createList(); 17 | 18 | return true; 19 | } 20 | 21 | void ModErrorPopup::createList() { 22 | CCSize contentSize = m_mainLayer->getContentSize(); 23 | CCArray* elements = CCArray::create(); 24 | std::vector problems = m_mod->getProblems(); 25 | m_list = ModProblemList::create(m_mod, {400.f, 215.f}); 26 | m_mainLayer->addChildAtPosition( 27 | m_list, 28 | Anchor::Center, 29 | { 0.0f, -10.0f } 30 | ); 31 | } 32 | 33 | ModErrorPopup* ModErrorPopup::create(Mod *mod) { 34 | ModErrorPopup* ret = new ModErrorPopup(); 35 | if (ret->init(440.f, 280.f, mod, GeodePopupStyle::Default)) { 36 | ret->autorelease(); 37 | return ret; 38 | } 39 | 40 | delete ret; 41 | return nullptr; 42 | } -------------------------------------------------------------------------------- /loader/src/ui/mods/popups/ModErrorPopup.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "ui/mods/GeodeStyle.hpp" 6 | #include "ui/mods/list/ModProblemList.hpp" 7 | 8 | using namespace geode::prelude; 9 | 10 | class ModErrorPopup : public GeodePopup { 11 | protected: 12 | Mod* m_mod; 13 | ModProblemList* m_list; 14 | public: 15 | static ModErrorPopup* create(Mod* mod); 16 | 17 | private: 18 | bool setup(Mod* mod) override; 19 | 20 | void createList(); 21 | }; 22 | -------------------------------------------------------------------------------- /loader/src/ui/mods/popups/SortPopup.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "../sources/ModListSource.hpp" 5 | #include "../GeodeStyle.hpp" 6 | #include 7 | 8 | using namespace geode::prelude; 9 | 10 | class SortPopup : public GeodePopup { 11 | protected: 12 | ModListSource* m_source; 13 | std::vector m_options; 14 | size_t m_selected; 15 | 16 | bool setup(ModListSource* src) override; 17 | 18 | void onClose(CCObject* sender) override; 19 | void onSelect(CCObject*); 20 | 21 | public: 22 | static SortPopup* create(ModListSource* src); 23 | }; 24 | -------------------------------------------------------------------------------- /loader/src/ui/mods/settings/ModSettingsPopup.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include "../GeodeStyle.hpp" 10 | 11 | using namespace geode::prelude; 12 | 13 | class ModSettingsPopup : public GeodePopup { 14 | protected: 15 | Mod* m_mod; 16 | ScrollLayer* m_list; 17 | std::vector> m_settings; 18 | CCMenu* m_applyMenu; 19 | CCMenuItemSpriteExtra* m_applyBtn; 20 | CCMenuItemSpriteExtra* m_restartBtn; 21 | ButtonSprite* m_applyBtnSpr; 22 | TextInput* m_searchInput; 23 | CCMenuItemSpriteExtra* m_searchClearBtn; 24 | EventListener> m_changeListener; 25 | 26 | bool setup(Mod* mod) override; 27 | void updateState(SettingNode* invoker = nullptr); 28 | bool hasUncommitted() const; 29 | void onClose(CCObject*) override; 30 | void onApply(CCObject*); 31 | void onRestart(CCObject*); 32 | void onResetAll(CCObject*); 33 | void onOpenSaveDirectory(CCObject*); 34 | void onOpenConfigDirectory(CCObject*); 35 | void onOpenPersistentDirectory(CCObject*); 36 | void onClearSearch(CCObject*); 37 | 38 | public: 39 | static ModSettingsPopup* create(Mod* mod, bool forceDisableTheme = false); 40 | }; 41 | -------------------------------------------------------------------------------- /loader/src/ui/mods/sources/ModPackListSource.cpp: -------------------------------------------------------------------------------- 1 | #include "ModListSource.hpp" 2 | 3 | void ModPackListSource::resetQuery() {} 4 | ModPackListSource::ProviderTask ModPackListSource::fetchPage(size_t page, bool forceUpdate) { 5 | return ProviderTask::immediate(Err(LoadPageError("Coming soon ;)"))); 6 | } 7 | 8 | ModPackListSource::ModPackListSource() {} 9 | 10 | ModPackListSource* ModPackListSource::get() { 11 | static auto inst = new ModPackListSource(); 12 | return inst; 13 | } 14 | 15 | void ModPackListSource::setSearchQuery(std::string const& query) {} 16 | 17 | std::unordered_set ModPackListSource::getModTags() const { 18 | return {}; 19 | } 20 | void ModPackListSource::setModTags(std::unordered_set const& set) {} 21 | bool ModPackListSource::isDefaultQuery() const { 22 | return true; 23 | } 24 | 25 | bool ModPackListSource::isLocalModsOnly() const { 26 | return false; 27 | } 28 | -------------------------------------------------------------------------------- /loader/src/ui/nodes/BasedButton.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace geode::prelude; 5 | 6 | TabButton* TabButton::create( 7 | TabBaseColor unselected, TabBaseColor selected, char const* text, cocos2d::CCObject* target, 8 | cocos2d::SEL_MenuHandler callback 9 | ) { 10 | auto ret = new TabButton(); 11 | auto sprOff = TabButtonSprite::create(text, unselected); 12 | auto sprOn = TabButtonSprite::create(text, selected); 13 | if (ret->init(sprOff, sprOn, target, callback)) { 14 | ret->m_offButton->m_colorDip = .3f; 15 | ret->m_offButton->m_colorEnabled = true; 16 | ret->m_offButton->m_scaleMultiplier = 1.f; 17 | ret->m_onButton->setEnabled(false); 18 | ret->autorelease(); 19 | return ret; 20 | } 21 | delete ret; 22 | return nullptr; 23 | } 24 | 25 | TabButton* TabButton::create(char const* text, CCObject* target, SEL_MenuHandler callback) { 26 | return TabButton::create( 27 | TabBaseColor::Unselected, TabBaseColor::Selected, text, target, callback 28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /loader/src/ui/nodes/BreakLine.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace geode::prelude; 5 | 6 | bool BreakLine::init(float width, float height, ccColor4F color) { 7 | if (!CCNode::init()) 8 | return false; 9 | 10 | this->setContentSize({ width, height }); 11 | m_color = color; 12 | 13 | return true; 14 | } 15 | 16 | void BreakLine::draw() { 17 | // some nodes sometimes set the blend func to 18 | // something else without resetting it back 19 | ccGLBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 20 | ccDrawSolidRect({ 0, 0 }, this->getContentSize(), m_color); 21 | CCNode::draw(); 22 | } 23 | 24 | BreakLine* BreakLine::create(float width, float height, ccColor4F color) { 25 | auto ret = new BreakLine; 26 | if (ret->init(width, height, color)) { 27 | ret->autorelease(); 28 | return ret; 29 | } 30 | delete ret; 31 | return nullptr; 32 | } 33 | -------------------------------------------------------------------------------- /loader/src/ui/nodes/EnterLayerEvent.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace geode::prelude; 4 | 5 | AEnterLayerEvent::AEnterLayerEvent( 6 | std::string const& layerID, 7 | cocos2d::CCNode* layer 8 | ) : layerID(layerID), 9 | layer(layer) {} 10 | 11 | ListenerResult AEnterLayerFilter::handle(std::function fn, AEnterLayerEvent* event) { 12 | if (m_targetID == event->layerID) { 13 | fn(event); 14 | } 15 | return ListenerResult::Propagate; 16 | } 17 | 18 | AEnterLayerFilter::AEnterLayerFilter( 19 | std::optional const& id 20 | ) : m_targetID(id) {} 21 | -------------------------------------------------------------------------------- /loader/src/ui/nodes/LoadingSpinner.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace geode::prelude; 5 | 6 | bool LoadingSpinner::init(float sideLength) { 7 | if (!CCNode::init()) 8 | return false; 9 | 10 | this->setID("loading-spinner"); 11 | this->setContentSize({ sideLength, sideLength }); 12 | this->setAnchorPoint({ .5f, .5f }); 13 | 14 | m_spinner = CCSprite::create("loadingCircle.png"); 15 | m_spinner->setBlendFunc({ GL_ONE, GL_ONE }); 16 | limitNodeSize(m_spinner, m_obContentSize, 1.f, .1f); 17 | this->addChildAtPosition(m_spinner, Anchor::Center); 18 | 19 | this->spin(); 20 | 21 | return true; 22 | } 23 | 24 | void LoadingSpinner::spin() { 25 | m_spinner->runAction(CCRepeatForever::create(CCRotateBy::create(1.f, 360.f))); 26 | } 27 | 28 | LoadingSpinner* LoadingSpinner::create(float sideLength) { 29 | auto ret = new LoadingSpinner(); 30 | if (ret->init(sideLength)) { 31 | ret->autorelease(); 32 | return ret; 33 | } 34 | delete ret; 35 | return nullptr; 36 | } 37 | 38 | void LoadingSpinner::setVisible(bool visible) { 39 | CCNode::setVisible(visible); 40 | if (visible) { 41 | this->spin(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /loader/src/ui/nodes/SceneManager.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | using namespace geode::prelude; 6 | 7 | SceneManager* SceneManager::get() { 8 | static SceneManager* inst = nullptr; 9 | if (!inst) { 10 | inst = new SceneManager(); 11 | } 12 | return inst; 13 | } 14 | 15 | SceneManager::~SceneManager() {} 16 | 17 | void SceneManager::keepAcrossScenes(CCNode* node) { 18 | if (ranges::contains(m_persistedNodes, node)) { 19 | return; 20 | } 21 | m_persistedNodes.push_back(node); 22 | if (m_lastScene) { 23 | node->removeFromParentAndCleanup(false); 24 | m_lastScene->addChild(node); 25 | } 26 | } 27 | 28 | void SceneManager::forget(CCNode* node) { 29 | std::erase(m_persistedNodes, node); 30 | } 31 | 32 | std::span const> SceneManager::getPersistedNodes() { 33 | return m_persistedNodes; 34 | } 35 | 36 | void SceneManager::willSwitchToScene(CCScene* scene) { 37 | for (auto& node : m_persistedNodes) { 38 | // no cleanup in order to keep actions running 39 | node->removeFromParentAndCleanup(false); 40 | if(scene) scene->addChild(node); 41 | } 42 | m_lastScene = scene; 43 | } 44 | -------------------------------------------------------------------------------- /loader/src/utils/general.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #ifndef GEODE_IS_MACOS 4 | // feel free to properly implement this for other platforms 5 | float geode::utils::getDisplayFactor() { 6 | return 1.0f; 7 | } 8 | #endif -------------------------------------------------------------------------------- /loader/src/utils/terminate.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include "../loader/Log.hpp" 4 | 5 | using namespace geode::prelude; 6 | 7 | void geode::utils::detail::logTerminationError(const char* reason, Mod* mod) { 8 | // invoke logImpl directly to indicate what mod it came from 9 | log::logImpl( 10 | Severity::Error, mod, 11 | "The mod '{}' by {} has deliberately asked the game to crash.\nReason: {}", 12 | mod->getID(), fmt::format("{}", fmt::join(mod->getDevelopers(), ", ")), reason 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /loader/src/utils/thread.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace geode::prelude; 4 | 5 | #include // i don't think i have to label these anymore 6 | #include 7 | #include "thread.hpp" 8 | 9 | static thread_local std::string s_threadName; 10 | 11 | std::string geode::utils::thread::getName() { 12 | // only use the thread-local variable here, no need for platform get methods 13 | if (s_threadName.empty()) 14 | return getDefaultName(); 15 | return s_threadName; 16 | } 17 | 18 | void geode::utils::thread::setName(std::string const& name) { 19 | s_threadName = name; 20 | platformSetName(name); 21 | } 22 | -------------------------------------------------------------------------------- /loader/src/utils/thread.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace geode::utils::thread { 6 | // the platform-specific methods are needed for the thread names to show up 7 | // in places like task managers and debuggers 8 | void platformSetName(std::string const& name); 9 | } 10 | -------------------------------------------------------------------------------- /loader/src/utils/time.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #ifdef GEODE_IS_WINDOWS 4 | #define GEODE_CTIME() ctime_s(buf, sizeof buf, &t); 5 | #else 6 | #define GEODE_CTIME() strcpy(buf, ctime(&t)); 7 | #endif 8 | 9 | std::string geode::utils::timePointAsString(std::chrono::system_clock::time_point const& tp) { 10 | auto t = std::chrono::system_clock::to_time_t(tp); 11 | char buf[128]; 12 | GEODE_CTIME(); 13 | std::string res = buf; 14 | res.pop_back(); 15 | return res; 16 | } 17 | -------------------------------------------------------------------------------- /loader/test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | if(NOT GEODE_DONT_BUILD_TEST_MODS) 2 | add_subdirectory(dependency) 3 | add_subdirectory(main) 4 | endif() 5 | -------------------------------------------------------------------------------- /loader/test/dependency/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.21) 2 | 3 | set(PROJECT_NAME TestDependency) 4 | 5 | project(${PROJECT_NAME} VERSION 1.0.0) 6 | 7 | add_library(${PROJECT_NAME} SHARED main.cpp) 8 | target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) 9 | 10 | add_compile_definitions(EXPORTING_MOD) 11 | 12 | set(GEODE_LINK_SOURCE ON) 13 | set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") 14 | 15 | configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mod.json.in ${CMAKE_CURRENT_SOURCE_DIR}/mod.json) 16 | create_geode_file(${PROJECT_NAME} DONT_INSTALL) 17 | -------------------------------------------------------------------------------- /loader/test/main/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.21) 2 | 3 | set(PROJECT_NAME TestMod) 4 | 5 | project(${PROJECT_NAME} VERSION 1.0.0) 6 | 7 | add_library(${PROJECT_NAME} SHARED main.cpp) 8 | target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) 9 | 10 | set(GEODE_LINK_SOURCE ON) 11 | set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") 12 | target_link_libraries(TestMod TestDependency) 13 | 14 | configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mod.json.in ${CMAKE_CURRENT_SOURCE_DIR}/mod.json) 15 | setup_geode_mod(${PROJECT_NAME} DONT_INSTALL) 16 | -------------------------------------------------------------------------------- /loader/test/main/mod.json.in: -------------------------------------------------------------------------------- 1 | { 2 | "geode": "@GEODE_VERSION_FULL@", 3 | "gd": { 4 | "win": "*", 5 | "mac": "*", 6 | "android": "*", 7 | "ios": "*" 8 | }, 9 | "version": "1.0.0", 10 | "id": "geode.test", 11 | "name": "Geode Test", 12 | "developer": "Geode Team", 13 | "description": "unit test for geode", 14 | "dependencies": [ 15 | { 16 | "id": "geode.testdep", 17 | "version": ">=1.0.0", 18 | "importance": "required" 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geode-sdk/geode/d993b56b1e2476111ab0f3fa8d208eae59a6245e/title.png --------------------------------------------------------------------------------