3 * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
5 * Copyright (C) 2001 Chuck Mason <cemason@users.sourceforge.net>
7 * Copyright (C) 2002 Florian Schulze <crow@icculus.org>
9 * This file is part of Jump'n'Bump.
11 * Jump'n'Bump is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * Jump'n'Bump is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 extern unsigned int ban_map
[17][22];
37 int used
, direction
, colour
;
41 int anim
, frame
, frame_tick
, image
;
50 register_background(NULL
, NULL
);
52 if ((handle
= dat_open("level.pcx")) == 0) {
53 strcpy(main_info
.error_str
, "Error loading 'level.pcx', aborting...\n");
56 read_pcx(handle
, mask_pic
, JNB_WIDTH
*JNB_HEIGHT
, pal
);
58 memset(mask_pic
, 0, JNB_WIDTH
*JNB_HEIGHT
);
59 register_mask(mask_pic
);
61 recalculate_gob(&rabbit_gobs
, pal
);
62 recalculate_gob(&object_gobs
, pal
);
64 memset(ban_map
, 0, sizeof(ban_map
));
70 for (c2
= JNB_HEIGHT
- 63; c2
< JNB_HEIGHT
; c2
++) {
71 clear_lines(0, c2
, 1, get_color((c2
- 192) >> 2, pal
));
72 clear_lines(1, c2
, 1, get_color((c2
- 192) >> 2, pal
));
77 setpalette(0, 256, pal
);
79 for (c1
= 0; c1
< 20; c1
++)
83 rabbits
[0].colour
= rnd(4);
84 rabbits
[0].x
= (int) (150 + rnd(100)) << 16;
85 rabbits
[0].y
= 256 << 16;
86 rabbits
[0].x_add
= ((int) rnd(65535) << 1) - 65536;
87 if (rabbits
[0].x_add
> 0)
88 rabbits
[0].direction
= 0;
90 rabbits
[0].direction
= 1;
91 rabbits
[0].y_add
= -262144 + (rnd(16384) * 5);
92 rabbits
[0].timer
= 30 + rnd(150);
95 rabbits
[0].frame_tick
= 0;
96 rabbits
[0].image
= player_anims
[rabbits
[0].anim
].frame
[rabbits
[0].frame
].image
+ rabbits
[0].colour
* 18 + rabbits
[0].direction
* 9;
99 for (c1
= 0; c1
< 300; c1
++) {
101 s2
= rnd(JNB_HEIGHT
);
103 stars
[c1
].x
= stars
[c1
].old_x
= (s1
<< 16);
104 stars
[c1
].y
= stars
[c1
].old_y
= (s2
<< 16);
106 stars
[c1
].back
[0] = stars
[c1
].back
[1] = get_pixel(0, s1
, s2
);
112 main_info
.page_info
[0].num_pobs
= 0;
113 main_info
.page_info
[1].num_pobs
= 0;
114 main_info
.view_page
= 0;
115 main_info
.draw_page
= 1;
117 while (key_pressed(1) == 0) {
122 for (c1
= 0; c1
< 300; c1
++) {
123 stars
[c1
].old_x
= stars
[c1
].x
;
124 stars
[c1
].old_y
= stars
[c1
].y
;
125 stars
[c1
].y
-= (int) (31 - stars
[c1
].col
) * 16384;
126 if ((stars
[c1
].y
>> 16) < 0)
127 stars
[c1
].y
+= JNB_HEIGHT
<< 16;
128 if ((stars
[c1
].y
>> 16) >= JNB_HEIGHT
)
129 stars
[c1
].y
-= JNB_HEIGHT
<< 16;
132 for (c1
= 0, c2
= 0; c1
< 20; c1
++) {
133 if (rabbits
[c1
].used
== 1)
136 if ((c2
== 0 && rnd(10000) < 200) || (c2
== 1 && rnd(10000) < 150) || (c2
== 2 && rnd(10000) < 100) || (c2
== 3 && rnd(10000) < 50)) {
137 for (c1
= 0; c1
< 20; c1
++) {
138 if (rabbits
[c1
].used
== 0) {
139 rabbits
[c1
].used
= 1;
140 rabbits
[c1
].colour
= rnd(4);
141 rabbits
[c1
].x
= (int) (150 + rnd(100)) << 16;
142 rabbits
[c1
].y
= 256 << 16;
143 rabbits
[c1
].x_add
= ((int) rnd(65535) << 1) - 65536;
144 if (rabbits
[c1
].x_add
> 0)
145 rabbits
[c1
].direction
= 0;
147 rabbits
[c1
].direction
= 1;
148 rabbits
[c1
].y_add
= -262144 + (rnd(16384) * 5);
149 rabbits
[c1
].timer
= 30 + rnd(150);
150 rabbits
[c1
].anim
= 2;
151 rabbits
[c1
].frame
= 0;
152 rabbits
[c1
].frame_tick
= 0;
153 rabbits
[c1
].image
= player_anims
[rabbits
[c1
].anim
].frame
[rabbits
[c1
].frame
].image
+ rabbits
[c1
].colour
* 18 + rabbits
[c1
].direction
* 9;
161 main_info
.page_info
[main_info
.draw_page
].num_pobs
= 0;
163 for (c1
= 0; c1
< 20; c1
++) {
164 if (rabbits
[c1
].used
== 1) {
165 rabbits
[c1
].y_add
+= 2048;
166 if (rabbits
[c1
].y_add
> 36864 && rabbits
[c1
].anim
!= 3) {
167 rabbits
[c1
].anim
= 3;
168 rabbits
[c1
].frame
= 0;
169 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;
172 rabbits
[c1
].x
+= rabbits
[c1
].x_add
;
173 rabbits
[c1
].y
+= rabbits
[c1
].y_add
;
174 if ((rabbits
[c1
].x
>> 16) < 16 || (rabbits
[c1
].x
>> 16) > JNB_WIDTH
|| (rabbits
[c1
].y
>> 16) > JNB_HEIGHT
) {
175 rabbits
[c1
].used
= 0;
179 if (rabbits
[c1
].timer
<= 0) {
180 rabbits
[c1
].used
= 0;
181 for (c2
= 0; c2
< 6; c2
++)
182 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);
183 for (c2
= 0; c2
< 6; c2
++)
184 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);
185 for (c2
= 0; c2
< 6; c2
++)
186 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);
187 for (c2
= 0; c2
< 8; c2
++)
188 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);
189 for (c2
= 0; c2
< 10; c2
++)
190 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);
191 dj_play_sfx(SFX_DEATH
, SFX_DEATH_FREQ
, 64, 0, 0, -1);
194 rabbits
[c1
].frame_tick
++;
195 if (rabbits
[c1
].frame_tick
>= player_anims
[rabbits
[c1
].anim
].frame
[rabbits
[c1
].frame
].ticks
) {
197 if (rabbits
[c1
].frame
>= player_anims
[rabbits
[c1
].anim
].num_frames
)
198 rabbits
[c1
].frame
= player_anims
[rabbits
[c1
].anim
].restart_frame
;
199 rabbits
[c1
].frame_tick
= 0;
201 rabbits
[c1
].image
= player_anims
[rabbits
[c1
].anim
].frame
[rabbits
[c1
].frame
].image
+ rabbits
[c1
].colour
* 18 + rabbits
[c1
].direction
* 9;
202 if (rabbits
[c1
].used
== 1)
203 add_pob(main_info
.draw_page
, rabbits
[c1
].x
>> 16, rabbits
[c1
].y
>> 16, rabbits
[c1
].image
, &rabbit_gobs
);
213 for (c1
= 0; c1
< 300; c1
++) {
214 stars
[c1
].back
[main_info
.draw_page
] = get_pixel(main_info
.draw_page
, stars
[c1
].x
>> 16, stars
[c1
].y
>> 16);
215 set_pixel(main_info
.draw_page
, stars
[c1
].x
>> 16, stars
[c1
].y
>> 16, get_color(stars
[c1
].col
, pal
));
220 draw_pobs(main_info
.draw_page
);
224 main_info
.draw_page
^= 1;
225 main_info
.view_page
^= 1;
227 flippage(main_info
.view_page
);
233 redraw_pob_backgrounds(main_info
.draw_page
);
238 for (c1
= 299; c1
>= 0; c1
--) {
239 set_pixel(main_info
.draw_page
, stars
[c1
].old_x
>> 16, stars
[c1
].old_y
>> 16, stars
[c1
].back
[main_info
.draw_page
]);