Skip to content

Commit 7bb0445

Browse files
committed
Merge branch 'main'
2 parents 98fe3f6 + 260d2ba commit 7bb0445

File tree

94 files changed

+1388
-646
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+1388
-646
lines changed

.github/workflows/build.yml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -313,22 +313,22 @@ jobs:
313313
has-sccache: ${{ inputs.use-ccache }}
314314
if: inputs.build-debug-info
315315

316-
- name: Setup caches
317-
uses: ./.github/actions/setup-cache
318-
with:
319-
host: mac
320-
target: ios
321-
use-ccache: ${{ github.event_name != 'workflow_dispatch' || inputs.use-ccache }}
316+
# - name: Setup caches
317+
# uses: ./.github/actions/setup-cache
318+
# with:
319+
# host: mac
320+
# target: ios
321+
# use-ccache: ${{ github.event_name != 'workflow_dispatch' || inputs.use-ccache }}
322322

323323
- name: Setup Ninja
324324
uses: ./.github/actions/setup-ninja
325325
with:
326326
host: mac
327327

328-
- name: Install LLVM
329-
run: |
330-
brew install llvm
331-
echo "/opt/homebrew/opt/llvm/bin" >> $GITHUB_PATH
328+
# - name: Install LLVM
329+
# run: |
330+
# brew install llvm
331+
# echo "/opt/homebrew/opt/llvm/bin" >> $GITHUB_PATH
332332

333333
- name: Setup CLI
334334
uses: geode-sdk/cli/.github/actions/setup@main

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,25 @@
11
# Geode Changelog
22

