-
Notifications
You must be signed in to change notification settings - Fork 4.1k
/
game_constants.h
236 lines (193 loc) · 8.17 KB
/
game_constants.h
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
#pragma once
#ifndef CATA_SRC_GAME_CONSTANTS_H
#define CATA_SRC_GAME_CONSTANTS_H
#include <map>
#include <string>
#include "calendar.h"
#include "units.h"
// Fixed window sizes.
constexpr int EVEN_MINIMUM_TERM_WIDTH = 80;
constexpr int EVEN_MINIMUM_TERM_HEIGHT = 24;
constexpr int HP_HEIGHT = 14;
constexpr int HP_WIDTH = 7;
constexpr int MINIMAP_HEIGHT = 7;
constexpr int MINIMAP_WIDTH = MINIMAP_HEIGHT;
constexpr int MONINFO_HEIGHT = 12;
constexpr int MONINFO_WIDTH = 48;
constexpr int MESSAGES_HEIGHT = 8;
constexpr int MESSAGES_WIDTH = 48;
constexpr int LOCATION_HEIGHT = 1;
constexpr int LOCATION_WIDTH = 48;
constexpr int STATUS_HEIGHT = 4;
constexpr int STATUS_WIDTH = 55;
constexpr int EXPLOSION_MULTIPLIER = 7;
// Really just a sanity check for functions not tested beyond this. in theory 4096 works (`InvletInvlet).
constexpr int MAX_ITEM_IN_SQUARE = 4096;
// no reason to differ.
constexpr int MAX_ITEM_IN_VEHICLE_STORAGE = MAX_ITEM_IN_SQUARE;
// Sanity checks for volume
constexpr units::volume DEFAULT_TILE_VOLUME = units::from_liter( 1000 );
constexpr units::volume MAX_ITEM_VOLUME = DEFAULT_TILE_VOLUME;
// only can wear a maximum of two of any type of clothing.
constexpr int MAX_WORN_PER_TYPE = 2;
constexpr int MAPSIZE = 11;
constexpr int HALF_MAPSIZE = static_cast<int>( MAPSIZE / 2 );
// SEEX/SEEY define the size of a nonant, or grid.
// All map segments will need to be at least this wide.
constexpr int SEEX = 12;
constexpr int SEEY = SEEX;
constexpr int MAPSIZE_X = SEEX * MAPSIZE;
constexpr int MAPSIZE_Y = SEEY * MAPSIZE;
constexpr int HALF_MAPSIZE_X = SEEX * HALF_MAPSIZE;
constexpr int HALF_MAPSIZE_Y = SEEY * HALF_MAPSIZE;
constexpr int MAX_VIEW_DISTANCE = SEEX * HALF_MAPSIZE;
/**
* Size of the overmap. This is the number of overmap terrain tiles per dimension in one overmap,
* it's just like SEEX/SEEY for submaps.
*/
constexpr int OMAPX = 180;
constexpr int OMAPY = OMAPX;
// Size of a square unit of terrain saved to a directory.
constexpr int SEG_SIZE = 32;
// Size of a square unit of tile memory saved in a single file, in mm_submaps.
constexpr int MM_REG_SIZE = 8;
/**
* Items on the map with at most this distance to the player are considered available for crafting,
* see inventory::form_from_map
*/
constexpr int PICKUP_RANGE = 6;
// Number of z-levels below 0 (not including 0).
constexpr int OVERMAP_DEPTH = 10;
// Number of z-levels above 0 (not including 0).
constexpr int OVERMAP_HEIGHT = 10;
// Total number of z-levels.
constexpr int OVERMAP_LAYERS = 1 + OVERMAP_DEPTH + OVERMAP_HEIGHT;
// Maximum move cost when handling an item.
constexpr int MAX_HANDLING_COST = 400;
// Move cost of accessing an item in inventory.
constexpr int INVENTORY_HANDLING_PENALTY = 100;
// Move cost of accessing an item lying on the map. TODO: Less if player is crouching.
constexpr int MAP_HANDLING_PENALTY = 80;
// Move cost of accessing an item lying on a vehicle.
constexpr int VEHICLE_HANDLING_PENALTY = 80;
// Amount by which to charge an item for each unit of plutonium cell.
constexpr int PLUTONIUM_CHARGES = 500;
// Temperature constants.
namespace temperatures
{
// temperature at which something starts is considered HOT.
constexpr units::temperature hot = units::from_fahrenheit( 100 ); // ~ 38 Celsius
// the "normal" temperature midpoint between cold and hot.
constexpr units::temperature normal = units::from_fahrenheit( 70 ); // ~ 21 Celsius
// Temperature inside an active fridge in Fahrenheit.
constexpr units::temperature fridge = units::from_fahrenheit( 37 ); // ~ 2.7 Celsius
// Temperature at which things are considered "cold".
constexpr units::temperature cold = units::from_fahrenheit( 40 ); // ~4.4 C
// Temperature inside an active freezer in Fahrenheit.
constexpr units::temperature freezer = units::from_celsius( -5 ); // -5 Celsius
// Temperature in which water freezes.
constexpr units::temperature freezing = units::from_celsius( 0 ); // 0 Celsius
// Temperature in which water boils.
constexpr units::temperature boiling = units::from_celsius( 100 ); // 100 Celsius
} // namespace temperatures
// Slowest speed at which a gun can be aimed.
constexpr int MAX_AIM_COST = 10;
// Maximum (effective) level for a skill.
constexpr int MAX_SKILL = 10;
// Maximum (effective) level for a stat.
constexpr int MAX_STAT = 14;
// Maximum range at which ranged attacks can be executed.
constexpr int RANGE_HARD_CAP = 60;
// Accuracy levels which a shots tangent must be below.
constexpr double accuracy_headshot = 0.1;
constexpr double accuracy_critical = 0.2;
constexpr double accuracy_goodhit = 0.5;
constexpr double accuracy_standard = 0.8;
constexpr double accuracy_grazing = 1.0;
// The maximum level recoil will ever reach.
// This corresponds to the level of accuracy of a "snap" or "hip" shot.
constexpr double MAX_RECOIL = 3000;
// Minimum item damage output of relevant type to allow using with relevant weapon skill.
constexpr int MELEE_STAT = 5;
// Effective lower bound to combat skill levels when CQB bionic is active.
constexpr int BIO_CQB_LEVEL = 5;
// Minimum size of a horde to show up on the minimap.
constexpr int HORDE_VISIBILITY_SIZE = 3;
// How often a NPC can move one tile on the overmap
constexpr time_duration time_between_npc_OM_moves = 5_minutes;
/**
* Average annual temperature in Kelvin used for climate, weather and temperature calculation.
* Average New England temperature = 43F/6C rounded to int.
*/
constexpr units::temperature AVERAGE_ANNUAL_TEMPERATURE = units::from_fahrenheit( 43 );
/**
* Base starting spring temperature in Kelvin used for climate, weather and temperature calculation.
* New England base spring temperature = 65F/18C rounded to int.
*/
constexpr units::temperature SPRING_TEMPERATURE = units::from_fahrenheit( 65 );
/**
* Used to limit the random seed during noise calculation. A large value flattens the noise generator to zero.
* Windows has a rand limit of 32768, other operating systems can have higher limits.
*/
constexpr int SIMPLEX_NOISE_RANDOM_SEED_LIMIT = 32768;
constexpr float MIN_MANIPULATOR_SCORE = 0.1f;
// the maximum penalty to movecost from a limb value
constexpr float MAX_MOVECOST_MODIFIER = 100.0f;
/**
* activity levels, used for BMR.
* these levels are normally used over the length of
* days to weeks in order to calculate your total BMR
* but we are making it more granular to be able to have
* variable activity levels.
* as such, when determining your activity level
* in the json, think about what it would be if you
* did this activity for a longer period of time.
*/
constexpr float SLEEP_EXERCISE = 0.85f;
constexpr float NO_EXERCISE = 1.0f;
constexpr float LIGHT_EXERCISE = 2.0f;
constexpr float MODERATE_EXERCISE = 4.0f;
constexpr float BRISK_EXERCISE = 6.0f;
constexpr float ACTIVE_EXERCISE = 8.0f;
constexpr float EXTRA_EXERCISE = 10.0f;
const std::map<std::string, float> activity_levels_map = {
{ "SLEEP_EXERCISE", SLEEP_EXERCISE },
{ "NO_EXERCISE", NO_EXERCISE },
{ "LIGHT_EXERCISE", LIGHT_EXERCISE },
{ "MODERATE_EXERCISE", MODERATE_EXERCISE },
{ "BRISK_EXERCISE", BRISK_EXERCISE },
{ "ACTIVE_EXERCISE", ACTIVE_EXERCISE },
{ "EXTRA_EXERCISE", EXTRA_EXERCISE }
};
const std::map<float, std::string> activity_levels_str_map = {
{ SLEEP_EXERCISE, "SLEEP_EXERCISE" },
{ NO_EXERCISE, "NO_EXERCISE" },
{ LIGHT_EXERCISE, "LIGHT_EXERCISE" },
{ MODERATE_EXERCISE, "MODERATE_EXERCISE" },
{ BRISK_EXERCISE, "BRISK_EXERCISE" },
{ ACTIVE_EXERCISE, "ACTIVE_EXERCISE" },
{ EXTRA_EXERCISE, "EXTRA_EXERCISE" }
};
// these are the lower bounds of each of the weight classes, determined by the amount of BMI coming from stored calories (fat)
namespace character_weight_category
{
constexpr float emaciated = 1.0f;
constexpr float underweight = 2.0f;
constexpr float normal = 3.0f;
constexpr float overweight = 5.0f;
constexpr float obese = 10.0f;
constexpr float very_obese = 15.0f;
constexpr float morbidly_obese = 20.0f;
} // namespace character_weight_category
// these are the lower bounds of each of the health classes.
namespace character_health_category
{
//horrible
constexpr int very_bad = -100;
constexpr int bad = -50;
constexpr int fine = -10;
constexpr int good = 10;
constexpr int very_good = 50;
constexpr int great = 100;
} // namespace character_health_category
#endif // CATA_SRC_GAME_CONSTANTS_H