feat(binana): no special include directories now, you must pass GHIDRA or IDA as a definition into your preprocessor

This commit is contained in:
phaneron 2024-08-09 07:15:03 -04:00
parent de5bdadc78
commit 1042d9fa22
60 changed files with 3132 additions and 589 deletions

View file

@ -0,0 +1,19 @@
#include <idc.idc>
static import_data_types() {
apply_type(0x004804F0, "void __cdecl func(EvtContext* context, EVENTID id, void* handler, void* param, float priority)");
apply_type(0x004806A0, "int32_t __cdecl func(EvtContext* context, EVENTID id, void *data, size_t bytes)");
apply_type(0x0076E540, "void* __stdcall func(uint32_t bytes, char* filename, int32_t linenumber, uint32_t flags)");
apply_type(0x0076E5A0, "int32_t __stdcall func(void* ptr, char* filename, int32_t linenumber, uint32_t flags)");
apply_type(0x0076E5E0, "void* __stdcall func(void* ptr, uint32_t bytes, char* filename, int32_t linenumber, uint32_t flags)");
apply_type(0x0076F070, "int32_t __stdcall func(char* dest, size_t maxchars, char* format, ...)");
apply_type(0x00774620, "SCritSect* __thiscall func(SCritSect* this)");
apply_type(0x00774630, "void __thiscall func(SCritSect *this)");
apply_type(0x00774640, "void __thiscall func(SCritSect *this)");
apply_type(0x00774650, "void __thiscall func(SCritSect *this)");
apply_type(0x00819EA0, "void __stdcall func(int32_t function, FrameScript_Object* object, int32_t args, char* args_fmt, FrameScript_EventObject* eventObject)");
apply_type(0x00B417C8, "uint32_t");
apply_type(0x00B417D0, "int32_t");
apply_type(0x00B41850, "CDataRecycler");
apply_type(0x00C26DF0, "CImVector[54][1024]");
}

View file

