summaryrefslogtreecommitdiffstats
path: root/src/common/misc.h
blob: 00013327a11541e6f56066e8a85e58b608d75463 (plain)
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// *
// * This program is free software: you can redistribute it and/or modify
// * it under the terms of the GNU General Public License as published by
// * the Free Software Foundation, either version 3 of the License, or
// * (at your option) any later version.
// *
// * This program is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// * GNU General Public License for more details.
// *
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see  http://www.gnu.org/licenses/.

// misc.h

#pragma once


#include <time.h>


#include "common/metafile.h"
#include "common/event.h"


extern CMetaFile    g_metafile;



// Existing classes.

enum ClassType
{
    CLASS_EVENT         = 1,
    CLASS_INTERFACE     = 2,
    CLASS_MAIN          = 3,
    CLASS_ENGINE        = 4,
    CLASS_TERRAIN       = 5,
    CLASS_OBJECT        = 6,
    CLASS_PHYSICS       = 7,
    CLASS_BRAIN         = 8,
    CLASS_CAMERA        = 9,
    CLASS_LIGHT         = 10,
    CLASS_PARTICULE     = 11,
    CLASS_AUTO          = 12,
    CLASS_DISPLAYTEXT   = 13,
    CLASS_PYRO          = 14,
    CLASS_SCRIPT        = 15,
    CLASS_TEXT          = 16,
    CLASS_STUDIO        = 17,
    CLASS_WATER         = 18,
    CLASS_CLOUD         = 19,
    CLASS_MOTION        = 20,
    CLASS_SOUND         = 21,
    CLASS_PLANET        = 22,
    CLASS_TASKMANAGER   = 23,
    CLASS_DIALOG        = 24,
    CLASS_MAP           = 25,
    CLASS_SHORT         = 26,
    CLASS_BLITZ         = 27,
};

const int CLASS_MAX = 30;



