1 // ----------------------------------------------------------------------------
3 // ----------------------------------------------------------------------------
5 #include "OrangeDisk.h"
7 // static char *VB_Name = "modOrangeDisk";
10 // ==========================================================================
12 // Animate/move orange disks (falling)
13 // ==========================================================================
15 int subAnimateOrangeDisks(int si)
17 int subAnimateOrangeDisks;
22 if (LowByte(ax) != fiOrangeDisk)
23 return subAnimateOrangeDisks;
25 if (ax >= 0x3008) // disk is falling
28 if (ax >= 0x2008) // disk is in wait state before falling
31 if (PlayField16[si + FieldWidth] == 0)
34 return subAnimateOrangeDisks;
36 loc_g_27CF: // below is empty -> disk may start to fall
37 MovHighByte(&PlayField16[si], 0x20);
38 MovHighByte(&PlayField16[si + FieldWidth], fiOrangeDisk);
39 return subAnimateOrangeDisks;
42 if (PlayField16[si + FieldWidth] == 0)
44 PlayField16[si] = fiOrangeDisk;
45 return subAnimateOrangeDisks;
48 bl = HighByte(PlayField16[si]) + 1;
49 if (bl == 0x22) // wait phase is finished
52 MovHighByte(&PlayField16[si], bl);
53 return subAnimateOrangeDisks;
55 loc_g_2804: // disk is falling
56 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
57 dx = HighByte(PlayField16[si]) & 0x7;
61 StretchedSprites.BltImg(X, Y, aniSpace, 0);
62 StretchedSprites.BltImg(X, Y + TwoPixels * (dx + 1), aniOrangeDisk, dx);
64 StretchedSprites.BltEx(X, Y, 0);
65 StretchedSprites.BltEx(X, Y + TwoPixels * (dx + 1), fiOrangeDisk);
67 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
68 bl = HighByte(PlayField16[si]) + 1;
71 MovHighByte(&PlayField16[si], bl);
72 return subAnimateOrangeDisks;
76 PlayField16[si + FieldWidth] = fiOrangeDisk;
78 if (PlayField16[si + FieldWidth] == 0)
80 MovHighByte(&PlayField16[si], 0x30); // go on falling down
81 MovHighByte(&PlayField16[si + FieldWidth], fiOrangeDisk);
82 return subAnimateOrangeDisks;
85 if (LowByte(PlayField16[si + FieldWidth]) == fiExplosion)
86 return subAnimateOrangeDisks;
88 ExplodeFieldSP(si); // Explode
90 return subAnimateOrangeDisks;
91 } // subAnimateOrangeDisks