@ -1,5 +1,6 @@
#include <idc.idc> #include <idc.idc>
#include "import_data_types.idc"
static main() { static main() {
// Make names // Make names
set_name(0x00401070, "CDataStore__FetchWrite"); set_name(0x00401070, "CDataStore__FetchWrite");
@ -91,6 +92,7 @@ static main() {
set_name(0x0047DCA0, "EventForceIdleProcessing"); set_name(0x0047DCA0, "EventForceIdleProcessing");
set_name(0x0047DEA0, "IEvtSchedulerDestroy"); set_name(0x0047DEA0, "IEvtSchedulerDestroy");
set_name(0x0047E910, "InitializeSchedulerThread"); set_name(0x0047E910, "InitializeSchedulerThread");
set_name(0x0047EC10, "AttachContextToThread");
set_name(0x0047EFF0, "SchedulerThreadProcProcess"); set_name(0x0047EFF0, "SchedulerThreadProcProcess");
set_name(0x0047F230, "SchedulerThreadProc"); set_name(0x0047F230, "SchedulerThreadProc");
set_name(0x0047F2D0, "EventDoMessageLoop"); set_name(0x0047F2D0, "EventDoMessageLoop");
@ -2272,6 +2274,7 @@ static main() {
set_name(0x0076E4A0, "SMemSetDebugFlags"); set_name(0x0076E4A0, "SMemSetDebugFlags");
set_name(0x0076E540, "SMemAlloc"); set_name(0x0076E540, "SMemAlloc");
set_name(0x0076E5A0, "SMemFree"); set_name(0x0076E5A0, "SMemFree");
set_name(0x0076E5E0, "SMemReAlloc");
set_name(0x0076E6E0, "SStrChr"); set_name(0x0076E6E0, "SStrChr");
set_name(0x0076E760, "SStrCmp"); set_name(0x0076E760, "SStrCmp");
set_name(0x0076E780, "SStrCmpI"); set_name(0x0076E780, "SStrCmpI");
@ -2329,6 +2332,7 @@ static main() {
set_name(0x00809E30, "Script_SpellStopTargeting"); set_name(0x00809E30, "Script_SpellStopTargeting");
set_name(0x00809EA0, "Script_SpellStopCasting"); set_name(0x00809EA0, "Script_SpellStopCasting");
set_name(0x0080DC00, "Script_SpellTargetUnit"); set_name(0x0080DC00, "Script_SpellTargetUnit");
set_name(0x00819EA0, "FrameScript_Execute");
set_name(0x0081B720, "Script_GetText"); set_name(0x0081B720, "Script_GetText");
set_name(0x0081B7B0, "Script_CreateFont"); set_name(0x0081B7B0, "Script_CreateFont");
set_name(0x0081B820, "Script_GetCurrentKeyBoardFocus"); set_name(0x0081B820, "Script_GetCurrentKeyBoardFocus");
@ -2336,6 +2340,28 @@ static main() {
set_name(0x0081BAB0, "Script_GetNumFrames"); set_name(0x0081BAB0, "Script_GetNumFrames");
set_name(0x0081BB20, "Script_CreateFrame"); set_name(0x0081BB20, "Script_CreateFrame");
set_name(0x0081BE70, "Script_GetFramesRegisteredForEvent"); set_name(0x0081BE70, "Script_GetFramesRegisteredForEvent");
set_name(0x0084DBD0, "_lua_gettop");
set_name(0x0084DBF0, "_lua_settop");
set_name(0x0084DCC0, "_lua_insert");
set_name(0x0084DEB0, "_lua_type");
set_name(0x0084DF20, "_lua_isnumber");
set_name(0x0084DF60, "_lua_isstring");
set_name(0x0084E030, "_lua_tonumber");
set_name(0x0084E0E0, "_lua_tolstring");
set_name(0x0084E1C0, "_lua_touserdata");
set_name(0x0084E280, "_lua_pushnil");
set_name(0x0084E2A0, "_lua_pushnumber");
set_name(0x0084E350, "_lua_pushstring");
set_name(0x0084E600, "_lua_rawget");
set_name(0x0084E670, "_lua_rawgeti");
set_name(0x0084E970, "_lua_rawset");
set_name(0x0084F280, "_luaL_error");
set_name(0x0084F7A0, "_luaL_unref");
set_name(0x00850920, "_luaG_runerror");
set_name(0x008562E0, "_luaD_throw");
set_name(0x00856370, "_luaD_precall");
set_name(0x00856760, "luaD_call");
set_name(0x00857CA0, "_luaV_execute");
set_name(0x008695B0, "RestoreMouse"); set_name(0x008695B0, "RestoreMouse");
set_name(0x00869720, "OsInputInitialize"); set_name(0x00869720, "OsInputInitialize");
set_name(0x00869760, "OsInputDestroy"); set_name(0x00869760, "OsInputDestroy");
@ -2545,6 +2571,8 @@ static main() {
set_name(0x00ADBAD4, "s_hRect"); set_name(0x00ADBAD4, "s_hRect");
set_name(0x00ADBAE4, "s_baseTextFlags"); set_name(0x00ADBAE4, "s_baseTextFlags");
set_name(0x00B417C8, "s_mainThread"); set_name(0x00B417C8, "s_mainThread");
set_name(0x00B417D0, "s_interactiveCount");
set_name(0x00B41850, "s_messageRecycler");
set_name(0x00C26DF0, "s_cursorImages"); set_name(0x00C26DF0, "s_cursorImages");
set_name(0x00C5DF88, "g_theGxDevicePtr"); set_name(0x00C5DF88, "g_theGxDevicePtr");
set_name(0x00C5DFDC, "CGxDevice__s_uiVertexShader"); set_name(0x00C5DFDC, "CGxDevice__s_uiVertexShader");
@ -2736,6 +2764,7 @@ static main() {
set_func_end(0x0047DEA0, 0x0047E117); set_func_end(0x0047DEA0, 0x0047E117);
set_func_start(0x0047E910, 0x0047E910); set_func_start(0x0047E910, 0x0047E910);
set_func_end(0x0047E910, 0x0047EA69); set_func_end(0x0047E910, 0x0047EA69);
set_func_start(0x0047EC10, 0x0047EC10);
set_func_start(0x0047EFF0, 0x0047EFF0); set_func_start(0x0047EFF0, 0x0047EFF0);
set_func_end(0x0047EFF0, 0x0047F225); set_func_end(0x0047EFF0, 0x0047F225);
set_func_start(0x0047F230, 0x0047F230); set_func_start(0x0047F230, 0x0047F230);
@ -7065,6 +7094,8 @@ static main() {
set_func_end(0x0076E540, 0x0076E59A); set_func_end(0x0076E540, 0x0076E59A);
set_func_start(0x0076E5A0, 0x0076E5A0); set_func_start(0x0076E5A0, 0x0076E5A0);
set_func_end(0x0076E5A0, 0x0076E5C4); set_func_end(0x0076E5A0, 0x0076E5C4);
set_func_start(0x0076E5E0, 0x0076E5E0);
set_func_end(0x0076E5E0, 0x0076E6D6);
set_func_start(0x0076E6E0, 0x0076E6E0); set_func_start(0x0076E6E0, 0x0076E6E0);
set_func_end(0x0076E6E0, 0x0076E712); set_func_end(0x0076E6E0, 0x0076E712);
set_func_start(0x0076E760, 0x0076E760); set_func_start(0x0076E760, 0x0076E760);
@ -7179,6 +7210,8 @@ static main() {
set_func_end(0x00809EA0, 0x00809F7E); set_func_end(0x00809EA0, 0x00809F7E);
set_func_start(0x0080DC00, 0x0080DC00); set_func_start(0x0080DC00, 0x0080DC00);
set_func_end(0x0080DC00, 0x0080DCE3); set_func_end(0x0080DC00, 0x0080DCE3);
set_func_start(0x00819EA0, 0x00819EA0);
set_func_end(0x00819EA0, 0x0081A2B5);
set_func_start(0x0081B720, 0x0081B720); set_func_start(0x0081B720, 0x0081B720);
set_func_end(0x0081B720, 0x0081B7AF); set_func_end(0x0081B720, 0x0081B7AF);
set_func_start(0x0081B7B0, 0x0081B7B0); set_func_start(0x0081B7B0, 0x0081B7B0);
@ -7193,6 +7226,28 @@ static main() {
set_func_end(0x0081BB20, 0x0081BE68); set_func_end(0x0081BB20, 0x0081BE68);
set_func_start(0x0081BE70, 0x0081BE70); set_func_start(0x0081BE70, 0x0081BE70);
set_func_end(0x0081BE70, 0x0081BF4D); set_func_end(0x0081BE70, 0x0081BF4D);
set_func_start(0x0084DBD0, 0x0084DBD0);
set_func_start(0x0084DBF0, 0x0084DBF0);
set_func_start(0x0084DCC0, 0x0084DCC0);
set_func_start(0x0084DEB0, 0x0084DEB0);
set_func_start(0x0084DF20, 0x0084DF20);
set_func_start(0x0084DF60, 0x0084DF60);
set_func_start(0x0084E030, 0x0084E030);
set_func_start(0x0084E0E0, 0x0084E0E0);
set_func_start(0x0084E1C0, 0x0084E1C0);
set_func_start(0x0084E280, 0x0084E280);
set_func_start(0x0084E2A0, 0x0084E2A0);
set_func_start(0x0084E350, 0x0084E350);
set_func_start(0x0084E600, 0x0084E600);
set_func_start(0x0084E670, 0x0084E670);
set_func_start(0x0084E970, 0x0084E970);
set_func_start(0x0084F280, 0x0084F280);
set_func_start(0x0084F7A0, 0x0084F7A0);
set_func_start(0x00850920, 0x00850920);
set_func_start(0x008562E0, 0x008562E0);
set_func_start(0x00856370, 0x00856370);
set_func_start(0x00856760, 0x00856760);
set_func_start(0x00857CA0, 0x00857CA0);
set_func_start(0x008695B0, 0x008695B0); set_func_start(0x008695B0, 0x008695B0);
set_func_end(0x008695B0, 0x008695FB); set_func_end(0x008695B0, 0x008695FB);
set_func_start(0x00869720, 0x00869720); set_func_start(0x00869720, 0x00869720);
@ -7444,5 +7499,5 @@ static main() {
set_func_start(0x009DE1C0, 0x009DE1C0); set_func_start(0x009DE1C0, 0x009DE1C0);
set_func_start(0x009DE1D0, 0x009DE1D0); set_func_start(0x009DE1D0, 0x009DE1D0);
// Apply data types // Apply data types
apply_type(0x00C26DF0, "CImVector[54][1024]"); import_data_types();
} }

View file

@ -1,4 +0,0 @@
#ifndef IDA_STD_BOOL_H
#define IDA_STD_BOOL_H
#endif

View file

@ -1,17 +0,0 @@
#ifndef IDA_STD_INT_H
#define IDA_STD_INT_H
typedef signed char int8_t;
typedef short int16_t;
typedef int int32_t;
typedef long long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
typedef int32_t ptrdiff_t;
typedef uint32_t uintptr_t;
typedef int32_t intptr_t;
#endif

View file

@ -0,0 +1,39 @@
#ifndef COMMON_DATA_RECYCLER_H
#define COMMON_DATA_RECYCLER_H
#include "system/types.h"
DECLARE_STRUCT(CDataRecycler);
DECLARE_STRUCT(CDataRecycler__vtable);
DECLARE_STRUCT(CDataRecycler__NodeBlock);
DECLARE_STRUCT(CDataRecycler__Node);
struct CDataRecycler__vtable {
void *v_fn_00;
void *v_fn_01;
void *v_fn_02;
void *v_fn_03;
void *v_fn_04;
};
struct CDataRecycler__Node {
CDataRecycler__Node* m_next;
void* m_data;
uint32_t m_bytes;
};
struct CDataRecycler__NodeBlock {
CDataRecycler__NodeBlock* m_next;
CDataRecycler__Node m_nodes[1];
};
struct CDataRecycler {
CDataRecycler__vtable* v_vtable;
int32_t m_nodesRecyclable;
uint32_t m_nodesPerBlock;
CDataRecycler__NodeBlock* m_nodeBlockList;
CDataRecycler__Node* m_nodeFullList;
CDataRecycler__Node* m_nodeEmptyList;
};
#endif

View file

@ -0,0 +1,13 @@
#ifndef COMMON_HANDLE_H
#define COMMON_HANDLE_H
#include "system/types.h"
#if !defined(DECLARE_HANDLE)
#define DECLARE_HANDLE(name) \
typedef struct name##__ { \
int32_t unused; \
}* name
#endif
#endif

View file

@ -0,0 +1,43 @@
#ifndef COMMON_INSTANCE_H
#define COMMON_INSTANCE_H
#include "system/types.h"
#include "storm/list.h"
#include "storm/thread.h"
// TSList<T>
// TSLinkedNode<T>
// TInstanceId<T>
// TSingletonInstanceId<T>
#define COMMON_INSTANCE_ID(T) \
STORM_TS_LIST(T) \
typedef struct TInstanceId_##T TInstanceId_##T; \
typedef struct TSingletonInstanceId_##T TSingletonInstanceId_##T; \
struct TInstanceId_##T { \
TSLinkedNode_##T b_base; \
uint32_t m_id; \
}; \
struct TSingletonInstanceId_##T { \
TInstanceId_##T b_base; \
};
#define COMMON_INSTANCE_ID_TABLE(T) \
STORM_TS_LIST(T) \
typedef struct TInstanceIdTable_##T TInstanceIdTable_##T; \
struct TInstanceIdTable_##T { \
SCritSect m_idCritSect; \
uint32_t m_id; \
int32_t m_idWrapped; \
CSRWLock m_idLock[8]; \
TSList_##T m_idList[8]; \
};
// template <class T>
// class TExtraInstanceRecyclable
typedef struct TExtraInstanceRecyclable TExtraInstanceRecyclable;
struct TExtraInstanceRecyclable {
uint32_t m_recycleBytes;
};
#endif

View file

@ -1,7 +1,7 @@
#ifndef D3D9_CAPS_H #ifndef D3D9_CAPS_H
#define D3D9_CAPS_H #define D3D9_CAPS_H
#include <stdint.h> #include "system/types.h"
typedef enum D3DDEVTYPE D3DDEVTYPE; typedef enum D3DDEVTYPE D3DDEVTYPE;
typedef struct D3DVSHADERCAPS2_0 D3DVSHADERCAPS2_0; typedef struct D3DVSHADERCAPS2_0 D3DVSHADERCAPS2_0;

View file

@ -1,7 +1,7 @@
#ifndef D3D9_DEVICE_H #ifndef D3D9_DEVICE_H
#define D3D9_DEVICE_H #define D3D9_DEVICE_H
#include <stdint.h> #include "system/types.h"
#include "d3d9/caps.h" #include "d3d9/caps.h"

View file

@ -0,0 +1,66 @@
#ifndef EVENT_CONTEXT_H
#define EVENT_CONTEXT_H
#include "storm/thread.h"
#include "common/instance.h"
#include "storm/queue/timer_priority_uint32_t.h"
#include "event/message.h"
#include "event/handler.h"
#include "event/keydown.h"
#include "event/types.h"
#include "event/timer.h"
#include "event/id_table.h"
DECLARE_ENUM(SCHEDSTATE);
DECLARE_STRUCT(EvtContext);
DECLARE_STRUCT(EvtTimer);
DECLARE_HANDLE(HPROPCONTEXT);
// EvtContext::SCHEDSTATE
enum SCHEDSTATE {
SCHEDSTATE_ACTIVE = 0x0,
SCHEDSTATE_CLOSED = 0x1,
SCHEDSTATE_DESTROYED = 0x2,
_UNIQUE_SYMBOL_SCHEDSTATE_96 = 0xFFFFFFFF
};
COMMON_INSTANCE_ID(EvtContext);
// class EvtContext : public TSingletonInstanceId<EvtContext, offsetof(TInstanceId<EvtContext>, m_id)>
struct EvtContext {
TSingletonInstanceId_EvtContext b_base;
uint32_t unkA;
// Member variables
SCritSect m_critsect;
uint32_t m_currTime;
SCHEDSTATE m_schedState;
TSTimerPriority_uint32_t m_schedNextWakeTime;
uint32_t m_schedLastIdle;
uint32_t m_schedFlags;
uint32_t m_schedIdleTime;
uint32_t m_schedInitialIdleTime;
uint32_t m_schedWeight;
uint32_t m_schedSmoothWeight;
int32_t m_schedRebalance;
int32_t unkXX;
int32_t unkXY;
int32_t unkXZ;
int32_t unkYY;
int32_t unkYZ;
// TSExplicitList<EvtHandler, offsetof(EvtHandler, link)> m_queueHandlerList[EVENTIDS];
TSExplicitList_EvtHandler m_queueHandlerList[36];
// TSExplicitList<EvtMessage, offsetof(EvtMessage, link)> m_queueMessageList;
TSExplicitList_EvtMessage m_queueMessageList;
uint32_t m_queueSyncButtonState;
// TSExplicitList<EvtKeyDown, offsetof(EvtKeyDown, link)> m_queueSyncKeyDownList;
TSExplicitList_EvtKeyDown m_queueSyncKeyDownList;
EvtIdTable_pointer_to_EvtTimer m_timerIdTable;
EvtTimerQueue m_timerQueue;
HPROPCONTEXT m_propContext;
void* m_callContext;
uint32_t m_startWatchdog;
};
#endif

View file

@ -0,0 +1,20 @@
#ifndef EVENT_HANDLER_H
#define EVENT_HANDLER_H
#include "system/types.h"
#include "storm/list.h"
DECLARE_STRUCT(EvtHandler);
STORM_TS_LIST(EvtHandler);
struct EvtHandler {
TSLink_EvtHandler link;
int32_t (*func)(const void*, void*);
void* param;
float priority;
int32_t marker;
};
#endif

View file

@ -0,0 +1,15 @@
#ifndef EVENT_ID_TABLE_H
#define EVENT_ID_TABLE_H
#include "storm/array.h"
#include "storm/array/uint32_t.h"
#include "event/timer.h"
DECLARE_STRUCT(EvtIdTable_pointer_to_EvtTimer);
struct EvtIdTable_pointer_to_EvtTimer {
TSGrowableArray_pointer_to_EvtTimer m_allocArray;
TSGrowableArray_uint32_t m_freeArray;
};
#endif

View file

@ -0,0 +1,16 @@
#ifndef EVENT_KEY_DOWN_H
#define EVENT_KEY_DOWN_H
#include "storm/list.h"
#include "event/types.h"
typedef struct EvtKeyDown EvtKeyDown;
STORM_TS_LIST(EvtKeyDown);
struct EvtKeyDown {
TSLink_EvtKeyDown link;
KEY key;
};
#endif

View file

@ -0,0 +1,23 @@
#ifndef EVENT_MESSAGE_H
#define EVENT_MESSAGE_H
#include "system/types.h"
#include "common/instance.h"
#include "storm/list.h"
#include "event/types.h"
typedef struct EvtMessage EvtMessage;
STORM_TS_LIST(EvtMessage);
// class EvtMessage : public TExtraInstanceRecyclable<EvtMessage>
struct EvtMessage {
TExtraInstanceRecyclable b_base;
TSLink_EvtMessage link;
EVENTID id;
char data[4];
};
#endif

View file

@ -0,0 +1,32 @@
#ifndef EVENT_TIMER_H
#define EVENT_TIMER_H
#include "system/types.h"
#include "storm/queue/timer_priority_uint32_t.h"
DECLARE_STRUCT(EvtTimer);
DECLARE_STRUCT(EvtTimerQueue);
// class EvtTimer
struct EvtTimer {
// Member variables
uint32_t id;
TSTimerPriority_uint32_t targetTime;
float timeout;
int32_t (*handler)(const void*, void*);
void* param;
int32_t (*guidHandler)(const void*, uint64_t, void*);
uint64_t guidParam;
void* guidParam2;
};
STORM_TS_PRIORITY_QUEUE(EvtTimer);
STORM_TS_GROWABLE_ARRAY_POINTER_TO(EvtTimer);
// class EvtTimerQueue : public TSPriorityQueue<EvtTimer>
struct EvtTimerQueue {
TSPriorityQueue_EvtTimer b_base;
};
#endif

View file

@ -0,0 +1,277 @@
#ifndef EVENT_TYPES_H
#define EVENT_TYPES_H
#include "system/types.h"
DECLARE_ENUM(EVENTID);
DECLARE_ENUM(KEY);
DECLARE_ENUM(MOUSEBUTTON);
DECLARE_ENUM(MOUSEMODE);
DECLARE_ENUM(OSINPUT);
DECLARE_ENUM(OS_MOUSE_MODE);
DECLARE_STRUCT(OSEVENT);
DECLARE_STRUCT(EVENT_DATA_CHAR);
DECLARE_STRUCT(EVENT_DATA_FOCUS);
DECLARE_STRUCT(EVENT_DATA_IDLE);
DECLARE_STRUCT(EVENT_DATA_KEY);
DECLARE_STRUCT(EVENT_DATA_MOUSE);
DECLARE_STRUCT(EVENT_DATA_SIZE);
typedef void* HEVENTCONTEXT;
typedef int32_t (*EVENTHANDLERFUNC)(const void*, void*);
enum EVENTID {
EVENT_ID_0 = 0,
EVENT_ID_CHAR = 1,
EVENT_ID_FOCUS = 2,
EVENT_ID_3 = 3,
EVENT_ID_DESTROY = 4,
EVENT_ID_5 = 5,
EVENT_ID_IDLE = 6,
EVENT_ID_POLL = 7,
EVENT_ID_INITIALIZE = 8,
EVENT_ID_KEYDOWN = 9,
EVENT_ID_KEYUP = 10,
EVENT_ID_KEYDOWN_REPEATING = 11,
EVENT_ID_MOUSEDOWN = 12,
EVENT_ID_MOUSEMOVE = 13,
EVENT_ID_MOUSEMOVE_RELATIVE = 14,
EVENT_ID_MOUSEUP = 15,
EVENT_ID_MOUSEMODE_CHANGED = 16,
EVENT_ID_MOUSEWHEEL = 17,
EVENT_ID_18 = 18,
EVENT_ID_19 = 19,
EVENT_ID_20 = 20,
EVENT_ID_21 = 21,
EVENT_ID_22 = 22,
EVENT_ID_PAINT = 23,
EVENT_ID_NET_DATA = 24,
EVENT_ID_NET_CONNECT = 25,
EVENT_ID_NET_DISCONNECT = 26,
EVENT_ID_NET_CANTCONNECT = 27,
EVENT_ID_NET_DESTROY = 28,
EVENT_ID_NET_AUTH_CHALLENGE = 29,
EVENT_ID_30 = 30,
EVENT_ID_31 = 31,
EVENT_ID_32 = 32,
EVENT_ID_33 = 33,
EVENT_ID_IME = 34,
EVENT_ID_SIZE = 35,
EVENTIDS = 36
};
enum KEY {
KEY_NONE = 0xFFFFFFFF,
KEY_LSHIFT = 0x0,
KEY_RSHIFT = 0x1,
KEY_LCONTROL = 0x2,
KEY_RCONTROL = 0x3,
KEY_LALT = 0x4,
KEY_RALT = 0x5,
KEY_LASTMETAKEY = 0x5,
KEY_SPACE = 0x20,
KEY_0 = 0x30,
KEY_1 = 0x31,
KEY_2 = 0x32,
KEY_3 = 0x33,
KEY_4 = 0x34,
KEY_5 = 0x35,
KEY_6 = 0x36,
KEY_7 = 0x37,
KEY_8 = 0x38,
KEY_9 = 0x39,
KEY_A = 0x41,
KEY_B = 0x42,
KEY_C = 0x43,
KEY_D = 0x44,
KEY_E = 0x45,
KEY_F = 0x46,
KEY_G = 0x47,
KEY_H = 0x48,
KEY_I = 0x49,
KEY_J = 0x4A,
KEY_K = 0x4B,
KEY_L = 0x4C,
KEY_M = 0x4D,
KEY_N = 0x4E,
KEY_O = 0x4F,
KEY_P = 0x50,
KEY_Q = 0x51,
KEY_R = 0x52,
KEY_S = 0x53,
KEY_T = 0x54,
KEY_U = 0x55,
KEY_V = 0x56,
KEY_W = 0x57,
KEY_X = 0x58,
KEY_Y = 0x59,
KEY_Z = 0x5A,
KEY_TILDE = 0x60,
KEY_NUMPAD0 = 0x100,
KEY_NUMPAD1 = 0x101,
KEY_NUMPAD2 = 0x102,
KEY_NUMPAD3 = 0x103,
KEY_NUMPAD4 = 0x104,
KEY_NUMPAD5 = 0x105,
KEY_NUMPAD6 = 0x106,
KEY_NUMPAD7 = 0x107,
KEY_NUMPAD8 = 0x108,
KEY_NUMPAD9 = 0x109,
KEY_NUMPAD_PLUS = 0x10A,
KEY_NUMPAD_MINUS = 0x10B,
KEY_NUMPAD_MULTIPLY = 0x10C,
KEY_NUMPAD_DIVIDE = 0x10D,
KEY_NUMPAD_DECIMAL = 0x10E,
KEY_NUMPAD_EQUALS = 0x30C,
KEY_PLUS = 0x3D,
KEY_MINUS = 0x2D,
KEY_BRACKET_OPEN = 0x5B,
KEY_BRACKET_CLOSE = 0x5D,
KEY_SLASH = 0x2F,
KEY_BACKSLASH = 0x5C,
KEY_SEMICOLON = 0x3B,
KEY_APOSTROPHE = 0x27,
KEY_COMMA = 0x2C,
KEY_PERIOD = 0x2E,
KEY_ESCAPE = 0x200,
KEY_ENTER = 0x201,
KEY_BACKSPACE = 0x202,
KEY_TAB = 0x203,
KEY_LEFT = 0x204,
KEY_UP = 0x205,
KEY_RIGHT = 0x206,
KEY_DOWN = 0x207,
KEY_INSERT = 0x208,
KEY_DELETE = 0x209,
KEY_HOME = 0x20A,
KEY_END = 0x20B,
KEY_PAGEUP = 0x20C,
KEY_PAGEDOWN = 0x20D,
KEY_CAPSLOCK = 0x20E,
KEY_NUMLOCK = 0x20F,
KEY_SCROLLLOCK = 0x210,
KEY_PAUSE = 0x211,
KEY_PRINTSCREEN = 0x212,
KEY_F1 = 0x300,
KEY_F2 = 0x301,
KEY_F3 = 0x302,
KEY_F4 = 0x303,
KEY_F5 = 0x304,
KEY_F6 = 0x305,
KEY_F7 = 0x306,
KEY_F8 = 0x307,
KEY_F9 = 0x308,
KEY_F10 = 0x309,
KEY_F11 = 0x30A,
KEY_F12 = 0x30B,
KEY_F13 = 0x212,
KEY_F14 = 0x30D,
KEY_F15 = 0x30E,
KEY_F16 = 0x30F,
KEY_F17 = 0x310,
KEY_F18 = 0x311,
KEY_F19 = 0x312,
KEY_LAST = 0x313
};
enum MOUSEBUTTON {
MOUSE_BUTTON_NONE = 0x0,
MOUSE_BUTTON_LEFT = 0x1,
MOUSE_BUTTON_MIDDLE = 0x2,
MOUSE_BUTTON_RIGHT = 0x4,
MOUSE_BUTTON_XBUTTON1 = 0x8,
MOUSE_BUTTON_XBUTTON2 = 0x10,
MOUSE_BUTTON_XBUTTON3 = 0x20,
MOUSE_BUTTON_XBUTTON4 = 0x40,
MOUSE_BUTTON_XBUTTON5 = 0x80,
MOUSE_BUTTON_XBUTTON6 = 0x100,
MOUSE_BUTTON_XBUTTON7 = 0x200,
MOUSE_BUTTON_XBUTTON8 = 0x400,
MOUSE_BUTTON_XBUTTON9 = 0x800,
MOUSE_BUTTON_XBUTTON10 = 0x1000,
MOUSE_BUTTON_XBUTTON11 = 0x2000,
MOUSE_BUTTON_XBUTTON12 = 0x4000,
MOUSE_BUTTON_ALL = 0xFFFFFFFF
};
enum MOUSEMODE {
MOUSE_MODE_NORMAL = 0x0,
MOUSE_MODE_RELATIVE = 0x1,
MOUSE_MODES = 0x2
};
enum OSINPUT {
OS_INPUT_CAPTURE_CHANGED = 0,
OS_INPUT_CHAR = 1,
OS_INPUT_STRING = 2,
OS_INPUT_IME = 3,
OS_INPUT_SIZE = 4,
OS_INPUT_CLOSE = 5,
OS_INPUT_FOCUS = 6,
OS_INPUT_KEY_DOWN = 7,
OS_INPUT_KEY_UP = 8,
OS_INPUT_MOUSE_DOWN = 9,
OS_INPUT_MOUSE_MOVE = 10,
OS_INPUT_MOUSE_WHEEL = 11,
OS_INPUT_MOUSE_MOVE_RELATIVE = 12,
OS_INPUT_MOUSE_UP = 13,
OS_INPUT_14 = 14,
OS_INPUT_15 = 15,
OS_INPUT_16 = 16,
OS_INPUT_17 = 17,
OS_INPUT_18 = 18,
OS_INPUT_SHUTDOWN = 19
};
enum OS_MOUSE_MODE {
OS_MOUSE_MODE_NORMAL = 0,
OS_MOUSE_MODE_RELATIVE = 1,
OS_MOUSE_MODES = 2,
};
struct OSEVENT {
OSINPUT id;
int32_t param[4];
};
struct EVENT_DATA_CHAR {
int32_t ch;
uint32_t metaKeyState;
uint32_t repeat;
};
struct EVENT_DATA_FOCUS {
int32_t focus;
};
struct EVENT_DATA_IDLE {
float elapsedSec;
uint32_t time;
};
struct EVENT_DATA_KEY {
KEY key;
uint32_t metaKeyState;
uint32_t repeat;
uint32_t time;
};
struct EVENT_DATA_MOUSE {
MOUSEMODE mode;
MOUSEBUTTON button;
uint32_t buttonState;
uint32_t metaKeyState;
uint32_t flags;
float x;
float y;
int32_t wheelDistance;
uint32_t time;
};
struct EVENT_DATA_SIZE {
int32_t w;
int32_t h;
};
#endif

View file

@ -0,0 +1,35 @@
#ifndef FRAMESCRIPT_EVENT_OBJECT_H
#define FRAMESCRIPT_EVENT_OBJECT_H
#include "storm/hash.h"
#include "framescript/object.h"
#include "ui/simpleframe.h"
DECLARE_STRUCT(FrameScript_EventObject);
DECLARE_STRUCT(SIMPLEFRAMENODE);
DECLARE_STRUCT(EVENTLISTENERNODE);
STORM_TS_LIST(SIMPLEFRAMENODE);
STORM_TS_LIST(EVENTLISTENERNODE);
// struct SIMPLEFRAMENODE : TSLinkedNode<SIMPLEFRAMENODE>
struct SIMPLEFRAMENODE {
TSLinkedNode_SIMPLEFRAMENODE b_base;
CSimpleFrame* frame;
};
// struct EVENTLISTENERNODE : TSLinkedNode<EVENTLISTENERNODE> {
struct EVENTLISTENERNODE {
TSLinkedNode_EVENTLISTENERNODE b_base;
FrameScript_Object* listener;
};
STORM_TS_HASH(FrameScript_EventObject, HASHKEY_STRI)
struct FrameScript_EventObject {
TSHashObject_FrameScript_EventObject_HASHKEY_STRI b_base;
};
#endif

View file

@ -0,0 +1,15 @@
#ifndef FRAMESCRIPT_OBJECT_H
#define FRAMESCRIPT_OBJECT_H
#include "system/types.h"
DECLARE_STRUCT(FrameScript_Object);
struct FrameScript_Object {
void** v_vtable;
int32_t lua_registered;
int32_t lua_objectRef;
int32_t m_onEvent;
};
#endif

View file

@ -1,7 +1,7 @@
#ifndef GX_BUFFER_H #ifndef GX_BUFFER_H
#define GX_BUFFER_H #define GX_BUFFER_H
#include <stdint.h> #include "system/types.h"
#include "storm/list.h" #include "storm/list.h"
#include "tempest/vector.h" #include "tempest/vector.h"

View file

@ -1,7 +1,7 @@
#ifndef GX_CAPS_H #ifndef GX_CAPS_H
#define GX_CAPS_H #define GX_CAPS_H
#include <stdint.h> #include "system/types.h"
#include "gx/types.h" #include "gx/types.h"

View file

@ -1,7 +1,7 @@
#ifndef GX_DEVICE_H #ifndef GX_DEVICE_H
#define GX_DEVICE_H #define GX_DEVICE_H
#include <stdint.h> #include "system/types.h"
#include "storm/array.h" #include "storm/array.h"
#include "storm/array/uint32_t.h" #include "storm/array/uint32_t.h"

View file

@ -1,8 +1,7 @@
#ifndef GX_FORMAT_H #ifndef GX_FORMAT_H
#define GX_FORMAT_H #define GX_FORMAT_H
#include <stdint.h> #include "system/types.h"
#include <stdbool.h>
#include "tempest/vector.h" #include "tempest/vector.h"

View file

@ -1,7 +1,7 @@
#ifndef GX_MATRIX_STACK_H #ifndef GX_MATRIX_STACK_H
#define GX_MATRIX_STACK_H #define GX_MATRIX_STACK_H
#include <stdint.h> #include "system/types.h"
#include "tempest/matrix.h" #include "tempest/matrix.h"

View file

@ -1,7 +1,7 @@
#ifndef GX_STATE_BOM_H #ifndef GX_STATE_BOM_H
#define GX_STATE_BOM_H #define GX_STATE_BOM_H
#include <stdint.h> #include "system/types.h"
#include "storm/array.h" #include "storm/array.h"
typedef struct CGxStateBom CGxStateBom; typedef struct CGxStateBom CGxStateBom;

View file

@ -1,7 +1,7 @@
#ifndef GX_TYPES_H #ifndef GX_TYPES_H
#define GX_TYPES_H #define GX_TYPES_H
#include <stdint.h> #include "system/types.h"
#include "storm/array.h" #include "storm/array.h"

View file

@ -1,4 +1,38 @@
// Defines
#include "system/detect.h"
// Types // Types
#include "common/handle.h"
#include "common/instance.h"
#include "common/datarecycler.h"
#include "d3d9/caps.h"
#include "d3d9/device.h"
#include "event/types.h"
#include "event/context.h"
#include "event/handler.h"
#include "event/id_table.h"
#include "event/keydown.h"
#include "event/message.h"
#include "event/timer.h"
#include "framescript/object.h"
#include "framescript/event_object.h"
#include "gx/buffer.h"
#include "gx/caps.h"
#include "gx/device.h"
#include "gx/format.h"
#include "gx/matrix_stack.h"
#include "gx/shader.h"
#include "gx/state_bom.h"
#include "gx/types.h"
#include "gx/batch.h"
#include "gx/d3d9.h"
#include "storm/array.h" #include "storm/array.h"
#include "storm/list.h" #include "storm/list.h"
#include "storm/hash.h" #include "storm/hash.h"
@ -12,22 +46,17 @@
#include "tempest/sphere.h" #include "tempest/sphere.h"
#include "tempest/vector.h" #include "tempest/vector.h"
#include "gx/buffer.h" #include "ui/simpleframe.h"
#include "gx/caps.h"
#include "gx/device.h"
#include "gx/format.h"
#include "gx/matrix_stack.h"
#include "gx/shader.h"
#include "gx/state_bom.h"
#include "gx/types.h"
#include "gx/batch.h"
#include "gx/d3d9.h"
// include files that define the use of template classes for standard library types // include files that define the use of template classes for standard library types
// template classes for whoa types should be entered immediately after where the type is // template classes for whoa types should be entered immediately after where the type is
#include "storm/array/pointer_to_void.h"
#include "storm/array/uint8_t.h"
#include "storm/array/uint32_t.h" #include "storm/array/uint32_t.h"
#include "storm/queue/timer_priority_uint32_t.h"
// template types that are defined in our headers, should be declared immediately after the base type // template types that are defined in our headers, should be declared immediately after the base type
// and not used anywhere else // and not used anywhere else

View file

@ -1,7 +1,7 @@
#ifndef STORM_ARRAY_H #ifndef STORM_ARRAY_H
#define STORM_ARRAY_H #define STORM_ARRAY_H
#include <stdint.h> #include "system/types.h"
#define STORM_TS_BASE_ARRAY(T) typedef struct TSBaseArray_##T TSBaseArray_##T; \ #define STORM_TS_BASE_ARRAY(T) typedef struct TSBaseArray_##T TSBaseArray_##T; \
struct TSBaseArray_##T { \ struct TSBaseArray_##T { \
@ -25,4 +25,28 @@ struct TSGrowableArray_##T { \
uint32_t m_chunk; \ uint32_t m_chunk; \
}; };
// "pointer-to" types hack
#define STORM_TS_BASE_ARRAY_POINTER_TO(T) typedef struct TSBaseArray_pointer_to_##T TSBaseArray_pointer_to_##T; \
struct TSBaseArray_pointer_to_##T { \
uint32_t m_alloc; \
uint32_t m_count; \
T** m_data; \
};
#define STORM_TS_FIXED_ARRAY_POINTER_TO(T) typedef struct TSFixedArray_pointer_to_##T TSFixedArray_pointer_to_##T; \
struct TSFixedArray_pointer_to_##T { \
uint32_t m_alloc; \
uint32_t m_count; \
T** m_data; \
};
#define STORM_TS_GROWABLE_ARRAY_POINTER_TO(T) typedef struct TSGrowableArray_pointer_to_##T TSGrowableArray_pointer_to_##T; \
struct TSGrowableArray_pointer_to_##T { \
uint32_t m_alloc; \
uint32_t m_count; \
T** m_data; \
uint32_t m_chunk; \
};
#endif #endif

View file

@ -0,0 +1,10 @@
#ifndef STORM_ARRAY_POINTER_TO_VOID_H
#define STORM_ARRAY_POINTER_TO_VOID_H
#include "system/types.h"
#include "storm/array.h"
STORM_TS_GROWABLE_ARRAY_POINTER_TO(void);
#endif

View file

@ -1,7 +1,7 @@
#ifndef STORM_ARRAY_UINT32_T_H #ifndef STORM_ARRAY_UINT32_T_H
#define STORM_ARRAY_UINT32_T_H #define STORM_ARRAY_UINT32_T_H
#include <stdint.h> #include "system/types.h"
#include "storm/array.h" #include "storm/array.h"

View file

@ -1,7 +1,7 @@
#ifndef STORM_ARRAY_UINT8_T_H #ifndef STORM_ARRAY_UINT8_T_H
#define STORM_ARRAY_UINT8_T_H #define STORM_ARRAY_UINT8_T_H
#include <stdint.h> #include "system/types.h"
#include "storm/array.h" #include "storm/array.h"

View file

@ -1,7 +1,7 @@
#ifndef STORM_HASH_H #ifndef STORM_HASH_H
#define STORM_HASH_H #define STORM_HASH_H
#include <stdint.h> #include "system/types.h"
#include "storm/array.h" #include "storm/array.h"
#include "storm/list.h" #include "storm/list.h"
@ -24,10 +24,10 @@ struct TSHashObject_##T##_##K { \
K m_key; \ K m_key; \
}; };
typedef struct HASHKEY_PTR HASHKEY_PTR; DECLARE_STRUCT(HASHKEY_PTR);
typedef struct HASHKEY_STR HASHKEY_STR; DECLARE_STRUCT(HASHKEY_STR);
typedef struct HASHKEY_STRI HASHKEY_STRI; DECLARE_STRUCT(HASHKEY_STRI);
typedef struct HASHKEY_NONE HASHKEY_NONE; DECLARE_STRUCT(HASHKEY_NONE);
struct HASHKEY_PTR { struct HASHKEY_PTR {
void* m_key; void* m_key;
@ -42,6 +42,7 @@ struct HASHKEY_STRI {
}; };
struct HASHKEY_NONE { struct HASHKEY_NONE {
int32_t m_unused;
}; };
#endif #endif

View file

@ -1,7 +1,7 @@
#ifndef STORM_LIST_H #ifndef STORM_LIST_H
#define STORM_LIST_H #define STORM_LIST_H
#include <stdint.h> #include "system/types.h"
// to make an object self referential // to make an object self referential
// forward-declare 'struct Object_type' as 'Object_type' // forward-declare 'struct Object_type' as 'Object_type'
@ -15,10 +15,12 @@ struct TSLink_##T { \
}; };
// TSList<T> // TSList<T>
// TSExplicitList<T>
// TSLinkedNode<T> // TSLinkedNode<T>
#define STORM_TS_LIST(T) \ #define STORM_TS_LIST(T) \
STORM_TS_LINK(T) \ STORM_TS_LINK(T) \
typedef struct TSList_##T TSList_##T; \ typedef struct TSList_##T TSList_##T; \
typedef struct TSList_##T TSExplicitList_##T; \
typedef struct TSLinkedNode_##T TSLinkedNode_##T; \ typedef struct TSLinkedNode_##T TSLinkedNode_##T; \
struct TSList_##T { \ struct TSList_##T { \
ptrdiff_t m_linkoffset; \ ptrdiff_t m_linkoffset; \