enum Error
{
    ERR_OK          = 0,        // ok
    ERR_GENERIC     = 1,        // any error
    ERR_CONTINUE        = 2,        // continues
    ERR_STOP        = 3,        // stops
    ERR_CMD         = 4,        // unknown command
    ERR_INSTALL     = 20,       // incorrectly installed program
    ERR_NOCD        = 21,       // CD not found
    ERR_MANIP_VEH       = 100,      // inappropriate vehicle
    ERR_MANIP_FLY       = 101,      // impossible in flight
    ERR_MANIP_BUSY      = 102,      // taking: hands already occupied
    ERR_MANIP_NIL       = 103,      // taking: nothing has to take
    ERR_MANIP_MOTOR     = 105,      // busy: impossible to move
    ERR_MANIP_OCC       = 106,      // busy: location already occupied
    ERR_MANIP_FRIEND    = 107,      // no other vehicle
    ERR_MANIP_RADIO     = 108,      // impossible because radioactive
    ERR_MANIP_WATER     = 109,      // not possible under water
    ERR_MANIP_EMPTY     = 110,      // nothing to deposit
    ERR_BUILD_FLY       = 120,      // not possible in flight
    ERR_BUILD_WATER     = 121,      // not possible under water
    ERR_BUILD_ENERGY    = 122,      // not enough energy
    ERR_BUILD_METALAWAY = 123,      // lack of metal (too far)
    ERR_BUILD_METALNEAR = 124,      // lack of metal (too close)
    ERR_BUILD_METALINEX = 125,      // lack of metal
    ERR_BUILD_FLAT      = 126,      // not enough flat ground
    ERR_BUILD_FLATLIT   = 127,      // not enough flat ground space
    ERR_BUILD_BUSY      = 128,      // location occupied
    ERR_BUILD_BASE      = 129,      // too close to the rocket
    ERR_BUILD_NARROW    = 130,      // buildings too close
    ERR_BUILD_MOTOR     = 131,      // built: not possible in movement
    ERR_SEARCH_FLY      = 140,      // not possible in flight
    ERR_SEARCH_VEH      = 141,      // inappropriate vehicle
    ERR_SEARCH_MOTOR    = 142,      // impossible in movement
    ERR_TERRA_VEH       = 150,      // inappropriate vehicle
    ERR_TERRA_ENERGY    = 151,      // not enough energy
    ERR_TERRA_FLOOR     = 152,      // inappropriate ground
    ERR_TERRA_BUILDING  = 153,      // building too close
    ERR_TERRA_OBJECT    = 154,      // object too close
    ERR_FIRE_VEH        = 160,      // inappropriate vehicle
    ERR_FIRE_ENERGY     = 161,      // not enough energy
    ERR_FIRE_FLY        = 162,      // not possible in flight
    ERR_RECOVER_VEH     = 170,      // inappropriate vehicle
    ERR_RECOVER_ENERGY  = 171,      // not enough energy
    ERR_RECOVER_NULL    = 172,      // lack of ruin
    ERR_CONVERT_EMPTY   = 180,      // no stone was transformed
    ERR_SHIELD_VEH      = 190,      // inappropriate vehicle
    ERR_SHIELD_ENERGY   = 191,      // not enough energy
    ERR_MOVE_IMPOSSIBLE = 200,      // move impossible
    ERR_FIND_IMPOSSIBLE = 201,      // find impossible
    ERR_GOTO_IMPOSSIBLE = 210,      // goto impossible
    ERR_GOTO_ITER       = 211,      // goto too complicated
    ERR_GOTO_BUSY       = 212,      // goto destination occupied
    ERR_DERRICK_NULL    = 300,      // no ore underground
    ERR_STATION_NULL    = 301,      // no energy underground
    ERR_TOWER_POWER     = 310,      // no battery
    ERR_TOWER_ENERGY    = 311,      // more energy
    ERR_RESEARCH_POWER  = 320,      // no battery
    ERR_RESEARCH_ENERGY = 321,      // more energy
    ERR_RESEARCH_TYPE   = 322,      // the wrong type of battery
    ERR_RESEARCH_ALREADY    = 323,      // research already done
    ERR_ENERGY_NULL     = 330,      // no energy underground
    ERR_ENERGY_LOW      = 331,      // not enough energy
    ERR_ENERGY_EMPTY    = 332,      // lack of metal
    ERR_ENERGY_BAD      = 333,      // transforms only the metal
    ERR_BASE_DLOCK      = 340,      // doors locked
    ERR_BASE_DHUMAN     = 341,      // you must be on spaceship
    ERR_LABO_NULL       = 350,      // nothing to analyze
    ERR_LABO_BAD        = 351,      // analyzes only organic ball
    ERR_LABO_ALREADY    = 352,      // analysis already made
    ERR_NUCLEAR_NULL    = 360,      // no energy underground
    ERR_NUCLEAR_LOW     = 361,      // not enough energy
    ERR_NUCLEAR_EMPTY   = 362,      // lack of uranium
    ERR_NUCLEAR_BAD     = 363,      // transforms only uranium
    ERR_FACTORY_NULL    = 370,      // no metal
    ERR_FACTORY_NEAR    = 371,      // vehicle too close
    ERR_RESET_NEAR      = 380,      // vehicle too close
    ERR_INFO_NULL       = 390,      // no information terminal
    ERR_VEH_VIRUS       = 400,      // vehicle infected by a virus
    ERR_BAT_VIRUS       = 401,      // building infected by a virus
    ERR_VEH_POWER       = 500,      // no battery
    ERR_VEH_ENERGY      = 501,      // more energy
    ERR_FLAG_FLY        = 510,      // impossible in flight
    ERR_FLAG_WATER      = 511,      // impossible during swimming
    ERR_FLAG_MOTOR      = 512,      // impossible in movement
    ERR_FLAG_BUSY       = 513,      // taking: already creating flag
    ERR_FLAG_CREATE     = 514,      // too many flags
    ERR_FLAG_PROXY      = 515,      // too close
    ERR_FLAG_DELETE     = 516,      // nothing to remove
    ERR_MISSION_NOTERM  = 600,      // Mission not completed
    ERR_DELETEMOBILE    = 700,      // vehicle destroyed
    ERR_DELETEBUILDING  = 701,      // building destroyed
    ERR_TOOMANY     = 702,      // too many objects
    ERR_OBLIGATORYTOKEN = 800,      // compulsory instruction missing
    ERR_PROHIBITEDTOKEN = 801,      // instruction prohibited

