Commit 6d88e3bee20e44c0ba39889e47c17cd5681a5421
1 parent
9debe0f4
Adding waypoint stuff, and a some sanity checks (need a lot more)
Showing
2 changed files
with
90 additions
and
0 deletions
d2waypoints.c
0 → 100644
1 | +#include "d2waypoints.h" | |
2 | + | |
3 | +int isWaypointActivated(D2WaypointsData* d, unsigned int waypoint, unsigned int difficulty) { | |
4 | + if(waypoint > D2S_WAYPOINTSDATA_NUMWAYPOINTS) { | |
5 | + return -1; | |
6 | + } | |
7 | + unsigned int byte = waypoint / 8; | |
8 | + unsigned int offset = waypoint % 8; | |
9 | + return (d->waypoints[difficulty].waypointData[byte] & (1 << offset)) >> offset; | |
10 | +} | |
11 | + | |
12 | +// TODO: Return success | |
13 | +void setWaypointActivated(D2WaypointsData* d, unsigned int waypoint, unsigned int difficulty, int activated) { | |
14 | + if(waypoint > D2S_WAYPOINTSDATA_NUMWAYPOINTS) { | |
15 | + return; | |
16 | + } | |
17 | + unsigned int byte = waypoint / 8; | |
18 | + unsigned int offset = waypoint % 8; | |
19 | + d->waypoints[difficulty].waypointData[byte] |= (1 << offset); | |
20 | +} | |
0 | 21 | \ No newline at end of file | ... | ... |
d2waypoints.h
0 → 100644
1 | +#ifndef D2WAYPOINTS_H | |
2 | +#define D2WAYPOINTS_H | |
3 | + | |
4 | +#include <stdint.h> | |
5 | + | |
6 | +#include "d2strings.h" | |
7 | + | |
8 | +#define D2S_WAYPOINTSDATA_HEADER_LENGTH 2 | |
9 | +#define D2S_WAYPOINTSDATA_LENGTH 5 | |
10 | +#define D2S_WAYPOINTSDATA_NUMWAYPOINTS 39 | |
11 | + | |
12 | +const char* const waypoints[] = { | |
13 | + D2S_WAYPOINT_0, | |
14 | + D2S_WAYPOINT_1, | |
15 | + D2S_WAYPOINT_2, | |
16 | + D2S_WAYPOINT_3, | |
17 | + D2S_WAYPOINT_4, | |
18 | + D2S_WAYPOINT_5, | |
19 | + D2S_WAYPOINT_6, | |
20 | + D2S_WAYPOINT_7, | |
21 | + D2S_WAYPOINT_8, | |
22 | + D2S_WAYPOINT_9, | |
23 | + D2S_WAYPOINT_10, | |
24 | + D2S_WAYPOINT_11, | |
25 | + D2S_WAYPOINT_12, | |
26 | + D2S_WAYPOINT_13, | |
27 | + D2S_WAYPOINT_14, | |
28 | + D2S_WAYPOINT_15, | |
29 | + D2S_WAYPOINT_16, | |
30 | + D2S_WAYPOINT_17, | |
31 | + D2S_WAYPOINT_18, | |
32 | + D2S_WAYPOINT_19, | |
33 | + D2S_WAYPOINT_20, | |
34 | + D2S_WAYPOINT_21, | |
35 | + D2S_WAYPOINT_22, | |
36 | + D2S_WAYPOINT_23, | |
37 | + D2S_WAYPOINT_24, | |
38 | + D2S_WAYPOINT_25, | |
39 | + D2S_WAYPOINT_26, | |
40 | + D2S_WAYPOINT_27, | |
41 | + D2S_WAYPOINT_28, | |
42 | + D2S_WAYPOINT_29, | |
43 | + D2S_WAYPOINT_30, | |
44 | + D2S_WAYPOINT_31, | |
45 | + D2S_WAYPOINT_32, | |
46 | + D2S_WAYPOINT_33, | |
47 | + D2S_WAYPOINT_34, | |
48 | + D2S_WAYPOINT_35, | |
49 | + D2S_WAYPOINT_36, | |
50 | + D2S_WAYPOINT_37, | |
51 | + D2S_WAYPOINT_38 | |
52 | +}; | |
53 | + | |
54 | +typedef struct __attribute__((packed)) { | |
55 | + uint16_t unknown1; // Apparently, always 0x0201 | |
56 | + uint8_t waypointData[D2S_WAYPOINTSDATA_LENGTH]; | |
57 | + uint8_t unknown2[17]; | |
58 | +} D2Waypoints; | |
59 | + | |
60 | +typedef struct __attribute__((packed)) { | |
61 | + const char* header[D2S_WAYPOINTSDATA_HEADER_LENGTH]; // WS | |
62 | + uint32_t unknown1; // This is likely version data | |
63 | + uint16_t size; // in bytes | |
64 | + D2Waypoints waypoints[3]; // 1 set for each difficulty | |
65 | +} D2WaypointsData; | |
66 | + | |
67 | +int isWaypointActivated(D2WaypointsData* d, unsigned int waypoint, unsigned int difficulty); | |
68 | +void setWaypointActivated(D2WaypointsData* d, unsigned int waypoint, unsigned int difficulty, int activated); | |
69 | + | |
70 | +#endif | |
0 | 71 | \ No newline at end of file | ... | ... |