View file

@ -0,0 +1,31 @@
#ifndef STORM_QUEUE_H
#define STORM_QUEUE_H
#include "system/types.h"
#include "storm/array/pointer_to_void.h"
DECLARE_STRUCT(CSBasePriorityQueue);
DECLARE_STRUCT(CSBasePriority);
struct CSBasePriorityQueue {
TSGrowableArray_pointer_to_void b_base;
uint32_t m_linkOffset;
};
struct CSBasePriority {
CSBasePriorityQueue* m_queue;
uint32_t m_index;
};
#define STORM_TS_TIMER_PRIORITY(T) \
typedef struct TSTimerPriority_##T TSTimerPriority_##T; \
struct TSTimerPriority_##T { \
CSBasePriority b_base; \
T m_val; \
};
#define STORM_TS_PRIORITY_QUEUE(T) \
typedef CSBasePriorityQueue TSPriorityQueue_##T;
#endif

View file

@ -0,0 +1,10 @@
#ifndef STORM_QUEUE_TIMER_PRIORITY_UINT32_T_H
#define STORM_QUEUE_TIMER_PRIORITY_UINT32_T_H
#include "system/types.h"
#include "storm/queue.h"
STORM_TS_TIMER_PRIORITY(uint32_t);
#endif

View file

@ -0,0 +1,17 @@
#ifndef STORM_THREAD_H
#define STORM_THREAD_H
#include "system/types.h"
DECLARE_STRUCT(SCritSect);
typedef struct CSRWLock CSRWLock;
struct SCritSect {
uint8_t m_critsect[24];
};
struct CSRWLock {
uint8_t m_opaqueData[12];
};
#endif

