ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/anim.C
(Generate patch)

Comparing deliantra/server/common/anim.C (file contents):
Revision 1.7 by root, Sun Sep 10 16:00:23 2006 UTC vs.
Revision 1.11 by root, Wed Dec 13 21:27:09 2006 UTC

1
2/*
3 * static char *rcsid_anim_c =
4 * "$Id: anim.C,v 1.7 2006/09/10 16:00:23 root Exp $";
5 */
6
7/* 1/*
8 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
9 3
10 Copyright (C) 2002-2003 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2002-2003 Mark Wedel & Crossfire Development Team
11 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
22 16
23 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
25 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 20
27 The authors can be reached via e-mail at crossfire-devel@real-time.com 21 The authors can be reached via e-mail at <crossfire@schmorp.de>
28*/ 22*/
29 23
30/* This file contains animation related code. */ 24/* This file contains animation related code. */
31 25
32#include <global.h> 26#include <global.h>
33#include <stdio.h> 27#include <stdio.h>
34
35std::vector < Animations > animations;
36 28
37void 29void
38free_all_anim (void) 30free_all_anim (void)
39{ 31{
40 for (int i = 0; i <= num_animations; i++) 32 for (int i = 0; i <= num_animations; i++)
68 /* set the name so we don't try to dereferance null. 60 /* set the name so we don't try to dereferance null.
69 * Put # at start so it will be first in alphabetical 61 * Put # at start so it will be first in alphabetical
70 * order. 62 * order.
71 */ 63 */
72 { 64 {
73 Animations 65 Animations anim0;
74 anim0;
75 66
76 anim0.name = "###none"; 67 anim0.name = "###none";
77 anim0.num_animations = 1; 68 anim0.num_animations = 1;
78 anim0.faces = (Fontindex *) malloc (sizeof (Fontindex)); 69 anim0.faces = (uint16 *)malloc (sizeof (uint16));
79 anim0.faces[0] = 0; 70 anim0.faces[0] = 0;
80 anim0.facings = 0; 71 anim0.facings = 0;
81 72
82 animations.push_back (anim0); 73 animations.push_back (anim0);
83 } 74 }
102 LOG (llevError, "Didn't get a mina before %s\n", buf); 93 LOG (llevError, "Didn't get a mina before %s\n", buf);
103 num_frames = 0; 94 num_frames = 0;
104 } 95 }
105 num_animations++; 96 num_animations++;
106 97
107 Animations 98 Animations anim;
108 anim;
109 99
110 anim.name = buf + 5; 100 anim.name = buf + 5;
111 anim.num = num_animations; /* for bsearch */ 101 anim.num = num_animations; /* for bsearch */
112 anim.facings = 1; 102 anim.facings = 1;
113 animations.push_back (anim); 103 animations.push_back (anim);
114 } 104 }
115 else if (!strncmp (buf, "mina", 4)) 105 else if (!strncmp (buf, "mina", 4))
116 { 106 {
117 animations[num_animations].faces = (Fontindex *) malloc (sizeof (Fontindex) * num_frames); 107 animations[num_animations].faces = (uint16 *) malloc (sizeof (uint16) * num_frames);
118 for (i = 0; i < num_frames; i++) 108 for (i = 0; i < num_frames; i++)
119 animations[num_animations].faces[i] = faces[i]; 109 animations[num_animations].faces[i] = faces[i];
120 animations[num_animations].num_animations = num_frames; 110 animations[num_animations].num_animations = num_frames;
121 if (num_frames % animations[num_animations].facings) 111 if (num_frames % animations[num_animations].facings)
122 { 112 {
190 int 180 int
191 base_state; /* starting index # to draw from */ 181 base_state; /* starting index # to draw from */
192 182
193 if (!op->animation_id || !NUM_ANIMATIONS (op)) 183 if (!op->animation_id || !NUM_ANIMATIONS (op))
194 { 184 {
195 LOG (llevError, "Object lacks animation.\n"); 185 LOG (llevError, "Object %s lacks animation.\n", op->debug_desc ());
196 dump_object (op);
197 return; 186 return;
198 } 187 }
188
199 if (op->head) 189 if (op->head)
200 { 190 {
201 dir = op->head->direction; 191 dir = op->head->direction;
202 192
203 if (NUM_ANIMATIONS (op) == NUM_ANIMATIONS (op->head)) 193 if (NUM_ANIMATIONS (op) == NUM_ANIMATIONS (op->head))
204 op->state = op->head->state; 194 op->state = op->head->state;
205 else 195 else
206 ++op->state; 196 ++op->state;
207 } 197 }
208 else 198 else
209 {
210 ++op->state; /* increase draw state */ 199 ++op->state; /* increase draw state */
211 }
212 200
213 /* If object is turning, then max animation state is half through the 201 /* If object is turning, then max animation state is half through the
214 * animations. Otherwise, we can use all the animations. 202 * animations. Otherwise, we can use all the animations.
215 */ 203 */
216 max_state = NUM_ANIMATIONS (op) / NUM_FACINGS (op); 204 max_state = NUM_ANIMATIONS (op) / NUM_FACINGS (op);
219 * of the animations were left facing, the second half right facing. 207 * of the animations were left facing, the second half right facing.
220 * Note in old the is_turning, it was set so that the animation for a monster 208 * Note in old the is_turning, it was set so that the animation for a monster
221 * was always towards the enemy - now it is whatever direction the monster 209 * was always towards the enemy - now it is whatever direction the monster
222 * is facing. 210 * is facing.
223 */ 211 */
212
224 if (NUM_FACINGS (op) == 2) 213 if (NUM_FACINGS (op) == 2)
225 { 214 {
226 if (dir < 5) 215 if (dir < 5)
227 base_state = 0; 216 base_state = 0;
228 else 217 else

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines