projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rnd-20030118-6-src
[rocksndiamonds.git]
/
src
/
libgame
/
toons.c
diff --git
a/src/libgame/toons.c
b/src/libgame/toons.c
index 84a21c2569d2ce89cb8ebc537eac39aec2d7d329..5dc74a99f6ad5d779ca30d2c01671404add0b0e1 100644
(file)
--- a/
src/libgame/toons.c
+++ b/
src/libgame/toons.c
@@
-35,31
+35,37
@@
int getAnimationFrame(int num_frames, int delay, int mode, int start_frame,
sync_frame += start_frame * delay;
sync_frame += start_frame * delay;
- if (mode & ANIM_LOOP) /*
normal,
looping animation */
+ if (mode & ANIM_LOOP) /* looping animation */
{
frame = (sync_frame % (delay * num_frames)) / delay;
}
{
frame = (sync_frame % (delay * num_frames)) / delay;
}
- else if (mode & ANIM_LINEAR) /*
normal, non-looping
animation */
+ else if (mode & ANIM_LINEAR) /*
linear (non-looping)
animation */
{
frame = sync_frame / delay;
if (frame > num_frames - 1)
frame = num_frames - 1;
}
{
frame = sync_frame / delay;
if (frame > num_frames - 1)
frame = num_frames - 1;
}
- else if (mode & ANIM_PINGPONG) /*
use border frames once
*/
+ else if (mode & ANIM_PINGPONG) /*
oscillate (border frames once)
*/
{
int max_anim_frames = 2 * num_frames - 2;
frame = (sync_frame % (delay * max_anim_frames)) / delay;
frame = (frame < num_frames ? frame : max_anim_frames - frame);
}
{
int max_anim_frames = 2 * num_frames - 2;
frame = (sync_frame % (delay * max_anim_frames)) / delay;
frame = (frame < num_frames ? frame : max_anim_frames - frame);
}
- else if (mode & ANIM_PINGPONG2) /*
use border frames twice
*/
+ else if (mode & ANIM_PINGPONG2) /*
oscillate (border frames twice)
*/
{
int max_anim_frames = 2 * num_frames;
frame = (sync_frame % (delay * max_anim_frames)) / delay;
frame = (frame < num_frames ? frame : max_anim_frames - frame - 1);
}
{
int max_anim_frames = 2 * num_frames;
frame = (sync_frame % (delay * max_anim_frames)) / delay;
frame = (frame < num_frames ? frame : max_anim_frames - frame - 1);
}
+ else if (mode & ANIM_RANDOM) /* play frames in random order */
+ {
+ /* note: expect different frames for the same delay cycle! */
+
+ frame = SimpleRND(num_frames);
+ }
if (mode & ANIM_REVERSE) /* use reverse animation direction */
frame = num_frames - frame - 1;
if (mode & ANIM_REVERSE) /* use reverse animation direction */
frame = num_frames - frame - 1;
@@
-78,7
+84,8
@@
void InitToonScreen(Bitmap *save_buffer,
boolean (*redraw_needed_function)(void),
struct ToonInfo *toons, int num_toons,
int startx, int starty,
boolean (*redraw_needed_function)(void),
struct ToonInfo *toons, int num_toons,
int startx, int starty,
- int width, int height)
+ int width, int height,
+ int frame_delay_value)
{
screen_info.save_buffer = save_buffer;
screen_info.update_function = update_function;
{
screen_info.save_buffer = save_buffer;
screen_info.update_function = update_function;
@@
-90,6
+97,7
@@
void InitToonScreen(Bitmap *save_buffer,
screen_info.starty = starty;
screen_info.width = width;
screen_info.height = height;
screen_info.starty = starty;
screen_info.width = width;
screen_info.height = height;
+ screen_info.frame_delay_value = frame_delay_value;
}
void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc,
}
void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc,
@@
-148,7
+156,7
@@
boolean AnimateToon(int toon_nr, boolean restart)
{
horiz_move = (anim->direction & (ANIMDIR_LEFT | ANIMDIR_RIGHT));
vert_move = (anim->direction & (ANIMDIR_UP | ANIMDIR_DOWN));
{
horiz_move = (anim->direction & (ANIMDIR_LEFT | ANIMDIR_RIGHT));
vert_move = (anim->direction & (ANIMDIR_UP | ANIMDIR_DOWN));
- anim_delay_value = anim->move_delay;
+ anim_delay_value = anim->move_delay
* screen_info.frame_delay_value
;
frame = getAnimationFrame(anim->anim_frames, anim->anim_delay,
anim->anim_mode, anim->start_frame,
frame = getAnimationFrame(anim->anim_frames, anim->anim_delay,
anim->anim_mode, anim->start_frame,