View file

@ -0,0 +1,23 @@
#ifndef SYSTEM_DETECT_H
#define SYSTEM_DETECT_H
#if !defined(IDA) && !defined(GHIDRA) && !defined(BINANA_GENERATOR)
#error "Preprocessor mode not detected! You must define either IDA or GHIDRA or BINANA_GENERATOR"
#endif
#if defined(IDA)
// why does this work?
#define DECLARE_ENUM(E) typedef enum E##__ E
#else
#define DECLARE_ENUM(E) typedef enum E E
#endif
#define DECLARE_STRUCT(T) typedef struct T T
#endif

View file

@ -1,5 +1,8 @@
#ifndef SYSTEM_STD_INT_H #ifndef SYSTEM_TYPES_H
#define SYSTEM_STD_INT_H #define SYSTEM_TYPES_H
// stdint
#if defined(IDA) || defined(BINANA_GENERATOR)
typedef signed char int8_t; typedef signed char int8_t;
typedef short int16_t; typedef short int16_t;
@ -14,4 +17,24 @@ typedef int32_t ptrdiff_t;
typedef uint32_t uintptr_t; typedef uint32_t uintptr_t;
typedef int32_t intptr_t; typedef int32_t intptr_t;
#else
#include <stdint.h>
#endif
// stdbool
#if defined(BINANA_GENERATOR)
typedef char bool;
#endif
#if defined(GHIDRA)
#include <stdbool.h>
#endif
#endif #endif

