ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/face.h
Revision: 1.11
Committed: Wed Mar 14 04:12:28 2007 UTC (17 years, 2 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.10: +5 -1 lines
Log Message:
- rewrote more face handling code
- automatically send smooth faces, as the client will need them anyways
  and it makes little sense to wait for the client to axk for it. of course,
  gcfclient suffers from weird ordering problems again.
- UP_OBJ_FACE was often abused in situations where other things changed,
  updated lots of spaces, probably more to be done.
- update_smooth became so small that inlining it actually clarified
  the code. similar for update_space, which is not inlined for other reasons.
- faces were not initialised properly
- add versioncheck for face data
- rewrite invisibility handling a bit: god finger etc. now makes you blink,
  blinking routine has changed to be less annoying and more useful while
  still indicating invisibleness.

File Contents

# User Rev Content
1 root 1.1 /*
2 pippijn 1.7 * CrossFire, A Multiplayer game for X-windows
3     *
4     * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
5     * Copyright (C) 1994 Mark Wedel
6     * Copyright (C) 1992 Frank Tore Johansen
7     *
8     * This program 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 2 of the License, or
11     * (at your option) any later version.
12     *
13     * 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     *
18     * You should have received a copy of the GNU General Public License
19     * along with this program; if not, write to the Free Software
20     * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21     *
22     * The author can be reached via e-mail to mark@pyramid.com
23     */
24 root 1.9 #ifndef FACE_H__
25     #define FACE_H__
26    
27     #include <string>
28     #include <tr1/unordered_map>
29    
30     #define CHKSUM_SIZE (128 / 8)
31     #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.10 facedata data32, data64;
51 root 1.9 faceidx number; /* This is the image id. It should be the */
52 root 1.2 /* same value as its position in the array */
53 root 1.10 faceidx smooth; /* the smooth face for this face, or 0 */
54 root 1.3 uint8 visibility;
55     uint8 magicmap; /* Color to show this in magic map */
56 root 1.11
57     faceinfo ()
58     : number (0), smooth (0), visibility (0), magicmap (0)
59     { }
60 root 1.4 };
61 root 1.3
62 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;
63    
64     extern facehash_t facehash;
65     extern std::vector<faceinfo> faces;
66    
67     /* This returns an the face number of face 'name'. Number is constant
68     * during an invocation, but not necessarily between versions (this
69     * is because the faces are arranged in alphabetical order, so
70     * if a face is removed or added, all faces after that will now
71     * have a different number.
72     *
73     * If a face is not found, then defidx is returned. This can be useful
74     * if you want some default face used, or can be set to negative so that
75     * it will be known that the face could not be found.
76     */
77 root 1.10 faceidx face_find (const char *name, faceidx defidx = 0);
78     faceinfo *face_info (faceidx idx);
79     facedata *face_data (faceidx idx, int faceset);
80 root 1.9
81 root 1.4 struct MapLook
82 root 1.3 {
83 root 1.9 faceinfo *face;
84 root 1.3 uint8 flags;
85 root 1.4 };
86 root 1.1
87 root 1.8 struct animation
88 root 1.3 {
89     shstr name; /* Name of the animation sequence */
90     uint8 num_animations; /* How many different faces to animate */
91     uint8 facings; /* How many facings (1,2,4,8) */
92 root 1.9 faceidx *faces; /* The different animations */
93 root 1.3 uint16 num; /* Where we are in the array */
94 root 1.4 };
95 root 1.1
96 root 1.9 #endif
97