2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
16 static char rcsid[] = "$Id: vclip.c,v 1.1.1.1 2001-01-19 03:29:59 bradleyb Exp $";
30 //----------------- Variables for video clips -------------------
32 vclip Vclip[VCLIP_MAXNUM]; // General purpose vclips.
34 //draw an object which renders as a vclip
35 void draw_vclip_object(object *obj,fix timeleft,int lighted, int vclip_num)
39 nf = Vclip[vclip_num].num_frames;
41 bitmapnum = (nf - f2i(fixdiv( (nf-1)*timeleft,Vclip[vclip_num].play_time))) - 1;
43 if (bitmapnum >= Vclip[vclip_num].num_frames)
44 bitmapnum=Vclip[vclip_num].num_frames-1;
46 if (bitmapnum >= 0 ) {
48 if (Vclip[vclip_num].flags & VF_ROD)
49 draw_object_tmap_rod(obj, Vclip[vclip_num].frames[bitmapnum],lighted);
51 Assert(lighted==0); //blob cannot now be lighted
53 draw_object_blob(obj, Vclip[vclip_num].frames[bitmapnum] );
60 void draw_weapon_vclip(object *obj)
63 fix modtime,play_time;
65 //mprintf( 0, "[Drawing obj %d type %d fireball size %x]\n", obj-Objects, Weapon_info[obj->id].weapon_vclip, obj->size );
67 Assert(obj->type == OBJ_WEAPON);
69 vclip_num = Weapon_info[obj->id].weapon_vclip;
71 modtime = obj->lifeleft;
72 play_time = Vclip[vclip_num].play_time;
74 // Special values for modtime were causing enormous slowdown for omega blobs.
75 if (modtime == IMMORTAL_TIME)
78 // Should cause Omega blobs (which live for one frame) to not always be the same.
79 if (modtime == ONE_FRAME_TIME)
82 if (obj->id == PROXIMITY_ID) { //make prox bombs spin out of sync
83 int objnum = obj-Objects;
85 modtime += (modtime * (objnum&7)) / 16; //add variance to spin rate
87 while (modtime > play_time)
90 if ((objnum&1) ^ ((objnum>>1)&1)) //make some spin other way
91 modtime = play_time - modtime;
95 while (modtime > play_time)
99 draw_vclip_object(obj, modtime, 0, vclip_num);