2016-04-18 09:08:37 +00:00
|
|
|
/*==============================================
|
|
|
|
File created by Yohann NICOLAS.
|
2016-04-18 09:10:35 +00:00
|
|
|
Add support 1.13d by L'Autour.
|
2016-04-18 09:08:37 +00:00
|
|
|
|
|
|
|
this file implements some common and useful
|
|
|
|
function related to some Diablo II mechanisms.
|
|
|
|
|
|
|
|
/*============================================*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <windows.h>
|
|
|
|
#include "../Commons/d2Constants.h"
|
|
|
|
#include "../Commons/d2BinFile.h"
|
|
|
|
#include "../Commons/d2Struct.h"
|
|
|
|
#include "../Commons/d2StringTblStruct.h"
|
|
|
|
#include "../Commons/D2UnitStruct.h"
|
|
|
|
#include "../Commons/updatingConst.h"
|
|
|
|
|
|
|
|
#include "customData.h"
|
|
|
|
#include "modifMemory.h"
|
|
|
|
#include "parameters.h"
|
|
|
|
#include "globalVariable.h"
|
|
|
|
|
|
|
|
//#ifdef MSVC
|
|
|
|
#define FASTCALL __fastcall
|
|
|
|
//#else
|
|
|
|
//#define FASTCALL __msfastcall
|
|
|
|
//#endif
|
|
|
|
#define STDCALL __stdcall
|
|
|
|
#define FCT_ASM(N) __declspec(naked) void N() {__asm{
|
|
|
|
#define RANDOM(V) ((int)(rand()/(RAND_MAX+1.0)*(V)))
|
|
|
|
//#define RANDOM(V) (rand()%(V))
|
|
|
|
|
|
|
|
// Convertion to 1.09
|
|
|
|
struct s_shifting {
|
|
|
|
DWORD ptInventory;
|
|
|
|
DWORD ptSpecificData;
|
|
|
|
DWORD ptPYPlayerData;
|
|
|
|
DWORD ptGame;
|
|
|
|
DWORD ptClientGame;
|
|
|
|
DWORD ptSkills;
|
|
|
|
DWORD ptImage;
|
|
|
|
DWORD ptFrame;
|
|
|
|
};
|
|
|
|
extern s_shifting shifting;
|
|
|
|
|
|
|
|
//#define PY(C) (*(PYPlayerData**)((BYTE*)(ptChar)+shifting.ptPYPlayerData))
|
|
|
|
#define PCPlayerData (*(PlayerData**)((DWORD)(ptChar)+shifting.ptSpecificData)) //->ptPlayerData
|
|
|
|
#define PCGame (*(Game**)((DWORD)(ptChar)+shifting.ptGame)) //->ptGame
|
|
|
|
#define PClientGame (*(Game**)((DWORD)(ptClient)+shifting.ptClientGame)) //ptClient->ptGame
|
|
|
|
#define PCInventory (*(Inventory**)((DWORD)(ptChar)+shifting.ptInventory)) //->ptInventory
|
|
|
|
//#define PIItemData (*(ItemData**)((DWORD)(ptItem)+shifting.ptSpecificData)) //->ptItemData
|
|
|
|
//#define PCPY (*(PYPlayerData**)((DWORD)(ptChar)+shifting.ptPYPlayerData)) //->ptPYPlayerData
|
|
|
|
#define PCPY ((PYPlayerData*)((DWORD)PCPlayerData+shifting.ptPYPlayerData)) //->ptPYPlayerData
|
|
|
|
#define PCSkills (*(Skills**)((DWORD)(ptChar)+shifting.ptSkills)) //->ptSkills
|
|
|
|
|
2016-04-18 09:10:35 +00:00
|
|
|
#define R7(Z,A,B,C,D,E,F,G,H) (offset_##Z + (version_##Z == V113d? 0x##H : (version_##Z == V113c? 0x##G : (version_##Z == V112? 0x##F : (version_##Z == V111b? 0x##E : (version_##Z == V111? 0x##D : (version_##Z == V110? 0x##C : (version_##Z == V109d? 0x##B : 0x##A))))))))
|
|
|
|
#define V7(Z,A,B,C,D,E,F,G,H) (version_##Z == V113d? 0x##H : (version_##Z == V113c? 0x##G : (version_##Z == V112? 0x##F : (version_##Z == V111b? 0x##E : (version_##Z == V111? 0x##D : (version_##Z == V110? 0x##C : (version_##Z == V109d? 0x##B : 0x##A)))))))
|
2016-04-18 09:08:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
// Convert 4 char code in a DWORD code
|
|
|
|
#define BIN(A,B,C,D) ((DWORD)A) + (((DWORD)B) << 8) + (((DWORD)C) << 16) + (((DWORD)D) << 24)
|
|
|
|
|
|
|
|
|
|
|
|
#define RX(v) (WindowStartX+(v))
|
|
|
|
#define RY(v) (ResolutionY+NegWindowStartY-(v))
|
|
|
|
|
|
|
|
|
|
|
|
enum eFileVersion
|
|
|
|
{
|
|
|
|
V109b=0,
|
|
|
|
V109d,
|
|
|
|
V110,
|
|
|
|
V111,
|
|
|
|
V111b,
|
|
|
|
V112,
|
2016-04-18 09:10:35 +00:00
|
|
|
V113c,
|
|
|
|
V113d,
|
|
|
|
V114a
|
2016-04-18 09:08:37 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern int version_SmackW32;
|
|
|
|
extern int version_D2Common;
|
|
|
|
extern int version_ijl11;
|
|
|
|
extern int version_D2Gdi;
|
|
|
|
extern int version_D2Win;
|
|
|
|
extern int version_D2sound;
|
|
|
|
extern int version_D2MCPCLI;
|
|
|
|
extern int version_D2Launch;
|
|
|
|
extern int version_D2gfx;
|
|
|
|
extern int version_D2Client;
|
|
|
|
extern int version_D2Net;
|
|
|
|
extern int version_D2Lang;
|
|
|
|
extern int version_D2Game;
|
|
|
|
extern int version_D2CMP;
|
|
|
|
extern int version_Bnclient;
|
|
|
|
extern int version_Fog;
|
|
|
|
extern int version_Storm;
|
|
|
|
|
|
|
|
|
|
|
|
// Address in memory of external DLL
|
|
|
|
extern DWORD offset_SmackW32;
|
|
|
|
extern DWORD offset_D2Common;
|
|
|
|
extern DWORD offset_ijl11;
|
|
|
|
extern DWORD offset_D2Gdi;
|
|
|
|
extern DWORD offset_D2Win;
|
|
|
|
extern DWORD offset_D2sound;
|
|
|
|
extern DWORD offset_D2MCPCLI;
|
|
|
|
extern DWORD offset_D2Launch;
|
|
|
|
extern DWORD offset_D2gfx;
|
|
|
|
extern DWORD offset_D2Client;
|
|
|
|
extern DWORD offset_D2Net;
|
|
|
|
extern DWORD offset_D2Lang;
|
|
|
|
extern DWORD offset_D2Game;
|
|
|
|
extern DWORD offset_D2CMP;
|
|
|
|
extern DWORD offset_Bnclient;
|
|
|
|
extern DWORD offset_Fog;
|
|
|
|
extern DWORD offset_Storm;
|
|
|
|
|
|
|
|
extern const char* S_CloneBattles;
|
|
|
|
extern const char* S_DarkAlliance;
|
|
|
|
|
2016-04-18 09:10:35 +00:00
|
|
|
int UCS2toUTF8(char* dst, int maxdst, LPWSTR src, int lensrc);
|
|
|
|
int UTF8toUCS2(LPWSTR dst, int maxdst, char* src, int lensrc);
|
|
|
|
|
|
|
|
|
|
|
|
bool initLocaleStrings();
|
|
|
|
void freeLocaleStrings();
|
|
|
|
|
|
|
|
const LPWSTR getTypeString (DWORD code, char** IdxStr);
|
2016-04-18 09:08:37 +00:00
|
|
|
LPWSTR getTranslatedString(int stringID);
|
2016-04-18 09:10:35 +00:00
|
|
|
int wSprintStringLastGender(LPWSTR buf, int lenbuf,int stringID);
|
|
|
|
LPWSTR cutStringGender(LPWSTR str);
|
|
|
|
LPWSTR setMonoString(LPWSTR str);
|
|
|
|
|
2016-04-18 09:08:37 +00:00
|
|
|
enum eStringList
|
|
|
|
{
|
|
|
|
STR_STATS_UNASSIGN_WITH_LIMIT=0,
|
|
|
|
STR_STATS_UNASSIGN_WITHOUT_LIMIT,
|
|
|
|
STR_STATS_BASE_MIN,
|
|
|
|
STR_SKILLS_UNASSIGN,
|
|
|
|
STR_STASH_PREVIOUS_PAGE,
|
|
|
|
STR_STASH_NEXT_PAGE,
|
|
|
|
STR_TOGGLE_TO_PERSONAL,
|
|
|
|
STR_TOGGLE_TO_SHARED,
|
|
|
|
STR_STASH_PREVIOUS_INDEX,
|
|
|
|
STR_STASH_NEXT_INDEX,
|
|
|
|
STR_PERSONAL_PAGE_NUMBER,
|
|
|
|
STR_SHARED_PAGE_NUMBER,
|
|
|
|
STR_NO_SELECTED_PAGE,
|
|
|
|
STR_PUT_GOLD,
|
|
|
|
STR_TAKE_GOLD,
|
|
|
|
STR_SHARED_GOLD_QUANTITY,
|
|
|
|
STR_PREVIOUS_PAGE,
|
2016-04-18 09:10:35 +00:00
|
|
|
STR_NEXT_PAGE,
|
|
|
|
STR_ITEM_LEVEL,
|
|
|
|
STR_COW_PORTAL,
|
|
|
|
STR_PANDEMONIUM_PORTAL,
|
|
|
|
STR_PANDEMONIUM_FINAL_PORTAL,
|
|
|
|
STR_FULL,
|
|
|
|
STR_REPAIR,
|
|
|
|
STR_AND,
|
|
|
|
STR_RECHARGE,
|
|
|
|
STR_DESTROY_FILLERS,
|
|
|
|
STR_REMOVE_FILLERS,
|
|
|
|
STR_REGENERATE,
|
|
|
|
STR_WITH_N_SOCKETS,
|
|
|
|
STR_ETHERAL,
|
|
|
|
STR_NOT_ETHERAL,
|
|
|
|
STR_NOT_RUNEWORD,
|
|
|
|
STR_BASIC,
|
|
|
|
STR_EXCEPTIONAL,
|
|
|
|
STR_ELITE,
|
|
|
|
STR_CRACKED,
|
|
|
|
STR_NORMAL,
|
|
|
|
STR_SUPERIOR,
|
|
|
|
STR_MAGIC,
|
|
|
|
STR_SET,
|
|
|
|
STR_RARE,
|
|
|
|
STR_UNIQUE,
|
|
|
|
STR_CRAFTED,
|
|
|
|
STR_TEMPERED,
|
|
|
|
STR_ITEM,
|
|
|
|
STR_ITEM_SAME_TYPE,
|
|
|
|
STR_OR_UPGRADED,
|
|
|
|
STR_WITHOUT_SOCKET,
|
|
|
|
STR_WITH_SOCKET,
|
|
|
|
STR_ONLY_N_H,
|
|
|
|
STR_ONLY_HELL,
|
|
|
|
STR_ONLY_CLASS
|
2016-04-18 09:08:37 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
bool isOnRect(DWORD x, DWORD y, DWORD x0, DWORD y0, DWORD l, DWORD h);
|
|
|
|
void freeMessage(sWinMessage* msg);
|
|
|
|
LPWSTR getTypeUString (WORD id, LPWSTR lpText, DWORD size);
|
2016-04-18 09:10:35 +00:00
|
|
|
//char* getTypeAString (WORD id, char* lpText, DWORD size);
|
2016-04-18 09:08:37 +00:00
|
|
|
|
|
|
|
/*================================= END OF FILE =================================*/
|