3+
## v4.9.0
4+
* Add Modtober 2025 content (#1501)
5+
* Add `geode::cocos::getObjectName` for getting demangled type names (c734b29)
6+
* Add mod load priority, load mods in alphabetical order (#1492, #1500)
7+
* Implement `CCImage::saveToFile` for macOS and iOS (#1496)
8+
* Allow using SDK without `GEODE_MOD_ID` macro (useful for static libs) (a6f215f)
9+
* Use OS APIs for file operations for improved performance and clearer error messages (ec46ad3)
10+
* Fix crashlog window title and icons on Windows (d527c08, efdde0a)
11+
* Fix custom settings not reloading dependants (#1488)
12+
* Fix `removeAllChildren` UB (dd9446b)
13+
* Fix Android `gd::string` causing double frees (#1490)
14+
* Optimize `pathToString` conversion (2cd8559)
15+
* `ConstexprString` can now be used as a template parameter (cf795fb)
16+
* Add `Self` type on `Modify` to make referring to self type more idiomatic (945f6d5)
17+
* Fix `aligned_storage` deprecation warnings when using C++23 (e7eed58)
18+
* Fix `CC_SYNTHESIZE` calls and define inline getters/setters for cocos (869dcfa)
19+
* EventV2 + async fixes (b3e6536)
20+
* Improve the outdated GD version warning (#1475)
21+
* Fix `VMTHookManager` (22ba7dd)
22+
323
## v4.8.0
424
* Fix `geode::Notification` z ordering (127733e)
525
* Add `CCNode::getChildrenExt` (d198df5)

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ if (DEFINED GEODE_TULIPHOOK_REPO_PATH)
283283
message(STATUS "Using ${GEODE_TULIPHOOK_REPO_PATH} for TulipHook")
284284
add_subdirectory(${GEODE_TULIPHOOK_REPO_PATH} ${GEODE_TULIPHOOK_REPO_PATH}/build)
285285
else()
286-
CPMAddPackage("gh:geode-sdk/[email protected].4")
286+
CPMAddPackage("gh:geode-sdk/[email protected].5")
287287
endif()
288288
set(CMAKE_WARN_DEPRECATED ON CACHE BOOL "" FORCE)
289289

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.8.0
1+
4.9.0

cmake/Platform.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ if (GEODE_TARGET_PLATFORM STREQUAL "iOS")
3131
"-framework UIKit" # needed for file picking (UIApplication)
3232
"-framework Foundation" # needed for many things
3333
"-framework AVFoundation" # needed for microphone access
34+
"-framework CoreGraphics" # needed for image saving
3435
${GEODE_LOADER_PATH}/include/link/ios/libssl.a
3536
${GEODE_LOADER_PATH}/include/link/ios/libcrypto.a
3637
${GEODE_LOADER_PATH}/include/link/ios/libnghttp2.a

flash.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,12 @@ include = [
3434
"Geode/**/*.h",
3535
]
3636
exclude = [
37+
"Geode/Modify.hpp",
3738
"Geode/modify/Comparer.hpp",
3839
"Geode/platform/*.hpp",
39-
"Geode/c++stl/*.hpp",
40+
"Geode/c++stl/**/*.hpp",
41+
"Geode/c++stl/**/*.h",
42+
"Geode/fmod/fmod_android.h",
4043
# All of the relevant cocos headers are included through Geode headers
4144
"Geode/cocos/**/*.h"
4245
]

loader/include/Geode/c++stl/gnustl/stl_vector.h

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
137137
#endif
138138
: _M_current(__i.base()) { }
139139

140-
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
141-
_GLIBCXX_CONSTEXPR
142-
__normal_iterator<_Iterator, _Container> _M_const_cast() const
143-
{ return __normal_iterator<_Iterator, _Container>(_M_current); }
144-
145140
// Forward iterator requirements
146141

147142
_GLIBCXX_NODISCARD __attribute__((__always_inline__))
@@ -235,46 +230,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
235230
// provide overloads whose operands are of the same type. Can someone
236231
// remind me what generic programming is about? -- Gaby
237232

238-
#ifdef __cpp_lib_three_way_comparison
239-
template<typename _IteratorL, typename _IteratorR, typename _Container>
240-
[[nodiscard, __gnu__::__always_inline__]]
241-
constexpr bool
242-
operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
243-
const __normal_iterator<_IteratorR, _Container>& __rhs)
244-
noexcept(noexcept(__lhs.base() == __rhs.base()))
245-
requires requires {
246-
{ __lhs.base() == __rhs.base() } -> std::convertible_to<bool>;
247-
}
248-
{ return __lhs.base() == __rhs.base(); }
249-
250-
template<typename _IteratorL, typename _IteratorR, typename _Container>
251-
[[nodiscard, __gnu__::__always_inline__]]
252-
constexpr std::__detail::__synth3way_t<_IteratorR, _IteratorL>
253-
operator<=>(const __normal_iterator<_IteratorL, _Container>& __lhs,
254-
const __normal_iterator<_IteratorR, _Container>& __rhs)
255-
noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base())))
256-
{ return std::__detail::__synth3way(__lhs.base(), __rhs.base()); }
257-
258-
template<typename _Iterator, typename _Container>
259-
[[nodiscard, __gnu__::__always_inline__]]
260-
constexpr bool
261-
operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
262-
const __normal_iterator<_Iterator, _Container>& __rhs)
263-
noexcept(noexcept(__lhs.base() == __rhs.base()))
264-
requires requires {
265-
{ __lhs.base() == __rhs.base() } -> std::convertible_to<bool>;
266-
}
267-
{ return __lhs.base() == __rhs.base(); }
268-
269-
template<typename _Iterator, typename _Container>
270-
[[nodiscard, __gnu__::__always_inline__]]
271-
constexpr std::__detail::__synth3way_t<_Iterator>
272-
operator<=>(const __normal_iterator<_Iterator, _Container>& __lhs,
273-
const __normal_iterator<_Iterator, _Container>& __rhs)
274-
noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base())))
275-
{ return std::__detail::__synth3way(__lhs.base(), __rhs.base()); }
276-
#else
277-
// Forward iterator requirements
233+
// Forward iterator requirements
278234
template<typename _IteratorL, typename _IteratorR, typename _Container>
279235
_GLIBCXX_NODISCARD __attribute__((__always_inline__)) _GLIBCXX_CONSTEXPR
280236
inline bool
@@ -371,7 +327,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
371327
const __normal_iterator<_Iterator, _Container>& __rhs)
372328
_GLIBCXX_NOEXCEPT
373329
{ return __lhs.base() >= __rhs.base(); }
374-
#endif // three-way comparison
375330

