summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/doom/rockdoom.c166
1 files changed, 161 insertions, 5 deletions
diff --git a/apps/plugins/doom/rockdoom.c b/apps/plugins/doom/rockdoom.c
index 08bbafa932..de118a60c1 100644
--- a/apps/plugins/doom/rockdoom.c
+++ b/apps/plugins/doom/rockdoom.c
@@ -423,7 +423,6 @@ int Dbuild_addons(struct opt_items *names)
423 return i; 423 return i;
424} 424}
425 425
426
427int Dbuild_demos(struct opt_items *names) 426int Dbuild_demos(struct opt_items *names)
428{ 427{
429 int i=1; 428 int i=1;
@@ -456,8 +455,165 @@ int Dbuild_demos(struct opt_items *names)
456 return i; 455 return i;
457} 456}
458 457
459void Oset_keys() 458// This key configuration code is not the cleanest or the most efficient, but it works
459int translatekey(int key)
460{
461 if (key<31)
462 {
463 switch(key)
464 {
465 case 0:
466 return 0;
467 case 1:
468 return KEY_RIGHTARROW;
469 case 2:
470 return KEY_LEFTARROW;
471 case 3:
472 return KEY_UPARROW;
473 case 4:
474 return KEY_DOWNARROW;
475 case 5:
476 return KEY_RCTRL;
477 case 6:
478 return ' ';
479 case 7:
480 return KEY_ESCAPE;
481 case 8:
482 return 'w';
483 case 9:
484 return KEY_ENTER;
485 default:
486 return 0;
487 }
488 }
489 else
490 {
491 switch(key)
492 {
493 case 0:
494 return 0;
495 case KEY_RIGHTARROW:
496 return 1;
497 case KEY_LEFTARROW:
498 return 2;
499 case KEY_UPARROW:
500 return 3;
501 case KEY_DOWNARROW:
502 return 4;
503 case KEY_RCTRL:
504 return 5;
505 case ' ':
506 return 6;
507 case KEY_ESCAPE:
508 return 7;
509 case 'w':
510 return 8;
511 case KEY_ENTER:
512 return 9;
513 default:
514 return 0;
515 }
516 }
517}
518
519// I havn't added configurable keys for enter or escape because this requires some modification to
520// m_menu.c which hasn't been done yet.
521
522int Oset_keys()
460{ 523{
524 int m, result;
525 int menuquit=0;
526
527 static const struct opt_items doomkeys[] = {
528 { "Unmapped", NULL },
529 { "Key Right", NULL },
530 { "Key Left", NULL },
531 { "Key Up", NULL },
532 { "Key Down", NULL },
533 { "Key Record", NULL },
534 { "Key Mode", NULL },
535 { "Key Off", NULL },
536 { "Key On", NULL },
537 { "Key Select", NULL },
538 };
539 int numdoomkeys=sizeof(doomkeys) / sizeof(*doomkeys);
540
541 static const struct menu_item items[] = {
542 { "Game Right", NULL },
543 { "Game Left", NULL },
544 { "Game Up", NULL },
545 { "Game Down", NULL },
546 { "Game Shoot", NULL },
547 { "Game Open", NULL },
548 { "Game Strafe", NULL },
549 { "Game Weapon", NULL },
550 };
551
552 m = rb->menu_init(items, sizeof(items) / sizeof(*items),
553 doom_menu_cb, NULL, NULL, NULL);
554
555 while(!menuquit)
556 {
557 result=rb->menu_show(m);
558 switch (result)
559 {
560 case 0:
561 key_right=translatekey(key_right);
562 rb->set_option(items[0].desc, &key_right, INT, doomkeys, numdoomkeys, NULL );
563 key_right=translatekey(key_right);
564 break;
565
566 case 1:
567 key_left=translatekey(key_left);
568 rb->set_option(items[1].desc, &key_left, INT, doomkeys, numdoomkeys, NULL );
569 key_left=translatekey(key_left);
570 break;
571
572 case 2:
573 key_up=translatekey(key_up);
574 rb->set_option(items[2].desc, &key_up, INT, doomkeys, numdoomkeys, NULL );
575 key_up=translatekey(key_up);
576 break;
577
578 case 3:
579 key_down=translatekey(key_down);
580 rb->set_option(items[3].desc, &key_down, INT, doomkeys, numdoomkeys, NULL );
581 key_down=translatekey(key_down);
582 break;
583
584 case 4:
585 key_fire=translatekey(key_fire);
586 rb->set_option(items[4].desc, &key_fire, INT, doomkeys, numdoomkeys, NULL );
587 key_fire=translatekey(key_fire);
588 break;
589
590 case 5:
591 key_use=translatekey(key_use);
592 rb->set_option(items[5].desc, &key_use, INT, doomkeys, numdoomkeys, NULL );
593 key_use=translatekey(key_use);
594 break;
595
596 case 6:
597 key_strafe=translatekey(key_strafe);
598 rb->set_option(items[6].desc, &key_strafe, INT, doomkeys, numdoomkeys, NULL );
599 key_strafe=translatekey(key_strafe);
600 break;
601
602 case 7:
603 key_weapon=translatekey(key_weapon);
604 rb->set_option(items[6].desc, &key_weapon, INT, doomkeys, numdoomkeys, NULL );
605 key_weapon=translatekey(key_weapon);
606 break;
607
608 default:
609 menuquit=1;
610 break;
611 }
612 }
613
614 rb->menu_exit(m);
615
616 return (1);
461} 617}
462 618
463static const struct opt_items onoff[2] = { 619static const struct opt_items onoff[2] = {
@@ -476,7 +632,7 @@ static bool Doptions()
476 632
477 static const struct menu_item items[] = { 633 static const struct menu_item items[] = {
478 { "Sound", NULL }, 634 { "Sound", NULL },
479 { "Set Keys(not working)", NULL }, 635 { "Set Keys", NULL },
480 { "Timedemo", NULL }, 636 { "Timedemo", NULL },
481 { "Player Bobbing", NULL }, 637 { "Player Bobbing", NULL },
482 { "Weapon Recoil", NULL }, 638 { "Weapon Recoil", NULL },
@@ -585,8 +741,8 @@ int doom_menu()
585 //Daddons(numadd); 741 //Daddons(numadd);
586 break; 742 break;
587 743
588 case 2: /* Demo's */ 744 case 2: /* Demos */
589 rb->set_option("Demo's", &argvlist.demonum, INT, demolmp, numdemos, NULL ); 745 rb->set_option("Demos", &argvlist.demonum, INT, demolmp, numdemos, NULL );
590 break; 746 break;
591 747
592 case 3: /* Options */ 748 case 3: /* Options */