ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/face.h
Revision: 1.18
Committed: Sun Jul 1 05:00:18 2007 UTC (16 years, 10 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.17: +11 -12 lines
Log Message:
- upgrade crossfire trt to the GPL version 3 (hopefully correctly).
- add a single file covered by the GNU Affero General Public License
  (which is not yet released, so I used the current draft, which is
  legally a bit wavy, but its likely better than nothing as it expresses
  direct intent by the authors, and we can upgrade as soon as it has been
  released).
  * this should ensure availability of source code for the server at least
    and hopefully also archetypes and maps even when modified versions
    are not being distributed, in accordance of section 13 of the agplv3.

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.11 struct faceinfo
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.17 uint8 type; // 0 normal face, 1 generic 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     faceinfo ()
61 root 1.17 : number (0), smooth (0), type (0), smoothlevel (0), visibility (0), magicmap (0)
62 root 1.11 { }
63 root 1.4 };
64 root 1.3
65 root 1.16 inline void
66     object_freezer::put (keyword k, faceinfo *v)
67     {
68     put (k, v ? &v->name : (const char *)0);
69     }
70    
71 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;
72    
73     extern facehash_t facehash;
74     extern std::vector<faceinfo> faces;
75    
76     /* This returns an the face number of face 'name'. Number is constant
77     * during an invocation, but not necessarily between versions (this
78     * is because the faces are arranged in alphabetical order, so
79     * if a face is removed or added, all faces after that will now
80     * have a different number.
81     *
82     * If a face is not found, then defidx is returned. This can be useful
83     * if you want some default face used, or can be set to negative so that
84     * it will be known that the face could not be found.
85     */
86 root 1.10 faceidx face_find (const char *name, faceidx defidx = 0);
87     faceinfo *face_info (faceidx idx);
88     facedata *face_data (faceidx idx, int faceset);
89 root 1.9
90 root 1.4 struct MapLook
91 root 1.3 {
92 root 1.9 faceinfo *face;
93 root 1.3 uint8 flags;
94 root 1.4 };
95 root 1.1
96 root 1.14 typedef uint16 animidx;
97    
98 root 1.8 struct animation
99 root 1.3 {
100     shstr name; /* Name of the animation sequence */
101 root 1.14 animidx number;
102 root 1.3 uint8 num_animations; /* How many different faces to animate */
103     uint8 facings; /* How many facings (1,2,4,8) */
104 root 1.9 faceidx *faces; /* The different animations */
105 root 1.14
106     static animation &create (const char *name, uint8 frames, uint8 facings = 1);
107     static animation &find (const char *name);
108    
109     void resize (int new_size);
110 root 1.4 };
111 root 1.1
112 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;
113    
114     extern animhash_t animhash;
115     extern std::vector<animation> animations;
116    
117 root 1.9 #endif
118