376331
// _GLIBCXX_RESOLVE_LIB_DEFECTS
377332
// According to the resolution of DR179 not only the various comparison
@@ -1378,7 +1333,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
13781333
insert(const_iterator __position, size_type __n, const value_type& __x)
13791334
{
13801335
difference_type __offset = __position - cbegin();
1381-
_M_fill_insert(__position._M_const_cast(), __n, __x);
1336+
_M_fill_insert(begin() + __offset, __n, __x);
13821337
return begin() + __offset;
13831338
}
13841339
#else
@@ -1423,7 +1378,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
14231378
_InputIterator __last)
14241379
{
14251380
difference_type __offset = __position - cbegin();
1426-
_M_insert_dispatch(__position._M_const_cast(),
1381+
_M_insert_dispatch(begin() + __offset,
14271382
__first, __last, __false_type());
14281383
return begin() + __offset;
14291384
}
@@ -1471,10 +1426,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
14711426
iterator
14721427
#if __cplusplus >= 201103L
14731428
erase(const_iterator __position)
1429+
{ return _M_erase(begin() + (__position - cbegin())); }
14741430
#else
14751431
erase(iterator __position)
1432+
{ return _M_erase(__position); }
14761433
#endif
1477-
{ return _M_erase(__position._M_const_cast()); }
14781434

14791435
/**
14801436
* @brief Remove a range of elements.
@@ -1497,10 +1453,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
14971453
iterator
14981454
#if __cplusplus >= 201103L
14991455
erase(const_iterator __first, const_iterator __last)
1456+
{
1457+
const auto __beg = begin();
1458+
const auto __cbeg = cbegin();
1459+
return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg));
1460+
}
15001461
#else
15011462
erase(iterator __first, iterator __last)
1463+
{ return _M_erase(__first, __last); }
15021464
#endif
1503-
{ return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
15041465

15051466
/**
15061467
* @brief Swaps data with another %vector.

loader/include/Geode/cocos/actions/CCAction.h

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,6 @@ class CC_DLL CCAction : public CCObject
111111
inline int getTag(void) { return m_nTag; }
112112
inline void setTag(int nTag) { m_nTag = nTag; }
113113

114-
// @note RobTop Addition
115-
void setSpeedMod(float mod);
116-
117-
// 2.2 addition
118-
float getSpeedMod();
119-
120114
public:
121115
/** Create an action */
122116
static CCAction* create();
@@ -131,7 +125,7 @@ class CC_DLL CCAction : public CCObject
131125
/** The action tag. An identifier of the action */
132126
int m_nTag;
133127
// @note RobTop Addition
134-
float m_fSpeedMod;
128+
CC_SYNTHESIZE_NV(float, m_fSpeedMod, SpeedMod);
135129
};
136130

137131
/**

loader/include/Geode/cocos/actions/CCActionInterval.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class CC_DLL CCActionInterval : public CCFiniteTimeAction
9494
float getAmplitudeRate(void);
9595

9696
// 2.2 addition
97-
bool getM_bFirstTick(); // rob were you like high on something when you wrote this
97+
bool getM_bFirstTick() const { return m_bFirstTick; } // rob were you like high on something when you wrote this
9898

9999
public:
100100
float m_elapsed;
@@ -1014,21 +1014,19 @@ class CC_DLL CCAnimate : public CCActionInterval
10141014
virtual void update(float t);
10151015
virtual CCActionInterval* reverse(void);
10161016

1017-
// 2.2 addition
1018-
bool getRecenterChildren() const;
1019-
bool getRecenterFrames() const;
1020-
void setRecenterChildren(bool recenter);
1021-
void setRecenterFrames(bool recenter);
1022-
10231017
public:
10241018
/** creates the action with an Animation and will restore the original frame when the animation is over */
10251019
static CCAnimate* create(CCAnimation *pAnimation);
1026-
CC_SYNTHESIZE_RETAIN(CCAnimation*, m_pAnimation, Animation)
1020+
CC_SYNTHESIZE_NV_RETAIN(CCAnimation*, m_pAnimation, Animation)
10271021
public:
10281022
gd::vector<float>* m_pSplitTimes;
10291023
int m_nNextFrame;
10301024
CCSpriteFrame* m_pOrigFrame;
10311025
unsigned int m_uExecutedLoops;
1026+
// @note RobTop Addition
1027+
CC_SYNTHESIZE_NV(bool, m_bRecenterFrames, RecenterFrames);
1028+
// @note RobTop Addition
1029+
CC_SYNTHESIZE_NV(bool, m_bRecenterChildren, RecenterChildren);
10321030
};
10331031

10341032
/** Overrides the target of an action so that it always runs on the target
@@ -1064,7 +1062,7 @@ class CC_DLL CCTargetedAction : public CCActionInterval
10641062
virtual void update(float time);
10651063

10661064
/** This is the target that the action will be forced to run with */
1067-
CC_SYNTHESIZE_RETAIN(CCNode*, m_pForcedTarget, ForcedTarget);
1065+
CC_SYNTHESIZE_NV_RETAIN(CCNode*, m_pForcedTarget, ForcedTarget);
10681066
public:
10691067
CCFiniteTimeAction* m_pAction;
10701068
};

