Files
bigmak94andClaude Opus 5.5 4b395efe5c Add the Petari decompilation (SMGCommunity/Petari@0a5c660)
The sources of Petari (https://github.com/SMGCommunity/Petari), the
Super Mario Galaxy decompilation by the SMGCommunity, at commit
0a5c6608dc3b4c44a9aa68c2535d1793dc565f02, unchanged but for LF line
endings: LICENSE (as LICENSE-Petari.txt; CC0 1.0), include/, libs/ and
src/.  Left out: the game data Petari keeps from the original
executable, the error message archive (include/Game/System/
ErrorArchive.hpp) and two tables (src/Game/System/GalaxyID.bcsv and
StoryEvent.bcsv); GalaxyQuest's converter takes them from the player's
own disc.  The port's changes follow in the next commit, so
`git diff petari-base -- decomp` shows them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 01:59:38 +02:00

47 lines
1.2 KiB
C++

#pragma once
#include "Inline.hpp"
#include <JSystem/JKernel/JKRHeap.hpp>
class TalkMessageFuncBase {
public:
virtual bool operator()(u32) const = 0;
virtual TalkMessageFuncBase* clone() const = 0;
virtual TalkMessageFuncBase* clone(JKRHeap*) const = 0;
};
template < typename T, typename U >
class TalkMessageFuncM : public TalkMessageFuncBase {
public:
inline TalkMessageFuncM(T call, U callee) : mCaller(call), mCallee(callee) {
}
inline TalkMessageFuncM() {
}
virtual bool operator()(u32 arg) const {
return (mCaller->*mCallee)(arg);
}
virtual TalkMessageFuncM* clone() const {
return new TalkMessageFuncM(*this);
}
virtual TalkMessageFuncM* clone(JKRHeap* pHeap) const {
return new (pHeap, 0) TalkMessageFuncM(*this);
};
T mCaller;
U mCallee;
};
template < class T >
static TalkMessageFuncM< T*, bool (T::*)(u32) > TalkMessageFunc(T* a1, bool (T::*a2)(u32)) NO_INLINE {
return TalkMessageFuncM< T*, bool (T::*)(u32) >(a1, a2);
}
template < class T >
static inline TalkMessageFuncM< T*, bool (T::*)(u32) > TalkMessageFunc_Inline(T* a1, bool (T::*a2)(u32)) {
return TalkMessageFuncM< T*, bool (T::*)(u32) >(a1, a2);
}