d2mercs.h 4.34 KB
#ifndef D2MERCS_H
#define D2MERCS_H

#include "d2char.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
typedef enum D2S_MERCTYPE {
    D2S_MERCTYPE_UNKNOWN = -1,
    D2S_MERCTYPE_ROGUE = 0,
    D2S_MERCTYPE_DESERT = 41,
    D2S_MERCTYPE_SORCEROR = 62,
    D2S_MERCTYPE_BARBARIAN = 82
} D2S_MERCTYPE;

typedef enum D2S_MERCSUBTYPE {
    D2S_MERCSUBTYPE_NONE = 0,
    D2S_MERCSUBTYPE_FIRE_ARROW = 1,
    D2S_MERCSUBTYPE_COLD_ARROW = 2,
    D2S_MERCSUBTYPE_COMBAT = 3,
    D2S_MERCSUBTYPE_DEFENSIVE = 4,
    D2S_MERCSUBTYPE_OFFENSIVE = 5,
    D2S_MERCSUBTYPE_FIRE = 6,
    D2S_MERCSUBTYPE_COLD = 7,
    D2S_MERCSUBTYPE_LIGHTNING = 8
} D2S_MERCSUBTYPE;

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
};

typedef struct D2Merc {
    const char* name;
    D2S_MERCTYPE type;
    D2S_MERCSUBTYPE subtype;
    D2S_DIFFICULTY difficulty;
} D2Merc;

D2Merc getMerc(D2CharHeader* c);
int setMerc(D2CharHeader* c, D2Merc* mercData);

#endif