View file

@ -4,8 +4,8 @@
#include "tempest/vector.h" #include "tempest/vector.h"
#include "tempest/range.h" #include "tempest/range.h"
typedef struct CAaBox CAaBox; DECLARE_STRUCT(CAaBox);
typedef struct CBoundingBox CBoundingBox; DECLARE_STRUCT(CBoundingBox);
struct CAaBox { struct CAaBox {
C3Vector b; C3Vector b;

View file

@ -1,9 +1,9 @@
#ifndef TEMPEST_MATRIX_H #ifndef TEMPEST_MATRIX_H
#define TEMPEST_MATRIX_H #define TEMPEST_MATRIX_H
typedef struct C33Matrix C33Matrix; DECLARE_STRUCT(C33Matrix);
typedef struct C34Matrix C34Matrix; DECLARE_STRUCT(C34Matrix);
typedef struct C44Matrix C44Matrix; DECLARE_STRUCT(C44Matrix);
struct C33Matrix { struct C33Matrix {
float a0; float a0;

View file

@ -3,7 +3,7 @@
#include "tempest/vector.h" #include "tempest/vector.h"
typedef struct C4Plane C4Plane; DECLARE_STRUCT(C4Plane);
struct C4Plane { struct C4Plane {
C3Vector n; C3Vector n;

View file

@ -1,7 +1,7 @@
#ifndef TEMPEST_QUATERNION_H #ifndef TEMPEST_QUATERNION_H
#define TEMPEST_QUATERNION_H #define TEMPEST_QUATERNION_H
typedef struct C4Quaternion C4Quaternion; DECLARE_STRUCT(C4Quaternion);
struct C4Quaternion { struct C4Quaternion {
float x; float x;

View file

@ -1,10 +1,10 @@
#ifndef TEMPEST_RANGE_H #ifndef TEMPEST_RANGE_H
#define TEMPEST_RANGE_H #define TEMPEST_RANGE_H
#include <stdint.h> #include "system/types.h"
typedef struct CRange CRange; DECLARE_STRUCT(CRange);
typedef struct CiRange CiRange; DECLARE_STRUCT(CiRange);
struct CRange { struct CRange {
float l; float l;

View file

@ -1,10 +1,10 @@
#ifndef TEMPEST_RECT_H #ifndef TEMPEST_RECT_H
#define TEMPEST_RECT_H #define TEMPEST_RECT_H
#include <stdint.h> #include "system/types.h"
typedef struct CRect CRect; DECLARE_STRUCT(CRect);
typedef struct CiRect CiRect; DECLARE_STRUCT(CiRect);
struct CRect { struct CRect {
float minY; // t float minY; // t

View file

@ -3,7 +3,7 @@
#include "tempest/vector.h" #include "tempest/vector.h"
typedef struct CAaSphere CAaSphere; DECLARE_STRUCT(CAaSphere);
struct CAaSphere { struct CAaSphere {
C3Vector n; C3Vector n;

View file

@ -1,13 +1,13 @@
#ifndef TEMPEST_VECTOR_H #ifndef TEMPEST_VECTOR_H
#define TEMPEST_VECTOR_H #define TEMPEST_VECTOR_H
#include <stdint.h> #include "system/types.h"
typedef struct C2Vector C2Vector; DECLARE_STRUCT(C2Vector);
typedef struct C2iVector C2iVector; DECLARE_STRUCT(C2iVector);
typedef struct C3Vector C3Vector; DECLARE_STRUCT(C3Vector);
typedef struct C4Vector C4Vector; DECLARE_STRUCT(C4Vector);
typedef struct CImVector CImVector; DECLARE_STRUCT(CImVector);
struct C2Vector { struct C2Vector {
float x; float x;

View file

@ -0,0 +1,9 @@
#ifndef UI_SIMPLE_FRAME_H
#define UI_SIMPLE_FRAME_H
DECLARE_STRUCT(CSimpleFrame);
struct CSimpleFrame {
};
#endif

View file

@ -26,9 +26,9 @@ IEvtQueueCheckSyncMouseState 004804C0 f end=004804E6
IEvtQueueDestroy 004804B0 f end=004804BA IEvtQueueDestroy 004804B0 f end=004804BA
IEvtQueueDispatch 00480AD0 f end=00480BCB IEvtQueueDispatch 00480AD0 f end=00480BCB
IEvtQueueDispatchAll 00480BD0 f end=00480D28 IEvtQueueDispatchAll 00480BD0 f end=00480D28
IEvtQueueRegister 004804F0 f end=004805F4 IEvtQueueRegister 004804F0 f end=004805F4 type="void __cdecl func(EvtContext* context, EVENTID id, void* handler, void* param, float priority)"
IEvtQueueUnregister 00480D30 f end=00480DD1 IEvtQueueUnregister 00480D30 f end=00480DD1
IEvtQueuePost 004806A0 f end=0048071F IEvtQueuePost 004806A0 f end=0048071F type="int32_t __cdecl func(EvtContext* context, EVENTID id, void *data, size_t bytes)"
IEvtSchedulerCreateContext 0047F5C0 f end=0047F6B9 IEvtSchedulerCreateContext 0047F5C0 f end=0047F6B9
IEvtSchedulerInitialize 0047F2F0 f end=0047F5BA IEvtSchedulerInitialize 0047F2F0 f end=0047F5BA
IEvtSchedulerDestroy 0047DEA0 f end=0047E117 IEvtSchedulerDestroy 0047DEA0 f end=0047E117
@ -47,3 +47,4 @@ InitializeSchedulerThread 0047E910 f end=0047EA69
SynthesizeIdle 0047DBC0 f end=0047DC14 SynthesizeIdle 0047DBC0 f end=0047DC14
SynthesizePaint 0047DC50 f end=0047DC8D SynthesizePaint 0047DC50 f end=0047DC8D
SynthesizePoll 0047DC20 f end=0047DC50 SynthesizePoll 0047DC20 f end=0047DC50
AttachContextToThread 0047EC10 f

View file

@ -1 +1,3 @@
s_mainThread 00b417c8 l s_mainThread 00b417c8 l type="uint32_t"
s_messageRecycler 00B41850 l type="CDataRecycler"
s_interactiveCount 00B417D0 l type="int32_t"

View file

@ -0,0 +1 @@
FrameScript_Execute 00819EA0 f end=0081A2B5 type="void __stdcall func(int32_t function, FrameScript_Object* object, int32_t args, char* args_fmt, FrameScript_EventObject* eventObject)"

View file

@ -0,0 +1,22 @@
_lua_gettop 0084DBD0 f
_lua_settop 0084DBF0 f
_lua_insert 0084DCC0 f
_lua_type 0084DEB0 f
_lua_isnumber 0084DF20 f
_lua_isstring 0084DF60 f
_lua_tonumber 0084E030 f
_lua_tolstring 0084E0E0 f
_lua_touserdata 0084E1C0 f
_lua_pushnil 0084E280 f
_lua_pushnumber 0084E2A0 f
_lua_pushstring 0084E350 f
_lua_rawget 0084E600 f
_lua_rawgeti 0084E670 f
_lua_rawset 0084E970 f
_luaL_error 0084F280 f
_luaL_unref 0084F7A0 f
_luaG_runerror 00850920 f
_luaD_throw 008562E0 f
_luaD_precall 00856370 f
luaD_call 00856760 f
_luaV_execute 00857CA0 f

View file

@ -87,6 +87,7 @@ SynthesizePaint 0047DC50 f end=0047DC8D
EventForceIdleProcessing 0047DCA0 f end=0047DE09 EventForceIdleProcessing 0047DCA0 f end=0047DE09
IEvtSchedulerDestroy 0047DEA0 f end=0047E117 IEvtSchedulerDestroy 0047DEA0 f end=0047E117
InitializeSchedulerThread 0047E910 f end=0047EA69 InitializeSchedulerThread 0047E910 f end=0047EA69
AttachContextToThread 0047EC10 f
SchedulerThreadProcProcess 0047EFF0 f end=0047F225 SchedulerThreadProcProcess 0047EFF0 f end=0047F225
SchedulerThreadProc 0047F230 f end=0047F2C1 ; IEvtSchedulerProcess as an independent function appears to be optimized out SchedulerThreadProc 0047F230 f end=0047F2C1 ; IEvtSchedulerProcess as an independent function appears to be optimized out
EventDoMessageLoop 0047F2D0 f end=0047F2EC EventDoMessageLoop 0047F2D0 f end=0047F2EC
@ -101,8 +102,8 @@ IEvtInputGetMousePosition 004800A0 f end=004800EF
IEvtInputProcess 00480410 f end=004804A8 IEvtInputProcess 00480410 f end=004804A8
IEvtQueueDestroy 004804B0 f end=004804BA IEvtQueueDestroy 004804B0 f end=004804BA
IEvtQueueCheckSyncMouseState 004804C0 f end=004804E6 IEvtQueueCheckSyncMouseState 004804C0 f end=004804E6
IEvtQueueRegister 004804F0 f end=004805F4 IEvtQueueRegister 004804F0 f end=004805F4 type="void __cdecl func(EvtContext* context, EVENTID id, void* handler, void* param, float priority)"
IEvtQueuePost 004806A0 f end=0048071F IEvtQueuePost 004806A0 f end=0048071F type="int32_t __cdecl func(EvtContext* context, EVENTID id, void *data, size_t bytes)"
IEvtQueueCheckSyncKeyState 00480A50 f end=00480AC2 IEvtQueueCheckSyncKeyState 00480A50 f end=00480AC2
IEvtQueueDispatch 00480AD0 f end=00480BCB IEvtQueueDispatch 00480AD0 f end=00480BCB
IEvtQueueDispatchAll 00480BD0 f end=00480D28 IEvtQueueDispatchAll 00480BD0 f end=00480D28
@ -2266,15 +2267,16 @@ ConsoleCommandRegister 00769100 f end=007691B3
ConsoleAccessGetEnabled 00769230 f end=00769236 ConsoleAccessGetEnabled 00769230 f end=00769236
ConsoleDeviceInitialize 0076AB80 f end=0076B287 ConsoleDeviceInitialize 0076AB80 f end=0076B287
SMemSetDebugFlags 0076E4A0 f end=0076E4D2 SMemSetDebugFlags 0076E4A0 f end=0076E4D2
SMemAlloc 0076E540 f end=0076E59A SMemAlloc 0076E540 f end=0076E59A type="void* __stdcall func(uint32_t bytes, char* filename, int32_t linenumber, uint32_t flags)"
SMemFree 0076E5A0 f end=0076E5C4 SMemFree 0076E5A0 f end=0076E5C4 type="int32_t __stdcall func(void* ptr, char* filename, int32_t linenumber, uint32_t flags)"
SMemReAlloc 0076E5E0 f end=0076E6D6 type="void* __stdcall func(void* ptr, uint32_t bytes, char* filename, int32_t linenumber, uint32_t flags)"
SStrChr 0076E6E0 f end=0076E712 SStrChr 0076E6E0 f end=0076E712
SStrCmp 0076E760 f end=0076E77B SStrCmp 0076E760 f end=0076E77B
SStrCmpI 0076E780 f end=0076E79B SStrCmpI 0076E780 f end=0076E79B
SStrCopy 0076ED20 f end=0076ED98 SStrCopy 0076ED20 f end=0076ED98
SStrLen 0076EE30 f end=0076EE5E SStrLen 0076EE30 f end=0076EE5E
SStrPack 0076EF70 f end=0076F001 SStrPack 0076EF70 f end=0076F001
SStrPrintf 0076F070 f end=0076F09E SStrPrintf 0076F070 f end=0076F09E type="int32_t __stdcall func(char* dest, size_t maxchars, char* format, ...)"
SStrVPrintf 0076F0A0 f end=0076F0CE SStrVPrintf 0076F0A0 f end=0076F0CE
SStrTokenize 0076F1E0 f end=0076F331 SStrTokenize 0076F1E0 f end=0076F331
SStrHashHT 0076F640 f end=0076F6B9 SStrHashHT 0076F640 f end=0076F6B9
@ -2289,10 +2291,10 @@ SCmdProcess 00773890 f end=00773986
SCmdProcessCommandLine 00773990 f end=007739AD SCmdProcessCommandLine 00773990 f end=007739AD
StormInitialize 007739E0 f end=007739F4 StormInitialize 007739E0 f end=007739F4
StormSetOption 00773A80 f end=00773C81 StormSetOption 00773A80 f end=00773C81
SCritSect__SCritSect 00774620 f end=0077462E SCritSect__SCritSect 00774620 f end=0077462E type="SCritSect* __thiscall func(SCritSect* this)"
SCritSect__destructor 00774630 f end=00774638 SCritSect__destructor 00774630 f end=00774638 type="void __thiscall func(SCritSect *this)"
SCritSect__Enter 00774640 f end=00774648 SCritSect__Enter 00774640 f end=00774648 type="void __thiscall func(SCritSect *this)"
SCritSect__Leave 00774650 f end=00774658 SCritSect__Leave 00774650 f end=00774658 type="void __thiscall func(SCritSect *this)"
CSRWLock__Leave 00774660 f end=00774675 CSRWLock__Leave 00774660 f end=00774675
SSyncObject__Wait 00774690 f end=007746A4 SSyncObject__Wait 00774690 f end=007746A4
SEvent__Set 00774720 f end=0077472A SEvent__Set 00774720 f end=0077472A
@ -2325,6 +2327,7 @@ Script_CancelUnitBuff 00804220 f end=00804420
Script_SpellStopTargeting 00809E30 f end=00809E96 Script_SpellStopTargeting 00809E30 f end=00809E96
Script_SpellStopCasting 00809EA0 f end=00809F7E Script_SpellStopCasting 00809EA0 f end=00809F7E
Script_SpellTargetUnit 0080DC00 f end=0080DCE3 Script_SpellTargetUnit 0080DC00 f end=0080DCE3
FrameScript_Execute 00819EA0 f end=0081A2B5 type="void __stdcall func(int32_t function, FrameScript_Object* object, int32_t args, char* args_fmt, FrameScript_EventObject* eventObject)"
Script_GetText 0081B720 f end=0081B7AF Script_GetText 0081B720 f end=0081B7AF
Script_CreateFont 0081B7B0 f end=0081B81E Script_CreateFont 0081B7B0 f end=0081B81E
Script_GetCurrentKeyBoardFocus 0081B820 f end=0081B86C Script_GetCurrentKeyBoardFocus 0081B820 f end=0081B86C
@ -2332,6 +2335,28 @@ Script_EnumerateFrames 0081B9C0 f end=0081BAAA
Script_GetNumFrames 0081BAB0 f end=0081BB15 Script_GetNumFrames 0081BAB0 f end=0081BB15
Script_CreateFrame 0081BB20 f end=0081BE68 Script_CreateFrame 0081BB20 f end=0081BE68
Script_GetFramesRegisteredForEvent 0081BE70 f end=0081BF4D Script_GetFramesRegisteredForEvent 0081BE70 f end=0081BF4D
_lua_gettop 0084DBD0 f
_lua_settop 0084DBF0 f
_lua_insert 0084DCC0 f
_lua_type 0084DEB0 f
_lua_isnumber 0084DF20 f
_lua_isstring 0084DF60 f
_lua_tonumber 0084E030 f
_lua_tolstring 0084E0E0 f
_lua_touserdata 0084E1C0 f
_lua_pushnil 0084E280 f
_lua_pushnumber 0084E2A0 f
_lua_pushstring 0084E350 f
_lua_rawget 0084E600 f
_lua_rawgeti 0084E670 f
_lua_rawset 0084E970 f
_luaL_error 0084F280 f
_luaL_unref 0084F7A0 f
_luaG_runerror 00850920 f
_luaD_throw 008562E0 f
_luaD_precall 00856370 f
luaD_call 00856760 f
_luaV_execute 00857CA0 f
RestoreMouse 008695B0 f end=008695FB RestoreMouse 008695B0 f end=008695FB
OsInputInitialize 00869720 f end=00869757 ; actually called by IEvtInputInitialize, but this is optimized out OsInputInitialize 00869720 f end=00869757 ; actually called by IEvtInputInitialize, but this is optimized out
OsInputDestroy 00869760 f end=008697D3 OsInputDestroy 00869760 f end=008697D3
@ -2532,6 +2557,8 @@ nullsub_149 009DE1C0 f
nullsub_150 009DE1D0 f nullsub_150 009DE1D0 f
CGxDevice__vtable 00A2DDC0 l CGxDevice__vtable 00A2DDC0 l
CGxDeviceOpenGl__vtable 00A2E198 l CGxDeviceOpenGl__vtable 00A2E198 l
s_interactiveCount 00B417D0 l type="int32_t"
s_messageRecycler 00B41850 l type="CDataRecycler"
s_cursorImages 00C26DF0 l type="CImVector[54][1024]" s_cursorImages 00C26DF0 l type="CImVector[54][1024]"
g_theGxDevicePtr 00C5DF88 l g_theGxDevicePtr 00C5DF88 l
CGxDevice__s_uiVertexShader 00C5DFDC l CGxDevice__s_uiVertexShader 00C5DFDC l
@ -2545,7 +2572,7 @@ s_historyIndex 00adbac8 l ; int32
s_fontHeight 00adbacc l ; float s_fontHeight 00adbacc l ; float
s_hRect 00adbad4 l ; RECTF s_hRect 00adbad4 l ; RECTF
s_baseTextFlags 00adbae4 l ; uint32 s_baseTextFlags 00adbae4 l ; uint32
s_mainThread 00b417c8 l s_mainThread 00b417c8 l type="uint32_t"
s_caretpixheight 00ca1690 l s_caretpixheight 00ca1690 l
s_caret 00ca1694 l ; int32 s_caret 00ca1694 l ; int32
s_caretpixwidth 00ca1718 l s_caretpixwidth 00ca1718 l

View file

@ -5,8 +5,9 @@ SErrSetLogTitleString 00771890 f end=007718F2
SErrSetLogTitleCallback 00771900 f end=00771957 SErrSetLogTitleCallback 00771900 f end=00771957
SErrRegisterHandler 00771B80 f end=00771C15 SErrRegisterHandler 00771B80 f end=00771C15
SErrCatchUnhandledExceptions 00772B20 f end=00772B2C SErrCatchUnhandledExceptions 00772B20 f end=00772B2C
SMemAlloc 0076E540 f end=0076E59A SMemAlloc 0076E540 f end=0076E59A type="void* __stdcall func(uint32_t bytes, char* filename, int32_t linenumber, uint32_t flags)"
SMemFree 0076E5A0 f end=0076E5C4 SMemFree 0076E5A0 f end=0076E5C4 type="int32_t __stdcall func(void* ptr, char* filename, int32_t linenumber, uint32_t flags)"
SMemReAlloc 0076E5E0 f end=0076E6D6 type="void* __stdcall func(void* ptr, uint32_t bytes, char* filename, int32_t linenumber, uint32_t flags)"
SMemSetDebugFlags 0076E4A0 f end=0076E4D2 SMemSetDebugFlags 0076E4A0 f end=0076E4D2
SRegLoadValue 00770840 f end=007708E9 SRegLoadValue 00770840 f end=007708E9
SRegSaveValue 007709A0 f end=007709E8 SRegSaveValue 007709A0 f end=007709E8
@ -16,7 +17,7 @@ SStrCmpI 0076E780 f end=0076E79B
SStrCopy 0076ED20 f end=0076ED98 SStrCopy 0076ED20 f end=0076ED98
SStrLen 0076EE30 f end=0076EE5E SStrLen 0076EE30 f end=0076EE5E
SStrPack 0076EF70 f end=0076F001 SStrPack 0076EF70 f end=0076F001
SStrPrintf 0076F070 f end=0076F09E SStrPrintf 0076F070 f end=0076F09E type="int32_t __stdcall func(char* dest, size_t maxchars, char* format, ...)"
SStrVPrintf 0076F0A0 f end=0076F0CE SStrVPrintf 0076F0A0 f end=0076F0CE
SStrTokenize 0076F1E0 f end=0076F331 SStrTokenize 0076F1E0 f end=0076F331
SStrHashHT 0076F640 f end=0076F6B9 SStrHashHT 0076F640 f end=0076F6B9
@ -26,9 +27,9 @@ SSyncObject__Wait 00774690 f end=007746A4
StormInitialize 007739E0 f end=007739F4 StormInitialize 007739E0 f end=007739F4
StormSetOption 00773A80 f end=00773C81 StormSetOption 00773A80 f end=00773C81
TSList__LinkNode 004F71A0 f end=004F724D TSList__LinkNode 004F71A0 f end=004F724D
SCritSect__SCritSect 00774620 f end=0077462E SCritSect__SCritSect 00774620 f end=0077462E type="SCritSect* __thiscall func(SCritSect* this)"
SCritSect__Enter 00774640 f end=00774648 SCritSect__Enter 00774640 f end=00774648 type="void __thiscall func(SCritSect *this)"
SCritSect__Leave 00774650 f end=00774658 SCritSect__Leave 00774650 f end=00774658 type="void __thiscall func(SCritSect *this)"
SCritSect__destructor 00774630 f end=00774638 SCritSect__destructor 00774630 f end=00774638 type="void __thiscall func(SCritSect *this)"
SRgnCreate 00777980 f end=00777A78 SRgnCreate 00777980 f end=00777A78
SRgnDelete 00777940 f end=00777971 SRgnDelete 00777940 f end=00777971

View file

@ -712,6 +712,14 @@
"icount": "0x0", "icount": "0x0",
"parent": "0x7e910" "parent": "0x7e910"
}, },
{
"manual": true,
"start": "0x7ec10",
"end": "0x7ec10",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x7ec10"
},
{ {
"manual": true, "manual": true,
"start": "0x7eff0", "start": "0x7eff0",
@ -18152,6 +18160,14 @@
"icount": "0x0", "icount": "0x0",
"parent": "0x36e5a0" "parent": "0x36e5a0"
}, },
{
"manual": true,
"start": "0x36e5e0",
"end": "0x36e6d5",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x36e5e0"
},
{ {
"manual": true, "manual": true,
"start": "0x36e6e0", "start": "0x36e6e0",
@ -18608,6 +18624,14 @@
"icount": "0x0", "icount": "0x0",
"parent": "0x40dc00" "parent": "0x40dc00"
}, },
{
"manual": true,
"start": "0x419ea0",
"end": "0x41a2b4",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x419ea0"
},
{ {
"manual": true, "manual": true,
"start": "0x41b720", "start": "0x41b720",
@ -18664,6 +18688,182 @@
"icount": "0x0", "icount": "0x0",
"parent": "0x41be70" "parent": "0x41be70"
}, },
{
"manual": true,
"start": "0x44dbd0",
"end": "0x44dbd0",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44dbd0"
},
{
"manual": true,
"start": "0x44dbf0",
"end": "0x44dbf0",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44dbf0"
},
{
"manual": true,
"start": "0x44dcc0",
"end": "0x44dcc0",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44dcc0"
},
{
"manual": true,
"start": "0x44deb0",
"end": "0x44deb0",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44deb0"
},
{
"manual": true,
"start": "0x44df20",
"end": "0x44df20",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44df20"
},
{
"manual": true,
"start": "0x44df60",
"end": "0x44df60",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44df60"
},
{
"manual": true,
"start": "0x44e030",
"end": "0x44e030",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44e030"
},
{
"manual": true,
"start": "0x44e0e0",
"end": "0x44e0e0",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44e0e0"
},
{
"manual": true,
"start": "0x44e1c0",
"end": "0x44e1c0",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44e1c0"
},
{
"manual": true,
"start": "0x44e280",
"end": "0x44e280",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44e280"
},
{
"manual": true,
"start": "0x44e2a0",
"end": "0x44e2a0",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44e2a0"
},
{
"manual": true,
"start": "0x44e350",
"end": "0x44e350",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44e350"
},
{
"manual": true,
"start": "0x44e600",
"end": "0x44e600",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44e600"
},
{
"manual": true,
"start": "0x44e670",
"end": "0x44e670",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44e670"
},
{
"manual": true,
"start": "0x44e970",
"end": "0x44e970",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44e970"
},
{
"manual": true,
"start": "0x44f280",
"end": "0x44f280",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44f280"
},
{
"manual": true,
"start": "0x44f7a0",
"end": "0x44f7a0",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x44f7a0"
},
{
"manual": true,
"start": "0x450920",
"end": "0x450920",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x450920"
},
{
"manual": true,
"start": "0x4562e0",
"end": "0x4562e0",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x4562e0"
},
{
"manual": true,
"start": "0x456370",
"end": "0x456370",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x456370"
},
{
"manual": true,
"start": "0x456760",
"end": "0x456760",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x456760"
},
{
"manual": true,
"start": "0x457ca0",
"end": "0x457ca0",
"module": "wow.exe",
"icount": "0x0",
"parent": "0x457ca0"
},
{ {
"manual": true, "manual": true,
"start": "0x4695b0", "start": "0x4695b0",
@ -20784,6 +20984,12 @@
"text": "InitializeSchedulerThread", "text": "InitializeSchedulerThread",
"address": "0x7e910" "address": "0x7e910"
}, },
{
"manual": true,
"module": "wow.exe",
"text": "AttachContextToThread",
"address": "0x7ec10"
},
{ {
"manual": true, "manual": true,
"module": "wow.exe", "module": "wow.exe",
@ -33870,6 +34076,12 @@
"text": "SMemFree", "text": "SMemFree",
"address": "0x36e5a0" "address": "0x36e5a0"
}, },
{
"manual": true,
"module": "wow.exe",
"text": "SMemReAlloc",
"address": "0x36e5e0"
},
{ {
"manual": true, "manual": true,
"module": "wow.exe", "module": "wow.exe",
@ -34212,6 +34424,12 @@
"text": "Script_SpellTargetUnit", "text": "Script_SpellTargetUnit",
"address": "0x40dc00" "address": "0x40dc00"
}, },
{
"manual": true,
"module": "wow.exe",
"text": "FrameScript_Execute",
"address": "0x419ea0"
},
{ {
"manual": true, "manual": true,
"module": "wow.exe", "module": "wow.exe",
@ -34254,6 +34472,138 @@
"text": "Script_GetFramesRegisteredForEvent", "text": "Script_GetFramesRegisteredForEvent",
"address": "0x41be70" "address": "0x41be70"
}, },
{
"manual": true,
"module": "wow.exe",
"text": "_lua_gettop",
"address": "0x44dbd0"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_settop",
"address": "0x44dbf0"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_insert",
"address": "0x44dcc0"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_type",
"address": "0x44deb0"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_isnumber",
"address": "0x44df20"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_isstring",
"address": "0x44df60"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_tonumber",
"address": "0x44e030"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_tolstring",
"address": "0x44e0e0"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_touserdata",
"address": "0x44e1c0"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_pushnil",
"address": "0x44e280"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_pushnumber",
"address": "0x44e2a0"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_pushstring",
"address": "0x44e350"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_rawget",
"address": "0x44e600"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_rawgeti",
"address": "0x44e670"
},
{
"manual": true,
"module": "wow.exe",
"text": "_lua_rawset",
"address": "0x44e970"
},
{
"manual": true,
"module": "wow.exe",
"text": "_luaL_error",
"address": "0x44f280"
},
{
"manual": true,
"module": "wow.exe",
"text": "_luaL_unref",
"address": "0x44f7a0"
},
{
"manual": true,
"module": "wow.exe",
"text": "_luaG_runerror",
"address": "0x450920"
},
{
"manual": true,
"module": "wow.exe",
"text": "_luaD_throw",
"address": "0x4562e0"
},
{
"manual": true,
"module": "wow.exe",
"text": "_luaD_precall",
"address": "0x456370"
},
{
"manual": true,
"module": "wow.exe",
"text": "luaD_call",
"address": "0x456760"
},
{
"manual": true,
"module": "wow.exe",
"text": "_luaV_execute",
"address": "0x457ca0"
},
{ {
"manual": true, "manual": true,
"module": "wow.exe", "module": "wow.exe",
@ -35508,6 +35858,18 @@
"text": "s_mainThread", "text": "s_mainThread",
"address": "0x7417c8" "address": "0x7417c8"
}, },
{
"manual": true,
"module": "wow.exe",
"text": "s_interactiveCount",
"address": "0x7417d0"
},
{
"manual": true,
"module": "wow.exe",
"text": "s_messageRecycler",
"address": "0x741850"
},
{ {
"manual": true, "manual": true,
"module": "wow.exe", "module": "wow.exe",

File diff suppressed because it is too large Load diff

View file

@ -4,6 +4,7 @@ This repository hosts some work related to studying the original game binaries.
You can use the information here to get a headstart when working on the [Whoa project](https://github.com/whoahq/whoa). You can use the information here to get a headstart when working on the [Whoa project](https://github.com/whoahq/whoa).
- [Dependencies (optional)](#dependencies--optional-)
- [Header files](#header-files) - [Header files](#header-files)
- [Symbol files](#symbol-files) - [Symbol files](#symbol-files)
- [Debugging files](#debugging-files) - [Debugging files](#debugging-files)
@ -17,6 +18,24 @@ You can use the information here to get a headstart when working on the [Whoa pr
* [Importing database](#importing-database) * [Importing database](#importing-database)
* [Importing types](#importing-types) * [Importing types](#importing-types)
# Dependencies (optional)
This project can be utilized immediately using files we have already generated. However, if you wish to make modifications to the C header and symbol files, **it may be necessary to refresh the generated files that are based on them**.
You'll need:
- Go >= 1.22
- git
- Make
- Bash shell
You can regenerate everything to include your changes with:
```bash
make dependencies
make
```
# Header files # Header files
To make looking at the binary easier, C header files to match the original executable's memory layout are provided. They aim to be lightweight and self-contained, so that many tools can make use of them. To make looking at the binary easier, C header files to match the original executable's memory layout are provided. They aim to be lightweight and self-contained, so that many tools can make use of them.
@ -34,7 +53,7 @@ FunctionName 00CC00DDEE f
To improve the call stack view in x64dbg, you should append an `end` field to every function, with the address where this function ends and another begins (i.e. after the last instruction of the function): To improve the call stack view in x64dbg, you should append an `end` field to every function, with the address where this function ends and another begins (i.e. after the last instruction of the function):
``` ```csv
FunctionName 00CC00DDEE f end=00CC00DDFF FunctionName 00CC00DDEE f end=00CC00DDFF
``` ```
@ -79,7 +98,8 @@ To import the main header file into your Ghidra project,
2. Select `clib.prf` as your parse configuration, and clear all source files and input paths. 2. Select `clib.prf` as your parse configuration, and clear all source files and input paths.
3. Add the header `<game version>/include/main.h` to the `Source files to parse` combo box. 3. Add the header `<game version>/include/main.h` to the `Source files to parse` combo box.
4. Add the path to `<game version>/include` to the `Include paths` combo box. 4. Add the path to `<game version>/include` to the `Include paths` combo box.
5. press `Parse to Program`. 5. Add `-DGHIDRA` to a new line in `Parse Options`.
6. press `Parse to Program`.
If all goes well, Data Type Manager will now contain the data structures from the headers. If all goes well, Data Type Manager will now contain the data structures from the headers.
@ -99,7 +119,7 @@ To import the symbol file into your Ghidra project,
To import the main header file into your IDA database, To import the main header file into your IDA database,
1. Go to `Options` 🡒 `Compiler` 1. Go to `Options` 🡒 `Compiler`
2. In `Include directories`, add the path to `<game version>/ida/include` and press `OK` 2. Add `IDA` to the semicolon-separated `Predefined macros` list.
3. Go to `File` 🡒 `Load file` 🡒 `Parse C Header file` 3. Go to `File` 🡒 `Load file` 🡒 `Parse C Header file`
4. Enter the path to `<game version>/include/main.h` 4. Enter the path to `<game version>/include/main.h`
@ -108,7 +128,8 @@ To import the main header file into your IDA database,
To use the IDC script, To use the IDC script,
1. Go to `File` 🡒 `Script file...` 1. Go to `File` 🡒 `Script file...`
2. Navigate to `<game version>/ida/import.idc` 2. Navigate to `<game version>/ida/import_symbols.idc`
3. Wait for everything to be reanalyzed
# x64dbg # x64dbg

1
go.mod
View file

@ -8,6 +8,7 @@ require (
) )
require ( require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/pflag v1.0.5 // indirect

View file

@ -12,49 +12,62 @@ import (
func (profile *Profile) generate_symbols_idc() (err error) { func (profile *Profile) generate_symbols_idc() (err error) {
var ( var (
output_file *os.File f *os.File
) )
output_file, err = os.Create(filepath.Join(profile.Directory, "ida", "import.idc")) f, err = os.Create(filepath.Join(profile.Directory, "ida", "import_symbols.idc"))
if err != nil { if err != nil {
return return
} }
fmt.Fprintf(output_file, "#include <idc.idc>\n") fmt.Fprintf(f, "#include <idc.idc>\n")
fmt.Fprintf(output_file, "\n") fmt.Fprintf(f, "\n")
fmt.Fprintf(output_file, "static main() {\n") fmt.Fprintf(f, "#include \"import_data_types.idc\"\n")
fmt.Fprintf(output_file, " // Make names\n") fmt.Fprintf(f, "static main() {\n")
fmt.Fprintf(f, " // Make names\n")
for _, symbol := range profile.SymbolTable.Entries { for _, symbol := range profile.SymbolTable.Entries {
quoted_name := strconv.Quote(symbol.Name) quoted_name := strconv.Quote(symbol.Name)
address := fmt.Sprintf("0x%08X", symbol.StartAddress) address := fmt.Sprintf("0x%08X", symbol.StartAddress)
fmt.Fprintf(output_file, " set_name(%s, %s);\n", address, quoted_name) fmt.Fprintf(f, " set_name(%s, %s);\n", address, quoted_name)
} }
fmt.Fprintf(output_file, " // Make functions\n") fmt.Fprintf(f, " // Make functions\n")
for _, function_symbol := range profile.SymbolTable.Entries { for _, function_symbol := range profile.SymbolTable.Entries {
if function_symbol.Kind == symfile.Function { if function_symbol.Kind == symfile.Function {
address := fmt.Sprintf("0x%08X", function_symbol.StartAddress) address := fmt.Sprintf("0x%08X", function_symbol.StartAddress)
fmt.Fprintf(output_file, " set_func_start(%s, %s);\n", address, address) fmt.Fprintf(f, " set_func_start(%s, %s);\n", address, address)
if function_symbol.EndAddress != 0 { if function_symbol.EndAddress != 0 {
end_address := fmt.Sprintf("0x%08X", function_symbol.EndAddress) end_address := fmt.Sprintf("0x%08X", function_symbol.EndAddress)
fmt.Fprintf(output_file, " set_func_end(%s, %s);\n", address, end_address) fmt.Fprintf(f, " set_func_end(%s, %s);\n", address, end_address)
} }
} }
} }
fmt.Fprintf(output_file, " // Apply data types\n") fmt.Fprintf(f, " // Apply data types\n")
fmt.Fprintf(f, " import_data_types();\n")
fmt.Fprintf(f, "}\n")
f.Close()
f, err = os.Create(filepath.Join(profile.Directory, "ida", "import_data_types.idc"))
if err != nil {
return
}
fmt.Fprintf(f, "#include <idc.idc>\n")
fmt.Fprintf(f, "\n")
fmt.Fprintf(f, "static import_data_types() {\n")
for _, symbol := range profile.SymbolTable.Entries { for _, symbol := range profile.SymbolTable.Entries {
if symbol.DataType != "" { if symbol.DataType != "" {
quoted_data_type := strconv.Quote(symbol.DataType) quoted_data_type := strconv.Quote(symbol.DataType)
address := fmt.Sprintf("0x%08X", symbol.StartAddress) address := fmt.Sprintf("0x%08X", symbol.StartAddress)
fmt.Fprintf(output_file, " apply_type(%s, %s);\n", address, quoted_data_type) fmt.Fprintf(f, " apply_type(%s, %s);\n", address, quoted_data_type)
} }
} }
fmt.Fprintf(output_file, "}\n") fmt.Fprintf(f, "}\n")
output_file.Close()
return return
} }

View file

@ -1,6 +0,0 @@
#ifndef SYSTEM_STD_BOOL_H
#define SYSTEM_STD_BOOL_H
typedef char bool;
#endif

View file

@ -79,6 +79,7 @@ loop:
arrsize *= int32(t.Len()) arrsize *= int32(t.Len())
case cc.Function: case cc.Function:
s = "void*" + s s = "void*" + s
break loop
default: default:
s = t.Kind().String() + s s = t.Kind().String() + s
break loop break loop
@ -114,6 +115,10 @@ func (profile *Profile) generate_x64dbg_types() (err error) {
} }
cc_sources := []cc.Source{ cc_sources := []cc.Source{
cc.Source{
Name: "pch.h",
Value: `#define BINANA_GENERATOR 1\n`,
},
cc.Source{ cc.Source{
Name: filepath.Join(profile.Directory, "include", "main.h"), Name: filepath.Join(profile.Directory, "include", "main.h"),
}, },
@ -155,10 +160,10 @@ func (profile *Profile) generate_x64dbg_types() (err error) {
for _, node := range scope { for _, node := range scope {
if declarator, ok := node.(*cc.Declarator); ok { if declarator, ok := node.(*cc.Declarator); ok {
if declarator.IsTypedefName { if declarator.IsTypedefName {
if declarator.Type().Kind() != cc.Struct {
var x64_type x64dbg.AliasType = cc_type_to_typedef(declarator.Type()) var x64_type x64dbg.AliasType = cc_type_to_typedef(declarator.Type())
x64_type.Name = scope_id.String() x64_type.Name = scope_id.String()
if !slices.Contains(ignore_types, x64_type.Name) { if !slices.Contains(ignore_types, x64_type.Name) {
if x64_type.Name != x64_type.Type {
x64_types.Types = append(x64_types.Types, x64_type) x64_types.Types = append(x64_types.Types, x64_type)
} }
} }