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 char *menu_background
;
31 char menu_cur_pal
[768];
34 "Jump 'n Bump "JNB_VERSION
,
35 "by Brainchild Design in 1998.",
36 "Code by Mattias Brynervall.",
37 "Graphics by Martin Magnusson",
38 "and Andreas Brynervall.",
39 "Music by Anders Nilsson.",
40 "Linux port by Chuck Mason.",
41 "New SDL port by Florian Schulze.",
42 "http://www.icculus.org/jumpnbump/",
43 "Ryan C. Gordon made networking possible again!",
44 "Visit our homepage at:",
45 "http://www.algonet.se/~mattiasb",
46 "Jump 'n Bump is e-mailware.",
47 "That means you're supposed to send us an e-mail!",
48 "Write for example where you're from",
49 "and what you thought about this game.",
50 "If you do that, you will greatly encourage us",
51 "to make more games for you!",
52 "Send your e-mail to: matbr656@student.liu.se",
53 "Oh, and by the way, there're a lot of secrets!",
54 "If you can't find them, you'd better ask us...",
55 "If you'd like to contact a specific member of BCD,",
56 "these are their e-mail addresses:",
57 "Andreas Brynervall: andreasb@acc.umu.se",
58 "Mattias Brynervall: matbr656@student.liu.se",
59 "Martin Magnusson: marma102@student.liu.se",
60 "Anders Nilsson: equel@swipnet.se",
64 #define NUM_MESSAGES (sizeof(message)/sizeof(char *))
70 int end_loop_flag
, new_game_flag
, fade_flag
;
71 int mod_vol
= 0, mod_fade_direction
= 0;
73 int fade_dir
, fade_count
, fade_tick
;
80 /* After a game, we have to release the keys, cause AI player
81 can still be using them */
82 addkey((KEY_PL1_LEFT
& 0x7f) | 0x8000);
83 addkey((KEY_PL2_LEFT
& 0x7f) | 0x8000);
84 addkey((KEY_PL3_LEFT
& 0x7f) | 0x8000);
85 addkey((KEY_PL4_LEFT
& 0x7f) | 0x8000);
87 addkey((KEY_PL1_RIGHT
& 0x7f) | 0x8000);
88 addkey((KEY_PL2_RIGHT
& 0x7f) | 0x8000);
89 addkey((KEY_PL3_RIGHT
& 0x7f) | 0x8000);
90 addkey((KEY_PL4_RIGHT
& 0x7f) | 0x8000);
92 addkey((KEY_PL1_JUMP
& 0x7f) | 0x8000);
93 addkey((KEY_PL2_JUMP
& 0x7f) | 0x8000);
94 addkey((KEY_PL3_JUMP
& 0x7f) | 0x8000);
95 addkey((KEY_PL4_JUMP
& 0x7f) | 0x8000);
98 mod_fade_direction
= 1;
99 dj_ready_mod(MOD_MENU
);
100 dj_set_mod_volume((char)mod_vol
);
101 dj_set_sfx_volume(64);
105 memset(fade_pal
, 0, 48);
106 setpalette(240, 16, fade_pal
);
111 cur_message
= NUM_MESSAGES
- 1;
113 main_info
.page_info
[0].num_pobs
= 0;
114 main_info
.page_info
[1].num_pobs
= 0;
115 main_info
.view_page
= 0;
116 main_info
.draw_page
= 1;
118 esc_pressed
= key_pressed(1);
119 end_loop_flag
= new_game_flag
= 0;
126 for(c1
= 0; c1
< JNB_MAX_PLAYERS
; c1
++) // set AI to false
129 while (update_count
) {
131 if (key_pressed(1) == 1 && esc_pressed
== 0) {
134 memset(menu_pal
, 0, 768);
135 mod_fade_direction
= 0;
136 } else if (key_pressed(1) == 0)
139 update_player_actions();
140 for (c1
= 0; c1
< JNB_MAX_PLAYERS
; c1
++) {
141 if (end_loop_flag
== 1 && new_game_flag
== 1) {
142 if ((player
[c1
].x
>> 16) > (165 + c1
* 2)) {
143 if (player
[c1
].x_add
< 0)
144 player
[c1
].x_add
+= 16384;
146 player
[c1
].x_add
+= 12288;
147 if (player
[c1
].x_add
> 98304L)
148 player
[c1
].x_add
= 98304L;
149 player
[c1
].direction
= 0;
150 if (player
[c1
].anim
== 0) {
152 player
[c1
].frame
= 0;
153 player
[c1
].frame_tick
= 0;
154 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
156 player
[c1
].enabled
= 1;
158 if (!player
[c1
].action_up
) {
159 if (player
[c1
].y_add
< 0) {
160 player
[c1
].y_add
+= 32768;
161 if (player
[c1
].y_add
> 0)
162 player
[c1
].y_add
= 0;
165 player
[c1
].y_add
+= 12288;
166 if (player
[c1
].y_add
> 36864 && player
[c1
].anim
!= 3) {
168 player
[c1
].frame
= 0;
169 player
[c1
].frame_tick
= 0;
170 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
172 player
[c1
].y
+= player
[c1
].y_add
;
173 if ((player
[c1
].x
>> 16) <= (165 + c1
* 2) || (player
[c1
].x
>> 16) >= (208 + c1
* 2)) {
174 if ((player
[c1
].y
>> 16) > (160 + c1
* 2)) {
175 player
[c1
].y
= (160L + c1
* 2) << 16;
176 player
[c1
].y_add
= 0;
177 if (player
[c1
].anim
!= 0 && player
[c1
].anim
!= 1) {
179 player
[c1
].frame
= 0;
180 player
[c1
].frame_tick
= 0;
181 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
185 if ((player
[c1
].y
>> 16) > (138 + c1
* 2)) {
186 player
[c1
].y
= (138L + c1
* 2) << 16;
187 player
[c1
].y_add
= 0;
188 if (player
[c1
].anim
!= 0 && player
[c1
].anim
!= 1) {
190 player
[c1
].frame
= 0;
191 player
[c1
].frame_tick
= 0;
192 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
194 if (!player
[c1
].action_up
)
195 player
[c1
].jump_ready
= 1;
198 player
[c1
].x
+= player
[c1
].x_add
;
199 if ((player
[c1
].y
>> 16) > (138 + c1
* 2)) {
200 if ((player
[c1
].x
>> 16) > (165 + c1
* 2) && (player
[c1
].x
>> 16) < (190 + c1
* 2)) {
201 player
[c1
].x
= (165L + c1
* 2) << 16;
202 player
[c1
].x_add
= 0;
204 if ((player
[c1
].x
>> 16) > (190 + c1
* 2) && (player
[c1
].x
>> 16) < (208 + c1
* 2)) {
205 player
[c1
].x
= (208L + c1
* 2) << 16;
206 player
[c1
].x_add
= 0;
210 if (player
[c1
].action_left
&& player
[c1
].action_right
) {
211 if (player
[c1
].direction
== 1) {
212 if ((player
[c1
].x
>> 16) <= (165 + c1
* 2) || (player
[c1
].x
>> 16) >= (208 + c1
* 2)) {
213 if (player
[c1
].x_add
> 0) {
214 player
[c1
].x_add
-= 16384;
215 if ((player
[c1
].y
>> 16) >= (160 + c1
* 2))
216 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
218 player
[c1
].x_add
-= 12288;
220 if ((player
[c1
].x
>> 16) > (165 + c1
* 2) && (player
[c1
].x
>> 16) < (208 + c1
* 2)) {
221 if (player
[c1
].x_add
> 0) {
222 player
[c1
].x_add
-= 16384;
223 if ((player
[c1
].y
>> 16) >= (138 + c1
* 2))
224 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
226 player
[c1
].x_add
-= 12288;
228 if (player
[c1
].x_add
< -98304L)
229 player
[c1
].x_add
= -98304L;
230 player
[c1
].direction
= 1;
231 if (player
[c1
].anim
== 0) {
233 player
[c1
].frame
= 0;
234 player
[c1
].frame_tick
= 0;
235 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
238 if ((player
[c1
].x
>> 16) <= (165 + c1
* 2) || (player
[c1
].x
>> 16) >= (208 + c1
* 2)) {
239 if (player
[c1
].x_add
< 0) {
240 player
[c1
].x_add
+= 16384;
241 if ((player
[c1
].y
>> 16) >= (160 + c1
* 2))
242 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
244 player
[c1
].x_add
+= 12288;
246 if ((player
[c1
].x
>> 16) > (165 + c1
* 2) && (player
[c1
].x
>> 16) < (208 + c1
* 2)) {
247 if (player
[c1
].x_add
< 0) {
248 player
[c1
].x_add
+= 16384;
249 if ((player
[c1
].y
>> 16) >= (138 + c1
* 2))
250 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
252 player
[c1
].x_add
+= 12288;
254 if (player
[c1
].x_add
> 98304L)
255 player
[c1
].x_add
= 98304L;
256 player
[c1
].direction
= 0;
257 if (player
[c1
].anim
== 0) {
259 player
[c1
].frame
= 0;
260 player
[c1
].frame_tick
= 0;
261 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
264 } else if (player
[c1
].action_left
) {
265 if ((player
[c1
].x
>> 16) <= (165 + c1
* 2) || (player
[c1
].x
>> 16) >= (208 + c1
* 2)) {
266 if (player
[c1
].x_add
> 0) {
267 player
[c1
].x_add
-= 16384;
268 if ((player
[c1
].y
>> 16) >= (160 + c1
* 2))
269 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
271 player
[c1
].x_add
-= 12288;
273 if ((player
[c1
].x
>> 16) > (165 + c1
* 2) && (player
[c1
].x
>> 16) < (208 + c1
* 2)) {
274 if (player
[c1
].x_add
> 0) {
275 player
[c1
].x_add
-= 16384;
276 if ((player
[c1
].y
>> 16) >= (138 + c1
* 2))
277 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
279 player
[c1
].x_add
-= 12288;
281 if (player
[c1
].x_add
< -98304L)
282 player
[c1
].x_add
= -98304L;
283 player
[c1
].direction
= 1;
284 if (player
[c1
].anim
== 0) {
286 player
[c1
].frame
= 0;
287 player
[c1
].frame_tick
= 0;
288 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
290 } else if (player
[c1
].action_right
) {
291 if ((player
[c1
].x
>> 16) <= (165 + c1
* 2) || (player
[c1
].x
>> 16) >= (208 + c1
* 2)) {
292 if (player
[c1
].x_add
< 0) {
293 player
[c1
].x_add
+= 16384;
294 if ((player
[c1
].y
>> 16) >= (160 + c1
* 2))
295 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
297 player
[c1
].x_add
+= 12288;
299 if ((player
[c1
].x
>> 16) > (165 + c1
* 2) && (player
[c1
].x
>> 16) < (208 + c1
* 2)) {
300 if (player
[c1
].x_add
< 0) {
301 player
[c1
].x_add
+= 16384;
302 if ((player
[c1
].y
>> 16) >= (138 + c1
* 2))
303 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
305 player
[c1
].x_add
+= 12288;
307 if (player
[c1
].x_add
> 98304L)
308 player
[c1
].x_add
= 98304L;
309 player
[c1
].direction
= 0;
310 if (player
[c1
].anim
== 0) {
312 player
[c1
].frame
= 0;
313 player
[c1
].frame_tick
= 0;
314 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
317 if (((player
[c1
].x
>> 16) <= (165 + c1
* 2) || (player
[c1
].x
>> 16) >= (208 + c1
* 2)) && (player
[c1
].y
>> 16) >= (160 + c1
* 2)) {
318 if (player
[c1
].x_add
< 0) {
319 player
[c1
].x_add
+= 16384;
320 if (player
[c1
].x_add
> 0)
321 player
[c1
].x_add
= 0;
322 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
323 } else if (player
[c1
].x_add
> 0) {
324 player
[c1
].x_add
-= 16384;
325 if (player
[c1
].x_add
< 0)
326 player
[c1
].x_add
= 0;
327 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
330 if ((((player
[c1
].x
>> 16) > (165 + c1
* 2) && (player
[c1
].x
>> 16) < (208 + c1
* 2)) && (player
[c1
].y
>> 16) >= (138 + c1
* 2))) {
331 if (player
[c1
].x_add
< 0) {
332 player
[c1
].x_add
+= 16384;
333 if (player
[c1
].x_add
> 0)
334 player
[c1
].x_add
= 0;
335 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
336 } else if (player
[c1
].x_add
> 0) {
337 player
[c1
].x_add
-= 16384;
338 if (player
[c1
].x_add
< 0)
339 player
[c1
].x_add
= 0;
340 add_object(OBJ_SMOKE
, (player
[c1
].x
>> 16) + 2 + rnd(9), (player
[c1
].y
>> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE
, 0);
343 if (player
[c1
].anim
== 1) {
345 player
[c1
].frame
= 0;
346 player
[c1
].frame_tick
= 0;
347 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
350 if ((player
[c1
].jump_ready
== 1) && player
[c1
].action_up
) {
351 if ((player
[c1
].x
>> 16) <= (165 + c1
* 2) || (player
[c1
].x
>> 16) >= (208 + c1
* 2)) {
352 if ((player
[c1
].y
>> 16) >= (160 + c1
* 2)) {
353 player
[c1
].y_add
= -280000L;
355 player
[c1
].frame
= 0;
356 player
[c1
].frame_tick
= 0;
357 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
358 player
[c1
].jump_ready
= 0;
359 dj_play_sfx(SFX_JUMP
, (unsigned short)(SFX_JUMP_FREQ
+ rnd(2000) - 1000), 64, 0, 0, -1);
362 if ((player
[c1
].y
>> 16) >= (138 + c1
* 2)) {
363 player
[c1
].y_add
= -280000L;
365 player
[c1
].frame
= 0;
366 player
[c1
].frame_tick
= 0;
367 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
368 player
[c1
].jump_ready
= 0;
369 dj_play_sfx(SFX_JUMP
, (unsigned short)(SFX_JUMP_FREQ
+ rnd(2000) - 1000), 64, 0, 0, -1);
373 if (!player
[c1
].action_up
) {
374 if (player
[c1
].y_add
< 0) {
375 player
[c1
].y_add
+= 32768;
376 if (player
[c1
].y_add
> 0)
377 player
[c1
].y_add
= 0;
380 if (!player
[c1
].action_up
)
381 player
[c1
].jump_ready
= 1;
382 player
[c1
].y_add
+= 12288;
383 if (player
[c1
].y_add
> 36864 && player
[c1
].anim
!= 3) {
385 player
[c1
].frame
= 0;
386 player
[c1
].frame_tick
= 0;
387 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
389 player
[c1
].y
+= player
[c1
].y_add
;
390 if ((player
[c1
].x
>> 16) <= (165 + c1
* 2) || (player
[c1
].x
>> 16) >= (208 + c1
* 2)) {
391 if ((player
[c1
].y
>> 16) > (160 + c1
* 2)) {
392 player
[c1
].y
= (160L + c1
* 2) << 16;
393 player
[c1
].y_add
= 0;
394 if (player
[c1
].anim
!= 0 && player
[c1
].anim
!= 1) {
396 player
[c1
].frame
= 0;
397 player
[c1
].frame_tick
= 0;
398 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
402 if ((player
[c1
].y
>> 16) > (138 + c1
* 2)) {
403 player
[c1
].y
= (138L + c1
* 2) << 16;
404 player
[c1
].y_add
= 0;
405 if (player
[c1
].anim
!= 0 && player
[c1
].anim
!= 1) {
407 player
[c1
].frame
= 0;
408 player
[c1
].frame_tick
= 0;
409 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
413 player
[c1
].x
+= player
[c1
].x_add
;
414 if ((player
[c1
].x
>> 16) < 0) {
416 player
[c1
].x_add
= 0;
418 if ((player
[c1
].x
>> 16) > JNB_WIDTH
) {
421 memset(menu_pal
, 0, 768);
422 mod_fade_direction
= 0;
424 if ((player
[c1
].y
>> 16) > (138 + c1
* 2)) {
425 if ((player
[c1
].x
>> 16) > (165 + c1
* 2) && (player
[c1
].x
>> 16) < (190 + c1
* 2)) {
426 player
[c1
].x
= (165L + c1
* 2) << 16;
427 player
[c1
].x_add
= 0;
429 if ((player
[c1
].x
>> 16) > (190 + c1
* 2) && (player
[c1
].x
>> 16) < (208 + c1
* 2)) {
430 player
[c1
].x
= (208L + c1
* 2) << 16;
431 player
[c1
].x_add
= 0;
435 player
[c1
].frame_tick
++;
436 if (player
[c1
].frame_tick
>= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].ticks
) {
438 if (player
[c1
].frame
>= player_anims
[player
[c1
].anim
].num_frames
)
439 player
[c1
].frame
= player_anims
[player
[c1
].anim
].restart_frame
;
440 player
[c1
].frame_tick
= 0;
442 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
+ player
[c1
].direction
* 9;
447 main_info
.page_info
[main_info
.draw_page
].num_pobs
= 0;
449 for (c1
= 3; c1
>= 0; c1
--)
450 add_pob(main_info
.draw_page
, player
[c1
].x
>> 16, player
[c1
].y
>> 16, player
[c1
].image
+ c1
* 18, &rabbit_gobs
);
454 if (update_count
== 1) {
456 draw_pobs(main_info
.draw_page
);
461 if (mod_fade_direction
== 1) {
464 dj_set_mod_volume((char)mod_vol
);
469 dj_set_mod_volume((char)mod_vol
);
475 for (c1
= 0; c1
< 720; c1
++) {
476 if (menu_cur_pal
[c1
] < menu_pal
[c1
]) {
479 } else if (menu_cur_pal
[c1
] > menu_pal
[c1
]) {
484 if (fade_flag
== 0 && end_loop_flag
== 1) {
486 if (new_game_flag
== 1)
493 if (fade_count
< 30) {
494 for (c1
= 0; c1
< 48; c1
++) {
495 if (fade_pal
[c1
] > 0)
501 clear_lines(0, 220, 20, 0);
502 clear_lines(1, 220, 20, 0);
505 if (cur_message
>= NUM_MESSAGES
)
506 cur_message
-= NUM_MESSAGES
;
507 put_text(0, 200, 220, message
[cur_message
], 2);
508 put_text(1, 200, 220, message
[cur_message
], 2);
516 if (fade_count
< 100) {
517 for (c1
= 0; c1
< 48; c1
++) {
518 if (fade_pal
[c1
] < menu_pal
[c1
+ 720])
530 for (c1
= 0; c1
< 48; c1
++) {
531 if (fade_pal
[c1
] > menu_pal
[c1
+ 720])
535 if (update_count
== 1) {
536 main_info
.draw_page
^= 1;
537 main_info
.view_page
^= 1;
539 flippage(main_info
.view_page
);
544 if (fade_flag
!= 0) {
545 setpalette(0, 240, menu_cur_pal
);
548 if (update_count
== 1) {
549 setpalette(240, 16, fade_pal
);
554 redraw_pob_backgrounds(main_info
.draw_page
);
561 update_count
= intr_sysupdate();
576 fillpalette(0, 0, 0);
578 if ((handle
= dat_open("menu.pcx")) == 0) {
579 strcpy(main_info
.error_str
, "Error loading 'menu.pcx', aborting...\n");
582 if (read_pcx(handle
, background_pic
, JNB_WIDTH
*JNB_HEIGHT
, menu_pal
) != 0) {
583 strcpy(main_info
.error_str
, "Error loading 'menu.pcx', aborting...\n");
586 if ((handle
= dat_open("menumask.pcx")) == 0) {
587 strcpy(main_info
.error_str
, "Error loading 'menumask.pcx', aborting...\n");
590 if (read_pcx(handle
, mask_pic
, JNB_WIDTH
*JNB_HEIGHT
, 0) != 0) {
591 strcpy(main_info
.error_str
, "Error loading 'menumask.pcx', aborting...\n");
594 memset(menu_cur_pal
, 0, 768);
597 for (c1
= 0; c1
< 16; c1
++) {
598 menu_pal
[(240 + c1
) * 3 + 0] = c1
<< 2;
599 menu_pal
[(240 + c1
) * 3 + 1] = c1
<< 2;
600 menu_pal
[(240 + c1
) * 3 + 2] = c1
<< 2;
603 recalculate_gob(&rabbit_gobs
, menu_pal
);
604 recalculate_gob(&font_gobs
, menu_pal
);
605 recalculate_gob(&object_gobs
, menu_pal
);
606 register_background(background_pic
, menu_pal
);
607 register_mask(mask_pic
);
609 for (c1
= 0; c1
< JNB_MAX_PLAYERS
; c1
++) {
610 player
[c1
].enabled
= 0;
611 player
[c1
].x
= (long) rnd(150) << 16;
612 player
[c1
].y
= (160L + c1
* 2) << 16;
613 player
[c1
].x_add
= 0;
614 player
[c1
].y_add
= 0;
615 player
[c1
].direction
= rnd(2);
616 player
[c1
].jump_ready
= 1;
618 player
[c1
].frame
= 0;
619 player
[c1
].frame_tick
= 0;
620 player
[c1
].image
= player_anims
[player
[c1
].anim
].frame
[player
[c1
].frame
].image
;
623 for (c1
= 0; c1
< NUM_OBJECTS
; c1
++)
624 objects
[c1
].used
= 0;
626 main_info
.page_info
[0].num_pobs
= 0;
627 main_info
.page_info
[1].num_pobs
= 0;
634 void menu_deinit(void)