    INFO_FIRST      = 10000,    // first information
    INFO_BUILD      = 10001,    // construction builded
    INFO_CONVERT        = 10002,    // metal available
    INFO_RESEARCH       = 10003,    // search ended
    INFO_FACTORY        = 10004,    // vehicle manufactured
    INFO_LABO       = 10005,    // analysis ended
    INFO_ENERGY     = 10006,    // battery available
    INFO_NUCLEAR        = 10007,    // nuclear battery available
    INFO_FINDING        = 10008,    // nuclear battery available
    INFO_MARKPOWER      = 10020,    // location for station found
    INFO_MARKURANIUM    = 10021,    // location for derrick found
    INFO_MARKSTONE      = 10022,    // location for derrick found
    INFO_MARKKEYa       = 10023,    // location for derrick found
    INFO_MARKKEYb       = 10024,    // location for derrick found
    INFO_MARKKEYc       = 10025,    // location for derrick found
    INFO_MARKKEYd       = 10026,    // location for derrick found
    INFO_RESEARCHTANK   = 10030,    // research ended
    INFO_RESEARCHFLY    = 10031,    // research ended
    INFO_RESEARCHTHUMP  = 10032,    // research ended
    INFO_RESEARCHCANON  = 10033,    // research ended
    INFO_RESEARCHTOWER  = 10034,    // research ended
    INFO_RESEARCHPHAZER = 10035,    // research ended
    INFO_RESEARCHSHIELD = 10036,    // research ended
    INFO_RESEARCHATOMIC = 10037,    // research ended
    INFO_WIN        = 10040,    // win
    INFO_LOST       = 10041,    // lost
    INFO_LOSTq      = 10042,    // lost immediately
    INFO_WRITEOK        = 10043,    // record done
    INFO_DELETEPATH     = 10050,    // way mark deleted
    INFO_DELETEMOTHER   = 10100,    // insect killed
    INFO_DELETEANT      = 10101,    // insect killed
    INFO_DELETEBEE      = 10102,    // insect killed
    INFO_DELETEWORM     = 10103,    // insect killed
    INFO_DELETESPIDER   = 10104,    // insect killed
    INFO_BEGINSATCOM    = 10105,    // use your SatCom
};


// Keyboard state.

const int KS_PAGEUP         = (1<<4);
const int KS_PAGEDOWN       = (1<<5);
const int KS_SHIFT          = (1<<6);
const int KS_CONTROL        = (1<<7);
const int KS_MLEFT          = (1<<8);
const int KS_MRIGHT         = (1<<9);
const int KS_NUMUP          = (1<<10);
const int KS_NUMDOWN        = (1<<11);
const int KS_NUMLEFT        = (1<<12);
const int KS_NUMRIGHT       = (1<<13);
const int KS_NUMPLUS        = (1<<14);
const int KS_NUMMINUS       = (1<<15);


// Procedures.

extern EventType GetUniqueEventType();

extern char GetNoAccent(char letter);
extern char GetToUpper(char letter);
extern char GetToLower(char letter);

extern void TimeToAscii(time_t time, char *buffer);

extern bool CopyFileToTemp(char* filename);
extern bool CopyFileListToTemp(char* filename, int* list, int total);
extern void AddExt(char* filename, char* ext);
extern void UserDir(bool bUser, char* dir);
extern void UserDir(char* buffer, const char* dir, const char* def);

extern char GetLanguageLetter();