Commit 27780d019ce84a8681f92be8113a0680ec84b6d3

Authored by Imanol-Mikel Barba Sabariego
1 parent 1e4e1700

WIP

d2char.c
... ... @@ -35,4 +35,95 @@ int isExpansion(D2CharHeader* c) {
35 35  
36 36 int isLadder(D2CharHeader* c) {
37 37 return c->charStatus & D2S_CHARSTATUS_LADDER;
  38 +}
  39 +
  40 +int getCurrentAct(D2CharHeader* c) {
  41 + if(isExpansion(c)) {
  42 + return c->charProgress % 5;
  43 + } else {
  44 + return c->charProgress % 4;
  45 + }
  46 +}
  47 +
  48 +int isFemale(D2CharHeader* c) {
  49 + return (c->charClass == D2S_CHARCLASS_AMAZON ||
  50 + c->charClass == D2S_CHARCLASS_ASSASSIN ||
  51 + c->charClass == D2S_CHARCLASS_SORCERESS);
  52 +}
  53 +
  54 +// Returns static string from library memory, no need to free
  55 +const char* getCharacterTitle(D2CharHeader* c) {
  56 + int tier;
  57 + if(isExpansion(c)) {
  58 + // Expansion
  59 + tier = c->charProgress / 5;
  60 + if(isHardcore(c)) {
  61 + // Expansion Hardcore
  62 + switch(tier) {
  63 + case 0:
  64 + return D2S_CHARPROGRESS_TIER0_NAME;
  65 + break;
  66 + case 1:
  67 + return D2S_CHARPROGRESS_EXPANSION_TIER1_NAME_HARDCORE;
  68 + break;
  69 + case 2:
  70 + return D2S_CHARPROGRESS_EXPANSION_TIER2_NAME_HARDCORE;
  71 + break;
  72 + case 3:
  73 + return D2S_CHARPROGRESS_EXPANSION_TIER3_NAME_HARDCORE;
  74 + break;
  75 + }
  76 + } else {
  77 + // Expansion Softcore
  78 + switch(tier) {
  79 + case 0:
  80 + return D2S_CHARPROGRESS_TIER0_NAME;
  81 + break;
  82 + case 1:
  83 + return D2S_CHARPROGRESS_EXPANSION_TIER1_NAME;
  84 + break;
  85 + case 2:
  86 + return D2S_CHARPROGRESS_EXPANSION_TIER2_NAME;
  87 + break;
  88 + case 3:
  89 + return isFemale(c) ? D2S_CHARPROGRESS_EXPANSION_TIER3_NAME_F : D2S_CHARPROGRESS_EXPANSION_TIER3_NAME_M;
  90 + break;
  91 + }
  92 + }
  93 + } else {
  94 + // Classic
  95 + if(isHardcore(c)) {
  96 + // Classic Hardcore
  97 + switch(tier) {
  98 + case 0:
  99 + return D2S_CHARPROGRESS_TIER0_NAME;
  100 + break;
  101 + case 1:
  102 + return isFemale(c) ? D2S_CHARPROGRESS_CLASSIC_TIER1_NAME_HARDCORE_F : D2S_CHARPROGRESS_CLASSIC_TIER1_NAME_HARDCORE_M;
  103 + break;
  104 + case 2:
  105 + return isFemale(c) ? D2S_CHARPROGRESS_CLASSIC_TIER2_NAME_HARDCORE_F : D2S_CHARPROGRESS_CLASSIC_TIER2_NAME_HARDCORE_M;
  106 + break;
  107 + case 3:
  108 + return isFemale(c) ? D2S_CHARPROGRESS_CLASSIC_TIER3_NAME_HARDCORE_F : D2S_CHARPROGRESS_CLASSIC_TIER3_NAME_HARDCORE_M;
  109 + break;
  110 + }
  111 + } else {
  112 + // Classic Softcore
  113 + switch(tier) {
  114 + case 0:
  115 + return D2S_CHARPROGRESS_TIER0_NAME;
  116 + break;
  117 + case 1:
  118 + return isFemale(c) ? D2S_CHARPROGRESS_CLASSIC_TIER1_NAME_F : D2S_CHARPROGRESS_CLASSIC_TIER1_NAME_M;
  119 + break;
  120 + case 2:
  121 + return isFemale(c) ? D2S_CHARPROGRESS_CLASSIC_TIER2_NAME_F : D2S_CHARPROGRESS_CLASSIC_TIER2_NAME_M;
  122 + break;
  123 + case 3:
  124 + return isFemale(c) ? D2S_CHARPROGRESS_CLASSIC_TIER3_NAME_F : D2S_CHARPROGRESS_CLASSIC_TIER3_NAME_M;
  125 + break;
  126 + }
  127 + }
  128 + }
38 129 }
39 130 \ No newline at end of file
... ...
d2char.h
... ... @@ -21,15 +21,6 @@
21 21 #define D2S_CHARSTATUS_EXPANSION 0x20
22 22 #define D2S_CHARSTATUS_LADDER 0x40
23 23  
24   -#define D2S_CHARPROGRESS_CLASSIC_TIER0 3
25   -#define D2S_CHARPROGRESS_CLASSIC_TIER1
26   -#define D2S_CHARPROGRESS_CLASSIC_TIER2
27   -#define D2S_CHARPROGRESS_CLASSIC_TIER3
28   -#define D2S_CHARPROGRESS_EXPANSION_TIER0
29   -#define D2S_CHARPROGRESS_EXPANSION_TIER1
30   -#define D2S_CHARPROGRESS_EXPANSION_TIER2
31   -#define D2S_CHARPROGRESS_EXPANSION_TIER3
32   -
33 24 enum D2Version {
34 25 VER_106 = 71,
35 26 VER_107 = 87,
... ... @@ -49,6 +40,14 @@ enum D2CharClass {
49 40 D2S_CHARCLASS_ASSASSIN = 0x06
50 41 };
51 42  
  43 +enum D2Acts {
  44 + D2S_ACT1 = 0,
  45 + D2S_ACT2 = 1,
  46 + D2S_ACT3 = 2,
  47 + D2S_ACT4 = 3,
  48 + D2S_ACT5 = 4
  49 +};
  50 +
52 51 typedef struct __attribute__((packed)){
53 52 uint32_t signature;
54 53 uint32_t versionID;
... ...
d2strings.h
1 1 #ifndef D2STRINGS_H
2 2 #define D2STRINGS_H
3 3  
4   -const char* D2S_CHARPROGRESS_CLASSIC_TIER0_NAME_M = "";
  4 +const char* D2S_CHARPROGRESS_TIER0_NAME = "";
5 5 const char* D2S_CHARPROGRESS_CLASSIC_TIER1_NAME_M = "Sir";
6 6 const char* D2S_CHARPROGRESS_CLASSIC_TIER2_NAME_M = "Lord";
7 7 const char* D2S_CHARPROGRESS_CLASSIC_TIER3_NAME_M = "Baron";
8   -const char* D2S_CHARPROGRESS_CLASSIC_TIER0_NAME_HARDCORE_M = "";
9 8 const char* D2S_CHARPROGRESS_CLASSIC_TIER1_NAME_HARDCORE_M = "Count";
10 9 const char* D2S_CHARPROGRESS_CLASSIC_TIER2_NAME_HARDCORE_M = "Duke";
11 10 const char* D2S_CHARPROGRESS_CLASSIC_TIER3_NAME_HARDCORE_M = "King";
12   -const char* D2S_CHARPROGRESS_CLASSIC_TIER0_NAME_F = "";
13 11 const char* D2S_CHARPROGRESS_CLASSIC_TIER1_NAME_F = "Dame";
14 12 const char* D2S_CHARPROGRESS_CLASSIC_TIER2_NAME_F = "Lady";
15 13 const char* D2S_CHARPROGRESS_CLASSIC_TIER3_NAME_F = "Baroness";
16   -const char* D2S_CHARPROGRESS_CLASSIC_TIER0_NAME_HARDCORE_F = "";
17 14 const char* D2S_CHARPROGRESS_CLASSIC_TIER1_NAME_HARDCORE_F = "Countess";
18 15 const char* D2S_CHARPROGRESS_CLASSIC_TIER2_NAME_HARDCORE_F = "Duchess";
19 16 const char* D2S_CHARPROGRESS_CLASSIC_TIER3_NAME_HARDCORE_F = "Queen";
20 17  
21   -const char* D2S_CHARPROGRESS_EXPANSION_TIER0_NAME = "";
22 18 const char* D2S_CHARPROGRESS_EXPANSION_TIER1_NAME = "Slayer";
23 19 const char* D2S_CHARPROGRESS_EXPANSION_TIER2_NAME = "Champion";
24 20 const char* D2S_CHARPROGRESS_EXPANSION_TIER3_NAME_M = "Patriarch";
25 21 const char* D2S_CHARPROGRESS_EXPANSION_TIER3_NAME_F = "Matriarch";
26   -const char* D2S_CHARPROGRESS_EXPANSION_TIER0_NAME_HARDCORE = "";
27 22 const char* D2S_CHARPROGRESS_EXPANSION_TIER1_NAME_HARDCORE = "Destroyer";
28 23 const char* D2S_CHARPROGRESS_EXPANSION_TIER2_NAME_HARDCORE = "Conqueror";
29 24 const char* D2S_CHARPROGRESS_EXPANSION_TIER3_NAME_HARDCORE = "Guardian";
... ...