Commit f3914c1253d2137c82a0bb9b08b6f407f2933dc3
1 parent
86f65f02
Quests WIP
Showing
4 changed files
with
1006 additions
and
237 deletions
d2char.h
@@ -58,6 +58,7 @@ enum D2S_ACT { | @@ -58,6 +58,7 @@ enum D2S_ACT { | ||
58 | D2S_ACT5 | 58 | D2S_ACT5 |
59 | }; | 59 | }; |
60 | 60 | ||
61 | +// TODO: Add file hex offsets for each field | ||
61 | typedef struct __attribute__((packed)){ | 62 | typedef struct __attribute__((packed)){ |
62 | uint32_t signature; | 63 | uint32_t signature; |
63 | uint32_t versionID; | 64 | uint32_t versionID; |
@@ -74,7 +75,7 @@ typedef struct __attribute__((packed)){ | @@ -74,7 +75,7 @@ typedef struct __attribute__((packed)){ | ||
74 | uint32_t unknown3; // TODO | 75 | uint32_t unknown3; // TODO |
75 | uint32_t lastPlayed; | 76 | uint32_t lastPlayed; |
76 | uint32_t unknown4; // TODO | 77 | uint32_t unknown4; // TODO |
77 | - uint8_t hotkeys[D2S_HOTKEYS_LENGTH]; // Not implemented. (Yet) | 78 | + uint8_t hotkeys[D2S_HOTKEYS_LENGTH]; // TODO: Not implemented |
78 | uint32_t leftAbility; | 79 | uint32_t leftAbility; |
79 | uint32_t rightAbility; | 80 | uint32_t rightAbility; |
80 | uint32_t leftAbilityAlt; // Left ability when alternative weapon set (II) is selected | 81 | uint32_t leftAbilityAlt; // Left ability when alternative weapon set (II) is selected |
@@ -91,7 +92,7 @@ typedef struct __attribute__((packed)){ | @@ -91,7 +92,7 @@ typedef struct __attribute__((packed)){ | ||
91 | uint8_t unknown6[144]; // TODO | 92 | uint8_t unknown6[144]; // TODO |
92 | D2QuestData questData; | 93 | D2QuestData questData; |
93 | uint8_t waypointData[D2S_WAYPOINTS_LENGTH]; | 94 | uint8_t waypointData[D2S_WAYPOINTS_LENGTH]; |
94 | - uint8_t NPCIntroductions[D2S_NPCDATA_LENGTH]; // Not implemented. (Yet) | 95 | + uint8_t NPCIntroductions[D2S_NPCDATA_LENGTH]; // TODO: Not implemented |
95 | } D2CharHeader; | 96 | } D2CharHeader; |
96 | 97 | ||
97 | uint32_t calcChecksum(D2CharHeader* c, void* charData); | 98 | uint32_t calcChecksum(D2CharHeader* c, void* charData); |
d2quest.c
1 | #include "d2char.h" | 1 | #include "d2char.h" |
2 | #include "d2quest.h" | 2 | #include "d2quest.h" |
3 | 3 | ||
4 | -void getQuestData_DenOfEvil(D2QuestData* d, int difficulty, void* dest) { | ||
5 | - uint16_t questData = d->quests[difficulty].actData[D2S_ACT1].questCheckpoints[0]; | ||
6 | - | ||
7 | -} | ||
8 | - | ||
9 | -void getQuestData_SisterBurialGrounds(D2QuestData* d, int difficulty, void* dest) { | ||
10 | - | ||
11 | -} | ||
12 | - | ||
13 | -void getQuestData_SearchForCain(D2QuestData* d, int difficulty, void* dest) { | ||
14 | - | ||
15 | -} | ||
16 | - | ||
17 | -void getQuestData_ForgottenTower(D2QuestData* d, int difficulty, void* dest) { | ||
18 | - | ||
19 | -} | ||
20 | - | ||
21 | -void getQuestData_ToolsOfTheTrade(D2QuestData* d, int difficulty, void* dest) { | ||
22 | - | ||
23 | -} | ||
24 | - | ||
25 | -void getQuestData_SistersToTheSlaughter(D2QuestData* d, int difficulty, void* dest) { | ||
26 | - | ||
27 | -} | ||
28 | - | ||
29 | -void getQuestData_RadamentLair(D2QuestData* d, int difficulty, void* dest) { | ||
30 | - | ||
31 | -} | ||
32 | - | ||
33 | -void getQuestData_HoradricStaff(D2QuestData* d, int difficulty, void* dest) { | ||
34 | - | ||
35 | -} | ||
36 | - | ||
37 | -void getQuestData_TaintedSun(D2QuestData* d, int difficulty, void* dest) { | ||
38 | - | ||
39 | -} | ||
40 | - | ||
41 | -void getQuestData_ArcaneSanctuary(D2QuestData* d, int difficulty, void* dest) { | ||
42 | - | ||
43 | -} | ||
44 | - | ||
45 | -void getQuestData_Summoner(D2QuestData* d, int difficulty, void* dest) { | ||
46 | - | ||
47 | -} | ||
48 | - | ||
49 | -void getQuestData_SevenTombs(D2QuestData* d, int difficulty, void* dest) { | ||
50 | - | ||
51 | -} | ||
52 | - | ||
53 | -void getQuestData_GoldenBird(D2QuestData* d, int difficulty, void* dest) { | ||
54 | - | ||
55 | -} | ||
56 | - | ||
57 | -void getQuestData_BladeOfTheOldReligion(D2QuestData* d, int difficulty, void* dest) { | ||
58 | - | ||
59 | -} | ||
60 | - | ||
61 | -void getQuestData_KhalimWill(D2QuestData* d, int difficulty, void* dest) { | ||
62 | - | ||
63 | -} | ||
64 | - | ||
65 | -void getQuestData_LamEsenTome(D2QuestData* d, int difficulty, void* dest) { | ||
66 | - | ||
67 | -} | ||
68 | - | ||
69 | -void getQuestData_BlackenedTemple(D2QuestData* d, int difficulty, void* dest) { | ||
70 | - | ||
71 | -} | ||
72 | - | ||
73 | -void getQuestData_Guardian(D2QuestData* d, int difficulty, void* dest) { | ||
74 | - | 4 | +void getCheckpointDescriptions(unsigned int quest, const char* *descriptions[16]) { |
5 | + memcpy(descriptions,(&checkpointDescriptions) + (quest * 16 * sizeof(const char*)), 16 * sizeof(const char*)); | ||
6 | +} | ||
7 | + | ||
8 | +uint16_t getQuestStatus(D2QuestData* d, unsigned int quest, unsigned int difficulty) { | ||
9 | + if(quest >= D2S_QUEST_DEN_OF_EVIL && quest <= D2S_QUEST_SISTERS_TO_THE_SLAUGHTER) { | ||
10 | + return d->quests[difficulty].actData[D2S_ACT1].questCheckpoints[quest]; | ||
11 | + } else if(quest >= D2S_QUEST_RADAMENT_LAIR && quest <= D2S_QUEST_SEVEN_TOMBS) { | ||
12 | + return d->quests[difficulty].actData[D2S_ACT2].questCheckpoints[quest - D2S_QUEST_RADAMENT_LAIR]; | ||
13 | + } else if(quest >= D2S_QUEST_GOLDEN_BIRD && quest <= D2S_QUEST_GUARDIAN) { | ||
14 | + return d->quests[difficulty].actData[D2S_ACT3].questCheckpoints[quest - D2S_QUEST_GOLDEN_BIRD]; | ||
15 | + } else if(quest >= D2S_QUEST_FALLEN_ANGEL && quest <= D2S_QUEST_TERROR_END) { | ||
16 | + return d->quests[difficulty].actData[D2S_ACT4].questCheckpoints[quest - D2S_QUEST_FALLEN_ANGEL]; | ||
17 | + } else if(quest >= D2S_QUEST_SIEGE_ON_HARROGATH && quest <= D2S_QUEST_EVE_OF_DESTRUCTION) { | ||
18 | + return d->quests[difficulty].expansionAct.questCheckpoints[quest - D2S_QUEST_SIEGE_ON_HARROGATH]; | ||
19 | + } | ||
20 | + return D2S_QUEST_UNKNOWN; | ||
75 | } | 21 | } |
76 | 22 | ||
77 | -void getQuestData_FallenAngel(D2QuestData* d, int difficulty, void* dest) { | ||
78 | - | 23 | +int isQuestStarted(D2QuestData* d, unsigned int quest, unsigned int difficulty) { |
24 | + // TODO | ||
25 | + return 0; | ||
79 | } | 26 | } |
80 | 27 | ||
81 | -void getQuestData_Hellforge(D2QuestData* d, int difficulty, void* dest) { | ||
82 | - | 28 | +int isQuestRewardCollected(D2QuestData* d, unsigned int quest, unsigned int difficulty) { |
29 | + // TODO | ||
30 | + return 0; | ||
83 | } | 31 | } |
84 | 32 | ||
85 | -void getQuestData_TerrorEnd(D2QuestData* d, int difficulty, void* dest) { | ||
86 | - | 33 | +int isQuestCompleted(D2QuestData* d, unsigned int quest, unsigned int difficulty) { |
34 | + // TODO | ||
35 | + return 0; | ||
87 | } | 36 | } |
88 | 37 | ||
89 | -void getQuestData_SiegeOnHarrogath(D2QuestData* d, int difficulty, void* dest) { | ||
90 | - | ||
91 | -} | 38 | +void setQuestStarted(D2QuestData* d, unsigned int quest, unsigned int difficulty, int bool) { |
39 | + // To reset the quest, just zero out the whole thing | ||
40 | + // To set as started, just set the 2nd bit and clear the rest | ||
92 | 41 | ||
93 | -void getQuestData_RescueOnMountArreat(D2QuestData* d, int difficulty, void* dest) { | ||
94 | - | 42 | + // TODO |
95 | } | 43 | } |
96 | 44 | ||
97 | -void getQuestData_PrisonOfIce(D2QuestData* d, int difficulty, void* dest) { | ||
98 | - | ||
99 | -} | ||
100 | - | ||
101 | -void getQuestData_BetrayalOfHarrogath(D2QuestData* d, int difficulty, void* dest) { | ||
102 | - | ||
103 | -} | 45 | +void setQuestRewardCollected(D2QuestData* d, unsigned int quest, unsigned int difficulty, int bool) { |
46 | + // To reset, just clear bit 0 and set bit 1. | ||
47 | + // Do the inverse to set reward as collected (but why whould you tho???) | ||
104 | 48 | ||
105 | -void getQuestData_RiteOfPassage(D2QuestData* d, int difficulty, void* dest) { | ||
106 | - | 49 | + // TODO |
107 | } | 50 | } |
108 | 51 | ||
109 | -void getQuestData_EveOfDestruction(D2QuestData* d, int difficulty, void* dest) { | 52 | +void setQuestCompleted(D2QuestData* d, unsigned int quest, unsigned int difficulty, int bool) { |
53 | + // To reset, clear bit 0, bit 12 and bit 13 (13 is kinda optional since it will be cleared by | ||
54 | + // the game when loading the savegame). | ||
55 | + // To set as completed, just set bit 0 and bit 12 and clear bit 1 | ||
110 | 56 | ||
57 | + // TODO | ||
111 | } | 58 | } |
112 | 59 | ||
113 | -void(*questFunc[])(D2QuestData*,int,void*) = { | ||
114 | - &getQuestData_DenOfEvil, | ||
115 | - &getQuestData_SisterBurialGrounds, | ||
116 | - &getQuestData_SearchForCain, | ||
117 | - &getQuestData_ForgottenTower, | ||
118 | - &getQuestData_ToolsOfTheTrade, | ||
119 | - &getQuestData_SistersToTheSlaughter, | ||
120 | - &getQuestData_RadamentLair, | ||
121 | - &getQuestData_HoradricStaff, | ||
122 | - &getQuestData_TaintedSun, | ||
123 | - &getQuestData_ArcaneSanctuary, | ||
124 | - &getQuestData_Summoner, | ||
125 | - &getQuestData_SevenTombs, | ||
126 | - &getQuestData_GoldenBird, | ||
127 | - &getQuestData_BladeOfTheOldReligion, | ||
128 | - &getQuestData_KhalimWill, | ||
129 | - &getQuestData_LamEsenTome, | ||
130 | - &getQuestData_BlackenedTemple, | ||
131 | - &getQuestData_Guardian, | ||
132 | - &getQuestData_FallenAngel, | ||
133 | - &getQuestData_Hellforge, | ||
134 | - &getQuestData_TerrorEnd, | ||
135 | - &getQuestData_SiegeOnHarrogath, | ||
136 | - &getQuestData_RescueOnMountArreat, | ||
137 | - &getQuestData_PrisonOfIce, | ||
138 | - &getQuestData_BetrayalOfHarrogath, | ||
139 | - &getQuestData_RiteOfPassage, | ||
140 | - &getQuestData_EveOfDestruction | ||
141 | -}; | ||
142 | - | ||
143 | -int getQuestStatus(D2QuestData* d, unsigned int quest, unsigned int difficulty, void* dest) { | ||
144 | - if(quest >= D2S_QUEST_DEN_OF_EVIL && quest <= D2S_QUEST_EVE_OF_DESTRUCTION) { | ||
145 | - questFunc[quest](d,difficulty,dest); | 60 | +int getSpecialQuestStatus(D2QuestData* d, unsigned int specialQuestState, unsigned int difficulty) { |
61 | + int ret = 0; | ||
62 | + switch(specialQuestState) { | ||
63 | + case D2S_SPECIALQUEST_AKARA_RESPEC: | ||
64 | + ret = d->quests[difficulty].akaraRespecData & D2S_QUEST_STATUS_REWARD_AVAILABLE; | ||
65 | + break; | ||
66 | + } | ||
67 | + return ret; | ||
68 | +} | ||
69 | + | ||
70 | +void setSpecialQuestStatus(D2QuestData* d, unsigned int specialQuestState, unsigned int difficulty, int bool) { | ||
71 | + switch(specialQuestState) { | ||
72 | + case D2S_SPECIALQUEST_AKARA_RESPEC: | ||
73 | + if(bool) { | ||
74 | + // This operation only makes sense if the quest is actually completed, otherwise ignore request | ||
75 | + if(isQuestCompleted(d,D2S_QUEST_DEN_OF_EVIL,difficulty)) { | ||
76 | + d->quests[difficulty].akaraRespecData = 0x8001; | ||
77 | + } | ||
78 | + } else { | ||
79 | + // See above comment | ||
80 | + if(isQuestCompleted(d,D2S_QUEST_DEN_OF_EVIL,difficulty)) { | ||
81 | + d->quests[difficulty].akaraRespecData = 0x2002; | ||
82 | + } | ||
83 | + } | ||
84 | + break; | ||
146 | } | 85 | } |
147 | - return D2S_QUEST_UNKNOWN; | ||
148 | } | 86 | } |
149 | \ No newline at end of file | 87 | \ No newline at end of file |
d2quest.h
@@ -3,6 +3,8 @@ | @@ -3,6 +3,8 @@ | ||
3 | 3 | ||
4 | #include <stdint.h> | 4 | #include <stdint.h> |
5 | 5 | ||
6 | +#include "d2strings.h" | ||
7 | + | ||
6 | #define D2S_QUESTDATA_HEADER_LENGTH 4 | 8 | #define D2S_QUESTDATA_HEADER_LENGTH 4 |
7 | 9 | ||
8 | enum D2S_QUEST { | 10 | enum D2S_QUEST { |
@@ -36,113 +38,452 @@ enum D2S_QUEST { | @@ -36,113 +38,452 @@ enum D2S_QUEST { | ||
36 | D2S_QUEST_EVE_OF_DESTRUCTION | 38 | D2S_QUEST_EVE_OF_DESTRUCTION |
37 | }; | 39 | }; |
38 | 40 | ||
39 | -typedef struct { | ||
40 | - int enteredDen; | ||
41 | -} D2S_QUEST_DEN_OF_EVIL_struct; | ||
42 | - | ||
43 | -typedef struct { | ||
44 | - int enteredDen; | ||
45 | -} D2S_QUEST_SISTER_BURIAL_GROUNDS_struct; | ||
46 | - | ||
47 | -typedef struct { | ||
48 | - int enteredDen; | ||
49 | -} D2S_QUEST_SEARCH_FOR_CAIN_struct; | ||
50 | - | ||
51 | -typedef struct { | ||
52 | - int enteredDen; | ||
53 | -} D2S_QUEST_FORGOTTEN_TOWER_struct; | ||
54 | - | ||
55 | -typedef struct { | ||
56 | - int enteredDen; | ||
57 | -} D2S_QUEST_TOOLS_OF_THE_TRADE_struct; | ||
58 | - | ||
59 | -typedef struct { | ||
60 | - int enteredDen; | ||
61 | -} D2S_QUEST_SISTERS_TO_THE_SLAUGHTER_struct; | ||
62 | - | ||
63 | -typedef struct { | ||
64 | - int enteredDen; | ||
65 | -} D2S_QUEST_RADAMENT_LAIR_struct; | ||
66 | - | ||
67 | -typedef struct { | ||
68 | - int enteredDen; | ||
69 | -} D2S_QUEST_HORADRIC_STAFF_struct; | ||
70 | - | ||
71 | -typedef struct { | ||
72 | - int enteredDen; | ||
73 | -} D2S_QUEST_TAINTED_SUN_struct; | ||
74 | - | ||
75 | -typedef struct { | ||
76 | - int enteredDen; | ||
77 | -} D2S_QUEST_ARCANE_SANCTUARY_struct; | ||
78 | - | ||
79 | -typedef struct { | ||
80 | - int enteredDen; | ||
81 | -} D2S_QUEST_SUMMONER_struct; | ||
82 | - | ||
83 | -typedef struct { | ||
84 | - int enteredDen; | ||
85 | -} D2S_QUEST_SEVEN_TOMBS_struct; | ||
86 | - | ||
87 | -typedef struct { | ||
88 | - int enteredDen; | ||
89 | -} D2S_QUEST_GOLDEN_BIRD_struct; | ||
90 | - | ||
91 | -typedef struct { | ||
92 | - int enteredDen; | ||
93 | -} D2S_QUEST_BLADE_OF_THE_OLD_RELIGION_struct; | ||
94 | - | ||
95 | -typedef struct { | ||
96 | - int enteredDen; | ||
97 | -} D2S_QUEST_KHALIM_WILL_struct; | ||
98 | - | ||
99 | -typedef struct { | ||
100 | - int enteredDen; | ||
101 | -} D2S_QUEST_LAM_ESEN_TOME_struct; | ||
102 | - | ||
103 | -typedef struct { | ||
104 | - int enteredDen; | ||
105 | -} D2S_QUEST_BLACKENED_TEMPLE_struct; | ||
106 | - | ||
107 | -typedef struct { | ||
108 | - int enteredDen; | ||
109 | -} D2S_QUEST_GUARDIAN_struct; | ||
110 | - | ||
111 | -typedef struct { | ||
112 | - int enteredDen; | ||
113 | -} D2S_QUEST_FALLEN_ANGEL_struct; | ||
114 | - | ||
115 | -typedef struct { | ||
116 | - int enteredDen; | ||
117 | -} D2S_QUEST_HELLFORGE_struct; | ||
118 | - | ||
119 | -typedef struct { | ||
120 | - int enteredDen; | ||
121 | -} D2S_QUEST_TERROR_END_struct; | ||
122 | - | ||
123 | -typedef struct { | ||
124 | - int enteredDen; | ||
125 | -} D2S_QUEST_SIEGE_ON_HARROGATH_struct; | ||
126 | - | ||
127 | -typedef struct { | ||
128 | - int enteredDen; | ||
129 | -} D2S_QUEST_RESCUE_ON_MOUNT_ARREAT_struct; | ||
130 | - | ||
131 | -typedef struct { | ||
132 | - int enteredDen; | ||
133 | -} D2S_QUEST_PRISON_OF_ICE_struct; | ||
134 | - | ||
135 | -typedef struct { | ||
136 | - int enteredDen; | ||
137 | -} D2S_QUEST_BETRAYAL_OF_HARROGATH_struct; | 41 | +enum D2S_QUEST_STATUS { |
42 | + D2S_QUEST_STATUS_COMPLETED = 0x0001, | ||
43 | + D2S_QUEST_STATUS_REWARD_AVAILABLE = 0x0002, | ||
44 | + D2S_QUEST_STATUS_STARTED = 0x0004, | ||
45 | + D2S_QUEST_STATUS_SEEN_FINISH_ANIMATION = 0x1000, | ||
46 | + D2S_QUEST_STATUS_JUST_FINISHED = 0x2000 | ||
47 | +}; | ||
138 | 48 | ||
139 | -typedef struct { | ||
140 | - int enteredDen; | ||
141 | -} D2S_QUEST_RITE_OF_PASSAGE_struct; | 49 | +enum D2S_SPECIALQUEST { |
50 | + D2S_SPECIALQUEST_AKARA_RESPEC | ||
51 | +}; | ||
142 | 52 | ||
143 | -typedef struct { | ||
144 | - int enteredDen; | ||
145 | -} D2S_QUEST_EVE_OF_DESTRUCTION_struct; | 53 | +const char* const checkpointDescriptions[] = { |
54 | + D2S_QUEST_CHECKPOINT_0, | ||
55 | + D2S_QUEST_CHECKPOINT_1, | ||
56 | + D2S_QUEST_CHECKPOINT_2, | ||
57 | + D2S_QUEST_CHECKPOINT_3, | ||
58 | + D2S_QUEST_CHECKPOINT_4, | ||
59 | + D2S_QUEST_CHECKPOINT_5, | ||
60 | + D2S_QUEST_CHECKPOINT_6, | ||
61 | + D2S_QUEST_CHECKPOINT_7, | ||
62 | + D2S_QUEST_CHECKPOINT_8, | ||
63 | + D2S_QUEST_CHECKPOINT_9, | ||
64 | + D2S_QUEST_CHECKPOINT_10, | ||
65 | + D2S_QUEST_CHECKPOINT_11, | ||
66 | + D2S_QUEST_CHECKPOINT_12, | ||
67 | + D2S_QUEST_CHECKPOINT_13, | ||
68 | + D2S_QUEST_CHECKPOINT_14, | ||
69 | + D2S_QUEST_CHECKPOINT_15, | ||
70 | + D2S_QUEST_CHECKPOINT_16, | ||
71 | + D2S_QUEST_CHECKPOINT_17, | ||
72 | + D2S_QUEST_CHECKPOINT_18, | ||
73 | + D2S_QUEST_CHECKPOINT_19, | ||
74 | + D2S_QUEST_CHECKPOINT_20, | ||
75 | + D2S_QUEST_CHECKPOINT_21, | ||
76 | + D2S_QUEST_CHECKPOINT_22, | ||
77 | + D2S_QUEST_CHECKPOINT_23, | ||
78 | + D2S_QUEST_CHECKPOINT_24, | ||
79 | + D2S_QUEST_CHECKPOINT_25, | ||
80 | + D2S_QUEST_CHECKPOINT_26, | ||
81 | + D2S_QUEST_CHECKPOINT_27, | ||
82 | + D2S_QUEST_CHECKPOINT_28, | ||
83 | + D2S_QUEST_CHECKPOINT_29, | ||
84 | + D2S_QUEST_CHECKPOINT_30, | ||
85 | + D2S_QUEST_CHECKPOINT_31, | ||
86 | + D2S_QUEST_CHECKPOINT_32, | ||
87 | + D2S_QUEST_CHECKPOINT_33, | ||
88 | + D2S_QUEST_CHECKPOINT_34, | ||
89 | + D2S_QUEST_CHECKPOINT_35, | ||
90 | + D2S_QUEST_CHECKPOINT_36, | ||
91 | + D2S_QUEST_CHECKPOINT_37, | ||
92 | + D2S_QUEST_CHECKPOINT_38, | ||
93 | + D2S_QUEST_CHECKPOINT_39, | ||
94 | + D2S_QUEST_CHECKPOINT_40, | ||
95 | + D2S_QUEST_CHECKPOINT_41, | ||
96 | + D2S_QUEST_CHECKPOINT_42, | ||
97 | + D2S_QUEST_CHECKPOINT_43, | ||
98 | + D2S_QUEST_CHECKPOINT_44, | ||
99 | + D2S_QUEST_CHECKPOINT_45, | ||
100 | + D2S_QUEST_CHECKPOINT_46, | ||
101 | + D2S_QUEST_CHECKPOINT_47, | ||
102 | + D2S_QUEST_CHECKPOINT_48, | ||
103 | + D2S_QUEST_CHECKPOINT_49, | ||
104 | + D2S_QUEST_CHECKPOINT_50, | ||
105 | + D2S_QUEST_CHECKPOINT_51, | ||
106 | + D2S_QUEST_CHECKPOINT_52, | ||
107 | + D2S_QUEST_CHECKPOINT_53, | ||
108 | + D2S_QUEST_CHECKPOINT_54, | ||
109 | + D2S_QUEST_CHECKPOINT_55, | ||
110 | + D2S_QUEST_CHECKPOINT_56, | ||
111 | + D2S_QUEST_CHECKPOINT_57, | ||
112 | + D2S_QUEST_CHECKPOINT_58, | ||
113 | + D2S_QUEST_CHECKPOINT_59, | ||
114 | + D2S_QUEST_CHECKPOINT_60, | ||
115 | + D2S_QUEST_CHECKPOINT_61, | ||
116 | + D2S_QUEST_CHECKPOINT_62, | ||
117 | + D2S_QUEST_CHECKPOINT_63, | ||
118 | + D2S_QUEST_CHECKPOINT_64, | ||
119 | + D2S_QUEST_CHECKPOINT_65, | ||
120 | + D2S_QUEST_CHECKPOINT_66, | ||
121 | + D2S_QUEST_CHECKPOINT_67, | ||
122 | + D2S_QUEST_CHECKPOINT_68, | ||
123 | + D2S_QUEST_CHECKPOINT_69, | ||
124 | + D2S_QUEST_CHECKPOINT_70, | ||
125 | + D2S_QUEST_CHECKPOINT_71, | ||
126 | + D2S_QUEST_CHECKPOINT_72, | ||
127 | + D2S_QUEST_CHECKPOINT_73, | ||
128 | + D2S_QUEST_CHECKPOINT_74, | ||
129 | + D2S_QUEST_CHECKPOINT_75, | ||
130 | + D2S_QUEST_CHECKPOINT_76, | ||
131 | + D2S_QUEST_CHECKPOINT_77, | ||
132 | + D2S_QUEST_CHECKPOINT_78, | ||
133 | + D2S_QUEST_CHECKPOINT_79, | ||
134 | + D2S_QUEST_CHECKPOINT_80, | ||
135 | + D2S_QUEST_CHECKPOINT_81, | ||
136 | + D2S_QUEST_CHECKPOINT_82, | ||
137 | + D2S_QUEST_CHECKPOINT_83, | ||
138 | + D2S_QUEST_CHECKPOINT_84, | ||
139 | + D2S_QUEST_CHECKPOINT_85, | ||
140 | + D2S_QUEST_CHECKPOINT_86, | ||
141 | + D2S_QUEST_CHECKPOINT_87, | ||
142 | + D2S_QUEST_CHECKPOINT_88, | ||
143 | + D2S_QUEST_CHECKPOINT_89, | ||
144 | + D2S_QUEST_CHECKPOINT_90, | ||
145 | + D2S_QUEST_CHECKPOINT_91, | ||
146 | + D2S_QUEST_CHECKPOINT_92, | ||
147 | + D2S_QUEST_CHECKPOINT_93, | ||
148 | + D2S_QUEST_CHECKPOINT_94, | ||
149 | + D2S_QUEST_CHECKPOINT_95, | ||
150 | + D2S_QUEST_CHECKPOINT_96, | ||
151 | + D2S_QUEST_CHECKPOINT_97, | ||
152 | + D2S_QUEST_CHECKPOINT_98, | ||
153 | + D2S_QUEST_CHECKPOINT_99, | ||
154 | + D2S_QUEST_CHECKPOINT_100, | ||
155 | + D2S_QUEST_CHECKPOINT_101, | ||
156 | + D2S_QUEST_CHECKPOINT_102, | ||
157 | + D2S_QUEST_CHECKPOINT_103, | ||
158 | + D2S_QUEST_CHECKPOINT_104, | ||
159 | + D2S_QUEST_CHECKPOINT_105, | ||
160 | + D2S_QUEST_CHECKPOINT_106, | ||
161 | + D2S_QUEST_CHECKPOINT_107, | ||
162 | + D2S_QUEST_CHECKPOINT_108, | ||
163 | + D2S_QUEST_CHECKPOINT_109, | ||
164 | + D2S_QUEST_CHECKPOINT_110, | ||
165 | + D2S_QUEST_CHECKPOINT_111, | ||
166 | + D2S_QUEST_CHECKPOINT_112, | ||
167 | + D2S_QUEST_CHECKPOINT_113, | ||
168 | + D2S_QUEST_CHECKPOINT_114, | ||
169 | + D2S_QUEST_CHECKPOINT_115, | ||
170 | + D2S_QUEST_CHECKPOINT_116, | ||
171 | + D2S_QUEST_CHECKPOINT_117, | ||
172 | + D2S_QUEST_CHECKPOINT_118, | ||
173 | + D2S_QUEST_CHECKPOINT_119, | ||
174 | + D2S_QUEST_CHECKPOINT_120, | ||
175 | + D2S_QUEST_CHECKPOINT_121, | ||
176 | + D2S_QUEST_CHECKPOINT_122, | ||
177 | + D2S_QUEST_CHECKPOINT_123, | ||
178 | + D2S_QUEST_CHECKPOINT_124, | ||
179 | + D2S_QUEST_CHECKPOINT_125, | ||
180 | + D2S_QUEST_CHECKPOINT_126, | ||
181 | + D2S_QUEST_CHECKPOINT_127, | ||
182 | + D2S_QUEST_CHECKPOINT_128, | ||
183 | + D2S_QUEST_CHECKPOINT_129, | ||
184 | + D2S_QUEST_CHECKPOINT_130, | ||
185 | + D2S_QUEST_CHECKPOINT_131, | ||
186 | + D2S_QUEST_CHECKPOINT_132, | ||
187 | + D2S_QUEST_CHECKPOINT_133, | ||
188 | + D2S_QUEST_CHECKPOINT_134, | ||
189 | + D2S_QUEST_CHECKPOINT_135, | ||
190 | + D2S_QUEST_CHECKPOINT_136, | ||
191 | + D2S_QUEST_CHECKPOINT_137, | ||
192 | + D2S_QUEST_CHECKPOINT_138, | ||
193 | + D2S_QUEST_CHECKPOINT_139, | ||
194 | + D2S_QUEST_CHECKPOINT_140, | ||
195 | + D2S_QUEST_CHECKPOINT_141, | ||
196 | + D2S_QUEST_CHECKPOINT_142, | ||
197 | + D2S_QUEST_CHECKPOINT_143, | ||
198 | + D2S_QUEST_CHECKPOINT_144, | ||
199 | + D2S_QUEST_CHECKPOINT_145, | ||
200 | + D2S_QUEST_CHECKPOINT_146, | ||
201 | + D2S_QUEST_CHECKPOINT_147, | ||
202 | + D2S_QUEST_CHECKPOINT_148, | ||
203 | + D2S_QUEST_CHECKPOINT_149, | ||
204 | + D2S_QUEST_CHECKPOINT_150, | ||
205 | + D2S_QUEST_CHECKPOINT_151, | ||
206 | + D2S_QUEST_CHECKPOINT_152, | ||
207 | + D2S_QUEST_CHECKPOINT_153, | ||
208 | + D2S_QUEST_CHECKPOINT_154, | ||
209 | + D2S_QUEST_CHECKPOINT_155, | ||
210 | + D2S_QUEST_CHECKPOINT_156, | ||
211 | + D2S_QUEST_CHECKPOINT_157, | ||
212 | + D2S_QUEST_CHECKPOINT_158, | ||
213 | + D2S_QUEST_CHECKPOINT_159, | ||
214 | + D2S_QUEST_CHECKPOINT_160, | ||
215 | + D2S_QUEST_CHECKPOINT_161, | ||
216 | + D2S_QUEST_CHECKPOINT_162, | ||
217 | + D2S_QUEST_CHECKPOINT_163, | ||
218 | + D2S_QUEST_CHECKPOINT_164, | ||
219 | + D2S_QUEST_CHECKPOINT_165, | ||
220 | + D2S_QUEST_CHECKPOINT_166, | ||
221 | + D2S_QUEST_CHECKPOINT_167, | ||
222 | + D2S_QUEST_CHECKPOINT_168, | ||
223 | + D2S_QUEST_CHECKPOINT_169, | ||
224 | + D2S_QUEST_CHECKPOINT_170, | ||
225 | + D2S_QUEST_CHECKPOINT_171, | ||
226 | + D2S_QUEST_CHECKPOINT_172, | ||
227 | + D2S_QUEST_CHECKPOINT_173, | ||
228 | + D2S_QUEST_CHECKPOINT_174, | ||
229 | + D2S_QUEST_CHECKPOINT_175, | ||
230 | + D2S_QUEST_CHECKPOINT_176, | ||
231 | + D2S_QUEST_CHECKPOINT_177, | ||
232 | + D2S_QUEST_CHECKPOINT_178, | ||
233 | + D2S_QUEST_CHECKPOINT_179, | ||
234 | + D2S_QUEST_CHECKPOINT_180, | ||
235 | + D2S_QUEST_CHECKPOINT_181, | ||
236 | + D2S_QUEST_CHECKPOINT_182, | ||
237 | + D2S_QUEST_CHECKPOINT_183, | ||
238 | + D2S_QUEST_CHECKPOINT_184, | ||
239 | + D2S_QUEST_CHECKPOINT_185, | ||
240 | + D2S_QUEST_CHECKPOINT_186, | ||
241 | + D2S_QUEST_CHECKPOINT_187, | ||
242 | + D2S_QUEST_CHECKPOINT_188, | ||
243 | + D2S_QUEST_CHECKPOINT_189, | ||
244 | + D2S_QUEST_CHECKPOINT_190, | ||
245 | + D2S_QUEST_CHECKPOINT_191, | ||
246 | + D2S_QUEST_CHECKPOINT_192, | ||
247 | + D2S_QUEST_CHECKPOINT_193, | ||
248 | + D2S_QUEST_CHECKPOINT_194, | ||
249 | + D2S_QUEST_CHECKPOINT_195, | ||
250 | + D2S_QUEST_CHECKPOINT_196, | ||
251 | + D2S_QUEST_CHECKPOINT_197, | ||
252 | + D2S_QUEST_CHECKPOINT_198, | ||
253 | + D2S_QUEST_CHECKPOINT_199, | ||
254 | + D2S_QUEST_CHECKPOINT_200, | ||
255 | + D2S_QUEST_CHECKPOINT_201, | ||
256 | + D2S_QUEST_CHECKPOINT_202, | ||
257 | + D2S_QUEST_CHECKPOINT_203, | ||
258 | + D2S_QUEST_CHECKPOINT_204, | ||
259 | + D2S_QUEST_CHECKPOINT_205, | ||
260 | + D2S_QUEST_CHECKPOINT_206, | ||
261 | + D2S_QUEST_CHECKPOINT_207, | ||
262 | + D2S_QUEST_CHECKPOINT_208, | ||
263 | + D2S_QUEST_CHECKPOINT_209, | ||
264 | + D2S_QUEST_CHECKPOINT_210, | ||
265 | + D2S_QUEST_CHECKPOINT_211, | ||
266 | + D2S_QUEST_CHECKPOINT_212, | ||
267 | + D2S_QUEST_CHECKPOINT_213, | ||
268 | + D2S_QUEST_CHECKPOINT_214, | ||
269 | + D2S_QUEST_CHECKPOINT_215, | ||
270 | + D2S_QUEST_CHECKPOINT_216, | ||
271 | + D2S_QUEST_CHECKPOINT_217, | ||
272 | + D2S_QUEST_CHECKPOINT_218, | ||
273 | + D2S_QUEST_CHECKPOINT_219, | ||
274 | + D2S_QUEST_CHECKPOINT_220, | ||
275 | + D2S_QUEST_CHECKPOINT_221, | ||
276 | + D2S_QUEST_CHECKPOINT_222, | ||
277 | + D2S_QUEST_CHECKPOINT_223, | ||
278 | + D2S_QUEST_CHECKPOINT_224, | ||
279 | + D2S_QUEST_CHECKPOINT_225, | ||
280 | + D2S_QUEST_CHECKPOINT_226, | ||
281 | + D2S_QUEST_CHECKPOINT_227, | ||
282 | + D2S_QUEST_CHECKPOINT_228, | ||
283 | + D2S_QUEST_CHECKPOINT_229, | ||
284 | + D2S_QUEST_CHECKPOINT_230, | ||
285 | + D2S_QUEST_CHECKPOINT_231, | ||
286 | + D2S_QUEST_CHECKPOINT_232, | ||
287 | + D2S_QUEST_CHECKPOINT_233, | ||
288 | + D2S_QUEST_CHECKPOINT_234, | ||
289 | + D2S_QUEST_CHECKPOINT_235, | ||
290 | + D2S_QUEST_CHECKPOINT_236, | ||
291 | + D2S_QUEST_CHECKPOINT_237, | ||
292 | + D2S_QUEST_CHECKPOINT_238, | ||
293 | + D2S_QUEST_CHECKPOINT_239, | ||
294 | + D2S_QUEST_CHECKPOINT_240, | ||
295 | + D2S_QUEST_CHECKPOINT_241, | ||
296 | + D2S_QUEST_CHECKPOINT_242, | ||
297 | + D2S_QUEST_CHECKPOINT_243, | ||
298 | + D2S_QUEST_CHECKPOINT_244, | ||
299 | + D2S_QUEST_CHECKPOINT_245, | ||
300 | + D2S_QUEST_CHECKPOINT_246, | ||
301 | + D2S_QUEST_CHECKPOINT_247, | ||
302 | + D2S_QUEST_CHECKPOINT_248, | ||
303 | + D2S_QUEST_CHECKPOINT_249, | ||
304 | + D2S_QUEST_CHECKPOINT_250, | ||
305 | + D2S_QUEST_CHECKPOINT_251, | ||
306 | + D2S_QUEST_CHECKPOINT_252, | ||
307 | + D2S_QUEST_CHECKPOINT_253, | ||
308 | + D2S_QUEST_CHECKPOINT_254, | ||
309 | + D2S_QUEST_CHECKPOINT_255, | ||
310 | + D2S_QUEST_CHECKPOINT_256, | ||
311 | + D2S_QUEST_CHECKPOINT_257, | ||
312 | + D2S_QUEST_CHECKPOINT_258, | ||
313 | + D2S_QUEST_CHECKPOINT_259, | ||
314 | + D2S_QUEST_CHECKPOINT_260, | ||
315 | + D2S_QUEST_CHECKPOINT_261, | ||
316 | + D2S_QUEST_CHECKPOINT_262, | ||
317 | + D2S_QUEST_CHECKPOINT_263, | ||
318 | + D2S_QUEST_CHECKPOINT_264, | ||
319 | + D2S_QUEST_CHECKPOINT_265, | ||
320 | + D2S_QUEST_CHECKPOINT_266, | ||
321 | + D2S_QUEST_CHECKPOINT_267, | ||
322 | + D2S_QUEST_CHECKPOINT_268, | ||
323 | + D2S_QUEST_CHECKPOINT_269, | ||
324 | + D2S_QUEST_CHECKPOINT_270, | ||
325 | + D2S_QUEST_CHECKPOINT_271, | ||
326 | + D2S_QUEST_CHECKPOINT_272, | ||
327 | + D2S_QUEST_CHECKPOINT_273, | ||
328 | + D2S_QUEST_CHECKPOINT_274, | ||
329 | + D2S_QUEST_CHECKPOINT_275, | ||
330 | + D2S_QUEST_CHECKPOINT_276, | ||
331 | + D2S_QUEST_CHECKPOINT_277, | ||
332 | + D2S_QUEST_CHECKPOINT_278, | ||
333 | + D2S_QUEST_CHECKPOINT_279, | ||
334 | + D2S_QUEST_CHECKPOINT_280, | ||
335 | + D2S_QUEST_CHECKPOINT_281, | ||
336 | + D2S_QUEST_CHECKPOINT_282, | ||
337 | + D2S_QUEST_CHECKPOINT_283, | ||
338 | + D2S_QUEST_CHECKPOINT_284, | ||
339 | + D2S_QUEST_CHECKPOINT_285, | ||
340 | + D2S_QUEST_CHECKPOINT_286, | ||
341 | + D2S_QUEST_CHECKPOINT_287, | ||
342 | + D2S_QUEST_CHECKPOINT_288, | ||
343 | + D2S_QUEST_CHECKPOINT_289, | ||
344 | + D2S_QUEST_CHECKPOINT_290, | ||
345 | + D2S_QUEST_CHECKPOINT_291, | ||
346 | + D2S_QUEST_CHECKPOINT_292, | ||
347 | + D2S_QUEST_CHECKPOINT_293, | ||
348 | + D2S_QUEST_CHECKPOINT_294, | ||
349 | + D2S_QUEST_CHECKPOINT_295, | ||
350 | + D2S_QUEST_CHECKPOINT_296, | ||
351 | + D2S_QUEST_CHECKPOINT_297, | ||
352 | + D2S_QUEST_CHECKPOINT_298, | ||
353 | + D2S_QUEST_CHECKPOINT_299, | ||
354 | + D2S_QUEST_CHECKPOINT_300, | ||
355 | + D2S_QUEST_CHECKPOINT_301, | ||
356 | + D2S_QUEST_CHECKPOINT_302, | ||
357 | + D2S_QUEST_CHECKPOINT_303, | ||
358 | + D2S_QUEST_CHECKPOINT_304, | ||
359 | + D2S_QUEST_CHECKPOINT_305, | ||
360 | + D2S_QUEST_CHECKPOINT_306, | ||
361 | + D2S_QUEST_CHECKPOINT_307, | ||
362 | + D2S_QUEST_CHECKPOINT_308, | ||
363 | + D2S_QUEST_CHECKPOINT_309, | ||
364 | + D2S_QUEST_CHECKPOINT_310, | ||
365 | + D2S_QUEST_CHECKPOINT_311, | ||
366 | + D2S_QUEST_CHECKPOINT_312, | ||
367 | + D2S_QUEST_CHECKPOINT_313, | ||
368 | + D2S_QUEST_CHECKPOINT_314, | ||
369 | + D2S_QUEST_CHECKPOINT_315, | ||
370 | + D2S_QUEST_CHECKPOINT_316, | ||
371 | + D2S_QUEST_CHECKPOINT_317, | ||
372 | + D2S_QUEST_CHECKPOINT_318, | ||
373 | + D2S_QUEST_CHECKPOINT_319, | ||
374 | + D2S_QUEST_CHECKPOINT_320, | ||
375 | + D2S_QUEST_CHECKPOINT_321, | ||
376 | + D2S_QUEST_CHECKPOINT_322, | ||
377 | + D2S_QUEST_CHECKPOINT_323, | ||
378 | + D2S_QUEST_CHECKPOINT_324, | ||
379 | + D2S_QUEST_CHECKPOINT_325, | ||
380 | + D2S_QUEST_CHECKPOINT_326, | ||
381 | + D2S_QUEST_CHECKPOINT_327, | ||
382 | + D2S_QUEST_CHECKPOINT_328, | ||
383 | + D2S_QUEST_CHECKPOINT_329, | ||
384 | + D2S_QUEST_CHECKPOINT_330, | ||
385 | + D2S_QUEST_CHECKPOINT_331, | ||
386 | + D2S_QUEST_CHECKPOINT_332, | ||
387 | + D2S_QUEST_CHECKPOINT_333, | ||
388 | + D2S_QUEST_CHECKPOINT_334, | ||
389 | + D2S_QUEST_CHECKPOINT_335, | ||
390 | + D2S_QUEST_CHECKPOINT_336, | ||
391 | + D2S_QUEST_CHECKPOINT_337, | ||
392 | + D2S_QUEST_CHECKPOINT_338, | ||
393 | + D2S_QUEST_CHECKPOINT_339, | ||
394 | + D2S_QUEST_CHECKPOINT_340, | ||
395 | + D2S_QUEST_CHECKPOINT_341, | ||
396 | + D2S_QUEST_CHECKPOINT_342, | ||
397 | + D2S_QUEST_CHECKPOINT_343, | ||
398 | + D2S_QUEST_CHECKPOINT_344, | ||
399 | + D2S_QUEST_CHECKPOINT_345, | ||
400 | + D2S_QUEST_CHECKPOINT_346, | ||
401 | + D2S_QUEST_CHECKPOINT_347, | ||
402 | + D2S_QUEST_CHECKPOINT_348, | ||
403 | + D2S_QUEST_CHECKPOINT_349, | ||
404 | + D2S_QUEST_CHECKPOINT_350, | ||
405 | + D2S_QUEST_CHECKPOINT_351, | ||
406 | + D2S_QUEST_CHECKPOINT_352, | ||
407 | + D2S_QUEST_CHECKPOINT_353, | ||
408 | + D2S_QUEST_CHECKPOINT_354, | ||
409 | + D2S_QUEST_CHECKPOINT_355, | ||
410 | + D2S_QUEST_CHECKPOINT_356, | ||
411 | + D2S_QUEST_CHECKPOINT_357, | ||
412 | + D2S_QUEST_CHECKPOINT_358, | ||
413 | + D2S_QUEST_CHECKPOINT_359, | ||
414 | + D2S_QUEST_CHECKPOINT_360, | ||
415 | + D2S_QUEST_CHECKPOINT_361, | ||
416 | + D2S_QUEST_CHECKPOINT_362, | ||
417 | + D2S_QUEST_CHECKPOINT_363, | ||
418 | + D2S_QUEST_CHECKPOINT_364, | ||
419 | + D2S_QUEST_CHECKPOINT_365, | ||
420 | + D2S_QUEST_CHECKPOINT_366, | ||
421 | + D2S_QUEST_CHECKPOINT_367, | ||
422 | + D2S_QUEST_CHECKPOINT_368, | ||
423 | + D2S_QUEST_CHECKPOINT_369, | ||
424 | + D2S_QUEST_CHECKPOINT_370, | ||
425 | + D2S_QUEST_CHECKPOINT_371, | ||
426 | + D2S_QUEST_CHECKPOINT_372, | ||
427 | + D2S_QUEST_CHECKPOINT_373, | ||
428 | + D2S_QUEST_CHECKPOINT_374, | ||
429 | + D2S_QUEST_CHECKPOINT_375, | ||
430 | + D2S_QUEST_CHECKPOINT_376, | ||
431 | + D2S_QUEST_CHECKPOINT_377, | ||
432 | + D2S_QUEST_CHECKPOINT_378, | ||
433 | + D2S_QUEST_CHECKPOINT_379, | ||
434 | + D2S_QUEST_CHECKPOINT_380, | ||
435 | + D2S_QUEST_CHECKPOINT_381, | ||
436 | + D2S_QUEST_CHECKPOINT_382, | ||
437 | + D2S_QUEST_CHECKPOINT_383, | ||
438 | + D2S_QUEST_CHECKPOINT_384, | ||
439 | + D2S_QUEST_CHECKPOINT_385, | ||
440 | + D2S_QUEST_CHECKPOINT_386, | ||
441 | + D2S_QUEST_CHECKPOINT_387, | ||
442 | + D2S_QUEST_CHECKPOINT_388, | ||
443 | + D2S_QUEST_CHECKPOINT_389, | ||
444 | + D2S_QUEST_CHECKPOINT_390, | ||
445 | + D2S_QUEST_CHECKPOINT_391, | ||
446 | + D2S_QUEST_CHECKPOINT_392, | ||
447 | + D2S_QUEST_CHECKPOINT_393, | ||
448 | + D2S_QUEST_CHECKPOINT_394, | ||
449 | + D2S_QUEST_CHECKPOINT_395, | ||
450 | + D2S_QUEST_CHECKPOINT_396, | ||
451 | + D2S_QUEST_CHECKPOINT_397, | ||
452 | + D2S_QUEST_CHECKPOINT_398, | ||
453 | + D2S_QUEST_CHECKPOINT_399, | ||
454 | + D2S_QUEST_CHECKPOINT_400, | ||
455 | + D2S_QUEST_CHECKPOINT_401, | ||
456 | + D2S_QUEST_CHECKPOINT_402, | ||
457 | + D2S_QUEST_CHECKPOINT_403, | ||
458 | + D2S_QUEST_CHECKPOINT_404, | ||
459 | + D2S_QUEST_CHECKPOINT_405, | ||
460 | + D2S_QUEST_CHECKPOINT_406, | ||
461 | + D2S_QUEST_CHECKPOINT_407, | ||
462 | + D2S_QUEST_CHECKPOINT_408, | ||
463 | + D2S_QUEST_CHECKPOINT_409, | ||
464 | + D2S_QUEST_CHECKPOINT_410, | ||
465 | + D2S_QUEST_CHECKPOINT_411, | ||
466 | + D2S_QUEST_CHECKPOINT_412, | ||
467 | + D2S_QUEST_CHECKPOINT_413, | ||
468 | + D2S_QUEST_CHECKPOINT_414, | ||
469 | + D2S_QUEST_CHECKPOINT_415, | ||
470 | + D2S_QUEST_CHECKPOINT_416, | ||
471 | + D2S_QUEST_CHECKPOINT_417, | ||
472 | + D2S_QUEST_CHECKPOINT_418, | ||
473 | + D2S_QUEST_CHECKPOINT_419, | ||
474 | + D2S_QUEST_CHECKPOINT_420, | ||
475 | + D2S_QUEST_CHECKPOINT_421, | ||
476 | + D2S_QUEST_CHECKPOINT_422, | ||
477 | + D2S_QUEST_CHECKPOINT_423, | ||
478 | + D2S_QUEST_CHECKPOINT_424, | ||
479 | + D2S_QUEST_CHECKPOINT_425, | ||
480 | + D2S_QUEST_CHECKPOINT_426, | ||
481 | + D2S_QUEST_CHECKPOINT_427, | ||
482 | + D2S_QUEST_CHECKPOINT_428, | ||
483 | + D2S_QUEST_CHECKPOINT_429, | ||
484 | + D2S_QUEST_CHECKPOINT_430, | ||
485 | + D2S_QUEST_CHECKPOINT_431 | ||
486 | +}; | ||
146 | 487 | ||
147 | typedef struct __attribute__((packed)) { | 488 | typedef struct __attribute__((packed)) { |
148 | uint16_t actStarted; | 489 | uint16_t actStarted; |
@@ -154,12 +495,13 @@ typedef struct __attribute__((packed)) { | @@ -154,12 +495,13 @@ typedef struct __attribute__((packed)) { | ||
154 | uint16_t actStarted; | 495 | uint16_t actStarted; |
155 | uint16_t unknown1[2]; | 496 | uint16_t unknown1[2]; |
156 | uint16_t questCheckpoints[6]; | 497 | uint16_t questCheckpoints[6]; |
157 | - uint16_t unknown2[7]; | ||
158 | } D2XActData; | 498 | } D2XActData; |
159 | 499 | ||
160 | typedef struct __attribute__((packed)) { | 500 | typedef struct __attribute__((packed)) { |
161 | D2ActData actData[4]; | 501 | D2ActData actData[4]; |
162 | D2XActData expansionAct; | 502 | D2XActData expansionAct; |
503 | + uint16_t akaraRespecData; // This uint16_t determines if the player has used Akara's respec or not | ||
504 | + uint16_t unknown1[6]; | ||
163 | } D2Quests; | 505 | } D2Quests; |
164 | 506 | ||
165 | typedef struct __attribute__((packed)) { | 507 | typedef struct __attribute__((packed)) { |
@@ -169,8 +511,26 @@ typedef struct __attribute__((packed)) { | @@ -169,8 +511,26 @@ typedef struct __attribute__((packed)) { | ||
169 | D2Quests quests[3]; // 1 set for each difficulty | 511 | D2Quests quests[3]; // 1 set for each difficulty |
170 | } D2QuestData; | 512 | } D2QuestData; |
171 | 513 | ||
172 | -// Returns quest status for the specified quest and act. dest must be a struct of the specified | ||
173 | -// quest. Passing anything else may cause the program to crash if it doesn't fit into memory :) | ||
174 | -int getQuestStatus(D2QuestData* d, unsigned int quest, unsigned int difficulty, void* dest); | 514 | +// Populates `descriptions` with static strings from library memory, no need to free. |
515 | +// `descriptions` contains one string for each bit field of the quest's uint16_t data. | ||
516 | +// Empty entries (non-existant or unknown checkpoints) will have NULL value. Be careful! | ||
517 | +void getCheckpointDescriptions(unsigned int quest, const char* *descriptions[16]); | ||
518 | + | ||
519 | +// Returns quest status for the specified quest and act. | ||
520 | +uint16_t getQuestStatus(D2QuestData* d, unsigned int quest, unsigned int difficulty); | ||
521 | + | ||
522 | +int isQuestStarted(D2QuestData* d, unsigned int quest, unsigned int difficulty); | ||
523 | +int isQuestRewardCollected(D2QuestData* d, unsigned int quest, unsigned int difficulty); | ||
524 | +int isQuestCompleted(D2QuestData* d, unsigned int quest, unsigned int difficulty); | ||
525 | + | ||
526 | +// Set bool to 1 to set the status or 0 to remove it | ||
527 | +void setQuestStarted(D2QuestData* d, unsigned int quest, unsigned int difficulty, int bool); | ||
528 | +void setQuestRewardCollected(D2QuestData* d, unsigned int quest, unsigned int difficulty, int bool); | ||
529 | +void setQuestCompleted(D2QuestData* d, unsigned int quest, unsigned int difficulty, int bool); | ||
530 | + | ||
531 | +// Some quests have extra fields outside their quest data that govern certain states of the quest | ||
532 | +// So far, I only know of the respec that Akara offers when clearing Den of Evil | ||
533 | +int getSpecialQuestStatus(D2QuestData* d, unsigned int specialQuestState, unsigned int difficulty); | ||
534 | +void setSpecialQuestStatus(D2QuestData* d, unsigned int specialQuestState, unsigned int difficulty, int bool); | ||
175 | 535 | ||
176 | #endif | 536 | #endif |
177 | \ No newline at end of file | 537 | \ No newline at end of file |
d2strings.h
@@ -565,4 +565,474 @@ const char* D2S_CHARPROGRESS_EXPANSION_TIER3_NAME_HARDCORE = "Guardian"; | @@ -565,4 +565,474 @@ const char* D2S_CHARPROGRESS_EXPANSION_TIER3_NAME_HARDCORE = "Guardian"; | ||
565 | #define D2S_MERC_ID_28 "Barbarian [Hell]" | 565 | #define D2S_MERC_ID_28 "Barbarian [Hell]" |
566 | #define D2S_MERC_ID_29 "Barbarian [Hell]" | 566 | #define D2S_MERC_ID_29 "Barbarian [Hell]" |
567 | 567 | ||
568 | +// Quest checkpoints | ||
569 | +// Note: Some quests don't have many checkpoints, but unfortunately lots of checkpoints are | ||
570 | +// missing here. Documentation is pretty much scarce and I'm afraid we won't be able to find | ||
571 | +// much unless we go through the arduous process of saving and exit for each step/combination | ||
572 | +// of steps for each quest and check which bits got modified and why. The existing values have | ||
573 | +// been determined by existing sources online and _other methods_ ;) | ||
574 | +// Den of Evil | ||
575 | +#define D2S_QUEST_CHECKPOINT_0 NULL | ||
576 | +#define D2S_QUEST_CHECKPOINT_1 NULL | ||
577 | +#define D2S_QUEST_CHECKPOINT_2 NULL | ||
578 | +#define D2S_QUEST_CHECKPOINT_3 NULL | ||
579 | +#define D2S_QUEST_CHECKPOINT_4 "Entered the Den of Evil" | ||
580 | +#define D2S_QUEST_CHECKPOINT_5 NULL | ||
581 | +#define D2S_QUEST_CHECKPOINT_6 NULL | ||
582 | +#define D2S_QUEST_CHECKPOINT_7 NULL | ||
583 | +#define D2S_QUEST_CHECKPOINT_8 NULL | ||
584 | +#define D2S_QUEST_CHECKPOINT_9 NULL | ||
585 | +#define D2S_QUEST_CHECKPOINT_10 NULL | ||
586 | +#define D2S_QUEST_CHECKPOINT_11 NULL | ||
587 | +#define D2S_QUEST_CHECKPOINT_12 NULL | ||
588 | +#define D2S_QUEST_CHECKPOINT_13 NULL | ||
589 | +#define D2S_QUEST_CHECKPOINT_14 NULL | ||
590 | +#define D2S_QUEST_CHECKPOINT_15 NULL | ||
591 | +// Sister's Burial Grounds | ||
592 | +#define D2S_QUEST_CHECKPOINT_16 NULL | ||
593 | +#define D2S_QUEST_CHECKPOINT_17 NULL | ||
594 | +#define D2S_QUEST_CHECKPOINT_18 NULL | ||
595 | +#define D2S_QUEST_CHECKPOINT_19 NULL | ||
596 | +#define D2S_QUEST_CHECKPOINT_20 "Entered the Burial Grounds" | ||
597 | +#define D2S_QUEST_CHECKPOINT_21 NULL | ||
598 | +#define D2S_QUEST_CHECKPOINT_22 NULL | ||
599 | +#define D2S_QUEST_CHECKPOINT_23 NULL | ||
600 | +#define D2S_QUEST_CHECKPOINT_24 NULL | ||
601 | +#define D2S_QUEST_CHECKPOINT_25 NULL | ||
602 | +#define D2S_QUEST_CHECKPOINT_26 NULL | ||
603 | +#define D2S_QUEST_CHECKPOINT_27 NULL | ||
604 | +#define D2S_QUEST_CHECKPOINT_28 NULL | ||
605 | +#define D2S_QUEST_CHECKPOINT_29 NULL | ||
606 | +#define D2S_QUEST_CHECKPOINT_30 NULL | ||
607 | +#define D2S_QUEST_CHECKPOINT_31 NULL | ||
608 | +// Tools of the Trade | ||
609 | +#define D2S_QUEST_CHECKPOINT_32 NULL | ||
610 | +#define D2S_QUEST_CHECKPOINT_33 NULL | ||
611 | +#define D2S_QUEST_CHECKPOINT_34 NULL | ||
612 | +#define D2S_QUEST_CHECKPOINT_35 NULL | ||
613 | +#define D2S_QUEST_CHECKPOINT_36 NULL | ||
614 | +#define D2S_QUEST_CHECKPOINT_37 NULL | ||
615 | +#define D2S_QUEST_CHECKPOINT_38 "Picked the Horadric Malus" | ||
616 | +#define D2S_QUEST_CHECKPOINT_39 NULL | ||
617 | +#define D2S_QUEST_CHECKPOINT_40 NULL | ||
618 | +#define D2S_QUEST_CHECKPOINT_41 NULL | ||
619 | +#define D2S_QUEST_CHECKPOINT_42 NULL | ||
620 | +#define D2S_QUEST_CHECKPOINT_43 NULL | ||
621 | +#define D2S_QUEST_CHECKPOINT_44 NULL | ||
622 | +#define D2S_QUEST_CHECKPOINT_45 NULL | ||
623 | +#define D2S_QUEST_CHECKPOINT_46 NULL | ||
624 | +#define D2S_QUEST_CHECKPOINT_47 NULL | ||
625 | +// The Search for Cain | ||
626 | +#define D2S_QUEST_CHECKPOINT_48 NULL | ||
627 | +#define D2S_QUEST_CHECKPOINT_49 NULL | ||
628 | +#define D2S_QUEST_CHECKPOINT_50 NULL | ||
629 | +#define D2S_QUEST_CHECKPOINT_51 NULL | ||
630 | +#define D2S_QUEST_CHECKPOINT_52 "Entered Tristram" | ||
631 | +#define D2S_QUEST_CHECKPOINT_53 NULL | ||
632 | +#define D2S_QUEST_CHECKPOINT_54 NULL | ||
633 | +#define D2S_QUEST_CHECKPOINT_55 NULL | ||
634 | +#define D2S_QUEST_CHECKPOINT_56 NULL | ||
635 | +#define D2S_QUEST_CHECKPOINT_57 NULL | ||
636 | +#define D2S_QUEST_CHECKPOINT_58 "Completed the Secret Cow Level" // Moo! | ||
637 | +#define D2S_QUEST_CHECKPOINT_59 NULL | ||
638 | +#define D2S_QUEST_CHECKPOINT_60 NULL | ||
639 | +#define D2S_QUEST_CHECKPOINT_61 NULL | ||
640 | +#define D2S_QUEST_CHECKPOINT_62 "The Rogues rescued Deckard Cain" | ||
641 | +#define D2S_QUEST_CHECKPOINT_63 NULL | ||
642 | +// The Forgotten Tower | ||
643 | +#define D2S_QUEST_CHECKPOINT_64 NULL | ||
644 | +#define D2S_QUEST_CHECKPOINT_65 NULL | ||
645 | +#define D2S_QUEST_CHECKPOINT_66 "Read the Moldy Tome" | ||
646 | +#define D2S_QUEST_CHECKPOINT_67 NULL | ||
647 | +#define D2S_QUEST_CHECKPOINT_68 NULL | ||
648 | +#define D2S_QUEST_CHECKPOINT_69 NULL | ||
649 | +#define D2S_QUEST_CHECKPOINT_70 "Entered the Forgotten Tower" | ||
650 | +#define D2S_QUEST_CHECKPOINT_71 NULL | ||
651 | +#define D2S_QUEST_CHECKPOINT_72 NULL | ||
652 | +#define D2S_QUEST_CHECKPOINT_73 NULL | ||
653 | +#define D2S_QUEST_CHECKPOINT_74 NULL | ||
654 | +#define D2S_QUEST_CHECKPOINT_75 NULL | ||
655 | +#define D2S_QUEST_CHECKPOINT_76 NULL | ||
656 | +#define D2S_QUEST_CHECKPOINT_77 NULL | ||
657 | +#define D2S_QUEST_CHECKPOINT_78 NULL | ||
658 | +#define D2S_QUEST_CHECKPOINT_79 NULL | ||
659 | +// Sisters to the Slaughter | ||
660 | +#define D2S_QUEST_CHECKPOINT_80 NULL | ||
661 | +#define D2S_QUEST_CHECKPOINT_81 NULL | ||
662 | +#define D2S_QUEST_CHECKPOINT_82 NULL | ||
663 | +#define D2S_QUEST_CHECKPOINT_83 NULL | ||
664 | +#define D2S_QUEST_CHECKPOINT_84 NULL | ||
665 | +#define D2S_QUEST_CHECKPOINT_85 NULL | ||
666 | +#define D2S_QUEST_CHECKPOINT_86 NULL | ||
667 | +#define D2S_QUEST_CHECKPOINT_87 NULL | ||
668 | +#define D2S_QUEST_CHECKPOINT_88 NULL | ||
669 | +#define D2S_QUEST_CHECKPOINT_89 NULL | ||
670 | +#define D2S_QUEST_CHECKPOINT_90 NULL | ||
671 | +#define D2S_QUEST_CHECKPOINT_91 NULL | ||
672 | +#define D2S_QUEST_CHECKPOINT_92 NULL | ||
673 | +#define D2S_QUEST_CHECKPOINT_93 NULL | ||
674 | +#define D2S_QUEST_CHECKPOINT_94 NULL | ||
675 | +#define D2S_QUEST_CHECKPOINT_95 NULL | ||
676 | +// Radament's Lair | ||
677 | +#define D2S_QUEST_CHECKPOINT_96 NULL | ||
678 | +#define D2S_QUEST_CHECKPOINT_97 NULL | ||
679 | +#define D2S_QUEST_CHECKPOINT_98 NULL | ||
680 | +#define D2S_QUEST_CHECKPOINT_99 NULL | ||
681 | +#define D2S_QUEST_CHECKPOINT_100 "Found Radament" | ||
682 | +#define D2S_QUEST_CHECKPOINT_101 NULL | ||
683 | +#define D2S_QUEST_CHECKPOINT_102 NULL | ||
684 | +#define D2S_QUEST_CHECKPOINT_103 NULL | ||
685 | +#define D2S_QUEST_CHECKPOINT_104 NULL | ||
686 | +#define D2S_QUEST_CHECKPOINT_105 NULL | ||
687 | +#define D2S_QUEST_CHECKPOINT_106 NULL | ||
688 | +#define D2S_QUEST_CHECKPOINT_107 NULL | ||
689 | +#define D2S_QUEST_CHECKPOINT_108 NULL | ||
690 | +#define D2S_QUEST_CHECKPOINT_109 NULL | ||
691 | +#define D2S_QUEST_CHECKPOINT_110 NULL | ||
692 | +#define D2S_QUEST_CHECKPOINT_111 NULL | ||
693 | +// The Horadric Staff | ||
694 | +#define D2S_QUEST_CHECKPOINT_112 NULL | ||
695 | +#define D2S_QUEST_CHECKPOINT_113 NULL | ||
696 | +#define D2S_QUEST_CHECKPOINT_114 NULL | ||
697 | +#define D2S_QUEST_CHECKPOINT_115 NULL | ||
698 | +#define D2S_QUEST_CHECKPOINT_116 "Spoke to Cain about the Viper Amulet" | ||
699 | +#define D2S_QUEST_CHECKPOINT_117 "Spoke to Cain about the Staff of Kings" | ||
700 | +#define D2S_QUEST_CHECKPOINT_118 NULL | ||
701 | +#define D2S_QUEST_CHECKPOINT_119 NULL | ||
702 | +#define D2S_QUEST_CHECKPOINT_120 NULL | ||
703 | +#define D2S_QUEST_CHECKPOINT_121 NULL | ||
704 | +#define D2S_QUEST_CHECKPOINT_122 "Spoke to Cain about the Horadric Staff" | ||
705 | +#define D2S_QUEST_CHECKPOINT_123 "You crafted the Horadric Staff" | ||
706 | +#define D2S_QUEST_CHECKPOINT_124 NULL | ||
707 | +#define D2S_QUEST_CHECKPOINT_125 NULL | ||
708 | +#define D2S_QUEST_CHECKPOINT_126 NULL | ||
709 | +#define D2S_QUEST_CHECKPOINT_127 NULL | ||
710 | +// Tainted Sun | ||
711 | +#define D2S_QUEST_CHECKPOINT_128 NULL | ||
712 | +#define D2S_QUEST_CHECKPOINT_129 NULL | ||
713 | +#define D2S_QUEST_CHECKPOINT_130 "The sun is eclipsed" | ||
714 | +#define D2S_QUEST_CHECKPOINT_131 "Spoke to Drognan about the eclipse" | ||
715 | +#define D2S_QUEST_CHECKPOINT_132 NULL | ||
716 | +#define D2S_QUEST_CHECKPOINT_133 NULL | ||
717 | +#define D2S_QUEST_CHECKPOINT_134 NULL | ||
718 | +#define D2S_QUEST_CHECKPOINT_135 NULL | ||
719 | +#define D2S_QUEST_CHECKPOINT_136 NULL | ||
720 | +#define D2S_QUEST_CHECKPOINT_137 NULL | ||
721 | +#define D2S_QUEST_CHECKPOINT_138 NULL | ||
722 | +#define D2S_QUEST_CHECKPOINT_139 NULL | ||
723 | +#define D2S_QUEST_CHECKPOINT_140 NULL | ||
724 | +#define D2S_QUEST_CHECKPOINT_141 NULL | ||
725 | +#define D2S_QUEST_CHECKPOINT_142 NULL | ||
726 | +#define D2S_QUEST_CHECKPOINT_143 NULL | ||
727 | +// Arcane Sanctuary | ||
728 | +#define D2S_QUEST_CHECKPOINT_144 NULL | ||
729 | +#define D2S_QUEST_CHECKPOINT_145 NULL | ||
730 | +#define D2S_QUEST_CHECKPOINT_146 NULL | ||
731 | +#define D2S_QUEST_CHECKPOINT_147 NULL | ||
732 | +#define D2S_QUEST_CHECKPOINT_148 NULL | ||
733 | +#define D2S_QUEST_CHECKPOINT_149 NULL | ||
734 | +#define D2S_QUEST_CHECKPOINT_150 NULL | ||
735 | +#define D2S_QUEST_CHECKPOINT_151 NULL | ||
736 | +#define D2S_QUEST_CHECKPOINT_152 NULL | ||
737 | +#define D2S_QUEST_CHECKPOINT_153 NULL | ||
738 | +#define D2S_QUEST_CHECKPOINT_154 NULL | ||
739 | +#define D2S_QUEST_CHECKPOINT_155 NULL | ||
740 | +#define D2S_QUEST_CHECKPOINT_156 NULL | ||
741 | +#define D2S_QUEST_CHECKPOINT_157 NULL | ||
742 | +#define D2S_QUEST_CHECKPOINT_158 NULL | ||
743 | +#define D2S_QUEST_CHECKPOINT_159 NULL | ||
744 | +// The Summoner | ||
745 | +#define D2S_QUEST_CHECKPOINT_160 NULL | ||
746 | +#define D2S_QUEST_CHECKPOINT_161 NULL | ||
747 | +#define D2S_QUEST_CHECKPOINT_162 NULL | ||
748 | +#define D2S_QUEST_CHECKPOINT_163 NULL | ||
749 | +#define D2S_QUEST_CHECKPOINT_164 NULL | ||
750 | +#define D2S_QUEST_CHECKPOINT_165 NULL | ||
751 | +#define D2S_QUEST_CHECKPOINT_166 NULL | ||
752 | +#define D2S_QUEST_CHECKPOINT_167 NULL | ||
753 | +#define D2S_QUEST_CHECKPOINT_168 NULL | ||
754 | +#define D2S_QUEST_CHECKPOINT_169 NULL | ||
755 | +#define D2S_QUEST_CHECKPOINT_170 NULL | ||
756 | +#define D2S_QUEST_CHECKPOINT_171 NULL | ||
757 | +#define D2S_QUEST_CHECKPOINT_172 NULL | ||
758 | +#define D2S_QUEST_CHECKPOINT_173 NULL | ||
759 | +#define D2S_QUEST_CHECKPOINT_174 NULL | ||
760 | +#define D2S_QUEST_CHECKPOINT_175 NULL | ||
761 | +// The Seven Tombs | ||
762 | +#define D2S_QUEST_CHECKPOINT_176 NULL | ||
763 | +#define D2S_QUEST_CHECKPOINT_177 NULL | ||
764 | +#define D2S_QUEST_CHECKPOINT_178 NULL | ||
765 | +#define D2S_QUEST_CHECKPOINT_179 "Spoke to Tyrael" | ||
766 | +#define D2S_QUEST_CHECKPOINT_180 "Spoke to Jerhyn (after killing Duriel)" | ||
767 | +#define D2S_QUEST_CHECKPOINT_181 "Killed Duriel" | ||
768 | +#define D2S_QUEST_CHECKPOINT_182 "Atma congratulated you" | ||
769 | +#define D2S_QUEST_CHECKPOINT_183 "Warriv congratulated you" | ||
770 | +#define D2S_QUEST_CHECKPOINT_184 "Spoke to Drognan" | ||
771 | +#define D2S_QUEST_CHECKPOINT_185 "Spoke to Lysander" | ||
772 | +#define D2S_QUEST_CHECKPOINT_186 "Spoke to Cain" | ||
773 | +#define D2S_QUEST_CHECKPOINT_187 "Spoke to Fara" | ||
774 | +#define D2S_QUEST_CHECKPOINT_188 NULL | ||
775 | +#define D2S_QUEST_CHECKPOINT_189 NULL | ||
776 | +#define D2S_QUEST_CHECKPOINT_190 NULL | ||
777 | +#define D2S_QUEST_CHECKPOINT_191 NULL | ||
778 | +// Lam Esen's Tome | ||
779 | +#define D2S_QUEST_CHECKPOINT_192 NULL | ||
780 | +#define D2S_QUEST_CHECKPOINT_193 NULL | ||
781 | +#define D2S_QUEST_CHECKPOINT_194 NULL | ||
782 | +#define D2S_QUEST_CHECKPOINT_195 NULL | ||
783 | +#define D2S_QUEST_CHECKPOINT_196 NULL | ||
784 | +#define D2S_QUEST_CHECKPOINT_197 NULL | ||
785 | +#define D2S_QUEST_CHECKPOINT_198 NULL | ||
786 | +#define D2S_QUEST_CHECKPOINT_199 NULL | ||
787 | +#define D2S_QUEST_CHECKPOINT_200 NULL | ||
788 | +#define D2S_QUEST_CHECKPOINT_201 NULL | ||
789 | +#define D2S_QUEST_CHECKPOINT_202 NULL | ||
790 | +#define D2S_QUEST_CHECKPOINT_203 NULL | ||
791 | +#define D2S_QUEST_CHECKPOINT_204 NULL | ||
792 | +#define D2S_QUEST_CHECKPOINT_205 NULL | ||
793 | +#define D2S_QUEST_CHECKPOINT_206 NULL | ||
794 | +#define D2S_QUEST_CHECKPOINT_207 NULL | ||
795 | +// Khalim's Will | ||
796 | +#define D2S_QUEST_CHECKPOINT_208 NULL | ||
797 | +#define D2S_QUEST_CHECKPOINT_209 NULL | ||
798 | +#define D2S_QUEST_CHECKPOINT_210 NULL | ||
799 | +#define D2S_QUEST_CHECKPOINT_211 NULL | ||
800 | +#define D2S_QUEST_CHECKPOINT_212 NULL | ||
801 | +#define D2S_QUEST_CHECKPOINT_213 NULL | ||
802 | +#define D2S_QUEST_CHECKPOINT_214 NULL | ||
803 | +#define D2S_QUEST_CHECKPOINT_215 NULL | ||
804 | +#define D2S_QUEST_CHECKPOINT_216 NULL | ||
805 | +#define D2S_QUEST_CHECKPOINT_217 NULL | ||
806 | +#define D2S_QUEST_CHECKPOINT_218 NULL | ||
807 | +#define D2S_QUEST_CHECKPOINT_219 NULL | ||
808 | +#define D2S_QUEST_CHECKPOINT_220 NULL | ||
809 | +#define D2S_QUEST_CHECKPOINT_221 NULL | ||
810 | +#define D2S_QUEST_CHECKPOINT_222 NULL | ||
811 | +#define D2S_QUEST_CHECKPOINT_223 NULL | ||
812 | +// Blade of the Old Religion | ||
813 | +#define D2S_QUEST_CHECKPOINT_224 NULL | ||
814 | +#define D2S_QUEST_CHECKPOINT_225 NULL | ||
815 | +#define D2S_QUEST_CHECKPOINT_226 "Picked the Gidbinn" | ||
816 | +#define D2S_QUEST_CHECKPOINT_227 "Hratli asked you to find the Gidbinn" | ||
817 | +#define D2S_QUEST_CHECKPOINT_228 NULL | ||
818 | +#define D2S_QUEST_CHECKPOINT_229 NULL | ||
819 | +#define D2S_QUEST_CHECKPOINT_230 NULL | ||
820 | +#define D2S_QUEST_CHECKPOINT_231 NULL | ||
821 | +#define D2S_QUEST_CHECKPOINT_232 NULL | ||
822 | +#define D2S_QUEST_CHECKPOINT_233 NULL | ||
823 | +#define D2S_QUEST_CHECKPOINT_234 NULL | ||
824 | +#define D2S_QUEST_CHECKPOINT_235 NULL | ||
825 | +#define D2S_QUEST_CHECKPOINT_236 NULL | ||
826 | +#define D2S_QUEST_CHECKPOINT_237 NULL | ||
827 | +#define D2S_QUEST_CHECKPOINT_238 NULL | ||
828 | +#define D2S_QUEST_CHECKPOINT_239 NULL | ||
829 | +// The Golden Bird | ||
830 | +#define D2S_QUEST_CHECKPOINT_240 NULL | ||
831 | +#define D2S_QUEST_CHECKPOINT_241 NULL | ||
832 | +#define D2S_QUEST_CHECKPOINT_242 "Spoke to Cain about the Jade Figurine" | ||
833 | +#define D2S_QUEST_CHECKPOINT_243 NULL | ||
834 | +#define D2S_QUEST_CHECKPOINT_244 "Spoke to Cain about the Golden Bird" | ||
835 | +// This is cleared when you drink it, to avoid players from cloning the item and drinking it more than once | ||
836 | +#define D2S_QUEST_CHECKPOINT_245 "Alkor gave you the Potion of Life" | ||
837 | +#define D2S_QUEST_CHECKPOINT_246 "Found the Jade Figurine" | ||
838 | +#define D2S_QUEST_CHECKPOINT_247 NULL | ||
839 | +#define D2S_QUEST_CHECKPOINT_248 NULL | ||
840 | +#define D2S_QUEST_CHECKPOINT_249 NULL | ||
841 | +#define D2S_QUEST_CHECKPOINT_250 NULL | ||
842 | +#define D2S_QUEST_CHECKPOINT_251 NULL | ||
843 | +#define D2S_QUEST_CHECKPOINT_252 NULL | ||
844 | +#define D2S_QUEST_CHECKPOINT_253 NULL | ||
845 | +#define D2S_QUEST_CHECKPOINT_254 NULL | ||
846 | +#define D2S_QUEST_CHECKPOINT_255 NULL | ||
847 | +// The Blackened Temple | ||
848 | +#define D2S_QUEST_CHECKPOINT_256 NULL | ||
849 | +#define D2S_QUEST_CHECKPOINT_257 NULL | ||
850 | +#define D2S_QUEST_CHECKPOINT_258 NULL | ||
851 | +#define D2S_QUEST_CHECKPOINT_259 NULL | ||
852 | +#define D2S_QUEST_CHECKPOINT_260 NULL | ||
853 | +#define D2S_QUEST_CHECKPOINT_261 NULL | ||
854 | +#define D2S_QUEST_CHECKPOINT_262 NULL | ||
855 | +#define D2S_QUEST_CHECKPOINT_263 NULL | ||
856 | +#define D2S_QUEST_CHECKPOINT_264 NULL | ||
857 | +#define D2S_QUEST_CHECKPOINT_265 NULL | ||
858 | +#define D2S_QUEST_CHECKPOINT_266 NULL | ||
859 | +#define D2S_QUEST_CHECKPOINT_267 NULL | ||
860 | +#define D2S_QUEST_CHECKPOINT_268 NULL | ||
861 | +#define D2S_QUEST_CHECKPOINT_269 NULL | ||
862 | +#define D2S_QUEST_CHECKPOINT_270 NULL | ||
863 | +#define D2S_QUEST_CHECKPOINT_271 NULL | ||
864 | +// The Guardian | ||
865 | +#define D2S_QUEST_CHECKPOINT_272 NULL | ||
866 | +#define D2S_QUEST_CHECKPOINT_273 NULL | ||
867 | +#define D2S_QUEST_CHECKPOINT_274 NULL | ||
868 | +#define D2S_QUEST_CHECKPOINT_275 NULL | ||
869 | +#define D2S_QUEST_CHECKPOINT_276 NULL | ||
870 | +#define D2S_QUEST_CHECKPOINT_277 NULL | ||
871 | +#define D2S_QUEST_CHECKPOINT_278 NULL | ||
872 | +#define D2S_QUEST_CHECKPOINT_279 NULL | ||
873 | +#define D2S_QUEST_CHECKPOINT_280 NULL | ||
874 | +#define D2S_QUEST_CHECKPOINT_281 NULL | ||
875 | +#define D2S_QUEST_CHECKPOINT_282 NULL | ||
876 | +#define D2S_QUEST_CHECKPOINT_283 NULL | ||
877 | +#define D2S_QUEST_CHECKPOINT_284 NULL | ||
878 | +#define D2S_QUEST_CHECKPOINT_285 NULL | ||
879 | +#define D2S_QUEST_CHECKPOINT_286 NULL | ||
880 | +#define D2S_QUEST_CHECKPOINT_287 NULL | ||
881 | +// The Fallen Angel | ||
882 | +#define D2S_QUEST_CHECKPOINT_288 NULL | ||
883 | +#define D2S_QUEST_CHECKPOINT_289 NULL | ||
884 | +#define D2S_QUEST_CHECKPOINT_290 NULL | ||
885 | +#define D2S_QUEST_CHECKPOINT_291 NULL | ||
886 | +#define D2S_QUEST_CHECKPOINT_292 NULL | ||
887 | +#define D2S_QUEST_CHECKPOINT_293 NULL | ||
888 | +#define D2S_QUEST_CHECKPOINT_294 NULL | ||
889 | +#define D2S_QUEST_CHECKPOINT_295 NULL | ||
890 | +#define D2S_QUEST_CHECKPOINT_296 NULL | ||
891 | +#define D2S_QUEST_CHECKPOINT_297 NULL | ||
892 | +#define D2S_QUEST_CHECKPOINT_298 NULL | ||
893 | +#define D2S_QUEST_CHECKPOINT_299 NULL | ||
894 | +#define D2S_QUEST_CHECKPOINT_300 NULL | ||
895 | +#define D2S_QUEST_CHECKPOINT_301 NULL | ||
896 | +#define D2S_QUEST_CHECKPOINT_302 NULL | ||
897 | +#define D2S_QUEST_CHECKPOINT_303 NULL | ||
898 | +// Terror's End | ||
899 | +#define D2S_QUEST_CHECKPOINT_304 NULL | ||
900 | +#define D2S_QUEST_CHECKPOINT_305 NULL | ||
901 | +#define D2S_QUEST_CHECKPOINT_306 NULL | ||
902 | +#define D2S_QUEST_CHECKPOINT_307 NULL | ||
903 | +#define D2S_QUEST_CHECKPOINT_308 NULL | ||
904 | +#define D2S_QUEST_CHECKPOINT_309 NULL | ||
905 | +#define D2S_QUEST_CHECKPOINT_310 NULL | ||
906 | +#define D2S_QUEST_CHECKPOINT_311 NULL | ||
907 | +#define D2S_QUEST_CHECKPOINT_312 NULL | ||
908 | +#define D2S_QUEST_CHECKPOINT_313 NULL | ||
909 | +#define D2S_QUEST_CHECKPOINT_314 NULL | ||
910 | +#define D2S_QUEST_CHECKPOINT_315 NULL | ||
911 | +#define D2S_QUEST_CHECKPOINT_316 NULL | ||
912 | +#define D2S_QUEST_CHECKPOINT_317 NULL | ||
913 | +#define D2S_QUEST_CHECKPOINT_318 NULL | ||
914 | +#define D2S_QUEST_CHECKPOINT_319 NULL | ||
915 | +// Hell's Forge | ||
916 | +#define D2S_QUEST_CHECKPOINT_320 NULL | ||
917 | +#define D2S_QUEST_CHECKPOINT_321 NULL | ||
918 | +#define D2S_QUEST_CHECKPOINT_322 NULL | ||
919 | +#define D2S_QUEST_CHECKPOINT_323 NULL | ||
920 | +#define D2S_QUEST_CHECKPOINT_324 NULL | ||
921 | +#define D2S_QUEST_CHECKPOINT_325 NULL | ||
922 | +#define D2S_QUEST_CHECKPOINT_326 NULL | ||
923 | +#define D2S_QUEST_CHECKPOINT_327 NULL | ||
924 | +#define D2S_QUEST_CHECKPOINT_328 NULL | ||
925 | +#define D2S_QUEST_CHECKPOINT_329 NULL | ||
926 | +#define D2S_QUEST_CHECKPOINT_330 NULL | ||
927 | +#define D2S_QUEST_CHECKPOINT_331 NULL | ||
928 | +#define D2S_QUEST_CHECKPOINT_332 NULL | ||
929 | +#define D2S_QUEST_CHECKPOINT_333 NULL | ||
930 | +#define D2S_QUEST_CHECKPOINT_334 NULL | ||
931 | +#define D2S_QUEST_CHECKPOINT_335 NULL | ||
932 | +// Siege on Harrogath | ||
933 | +#define D2S_QUEST_CHECKPOINT_336 NULL | ||
934 | +#define D2S_QUEST_CHECKPOINT_337 NULL | ||
935 | +#define D2S_QUEST_CHECKPOINT_338 NULL | ||
936 | +// Apparently, this one is cleared after you kill him AND speak to Larzuk, at which point, bit 5 is set | ||
937 | +#define D2S_QUEST_CHECKPOINT_339 "Found Shenk the Overseer" | ||
938 | +#define D2S_QUEST_CHECKPOINT_340 NULL | ||
939 | +#define D2S_QUEST_CHECKPOINT_341 "Larzuk offers to socket an item" | ||
940 | +#define D2S_QUEST_CHECKPOINT_342 NULL | ||
941 | +#define D2S_QUEST_CHECKPOINT_343 NULL | ||
942 | +#define D2S_QUEST_CHECKPOINT_344 NULL | ||
943 | +#define D2S_QUEST_CHECKPOINT_345 NULL | ||
944 | +#define D2S_QUEST_CHECKPOINT_346 NULL | ||
945 | +#define D2S_QUEST_CHECKPOINT_347 NULL | ||
946 | +#define D2S_QUEST_CHECKPOINT_348 NULL | ||
947 | +#define D2S_QUEST_CHECKPOINT_349 NULL | ||
948 | +#define D2S_QUEST_CHECKPOINT_350 NULL | ||
949 | +#define D2S_QUEST_CHECKPOINT_351 NULL | ||
950 | +// Rescue on Mount Arreat | ||
951 | +#define D2S_QUEST_CHECKPOINT_352 NULL | ||
952 | +#define D2S_QUEST_CHECKPOINT_353 NULL | ||
953 | +#define D2S_QUEST_CHECKPOINT_354 NULL | ||
954 | +#define D2S_QUEST_CHECKPOINT_355 NULL | ||
955 | +#define D2S_QUEST_CHECKPOINT_356 NULL | ||
956 | +#define D2S_QUEST_CHECKPOINT_357 NULL | ||
957 | +#define D2S_QUEST_CHECKPOINT_358 NULL | ||
958 | +#define D2S_QUEST_CHECKPOINT_359 NULL | ||
959 | +#define D2S_QUEST_CHECKPOINT_360 NULL | ||
960 | +#define D2S_QUEST_CHECKPOINT_361 NULL | ||
961 | +#define D2S_QUEST_CHECKPOINT_362 NULL | ||
962 | +#define D2S_QUEST_CHECKPOINT_363 NULL | ||
963 | +#define D2S_QUEST_CHECKPOINT_364 NULL | ||
964 | +#define D2S_QUEST_CHECKPOINT_365 NULL | ||
965 | +#define D2S_QUEST_CHECKPOINT_366 NULL | ||
966 | +#define D2S_QUEST_CHECKPOINT_367 NULL | ||
967 | +// Prison of Ice | ||
968 | +#define D2S_QUEST_CHECKPOINT_368 NULL | ||
969 | +#define D2S_QUEST_CHECKPOINT_369 NULL | ||
970 | +#define D2S_QUEST_CHECKPOINT_370 NULL | ||
971 | +#define D2S_QUEST_CHECKPOINT_371 NULL | ||
972 | +#define D2S_QUEST_CHECKPOINT_372 NULL | ||
973 | +#define D2S_QUEST_CHECKPOINT_373 NULL | ||
974 | +#define D2S_QUEST_CHECKPOINT_374 NULL | ||
975 | +// This is necessary to correctly calculate the player's resistances, as these are not stored anywhere, | ||
976 | +// but determined from current equipment and this bit | ||
977 | +#define D2S_QUEST_CHECKPOINT_375 "You read the Scroll of Resistance" | ||
978 | +#define D2S_QUEST_CHECKPOINT_376 "Rescued Anya and talked to Malah" | ||
979 | +#define D2S_QUEST_CHECKPOINT_377 NULL | ||
980 | +#define D2S_QUEST_CHECKPOINT_378 NULL | ||
981 | +#define D2S_QUEST_CHECKPOINT_379 NULL | ||
982 | +#define D2S_QUEST_CHECKPOINT_380 NULL | ||
983 | +#define D2S_QUEST_CHECKPOINT_381 NULL | ||
984 | +#define D2S_QUEST_CHECKPOINT_382 NULL | ||
985 | +#define D2S_QUEST_CHECKPOINT_383 NULL | ||
986 | +// Betrayal of Harrogath | ||
987 | +#define D2S_QUEST_CHECKPOINT_384 NULL | ||
988 | +#define D2S_QUEST_CHECKPOINT_385 NULL | ||
989 | +#define D2S_QUEST_CHECKPOINT_386 NULL | ||
990 | +#define D2S_QUEST_CHECKPOINT_387 NULL | ||
991 | +#define D2S_QUEST_CHECKPOINT_388 "Anya offers to personalise an item for you" | ||
992 | +#define D2S_QUEST_CHECKPOINT_389 NULL | ||
993 | +#define D2S_QUEST_CHECKPOINT_390 NULL | ||
994 | +#define D2S_QUEST_CHECKPOINT_391 NULL | ||
995 | +#define D2S_QUEST_CHECKPOINT_392 NULL | ||
996 | +#define D2S_QUEST_CHECKPOINT_393 NULL | ||
997 | +#define D2S_QUEST_CHECKPOINT_394 NULL | ||
998 | +#define D2S_QUEST_CHECKPOINT_395 NULL | ||
999 | +#define D2S_QUEST_CHECKPOINT_396 NULL | ||
1000 | +#define D2S_QUEST_CHECKPOINT_397 NULL | ||
1001 | +#define D2S_QUEST_CHECKPOINT_398 NULL | ||
1002 | +#define D2S_QUEST_CHECKPOINT_399 NULL | ||
1003 | +// Rite of Passage | ||
1004 | +#define D2S_QUEST_CHECKPOINT_400 NULL | ||
1005 | +#define D2S_QUEST_CHECKPOINT_401 NULL | ||
1006 | +#define D2S_QUEST_CHECKPOINT_402 NULL | ||
1007 | +#define D2S_QUEST_CHECKPOINT_403 NULL | ||
1008 | +#define D2S_QUEST_CHECKPOINT_404 NULL | ||
1009 | +#define D2S_QUEST_CHECKPOINT_405 NULL | ||
1010 | +#define D2S_QUEST_CHECKPOINT_406 NULL | ||
1011 | +#define D2S_QUEST_CHECKPOINT_407 NULL | ||
1012 | +#define D2S_QUEST_CHECKPOINT_408 NULL | ||
1013 | +#define D2S_QUEST_CHECKPOINT_409 NULL | ||
1014 | +#define D2S_QUEST_CHECKPOINT_410 NULL | ||
1015 | +#define D2S_QUEST_CHECKPOINT_411 NULL | ||
1016 | +#define D2S_QUEST_CHECKPOINT_412 NULL | ||
1017 | +#define D2S_QUEST_CHECKPOINT_413 NULL | ||
1018 | +#define D2S_QUEST_CHECKPOINT_414 NULL | ||
1019 | +#define D2S_QUEST_CHECKPOINT_415 NULL | ||
1020 | +// Eve of Destruction | ||
1021 | +#define D2S_QUEST_CHECKPOINT_416 NULL | ||
1022 | +#define D2S_QUEST_CHECKPOINT_417 NULL | ||
1023 | +#define D2S_QUEST_CHECKPOINT_418 NULL | ||
1024 | +#define D2S_QUEST_CHECKPOINT_419 NULL | ||
1025 | +#define D2S_QUEST_CHECKPOINT_420 "Larzuk congratulated you" | ||
1026 | +#define D2S_QUEST_CHECKPOINT_421 "Cain congratulated you" | ||
1027 | +#define D2S_QUEST_CHECKPOINT_422 "Malah congratulated you" | ||
1028 | +#define D2S_QUEST_CHECKPOINT_423 "Spoke to Tyrael" | ||
1029 | +#define D2S_QUEST_CHECKPOINT_424 "Spoke to Qual-Kehk" | ||
1030 | +#define D2S_QUEST_CHECKPOINT_425 "Spoke to Anya" | ||
1031 | +#define D2S_QUEST_CHECKPOINT_426 NULL | ||
1032 | +#define D2S_QUEST_CHECKPOINT_427 NULL | ||
1033 | +#define D2S_QUEST_CHECKPOINT_428 NULL | ||
1034 | +#define D2S_QUEST_CHECKPOINT_429 NULL | ||
1035 | +#define D2S_QUEST_CHECKPOINT_430 NULL | ||
1036 | +#define D2S_QUEST_CHECKPOINT_431 NULL | ||
1037 | + | ||
568 | #endif | 1038 | #endif |
569 | \ No newline at end of file | 1039 | \ No newline at end of file |