diff options
Diffstat (limited to 'apps/plugins/doom/rockdoom.c')
-rw-r--r-- | apps/plugins/doom/rockdoom.c | 291 |
1 files changed, 104 insertions, 187 deletions
diff --git a/apps/plugins/doom/rockdoom.c b/apps/plugins/doom/rockdoom.c index 00bd22b7ea..6d0e73e3be 100644 --- a/apps/plugins/doom/rockdoom.c +++ b/apps/plugins/doom/rockdoom.c | |||
@@ -108,6 +108,7 @@ int printf(const char *fmt, ...) | |||
108 | static int p_xtpt; | 108 | static int p_xtpt; |
109 | char p_buf[50]; | 109 | char p_buf[50]; |
110 | bool ok; | 110 | bool ok; |
111 | rb->yield(); | ||
111 | va_list ap; | 112 | va_list ap; |
112 | 113 | ||
113 | va_start(ap, fmt); | 114 | va_start(ap, fmt); |
@@ -293,76 +294,29 @@ int Dbuild_base (struct opt_items *names) | |||
293 | 294 | ||
294 | D_AddFile (GAMEBASE"rockdoom.wad", source_pwad); | 295 | D_AddFile (GAMEBASE"rockdoom.wad", source_pwad); |
295 | 296 | ||
296 | int i=0; | 297 | int i=0, j; |
297 | /* Doom Shareware */ | 298 | /* Doom Shareware */ |
298 | if ( !fileexists (wads_builtin[0]) ) | ||
299 | { | ||
300 | names[i].string=versions_builtin[0]; | ||
301 | names[i].voice_id=0; | ||
302 | namemap[i]=0; | ||
303 | i++; | ||
304 | } | ||
305 | |||
306 | /* Doom registered */ | 299 | /* Doom registered */ |
307 | if ( !fileexists (wads_builtin[1]) ) | ||
308 | { | ||
309 | names[i].string=versions_builtin[1]; | ||
310 | names[i].voice_id=0; | ||
311 | namemap[i]=1; | ||
312 | i++; | ||
313 | } | ||
314 | |||
315 | /* Ultimate Doom */ | 300 | /* Ultimate Doom */ |
316 | if ( !fileexists (wads_builtin[2]) ) | ||
317 | { | ||
318 | names[i].string=versions_builtin[2]; | ||
319 | names[i].voice_id=0; | ||
320 | namemap[i]=2; | ||
321 | i++; | ||
322 | } | ||
323 | |||
324 | /* Doom2 */ | 301 | /* Doom2 */ |
325 | if ( !fileexists (wads_builtin[3]) ) | ||
326 | { | ||
327 | names[i].string=versions_builtin[3]; | ||
328 | names[i].voice_id=0; | ||
329 | namemap[i]=3; | ||
330 | i++; | ||
331 | } | ||
332 | |||
333 | /* Doom2f */ | 302 | /* Doom2f */ |
334 | if ( !fileexists (wads_builtin[4]) ) | ||
335 | { | ||
336 | names[i].string=versions_builtin[4]; | ||
337 | names[i].voice_id=0; | ||
338 | namemap[i]=4; | ||
339 | i++; | ||
340 | } | ||
341 | |||
342 | /* Plutonia */ | 303 | /* Plutonia */ |
343 | if ( !fileexists (wads_builtin[5]) ) | ||
344 | { | ||
345 | names[i].string=versions_builtin[5]; | ||
346 | names[i].voice_id=0; | ||
347 | namemap[i]=5; | ||
348 | i++; | ||
349 | } | ||
350 | |||
351 | /* TNT */ | 304 | /* TNT */ |
352 | if ( !fileexists (wads_builtin[6]) ) | 305 | for(j=0;j<7;j++) |
353 | { | 306 | if ( !fileexists (wads_builtin[j]) ) |
354 | names[i].string=versions_builtin[6]; | 307 | { |
355 | names[i].voice_id=0; | 308 | names[i].string=versions_builtin[j]; |
356 | namemap[i]=6; | 309 | names[i].voice_id=0; |
357 | i++; | 310 | namemap[i]=j; |
358 | } | 311 | i++; |
312 | } | ||
359 | // Set argvlist defaults | 313 | // Set argvlist defaults |
360 | argvlist.timedemo=0; | 314 | argvlist.timedemo=0; |
361 | 315 | ||
362 | return i; | 316 | return i; |
363 | } | 317 | } |
364 | 318 | ||
365 | // This is a general function that takes in an menu_item structure and makes a list | 319 | // This is a general function that takes in a menu_item structure and makes a list |
366 | // of files within it based on matching the string stringmatch to the files. | 320 | // of files within it based on matching the string stringmatch to the files. |
367 | int Dbuild_filelistm(struct menu_item **names, char *firstentry, char *directory, char *stringmatch) | 321 | int Dbuild_filelistm(struct menu_item **names, char *firstentry, char *directory, char *stringmatch) |
368 | { | 322 | { |
@@ -413,8 +367,10 @@ int Dbuild_filelistm(struct menu_item **names, char *firstentry, char *directory | |||
413 | return i; | 367 | return i; |
414 | } | 368 | } |
415 | 369 | ||
370 | static int translatekey(int key) __attribute__ ((noinline)); | ||
371 | |||
416 | // This key configuration code is not the cleanest or the most efficient, but it works | 372 | // This key configuration code is not the cleanest or the most efficient, but it works |
417 | int translatekey(int key) | 373 | static int translatekey(int key) |
418 | { | 374 | { |
419 | if (key<31) | 375 | if (key<31) |
420 | { | 376 | { |
@@ -431,16 +387,17 @@ int translatekey(int key) | |||
431 | case 4: | 387 | case 4: |
432 | return KEY_DOWNARROW; | 388 | return KEY_DOWNARROW; |
433 | case 5: | 389 | case 5: |
434 | return KEY_RCTRL; | 390 | return KEY_ENTER; |
435 | case 6: | 391 | case 6: |
436 | return ' '; | 392 | return KEY_RCTRL; |
437 | case 7: | 393 | case 7: |
438 | return KEY_ESCAPE; | 394 | return ' '; |
439 | case 8: | 395 | case 8: |
440 | return 'w'; | 396 | return KEY_ESCAPE; |
441 | case 9: | 397 | case 9: |
442 | return KEY_ENTER; | 398 | return 'w'; |
443 | case 10: | 399 | case 10: |
400 | return KEY_TAB; | ||
444 | default: | 401 | default: |
445 | return 0; | 402 | return 0; |
446 | } | 403 | } |
@@ -459,17 +416,18 @@ int translatekey(int key) | |||
459 | return 3; | 416 | return 3; |
460 | case KEY_DOWNARROW: | 417 | case KEY_DOWNARROW: |
461 | return 4; | 418 | return 4; |
462 | case KEY_RCTRL: | 419 | case KEY_ENTER: |
463 | return 5; | 420 | return 5; |
464 | case ' ': | 421 | case KEY_RCTRL: |
465 | return 6; | 422 | return 6; |
466 | case KEY_ESCAPE: | 423 | case ' ': |
467 | return 7; | 424 | return 7; |
468 | case 'w': | 425 | case KEY_ESCAPE: |
469 | return 8; | 426 | return 8; |
470 | case KEY_ENTER: | 427 | case 'w': |
471 | return 9; | 428 | return 9; |
472 | case KEY_F9: | 429 | case KEY_TAB: |
430 | return 10; | ||
473 | default: | 431 | default: |
474 | return 0; | 432 | return 0; |
475 | } | 433 | } |
@@ -484,18 +442,40 @@ int Oset_keys() | |||
484 | int m, result; | 442 | int m, result; |
485 | int menuquit=0; | 443 | int menuquit=0; |
486 | 444 | ||
445 | |||
487 | static const struct opt_items doomkeys[] = { | 446 | static const struct opt_items doomkeys[] = { |
488 | { "Unmapped", NULL }, | 447 | { "Unmapped", NULL }, |
489 | { "Key Right", NULL }, | 448 | { "Key Right", NULL }, |
490 | { "Key Left", NULL }, | 449 | { "Key Left", NULL }, |
491 | { "Key Up", NULL }, | 450 | { "Key Up", NULL }, |
492 | { "Key Down", NULL }, | 451 | { "Key Down", NULL }, |
452 | { "Key Select", NULL }, | ||
453 | #if defined(TOSHIBA_GIGABEAT_F) | ||
454 | { "Key A", NULL }, | ||
455 | { "Key Menu", NULL }, | ||
456 | { "Key Power", NULL }, | ||
457 | { "Key Volume Down", NULL }, | ||
458 | { "Key Volume Up", NULL }, | ||
459 | #else | ||
493 | { "Key Record", NULL }, | 460 | { "Key Record", NULL }, |
494 | { "Key Mode", NULL }, | 461 | { "Key Mode", NULL }, |
495 | { "Key Off", NULL }, | 462 | { "Key Off", NULL }, |
496 | { "Key On", NULL }, | 463 | { "Key On", NULL }, |
497 | { "Key Select", NULL }, | 464 | #endif |
498 | }; | 465 | }; |
466 | |||
467 | int *keys[]={ | ||
468 | &key_right, | ||
469 | &key_left, | ||
470 | &key_up, | ||
471 | &key_down, | ||
472 | &key_fire, | ||
473 | &key_use, | ||
474 | &key_strafe, | ||
475 | &key_weapon, | ||
476 | &key_map | ||
477 | }; | ||
478 | |||
499 | int numdoomkeys=sizeof(doomkeys) / sizeof(*doomkeys); | 479 | int numdoomkeys=sizeof(doomkeys) / sizeof(*doomkeys); |
500 | 480 | ||
501 | static const struct menu_item items[] = { | 481 | static const struct menu_item items[] = { |
@@ -513,69 +493,17 @@ int Oset_keys() | |||
513 | m = rb->menu_init(items, sizeof(items) / sizeof(*items), | 493 | m = rb->menu_init(items, sizeof(items) / sizeof(*items), |
514 | NULL, NULL, NULL, NULL); | 494 | NULL, NULL, NULL, NULL); |
515 | 495 | ||
516 | while(!menuquit) | 496 | while(!menuquit) |
517 | { | 497 | { |
518 | result=rb->menu_show(m); | 498 | result=rb->menu_show(m); |
519 | switch (result) | 499 | if(result<0) |
520 | { | ||
521 | case 0: | ||
522 | key_right=translatekey(key_right); | ||
523 | rb->set_option(items[0].desc, &key_right, INT, doomkeys, numdoomkeys, NULL ); | ||
524 | key_right=translatekey(key_right); | ||
525 | break; | ||
526 | |||
527 | case 1: | ||
528 | key_left=translatekey(key_left); | ||
529 | rb->set_option(items[1].desc, &key_left, INT, doomkeys, numdoomkeys, NULL ); | ||
530 | key_left=translatekey(key_left); | ||
531 | break; | ||
532 | |||
533 | case 2: | ||
534 | key_up=translatekey(key_up); | ||
535 | rb->set_option(items[2].desc, &key_up, INT, doomkeys, numdoomkeys, NULL ); | ||
536 | key_up=translatekey(key_up); | ||
537 | break; | ||
538 | |||
539 | case 3: | ||
540 | key_down=translatekey(key_down); | ||
541 | rb->set_option(items[3].desc, &key_down, INT, doomkeys, numdoomkeys, NULL ); | ||
542 | key_down=translatekey(key_down); | ||
543 | break; | ||
544 | |||
545 | case 4: | ||
546 | key_fire=translatekey(key_fire); | ||
547 | rb->set_option(items[4].desc, &key_fire, INT, doomkeys, numdoomkeys, NULL ); | ||
548 | key_fire=translatekey(key_fire); | ||
549 | break; | ||
550 | |||
551 | case 5: | ||
552 | key_use=translatekey(key_use); | ||
553 | rb->set_option(items[5].desc, &key_use, INT, doomkeys, numdoomkeys, NULL ); | ||
554 | key_use=translatekey(key_use); | ||
555 | break; | ||
556 | |||
557 | case 6: | ||
558 | key_strafe=translatekey(key_strafe); | ||
559 | rb->set_option(items[6].desc, &key_strafe, INT, doomkeys, numdoomkeys, NULL ); | ||
560 | key_strafe=translatekey(key_strafe); | ||
561 | break; | ||
562 | |||
563 | case 7: | ||
564 | key_weapon=translatekey(key_weapon); | ||
565 | rb->set_option(items[7].desc, &key_weapon, INT, doomkeys, numdoomkeys, NULL ); | ||
566 | key_weapon=translatekey(key_weapon); | ||
567 | break; | ||
568 | |||
569 | case 8: | ||
570 | key_map=translatekey(key_map); | ||
571 | rb->set_option(items[8].desc, &key_map, INT, doomkeys, numdoomkeys, NULL ); | ||
572 | key_map=translatekey(key_map); | ||
573 | break; | ||
574 | |||
575 | default: | ||
576 | menuquit=1; | 500 | menuquit=1; |
577 | break; | 501 | else |
578 | } | 502 | { |
503 | *keys[result]=translatekey(*keys[result]); | ||
504 | rb->set_option(items[result].desc, keys[result], INT, doomkeys, numdoomkeys, NULL ); | ||
505 | *keys[result]=translatekey(*keys[result]); | ||
506 | } | ||
579 | } | 507 | } |
580 | 508 | ||
581 | rb->menu_exit(m); | 509 | rb->menu_exit(m); |
@@ -596,8 +524,8 @@ static bool Doptions() | |||
596 | int menuquit=0; | 524 | int menuquit=0; |
597 | 525 | ||
598 | static const struct menu_item items[] = { | 526 | static const struct menu_item items[] = { |
599 | { "Sound", NULL }, | ||
600 | { "Set Keys", NULL }, | 527 | { "Set Keys", NULL }, |
528 | { "Sound", NULL }, | ||
601 | { "Timedemo", NULL }, | 529 | { "Timedemo", NULL }, |
602 | { "Player Bobbing", NULL }, | 530 | { "Player Bobbing", NULL }, |
603 | { "Weapon Recoil", NULL }, | 531 | { "Weapon Recoil", NULL }, |
@@ -606,67 +534,43 @@ static bool Doptions() | |||
606 | { "Always Run", NULL }, | 534 | { "Always Run", NULL }, |
607 | { "Headsup Display", NULL }, | 535 | { "Headsup Display", NULL }, |
608 | { "Statusbar Always Red", NULL }, | 536 | { "Statusbar Always Red", NULL }, |
537 | #if(LCD_HEIGHT>LCD_WIDTH) | ||
538 | { "Rotate Screen 90 deg", NULL }, | ||
539 | #endif | ||
609 | }; | 540 | }; |
541 | |||
542 | void *options[]={ | ||
543 | &enable_sound, | ||
544 | &argvlist.timedemo, | ||
545 | &default_player_bobbing, | ||
546 | &default_weapon_recoil, | ||
547 | &default_translucency, | ||
548 | &fake_contrast, | ||
549 | &autorun, | ||
550 | &hud_displayed, | ||
551 | &sts_always_red, | ||
552 | #if(LCD_HEIGHT>LCD_WIDTH) | ||
553 | &rotate_screen, | ||
554 | #endif | ||
555 | }; | ||
610 | 556 | ||
611 | m = rb->menu_init(items, sizeof(items) / sizeof(*items), | 557 | m = rb->menu_init(items, sizeof(items) / sizeof(*items), |
612 | NULL, NULL, NULL, NULL); | 558 | NULL, NULL, NULL, NULL); |
613 | 559 | ||
614 | while(!menuquit) | 560 | while(!menuquit) |
615 | { | 561 | { |
616 | result=rb->menu_show(m); | 562 | result=rb->menu_show(m); |
617 | switch (result) | 563 | if(result==0) |
618 | { | ||
619 | case 0: /* Sound */ | ||
620 | nosfxparm=!nosfxparm; // Have to invert it before setting | ||
621 | rb->set_option(items[0].desc, &nosfxparm, INT, onoff, 2, NULL ); | ||
622 | nosfxparm=!nosfxparm; | ||
623 | break; | ||
624 | |||
625 | case 1: /* Keys */ | ||
626 | Oset_keys(); | 564 | Oset_keys(); |
627 | break; | 565 | else if (result > 0) |
628 | 566 | rb->set_option(items[result].desc, options[result-1], INT, onoff, 2, NULL ); | |
629 | case 2: /* Timedemo */ | 567 | else |
630 | rb->set_option(items[2].desc, &argvlist.timedemo, INT, onoff, 2, NULL ); | ||
631 | break; | ||
632 | |||
633 | case 3: /* Player Bobbing */ | ||
634 | rb->set_option(items[3].desc, &default_player_bobbing, INT, onoff, 2, NULL ); | ||
635 | break; | ||
636 | |||
637 | case 4: /* Weapon Recoil */ | ||
638 | rb->set_option(items[4].desc, &default_weapon_recoil, INT, onoff, 2, NULL ); | ||
639 | break; | ||
640 | |||
641 | case 5: /* Translucency */ | ||
642 | rb->set_option(items[5].desc, &default_translucency, INT, onoff, 2, NULL ); | ||
643 | break; | ||
644 | |||
645 | case 6: /* Fake Contrast */ | ||
646 | rb->set_option(items[6].desc, &fake_contrast, INT, onoff, 2, NULL ); | ||
647 | break; | ||
648 | |||
649 | case 7: /* Always Run */ | ||
650 | rb->set_option(items[7].desc, &autorun, INT, onoff, 2, NULL ); | ||
651 | break; | ||
652 | |||
653 | case 8: /* Headsup Display */ | ||
654 | rb->set_option(items[8].desc, &hud_displayed, INT, onoff, 2, NULL ); | ||
655 | break; | ||
656 | |||
657 | case 9: /* Statusbar always red */ | ||
658 | rb->set_option(items[9].desc, &sts_always_red, INT, onoff, 2, NULL ); | ||
659 | break; | ||
660 | |||
661 | default: | ||
662 | menuquit=1; | 568 | menuquit=1; |
663 | break; | 569 | } |
664 | } | ||
665 | } | ||
666 | 570 | ||
667 | rb->menu_exit(m); | 571 | rb->menu_exit(m); |
668 | 572 | ||
669 | return (1); | 573 | return (1); |
670 | } | 574 | } |
671 | 575 | ||
672 | int menuchoice(struct menu_item *menu, int items) | 576 | int menuchoice(struct menu_item *menu, int items) |
@@ -807,6 +711,19 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
807 | else if( result == -2 ) return PLUGIN_ERROR; // Missing base wads | 711 | else if( result == -2 ) return PLUGIN_ERROR; // Missing base wads |
808 | } | 712 | } |
809 | 713 | ||
714 | #if(LCD_HEIGHT>LCD_WIDTH) | ||
715 | if(rotate_screen) | ||
716 | { | ||
717 | SCREENHEIGHT=LCD_WIDTH; | ||
718 | SCREENWIDTH=LCD_HEIGHT; | ||
719 | } | ||
720 | else | ||
721 | { | ||
722 | SCREENHEIGHT=LCD_HEIGHT; | ||
723 | SCREENWIDTH=LCD_WIDTH; | ||
724 | } | ||
725 | #endif | ||
726 | |||
810 | Dhandle_ver( namemap[ result ] ); | 727 | Dhandle_ver( namemap[ result ] ); |
811 | 728 | ||
812 | rb->lcd_setfont(0); | 729 | rb->lcd_setfont(0); |