ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/image.C
Revision: 1.21
Committed: Wed Mar 14 04:12:27 2007 UTC (17 years, 2 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.20: +2 -0 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

# Content
1 /*
2 * CrossFire, A Multiplayer game
3 *
4 * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
5 * Copyright (C) 2002 Mark Wedel & Crossfire Development Team
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 maintainer of this code can be reached at <crossfire@schmorp.de>
23 */
24
25
26 #include <global.h>
27 #include <stdio.h>
28
29 #include "face.h"
30 #include "crc.h"
31
32 faceidx blank_face, empty_face;
33
34 facehash_t facehash;
35 std::vector<faceinfo> faces;
36
37 /* the only thing this table is used for now is to
38 * translate the colorname in the magicmap field of the
39 * face into a numeric index that is then sent to the
40 * client for magic map commands. The order of this table
41 * must match that of the NDI colors in include/newclient.h.
42 */
43 static const char *const colorname[] = {
44 "black", /* 0 */
45 "white", /* 1 */
46 "blue", /* 2 */
47 "red", /* 3 */
48 "orange", /* 4 */
49 "light_blue", /* 5 */
50 "dark_orange", /* 6 */
51 "green", /* 7 */
52 "light_green", /* 8 */
53 "grey", /* 9 */
54 "brown", /* 10 */
55 "yellow", /* 11 */
56 "khaki" /* 12 */
57 };
58
59 /*
60 * Returns the matching color in the coloralias if found,
61 * 0 otherwise. Note that 0 will actually be black, so there is no
62 * way the calling function can tell if an error occurred or not
63 */
64 static uint8
65 find_color (const char *name)
66 {
67 uint8 i;
68
69 for (i = 0; i < sizeof (colorname) / sizeof (*colorname); i++)
70 if (!strcmp (name, colorname[i]))
71 return i;
72
73 LOG (llevError, "Unknown color: %s\n", name);
74 return 0;
75 }
76
77 faceidx
78 face_find (const char *name, faceidx defidx)
79 {
80 facehash_t::iterator i = facehash.find (name);
81
82 return i == facehash.end ()
83 ? defidx : i->second;
84 }
85
86 faceinfo *
87 face_info (faceidx idx)
88 {
89 assert (0 < (faceidx)-1); // faceidx must be unsigned
90
91 if (idx >= faces.size ())
92 return 0;
93
94 return &faces [idx];
95 }
96
97 facedata *
98 face_data (faceidx idx, int faceset)
99 {
100 if (faceinfo *f = face_info (idx))
101 return &(faceset ? f->data32 : f->data64);
102
103 return 0;
104 }
105