From aabd2f7bb1481c30c85c4b5d4296e4124b10ef24 Mon Sep 17 00:00:00 2001 From: Imanol-Mikel Barba Sabariego Date: Mon, 6 Jul 2020 23:40:07 +0100 Subject: [PATCH] WIP. Missing Quest data, Waypoint data, NPC Introductions, Character stats, Character skills, items --- d2char.c | 35 +++++++++++++++++++++++++++++++++-- d2char.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++-------------------- d2mercs.c | 20 ++++++++++++++++++++ d2mercs.h | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ d2skills.h | 367 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ d2strings.h | 542 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1218 insertions(+), 22 deletions(-) create mode 100644 d2mercs.c create mode 100644 d2mercs.h create mode 100644 d2skills.h diff --git a/d2char.c b/d2char.c index 6ce46bc..4135c4e 100644 --- a/d2char.c +++ b/d2char.c @@ -1,5 +1,7 @@ #include "d2char.h" -#include +#include "d2skills.h" +#include "d2mercs.h" +#include uint32_t calcChecksum(D2CharHeader* c, void* charData) { uint32_t origChecksum = c->checksum; @@ -51,7 +53,6 @@ int isFemale(D2CharHeader* c) { c->charClass == D2S_CHARCLASS_SORCERESS); } -// Returns static string from library memory, no need to free const char* getCharacterTitle(D2CharHeader* c) { int tier; if(isExpansion(c)) { @@ -126,4 +127,34 @@ const char* getCharacterTitle(D2CharHeader* c) { } } } +} + +size_t getLastPlayed(D2CharHeader* c, char* buf, size_t bufLen) { + struct tm* time = localtime(&(c->lastPlayed)); + size_t ret = strftime(buf, bufLen, "%c", time); + if(!ret) { + fprintf(stderr,"libd2char error: Provided buffer for time string was too small\n"); + } + return ret; +} + +const char* getSkillName(int skillID) { + return skills[skillID]; +} + +int getCurrentDifficulty(D2CharHeader* c) { + for(int i = D2S_DIFFICULTY_NORMAL; i <= D2S_DIFFICULTY_HELL; ++i) { + if(c->difficulty[i] & D2S_DIFFICULTY_ACTIVE) { + return i; + } + } + return D2S_DIFFICULTY_UNKNOWN; +} + +const char* getMercName(D2CharHeader* c) { + return getMercNameTableEntry(c->mercenaryType, c->mercenaryNameID); +} + +const char* getMercType(D2CharHeader* c) { + return mercTypes[c->mercenaryType]; } \ No newline at end of file diff --git a/d2char.h b/d2char.h index 8dc572c..b1f789e 100644 --- a/d2char.h +++ b/d2char.h @@ -2,6 +2,7 @@ #define D2CHAR_H #include +#include #include "d2strings.h" #define D2S_HEADER_LENGTH 765 @@ -21,7 +22,13 @@ #define D2S_CHARSTATUS_EXPANSION 0x20 #define D2S_CHARSTATUS_LADDER 0x40 -enum D2Version { +#define D2S_DIFFICULTY_ACTIVE 0x80 +#define D2S_DIFFICULTY_NORMAL 0 +#define D2S_DIFFICULTY_NIGHTMARE 1 +#define D2S_DIFFICULTY_HELL 2 +#define D2S_DIFFICULTY_UNKNOWN -1 + +enum D2S_VERSION { VER_106 = 71, VER_107 = 87, VER_108XP = 87, @@ -30,17 +37,17 @@ enum D2Version { VER_110 = 96 }; -enum D2CharClass { - D2S_CHARCLASS_AMAZON = 0x00, - D2S_CHARCLASS_SORCERESS = 0x01, - D2S_CHARCLASS_NECROMANCER = 0x02, - D2S_CHARCLASS_PALADIN = 0x03, - D2S_CHARCLASS_BARBARIAN = 0x04, - D2S_CHARCLASS_DRUID = 0x05, - D2S_CHARCLASS_ASSASSIN = 0x06 +enum D2S_CHARCLASS { + D2S_CHARCLASS_AMAZON = 0, + D2S_CHARCLASS_SORCERESS = 1, + D2S_CHARCLASS_NECROMANCER = 2, + D2S_CHARCLASS_PALADIN = 3, + D2S_CHARCLASS_BARBARIAN = 4, + D2S_CHARCLASS_DRUID = 5, + D2S_CHARCLASS_ASSASSIN = 6 }; -enum D2Acts { +enum D2S_ACT { D2S_ACT1 = 0, D2S_ACT2 = 1, D2S_ACT3 = 2, @@ -53,7 +60,7 @@ typedef struct __attribute__((packed)){ uint32_t versionID; uint32_t fileSize; uint32_t checksum; - uint32_t activeWeapon; // TODO + uint32_t activeWeapon; // Determines which weapon set (I or II in inventory) is currently in use char name[D2S_CHARNAME_LENGTH]; uint8_t charStatus; uint8_t charProgress; @@ -64,24 +71,24 @@ typedef struct __attribute__((packed)){ uint32_t unknown3; // TODO uint32_t lastPlayed; uint32_t unknown4; // TODO - uint8_t hotkeys[D2S_HOTKEYS_LENGTH]; + uint8_t hotkeys[D2S_HOTKEYS_LENGTH]; // Not implemented. Too bad! uint32_t leftAbility; uint32_t rightAbility; - uint32_t leftAbilityAlt; - uint32_t rightAbilityAlt; - uint8_t charAppearance[D2S_CHAR_APPEARANCE_LENGTH]; + uint32_t leftAbilityAlt; // Left ability when alternative weapon set (II) is selected + uint32_t rightAbilityAlt; // Right ability when alternative weapon set (II) is selected + uint8_t charAppearance[D2S_CHAR_APPEARANCE_LENGTH]; // Not implemented. Too bad! uint8_t difficulty[D2S_DIFFICULTY_LENGTH]; - uint32_t mapID; - uint16_t unknown5; - uint16_t mercenaryStatus; + uint32_t mapID; // Not implemented. Too bad! + uint16_t unknown5; // TODO + uint16_t mercenaryDead; uint32_t mercenarySeed; uint16_t mercenaryNameID; uint16_t mercenaryType; uint32_t mercenaryExp; - uint8_t unknown6[144]; + uint8_t unknown6[144]; // TODO uint8_t questData[D2S_QUESTS_LENGTH]; uint8_t waypointData[D2S_WAYPOINTS_LENGTH]; - uint8_t NPCIntroductions[D2S_NPCDATA_LENGTH]; // TODO + uint8_t NPCIntroductions[D2S_NPCDATA_LENGTH]; // Not implemented. (Yet) } D2CharHeader; uint32_t calcChecksum(D2CharHeader* c, void* charData); @@ -91,4 +98,27 @@ int hasDied(D2CharHeader* c); int isExpansion(D2CharHeader* c); int isLadder(D2CharHeader* c); +// 0 = Act I, 4 = Act V (Expansion) +int getCurrentAct(D2CharHeader* c); + +int isFemale(D2CharHeader* c); + +// Returns static string from library memory, no need to free +const char* getCharacterTitle(D2CharHeader* c); + +// Writes to user-allocated string. Format is default locale's time representation +size_t getLastPlayed(D2CharHeader* c, char* buf, size_t bufLen); + +// Returns static string from library memory, no need to free +const char* getSkillName(int skillID); + +// 0 = Normal, 2 = Hell +int getCurrentDifficulty(D2CharHeader* c); + +// Returns static string from library memory, no need to free +const char* getMercName(D2CharHeader* c); + +// Returns static string from library memory, no need to free +const char* getMercType(D2CharHeader* c); + #endif \ No newline at end of file diff --git a/d2mercs.c b/d2mercs.c new file mode 100644 index 0000000..9d95c9f --- /dev/null +++ b/d2mercs.c @@ -0,0 +1,20 @@ +#include "d2mercs.h" + +int _getMercType(int mercID) { + if(mercID >= 0 && mercID <= 5) { + return D2S_MERCTYPE_ROGUE; + } else if(mercID >= 6 && mercID <= 14) { + return D2S_MERCTYPE_DESERT; + } else if(mercID >= 15 && mercID <= 23) { + return D2S_MERCTYPE_SORCEROR; + } else if(mercID >= 24 && mercID <= 29) { + return D2S_MERCTYPE_BARBARIAN; + } else { + return D2S_MERCTYPE_UNKNOWN; + } +} + +const char* _getMercName(int mercID, int mercNameID) { + int offset = getMercType(mercID); + return mercNames[mercNameID + offset]; +} \ No newline at end of file diff --git a/d2mercs.h b/d2mercs.h new file mode 100644 index 0000000..218eaec --- /dev/null +++ b/d2mercs.h @@ -0,0 +1,206 @@ +#ifndef D2MERCS_H +#define D2MERCS_H + +#include "d2strings.h" + +// The values here are the offsets of each merc's names in the table. +// i.e: Merc names from pos 41 to 61 are Desert mercs +// +// We use these values as offsets later to get the correct name using the relative ID the game provides +enum D2S_MERCTYPES { + D2S_MERCTYPE_UNKNOWN = -1, + D2S_MERCTYPE_ROGUE = 0, + D2S_MERCTYPE_DESERT = 41, + D2S_MERCTYPE_SORCEROR = 62, + D2S_MERCTYPE_BARBARIAN = 82 +}; + +const char* const mercTypes[] = { + D2S_MERC_ID_0, + D2S_MERC_ID_1, + D2S_MERC_ID_2, + D2S_MERC_ID_3, + D2S_MERC_ID_4, + D2S_MERC_ID_5, + D2S_MERC_ID_6, + D2S_MERC_ID_7, + D2S_MERC_ID_8, + D2S_MERC_ID_9, + D2S_MERC_ID_10, + D2S_MERC_ID_11, + D2S_MERC_ID_12, + D2S_MERC_ID_13, + D2S_MERC_ID_14, + D2S_MERC_ID_15, + D2S_MERC_ID_16, + D2S_MERC_ID_17, + D2S_MERC_ID_18, + D2S_MERC_ID_19, + D2S_MERC_ID_20, + D2S_MERC_ID_21, + D2S_MERC_ID_22, + D2S_MERC_ID_23, + D2S_MERC_ID_24, + D2S_MERC_ID_25, + D2S_MERC_ID_26, + D2S_MERC_ID_27, + D2S_MERC_ID_28, + D2S_MERC_ID_29 +}; + +const char* const mercNames[] = { + D2S_MERC_NAME_0, + D2S_MERC_NAME_1, + D2S_MERC_NAME_2, + D2S_MERC_NAME_3, + D2S_MERC_NAME_4, + D2S_MERC_NAME_5, + D2S_MERC_NAME_6, + D2S_MERC_NAME_7, + D2S_MERC_NAME_8, + D2S_MERC_NAME_9, + D2S_MERC_NAME_10, + D2S_MERC_NAME_11, + D2S_MERC_NAME_12, + D2S_MERC_NAME_13, + D2S_MERC_NAME_14, + D2S_MERC_NAME_15, + D2S_MERC_NAME_16, + D2S_MERC_NAME_17, + D2S_MERC_NAME_18, + D2S_MERC_NAME_19, + D2S_MERC_NAME_20, + D2S_MERC_NAME_21, + D2S_MERC_NAME_22, + D2S_MERC_NAME_23, + D2S_MERC_NAME_24, + D2S_MERC_NAME_25, + D2S_MERC_NAME_26, + D2S_MERC_NAME_27, + D2S_MERC_NAME_28, + D2S_MERC_NAME_29, + D2S_MERC_NAME_30, + D2S_MERC_NAME_31, + D2S_MERC_NAME_32, + D2S_MERC_NAME_33, + D2S_MERC_NAME_34, + D2S_MERC_NAME_35, + D2S_MERC_NAME_36, + D2S_MERC_NAME_37, + D2S_MERC_NAME_38, + D2S_MERC_NAME_39, + D2S_MERC_NAME_40, + D2S_MERC_NAME_41, + D2S_MERC_NAME_42, + D2S_MERC_NAME_43, + D2S_MERC_NAME_44, + D2S_MERC_NAME_45, + D2S_MERC_NAME_46, + D2S_MERC_NAME_47, + D2S_MERC_NAME_48, + D2S_MERC_NAME_49, + D2S_MERC_NAME_50, + D2S_MERC_NAME_51, + D2S_MERC_NAME_52, + D2S_MERC_NAME_53, + D2S_MERC_NAME_54, + D2S_MERC_NAME_55, + D2S_MERC_NAME_56, + D2S_MERC_NAME_57, + D2S_MERC_NAME_58, + D2S_MERC_NAME_59, + D2S_MERC_NAME_60, + D2S_MERC_NAME_61, + D2S_MERC_NAME_62, + D2S_MERC_NAME_63, + D2S_MERC_NAME_64, + D2S_MERC_NAME_65, + D2S_MERC_NAME_66, + D2S_MERC_NAME_67, + D2S_MERC_NAME_68, + D2S_MERC_NAME_69, + D2S_MERC_NAME_70, + D2S_MERC_NAME_71, + D2S_MERC_NAME_72, + D2S_MERC_NAME_73, + D2S_MERC_NAME_74, + D2S_MERC_NAME_75, + D2S_MERC_NAME_76, + D2S_MERC_NAME_77, + D2S_MERC_NAME_78, + D2S_MERC_NAME_79, + D2S_MERC_NAME_80, + D2S_MERC_NAME_81, + D2S_MERC_NAME_82, + D2S_MERC_NAME_83, + D2S_MERC_NAME_84, + D2S_MERC_NAME_85, + D2S_MERC_NAME_86, + D2S_MERC_NAME_87, + D2S_MERC_NAME_88, + D2S_MERC_NAME_89, + D2S_MERC_NAME_90, + D2S_MERC_NAME_91, + D2S_MERC_NAME_92, + D2S_MERC_NAME_93, + D2S_MERC_NAME_94, + D2S_MERC_NAME_95, + D2S_MERC_NAME_96, + D2S_MERC_NAME_97, + D2S_MERC_NAME_98, + D2S_MERC_NAME_99, + D2S_MERC_NAME_100, + D2S_MERC_NAME_101, + D2S_MERC_NAME_102, + D2S_MERC_NAME_103, + D2S_MERC_NAME_104, + D2S_MERC_NAME_105, + D2S_MERC_NAME_106, + D2S_MERC_NAME_107, + D2S_MERC_NAME_108, + D2S_MERC_NAME_109, + D2S_MERC_NAME_110, + D2S_MERC_NAME_111, + D2S_MERC_NAME_112, + D2S_MERC_NAME_113, + D2S_MERC_NAME_114, + D2S_MERC_NAME_115, + D2S_MERC_NAME_116, + D2S_MERC_NAME_117, + D2S_MERC_NAME_118, + D2S_MERC_NAME_119, + D2S_MERC_NAME_120, + D2S_MERC_NAME_121, + D2S_MERC_NAME_122, + D2S_MERC_NAME_123, + D2S_MERC_NAME_124, + D2S_MERC_NAME_125, + D2S_MERC_NAME_126, + D2S_MERC_NAME_127, + D2S_MERC_NAME_128, + D2S_MERC_NAME_129, + D2S_MERC_NAME_130, + D2S_MERC_NAME_131, + D2S_MERC_NAME_132, + D2S_MERC_NAME_133, + D2S_MERC_NAME_134, + D2S_MERC_NAME_135, + D2S_MERC_NAME_136, + D2S_MERC_NAME_137, + D2S_MERC_NAME_138, + D2S_MERC_NAME_139, + D2S_MERC_NAME_140, + D2S_MERC_NAME_141, + D2S_MERC_NAME_142, + D2S_MERC_NAME_143, + D2S_MERC_NAME_144, + D2S_MERC_NAME_145, + D2S_MERC_NAME_146, + D2S_MERC_NAME_147, + D2S_MERC_NAME_148 +}; + +int _getMercType(int mercID); +const char* _getMercName(int mercID, int mercNameID); + +#endif \ No newline at end of file diff --git a/d2skills.h b/d2skills.h new file mode 100644 index 0000000..09e158c --- /dev/null +++ b/d2skills.h @@ -0,0 +1,367 @@ +#ifndef D2SKILLS_H +#define D2SKILLS_H + +#include +#include "d2strings.h" + +const char* const skills[] = { + D2S_SKILL_0, + D2S_SKILL_1, + D2S_SKILL_2, + D2S_SKILL_3, + D2S_SKILL_4, + D2S_SKILL_5, + D2S_SKILL_6, + D2S_SKILL_7, + D2S_SKILL_8, + D2S_SKILL_9, + D2S_SKILL_10, + D2S_SKILL_11, + D2S_SKILL_12, + D2S_SKILL_13, + D2S_SKILL_14, + D2S_SKILL_15, + D2S_SKILL_16, + D2S_SKILL_17, + D2S_SKILL_18, + D2S_SKILL_19, + D2S_SKILL_20, + D2S_SKILL_21, + D2S_SKILL_22, + D2S_SKILL_23, + D2S_SKILL_24, + D2S_SKILL_25, + D2S_SKILL_26, + D2S_SKILL_27, + D2S_SKILL_28, + D2S_SKILL_29, + D2S_SKILL_30, + D2S_SKILL_31, + D2S_SKILL_32, + D2S_SKILL_33, + D2S_SKILL_34, + D2S_SKILL_35, + D2S_SKILL_36, + D2S_SKILL_37, + D2S_SKILL_38, + D2S_SKILL_39, + D2S_SKILL_40, + D2S_SKILL_41, + D2S_SKILL_42, + D2S_SKILL_43, + D2S_SKILL_44, + D2S_SKILL_45, + D2S_SKILL_46, + D2S_SKILL_47, + D2S_SKILL_48, + D2S_SKILL_49, + D2S_SKILL_50, + D2S_SKILL_51, + D2S_SKILL_52, + D2S_SKILL_53, + D2S_SKILL_54, + D2S_SKILL_55, + D2S_SKILL_56, + D2S_SKILL_57, + D2S_SKILL_58, + D2S_SKILL_59, + D2S_SKILL_60, + D2S_SKILL_61, + D2S_SKILL_62, + D2S_SKILL_63, + D2S_SKILL_64, + D2S_SKILL_65, + D2S_SKILL_66, + D2S_SKILL_67, + D2S_SKILL_68, + D2S_SKILL_69, + D2S_SKILL_70, + D2S_SKILL_71, + D2S_SKILL_72, + D2S_SKILL_73, + D2S_SKILL_74, + D2S_SKILL_75, + D2S_SKILL_76, + D2S_SKILL_77, + D2S_SKILL_78, + D2S_SKILL_79, + D2S_SKILL_80, + D2S_SKILL_81, + D2S_SKILL_82, + D2S_SKILL_83, + D2S_SKILL_84, + D2S_SKILL_85, + D2S_SKILL_86, + D2S_SKILL_87, + D2S_SKILL_88, + D2S_SKILL_89, + D2S_SKILL_90, + D2S_SKILL_91, + D2S_SKILL_92, + D2S_SKILL_93, + D2S_SKILL_94, + D2S_SKILL_95, + D2S_SKILL_96, + D2S_SKILL_97, + D2S_SKILL_98, + D2S_SKILL_99, + D2S_SKILL_100, + D2S_SKILL_101, + D2S_SKILL_102, + D2S_SKILL_103, + D2S_SKILL_104, + D2S_SKILL_105, + D2S_SKILL_106, + D2S_SKILL_107, + D2S_SKILL_108, + D2S_SKILL_109, + D2S_SKILL_110, + D2S_SKILL_111, + D2S_SKILL_112, + D2S_SKILL_113, + D2S_SKILL_114, + D2S_SKILL_115, + D2S_SKILL_116, + D2S_SKILL_117, + D2S_SKILL_118, + D2S_SKILL_119, + D2S_SKILL_120, + D2S_SKILL_121, + D2S_SKILL_122, + D2S_SKILL_123, + D2S_SKILL_124, + D2S_SKILL_125, + D2S_SKILL_126, + D2S_SKILL_127, + D2S_SKILL_128, + D2S_SKILL_129, + D2S_SKILL_130, + D2S_SKILL_131, + D2S_SKILL_132, + D2S_SKILL_133, + D2S_SKILL_134, + D2S_SKILL_135, + D2S_SKILL_136, + D2S_SKILL_137, + D2S_SKILL_138, + D2S_SKILL_139, + D2S_SKILL_140, + D2S_SKILL_141, + D2S_SKILL_142, + D2S_SKILL_143, + D2S_SKILL_144, + D2S_SKILL_145, + D2S_SKILL_146, + D2S_SKILL_147, + D2S_SKILL_148, + D2S_SKILL_149, + D2S_SKILL_150, + D2S_SKILL_151, + D2S_SKILL_152, + D2S_SKILL_153, + D2S_SKILL_154, + D2S_SKILL_155, + D2S_SKILL_156, + D2S_SKILL_157, + D2S_SKILL_158, + D2S_SKILL_159, + D2S_SKILL_160, + D2S_SKILL_161, + D2S_SKILL_162, + D2S_SKILL_163, + D2S_SKILL_164, + D2S_SKILL_165, + D2S_SKILL_166, + D2S_SKILL_167, + D2S_SKILL_168, + D2S_SKILL_169, + D2S_SKILL_170, + D2S_SKILL_171, + D2S_SKILL_172, + D2S_SKILL_173, + D2S_SKILL_174, + D2S_SKILL_175, + D2S_SKILL_176, + D2S_SKILL_177, + D2S_SKILL_178, + D2S_SKILL_179, + D2S_SKILL_180, + D2S_SKILL_181, + D2S_SKILL_182, + D2S_SKILL_183, + D2S_SKILL_184, + D2S_SKILL_185, + D2S_SKILL_186, + D2S_SKILL_187, + D2S_SKILL_188, + D2S_SKILL_189, + D2S_SKILL_190, + D2S_SKILL_191, + D2S_SKILL_192, + D2S_SKILL_193, + D2S_SKILL_194, + D2S_SKILL_195, + D2S_SKILL_196, + D2S_SKILL_197, + D2S_SKILL_198, + D2S_SKILL_199, + D2S_SKILL_200, + D2S_SKILL_201, + D2S_SKILL_202, + D2S_SKILL_203, + D2S_SKILL_204, + D2S_SKILL_205, + D2S_SKILL_206, + D2S_SKILL_207, + D2S_SKILL_208, + D2S_SKILL_209, + D2S_SKILL_210, + D2S_SKILL_211, + D2S_SKILL_212, + D2S_SKILL_213, + D2S_SKILL_214, + D2S_SKILL_215, + D2S_SKILL_216, + D2S_SKILL_217, + D2S_SKILL_218, + D2S_SKILL_219, + D2S_SKILL_220, + D2S_SKILL_221, + D2S_SKILL_222, + D2S_SKILL_223, + D2S_SKILL_224, + D2S_SKILL_225, + D2S_SKILL_226, + D2S_SKILL_227, + D2S_SKILL_228, + D2S_SKILL_229, + D2S_SKILL_230, + D2S_SKILL_231, + D2S_SKILL_232, + D2S_SKILL_233, + D2S_SKILL_234, + D2S_SKILL_235, + D2S_SKILL_236, + D2S_SKILL_237, + D2S_SKILL_238, + D2S_SKILL_239, + D2S_SKILL_240, + D2S_SKILL_241, + D2S_SKILL_242, + D2S_SKILL_243, + D2S_SKILL_244, + D2S_SKILL_245, + D2S_SKILL_246, + D2S_SKILL_247, + D2S_SKILL_248, + D2S_SKILL_249, + D2S_SKILL_250, + D2S_SKILL_251, + D2S_SKILL_252, + D2S_SKILL_253, + D2S_SKILL_254, + D2S_SKILL_255, + D2S_SKILL_256, + D2S_SKILL_257, + D2S_SKILL_258, + D2S_SKILL_259, + D2S_SKILL_260, + D2S_SKILL_261, + D2S_SKILL_262, + D2S_SKILL_263, + D2S_SKILL_264, + D2S_SKILL_265, + D2S_SKILL_266, + D2S_SKILL_267, + D2S_SKILL_268, + D2S_SKILL_269, + D2S_SKILL_270, + D2S_SKILL_271, + D2S_SKILL_272, + D2S_SKILL_273, + D2S_SKILL_274, + D2S_SKILL_275, + D2S_SKILL_276, + D2S_SKILL_277, + D2S_SKILL_278, + D2S_SKILL_279, + D2S_SKILL_280, + D2S_SKILL_281, + D2S_SKILL_282, + D2S_SKILL_283, + D2S_SKILL_284, + D2S_SKILL_285, + D2S_SKILL_286, + D2S_SKILL_287, + D2S_SKILL_288, + D2S_SKILL_289, + D2S_SKILL_290, + D2S_SKILL_291, + D2S_SKILL_292, + D2S_SKILL_293, + D2S_SKILL_294, + D2S_SKILL_295, + D2S_SKILL_296, + D2S_SKILL_297, + D2S_SKILL_298, + D2S_SKILL_299, + D2S_SKILL_300, + D2S_SKILL_301, + D2S_SKILL_302, + D2S_SKILL_303, + D2S_SKILL_304, + D2S_SKILL_305, + D2S_SKILL_306, + D2S_SKILL_307, + D2S_SKILL_308, + D2S_SKILL_309, + D2S_SKILL_310, + D2S_SKILL_311, + D2S_SKILL_312, + D2S_SKILL_313, + D2S_SKILL_314, + D2S_SKILL_315, + D2S_SKILL_316, + D2S_SKILL_317, + D2S_SKILL_318, + D2S_SKILL_319, + D2S_SKILL_320, + D2S_SKILL_321, + D2S_SKILL_322, + D2S_SKILL_323, + D2S_SKILL_324, + D2S_SKILL_325, + D2S_SKILL_326, + D2S_SKILL_327, + D2S_SKILL_328, + D2S_SKILL_329, + D2S_SKILL_330, + D2S_SKILL_331, + D2S_SKILL_332, + D2S_SKILL_333, + D2S_SKILL_334, + D2S_SKILL_335, + D2S_SKILL_336, + D2S_SKILL_337, + D2S_SKILL_338, + D2S_SKILL_339, + D2S_SKILL_340, + D2S_SKILL_341, + D2S_SKILL_342, + D2S_SKILL_343, + D2S_SKILL_344, + D2S_SKILL_345, + D2S_SKILL_346, + D2S_SKILL_347, + D2S_SKILL_348, + D2S_SKILL_349, + D2S_SKILL_350, + D2S_SKILL_351, + D2S_SKILL_352, + D2S_SKILL_353, + D2S_SKILL_354, + D2S_SKILL_355, + D2S_SKILL_356 +}; + +#endif \ No newline at end of file diff --git a/d2strings.h b/d2strings.h index d052f53..f59ffe0 100644 --- a/d2strings.h +++ b/d2strings.h @@ -1,6 +1,7 @@ #ifndef D2STRINGS_H #define D2STRINGS_H +// Character titles const char* D2S_CHARPROGRESS_TIER0_NAME = ""; const char* D2S_CHARPROGRESS_CLASSIC_TIER1_NAME_M = "Sir"; const char* D2S_CHARPROGRESS_CLASSIC_TIER2_NAME_M = "Lord"; @@ -23,4 +24,545 @@ const char* D2S_CHARPROGRESS_EXPANSION_TIER1_NAME_HARDCORE = "Destroyer"; const char* D2S_CHARPROGRESS_EXPANSION_TIER2_NAME_HARDCORE = "Conqueror"; const char* D2S_CHARPROGRESS_EXPANSION_TIER3_NAME_HARDCORE = "Guardian"; +// Skills +#define D2S_SKILL_0 "Attack" +#define D2S_SKILL_1 "Kick" +#define D2S_SKILL_2 "Throw Item" +#define D2S_SKILL_3 "Unsummon" +#define D2S_SKILL_4 "Left Hand Throw" +#define D2S_SKILL_5 "Left Hand Swing" +#define D2S_SKILL_6 "Magic Arrow" +#define D2S_SKILL_7 "Fire Arrow" +#define D2S_SKILL_8 "Inner Sight" +#define D2S_SKILL_9 "Critical Strike" +#define D2S_SKILL_10 "Jab" +#define D2S_SKILL_11 "Cold Arrow" +#define D2S_SKILL_12 "Multiple Shot" +#define D2S_SKILL_13 "Dodge" +#define D2S_SKILL_14 "Power Strike" +#define D2S_SKILL_15 "Poison Javelin" +#define D2S_SKILL_16 "Exploding Arrow" +#define D2S_SKILL_17 "Slow Missiles" +#define D2S_SKILL_18 "Avoid" +#define D2S_SKILL_19 "Impale" +#define D2S_SKILL_20 "Lightning Bolt" +#define D2S_SKILL_21 "Ice Arrow" +#define D2S_SKILL_22 "Guided Arrow" +#define D2S_SKILL_23 "Penetrate" +#define D2S_SKILL_24 "Charged Strike" +#define D2S_SKILL_25 "Plague Javelin" +#define D2S_SKILL_26 "Strafe" +#define D2S_SKILL_27 "Immolation Arrow" +#define D2S_SKILL_28 "Dopplezon" +#define D2S_SKILL_29 "Evade" +#define D2S_SKILL_30 "Fend" +#define D2S_SKILL_31 "Freezing Arrow" +#define D2S_SKILL_32 "Valkyrie" +#define D2S_SKILL_33 "Pierce" +#define D2S_SKILL_34 "Lightning Strike" +#define D2S_SKILL_35 "Lightning Fury" +#define D2S_SKILL_36 "Fire Bolt" +#define D2S_SKILL_37 "Warmth" +#define D2S_SKILL_38 "Charged Bolt" +#define D2S_SKILL_39 "Ice Bolt" +#define D2S_SKILL_40 "Frozen Armor" +#define D2S_SKILL_41 "Inferno" +#define D2S_SKILL_42 "Static Field" +#define D2S_SKILL_43 "Telekinesis" +#define D2S_SKILL_44 "Frost Nova" +#define D2S_SKILL_45 "Ice Blast" +#define D2S_SKILL_46 "Blaze" +#define D2S_SKILL_47 "Fire Ball" +#define D2S_SKILL_48 "Nova" +#define D2S_SKILL_49 "Lightning" +#define D2S_SKILL_50 "Shiver Armor" +#define D2S_SKILL_51 "Fire Wall" +#define D2S_SKILL_52 "Enchant" +#define D2S_SKILL_53 "Chain Lightning" +#define D2S_SKILL_54 "Teleport" +#define D2S_SKILL_55 "Glacial Spike" +#define D2S_SKILL_56 "Meteor" +#define D2S_SKILL_57 "Thunder Storm" +#define D2S_SKILL_58 "Energy Shield" +#define D2S_SKILL_59 "Blizzard" +#define D2S_SKILL_60 "Chilling Armor" +#define D2S_SKILL_61 "Fire Mastery" +#define D2S_SKILL_62 "Hydra" +#define D2S_SKILL_63 "Lightning Mastery" +#define D2S_SKILL_64 "Frozen Orb" +#define D2S_SKILL_65 "Cold Mastery" +#define D2S_SKILL_66 "Amplify Damage" +#define D2S_SKILL_67 "Teeth" +#define D2S_SKILL_68 "Bone Armor" +#define D2S_SKILL_69 "Skeleton Mastery" +#define D2S_SKILL_70 "Raise Skeleton" +#define D2S_SKILL_71 "Dim Vision" +#define D2S_SKILL_72 "Weaken" +#define D2S_SKILL_73 "Poison Dagger" +#define D2S_SKILL_74 "Corpse Explosion" +#define D2S_SKILL_75 "Clay Golem" +#define D2S_SKILL_76 "Iron Maiden" +#define D2S_SKILL_77 "Terror" +#define D2S_SKILL_78 "Bone Wall" +#define D2S_SKILL_79 "Golem Mastery" +#define D2S_SKILL_80 "Raise Skeletal Mage" +#define D2S_SKILL_81 "Confuse" +#define D2S_SKILL_82 "Life Tap" +#define D2S_SKILL_83 "Poison Explosion" +#define D2S_SKILL_84 "Bone Spear" +#define D2S_SKILL_85 "Blood Golem" +#define D2S_SKILL_86 "Attract" +#define D2S_SKILL_87 "Decrepify" +#define D2S_SKILL_88 "Bone Prison" +#define D2S_SKILL_89 "Summon Resist" +#define D2S_SKILL_90 "Iron Golem" +#define D2S_SKILL_91 "Lower Resist" +#define D2S_SKILL_92 "Poison Nova" +#define D2S_SKILL_93 "Bone Spirit" +#define D2S_SKILL_94 "Fire Golem" +#define D2S_SKILL_95 "Revive" +#define D2S_SKILL_96 "Sacrifice" +#define D2S_SKILL_97 "Smite" +#define D2S_SKILL_98 "Might" +#define D2S_SKILL_99 "Prayer" +#define D2S_SKILL_100 "Resist Fire" +#define D2S_SKILL_101 "Holy Bolt" +#define D2S_SKILL_102 "Holy Fire" +#define D2S_SKILL_103 "Thorns" +#define D2S_SKILL_104 "Defiance" +#define D2S_SKILL_105 "Resist Cold" +#define D2S_SKILL_106 "Zeal" +#define D2S_SKILL_107 "Charge" +#define D2S_SKILL_108 "Blessed Aim" +#define D2S_SKILL_109 "Cleansing" +#define D2S_SKILL_110 "Resist Lightning" +#define D2S_SKILL_111 "Vengeance" +#define D2S_SKILL_112 "Blessed Hammer" +#define D2S_SKILL_113 "Concentration" +#define D2S_SKILL_114 "Holy Freeze" +#define D2S_SKILL_115 "Vigor" +#define D2S_SKILL_116 "Conversion" +#define D2S_SKILL_117 "Holy Shield" +#define D2S_SKILL_118 "Holy Shock" +#define D2S_SKILL_119 "Sanctuary" +#define D2S_SKILL_120 "Meditation" +#define D2S_SKILL_121 "Fist Of The Heavens" +#define D2S_SKILL_122 "Fanaticism" +#define D2S_SKILL_123 "Conviction" +#define D2S_SKILL_124 "Redemption" +#define D2S_SKILL_125 "Salvation" +#define D2S_SKILL_126 "Bash" +#define D2S_SKILL_127 "Sword mastery" +#define D2S_SKILL_128 "Axe mastery" +#define D2S_SKILL_129 "Mace mastery" +#define D2S_SKILL_130 "Howl" +#define D2S_SKILL_131 "Find Potion" +#define D2S_SKILL_132 "Leap" +#define D2S_SKILL_133 "Double Swing" +#define D2S_SKILL_134 "Pole Arm Mastery" +#define D2S_SKILL_135 "Throwing Mastery" +#define D2S_SKILL_136 "Spear Mastery" +#define D2S_SKILL_137 "Taunt" +#define D2S_SKILL_138 "Shout" +#define D2S_SKILL_139 "Stun" +#define D2S_SKILL_140 "Double Throw" +#define D2S_SKILL_141 "Increased Stamina" +#define D2S_SKILL_142 "Find Item" +#define D2S_SKILL_143 "Leap Attack" +#define D2S_SKILL_144 "Concentrate" +#define D2S_SKILL_145 "Iron Skin" +#define D2S_SKILL_146 "Battle Cry" +#define D2S_SKILL_147 "Frenzy" +#define D2S_SKILL_148 "Increased Speed" +#define D2S_SKILL_149 "Battle Orders" +#define D2S_SKILL_150 "Grim Ward" +#define D2S_SKILL_151 "Whirlwind" +#define D2S_SKILL_152 "Berserk" +#define D2S_SKILL_153 "Natural Resistance" +#define D2S_SKILL_154 "War Cry" +#define D2S_SKILL_155 "Battle Command" +#define D2S_SKILL_156 "Fire Hit" +#define D2S_SKILL_157 "Unholy Bolt" +#define D2S_SKILL_158 "Skeleton Raise" +#define D2S_SKILL_159 "Maggot Egg" +#define D2S_SKILL_160 "Shaman Fire" +#define D2S_SKILL_161 "Magottup" +#define D2S_SKILL_162 "Magottdown" +#define D2S_SKILL_163 "Magottlay" +#define D2S_SKILL_164 "Andrial Spray" +#define D2S_SKILL_165 "Jump" +#define D2S_SKILL_166 "Swarm_move" +#define D2S_SKILL_167 "Nest" +#define D2S_SKILL_168 "Quick Strike" +#define D2S_SKILL_169 "Vampire Fireball" +#define D2S_SKILL_170 "Vampire Firewall" +#define D2S_SKILL_171 "Vampire Meteor" +#define D2S_SKILL_172 "Gargoyle Trap" +#define D2S_SKILL_173 "Spider Lay" +#define D2S_SKILL_174 "Vampire Heal" +#define D2S_SKILL_175 "Vampire Raise" +#define D2S_SKILL_176 "Submerge" +#define D2S_SKILL_177 "Fetish Aura" +#define D2S_SKILL_178 "Fetish Inferno" +#define D2S_SKILL_179 "Zakarum Heal" +#define D2S_SKILL_180 "Emerge" +#define D2S_SKILL_181 "Resurrect" +#define D2S_SKILL_182 "Bestow" +#define D2S_SKILL_183 "Missile Skill1" +#define D2S_SKILL_184 "Mon Teleport" +#define D2S_SKILL_185 "Prime Lightning" +#define D2S_SKILL_186 "Prime Bolt" +#define D2S_SKILL_187 "Prime Blaze" +#define D2S_SKILL_188 "Prime Firewall" +#define D2S_SKILL_189 "Prime Spike" +#define D2S_SKILL_190 "Prime Ice Nova" +#define D2S_SKILL_191 "Prime Poison Ball" +#define D2S_SKILL_192 "Prime Poison Nova" +#define D2S_SKILL_193 "Diablight" +#define D2S_SKILL_194 "Diabcold" +#define D2S_SKILL_195 "Diabfire" +#define D2S_SKILL_196 "Fingermagespider" +#define D2S_SKILL_197 "Diabwall" +#define D2S_SKILL_198 "Diabrun" +#define D2S_SKILL_199 "Diabprison" +#define D2S_SKILL_200 "Poison Ball Trap" +#define D2S_SKILL_201 "Andy Poison Bolt" +#define D2S_SKILL_202 "Hireable Missile" +#define D2S_SKILL_203 "Desert Turret" +#define D2S_SKILL_204 "Arcane Tower" +#define D2S_SKILL_205 "Monblizzard" +#define D2S_SKILL_206 "Mosquito" +#define D2S_SKILL_207 "Cursed Ball Trap Right" +#define D2S_SKILL_208 "Cursed Ball Trap Left" +#define D2S_SKILL_209 "Monfrozenarmor" +#define D2S_SKILL_210 "Monbonearmor" +#define D2S_SKILL_211 "Monbonespirit" +#define D2S_SKILL_212 "Moncursecast" +#define D2S_SKILL_213 "Hellmeteor" +#define D2S_SKILL_214 "Regurgitatoreat" +#define D2S_SKILL_215 "Monfrenzy" +#define D2S_SKILL_216 "Queendeath" +#define D2S_SKILL_217 "Scroll Of Identify" +#define D2S_SKILL_218 "Book Of Identify" +#define D2S_SKILL_219 "Scroll Of Townportal" +#define D2S_SKILL_220 "Book Of Townportal" +#define D2S_SKILL_221 "Raven" +#define D2S_SKILL_222 "Poison Creeper" +#define D2S_SKILL_223 "Wearwolf" +#define D2S_SKILL_224 "Shape Shifting" +#define D2S_SKILL_225 "Firestorm" +#define D2S_SKILL_226 "Oak Sage" +#define D2S_SKILL_227 "Summon Spirit Wolf" +#define D2S_SKILL_228 "Wearbear" +#define D2S_SKILL_229 "Molten Boulder" +#define D2S_SKILL_230 "Arctic Blast" +#define D2S_SKILL_231 "Cycle Of Life" +#define D2S_SKILL_232 "Feral Rage" +#define D2S_SKILL_233 "Maul" +#define D2S_SKILL_234 "Eruption" +#define D2S_SKILL_235 "Cyclone Armor" +#define D2S_SKILL_236 "Heart Of Wolverine" +#define D2S_SKILL_237 "Summon Fenris" +#define D2S_SKILL_238 "Rabies" +#define D2S_SKILL_239 "Fire Claws" +#define D2S_SKILL_240 "Twister" +#define D2S_SKILL_241 "Vines" +#define D2S_SKILL_242 "Hunger" +#define D2S_SKILL_243 "Shock Wave" +#define D2S_SKILL_244 "Volcano" +#define D2S_SKILL_245 "Tornado" +#define D2S_SKILL_246 "Spirit Of Barbs" +#define D2S_SKILL_247 "Summon Grizzly" +#define D2S_SKILL_248 "Fury" +#define D2S_SKILL_249 "Armageddon" +#define D2S_SKILL_250 "Hurricane" +#define D2S_SKILL_251 "Fire Blast" +#define D2S_SKILL_252 "Claw Mastery" +#define D2S_SKILL_253 "Psychic Hammer" +#define D2S_SKILL_254 "Tiger Strike" +#define D2S_SKILL_255 "Dragon Talon" +#define D2S_SKILL_256 "Shock Field" +#define D2S_SKILL_257 "Blade Sentinel" +#define D2S_SKILL_258 "Quickness" +#define D2S_SKILL_259 "Fists Of Fire" +#define D2S_SKILL_260 "Dragon Claw" +#define D2S_SKILL_261 "Charged Bolt Sentry" +#define D2S_SKILL_262 "Wake Of Fire Sentry" +#define D2S_SKILL_263 "Weapon Block" +#define D2S_SKILL_264 "Cloak Of Shadows" +#define D2S_SKILL_265 "Cobra Strike" +#define D2S_SKILL_266 "Blade Fury" +#define D2S_SKILL_267 "Fade" +#define D2S_SKILL_268 "Shadow Warrior" +#define D2S_SKILL_269 "Claws Of Thunder" +#define D2S_SKILL_270 "Dragon Tail" +#define D2S_SKILL_271 "Lightning Sentry" +#define D2S_SKILL_272 "Inferno Sentry" +#define D2S_SKILL_273 "Mind Blast" +#define D2S_SKILL_274 "Blades Of Ice" +#define D2S_SKILL_275 "Dragon Flight" +#define D2S_SKILL_276 "Death Sentry" +#define D2S_SKILL_277 "Blade Shield" +#define D2S_SKILL_278 "Venom" +#define D2S_SKILL_279 "Shadow Master" +#define D2S_SKILL_280 "Royal Strike" +#define D2S_SKILL_281 "Wake Of Destruction Sentry" +#define D2S_SKILL_282 "Imp Inferno" +#define D2S_SKILL_283 "Imp Fireball" +#define D2S_SKILL_284 "Baal Taunt" +#define D2S_SKILL_285 "Baal Corpse Explode" +#define D2S_SKILL_286 "Baal Monster Spawn" +#define D2S_SKILL_287 "Catapult Charged Ball" +#define D2S_SKILL_288 "Catapult Spike Ball" +#define D2S_SKILL_289 "Suck Blood" +#define D2S_SKILL_290 "Cry Help" +#define D2S_SKILL_291 "Healing Vortex" +#define D2S_SKILL_292 "Teleport 2" +#define D2S_SKILL_293 "Self Resurrect" +#define D2S_SKILL_294 "Vine Attack" +#define D2S_SKILL_295 "Overseer Whip" +#define D2S_SKILL_296 "Barbs Aura" +#define D2S_SKILL_297 "Wolverine Aura" +#define D2S_SKILL_298 "Oak Sage Aura" +#define D2S_SKILL_299 "Imp Fire Missile" +#define D2S_SKILL_300 "Impregnate" +#define D2S_SKILL_301 "Siege Beast Stomp" +#define D2S_SKILL_302 "Minionspawner" +#define D2S_SKILL_303 "Catapultblizzard" +#define D2S_SKILL_304 "Catapultplague" +#define D2S_SKILL_305 "Catapultmeteor" +#define D2S_SKILL_306 "Boltsentry" +#define D2S_SKILL_307 "Corpsecycler" +#define D2S_SKILL_308 "Deathmaul" +#define D2S_SKILL_309 "Defense Curse" +#define D2S_SKILL_310 "Blood Mana" +#define D2S_SKILL_311 "Mon Inferno Sentry" +#define D2S_SKILL_312 "Mon Death Sentry" +#define D2S_SKILL_313 "Sentry Lightning" +#define D2S_SKILL_314 "Fenris Rage" +#define D2S_SKILL_315 "Baal Tentacle" +#define D2S_SKILL_316 "Baal Nova" +#define D2S_SKILL_317 "Baal Inferno" +#define D2S_SKILL_318 "Baal Cold Missiles" +#define D2S_SKILL_319 "Mega Demon Inferno" +#define D2S_SKILL_320 "Evil Hut Spawner" +#define D2S_SKILL_321 "Countess Firewall" +#define D2S_SKILL_322 "Impbolt" +#define D2S_SKILL_323 "Horror Arctic Blast" +#define D2S_SKILL_324 "Death Sentry Ltng" +#define D2S_SKILL_325 "Vinecycler" +#define D2S_SKILL_326 "Bearsmite" +#define D2S_SKILL_327 "Resurrect2" +#define D2S_SKILL_328 "Bloodlord Frenzy" +#define D2S_SKILL_329 "Baal Teleport" +#define D2S_SKILL_330 "Imp Teleport" +#define D2S_SKILL_331 "Baal Clone Teleport" +#define D2S_SKILL_332 "Zakarum Lightning" +#define D2S_SKILL_333 "Vampire Missile" +#define D2S_SKILL_334 "Mephisto Missile" +#define D2S_SKILL_335 "Doom Knight Missile" +#define D2S_SKILL_336 "Rogue Missile" +#define D2S_SKILL_337 "Hydra Missile" +#define D2S_SKILL_338 "Necro Mage Missile" +#define D2S_SKILL_339 "Monbow" +#define D2S_SKILL_340 "Monfirearrow" +#define D2S_SKILL_341 "Moncoldarrow" +#define D2S_SKILL_342 "Monexplodingarrow" +#define D2S_SKILL_343 "Monfreezingarrow" +#define D2S_SKILL_344 "Monpowerstrike" +#define D2S_SKILL_345 "Succubusbolt" +#define D2S_SKILL_346 "Mephfrostnova" +#define D2S_SKILL_347 "Monicespear" +#define D2S_SKILL_348 "Shaman Ice" +#define D2S_SKILL_349 "Diablogeddon" +#define D2S_SKILL_350 "Delerium Change" +#define D2S_SKILL_351 "Nihlathak Corpse Explosion" +#define D2S_SKILL_352 "Serpent Charge" +#define D2S_SKILL_353 "Trap Nova" +#define D2S_SKILL_354 "Unholy Boltex" +#define D2S_SKILL_355 "Shaman Fireex" +#define D2S_SKILL_356 "Imp Fire Missile Ex" + +// Mercenary data +#define D2S_MERC_NAME_0 "Aliza" +#define D2S_MERC_NAME_1 "Amplisa" +#define D2S_MERC_NAME_2 "Annor" +#define D2S_MERC_NAME_3 "Abhaya" +#define D2S_MERC_NAME_4 "Elly" +#define D2S_MERC_NAME_5 "Paige" +#define D2S_MERC_NAME_6 "Basanti" +#define D2S_MERC_NAME_7 "Blaise" +#define D2S_MERC_NAME_8 "Kyoko" +#define D2S_MERC_NAME_9 "Klaudia" +#define D2S_MERC_NAME_10 "Kundri" +#define D2S_MERC_NAME_11 "Kyle" +#define D2S_MERC_NAME_12 "Visala" +#define D2S_MERC_NAME_13 "Elexa" +#define D2S_MERC_NAME_14 "Floria" +#define D2S_MERC_NAME_15 "Fiona" +#define D2S_MERC_NAME_16 "Gwinni" +#define D2S_MERC_NAME_17 "Gaile" +#define D2S_MERC_NAME_18 "Hannah" +#define D2S_MERC_NAME_19 "Heather" +#define D2S_MERC_NAME_20 "Iantha" +#define D2S_MERC_NAME_21 "Diane" +#define D2S_MERC_NAME_22 "Isolde" +#define D2S_MERC_NAME_23 "Divo" +#define D2S_MERC_NAME_24 "Ithera" +#define D2S_MERC_NAME_25 "Itonya" +#define D2S_MERC_NAME_26 "Liene" +#define D2S_MERC_NAME_27 "Maeko" +#define D2S_MERC_NAME_28 "Mahala" +#define D2S_MERC_NAME_29 "Liaza" +#define D2S_MERC_NAME_30 "Meghan" +#define D2S_MERC_NAME_31 "Olena" +#define D2S_MERC_NAME_32 "Oriana" +#define D2S_MERC_NAME_33 "Ryann" +#define D2S_MERC_NAME_34 "Rozene" +#define D2S_MERC_NAME_35 "Raissa" +#define D2S_MERC_NAME_36 "Sharyn" +#define D2S_MERC_NAME_37 "Shikha" +#define D2S_MERC_NAME_38 "Debi" +#define D2S_MERC_NAME_39 "Tylena" +#define D2S_MERC_NAME_40 "Wendy" +#define D2S_MERC_NAME_41 "Hazade" +#define D2S_MERC_NAME_42 "Alhizeer" +#define D2S_MERC_NAME_43 "Azrael" +#define D2S_MERC_NAME_44 "Ahsab" +#define D2S_MERC_NAME_45 "Chalan" +#define D2S_MERC_NAME_46 "Haseen" +#define D2S_MERC_NAME_47 "Razan" +#define D2S_MERC_NAME_48 "Emilio" +#define D2S_MERC_NAME_49 "Pratham" +#define D2S_MERC_NAME_50 "Fazel" +#define D2S_MERC_NAME_51 "Jemali" +#define D2S_MERC_NAME_52 "Kasim" +#define D2S_MERC_NAME_53 "Gulzar" +#define D2S_MERC_NAME_54 "Mizan" +#define D2S_MERC_NAME_55 "Leharas" +#define D2S_MERC_NAME_56 "Durga" +#define D2S_MERC_NAME_57 "Neeraj" +#define D2S_MERC_NAME_58 "Ilzan" +#define D2S_MERC_NAME_59 "Zanarhi" +#define D2S_MERC_NAME_60 "Waheed" +#define D2S_MERC_NAME_61 "Vikhyat" +#define D2S_MERC_NAME_62 "Jelani" +#define D2S_MERC_NAME_63 "Barani" +#define D2S_MERC_NAME_64 "Jabari" +#define D2S_MERC_NAME_65 "Devak" +#define D2S_MERC_NAME_66 "Raldin" +#define D2S_MERC_NAME_67 "Telash" +#define D2S_MERC_NAME_68 "Ajheed" +#define D2S_MERC_NAME_69 "Narphet" +#define D2S_MERC_NAME_70 "Khaleel" +#define D2S_MERC_NAME_71 "Phaet" +#define D2S_MERC_NAME_72 "Geshef" +#define D2S_MERC_NAME_73 "Vanji" +#define D2S_MERC_NAME_74 "Haphet" +#define D2S_MERC_NAME_75 "Thadar" +#define D2S_MERC_NAME_76 "Yatiraj" +#define D2S_MERC_NAME_77 "Rhadge" +#define D2S_MERC_NAME_78 "Yashied" +#define D2S_MERC_NAME_79 "Jarulf" +#define D2S_MERC_NAME_80 "Flux" +#define D2S_MERC_NAME_81 "Scorch" +#define D2S_MERC_NAME_82 "Varaya" +#define D2S_MERC_NAME_83 "Khan" +#define D2S_MERC_NAME_84 "Klisk" +#define D2S_MERC_NAME_85 "Bors" +#define D2S_MERC_NAME_86 "Brom" +#define D2S_MERC_NAME_87 "Wiglaf" +#define D2S_MERC_NAME_88 "Hrothgar" +#define D2S_MERC_NAME_89 "Scyld" +#define D2S_MERC_NAME_90 "Healfdane" +#define D2S_MERC_NAME_91 "Heorogar" +#define D2S_MERC_NAME_92 "Halgaunt" +#define D2S_MERC_NAME_93 "Hygelac" +#define D2S_MERC_NAME_94 "Egtheow" +#define D2S_MERC_NAME_95 "Bohdan" +#define D2S_MERC_NAME_96 "Wulfgar" +#define D2S_MERC_NAME_97 "Hild" +#define D2S_MERC_NAME_98 "Heatholaf" +#define D2S_MERC_NAME_99 "Weder" +#define D2S_MERC_NAME_100 "Vikhyat" +#define D2S_MERC_NAME_101 "Unferth" +#define D2S_MERC_NAME_102 "Sigemund" +#define D2S_MERC_NAME_103 "Heremod" +#define D2S_MERC_NAME_104 "Hengest" +#define D2S_MERC_NAME_105 "Folcwald" +#define D2S_MERC_NAME_106 "Frisian" +#define D2S_MERC_NAME_107 "Hnaef" +#define D2S_MERC_NAME_108 "Guthlaf" +#define D2S_MERC_NAME_109 "Oslaf" +#define D2S_MERC_NAME_110 "Yrmenlaf" +#define D2S_MERC_NAME_111 "Garmund" +#define D2S_MERC_NAME_112 "Freawaru" +#define D2S_MERC_NAME_113 "Eadgils" +#define D2S_MERC_NAME_114 "Onela" +#define D2S_MERC_NAME_115 "Damien" +#define D2S_MERC_NAME_116 "Erfor" +#define D2S_MERC_NAME_117 "Weohstan" +#define D2S_MERC_NAME_118 "Wulf" +#define D2S_MERC_NAME_119 "Bulwye" +#define D2S_MERC_NAME_120 "Lief" +#define D2S_MERC_NAME_121 "Magnus" +#define D2S_MERC_NAME_122 "Klatu" +#define D2S_MERC_NAME_123 "Drus" +#define D2S_MERC_NAME_124 "Hoku" +#define D2S_MERC_NAME_125 "Kord" +#define D2S_MERC_NAME_126 "Uther" +#define D2S_MERC_NAME_127 "Ip" +#define D2S_MERC_NAME_128 "Ulf" +#define D2S_MERC_NAME_129 "Tharr" +#define D2S_MERC_NAME_130 "Kaelim" +#define D2S_MERC_NAME_131 "Ulric" +#define D2S_MERC_NAME_132 "Alaric" +#define D2S_MERC_NAME_133 "Ethelred" +#define D2S_MERC_NAME_134 "Caden" +#define D2S_MERC_NAME_135 "Elgifu" +#define D2S_MERC_NAME_136 "Tostig" +#define D2S_MERC_NAME_137 "Alcuin" +#define D2S_MERC_NAME_138 "Emund" +#define D2S_MERC_NAME_139 "Sigurd" +#define D2S_MERC_NAME_140 "Gorm" +#define D2S_MERC_NAME_141 "Hollis" +#define D2S_MERC_NAME_142 "Ragnar" +#define D2S_MERC_NAME_143 "Torkel" +#define D2S_MERC_NAME_144 "Wulfstan" +#define D2S_MERC_NAME_145 "Alban" +#define D2S_MERC_NAME_146 "Barloc" +#define D2S_MERC_NAME_147 "Bill" +#define D2S_MERC_NAME_148 "Theodoric" + +#define D2S_MERC_ID_0 "Rogue Scout Fire Arrow [Normal" +#define D2S_MERC_ID_1 "Rogue Scout Cold Arrow [Normal" +#define D2S_MERC_ID_2 "Rogue Scout Fire Arrow [Nightmare]" +#define D2S_MERC_ID_3 "Rogue Scout Cold Arrow [Nightmare]" +#define D2S_MERC_ID_4 "Rogue Scout Fire Arrow [Hell]" +#define D2S_MERC_ID_5 "Rogue Scout Cold Arrow [Hell]" +#define D2S_MERC_ID_6 "Desert Mercenary Combat [Normal]" +#define D2S_MERC_ID_7 "Desert Mercenary Defensive [Normal]" +#define D2S_MERC_ID_8 "Desert Mercenary Offensive [Normal]" +#define D2S_MERC_ID_9 "Desert Mercenary Combat [Nightmare]" +#define D2S_MERC_ID_10 "Desert Mercenary Defensive [Nightmare]" +#define D2S_MERC_ID_11 "Desert Mercenary Offensive [Nightmare]" +#define D2S_MERC_ID_12 "Desert Mercenary Combat [Hell]" +#define D2S_MERC_ID_13 "Desert Mercenary Defensive [Hell]" +#define D2S_MERC_ID_14 "Desert Mercenary Offensive [Hell]" +#define D2S_MERC_ID_15 "Eastern Sorceror Fire Spells [Normal]" +#define D2S_MERC_ID_16 "Eastern Sorceror Cold Spells [Normal]" +#define D2S_MERC_ID_17 "Eastern Sorceror Lightning Spells [Normal]" +#define D2S_MERC_ID_18 "Eastern Sorceror Fire Spells [Nightmare]" +#define D2S_MERC_ID_19 "Eastern Sorceror Cold Spells [Nightmare]" +#define D2S_MERC_ID_20 "Eastern Sorceror Lightning Spells [Nightmare]" +#define D2S_MERC_ID_21 "Eastern Sorceror Fire Spells [Hell]" +#define D2S_MERC_ID_22 "Eastern Sorceror Cold Spells [Hell]" +#define D2S_MERC_ID_23 "Eastern Sorceror Lightning Spells [Hell]" +#define D2S_MERC_ID_24 "Barbarian [Normal]" +#define D2S_MERC_ID_25 "Barbarian [Normal]" +#define D2S_MERC_ID_26 "Barbarian [Nightmare]" +#define D2S_MERC_ID_27 "Barbarian [Nightmare]" +#define D2S_MERC_ID_28 "Barbarian [Hell]" +#define D2S_MERC_ID_29 "Barbarian [Hell]" + #endif \ No newline at end of file -- libgit2 0.22.2