From 5f23eef52ec62dc30c388b1016aea87b80873d20 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sun, 6 Apr 2003 02:26:13 +0200 Subject: [PATCH] rnd-20030406-1-src --- src/conf_chr.c | 73 ++++--- src/conf_chr.h | 19 +- src/conf_e2g.c | 36 ++-- src/conf_gfx.c | 49 +++-- src/conf_gfx.h | 451 +++++++++++++++++++++--------------------- src/conftime.h | 2 +- src/editor.c | 23 ++- src/init.c | 56 ++++-- src/libgame/gadgets.c | 18 +- src/libgame/misc.c | 1 + src/libgame/system.h | 3 + src/libgame/text.c | 163 +++++++-------- src/libgame/text.h | 23 ++- src/main.c | 44 ++--- src/main.h | 18 +- 15 files changed, 529 insertions(+), 450 deletions(-) diff --git a/src/conf_chr.c b/src/conf_chr.c index 52940986..506c8b27 100644 --- a/src/conf_chr.c +++ b/src/conf_chr.c @@ -313,48 +313,63 @@ { "char_z.ypos", "3" }, { "char_z.frames", "1" }, - { "char_ae", "RocksFontEM.pcx" }, - { "char_ae.xpos", "11" }, - { "char_ae.ypos", "3" }, - { "char_ae.frames", "1" }, - - { "char_oe", "RocksFontEM.pcx" }, - { "char_oe.xpos", "12" }, - { "char_oe.ypos", "3" }, - { "char_oe.frames", "1" }, - - { "char_ue", "RocksFontEM.pcx" }, - { "char_ue.xpos", "13" }, - { "char_ue.ypos", "3" }, - { "char_ue.frames", "1" }, - - { "char_copyright", "RocksFontEM.pcx" }, - { "char_copyright.xpos", "14" }, - { "char_copyright.ypos", "3" }, - { "char_copyright.frames", "1" }, + { "char_bracketleft", "RocksFontEM.pcx" }, + { "char_bracketleft.xpos", "11" }, + { "char_bracketleft.ypos", "3" }, + { "char_bracketleft.frames", "1" }, + + { "char_backslash", "RocksFontEM.pcx" }, + { "char_backslash.xpos", "12" }, + { "char_backslash.ypos", "3" }, + { "char_backslash.frames", "1" }, + + { "char_bracketright", "RocksFontEM.pcx" }, + { "char_bracketright.xpos", "13" }, + { "char_bracketright.ypos", "3" }, + { "char_bracketright.frames", "1" }, + + { "char_asciicircum", "RocksFontEM.pcx" }, + { "char_asciicircum.xpos", "14" }, + { "char_asciicircum.ypos", "3" }, + { "char_asciicircum.frames", "1" }, { "char_underscore", "RocksFontEM.pcx" }, { "char_underscore.xpos", "15" }, { "char_underscore.ypos", "3" }, { "char_underscore.frames", "1" }, - { "char_empty", "RocksFontEM.pcx" }, - { "char_empty.xpos", "0" }, - { "char_empty.ypos", "4" }, - { "char_empty.frames", "1" }, + { "char_copyright", "RocksFontEM.pcx" }, + { "char_copyright.xpos", "0" }, + { "char_copyright.ypos", "4" }, + { "char_copyright.frames", "1" }, + + { "char_aumlaut", "RocksFontEM.pcx" }, + { "char_aumlaut.xpos", "1" }, + { "char_aumlaut.ypos", "4" }, + { "char_aumlaut.frames", "1" }, + + { "char_oumlaut", "RocksFontEM.pcx" }, + { "char_oumlaut.xpos", "2" }, + { "char_oumlaut.ypos", "4" }, + { "char_oumlaut.frames", "1" }, + + { "char_uumlaut", "RocksFontEM.pcx" }, + { "char_uumlaut.xpos", "3" }, + { "char_uumlaut.ypos", "4" }, + { "char_uumlaut.frames", "1" }, { "char_degree", "RocksFontEM.pcx" }, - { "char_degree.xpos", "1" }, + { "char_degree.xpos", "4" }, { "char_degree.ypos", "4" }, { "char_degree.frames", "1" }, - { "char_tm", "RocksFontEM.pcx" }, - { "char_tm.xpos", "2" }, - { "char_tm.ypos", "4" }, - { "char_tm.frames", "1" }, + { "char_trademark", "RocksFontEM.pcx" }, + { "char_trademark.xpos", "5" }, + { "char_trademark.ypos", "4" }, + { "char_trademark.frames", "1" }, { "char_cursor", "RocksFontEM.pcx" }, - { "char_cursor.xpos", "3" }, + { "char_cursor.xpos", "6" }, { "char_cursor.ypos", "4" }, { "char_cursor.frames", "1" }, diff --git a/src/conf_chr.h b/src/conf_chr.h index 4f8abbc1..8cee2724 100644 --- a/src/conf_chr.h +++ b/src/conf_chr.h @@ -77,14 +77,17 @@ #define EL_CHAR_X (EL_CHAR_ASCII0 + 88) #define EL_CHAR_Y (EL_CHAR_ASCII0 + 89) #define EL_CHAR_Z (EL_CHAR_ASCII0 + 90) -#define EL_CHAR_AE (EL_CHAR_ASCII0 + 91) -#define EL_CHAR_OE (EL_CHAR_ASCII0 + 92) -#define EL_CHAR_UE (EL_CHAR_ASCII0 + 93) -#define EL_CHAR_COPYRIGHT (EL_CHAR_ASCII0 + 94) +#define EL_CHAR_BRACKETLEFT (EL_CHAR_ASCII0 + 91) +#define EL_CHAR_BACKSLASH (EL_CHAR_ASCII0 + 92) +#define EL_CHAR_BRACKETRIGHT (EL_CHAR_ASCII0 + 93) +#define EL_CHAR_ASCIICIRCUM (EL_CHAR_ASCII0 + 94) #define EL_CHAR_UNDERSCORE (EL_CHAR_ASCII0 + 95) -#define EL_CHAR_EMPTY (EL_CHAR_ASCII0 + 96) -#define EL_CHAR_DEGREE (EL_CHAR_ASCII0 + 97) -#define EL_CHAR_TM (EL_CHAR_ASCII0 + 98) -#define EL_CHAR_CURSOR (EL_CHAR_ASCII0 + 99) +#define EL_CHAR_COPYRIGHT (EL_CHAR_ASCII0 + 96) +#define EL_CHAR_AUMLAUT (EL_CHAR_ASCII0 + 97) +#define EL_CHAR_OUMLAUT (EL_CHAR_ASCII0 + 98) +#define EL_CHAR_UUMLAUT (EL_CHAR_ASCII0 + 99) +#define EL_CHAR_DEGREE (EL_CHAR_ASCII0 + 100) +#define EL_CHAR_TRADEMARK (EL_CHAR_ASCII0 + 101) +#define EL_CHAR_CURSOR (EL_CHAR_ASCII0 + 102) #endif /* CONF_CHR_C */ diff --git a/src/conf_e2g.c b/src/conf_e2g.c index 2c9f8570..10c6e1d6 100644 --- a/src/conf_e2g.c +++ b/src/conf_e2g.c @@ -2661,36 +2661,48 @@ element_to_graphic[] = IMG_CHAR_Z }, { - EL_CHAR_AE, -1, -1, - IMG_CHAR_AE + EL_CHAR_BRACKETLEFT, -1, -1, + IMG_CHAR_BRACKETLEFT }, { - EL_CHAR_OE, -1, -1, - IMG_CHAR_OE + EL_CHAR_BACKSLASH, -1, -1, + IMG_CHAR_BACKSLASH }, { - EL_CHAR_UE, -1, -1, - IMG_CHAR_UE + EL_CHAR_BRACKETRIGHT, -1, -1, + IMG_CHAR_BRACKETRIGHT }, { - EL_CHAR_COPYRIGHT, -1, -1, - IMG_CHAR_COPYRIGHT + EL_CHAR_ASCIICIRCUM, -1, -1, + IMG_CHAR_ASCIICIRCUM }, { EL_CHAR_UNDERSCORE, -1, -1, IMG_CHAR_UNDERSCORE }, { - EL_CHAR_EMPTY, -1, -1, - IMG_CHAR_EMPTY + EL_CHAR_COPYRIGHT, -1, -1, + IMG_CHAR_COPYRIGHT + }, + { + EL_CHAR_AUMLAUT, -1, -1, + IMG_CHAR_AUMLAUT + }, + { + EL_CHAR_OUMLAUT, -1, -1, + IMG_CHAR_OUMLAUT + }, + { + EL_CHAR_UUMLAUT, -1, -1, + IMG_CHAR_UUMLAUT }, { EL_CHAR_DEGREE, -1, -1, IMG_CHAR_DEGREE }, { - EL_CHAR_TM, -1, -1, - IMG_CHAR_TM + EL_CHAR_TRADEMARK, -1, -1, + IMG_CHAR_TRADEMARK }, { EL_CHAR_CURSOR, -1, -1, diff --git a/src/conf_gfx.c b/src/conf_gfx.c index de1088fd..06367d29 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -43,7 +43,6 @@ struct ConfigInfo image_config_suffix[] = { ".position", ARG_UNDEFINED, TYPE_STRING }, { ".draw_xoffset", "0", TYPE_INTEGER }, { ".draw_yoffset", "0", TYPE_INTEGER }, - { ".format", ARG_UNDEFINED, TYPE_STRING }, { ".name", ARG_UNDEFINED, TYPE_STRING }, { NULL, NULL, 0 } @@ -3110,28 +3109,28 @@ struct ConfigInfo image_config[] = { "font.initial_1.height", "14" }, { "font.initial_2", "RocksFontSmall.pcx" }, { "font.initial_2.x", "0" }, - { "font.initial_2.y", "56" }, + { "font.initial_2.y", "70" }, { "font.initial_2.width", "14" }, { "font.initial_2.height", "14" }, { "font.initial_3", "RocksFontSmall.pcx" }, { "font.initial_3.x", "0" }, - { "font.initial_3.y", "112" }, + { "font.initial_3.y", "140" }, { "font.initial_3.width", "14" }, { "font.initial_3.height", "14" }, { "font.initial_4", "RocksFontSmall.pcx" }, { "font.initial_4.x", "0" }, - { "font.initial_4.y", "168" }, + { "font.initial_4.y", "210" }, { "font.initial_4.width", "14" }, { "font.initial_4.height", "14" }, { "font.title_1", "RocksFontBig.pcx" }, { "font.title_1.x", "0" }, - { "font.title_1.y", "384" }, + { "font.title_1.y", "480" }, { "font.title_1.width", "32" }, { "font.title_1.height", "32" }, { "font.title_1.LEVELS", "RocksFontBig.pcx" }, { "font.title_1.LEVELS.x", "0" }, - { "font.title_1.LEVELS.y", "256" }, + { "font.title_1.LEVELS.y", "320" }, { "font.title_1.LEVELS.width", "32" }, { "font.title_1.LEVELS.height", "32" }, { "font.title_2", "RocksFontSmall.pcx" }, @@ -3142,18 +3141,18 @@ struct ConfigInfo image_config[] = { "font.menu_1", "RocksFontBig.pcx" }, { "font.menu_1.x", "0" }, - { "font.menu_1.y", "256" }, + { "font.menu_1.y", "320" }, { "font.menu_1.width", "32" }, { "font.menu_1.height", "32" }, { "font.menu_2", "RocksFontMedium.pcx" }, { "font.menu_2.x", "0" }, - { "font.menu_2.y", "256" }, + { "font.menu_2.y", "320" }, { "font.menu_2.width", "16" }, { "font.menu_2.height", "32" }, { "font.text_1", "RocksFontSmall.pcx" }, { "font.text_1.x", "0" }, - { "font.text_1.y", "112" }, + { "font.text_1.y", "140" }, { "font.text_1.width", "14" }, { "font.text_1.height", "14" }, { "font.text_1.LEVELS", "RocksFontMedium.pcx" }, @@ -3163,7 +3162,7 @@ struct ConfigInfo image_config[] = { "font.text_1.LEVELS.height", "32" }, { "font.text_1.SCORES", "RocksFontBig.pcx" }, { "font.text_1.SCORES.x", "0" }, - { "font.text_1.SCORES.y", "256" }, + { "font.text_1.SCORES.y", "320" }, { "font.text_1.SCORES.width", "32" }, { "font.text_1.SCORES.height", "32" }, { "font.text_1.PREVIEW", "RocksFontEM.pcx" }, @@ -3173,17 +3172,17 @@ struct ConfigInfo image_config[] = { "font.text_1.PREVIEW.height", "16" }, { "font.text_2", "RocksFontSmall.pcx" }, { "font.text_2.x", "0" }, - { "font.text_2.y", "168" }, + { "font.text_2.y", "210" }, { "font.text_2.width", "14" }, { "font.text_2.height", "14" }, { "font.text_2.LEVELS", "RocksFontMedium.pcx" }, { "font.text_2.LEVELS.x", "0" }, - { "font.text_2.LEVELS.y", "128" }, + { "font.text_2.LEVELS.y", "160" }, { "font.text_2.LEVELS.width", "16" }, { "font.text_2.LEVELS.height", "32" }, { "font.text_2.SCORES", "RocksFontMedium.pcx" }, { "font.text_2.SCORES.x", "0" }, - { "font.text_2.SCORES.y", "384" }, + { "font.text_2.SCORES.y", "480" }, { "font.text_2.SCORES.width", "16" }, { "font.text_2.SCORES.height", "32" }, { "font.text_2.PREVIEW", "RocksFontEM.pcx" }, @@ -3198,7 +3197,7 @@ struct ConfigInfo image_config[] = { "font.text_3.height", "14" }, { "font.text_3.LEVELS", "RocksFontMedium.pcx" }, { "font.text_3.LEVELS.x", "0" }, - { "font.text_3.LEVELS.y", "256" }, + { "font.text_3.LEVELS.y", "320" }, { "font.text_3.LEVELS.width", "16" }, { "font.text_3.LEVELS.height", "32" }, { "font.text_3.SCORES", "RocksFontBig.pcx" }, @@ -3213,12 +3212,12 @@ struct ConfigInfo image_config[] = { "font.text_3.PREVIEW.height", "16" }, { "font.text_4", "RocksFontSmall.pcx" }, { "font.text_4.x", "0" }, - { "font.text_4.y", "56" }, + { "font.text_4.y", "70" }, { "font.text_4.width", "14" }, { "font.text_4.height", "14" }, { "font.text_4.LEVELS", "RocksFontMedium.pcx" }, { "font.text_4.LEVELS.x", "0" }, - { "font.text_4.LEVELS.y", "384" }, + { "font.text_4.LEVELS.y", "480" }, { "font.text_4.LEVELS.width", "16" }, { "font.text_4.LEVELS.height", "32" }, { "font.text_4.SCORES", "RocksFontMedium.pcx" }, @@ -3229,7 +3228,7 @@ struct ConfigInfo image_config[] = { "font.input", "RocksFontSmall.pcx" }, { "font.input.x", "0" }, - { "font.input.y", "168" }, + { "font.input.y", "210" }, { "font.input.width", "14" }, { "font.input.height", "14" }, { "font.input.MAIN", "RocksFontBig.pcx" }, @@ -3244,7 +3243,7 @@ struct ConfigInfo image_config[] = { "font.input.active.height", "14" }, { "font.input.active.MAIN", "RocksFontBig.pcx" }, { "font.input.active.MAIN.x", "0" }, - { "font.input.active.MAIN.y", "384" }, + { "font.input.active.MAIN.y", "480" }, { "font.input.active.MAIN.width", "32" }, { "font.input.active.MAIN.height", "32" }, { "font.input.active.SETUP", "RocksFontBig.pcx" }, @@ -3255,40 +3254,40 @@ struct ConfigInfo image_config[] = { "font.option_off", "RocksFontBig.pcx" }, { "font.option_off.x", "0" }, - { "font.option_off.y", "128" }, + { "font.option_off.y", "160" }, { "font.option_off.width", "32" }, { "font.option_off.height", "32" }, { "font.option_on", "RocksFontBig.pcx" }, { "font.option_on.x", "0" }, - { "font.option_on.y", "384" }, + { "font.option_on.y", "480" }, { "font.option_on.width", "32" }, { "font.option_on.height", "32" }, { "font.value_1", "RocksFontBig.pcx" }, { "font.value_1.x", "0" }, - { "font.value_1.y", "384" }, + { "font.value_1.y", "480" }, { "font.value_1.width", "32" }, { "font.value_1.height", "32" }, { "font.value_2", "RocksFontMedium.pcx" }, { "font.value_2.x", "0" }, - { "font.value_2.y", "384" }, + { "font.value_2.y", "480" }, { "font.value_2.width", "16" }, { "font.value_2.height", "32" }, { "font.value_old", "RocksFontBig.pcx" }, { "font.value_old.x", "0" }, - { "font.value_old.y", "128" }, + { "font.value_old.y", "160" }, { "font.value_old.width", "32" }, { "font.value_old.height", "32" }, { "font.level_number", "RocksFontSmall.pcx" }, { "font.level_number.x", "0" }, - { "font.level_number.y", "280" }, + { "font.level_number.y", "350" }, { "font.level_number.width", "10" }, { "font.level_number.height", "14" }, { "font.tape_recorder", "RocksFontSmall.pcx" }, { "font.tape_recorder.x", "0" }, - { "font.tape_recorder.y", "224" }, + { "font.tape_recorder.y", "280" }, { "font.tape_recorder.width", "11" }, { "font.tape_recorder.height", "14" }, diff --git a/src/conf_gfx.h b/src/conf_gfx.h index 35ea299f..1679146c 100644 --- a/src/conf_gfx.h +++ b/src/conf_gfx.h @@ -659,231 +659,234 @@ #define IMG_CHAR_X 638 #define IMG_CHAR_Y 639 #define IMG_CHAR_Z 640 -#define IMG_CHAR_AE 641 -#define IMG_CHAR_OE 642 -#define IMG_CHAR_UE 643 -#define IMG_CHAR_COPYRIGHT 644 +#define IMG_CHAR_BRACKETLEFT 641 +#define IMG_CHAR_BACKSLASH 642 +#define IMG_CHAR_BRACKETRIGHT 643 +#define IMG_CHAR_ASCIICIRCUM 644 #define IMG_CHAR_UNDERSCORE 645 -#define IMG_CHAR_EMPTY 646 -#define IMG_CHAR_DEGREE 647 -#define IMG_CHAR_TM 648 -#define IMG_CHAR_CURSOR 649 -#define IMG_CUSTOM_1 650 -#define IMG_CUSTOM_2 651 -#define IMG_CUSTOM_3 652 -#define IMG_CUSTOM_4 653 -#define IMG_CUSTOM_5 654 -#define IMG_CUSTOM_6 655 -#define IMG_CUSTOM_7 656 -#define IMG_CUSTOM_8 657 -#define IMG_CUSTOM_9 658 -#define IMG_CUSTOM_10 659 -#define IMG_CUSTOM_11 660 -#define IMG_CUSTOM_12 661 -#define IMG_CUSTOM_13 662 -#define IMG_CUSTOM_14 663 -#define IMG_CUSTOM_15 664 -#define IMG_CUSTOM_16 665 -#define IMG_CUSTOM_17 666 -#define IMG_CUSTOM_18 667 -#define IMG_CUSTOM_19 668 -#define IMG_CUSTOM_20 669 -#define IMG_CUSTOM_21 670 -#define IMG_CUSTOM_22 671 -#define IMG_CUSTOM_23 672 -#define IMG_CUSTOM_24 673 -#define IMG_CUSTOM_25 674 -#define IMG_CUSTOM_26 675 -#define IMG_CUSTOM_27 676 -#define IMG_CUSTOM_28 677 -#define IMG_CUSTOM_29 678 -#define IMG_CUSTOM_30 679 -#define IMG_CUSTOM_31 680 -#define IMG_CUSTOM_32 681 -#define IMG_CUSTOM_33 682 -#define IMG_CUSTOM_34 683 -#define IMG_CUSTOM_35 684 -#define IMG_CUSTOM_36 685 -#define IMG_CUSTOM_37 686 -#define IMG_CUSTOM_38 687 -#define IMG_CUSTOM_39 688 -#define IMG_CUSTOM_40 689 -#define IMG_CUSTOM_41 690 -#define IMG_CUSTOM_42 691 -#define IMG_CUSTOM_43 692 -#define IMG_CUSTOM_44 693 -#define IMG_CUSTOM_45 694 -#define IMG_CUSTOM_46 695 -#define IMG_CUSTOM_47 696 -#define IMG_CUSTOM_48 697 -#define IMG_CUSTOM_49 698 -#define IMG_CUSTOM_50 699 -#define IMG_CUSTOM_51 700 -#define IMG_CUSTOM_52 701 -#define IMG_CUSTOM_53 702 -#define IMG_CUSTOM_54 703 -#define IMG_CUSTOM_55 704 -#define IMG_CUSTOM_56 705 -#define IMG_CUSTOM_57 706 -#define IMG_CUSTOM_58 707 -#define IMG_CUSTOM_59 708 -#define IMG_CUSTOM_60 709 -#define IMG_CUSTOM_61 710 -#define IMG_CUSTOM_62 711 -#define IMG_CUSTOM_63 712 -#define IMG_CUSTOM_64 713 -#define IMG_CUSTOM_65 714 -#define IMG_CUSTOM_66 715 -#define IMG_CUSTOM_67 716 -#define IMG_CUSTOM_68 717 -#define IMG_CUSTOM_69 718 -#define IMG_CUSTOM_70 719 -#define IMG_CUSTOM_71 720 -#define IMG_CUSTOM_72 721 -#define IMG_CUSTOM_73 722 -#define IMG_CUSTOM_74 723 -#define IMG_CUSTOM_75 724 -#define IMG_CUSTOM_76 725 -#define IMG_CUSTOM_77 726 -#define IMG_CUSTOM_78 727 -#define IMG_CUSTOM_79 728 -#define IMG_CUSTOM_80 729 -#define IMG_CUSTOM_81 730 -#define IMG_CUSTOM_82 731 -#define IMG_CUSTOM_83 732 -#define IMG_CUSTOM_84 733 -#define IMG_CUSTOM_85 734 -#define IMG_CUSTOM_86 735 -#define IMG_CUSTOM_87 736 -#define IMG_CUSTOM_88 737 -#define IMG_CUSTOM_89 738 -#define IMG_CUSTOM_90 739 -#define IMG_CUSTOM_91 740 -#define IMG_CUSTOM_92 741 -#define IMG_CUSTOM_93 742 -#define IMG_CUSTOM_94 743 -#define IMG_CUSTOM_95 744 -#define IMG_CUSTOM_96 745 -#define IMG_CUSTOM_97 746 -#define IMG_CUSTOM_98 747 -#define IMG_CUSTOM_99 748 -#define IMG_CUSTOM_100 749 -#define IMG_CUSTOM_101 750 -#define IMG_CUSTOM_102 751 -#define IMG_CUSTOM_103 752 -#define IMG_CUSTOM_104 753 -#define IMG_CUSTOM_105 754 -#define IMG_CUSTOM_106 755 -#define IMG_CUSTOM_107 756 -#define IMG_CUSTOM_108 757 -#define IMG_CUSTOM_109 758 -#define IMG_CUSTOM_110 759 -#define IMG_CUSTOM_111 760 -#define IMG_CUSTOM_112 761 -#define IMG_CUSTOM_113 762 -#define IMG_CUSTOM_114 763 -#define IMG_CUSTOM_115 764 -#define IMG_CUSTOM_116 765 -#define IMG_CUSTOM_117 766 -#define IMG_CUSTOM_118 767 -#define IMG_CUSTOM_119 768 -#define IMG_CUSTOM_120 769 -#define IMG_CUSTOM_121 770 -#define IMG_CUSTOM_122 771 -#define IMG_CUSTOM_123 772 -#define IMG_CUSTOM_124 773 -#define IMG_CUSTOM_125 774 -#define IMG_CUSTOM_126 775 -#define IMG_CUSTOM_127 776 -#define IMG_CUSTOM_128 777 -#define IMG_TOON_1 778 -#define IMG_TOON_2 779 -#define IMG_TOON_3 780 -#define IMG_TOON_4 781 -#define IMG_TOON_5 782 -#define IMG_TOON_6 783 -#define IMG_TOON_7 784 -#define IMG_TOON_8 785 -#define IMG_TOON_9 786 -#define IMG_TOON_10 787 -#define IMG_TOON_11 788 -#define IMG_TOON_12 789 -#define IMG_TOON_13 790 -#define IMG_TOON_14 791 -#define IMG_TOON_15 792 -#define IMG_TOON_16 793 -#define IMG_TOON_17 794 -#define IMG_TOON_18 795 -#define IMG_TOON_19 796 -#define IMG_TOON_20 797 -#define IMG_MENU_CALIBRATE_RED 798 -#define IMG_MENU_CALIBRATE_BLUE 799 -#define IMG_MENU_CALIBRATE_YELLOW 800 -#define IMG_MENU_BUTTON 801 -#define IMG_MENU_BUTTON_ACTIVE 802 -#define IMG_MENU_BUTTON_LEFT 803 -#define IMG_MENU_BUTTON_RIGHT 804 -#define IMG_MENU_BUTTON_UP 805 -#define IMG_MENU_BUTTON_DOWN 806 -#define IMG_MENU_BUTTON_LEFT_ACTIVE 807 -#define IMG_MENU_BUTTON_RIGHT_ACTIVE 808 -#define IMG_MENU_BUTTON_UP_ACTIVE 809 -#define IMG_MENU_BUTTON_DOWN_ACTIVE 810 -#define IMG_MENU_SCROLLBAR 811 -#define IMG_MENU_SCROLLBAR_ACTIVE 812 -#define IMG_FONT_INITIAL_1 813 -#define IMG_FONT_INITIAL_2 814 -#define IMG_FONT_INITIAL_3 815 -#define IMG_FONT_INITIAL_4 816 -#define IMG_FONT_TITLE_1 817 -#define IMG_FONT_TITLE_1_LEVELS 818 -#define IMG_FONT_TITLE_2 819 -#define IMG_FONT_MENU_1 820 -#define IMG_FONT_MENU_2 821 -#define IMG_FONT_TEXT_1 822 -#define IMG_FONT_TEXT_1_LEVELS 823 -#define IMG_FONT_TEXT_1_SCORES 824 -#define IMG_FONT_TEXT_1_PREVIEW 825 -#define IMG_FONT_TEXT_2 826 -#define IMG_FONT_TEXT_2_LEVELS 827 -#define IMG_FONT_TEXT_2_SCORES 828 -#define IMG_FONT_TEXT_2_PREVIEW 829 -#define IMG_FONT_TEXT_3 830 -#define IMG_FONT_TEXT_3_LEVELS 831 -#define IMG_FONT_TEXT_3_SCORES 832 -#define IMG_FONT_TEXT_3_PREVIEW 833 -#define IMG_FONT_TEXT_4 834 -#define IMG_FONT_TEXT_4_LEVELS 835 -#define IMG_FONT_TEXT_4_SCORES 836 -#define IMG_FONT_INPUT 837 -#define IMG_FONT_INPUT_MAIN 838 -#define IMG_FONT_INPUT_ACTIVE 839 -#define IMG_FONT_INPUT_ACTIVE_MAIN 840 -#define IMG_FONT_INPUT_ACTIVE_SETUP 841 -#define IMG_FONT_OPTION_OFF 842 -#define IMG_FONT_OPTION_ON 843 -#define IMG_FONT_VALUE_1 844 -#define IMG_FONT_VALUE_2 845 -#define IMG_FONT_VALUE_OLD 846 -#define IMG_FONT_LEVEL_NUMBER 847 -#define IMG_FONT_TAPE_RECORDER 848 -#define IMG_GLOBAL_BORDER 849 -#define IMG_GLOBAL_DOOR 850 -#define IMG_EDITOR_ELEMENT_BORDER 851 -#define IMG_BACKGROUND 852 -#define IMG_BACKGROUND_MAIN 853 -#define IMG_BACKGROUND_LEVELS 854 -#define IMG_BACKGROUND_SCORES 855 -#define IMG_BACKGROUND_EDITOR 856 -#define IMG_BACKGROUND_INFO 857 -#define IMG_BACKGROUND_SETUP 858 -#define IMG_BACKGROUND_DOOR 859 -#define IMG_INFO_FONT_EM_1 860 -#define IMG_INFO_FONT_EM_2 861 -#define IMG_INFO_FONT_EM_3 862 -#define IMG_INFO_FONT_EM_4 863 -#define IMG_INFO_FONT_EM_5 864 +#define IMG_CHAR_COPYRIGHT 646 +#define IMG_CHAR_AUMLAUT 647 +#define IMG_CHAR_OUMLAUT 648 +#define IMG_CHAR_UUMLAUT 649 +#define IMG_CHAR_DEGREE 650 +#define IMG_CHAR_TRADEMARK 651 +#define IMG_CHAR_CURSOR 652 +#define IMG_CUSTOM_1 653 +#define IMG_CUSTOM_2 654 +#define IMG_CUSTOM_3 655 +#define IMG_CUSTOM_4 656 +#define IMG_CUSTOM_5 657 +#define IMG_CUSTOM_6 658 +#define IMG_CUSTOM_7 659 +#define IMG_CUSTOM_8 660 +#define IMG_CUSTOM_9 661 +#define IMG_CUSTOM_10 662 +#define IMG_CUSTOM_11 663 +#define IMG_CUSTOM_12 664 +#define IMG_CUSTOM_13 665 +#define IMG_CUSTOM_14 666 +#define IMG_CUSTOM_15 667 +#define IMG_CUSTOM_16 668 +#define IMG_CUSTOM_17 669 +#define IMG_CUSTOM_18 670 +#define IMG_CUSTOM_19 671 +#define IMG_CUSTOM_20 672 +#define IMG_CUSTOM_21 673 +#define IMG_CUSTOM_22 674 +#define IMG_CUSTOM_23 675 +#define IMG_CUSTOM_24 676 +#define IMG_CUSTOM_25 677 +#define IMG_CUSTOM_26 678 +#define IMG_CUSTOM_27 679 +#define IMG_CUSTOM_28 680 +#define IMG_CUSTOM_29 681 +#define IMG_CUSTOM_30 682 +#define IMG_CUSTOM_31 683 +#define IMG_CUSTOM_32 684 +#define IMG_CUSTOM_33 685 +#define IMG_CUSTOM_34 686 +#define IMG_CUSTOM_35 687 +#define IMG_CUSTOM_36 688 +#define IMG_CUSTOM_37 689 +#define IMG_CUSTOM_38 690 +#define IMG_CUSTOM_39 691 +#define IMG_CUSTOM_40 692 +#define IMG_CUSTOM_41 693 +#define IMG_CUSTOM_42 694 +#define IMG_CUSTOM_43 695 +#define IMG_CUSTOM_44 696 +#define IMG_CUSTOM_45 697 +#define IMG_CUSTOM_46 698 +#define IMG_CUSTOM_47 699 +#define IMG_CUSTOM_48 700 +#define IMG_CUSTOM_49 701 +#define IMG_CUSTOM_50 702 +#define IMG_CUSTOM_51 703 +#define IMG_CUSTOM_52 704 +#define IMG_CUSTOM_53 705 +#define IMG_CUSTOM_54 706 +#define IMG_CUSTOM_55 707 +#define IMG_CUSTOM_56 708 +#define IMG_CUSTOM_57 709 +#define IMG_CUSTOM_58 710 +#define IMG_CUSTOM_59 711 +#define IMG_CUSTOM_60 712 +#define IMG_CUSTOM_61 713 +#define IMG_CUSTOM_62 714 +#define IMG_CUSTOM_63 715 +#define IMG_CUSTOM_64 716 +#define IMG_CUSTOM_65 717 +#define IMG_CUSTOM_66 718 +#define IMG_CUSTOM_67 719 +#define IMG_CUSTOM_68 720 +#define IMG_CUSTOM_69 721 +#define IMG_CUSTOM_70 722 +#define IMG_CUSTOM_71 723 +#define IMG_CUSTOM_72 724 +#define IMG_CUSTOM_73 725 +#define IMG_CUSTOM_74 726 +#define IMG_CUSTOM_75 727 +#define IMG_CUSTOM_76 728 +#define IMG_CUSTOM_77 729 +#define IMG_CUSTOM_78 730 +#define IMG_CUSTOM_79 731 +#define IMG_CUSTOM_80 732 +#define IMG_CUSTOM_81 733 +#define IMG_CUSTOM_82 734 +#define IMG_CUSTOM_83 735 +#define IMG_CUSTOM_84 736 +#define IMG_CUSTOM_85 737 +#define IMG_CUSTOM_86 738 +#define IMG_CUSTOM_87 739 +#define IMG_CUSTOM_88 740 +#define IMG_CUSTOM_89 741 +#define IMG_CUSTOM_90 742 +#define IMG_CUSTOM_91 743 +#define IMG_CUSTOM_92 744 +#define IMG_CUSTOM_93 745 +#define IMG_CUSTOM_94 746 +#define IMG_CUSTOM_95 747 +#define IMG_CUSTOM_96 748 +#define IMG_CUSTOM_97 749 +#define IMG_CUSTOM_98 750 +#define IMG_CUSTOM_99 751 +#define IMG_CUSTOM_100 752 +#define IMG_CUSTOM_101 753 +#define IMG_CUSTOM_102 754 +#define IMG_CUSTOM_103 755 +#define IMG_CUSTOM_104 756 +#define IMG_CUSTOM_105 757 +#define IMG_CUSTOM_106 758 +#define IMG_CUSTOM_107 759 +#define IMG_CUSTOM_108 760 +#define IMG_CUSTOM_109 761 +#define IMG_CUSTOM_110 762 +#define IMG_CUSTOM_111 763 +#define IMG_CUSTOM_112 764 +#define IMG_CUSTOM_113 765 +#define IMG_CUSTOM_114 766 +#define IMG_CUSTOM_115 767 +#define IMG_CUSTOM_116 768 +#define IMG_CUSTOM_117 769 +#define IMG_CUSTOM_118 770 +#define IMG_CUSTOM_119 771 +#define IMG_CUSTOM_120 772 +#define IMG_CUSTOM_121 773 +#define IMG_CUSTOM_122 774 +#define IMG_CUSTOM_123 775 +#define IMG_CUSTOM_124 776 +#define IMG_CUSTOM_125 777 +#define IMG_CUSTOM_126 778 +#define IMG_CUSTOM_127 779 +#define IMG_CUSTOM_128 780 +#define IMG_TOON_1 781 +#define IMG_TOON_2 782 +#define IMG_TOON_3 783 +#define IMG_TOON_4 784 +#define IMG_TOON_5 785 +#define IMG_TOON_6 786 +#define IMG_TOON_7 787 +#define IMG_TOON_8 788 +#define IMG_TOON_9 789 +#define IMG_TOON_10 790 +#define IMG_TOON_11 791 +#define IMG_TOON_12 792 +#define IMG_TOON_13 793 +#define IMG_TOON_14 794 +#define IMG_TOON_15 795 +#define IMG_TOON_16 796 +#define IMG_TOON_17 797 +#define IMG_TOON_18 798 +#define IMG_TOON_19 799 +#define IMG_TOON_20 800 +#define IMG_MENU_CALIBRATE_RED 801 +#define IMG_MENU_CALIBRATE_BLUE 802 +#define IMG_MENU_CALIBRATE_YELLOW 803 +#define IMG_MENU_BUTTON 804 +#define IMG_MENU_BUTTON_ACTIVE 805 +#define IMG_MENU_BUTTON_LEFT 806 +#define IMG_MENU_BUTTON_RIGHT 807 +#define IMG_MENU_BUTTON_UP 808 +#define IMG_MENU_BUTTON_DOWN 809 +#define IMG_MENU_BUTTON_LEFT_ACTIVE 810 +#define IMG_MENU_BUTTON_RIGHT_ACTIVE 811 +#define IMG_MENU_BUTTON_UP_ACTIVE 812 +#define IMG_MENU_BUTTON_DOWN_ACTIVE 813 +#define IMG_MENU_SCROLLBAR 814 +#define IMG_MENU_SCROLLBAR_ACTIVE 815 +#define IMG_FONT_INITIAL_1 816 +#define IMG_FONT_INITIAL_2 817 +#define IMG_FONT_INITIAL_3 818 +#define IMG_FONT_INITIAL_4 819 +#define IMG_FONT_TITLE_1 820 +#define IMG_FONT_TITLE_1_LEVELS 821 +#define IMG_FONT_TITLE_2 822 +#define IMG_FONT_MENU_1 823 +#define IMG_FONT_MENU_2 824 +#define IMG_FONT_TEXT_1 825 +#define IMG_FONT_TEXT_1_LEVELS 826 +#define IMG_FONT_TEXT_1_SCORES 827 +#define IMG_FONT_TEXT_1_PREVIEW 828 +#define IMG_FONT_TEXT_2 829 +#define IMG_FONT_TEXT_2_LEVELS 830 +#define IMG_FONT_TEXT_2_SCORES 831 +#define IMG_FONT_TEXT_2_PREVIEW 832 +#define IMG_FONT_TEXT_3 833 +#define IMG_FONT_TEXT_3_LEVELS 834 +#define IMG_FONT_TEXT_3_SCORES 835 +#define IMG_FONT_TEXT_3_PREVIEW 836 +#define IMG_FONT_TEXT_4 837 +#define IMG_FONT_TEXT_4_LEVELS 838 +#define IMG_FONT_TEXT_4_SCORES 839 +#define IMG_FONT_INPUT 840 +#define IMG_FONT_INPUT_MAIN 841 +#define IMG_FONT_INPUT_ACTIVE 842 +#define IMG_FONT_INPUT_ACTIVE_MAIN 843 +#define IMG_FONT_INPUT_ACTIVE_SETUP 844 +#define IMG_FONT_OPTION_OFF 845 +#define IMG_FONT_OPTION_ON 846 +#define IMG_FONT_VALUE_1 847 +#define IMG_FONT_VALUE_2 848 +#define IMG_FONT_VALUE_OLD 849 +#define IMG_FONT_LEVEL_NUMBER 850 +#define IMG_FONT_TAPE_RECORDER 851 +#define IMG_GLOBAL_BORDER 852 +#define IMG_GLOBAL_DOOR 853 +#define IMG_EDITOR_ELEMENT_BORDER 854 +#define IMG_BACKGROUND 855 +#define IMG_BACKGROUND_MAIN 856 +#define IMG_BACKGROUND_LEVELS 857 +#define IMG_BACKGROUND_SCORES 858 +#define IMG_BACKGROUND_EDITOR 859 +#define IMG_BACKGROUND_INFO 860 +#define IMG_BACKGROUND_SETUP 861 +#define IMG_BACKGROUND_DOOR 862 +#define IMG_INFO_FONT_EM_1 863 +#define IMG_INFO_FONT_EM_2 864 +#define IMG_INFO_FONT_EM_3 865 +#define IMG_INFO_FONT_EM_4 866 +#define IMG_INFO_FONT_EM_5 867 -#define NUM_IMAGE_FILES 865 +#define NUM_IMAGE_FILES 868 #endif /* CONF_GFX_H */ diff --git a/src/conftime.h b/src/conftime.h index ab0f201c..0f48dbfa 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2003-04-05 01:37]" +#define COMPILE_DATE_STRING "[2003-04-06 02:20]" diff --git a/src/editor.c b/src/editor.c index 893617ea..f04834c0 100644 --- a/src/editor.c +++ b/src/editor.c @@ -1363,17 +1363,22 @@ static int editor_el_chars[] = EL_CHAR('X'), EL_CHAR('Y'), EL_CHAR('Z'), - EL_CHAR('Ä'), + EL_CHAR('['), - EL_CHAR('Ö'), - EL_CHAR('Ü'), + EL_CHAR('\\'), + EL_CHAR(']'), EL_CHAR('^'), EL_CHAR('_'), - EL_CHAR(' '), + EL_CHAR('©'), + EL_CHAR('Ä'), + EL_CHAR('Ö'), + EL_CHAR('Ü'), + EL_CHAR('°'), - EL_CHAR('´'), - EL_CHAR('|') + EL_CHAR('®'), + EL_CHAR(FONT_ASCII_CURSOR), + EL_CHAR(' ') }; static int num_editor_el_chars = SIZEOF_ARRAY_INT(editor_el_chars); @@ -3715,11 +3720,11 @@ static int DrawLevelText(int sx, int sy, char letter, int mode) if (letter >= 'a' && letter <= 'z') letter_element = EL_CHAR_ASCII0 + letter + (int)('A' - 'a'); else if (letter == 'ä' || letter == 'Ä') - letter_element = EL_CHAR_AE; + letter_element = EL_CHAR_AUMLAUT; else if (letter == 'ö' || letter == 'Ö') - letter_element = EL_CHAR_OE; + letter_element = EL_CHAR_OUMLAUT; else if (letter == 'ü' || letter == 'Ü') - letter_element = EL_CHAR_UE; + letter_element = EL_CHAR_UUMLAUT; else if (letter == '^') letter_element = EL_CHAR_COPYRIGHT; else diff --git a/src/init.c b/src/init.c index e766a52d..05ccd337 100644 --- a/src/init.c +++ b/src/init.c @@ -383,6 +383,13 @@ void InitFontGraphicInfo() int font_bitmap_id = font_info[i].special_bitmap_id[j]; int graphic = font_info[i].special_graphic[j]; + /* set 'graphic_info' for font entries, if uninitialized */ + if (graphic_info[graphic].anim_frames < MIN_NUM_CHARS_PER_FONT) + { + graphic_info[graphic].anim_frames = DEFAULT_NUM_CHARS_PER_FONT; + graphic_info[graphic].anim_frames_per_line= DEFAULT_NUM_CHARS_PER_LINE; + } + /* copy font relevant information from graphics information */ font_bitmap_info[font_bitmap_id].bitmap = graphic_info[graphic].bitmap; font_bitmap_info[font_bitmap_id].src_x = graphic_info[graphic].src_x; @@ -391,6 +398,11 @@ void InitFontGraphicInfo() font_bitmap_info[font_bitmap_id].height = graphic_info[graphic].height; font_bitmap_info[font_bitmap_id].draw_x = graphic_info[graphic].draw_x; font_bitmap_info[font_bitmap_id].draw_y = graphic_info[graphic].draw_y; + + font_bitmap_info[font_bitmap_id].num_chars = + graphic_info[graphic].anim_frames; + font_bitmap_info[font_bitmap_id].num_chars_per_line = + graphic_info[graphic].anim_frames_per_line; } } @@ -563,9 +575,8 @@ void InitElementSpecialGraphicInfo() static void set_graphic_parameters(int graphic, char **parameter_raw) { Bitmap *src_bitmap = getBitmapFromImageID(graphic); - int num_xtiles = (src_bitmap ? src_bitmap->width : TILEX) / TILEX; - int num_ytiles = (src_bitmap ? src_bitmap->height * 2 / 3 : TILEY) / TILEY; int parameter[NUM_GFX_ARGS]; + int num_xtiles = 1, num_ytiles = 1; int i; /* get integer values from string parameters */ @@ -602,21 +613,21 @@ static void set_graphic_parameters(int graphic, char **parameter_raw) if (parameter[GFX_ARG_HEIGHT] != ARG_UNDEFINED_VALUE) graphic_info[graphic].height = parameter[GFX_ARG_HEIGHT]; - /* correct x or y offset dependant of vertical or horizontal frame order */ - if (parameter[GFX_ARG_VERTICAL]) /* frames are ordered vertically */ + if (src_bitmap) { - if (parameter[GFX_ARG_OFFSET] != ARG_UNDEFINED_VALUE) - graphic_info[graphic].offset_y = parameter[GFX_ARG_OFFSET]; - else - graphic_info[graphic].offset_y = graphic_info[graphic].height; + num_xtiles = src_bitmap->width / graphic_info[graphic].width; + num_ytiles = src_bitmap->height / graphic_info[graphic].height; } + + /* correct x or y offset dependant of vertical or horizontal frame order */ + if (parameter[GFX_ARG_VERTICAL]) /* frames are ordered vertically */ + graphic_info[graphic].offset_y = + (parameter[GFX_ARG_OFFSET] != ARG_UNDEFINED_VALUE ? + parameter[GFX_ARG_OFFSET] : graphic_info[graphic].height); else /* frames are ordered horizontally */ - { - if (parameter[GFX_ARG_OFFSET] != ARG_UNDEFINED_VALUE) - graphic_info[graphic].offset_x = parameter[GFX_ARG_OFFSET]; - else - graphic_info[graphic].offset_x = graphic_info[graphic].width; - } + graphic_info[graphic].offset_x = + (parameter[GFX_ARG_OFFSET] != ARG_UNDEFINED_VALUE ? + parameter[GFX_ARG_OFFSET] : graphic_info[graphic].width); /* optionally, the x and y offset of frames can be specified directly */ if (parameter[GFX_ARG_XOFFSET] != ARG_UNDEFINED_VALUE) @@ -634,14 +645,17 @@ static void set_graphic_parameters(int graphic, char **parameter_raw) else graphic_info[graphic].anim_frames = 1; + graphic_info[graphic].anim_frames_per_line = + (parameter[GFX_ARG_FRAMES_PER_LINE] != ARG_UNDEFINED_VALUE ? + parameter[GFX_ARG_FRAMES_PER_LINE] : graphic_info[graphic].anim_frames); + graphic_info[graphic].anim_delay = parameter[GFX_ARG_DELAY]; if (graphic_info[graphic].anim_delay == 0) /* delay must be at least 1 */ graphic_info[graphic].anim_delay = 1; - if (parameter[GFX_ARG_ANIM_MODE] != ANIM_NONE) - graphic_info[graphic].anim_mode = parameter[GFX_ARG_ANIM_MODE]; - else if (graphic_info[graphic].anim_frames > 1) - graphic_info[graphic].anim_mode = ANIM_LOOP; + graphic_info[graphic].anim_mode = parameter[GFX_ARG_ANIM_MODE]; + if (graphic_info[graphic].anim_frames == 1) + graphic_info[graphic].anim_mode = ANIM_NONE; /* automatically determine correct start frame, if not defined */ if (parameter[GFX_ARG_START_FRAME] == ARG_UNDEFINED_VALUE) @@ -2536,6 +2550,12 @@ void InitGfx() } } + for (j=0; j < NUM_INITIAL_FONTS; j++) + { + font_initial[j].num_chars = DEFAULT_NUM_CHARS_PER_FONT; + font_initial[j].num_chars_per_line = DEFAULT_NUM_CHARS_PER_LINE; + } + if (filename_font_initial == NULL) /* should not happen */ Error(ERR_EXIT, "cannot get filename for '%s'", CONFIG_TOKEN_FONT_INITIAL); diff --git a/src/libgame/gadgets.c b/src/libgame/gadgets.c index 0058bf18..59413167 100644 --- a/src/libgame/gadgets.c +++ b/src/libgame/gadgets.c @@ -751,33 +751,29 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap) if (gi->type & GD_TYPE_TEXTINPUT) { int font_nr = gi->text.font_type; - int font_bitmap_id = gfx.select_font_function(font_nr); - struct FontBitmapInfo *font = &gfx.font_bitmap_info[font_bitmap_id]; int font_width = getFontWidth(font_nr); int font_height = getFontHeight(font_nr); int border_size = gi->border.size; + Bitmap *src_bitmap; int src_x, src_y; gi->width = 2 * border_size + (gi->text.size + 1) * font_width; gi->height = 2 * border_size + font_height; - if (!getFontChar(font_nr, '|', &src_x, &src_y)) - Error(ERR_EXIT, "text input gadget incomplete (cannot get cursor)"); - + getFontCharSource(font_nr, FONT_ASCII_CURSOR, &src_bitmap, &src_x, &src_y); src_x += font_width / 2; src_y += font_height / 2; - gi->text.inverse_color = GetPixel(font->bitmap, src_x, src_y); + gi->text.inverse_color = GetPixel(src_bitmap, src_x, src_y); } if (gi->type & GD_TYPE_SELECTBOX) { int font_nr = gi->selectbox.font_type; - int font_bitmap_id = gfx.select_font_function(font_nr); - struct FontBitmapInfo *font = &gfx.font_bitmap_info[font_bitmap_id]; int font_width = getFontWidth(font_nr); int font_height = getFontHeight(font_nr); int border_size = gi->border.size; int button_size = gi->border.size_selectbutton; + Bitmap *src_bitmap; int src_x, src_y; gi->width = 2 * border_size + gi->text.size * font_width + button_size; @@ -802,12 +798,10 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap) if (gi->selectbox.y < 0) gi->selectbox.y = gfx.real_sy + gfx.full_sysize - gi->selectbox.height; - if (!getFontChar(font_nr, '|', &src_x, &src_y)) - Error(ERR_EXIT, "selectbox gadget incomplete (cannot get cursor)"); - + getFontCharSource(font_nr, FONT_ASCII_CURSOR, &src_bitmap, &src_x, &src_y); src_x += font_width / 2; src_y += font_height / 2; - gi->selectbox.inverse_color = GetPixel(font->bitmap, src_x, src_y); + gi->selectbox.inverse_color = GetPixel(src_bitmap, src_x, src_y); /* always start with closed selectbox */ gi->selectbox.open = FALSE; diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 32137253..69a69516 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -1610,6 +1610,7 @@ int get_parameter_value(char *token, char *value_raw, int type) string_has_parameter(value, "pingpong") ? ANIM_PINGPONG : string_has_parameter(value, "pingpong2") ? ANIM_PINGPONG2 : string_has_parameter(value, "random") ? ANIM_RANDOM : + string_has_parameter(value, "none") ? ANIM_NONE : ANIM_LOOP); if (string_has_parameter(value, "reverse")) diff --git a/src/libgame/system.h b/src/libgame/system.h index a2eda6d6..0474bc75 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -318,9 +318,12 @@ struct FontBitmapInfo int src_x, src_y; /* start position of animation frames */ int width, height; /* width/height of each animation frame */ int draw_x, draw_y; /* offset for drawing font characters */ + int num_chars; + int num_chars_per_line; #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) Pixmap *clip_mask; /* single-char-only clip mask array for X11 */ + int last_num_chars; /* to free last font clip masks */ #endif }; diff --git a/src/libgame/text.c b/src/libgame/text.c index e21acc03..e440d217 100644 --- a/src/libgame/text.c +++ b/src/libgame/text.c @@ -22,8 +22,6 @@ /* font functions */ /* ========================================================================= */ -#define NUM_FONT_CHARS (FONT_LINES_PER_FONT * FONT_CHARS_PER_LINE) - #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) static GC font_clip_gc = None; @@ -41,7 +39,10 @@ static void InitFontClipmasks() if (!clipmasks_initialized) { for (i=0; i < gfx.num_fonts; i++) + { gfx.font_bitmap_info[i].clip_mask = NULL; + gfx.font_bitmap_info[i].last_num_chars = 0; + } clipmasks_initialized = TRUE; } @@ -49,11 +50,12 @@ static void InitFontClipmasks() for (i=0; i < gfx.num_fonts; i++) { if (gfx.font_bitmap_info[i].clip_mask) - for (j=0; j < NUM_FONT_CHARS; j++) + for (j=0; j < gfx.font_bitmap_info[i].last_num_chars; j++) XFreePixmap(display, gfx.font_bitmap_info[i].clip_mask[j]); free(gfx.font_bitmap_info[i].clip_mask); gfx.font_bitmap_info[i].clip_mask = NULL; + gfx.font_bitmap_info[i].last_num_chars = 0; } if (font_clip_gc) @@ -84,14 +86,15 @@ static void InitFontClipmasks() continue; gfx.font_bitmap_info[i].clip_mask = - checked_calloc(NUM_FONT_CHARS * sizeof(Pixmap)); + checked_calloc(gfx.font_bitmap_info[i].num_chars * sizeof(Pixmap)); + gfx.font_bitmap_info[i].last_num_chars = gfx.font_bitmap_info[i].num_chars; - for (j=0; j < NUM_FONT_CHARS; j++) + for (j=0; j < gfx.font_bitmap_info[i].num_chars; j++) { Bitmap *src_bitmap = gfx.font_bitmap_info[i].bitmap; Pixmap src_pixmap = src_bitmap->clip_mask; - int xpos = j % FONT_CHARS_PER_LINE; - int ypos = j / FONT_CHARS_PER_LINE; + int xpos = j % gfx.font_bitmap_info[i].num_chars_per_line; + int ypos = j / gfx.font_bitmap_info[i].num_chars_per_line; int width = gfx.font_bitmap_info[i].width; int height = gfx.font_bitmap_info[i].height; int src_x = gfx.font_bitmap_info[i].src_x + xpos * width; @@ -141,27 +144,33 @@ int getFontHeight(int font_nr) return gfx.font_bitmap_info[font_bitmap_id].height; } -boolean getFontChar(int font_nr, char c, int *src_x, int *src_y) +static char getFontCharPosition(int font_nr, char c) { int font_bitmap_id = gfx.select_font_function(font_nr); struct FontBitmapInfo *font = &gfx.font_bitmap_info[font_bitmap_id]; + boolean default_font = (font->num_chars == DEFAULT_NUM_CHARS_PER_FONT); + int font_pos = c - 32; - if ((c >= 32 && c <= 95) || c == '°' || c == '´' || c == '|') - { - *src_x = font->src_x + ((c - 32) % FONT_CHARS_PER_LINE) * font->width; - *src_y = font->src_y + ((c - 32) / FONT_CHARS_PER_LINE) * font->height; + /* map some special characters to their ascii values in default font */ + if (default_font) + font_pos = MAP_FONT_ASCII(c) - 32; - /* map '°' and 'TM' signs and cursor */ - if (c == '°' || c == '´' || c == '|') - { - *src_x = font->src_x + FONT_CHARS_PER_LINE * font->width; - *src_y = font->src_y + (c == '°' ? 1 : c == '´' ? 2 : 3) * font->height; - } + /* this allows dynamic special characters together with special font */ + if (font_pos < 0 || font_pos >= font->num_chars) + font_pos = 0; - return TRUE; - } + return font_pos; +} - return FALSE; +void getFontCharSource(int font_nr, char c, Bitmap **bitmap, int *x, int *y) +{ + int font_bitmap_id = gfx.select_font_function(font_nr); + struct FontBitmapInfo *font = &gfx.font_bitmap_info[font_bitmap_id]; + int font_pos = getFontCharPosition(font_nr, c); + + *bitmap = font->bitmap; + *x = font->src_x + (font_pos % font->num_chars_per_line) * font->width; + *y = font->src_y + (font_pos / font->num_chars_per_line) * font->height; } void DrawInitText(char *text, int ypos, int font_nr) @@ -230,8 +239,11 @@ void DrawTextExt(DrawBuffer *dst_bitmap, int dst_x, int dst_y, char *text, { int font_bitmap_id = gfx.select_font_function(font_nr); struct FontBitmapInfo *font = &gfx.font_bitmap_info[font_bitmap_id]; + int font_width = getFontWidth(font_nr); + int font_height = getFontHeight(font_nr); boolean print_inverse = FALSE; boolean print_inverse_cursor = FALSE; + Bitmap *src_bitmap; int src_x, src_y; if (font->bitmap == NULL) @@ -254,76 +266,67 @@ void DrawTextExt(DrawBuffer *dst_bitmap, int dst_x, int dst_y, char *text, continue; } - if (c >= 'a' && c <= 'z') - c = 'A' + (c - 'a'); - else if (c == 'ä' || c == 'Ä') - c = 91; - else if (c == 'ö' || c == 'Ö') - c = 92; - else if (c == 'ü' || c == 'Ü') - c = 93; - else if (c == '[' || c == ']') /* map to normal braces */ - c = (c == '[' ? '(' : ')'); - else if (c == '\\') /* bad luck ... */ - c = '/'; - - if (getFontChar(font_nr, c, &src_x, &src_y)) + getFontCharSource(font_nr, c, &src_bitmap, &src_x, &src_y); + + if (print_inverse) /* special mode for text gadgets */ { - if (print_inverse) /* special mode for text gadgets */ - { #if defined(TARGET_SDL) - /* blit normally (non-masked) */ - BlitBitmap(font->bitmap, dst_bitmap, src_x, src_y, - font->width, font->height, dst_x, dst_y); + /* blit normally (non-masked) */ + BlitBitmap(src_bitmap, dst_bitmap, src_x, src_y, + font_width, font_height, dst_x, dst_y); - /* invert character */ - SDLInvertArea(dst_bitmap, dst_x, dst_y, font->width, font->height, - gfx.inverse_text_color); + /* invert character */ + SDLInvertArea(dst_bitmap, dst_x, dst_y, font_width, font_height, + gfx.inverse_text_color); #else - /* first step: draw solid colored rectangle (use "cursor" character) */ - if (print_inverse_cursor) - BlitBitmap(font->bitmap, dst_bitmap, - font->src_x + FONT_CHARS_PER_LINE * font->width, - font->src_y + 3 * font->height, - font->width, font->height, dst_x, dst_y); - - /* second step: draw masked black rectangle (use "space" character) */ - SetClipOrigin(font->bitmap, font->bitmap->stored_clip_gc, - dst_x - src_x, dst_y - src_y); - BlitBitmapMasked(font->bitmap, dst_bitmap, - 0, 0, font->width, font->height, dst_x, dst_y); -#endif - } - else if (mask_mode == BLIT_MASKED) + /* first step: draw solid colored rectangle (use "cursor" character) */ + if (print_inverse_cursor) { - /* clear font character background */ - ClearRectangleOnBackground(dst_bitmap, dst_x, dst_y, - font->width, font->height); + Bitmap *cursor_bitmap; + int cursor_x, cursor_y; -#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) - /* use special font tile clipmasks */ - { - int font_char = (c >= 32 && c <= 95 ? c - 32 : 0); - - SetClipMask(font->bitmap, font_clip_gc, - font->clip_mask[font_char]); - SetClipOrigin(font->bitmap, font_clip_gc, dst_x, dst_y); - } -#else - SetClipOrigin(font->bitmap, font->bitmap->stored_clip_gc, - dst_x - src_x, dst_y - src_y); -#endif + getFontCharSource(font_nr, FONT_ASCII_CURSOR, &cursor_bitmap, + &cursor_x, &cursor_y); - BlitBitmapMasked(font->bitmap, dst_bitmap, src_x, src_y, - font->width, font->height, dst_x, dst_y); + BlitBitmap(cursor_bitmap, dst_bitmap, cursor_x, cursor_y, + font_width, font_height, dst_x, dst_y); } - else /* normal, non-masked font blitting */ + + /* second step: draw masked black rectangle (use "space" character) */ + SetClipOrigin(src_bitmap, src_bitmap->stored_clip_gc, + dst_x - src_x, dst_y - src_y); + BlitBitmapMasked(src_bitmap, dst_bitmap, 0, 0, + font_width, font_height, dst_x, dst_y); +#endif + } + else if (mask_mode == BLIT_MASKED) + { + /* clear font character background */ + ClearRectangleOnBackground(dst_bitmap, dst_x, dst_y, + font_width, font_height); + +#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) + /* use special font tile clipmasks */ { - BlitBitmap(font->bitmap, dst_bitmap, src_x, src_y, - font->width, font->height, dst_x, dst_y); + int font_pos = getFontCharPosition(font_nr, c); + + SetClipMask(src_bitmap, font_clip_gc, font->clip_mask[font_pos]); + SetClipOrigin(src_bitmap, font_clip_gc, dst_x, dst_y); } +#else + SetClipOrigin(src_bitmap, src_bitmap->stored_clip_gc, + dst_x - src_x, dst_y - src_y); +#endif + + BlitBitmapMasked(src_bitmap, dst_bitmap, src_x, src_y, + font_width, font_height, dst_x, dst_y); + } + else /* normal, non-masked font blitting */ + { + BlitBitmap(src_bitmap, dst_bitmap, src_x, src_y, + font_width, font_height, dst_x, dst_y); } - dst_x += font->width; + dst_x += font_width; } } diff --git a/src/libgame/text.h b/src/libgame/text.h index f506b940..fe6dace8 100644 --- a/src/libgame/text.h +++ b/src/libgame/text.h @@ -29,12 +29,27 @@ #define FC_GREEN FONT_INITIAL_3 #define FC_YELLOW FONT_INITIAL_4 -#define FONT_CHARS_PER_LINE 16 -#define FONT_LINES_PER_FONT 4 - /* text output definitions */ #define MAX_OUTPUT_LINESIZE 1024 +/* special character mapping for default fonts */ +#define FONT_ASCII_CURSOR ((char)160) +#define MAP_FONT_ASCII(c) ((c) >= 'a' && (c) <= 'z' ? 'A' + (c) - 'a' : \ + (c) == '©' ? 96 : \ + (c) == 'ä' || (c) == 'Ä' ? 97 : \ + (c) == 'ö' || (c) == 'Ö' ? 98 : \ + (c) == 'ü' || (c) == 'Ü' ? 99 : \ + (c) == '°' ? 100 : \ + (c) == '®' ? 101 : \ + (c) == FONT_ASCII_CURSOR ? 102 : \ + (c)) + +/* 64 regular ordered ASCII characters, 6 special characters, 1 cursor char. */ +#define MIN_NUM_CHARS_PER_FONT 64 +#define DEFAULT_NUM_CHARS_PER_FONT (MIN_NUM_CHARS_PER_FONT + 6 +1) +#define DEFAULT_NUM_CHARS_PER_LINE 16 + + /* font structure definitions */ void InitFontInfo(struct FontBitmapInfo *, int, int (*function)(int)); @@ -42,7 +57,7 @@ void SetInverseTextColor(Pixel); int getFontWidth(int); int getFontHeight(int); -boolean getFontChar(int, char, int *, int *); +void getFontCharSource(int, char, Bitmap **, int *, int *); void DrawInitText(char *, int, int); void DrawTextF(int, int, int, char *, ...); diff --git a/src/main.c b/src/main.c index bcd5dce7..2c77e70a 100644 --- a/src/main.c +++ b/src/main.c @@ -995,64 +995,64 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS + 1] = "letter 'Z'" }, { - "char_ae", + "char_bracketleft", "char", - "letter 'Ä'" + "letter '['" }, { - "char_oe", + "char_backslash", "char", - "letter 'Ö'" + "letter '\\'" }, { - "char_ue", + "char_bracketright", "char", - "letter 'Ü'" + "letter ']'" }, { - "char_copyright", + "char_asciicircum", "char", "letter '^'" }, { "char_underscore", "char", - "letter ''" + "letter '_'" }, { - "char_empty", + "char_copyright", "char", - "letter ''" + "letter '©'" }, { - "char_degree", + "char_aumlaut", "char", - "letter ''" + "letter 'Ä'" }, { - "char_tm", + "char_oumlaut", "char", - "letter ''" + "letter 'Ö'" }, { - "char_cursor", + "char_uumlaut", "char", - "letter ''" + "letter 'Ü'" }, { - "char_unused", + "char_degree", "char", - "letter ''" + "letter '°'" }, { - "char_unused", + "char_trademark", "char", - "letter ''" + "letter '®'" }, { - "char_unused", + "char_cursor", "char", - "letter ''" + "letter ' '" }, { "char_unused", diff --git a/src/main.h b/src/main.h index f00ab2a7..a3ce361a 100644 --- a/src/main.h +++ b/src/main.h @@ -440,15 +440,22 @@ #define EL_CHAR_ASCII0_END (EL_CHAR_ASCII0 + 111) #define EL_CHAR_END (EL_CHAR_START + 79) +#define EL_CHAR(c) (EL_CHAR_ASCII0 + MAP_FONT_ASCII(c)) + +#if 0 #define EL_CHAR(x) ((x) == 'Ä' ? EL_CHAR_AE : \ (x) == 'Ö' ? EL_CHAR_OE : \ (x) == 'Ü' ? EL_CHAR_UE : \ - (x) == '^' ? EL_CHAR_COPYRIGHT : \ + (x) == 'ä' ? EL_CHAR_AE : \ + (x) == 'ö' ? EL_CHAR_OE : \ + (x) == 'ü' ? EL_CHAR_UE : \ + (x) == '©' ? EL_CHAR_COPYRIGHT : \ (x) == '_' ? EL_CHAR_UNDERSCORE : \ (x) == '°' ? EL_CHAR_DEGREE : \ (x) == '´' ? EL_CHAR_TM : \ (x) == '|' ? EL_CHAR_CURSOR : \ EL_CHAR_A + (x) - 'A') +#endif #define EL_EXPANDABLE_WALL_HORIZONTAL 200 #define EL_EXPANDABLE_WALL_VERTICAL 201 @@ -794,10 +801,9 @@ #define GFX_ARG_POSITION 19 #define GFX_ARG_DRAW_XOFFSET 20 #define GFX_ARG_DRAW_YOFFSET 21 -#define GFX_ARG_FORMAT 22 -#define GFX_ARG_NAME 23 +#define GFX_ARG_NAME 22 -#define NUM_GFX_ARGS 24 +#define NUM_GFX_ARGS 23 /* values for sound configuration suffixes */ @@ -833,7 +839,6 @@ #define NUM_FONTS 21 #define NUM_INITIAL_FONTS 4 - /* values for game_status */ #define EXITGAME 0 #define MAINMENU 1 @@ -854,7 +859,7 @@ #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" -#define PROGRAM_RIGHTS_STRING "Copyright ^1995-2003 by" +#define PROGRAM_RIGHTS_STRING "Copyright ©1995-2003 by" #define PROGRAM_DOS_PORT_STRING "DOS port done by Guido Schulz" #define PROGRAM_IDENT_STRING PROGRAM_VERSION_STRING " " TARGET_STRING #define WINDOW_TITLE_STRING PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING @@ -1107,6 +1112,7 @@ struct GraphicInfo int width, height; /* width/height of each animation frame */ int offset_x, offset_y; /* x/y offset to next animation frame */ int anim_frames; + int anim_frames_per_line; int anim_start_frame; int anim_delay; /* important: delay of 1 means "no delay"! */ int anim_mode; -- 2.34.1