diff options
author | Karl Kurbjun <kkurbjun@gmail.com> | 2006-04-04 17:53:29 +0000 |
---|---|---|
committer | Karl Kurbjun <kkurbjun@gmail.com> | 2006-04-04 17:53:29 +0000 |
commit | 0926f64e44e271f287b616d8c7460e6fc256240e (patch) | |
tree | 16d6249b19a838956b08013aaa743d3a1854915c /apps/plugins/doom/rockdoom.c | |
parent | ebb8a22742adf02c9e0cabd1d02ffae6f9930931 (diff) | |
download | rockbox-0926f64e44e271f287b616d8c7460e6fc256240e.tar.gz rockbox-0926f64e44e271f287b616d8c7460e6fc256240e.zip |
Add configurable keys to Doom, enter, escape and run still need to be handled. More game keys need to be added to the options.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9494 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/doom/rockdoom.c')
-rw-r--r-- | apps/plugins/doom/rockdoom.c | 166 |
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 | |||
427 | int Dbuild_demos(struct opt_items *names) | 426 | int 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 | ||
459 | void Oset_keys() | 458 | // This key configuration code is not the cleanest or the most efficient, but it works |
459 | int 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 | |||
522 | int 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 | ||
463 | static const struct opt_items onoff[2] = { | 619 | static 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 */ |