3 #define NUM_MESSAGES 24
8 char menu_cur_pal[768];
10 char message[NUM_MESSAGES][70] = {
12 "by Brainchild Design in 1998.",
13 "Code by Mattias Brynervall.",
14 "Graphics by Martin Magnusson",
15 "and Andreas Brynervall.",
16 "Music by Anders Nilsson.",
17 "Visit our homepage at:",
18 "http://www.algonet.se/~mattiasb",
19 "Jump 'n Bump is e-mailware.",
20 "That means you're supposed to send us an e-mail!",
21 "Write for example where you're from",
22 "and what you thought about this game.",
23 "If you do that, you will greatly encourage us",
24 "to make more games for you!",
25 "Send your e-mail to: matbr656@student.liu.se",
26 "Oh, and by the way, there's a lot of secrets!",
27 "If you can't find them, you'd better ask us...",
28 "If you'd like to contact a specific member of BCD,",
29 "these are their e-mail addresses:",
30 "Andreas Brynervall: andreasb@acc.umu.se",
31 "Mattias Brynervall: matbr656@student.liu.se",
32 "Martin Magnusson: marma102@student.liu.se",
33 "Anders Nilsson: equel@swipnet.se",
42 char end_loop_flag, new_game_flag, fade_flag;
43 char mod_vol, mod_fade_direction;
45 int fade_dir, fade_count, fade_tick;
52 mod_fade_direction = 1;
53 dj_ready_mod(MOD_MENU);
54 dj_set_mod_volume(mod_vol);
55 dj_set_sfx_volume(64);
59 memset(fade_pal, 0, 48);
61 for (c1 = 0; c1 < 48; c1++)
62 outportb(0x3c9, fade_pal[c1]);
66 cur_message = NUM_MESSAGES - 1;
68 main_info.page_info[0].num_pobs = 0;
69 main_info.page_info[1].num_pobs = 0;
70 main_info.view_page = 0;
71 main_info.draw_page = 1;
73 esc_pressed = key_pressed(1);
74 end_loop_flag = new_game_flag = 0;
80 if (key_pressed(1) == 1 && esc_pressed == 0) {
83 memset(menu_pal, 0, 768);
84 mod_fade_direction = 0;
85 } else if (key_pressed(1) == 0)
88 if (main_info.mouse_enabled == 1)
90 if (main_info.joy_enabled == 1)
92 for (c1 = 0; c1 < 4; c1++) {
93 if (end_loop_flag == 1 && new_game_flag == 1) {
94 if ((player[c1].x >> 16) > (165 + c1 * 2)) {
95 if (player[c1].x_add < 0)
96 player[c1].x_add += 16384;
98 player[c1].x_add += 12288;
99 if (player[c1].x_add > 98304L)
100 player[c1].x_add = 98304L;
101 player[c1].direction = 0;
102 if (player[c1].anim == 0) {
104 player[c1].frame = 0;
105 player[c1].frame_tick = 0;
106 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
108 player[c1].enabled = 1;
110 if ((c1 == 0 && key_pressed(KEY_PL1_JUMP) == 0) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 0) || (c1 == 2 && joy.but1 == 0) || (c1 == 3 && ((main_info.num_mouse_buttons == 3 && mouse.but3 == 0) || (main_info.num_mouse_buttons == 2 && mouse.but1 == 0 && mouse.but2 == 0)))) {
111 if (player[c1].y_add < 0) {
112 player[c1].y_add += 32768;
113 if (player[c1].y_add > 0)
114 player[c1].y_add = 0;
117 player[c1].y_add += 12288;
118 if (player[c1].y_add > 36864 && player[c1].anim != 3) {
120 player[c1].frame = 0;
121 player[c1].frame_tick = 0;
122 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
124 player[c1].y += player[c1].y_add;
125 if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) {
126 if ((player[c1].y >> 16) > (160 + c1 * 2)) {
127 player[c1].y = (160L + c1 * 2) << 16;
128 player[c1].y_add = 0;
129 if (player[c1].anim != 0 && player[c1].anim != 1) {
131 player[c1].frame = 0;
132 player[c1].frame_tick = 0;
133 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
137 if ((player[c1].y >> 16) > (138 + c1 * 2)) {
138 player[c1].y = (138L + c1 * 2) << 16;
139 player[c1].y_add = 0;
140 if (player[c1].anim != 0 && player[c1].anim != 1) {
142 player[c1].frame = 0;
143 player[c1].frame_tick = 0;
144 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
146 if ((c1 == 0 && key_pressed(KEY_PL1_JUMP) == 0) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 0) || (c1 == 2 && joy.but1 == 0) || (c1 == 3 && ((main_info.num_mouse_buttons == 3 && mouse.but3 == 0) || (main_info.num_mouse_buttons == 2 && mouse.but1 == 0 && mouse.but2 == 0))))
147 player[c1].jump_ready = 1;
150 player[c1].x += player[c1].x_add;
151 if ((player[c1].y >> 16) > (138 + c1 * 2)) {
152 if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (190 + c1 * 2)) {
153 player[c1].x = (165L + c1 * 2) << 16;
154 player[c1].x_add = 0;
156 if ((player[c1].x >> 16) > (190 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) {
157 player[c1].x = (208L + c1 * 2) << 16;
158 player[c1].x_add = 0;
162 if ((c1 == 0 && key_pressed(KEY_PL1_LEFT) == 1 && key_pressed(KEY_PL1_RIGHT) == 1) || (c1 == 1 && key_pressed(KEY_PL2_LEFT) == 1 && key_pressed(KEY_PL2_RIGHT) == 1) || (c1 == 2 && joy.x < -512 && joy.x > 512) || (c1 == 3 && mouse.but1 == 1 && mouse.but2 == 1)) {
163 if (player[c1].direction == 1) {
164 if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) {
165 if (player[c1].x_add > 0) {
166 player[c1].x_add -= 16384;
167 if ((player[c1].y >> 16) >= (160 + c1 * 2))
168 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);
170 player[c1].x_add -= 12288;
172 if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) {
173 if (player[c1].x_add > 0) {
174 player[c1].x_add -= 16384;
175 if ((player[c1].y >> 16) >= (138 + c1 * 2))
176 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);
178 player[c1].x_add -= 12288;
180 if (player[c1].x_add < -98304L)
181 player[c1].x_add = -98304L;
182 player[c1].direction = 1;
183 if (player[c1].anim == 0) {
185 player[c1].frame = 0;
186 player[c1].frame_tick = 0;
187 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
190 if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) {
191 if (player[c1].x_add < 0) {
192 player[c1].x_add += 16384;
193 if ((player[c1].y >> 16) >= (160 + c1 * 2))
194 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);
196 player[c1].x_add += 12288;
198 if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) {
199 if (player[c1].x_add < 0) {
200 player[c1].x_add += 16384;
201 if ((player[c1].y >> 16) >= (138 + c1 * 2))
202 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);
204 player[c1].x_add += 12288;
206 if (player[c1].x_add > 98304L)
207 player[c1].x_add = 98304L;
208 player[c1].direction = 0;
209 if (player[c1].anim == 0) {
211 player[c1].frame = 0;
212 player[c1].frame_tick = 0;
213 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
216 } else if ((c1 == 0 && key_pressed(KEY_PL1_LEFT) == 1) || (c1 == 1 && key_pressed(KEY_PL2_LEFT) == 1) || (c1 == 2 && joy.x < -512) || (c1 == 3 && mouse.but1 == 1)) {
217 if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) {
218 if (player[c1].x_add > 0) {
219 player[c1].x_add -= 16384;
220 if ((player[c1].y >> 16) >= (160 + c1 * 2))
221 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);
223 player[c1].x_add -= 12288;
225 if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) {
226 if (player[c1].x_add > 0) {
227 player[c1].x_add -= 16384;
228 if ((player[c1].y >> 16) >= (138 + c1 * 2))
229 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);
231 player[c1].x_add -= 12288;
233 if (player[c1].x_add < -98304L)
234 player[c1].x_add = -98304L;
235 player[c1].direction = 1;
236 if (player[c1].anim == 0) {
238 player[c1].frame = 0;
239 player[c1].frame_tick = 0;
240 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
242 } else if ((c1 == 0 && key_pressed(KEY_PL1_RIGHT) == 1) || (c1 == 1 && key_pressed(KEY_PL2_RIGHT) == 1) || (c1 == 2 && joy.x > 512) || (c1 == 3 && mouse.but2 == 1)) {
243 if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) {
244 if (player[c1].x_add < 0) {
245 player[c1].x_add += 16384;
246 if ((player[c1].y >> 16) >= (160 + c1 * 2))
247 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);
249 player[c1].x_add += 12288;
251 if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) {
252 if (player[c1].x_add < 0) {
253 player[c1].x_add += 16384;
254 if ((player[c1].y >> 16) >= (138 + c1 * 2))
255 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);
257 player[c1].x_add += 12288;
259 if (player[c1].x_add > 98304L)
260 player[c1].x_add = 98304L;
261 player[c1].direction = 0;
262 if (player[c1].anim == 0) {
264 player[c1].frame = 0;
265 player[c1].frame_tick = 0;
266 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
269 if (((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) && (player[c1].y >> 16) >= (160 + c1 * 2)) {
270 if (player[c1].x_add < 0) {
271 player[c1].x_add += 16384;
272 if (player[c1].x_add > 0)
273 player[c1].x_add = 0;
274 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);
275 } else if (player[c1].x_add > 0) {
276 player[c1].x_add -= 16384;
277 if (player[c1].x_add < 0)
278 player[c1].x_add = 0;
279 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);
282 if ((((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) && (player[c1].y >> 16) >= (138 + c1 * 2))) {
283 if (player[c1].x_add < 0) {
284 player[c1].x_add += 16384;
285 if (player[c1].x_add > 0)
286 player[c1].x_add = 0;
287 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);
288 } else if (player[c1].x_add > 0) {
289 player[c1].x_add -= 16384;
290 if (player[c1].x_add < 0)
291 player[c1].x_add = 0;
292 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);
295 if (player[c1].anim == 1) {
297 player[c1].frame = 0;
298 player[c1].frame_tick = 0;
299 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
302 if (player[c1].jump_ready == 1 && ((c1 == 0 && key_pressed(KEY_PL1_JUMP) == 1) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 1) || (c1 == 2 && joy.but1 == 1) || (c1 == 3 && ((main_info.num_mouse_buttons == 3 && mouse.but3 == 1) || (main_info.num_mouse_buttons == 2 && mouse.but1 == 1 && mouse.but2 == 1))))) {
303 if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) {
304 if ((player[c1].y >> 16) >= (160 + c1 * 2)) {
305 player[c1].y_add = -280000L;
307 player[c1].frame = 0;
308 player[c1].frame_tick = 0;
309 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
310 player[c1].jump_ready = 0;
311 dj_play_sfx(SFX_JUMP, SFX_JUMP_FREQ + rnd(2000) - 1000, 64, 0, 0, -1);
314 if ((player[c1].y >> 16) >= (138 + c1 * 2)) {
315 player[c1].y_add = -280000L;
317 player[c1].frame = 0;
318 player[c1].frame_tick = 0;
319 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
320 player[c1].jump_ready = 0;
321 dj_play_sfx(SFX_JUMP, SFX_JUMP_FREQ + rnd(2000) - 1000, 64, 0, 0, -1);
325 if ((c1 == 0 && key_pressed(KEY_PL1_JUMP) == 0) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 0) || (c1 == 2 && joy.but1 == 0) || (c1 == 3 && ((main_info.num_mouse_buttons == 3 && mouse.but3 == 0) || (main_info.num_mouse_buttons == 2 && mouse.but1 == 0 && mouse.but2 == 0)))) {
326 if (player[c1].y_add < 0) {
327 player[c1].y_add += 32768;
328 if (player[c1].y_add > 0)
329 player[c1].y_add = 0;
332 if ((c1 == 0 && key_pressed(KEY_PL1_JUMP) == 0) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 0) || (c1 == 2 && joy.but1 == 0) || (c1 == 3 && ((main_info.num_mouse_buttons == 3 && mouse.but3 == 0) || (main_info.num_mouse_buttons == 2 && (mouse.but1 == 0 || mouse.but2 == 0)))))
333 player[c1].jump_ready = 1;
334 player[c1].y_add += 12288;
335 if (player[c1].y_add > 36864 && player[c1].anim != 3) {
337 player[c1].frame = 0;
338 player[c1].frame_tick = 0;
339 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
341 player[c1].y += player[c1].y_add;
342 if ((player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2)) {
343 if ((player[c1].y >> 16) > (160 + c1 * 2)) {
344 player[c1].y = (160L + c1 * 2) << 16;
345 player[c1].y_add = 0;
346 if (player[c1].anim != 0 && player[c1].anim != 1) {
348 player[c1].frame = 0;
349 player[c1].frame_tick = 0;
350 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
352 dj_play_sfx(SFX_LAND, SFX_LAND_FREQ, 64, 0, 0, -1);
357 if ((player[c1].y >> 16) > (138 + c1 * 2)) {
358 player[c1].y = (138L + c1 * 2) << 16;
359 player[c1].y_add = 0;
360 if (player[c1].anim != 0 && player[c1].anim != 1) {
362 player[c1].frame = 0;
363 player[c1].frame_tick = 0;
364 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
366 dj_play_sfx(SFX_LAND, SFX_LAND_FREQ, 64, 0, 0, -1);
371 player[c1].x += player[c1].x_add;
372 if ((player[c1].x >> 16) < 0) {
374 player[c1].x_add = 0;
376 if ((player[c1].x >> 16) > 400) {
379 memset(menu_pal, 0, 768);
380 mod_fade_direction = 0;
382 if ((player[c1].y >> 16) > (138 + c1 * 2)) {
383 if ((player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (190 + c1 * 2)) {
384 player[c1].x = (165L + c1 * 2) << 16;
385 player[c1].x_add = 0;
387 if ((player[c1].x >> 16) > (190 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2)) {
388 player[c1].x = (208L + c1 * 2) << 16;
389 player[c1].x_add = 0;
393 player[c1].frame_tick++;
394 if (player[c1].frame_tick >= player_anims[player[c1].anim].frame[player[c1].frame].ticks) {
396 if (player[c1].frame >= player_anims[player[c1].anim].num_frames)
397 player[c1].frame = player_anims[player[c1].anim].restart_frame;
398 player[c1].frame_tick = 0;
400 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;
405 main_info.page_info[main_info.draw_page].num_pobs = 0;
407 for (c1 = 3; c1 >= 0; c1--)
408 add_pob(main_info.draw_page, player[c1].x >> 16, player[c1].y >> 16, player[c1].image + c1 * 18, rabbit_gobs);
412 draw_pobs(main_info.draw_page);
416 if (mod_fade_direction == 1) {
419 dj_set_mod_volume(mod_vol);
424 dj_set_mod_volume(mod_vol);
429 for (c1 = 0; c1 < 720; c1++) {
430 if (menu_cur_pal[c1] < menu_pal[c1]) {
433 } else if (menu_cur_pal[c1] > menu_pal[c1]) {
438 if (fade_flag == 0 && end_loop_flag == 1) {
440 if (new_game_flag == 1)
446 if (fade_flag == 2) {
453 if (fade_count < 30) {
454 for (c1 = 0; c1 < 48; c1++) {
455 if (fade_pal[c1] > 0)
460 outportw(0x3c4, 0x0f02);
461 memset((char *) (0xa0000 + 220 * 100 + __djgpp_conventional_base), 0, 2000);
462 memset((char *) (0xa0000 + 32768 + 220 * 100 + __djgpp_conventional_base), 0, 2000);
464 if (cur_message >= NUM_MESSAGES)
465 cur_message -= NUM_MESSAGES;
466 put_text(0, 200, 220, message[cur_message], 2);
467 put_text(1, 200, 220, message[cur_message], 2);
474 if (fade_count < 100) {
475 for (c1 = 0; c1 < 48; c1++) {
476 if (fade_pal[c1] < menu_pal[c1 + 720])
488 for (c1 = 0; c1 < 48; c1++) {
489 if (fade_pal[c1] > menu_pal[c1 + 720])
493 main_info.draw_page ^= 1;
494 main_info.view_page ^= 1;
496 outportw(0x3d4, (main_info.view_page << 23) + 0x0d);
497 outportw(0x3d4, ((main_info.view_page << 15) & 0xff00) + 0x0c);
499 while ((inportb(0x3da) & 8) == 0)
501 while ((inportb(0x3da) & 8) == 8)
504 if (fade_flag != 0) {
506 for (c1 = 0; c1 < 720; c1++)
507 outportb(0x3c9, menu_cur_pal[c1]);
510 outportb(0x3c8, 240);
511 for (c1 = 0; c1 < 48; c1++)
512 outportb(0x3c9, fade_pal[c1]);
516 redraw_pob_backgrounds(main_info.draw_page);
532 for (c1 = 0; c1 < 768; c1++)
535 if ((handle = dat_open("menu.pcx", datfile_name, "rb")) == 0) {
536 strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n");
539 if (read_pcx(handle, background_pic, 102400, menu_pal) != 0) {
540 strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n");
544 if ((handle = dat_open("menumask.pcx", datfile_name, "rb")) == 0) {
545 strcpy(main_info.error_str, "Error loading 'menumask.pcx', aborting...\n");
548 if (read_pcx(handle, mask_pic, 102400, 0) != 0) {
549 strcpy(main_info.error_str, "Error loading 'menumask.pcx', aborting...\n");
553 memset(menu_cur_pal, 0, 768);
555 put_block(0, 0, 0, 400, 256, background_pic);
556 put_block(1, 0, 0, 400, 256, background_pic);
558 for (c1 = 0; c1 < 4; c1++) {
559 player[c1].enabled = 0;
560 player[c1].x = (long) rnd(150) << 16;
561 player[c1].y = (160L + c1 * 2) << 16;
562 player[c1].x_add = 0;
563 player[c1].y_add = 0;
564 player[c1].direction = rnd(2);
565 player[c1].jump_ready = 1;
567 player[c1].frame = 0;
568 player[c1].frame_tick = 0;
569 player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image;
572 for (c1 = 0; c1 < 300; c1++)
573 objects[c1].used = 0;
575 main_info.page_info[0].num_pobs = 0;
576 main_info.page_info[1].num_pobs = 0;
583 void menu_deinit(void)