struct TImpact { int (**_vptr.TImpact)(...); // VTABLE? }; struct TSummonImpact { TImpact super_TImpact; // INHERITANCE? TCreature *Actor; int Race; int Maximum; }; struct TSpeedImpact { TImpact super_TImpact; // INHERITANCE? TCreature *Actor; int Percent; int Duration; }; struct THealingImpact { TImpact super_TImpact; // INHERITANCE? TCreature *Actor; int Power; }; struct TOutfitImpact { TImpact super_TImpact; // INHERITANCE? TCreature *Actor; TOutfit Outfit; int Duration; }; struct TFieldImpact { TImpact super_TImpact; // INHERITANCE? TCreature *Actor; int FieldType; }; struct TDrunkenImpact { TImpact super_TImpact; // INHERITANCE? TCreature *Actor; int Power; int Duration; }; struct TStrengthImpact { TImpact super_TImpact; // INHERITANCE? TCreature *Actor; int Skills; int Percent; int Duration; }; struct TDamageImpact { TImpact super_TImpact; // INHERITANCE? TCreature *Actor; int DamageType; int Power; bool AllowDefense; }; struct TCircle { int x[32]; int y[32]; int Count; }; struct TSpellList { uint8 Syllable[10]; uint8 RuneGr; uint8 RuneNr; char *Comment; uint16 Level; uint16 RuneLevel; uint16 Flags; int Mana; int SoulPoints; int Amount; }; struct TXTEASymmetricKey { int (**_vptr.TXTEASymmetricKey)(...); // VTABLE? uint8 m_SymmetricKey[16]; }; // NOTE(fusion): Some minimal processing up until here. Then I realized the file would be huge. //================================================================================================== //================================================================================================== //================================================================================================== struct TDatabasePoolConnection { TDatabaseConnectionPool *DatabaseConnectionPool; TDatabaseConnection *DatabaseConnection; bool TransactionRunning; }; struct TDatabaseConnectionPool { int NumberOfConnections; struct TDatabaseSettings DatabaseSettings; struct TDatabaseConnection **DatabaseConnection; bool *DatabaseConnectionFree; struct Semaphore FreeDatabaseConnections; struct Semaphore DatabaseConnectionMutex; }; // TODO(fusion): Opaque struct? struct TDatabaseConnection {}; struct TPreparedQuery { int Number; char *Query; char *DBTypes; char *CTypes; char *Name; }; struct TPlayerIndexNode { bool InternalNode; }; struct TPlayerIndexInternalNode { struct TPlayerIndexNode super_TPlayerIndexNode; struct TPlayerIndexNode *Child[27]; }; union storeitem { union storeitem *next; struct TPlayerIndexInternalNode data; }; struct storeunit { union storeitem item[100]; }; struct listnode_> { // Original name: listnode > struct listnode_> *next; struct listnode_> *prev; struct storeunit data; }; struct TPlayerIndexEntry { char Name[30]; ulong CharacterID; }; struct TPlayerIndexLeafNode { struct TPlayerIndexNode super_TPlayerIndexNode; int Count; struct TPlayerIndexEntry Entry[10]; }; union storeitem { union storeitem *next; struct TPlayerIndexLeafNode data; }; struct storeunit { union storeitem item[100]; }; struct TNode { int Type; int Data; struct TNode *Left; struct TNode *Right; }; union storeitem { union storeitem *next; struct TNode data; }; struct store { struct list_> *Units; union storeitem *firstFreeItem; }; struct list_> { // Original name: list > struct listnode_> *firstNode; struct listnode_> *lastNode; }; struct THouseGuest { char Name[60]; }; struct THouse { ushort ID; char Name[50]; char Description[500]; int Size; ulong Rent; int DepotNr; bool NoAuction; bool GuildHouse; int ExitX; int ExitY; int ExitZ; int CenterX; int CenterY; int CenterZ; ulong OwnerID; char OwnerName[30]; int LastTransition; int PaidUntil; struct vector Subowner; int Subowners; struct vector Guest; int Guests; int Help; }; struct TWaitinglistEntry { struct TWaitinglistEntry *Next; char Name[30]; ulong NextTry; bool FreeAccount; bool Newbie; bool Sleeping; }; union storeitem { union storeitem *next; struct TWaitinglistEntry data; }; struct storeunit { union storeitem item[100]; }; struct listnode_> { // Original name: listnode > struct listnode_> *next; struct listnode_> *prev; struct storeunit data; }; struct TAttackWave { int x; int y; int z; int Spread; int Race; int MinCount; int MaxCount; int Radius; int Lifetime; ulong Message; int ExtraItems; struct vector ExtraItem; }; struct store { struct list_> *Units; union storeitem *firstFreeItem; }; struct list_> { // Original name: list > struct listnode_> *firstNode; struct listnode_> *lastNode; }; struct TDynamicStringTableBlock { int FreeEntries; int TotalTextLength; bool Dirty; uchar EntryType[256]; ushort StringOffset[256]; char Text[32768]; }; struct listnode { struct listnode *next; struct listnode *prev; struct TDynamicStringTableBlock data; }; struct listIterator { struct listnode *actNode; }; struct TNonplayer { struct TCreature super_TCreature; // INHERITANCE? enum STATE State; }; struct TReportedStatement { ulong StatementID; ulong TimeStamp; ulong CharacterID; int Mode; int Channel; char Text[256]; }; struct TListener { ulong StatementID; ulong CharacterID; }; struct fifo { struct TListener *Entry; int Size; int Head; int Tail; }; struct TDelayedMail { ulong CharacterID; int DepotNumber; uchar *Packet; int PacketSize; }; struct list_> { // Original name: list > struct listnode_> *firstNode; struct listnode_> *lastNode; }; struct listnode_> { // Original name: listnode > struct listnode_> *next; struct listnode_> *prev; struct storeunit data; }; struct store { struct list_> *Units; union storeitem *firstFreeItem; }; struct listIterator_> { // Original name: listIterator > struct listnode_> *actNode; }; struct storeunit { union storeitem item[256]; }; struct listnode_> { // Original name: listnode > struct listnode_> *next; struct listnode_> *prev; struct storeunit data; }; struct TShortwayPoint { int x; int y; int Waypoints; int Waylength; int Heuristic; struct TShortwayPoint *Predecessor; struct TShortwayPoint *NextToExpand; }; struct TCronEntry { struct Object Obj; ulong RoundNr; int Previous; int Next; }; struct TMonsterhome { int Race; int x; int y; int z; int Radius; int MaxMonsters; int ActMonsters; int RegenerationTime; int Timer; }; struct TStaticStringTableBlock { int TotalTextLength; char Text[65536]; }; struct listnode { struct listnode *next; struct listnode *prev; struct TStaticStringTableBlock data; }; struct list { struct listnode *firstNode; struct listnode *lastNode; }; struct listIterator { struct listnode *actNode; }; struct list_> { // Original name: list > struct listnode_> *firstNode; struct listnode_> *lastNode; }; struct TCondition { int Type; ulong Text; struct TNode *Expression; int Property; int Number; }; struct TSector { struct Object MapCon[32][32]; ulong TimeStamp; uchar Status; uchar MapFlags; }; struct TChannel { ulong Moderator; char ModeratorName[30]; struct vector Subscriber; int Subscribers; struct vector InvitedPlayer; int InvitedPlayers; }; struct THelpDepot { ulong CharacterID; struct Object Box; int DepotNr; }; struct listIterator_> { // Original name: listIterator > struct listnode_> *actNode; }; struct TPlayerData { ulong CharacterID; pid_t Locked; int Sticky; bool Dirty; int Race; struct TOutfit OriginalOutfit; struct TOutfit CurrentOutfit; time_t LastLoginTime; time_t LastLogoutTime; int startx; int starty; int startz; int posx; int posy; int posz; int Profession; int PlayerkillerEnd; int Actual[25]; int Maximum[25]; int Minimum[25]; int DeltaAct[25]; int MagicDeltaAct[25]; int Cycle[25]; int MaxCycle[25]; int Count[25]; int MaxCount[25]; int AddLevel[25]; int Experience[25]; int FactorPercent[25]; int NextLevel[25]; int Delta[25]; uchar SpellList[256]; int QuestValues[500]; int MurderTimestamps[20]; uchar *Inventory; int InventorySize; uchar *Depot[9]; int DepotSize[9]; ulong AccountID; int Sex; char Name[30]; uchar Rights[12]; char Guild[31]; char Rank[31]; char Title[31]; int Buddies; ulong Buddy[100]; char BuddyName[100][30]; ulong EarliestYellRound; ulong EarliestTradeChannelRound; ulong EarliestSpellTime; ulong EarliestMultiuseTime; ulong TalkBufferFullTime; ulong MutingEndRound; ulong Addressees[20]; ulong AddresseesTimes[20]; int NumberOfMutings; }; struct TPlayer { struct TCreature super_TCreature; ulong AccountID; char Guild[31]; char Rank[31]; char Title[31]; char IPAddress[16]; uchar Rights[12]; struct Object Depot; int DepotNr; int DepotSpace; enum RESULT ConstructError; struct TPlayerData *PlayerData; struct Object TradeObject; ulong TradePartner; bool TradeAccepted; int OldState; ulong Request; int RequestTimestamp; ulong RequestProcessingGamemaster; int TutorActivities; uchar SpellList[256]; int QuestValues[500]; struct Object OpenContainer[16]; struct vector AttackedPlayers; int NumberOfAttackedPlayers; bool Aggressor; struct vector FormerAttackedPlayers; int NumberOfFormerAttackedPlayers; bool FormerAggressor; ulong FormerLogoutRound; ulong PartyLeader; ulong PartyLeavingRound; ulong TalkBufferFullTime; ulong MutingEndRound; int NumberOfMutings; ulong Addressees[20]; ulong AddresseesTimes[20]; }; struct TParty { ulong Leader; struct vector Member; int Members; struct vector InvitedPlayer; int InvitedPlayers; }; struct listIterator_> { // Original name: listIterator > struct listnode_> *actNode; }; struct TMark { char Name[20]; int x; int y; int z; }; struct store { struct list_> *Units; union storeitem *firstFreeItem; }; struct TMoveUseAction { enum ActionType Action; int Parameters[5]; }; struct list { struct listnode *firstNode; struct listnode *lastNode; }; struct TMoveUseRule { int FirstCondition; int LastCondition; int FirstAction; int LastAction; }; struct TMoveUseCondition { enum ModifierType Modifier; enum ConditionType Condition; int Parameters[5]; }; struct TAction { int Type; ulong Text; int Number; struct TNode *Expression; struct TNode *Expression2; struct TNode *Expression3; }; struct TBehaviour { struct vector Condition; struct vector Action; int Conditions; int Actions; }; struct THouseArea { ushort ID; int SQMPrice; int DepotNr; }; struct listIterator_> { // Original name: listIterator > struct listnode_> *actNode; }; struct TDepotInfo { char Town[20]; int Size; }; struct fifoIterator { struct fifo *Fifo; int Position; }; struct fifo { struct TStatement *Entry; int Size; int Head; int Tail; }; struct TStatement { ulong StatementID; ulong TimeStamp; ulong CharacterID; int Mode; int Channel; ulong Text; bool Reported; }; struct fifoIterator { struct fifo *Fifo; int Position; }; struct TWriteStream { int (**_vptr.TWriteStream)(...); }; struct TWriteBuffer { struct TWriteStream super_TWriteStream; uchar *Data; int Size; int Position; }; struct TDynamicWriteBuffer { struct TWriteBuffer super_TWriteBuffer; }; struct TDirectReplyData { ulong CharacterID; char Message[100]; }; struct TWriterThreadReply { enum TWriterThreadReplyType ReplyType; void *Data; }; struct TWriterThreadOrder { enum TWriterThreadOrderType OrderType; void *Data; }; struct TPunishmentOrderData { ulong GamemasterID; char GamemasterName[30]; char CriminalName[30]; char CriminalIPAddress[16]; int Reason; int Action; char Comment[200]; int NumberOfStatements; struct vector *ReportedStatements; ulong StatementID; bool IPBanishment; }; struct TLogoutOrderData { ulong CharacterID; int Level; int Profession; time_t LastLoginTime; int TutorActivities; char Residence[30]; }; struct TCharacterDeathOrderData { ulong CharacterID; int Level; ulong Offender; char Remark[30]; bool Unjustified; time_t Time; }; struct TNameLockOrderData { ulong GamemasterID; char GamemasterName[30]; char CharacterName[30]; bool OldNameVisible; }; struct TNotationOrderData { ulong GamemasterID; char GamemasterName[30]; char CharacterName[30]; char Comment[200]; }; struct TProtocolThreadOrder { char ProtocolName[20]; char Text[256]; }; struct TPlayerlistOrderData { int NumberOfPlayers; char *PlayerNames; int *PlayerLevels; int *PlayerProfessions; }; struct TBuddyOrderData { ulong AccountID; ulong Buddy; }; struct TKillStatisticsOrderData { int NumberOfRaces; char *RaceNames; int *KilledPlayers; int *KilledCreatures; }; struct TMoveUseDatabase { struct vector Rules; int NumberOfRules; }; struct TObject { ulong ObjectID; struct Object NextObject; struct Object Container; struct ObjectType Type; ulong Attributes[4]; }; struct TObjectBlock { struct TObject Object[32768]; }; struct TFindCreatures { int startx; int starty; int endx; int endy; int blockx; int blocky; ulong ActID; ulong SkipID; int Mask; bool finished; }; struct TReaderThreadOrder { enum TReaderThreadOrderType OrderType; int SectorX; int SectorY; int SectorZ; ulong CharacterID; }; struct TReaderThreadReply { enum TReaderThreadReplyType ReplyType; int SectorX; int SectorY; int SectorZ; uchar *Data; int Size; }; struct TWriteBinaryFile { struct TWriteStream super_TWriteStream; undefined field1_0x1; undefined field2_0x2; undefined field3_0x3; FILE *File; char Filename[4096]; }; struct TNPC { struct TNonplayer super_TNonplayer; ulong Interlocutor; int Topic; int Price; int Amount; int TypeID; ulong Data; ulong LastTalk; struct vector QueuedPlayers; struct vector QueuedAddresses; int QueueLength; struct TBehaviourDatabase *Behaviour; }; struct TBehaviourDatabase { struct vector Behaviour; int Behaviours; }; struct TQueryManagerConnection { int BufferSize; uchar *Buffer; struct TReadBuffer ReadBuffer; struct TWriteBuffer WriteBuffer; int Socket; bool QueryOk; undefined field6_0x2d; undefined field7_0x2e; undefined field8_0x2f; }; struct TQueryManagerPoolConnection { struct TQueryManagerConnectionPool *QueryManagerConnectionPool; struct TQueryManagerConnection *QueryManagerConnection; }; struct TQueryManagerConnectionPool { int NumberOfConnections; struct TQueryManagerConnection *QueryManagerConnection; bool *QueryManagerConnectionFree; struct Semaphore FreeQueryManagerConnections; struct Semaphore QueryManagerConnectionMutex; }; // NOTE(fusion): Probably bigint structures for RSA decoding. struct vlong_flex_unit { uint n; uint *a; uint z; }; struct vlong { int (**_vptr.vlong)(...); struct vlong_value *value; int negative; }; struct vlong_value { struct vlong_flex_unit super_vlong_flex_unit; uint share; }; struct vlong_montgomery { struct vlong R; struct vlong R1; struct vlong m; struct vlong n1; struct vlong T; struct vlong k; uint N; }; // NOTE(fusion): Oh yes. struct TRSAPrivateKey { int (**_vptr.TRSAPrivateKey)(...); struct vlong m_PrimeP; struct vlong m_PrimeQ; struct vlong m_U; struct vlong m_DP; struct vlong m_DQ; }; struct TShortway { struct matrix *Map; struct TShortwayPoint *FirstToExpand; struct TCreature *cr; int VisibleX; int VisibleY; int StartX; int StartY; int StartZ; int MinWaypoints; };