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 | 58 | D2S_ACT5 |
59 | 59 | }; |
60 | 60 | |
61 | +// TODO: Add file hex offsets for each field | |
61 | 62 | typedef struct __attribute__((packed)){ |
62 | 63 | uint32_t signature; |
63 | 64 | uint32_t versionID; |
... | ... | @@ -74,7 +75,7 @@ typedef struct __attribute__((packed)){ |
74 | 75 | uint32_t unknown3; // TODO |
75 | 76 | uint32_t lastPlayed; |
76 | 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 | 79 | uint32_t leftAbility; |
79 | 80 | uint32_t rightAbility; |
80 | 81 | uint32_t leftAbilityAlt; // Left ability when alternative weapon set (II) is selected |
... | ... | @@ -91,7 +92,7 @@ typedef struct __attribute__((packed)){ |
91 | 92 | uint8_t unknown6[144]; // TODO |
92 | 93 | D2QuestData questData; |
93 | 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 | 96 | } D2CharHeader; |
96 | 97 | |
97 | 98 | uint32_t calcChecksum(D2CharHeader* c, void* charData); | ... | ... |
d2quest.c
1 | 1 | #include "d2char.h" |
2 | 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 | 87 | \ No newline at end of file | ... | ... |
d2quest.h
... | ... | @@ -3,6 +3,8 @@ |
3 | 3 | |
4 | 4 | #include <stdint.h> |
5 | 5 | |
6 | +#include "d2strings.h" | |
7 | + | |
6 | 8 | #define D2S_QUESTDATA_HEADER_LENGTH 4 |
7 | 9 | |
8 | 10 | enum D2S_QUEST { |
... | ... | @@ -36,113 +38,452 @@ enum D2S_QUEST { |
36 | 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 | 488 | typedef struct __attribute__((packed)) { |
148 | 489 | uint16_t actStarted; |
... | ... | @@ -154,12 +495,13 @@ typedef struct __attribute__((packed)) { |
154 | 495 | uint16_t actStarted; |
155 | 496 | uint16_t unknown1[2]; |
156 | 497 | uint16_t questCheckpoints[6]; |
157 | - uint16_t unknown2[7]; | |
158 | 498 | } D2XActData; |
159 | 499 | |
160 | 500 | typedef struct __attribute__((packed)) { |
161 | 501 | D2ActData actData[4]; |
162 | 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 | 505 | } D2Quests; |
164 | 506 | |
165 | 507 | typedef struct __attribute__((packed)) { |
... | ... | @@ -169,8 +511,26 @@ typedef struct __attribute__((packed)) { |
169 | 511 | D2Quests quests[3]; // 1 set for each difficulty |
170 | 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 | 536 | #endif |
177 | 537 | \ No newline at end of file | ... | ... |
d2strings.h
... | ... | @@ -565,4 +565,474 @@ const char* D2S_CHARPROGRESS_EXPANSION_TIER3_NAME_HARDCORE = "Guardian"; |
565 | 565 | #define D2S_MERC_ID_28 "Barbarian [Hell]" |
566 | 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 | 1038 | #endif |
569 | 1039 | \ No newline at end of file | ... | ... |