loader/include/Geode/cocos/extensions/GUI/CCControlExtension/CCControlButton.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,10 @@ class CC_DLL CCControlButton : public CCControl
6666
//bool m_bIsOpacityModifyRGB;
6767

6868
/** The current title that is displayed on the button. */
69-
CC_SYNTHESIZE_READONLY(CCString*, m_currentTitle, CurrentTitle);
69+
CC_SYNTHESIZE_READONLY_NV(CCString*, m_currentTitle, CurrentTitle);
7070

7171
/** The current color used to display the title. */
72-
CC_SYNTHESIZE_READONLY_PASS_BY_REF(ccColor3B, m_currentTitleColor, CurrentTitleColor);
72+
CC_SYNTHESIZE_READONLY_NV_PASS_BY_REF(ccColor3B, m_currentTitleColor, CurrentTitleColor);
7373

7474
/** Adjust the background image. YES by default. If the property is set to NO, the
7575
background will use the prefered size of the background image. */
@@ -78,10 +78,10 @@ class CC_DLL CCControlButton : public CCControl
7878
bool m_doesAdjustBackgroundImage;
7979

8080
/** The current title label. */
81-
CC_SYNTHESIZE_RETAIN(CCNode*, m_titleLabel, TitleLabel);
81+
CC_SYNTHESIZE_NV_RETAIN(CCNode*, m_titleLabel, TitleLabel);
8282

8383
/** The current background sprite. */
84-
CC_SYNTHESIZE_RETAIN(CCScale9Sprite*, m_backgroundSprite, BackgroundSprite);
84+
CC_SYNTHESIZE_NV_RETAIN(CCScale9Sprite*, m_backgroundSprite, BackgroundSprite);
8585

8686
/** The prefered size of the button, if label is larger it will be expanded. */
8787
CC_PROPERTY(CCSize, m_preferredSize, PreferredSize);
@@ -105,18 +105,18 @@ class CC_DLL CCControlButton : public CCControl
105105
bool isPushed() { return m_isPushed; }
106106

107107
// <CCControlState, CCString*>
108-
CC_SYNTHESIZE_RETAIN(CCDictionary*, m_titleDispatchTable, TitleDispatchTable);
108+
CC_SYNTHESIZE_NV_RETAIN(CCDictionary*, m_titleDispatchTable, TitleDispatchTable);
109109
// <CCControlState, CCColor3bObject*>
110-
CC_SYNTHESIZE_RETAIN(CCDictionary*, m_titleColorDispatchTable, TitleColorDispatchTable);
110+
CC_SYNTHESIZE_NV_RETAIN(CCDictionary*, m_titleColorDispatchTable, TitleColorDispatchTable);
111111
// <CCControlState, CCNode*>
112-
CC_SYNTHESIZE_RETAIN(CCDictionary*, m_titleLabelDispatchTable, TitleLabelDispatchTable);
112+
CC_SYNTHESIZE_NV_RETAIN(CCDictionary*, m_titleLabelDispatchTable, TitleLabelDispatchTable);
113113
// <CCControlState, CCScale9Sprite*>
114-
CC_SYNTHESIZE_RETAIN(CCDictionary*, m_backgroundSpriteDispatchTable, BackgroundSpriteDispatchTable);
114+
CC_SYNTHESIZE_NV_RETAIN(CCDictionary*, m_backgroundSpriteDispatchTable, BackgroundSpriteDispatchTable);
115115

116116
/* Define the button margin for Top/Bottom edge */
117-
CC_SYNTHESIZE_READONLY(int, m_marginV, VerticalMargin);
117+
CC_SYNTHESIZE_READONLY_NV(int, m_marginV, VerticalMargin);
118118
/* Define the button margin for Left/Right edge */
119-
CC_SYNTHESIZE_READONLY(int, m_marginH, HorizontalOrigin);
119+
CC_SYNTHESIZE_READONLY_NV(int, m_marginH, HorizontalOrigin);
120120
//set the margins at once (so we only have to do one call of needsLayout)
121121
virtual void setMargins(int marginH, int marginV);
122122

0 commit comments

Comments
 (0)