3 extern unsigned int ban_map[17][22];
12 char used, direction, colour;
16 int anim, frame, frame_tick, image;
27 if ((handle = dat_open("level.pcx", datfile_name, "rb")) == 0) {
28 strcpy(main_info.error_str, "Error loading 'level.pcx', aborting...\n");
31 read_pcx(handle, mask_pic, 102400, pal);
34 memset(mask_pic, 0, 102400);
36 memset(ban_map, 0, sizeof(ban_map));
40 for (c2 = 193; c2 < 256; c2++)
41 clear_lines(0, c2, 1, (c2 - 192) >> 2);
43 setpalette(0, 256, pal);
45 for (c1 = 0; c1 < 20; c1++)
49 rabbits[0].colour = (char)rnd(4);
50 rabbits[0].x = (int) (150 + rnd(100)) << 16;
51 rabbits[0].y = 256 << 16;
52 rabbits[0].x_add = ((int) rnd(65535) << 1) - 65536;
53 if (rabbits[0].x_add > 0)
54 rabbits[0].direction = 0;
56 rabbits[0].direction = 1;
57 rabbits[0].y_add = -262144 + (rnd(16384) * 5);
58 rabbits[0].timer = 30 + rnd(150);
61 rabbits[0].frame_tick = 0;
62 rabbits[0].image = player_anims[rabbits[0].anim].frame[rabbits[0].frame].image + rabbits[0].colour * 18 + rabbits[0].direction * 9;
64 for (c1 = 0; c1 < 300; c1++) {
68 stars[c1].x = stars[c1].old_x = (s1 << 16);
69 stars[c1].y = stars[c1].old_y = (s2 << 16);
72 outportw(0x3ce, ((s1 & 3) << 8) + 0x04);
73 stars[c1].back[0] = stars[c1].back[1] = *(char *) (0xa0000 + s2 * 100 + (s1 >> 2) - __djgpp_base_address);
75 stars[c1].back[0] = stars[c1].back[1] = *(char *) get_vgaptr(0, s1, s2);
81 main_info.page_info[0].num_pobs = 0;
82 main_info.page_info[1].num_pobs = 0;
83 main_info.view_page = 0;
84 main_info.draw_page = 1;
86 while (key_pressed(1) == 0) {
91 for (c1 = 0; c1 < 300; c1++) {
92 stars[c1].old_x = stars[c1].x;
93 stars[c1].old_y = stars[c1].y;
94 stars[c1].y -= (int) (31 - stars[c1].col) * 16384;
95 if ((stars[c1].y >> 16) < 0)
96 stars[c1].y += 256 << 16;
97 if ((stars[c1].y >> 16) >= 256)
98 stars[c1].y -= 256 << 16;
101 for (c1 = 0, c2 = 0; c1 < 20; c1++) {
102 if (rabbits[c1].used == 1)
105 if ((c2 == 0 && rnd(10000) < 200) || (c2 == 1 && rnd(10000) < 150) || (c2 == 2 && rnd(10000) < 100) || (c2 == 3 && rnd(10000) < 50)) {
106 for (c1 = 0; c1 < 20; c1++) {
107 if (rabbits[c1].used == 0) {
108 rabbits[c1].used = 1;
109 rabbits[c1].colour = (char)rnd(4);
110 rabbits[c1].x = (int) (150 + rnd(100)) << 16;
111 rabbits[c1].y = 256 << 16;
112 rabbits[c1].x_add = ((int) rnd(65535) << 1) - 65536;
113 if (rabbits[c1].x_add > 0)
114 rabbits[c1].direction = 0;
116 rabbits[c1].direction = 1;
117 rabbits[c1].y_add = -262144 + (rnd(16384) * 5);
118 rabbits[c1].timer = 30 + rnd(150);
119 rabbits[c1].anim = 2;
120 rabbits[c1].frame = 0;
121 rabbits[c1].frame_tick = 0;
122 rabbits[c1].image = player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].image + rabbits[c1].colour * 18 + rabbits[c1].direction * 9;
130 main_info.page_info[main_info.draw_page].num_pobs = 0;
132 for (c1 = 0; c1 < 20; c1++) {
133 if (rabbits[c1].used == 1) {
134 rabbits[c1].y_add += 2048;
135 if (rabbits[c1].y_add > 36864 && rabbits[c1].anim != 3) {
136 rabbits[c1].anim = 3;
137 rabbits[c1].frame = 0;
138 rabbits[c1].frame_tick = 0;
139 rabbits[c1].image = player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].image + rabbits[c1].colour * 18 + rabbits[c1].direction * 9;
141 rabbits[c1].x += rabbits[c1].x_add;
142 rabbits[c1].y += rabbits[c1].y_add;
143 if ((rabbits[c1].x >> 16) < 16 || (rabbits[c1].x >> 16) > 400 || (rabbits[c1].y >> 16) > 256) {
144 rabbits[c1].used = 0;
148 if (rabbits[c1].timer <= 0) {
149 rabbits[c1].used = 0;
150 for (c2 = 0; c2 < 6; c2++)
151 add_object(OBJ_FUR, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 44 + rabbits[c1].colour * 8);
152 for (c2 = 0; c2 < 6; c2++)
153 add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 76);
154 for (c2 = 0; c2 < 6; c2++)
155 add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 77);
156 for (c2 = 0; c2 < 8; c2++)
157 add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 78);
158 for (c2 = 0; c2 < 10; c2++)
159 add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 79);
160 dj_play_sfx(SFX_DEATH, SFX_DEATH_FREQ, 64, 0, 0, -1);
163 rabbits[c1].frame_tick++;
164 if (rabbits[c1].frame_tick >= player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].ticks) {
166 if (rabbits[c1].frame >= player_anims[rabbits[c1].anim].num_frames)
167 rabbits[c1].frame = player_anims[rabbits[c1].anim].restart_frame;
168 rabbits[c1].frame_tick = 0;
170 rabbits[c1].image = player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].image + rabbits[c1].colour * 18 + rabbits[c1].direction * 9;
171 if (rabbits[c1].used == 1)
172 add_pob(main_info.draw_page, rabbits[c1].x >> 16, rabbits[c1].y >> 16, rabbits[c1].image, rabbit_gobs);
180 for (c1 = 0; c1 < 300; c1++) {
182 outportw(0x3ce, (((stars[c1].x >> 16) & 3) << 8) + 0x04);
183 outportw(0x3c4, ((1 << ((stars[c1].x >> 16) & 3)) << 8) + 0x02);
184 stars[c1].back[main_info.draw_page] = *(char *) (0xa0000 + ((int) main_info.draw_page << 15) + (stars[c1].y >> 16) * 100 + (stars[c1].x >> 18) - __djgpp_base_address);
185 *(char *) (0xa0000 + ((int) main_info.draw_page << 15) + (stars[c1].y >> 16) * 100 + (stars[c1].x >> 18) - __djgpp_base_address) = stars[c1].col;
187 stars[c1].back[main_info.draw_page] = *(char *) get_vgaptr(main_info.draw_page, stars[c1].x >> 16, stars[c1].y >> 16);
188 *(char *) get_vgaptr(main_info.draw_page, stars[c1].x >> 16, stars[c1].y >> 16) = stars[c1].col;
194 draw_pobs(main_info.draw_page);
196 main_info.draw_page ^= 1;
197 main_info.view_page ^= 1;
199 flippage(main_info.view_page);
203 redraw_pob_backgrounds(main_info.draw_page);
208 for (c1 = 299; c1 >= 0; c1--) {
210 outportw(0x3c4, ((1 << ((stars[c1].old_x >> 16) & 3)) << 8) + 0x02);
211 *(char *) (0xa0000 + ((int) main_info.draw_page << 15) + (stars[c1].old_y >> 16) * 100 + (stars[c1].old_x >> 18) - __djgpp_base_address) = stars[c1].back[main_info.draw_page];
213 *(char *) get_vgaptr(main_info.draw_page, stars[c1].old_x >> 16, stars[c1].old_y >> 16) = stars[c1].back[main_info.draw_page];