summaryrefslogtreecommitdiff
path: root/apps/plugins/doom/rockdoom.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/doom/rockdoom.c')
-rw-r--r--apps/plugins/doom/rockdoom.c291
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.
367int Dbuild_filelistm(struct menu_item **names, char *firstentry, char *directory, char *stringmatch) 321int 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
370static 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
417int translatekey(int key) 373static 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
672int menuchoice(struct menu_item *menu, int items) 576int 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);