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
|
#include "AppHdr.h"
#include "viewchar.h"
#include "options.h"
#include "state.h"
// For order and meaning of symbols, see dungeon_char_type in enum.h.
static const unsigned dchar_table[ NUM_CSET ][ NUM_DCHAR_TYPES ] =
{
// CSET_ASCII
{
'#', '*', '.', ',', '\'', '+', '^', '>', '<', // wall .. stairs up
'_', '\\', '}', '{', '8', '~', '~', // altar .. item detect
'0', ')', '[', '/', '%', '?', '=', '!', '(', // orb .. missile
':', '|', '}', '%', '$', '"', '#', '7', // book .. trees
' ', '!', '#', '%', ':', ')', '*', '+', // space .. fired_burst
'/', '=', '?', 'X', '[', '`', '#' // fi_stick .. explosion
},
// CSET_IBM - this is ANSI 437
{
177, 176, 249, 250, '\'', 254, '^', '>', '<', // wall .. stairs up
220, 239, 244, 247, '8', '~', '~', // altar .. item detect
'0', ')', '[', '/', '%', '?', '=', '!', '(', // orb .. missile
'+', '\\', '}', '%', '$', '"', '#', 234, // book .. trees
' ', '!', '#', '%', '+', ')', '*', '+', // space .. fired_burst
'/', '=', '?', 'X', '[', '`', '#' // fi_stick .. explosion
},
// CSET_DEC - remember: 224-255 are mapped to shifted 96-127
{
225, 224, 254, ':', '\'', 238, '^', '>', '<', // wall .. stairs up
251, 182, 167, 187, '8', 171, 168, // altar .. item detect
'0', ')', '[', '/', '%', '?', '=', '!', '(', // orb .. missile
'+', '\\', '}', '%', '$', '"', '#', '7', // book .. trees
' ', '!', '#', '%', '+', ')', '*', '+', // space .. fired_burst
'/', '=', '?', 'X', '[', '`', '#' // fi_stick .. explosion
},
// CSET_UNICODE
{
0x2592, 0x2591, 0xB7, 0x25E6, '\'', 0x25FC, '^', '>', '<',
'_', 0x2229, 0x2320, 0x2248, '8', '~', '~',
'0', ')', '[', '/', '%', '?', '=', '!', '(',
'+', '|', '}', '%', '$', '"', '#', 0x2663,
' ', '!', '#', '%', '+', ')', '*', '+', // space .. fired_burst
'/', '=', '?', 'X', '[', '`', '#' // fi_stick .. explosion
},
};
dungeon_char_type dchar_by_name(const std::string &name)
{
const char *dchar_names[] =
{
"wall", "wall_magic", "floor", "floor_magic", "door_open",
"door_closed", "trap", "stairs_down", "stairs_up", "altar", "arch",
"fountain", "wavy", "statue", "invis_exposed", "item_detected",
"item_orb", "item_weapon", "item_armour", "item_wand", "item_food",
"item_scroll", "item_ring", "item_potion", "item_missile", "item_book",
"item_stave", "item_miscellany", "item_corpse", "item_gold",
"item_amulet", "cloud", "trees",
};
for (unsigned i = 0; i < sizeof(dchar_names) / sizeof(*dchar_names); ++i)
if (dchar_names[i] == name)
return dungeon_char_type(i);
return (NUM_DCHAR_TYPES);
}
void init_char_table( char_set_type set )
{
for (int i = 0; i < NUM_DCHAR_TYPES; i++)
{
if (Options.cset_override[set][i])
Options.char_table[i] = Options.cset_override[set][i];
else
Options.char_table[i] = dchar_table[set][i];
}
}
unsigned dchar_glyph(dungeon_char_type dchar)
{
return (Options.char_table[dchar]);
}
std::string stringize_glyph(unsigned glyph)
{
if (crawl_state.glyph2strfn && Options.char_set == CSET_UNICODE)
return (*crawl_state.glyph2strfn)(glyph);
return (std::string(1, glyph));
}
int multibyte_strlen(const std::string &s)
{
if (crawl_state.multibyte_strlen)
return (*crawl_state.multibyte_strlen)(s);
return (s.length());
}
|