-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdefs.h
More file actions
129 lines (114 loc) · 3.54 KB
/
Copy pathdefs.h
File metadata and controls
129 lines (114 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#ifndef DEFS_H
#define DEFS_H
#include <stdbool.h>
#include <semaphore.h>
#include <pthread.h>
#define MAX_ROOM_NAME 64
#define MAX_HUNTER_NAME 64
#define MAX_ROOMS 24
#define MAX_ROOM_OCCUPANCY 8
#define MAX_CONNECTIONS 8
#define ENTITY_BOREDOM_MAX 15
#define HUNTER_FEAR_MAX 15
#define DEFAULT_GHOST_ID 68057
typedef unsigned char EvidenceByte;
enum LogReason {
LR_EVIDENCE = 0,
LR_BORED = 1,
LR_AFRAID = 2
};
enum EvidenceType {
EV_EMF = 1 << 0,
EV_ORBS = 1 << 1,
EV_RADIO = 1 << 2,
EV_TEMPERATURE = 1 << 3,
EV_FINGERPRINTS = 1 << 4,
EV_WRITING = 1 << 5,
EV_INFRARED = 1 << 6,
};
enum GhostType {
GH_POLTERGEIST = EV_FINGERPRINTS | EV_TEMPERATURE | EV_WRITING,
GH_THE_MIMIC = EV_FINGERPRINTS | EV_TEMPERATURE | EV_RADIO,
GH_HANTU = EV_FINGERPRINTS | EV_TEMPERATURE | EV_ORBS,
GH_JINN = EV_FINGERPRINTS | EV_TEMPERATURE | EV_EMF,
GH_PHANTOM = EV_FINGERPRINTS | EV_INFRARED | EV_RADIO,
GH_BANSHEE = EV_FINGERPRINTS | EV_INFRARED | EV_ORBS,
GH_GORYO = EV_FINGERPRINTS | EV_INFRARED | EV_EMF,
GH_BULLIES = EV_FINGERPRINTS | EV_WRITING | EV_RADIO,
GH_MYLING = EV_FINGERPRINTS | EV_WRITING | EV_EMF,
GH_OBAKE = EV_FINGERPRINTS | EV_ORBS | EV_EMF,
GH_YUREI = EV_TEMPERATURE | EV_INFRARED | EV_ORBS,
GH_ONI = EV_TEMPERATURE | EV_INFRARED | EV_EMF,
GH_MOROI = EV_TEMPERATURE | EV_WRITING | EV_RADIO,
GH_REVENANT = EV_TEMPERATURE | EV_WRITING | EV_ORBS,
GH_SHADE = EV_TEMPERATURE | EV_WRITING | EV_EMF,
GH_ONRYO = EV_TEMPERATURE | EV_RADIO | EV_ORBS,
GH_THE_TWINS = EV_TEMPERATURE | EV_RADIO | EV_EMF,
GH_DEOGEN = EV_INFRARED | EV_WRITING | EV_RADIO,
GH_THAYE = EV_INFRARED | EV_WRITING | EV_ORBS,
GH_YOKAI = EV_INFRARED | EV_RADIO | EV_ORBS,
GH_WRAITH = EV_INFRARED | EV_RADIO | EV_EMF,
GH_RAIJU = EV_INFRARED | EV_ORBS | EV_EMF,
GH_MARE = EV_WRITING | EV_RADIO | EV_ORBS,
GH_SPIRIT = EV_WRITING | EV_RADIO | EV_EMF,
};
struct CaseFile {
EvidenceByte collected;
bool solved;
sem_t mutex;
};
struct RoomNode {
struct Room* room;
struct RoomNode* next;
};
struct RoomStack {
struct RoomNode* top;
};
struct Room {
char name[MAX_ROOM_NAME];
bool is_exit;
struct Room* connections[MAX_CONNECTIONS];
int connection_count;
struct Hunter* hunters[MAX_ROOM_OCCUPANCY];
int hunter_count;
struct Ghost* ghost;
EvidenceByte evidence;
sem_t mutex;
};
struct Ghost {
int id;
enum GhostType type;
struct Room* current_room;
int boredom;
bool has_exited;
pthread_t thread;
};
struct Hunter {
int id;
char name[MAX_HUNTER_NAME];
struct Room* current_room;
struct CaseFile* case_file;
struct House* house;
enum EvidenceType device;
struct RoomStack breadcrumbs;
int fear;
int boredom;
enum LogReason exit_reason;
bool has_exited;
bool returning;
pthread_t thread;
};
struct House {
struct Room rooms[MAX_ROOMS];
int room_count;
struct Ghost ghost;
struct Hunter* hunters;
int hunter_count;
int hunter_capacity;
struct CaseFile case_file;
struct Room* starting_room;
sem_t input_mutex;
};
void room_init(struct Room* room, const char* name, bool is_exit);
void rooms_connect(struct Room* a, struct Room* b);
#endif