ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/face.h
Revision: 1.22
Committed: Mon Oct 1 00:44:44 2007 UTC (16 years, 7 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-2_3
Changes since 1.21: +1 -5 lines
Log Message:
- fix dmshell filehandle
- zero-initialise faceinfo
- for various reasons, the AIO watcher has to have similar priority as the
  server ticker. before thta, the server ticker could preempt the map scheduler
  completely when overloaded, which disabled the only way to reduce load.

File Contents

# User Rev Content
1 root 1.1 /*
2 root 1.18 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
3 pippijn 1.7 *
4 root 1.15 * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team
5     * Copyright (©) 1994,2007 Mark Wedel
6     * Copyright (©) 1992,2007 Frank Tore Johansen
7 pippijn 1.7 *
8 root 1.18 * Crossfire TRT is free software: you can redistribute it and/or modify
9     * it under the terms of the GNU General Public License as published by
10     * the Free Software Foundation, either version 3 of the License, or
11     * (at your option) any later version.
12 pippijn 1.7 *
13 root 1.18 * This program is distributed in the hope that it will be useful,
14     * but WITHOUT ANY WARRANTY; without even the implied warranty of
15     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16     * GNU General Public License for more details.
17 pippijn 1.7 *
18 root 1.18 * You should have received a copy of the GNU General Public License
19     * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 root 1.15 *
21     * The authors can be reached via e-mail to <crossfire@schmorp.de>
22 pippijn 1.7 */
23 root 1.15
24 root 1.9 #ifndef FACE_H__
25     #define FACE_H__
26    
27     #include <string>
28     #include <tr1/unordered_map>
29    
30 root 1.12 #define CHKSUM_SIZE 6
31 root 1.9 #define MAX_FACES 10000 // stupid gcfclient artificially limits
32    
33     typedef uint16 faceidx;
34    
35     extern faceidx blank_face, empty_face;
36 root 1.1
37 root 1.10 struct facedata
38     {
39     std::string data;
40     uint8 chksum[CHKSUM_SIZE];
41     };
42    
43 root 1.1 /* New face structure - this enforces the notion that data is face by
44     * face only - you can not change the color of an item - you need to instead
45     * create a new face with that color.
46     */
47 root 1.22 struct faceinfo : zero_initialised
48 root 1.3 {
49 root 1.9 shstr name;
50 root 1.17 std::string meta;
51     facedata data32, data64; // either 32/64 face or data32 == generic resource
52 root 1.9 faceidx number; /* This is the image id. It should be the */
53 root 1.2 /* same value as its position in the array */
54 root 1.10 faceidx smooth; /* the smooth face for this face, or 0 */
55 root 1.19 uint8 type; // 0 normal face, otherwise other resource
56 root 1.13 uint8 smoothlevel; // smoothlevel is per-face in 2.x servers
57 root 1.3 uint8 visibility;
58     uint8 magicmap; /* Color to show this in magic map */
59 root 1.11
60 root 1.20 facedata *data (int faceset) const;
61 root 1.4 };
62 root 1.3
63 root 1.16 inline void
64     object_freezer::put (keyword k, faceinfo *v)
65     {
66     put (k, v ? &v->name : (const char *)0);
67     }
68    
69 root 1.9 typedef std::tr1::unordered_map<const char *, int, str_hash, str_equal, slice_allocator< std::pair<const char *const, int> >, true> facehash_t;
70    
71     extern facehash_t facehash;
72     extern std::vector<faceinfo> faces;
73    
74     /* This returns an the face number of face 'name'. Number is constant
75     * during an invocation, but not necessarily between versions (this
76     * is because the faces are arranged in alphabetical order, so
77     * if a face is removed or added, all faces after that will now
78     * have a different number.
79     *
80     * If a face is not found, then defidx is returned. This can be useful
81     * if you want some default face used, or can be set to negative so that
82     * it will be known that the face could not be found.
83     */
84 root 1.10 faceidx face_find (const char *name, faceidx defidx = 0);
85     faceinfo *face_info (faceidx idx);
86     facedata *face_data (faceidx idx, int faceset);
87 root 1.9
88 root 1.4 struct MapLook
89 root 1.3 {
90 root 1.9 faceinfo *face;
91 root 1.3 uint8 flags;
92 root 1.4 };
93 root 1.1
94 root 1.14 typedef uint16 animidx;
95    
96 root 1.8 struct animation
97 root 1.3 {
98 root 1.21 faceidx *faces; /* The different animations */
99     int num_animations; /* How many different faces to animate */
100     sint8 facings; /* How many facings (1,2,4,8) */
101     animidx number;
102 root 1.3 shstr name; /* Name of the animation sequence */
103 root 1.14
104     static animation &create (const char *name, uint8 frames, uint8 facings = 1);
105     static animation &find (const char *name);
106    
107     void resize (int new_size);
108 root 1.4 };
109 root 1.1
110 root 1.14 typedef std::tr1::unordered_map<const char *, int, str_hash, str_equal, slice_allocator< std::pair<const char *const, int> >, true> animhash_t;
111    
112     extern animhash_t animhash;
113     extern std::vector<animation> animations;
114    
115 root 1.9 #endif
116