ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/bin/deliantra
(Generate patch)

Comparing deliantra/Deliantra-Client/bin/deliantra (file contents):
Revision 1.90 by root, Mon Jan 12 03:49:35 2009 UTC vs.
Revision 1.108 by root, Thu Apr 8 04:49:32 2010 UTC

32 Win32::GUI::SplashScreen::Done (1); 32 Win32::GUI::SplashScreen::Done (1);
33 }; 33 };
34 } 34 }
35} 35}
36 36
37use strict; 37use common::sense;
38use utf8;
39 38
40use Carp 'verbose'; 39use Carp 'verbose';
41 40
42# do things only needed for single-binary version (par) 41# do things only needed for single-binary version (par)
43BEGIN { 42BEGIN {
56 55
57 if ($^O eq "MSWin32") { 56 if ($^O eq "MSWin32") {
58 # pango is relocatable on win32 57 # pango is relocatable on win32
59 } else { 58 } else {
60 # OS X 59 # OS X
61 $ENV{FONTCONFIG_FILE} = "$root/fonts.conf"; # no effect??!?!
62 $ENV{FONTCONFIG_DIR} = $root; # no effect??!?!
63 $ENV{PANGO_RC_FILE} = "$root/pango.rc"; 60 $ENV{PANGO_RC_FILE} = "$root/pango.rc";
64 $ENV{DYLD_LIBRARY_PATH} = $root; 61 $ENV{DYLD_LIBRARY_PATH} = $root;
65 chdir $root; # for pango modules, maybe other things 62 chdir $root; # for pango modules, maybe other things
66 } 63 }
67 64
68 unshift @INC, $root; 65 unshift @INC, $root;
69 } 66 }
70} 67}
71 68
72# prepend private library directory 69# prepend private library directory and prepare env
73BEGIN { 70BEGIN {
74 for (grep !ref, @INC) { 71 for (grep !ref, @INC) {
75 my $path = "$_/Deliantra/Client/private"; 72 my $path = "$_/Deliantra/Client/private";
76 if (-d $path) { 73 if (-d $path) {
77 unshift @INC, $path; 74 unshift @INC, $path;
135 crash "CRASH/EV::DIED: $@" => 0; 132 crash "CRASH/EV::DIED: $@" => 0;
136 DC::fatal Carp::longmess $@; 133 DC::fatal Carp::longmess $@;
137}; 134};
138 135
139my $MAX_FPS = 60; 136my $MAX_FPS = 60;
137
138our $DEFAULT_SERVER = "gameserver.deliantra.net";
140 139
141our $META_SERVER = "http://metaserver.schmorp.de/current.json"; 140our $META_SERVER = "http://metaserver.schmorp.de/current.json";
142 141
143our $LAST_REFRESH; 142our $LAST_REFRESH;
144our $NOW; 143our $NOW;
541 sub audio_tab_update; 540 sub audio_tab_update;
542 audio_tab_update; 541 audio_tab_update;
543} 542}
544 543
545sub audio_shutdown { 544sub audio_shutdown {
545 if ($SDL_MIXER) {
546 DC::MixMusic::halt;
547 DC::Mix_AllocateChannels 0;
548 }
549
546 undef $MUSIC_PLAYER; 550 undef $MUSIC_PLAYER;
547 undef $MUSIC_PLAYING_META; 551 undef $MUSIC_PLAYING_META;
548 undef $MUSIC_PLAYING_DATA; 552 undef $MUSIC_PLAYING_DATA;
549 553
550 $MUSIC_WANT = []; 554 $MUSIC_WANT = [];
802 user => $PROFILE->{user}, 806 user => $PROFILE->{user},
803 pass => $PROFILE->{password}, 807 pass => $PROFILE->{password},
804 mapw => $mapw, 808 mapw => $mapw,
805 maph => $maph, 809 maph => $maph,
806 810
811 version => {
812 client => "deliantra",
807 client => "$DC::VERSION $] $^O", 813 clientver => $DC::VERSION,
814 gl_vendor => DC::OpenGL::gl_vendor,
815 gl_version => DC::OpenGL::gl_version,
816 },
808 817
809 map_widget => $MAPWIDGET, 818 map_widget => $MAPWIDGET,
810 statusbox => $STATUSBOX, 819 statusbox => $STATUSBOX,
811 map => $MAP, 820 map => $MAP,
812 mapmap => $MAPMAP, 821 mapmap => $MAPMAP,
818 827
819 on_connect => sub { 828 on_connect => sub {
820 if ($_[0]) { 829 if ($_[0]) {
821 DC::lowdelay fileno $CONN->{fh}; 830 DC::lowdelay fileno $CONN->{fh};
822 831
823 status "login successful"; 832 status "successfully connected to the server";
824 } else { 833 } else {
825 undef $CONN; 834 undef $CONN;
826 status "unable to connect: $!"; 835 status "unable to connect: $!";
827 stop_game(); 836 stop_game();
828 } 837 }
830 ; 839 ;
831} 840}
832 841
833sub start_game { 842sub start_game {
834 status "logging in..."; 843 status "logging in...";
844
845 my $server = $PROFILE->{host} || $DEFAULT_SERVER;
846 my ($host, $port) = AnyEvent::Socket::parse_hostport $server, "deliantra=13327"
847 or return status "$server: unable to parse server address, try an empty field.";
835 848
836 $LOGIN_BUTTON->set_text ("Logout"); 849 $LOGIN_BUTTON->set_text ("Logout");
837 $SETUP_DIALOG->hide; 850 $SETUP_DIALOG->hide;
838
839 my ($host, $port) = AnyEvent::Socket::parse_hostport $PROFILE->{host}, "deliantra=13327";
840 851
841 $MAP = new DC::Map; 852 $MAP = new DC::Map;
842 853
843 # hack to make SURE we find the IP address all right 854 # hack to make SURE we find the IP address all right
844 # can be removed once AnyEvent::DNS is proven stable. 855 # can be removed once AnyEvent::DNS is proven stable.
845 if ($host eq "gameserver.deliantra.net") { 856 if ($host eq "gameserver.deliantra.net") {
846 AnyEvent::DNS::a "dnstest.deliantra.net", sub { 857 AnyEvent::DNS::a "dnstest.deliantra.net", sub {
847 if ($_[0] ne "80.101.114.108") { # Perl 858 if ($_[0] ne "80.101.114.108") { # Perl
859 status "dns failure, trying differently";
860 $host = eval { Socket::inet_ntoa Socket::inet_aton "gameserver.deliantra.net" };
861 unless (defined $host) {
848 status "dns failure, using hardcoded address"; 862 status "dns failure, using hardcoded address";
849 $host = "129.13.162.95"; 863 $host = "129.13.162.95";
864 }
850 } 865 }
851 866
852 dc_connect $host, $port; 867 dc_connect $host, $port;
853 }; 868 };
854 } else { 869 } else {
1023 . "If you have a very slow system, non-accelerated drivers or plain dislike smooth scrolling, " 1038 . "If you have a very slow system, non-accelerated drivers or plain dislike smooth scrolling, "
1024 . "then disable this option. Changes take effect immdiately.", 1039 . "then disable this option. Changes take effect immdiately.",
1025 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 } 1040 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 }
1026 ); 1041 );
1027 1042
1043 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Smooth Transitions");
1044 $table->add_at (1, $row++, new DC::UI::CheckBox
1045 state => $CFG->{smooth_transitions},
1046 tooltip => "<b>Smooth Transitions</b> tries to blend the fog of war and lighting smoothly between updates. "
1047 . "If you have a very slow system, non-accelerated drivers or plain dislike smooth scrolling, "
1048 . "then disable this option. Requires Smooth Movement and OpenGL Multitexturing. Changes take effect immdiately.",
1049 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_transitions} = $value; 0 }
1050 );
1051
1052
1028 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Map Scale"); 1053 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Map Scale");
1029 $table->add_at (1, $row++, new DC::UI::Slider 1054 $table->add_at (1, $row++, new DC::UI::Slider
1030 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1], 1055 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1],
1031 tooltip => "Enlarge or shrink the displayed map. Changes are instant.", 1056 tooltip => "Enlarge or shrink the displayed map. Changes are instant.",
1032 on_changed => sub { my ($self, $value) = @_; $CFG->{map_scale} = 2 ** $value; 0 } 1057 on_changed => sub { my ($self, $value) = @_; $CFG->{map_scale} = 2 ** $value; 0 }
1044 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Fog of War"); 1069 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Fog of War");
1045 $table->add_at (1, $row++, new DC::UI::CheckBox 1070 $table->add_at (1, $row++, new DC::UI::CheckBox
1046 state => $CFG->{fow_enable}, 1071 state => $CFG->{fow_enable},
1047 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.", 1072 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.",
1048 on_changed => sub { my ($self, $value) = @_; $CFG->{fow_enable} = $value; 0 } 1073 on_changed => sub { my ($self, $value) = @_; $CFG->{fow_enable} = $value; 0 }
1074 );
1075
1076 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "FoW Pattern");
1077 $table->add_at (1, $row++, new DC::UI::ImageButton
1078 tex => $DC::MapWidget::TEX_HIDDEN[$CFG->{fow_texture}],
1079 bg => [0.3, 0.3, 0.2],
1080 force_w => 64,
1081 force_h => 64,
1082 tooltip => "<b>Fog of War Pattern.</b> The pattern that is overlaid over areas hidden from view. Click to cycle through various alternatives. Changes are instant.",
1083 on_activate => sub {
1084 my ($self) = @_;
1085 $CFG->{fow_texture} = ($CFG->{fow_texture} + 1) % @DC::MapWidget::TEX_HIDDEN;
1086 $self->set_texture ($DC::MapWidget::TEX_HIDDEN[$CFG->{fow_texture}]);
1087 $MAPWIDGET->update;
1088 }
1049 ); 1089 );
1050 1090
1051 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "FoW Intensity"); 1091 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "FoW Intensity");
1052 $table->add_at (1, $row++, new DC::UI::Slider 1092 $table->add_at (1, $row++, new DC::UI::Slider
1053 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256], 1093 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256],
1105 1145
1106 my $text = !$freq 1146 my $text = !$freq
1107 ? "audio is off" 1147 ? "audio is off"
1108 : "audio is enabled\n" 1148 : "audio is enabled\n"
1109 . "frequency (Hz): $freq\n" 1149 . "frequency (Hz): $freq\n"
1110 . "channels: $chans"; 1150 . "channels: $chans\n"
1151 . "chunk decoders available: " . (join ", ", DC::MixChunk::decoders) . "\n"
1152 . "music decoders available: " . (join ", ", DC::MixMusic::decoders);
1111 1153
1112 $AUDIO_INFO->set_text ($text); 1154 $AUDIO_INFO->set_text ($text);
1113} 1155}
1114 1156
1115sub audio_setup { 1157sub audio_setup {
1635 child => (my $table = new DC::UI::Table expand => 1, col_expand => [0, 1]), 1677 child => (my $table = new DC::UI::Table expand => 1, col_expand => [0, 1]),
1636 ); 1678 );
1637 1679
1638 $table->add_at (0, 4, new DC::UI::Label align => 1, text => "Username"); 1680 $table->add_at (0, 4, new DC::UI::Label align => 1, text => "Username");
1639 $table->add_at (1, 4, new DC::UI::Entry 1681 $table->add_at (1, 4, new DC::UI::Entry
1640 text => $CFG->{profile}{default}{user}, 1682 text => $PROFILE->{user},
1641 tooltip => "The name of your character on the server. The name is case-sensitive!", 1683 tooltip => "The name of your character on the server. The name is case-sensitive!",
1642 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{user} = $value; 1 } 1684 on_changed => sub { my ($self, $value) = @_; $PROFILE->{user} = $value; 1 }
1643 ); 1685 );
1644 1686
1645 $table->add_at (0, 5, new DC::UI::Label align => 1, text => "Password"); 1687 $table->add_at (0, 5, new DC::UI::Label align => 1, text => "Password");
1646 $table->add_at (1, 5, new DC::UI::Entry 1688 $table->add_at (1, 5, new DC::UI::Entry
1647 text => $CFG->{profile}{default}{password}, 1689 text => $PROFILE->{password},
1648 hidden => 1, 1690 hidden => 1,
1649 tooltip => "The password for your character.", 1691 tooltip => "The password for your character.",
1650 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{password} = $value; 1 } 1692 on_changed => sub { my ($self, $value) = @_; $PROFILE->{password} = $value; 1 }
1651 ); 1693 );
1652 1694
1653 $table->add_at (1, 11, $LOGIN_BUTTON = new DC::UI::Button 1695 $table->add_at (1, 11, $LOGIN_BUTTON = new DC::UI::Button
1654 expand => 1, 1696 expand => 1,
1655 text => "Login / Register", 1697 text => "Login / Register",
1691 $table->add_at (1, $row, my $vbox = new DC::UI::VBox); 1733 $table->add_at (1, $row, my $vbox = new DC::UI::VBox);
1692 1734
1693 $vbox->add ( 1735 $vbox->add (
1694 $HOST_ENTRY = new DC::UI::Entry 1736 $HOST_ENTRY = new DC::UI::Entry
1695 expand => 1, 1737 expand => 1,
1696 text => $CFG->{profile}{default}{host}, 1738 text => $PROFILE->{host},
1697 tooltip => "The hostname or ip address of the Deliantra server to connect to (e.g. <b>gameserver.deliantra.net</b>)", 1739 tooltip => "The hostname or ip address of the Deliantra server to connect to (e.g. <b>gameserver.deliantra.net</b>)",
1698 on_changed => sub { 1740 on_changed => sub {
1699 my ($self, $value) = @_; 1741 my ($self, $value) = @_;
1700 $CFG->{profile}{default}{host} = $value; 1742 $PROFILE->{host} = $value;
1701 1 1743 1
1702 } 1744 }
1703 ); 1745 );
1704 1746
1705 if (0) { #d# disabled 1747 if (0) { #d# disabled
1904 $r 1946 $r
1905} 1947}
1906 1948
1907my %SORT_ORDER = ( 1949my %SORT_ORDER = (
1908 type => sub { 1950 type => sub {
1951 use sort 'stable';
1909 sort { $a->{type} <=> $b->{type} or $a->{name} cmp $b->{name} } @_ 1952 sort { $a->{type} <=> $b->{type} or $a->{name} cmp $b->{name} } @_
1910 }, 1953 },
1911 mtime => sub { 1954 mtime => sub {
1955 use sort 'stable';
1912 my $NOW = time; 1956 my $NOW = time;
1913 sort { 1957 sort {
1914 my $atime = $a->{mtime} - $NOW; $atime = $atime < 5 * 60 ? int $atime / 60 : 6; 1958 my $atime = $a->{mtime} - $NOW; $atime = $atime < 5 * 60 ? int $atime / 60 : 6;
1915 my $btime = $b->{mtime} - $NOW; $btime = $btime < 5 * 60 ? int $btime / 60 : 6; 1959 my $btime = $b->{mtime} - $NOW; $btime = $btime < 5 * 60 ? int $btime / 60 : 6;
1916 1960
1917 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED) 1961 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED)
1918 or $btime <=> $atime 1962 or $btime <=> $atime
1919 or $a->{type} <=> $b->{type} 1963 or $a->{type} <=> $b->{type}
1920 } @_ 1964 } @_
1921 }, 1965 },
1922 weight => sub { sort { 1966 weight => sub {
1967 use sort 'stable';
1968 sort {
1923 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1) 1969 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1)
1924 or $a->{type} <=> $b->{type} 1970 or $a->{type} <=> $b->{type}
1925 } @_ }, 1971 } @_
1972 },
1926); 1973);
1927 1974
1928sub inventory_widget { 1975sub inventory_widget {
1929 my $hb = new DC::UI::HBox homogeneous => 1; 1976 my $hb = new DC::UI::HBox homogeneous => 1;
1930 1977
2481 2528
2482 DC::UI::Toplevel->new ( 2529 DC::UI::Toplevel->new (
2483 title => "Minimap", 2530 title => "Minimap",
2484 name => "mapmap", 2531 name => "mapmap",
2485 x => 0, 2532 x => 0,
2486 y => $FONTSIZE + 8, 2533 y => $::FONTSIZE + 8,#d# hack to move messages window below the menubar
2487 border_bg => [1, 1, 1, 192/255], 2534 border_bg => [1, 1, 1, 192/255],
2488 bg => [1, 1, 1, 0], 2535 bg => [1, 1, 1, 0],
2489 child => ($MAPMAP = new DC::MapWidget::MapMap 2536 child => ($MAPMAP = new DC::MapWidget::MapMap
2490 tooltip => "<b>Minimap</b>. This will display an overview of the surrounding areas.", 2537 tooltip => "<b>Minimap</b>. This will display an overview of the surrounding areas.",
2491 ), 2538 ),
2520 $METASERVER = metaserver_dialog; 2567 $METASERVER = metaserver_dialog;
2521 # the name is changed to not conflict with the older name as users could have hidden it 2568 # the name is changed to not conflict with the older name as users could have hidden it
2522 $MESSAGE_WINDOW = new DC::UI::Dockbar 2569 $MESSAGE_WINDOW = new DC::UI::Dockbar
2523 name => "message_window2", 2570 name => "message_window2",
2524 title => 'Messages', 2571 title => 'Messages',
2572 y => $::FONTSIZE + 8,#d# hack to move messages window below the menubar
2525 force_w => $::WIDTH * 0.6, 2573 force_w => $::WIDTH * 0.6,
2526 force_h => $::HEIGHT * 0.25, 2574 force_h => $::HEIGHT * 0.25,
2527 ; 2575 ;
2528 2576
2529 $MESSAGE_DIST = new DC::MessageDistributor dockbar => $MESSAGE_WINDOW; 2577 $MESSAGE_DIST = new DC::MessageDistributor dockbar => $MESSAGE_WINDOW;
2560 2608
2561 $MODE_SLIDER->set_range ([$CFG->{sdl_mode}, 0, scalar @SDL_MODES, 1, 1]); 2609 $MODE_SLIDER->set_range ([$CFG->{sdl_mode}, 0, scalar @SDL_MODES, 1, 1]);
2562 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode}); 2610 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode});
2563 2611
2564 $CAVEAT_LABEL->set_text ("None :)"); 2612 $CAVEAT_LABEL->set_text ("None :)");
2613 $CAVEAT_LABEL->set_text ("Apple/NVIDIA Texture bug (slow)")
2614 if $DC::OpenGL::APPLE_NVIDIA_BUG;
2565 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)") 2615 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)")
2566 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL; 2616 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL;
2567 2617
2568 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 2618 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
2569} 2619}
2702 fullscreen => 1, 2752 fullscreen => 1,
2703 fast => 0, 2753 fast => 0,
2704 force_opengl11 => undef, 2754 force_opengl11 => undef,
2705 disable_alpha => 0, 2755 disable_alpha => 0,
2706 smooth_movement => 1, 2756 smooth_movement => 1,
2757 smooth_transitions => 1,
2707 texture_compression => 1, 2758 texture_compression => 1,
2708 map_scale => 1, 2759 map_scale => 1,
2709 fow_enable => 1, 2760 fow_enable => 1,
2710 fow_intensity => 0, 2761 fow_intensity => 0,
2762 fow_texture => 0,
2711 map_smoothing => 1, 2763 map_smoothing => 1,
2712 gui_fontsize => 1, 2764 gui_fontsize => 1,
2713 log_fontsize => 0.7, 2765 log_fontsize => 0.7,
2714 gauge_fontsize => 1, 2766 gauge_fontsize => 1,
2715 gauge_size => 0.35, 2767 gauge_size => 0.35,
2730 default => "profile", # default profile 2782 default => "profile", # default profile
2731 show_tips => 1, 2783 show_tips => 1,
2732 logview_max_par => 1000, 2784 logview_max_par => 1000,
2733 shift_fire_stop => 0, 2785 shift_fire_stop => 0,
2734 uitheme => "wood", 2786 uitheme => "wood",
2735 ); 2787 map_shift_x => -24, # arbitrary
2788 map_shift_y => +24, # arbitrary
2736 2789 );
2790
2737 while (my ($k, $v) = each %DEF_CFG) { 2791 while (my ($k, $v) = each %DEF_CFG) {
2738 $CFG->{$k} = $v unless exists $CFG->{$k}; 2792 $CFG->{$k} = $v unless exists $CFG->{$k};
2739 } 2793 }
2740 2794
2741 $CFG->{profile}{default}{host} ||= "gameserver.deliantra.net"; 2795 my @args = @ARGV;
2796
2797 my $profile = 'default';
2798
2799 for (my $i = 0; $i < @args; $i++) {
2800 if ($args[$i] =~ /^--?profile$/) {
2801 $profile = $args[$i + 1];
2802 splice @args, $i, 2, ();
2803 $i = 0;
2804 } elsif ($args[$i] =~ /^--?h/) {
2805 print STDERR "Usage: $0 [--profile name] [host [user [password]]]\n";
2806 exit 0;
2807 }
2808 }
2809
2810 $CFG->{profile}{$profile} ||= {};
2742 $PROFILE = $CFG->{profile}{default}; 2811 $PROFILE = $CFG->{profile}{$profile};
2812 $PROFILE->{host} ||= "gameserver.deliantra.net";
2813
2814 $PROFILE->{host} = $args[0] if @args > 0;
2815 $PROFILE->{user} = $args[1] if @args > 1;
2816 $PROFILE->{password} = $args[2] if @args > 2;
2743 2817
2744 # convert old bindings (only default profile matters) 2818 # convert old bindings (only default profile matters)
2745 if (my $bindings = delete $PROFILE->{bindings}) { 2819 if (my $bindings = delete $PROFILE->{bindings}) {
2746 while (my ($mod, $syms) = each %$bindings) { 2820 while (my ($mod, $syms) = each %$bindings) {
2747 while (my ($sym, $cmds) = each %$syms) { 2821 while (my ($sym, $cmds) = each %$syms) {
2753 } 2827 }
2754 } 2828 }
2755 2829
2756 sdl_init; 2830 sdl_init;
2757 2831
2832 $ENV{FONTCONFIG_FILE} = DC::find_rcfile "fonts/fonts.conf";
2833 $ENV{FONTCONFIG_DIR} = DC::find_rcfile "fonts";
2834
2758 { 2835 {
2759 my @fonts = map DC::find_rcfile "fonts/$_", qw( 2836 my @fonts = map DC::find_rcfile "fonts/$_", qw(
2760 DejaVuSans.ttf 2837 DejaVuSans.ttf
2761 DejaVuSansMono.ttf 2838 DejaVuSansMono.ttf
2762 DejaVuSans-Bold.ttf 2839 DejaVuSans-Bold.ttf
2763 DejaVuSansMono-Bold.ttf 2840 DejaVuSansMono-Bold.ttf
2764 DejaVuSans-Oblique.ttf 2841 DejaVuSans-Oblique.ttf
2765 DejaVuSansMono-Oblique.ttf 2842 DejaVuSansMono-Oblique.ttf
2766 DejaVuSans-BoldOblique.ttf 2843 DejaVuSans-BoldOblique.ttf
2767 DejaVuSansMono-BoldOblique.ttf 2844 DejaVuSansMono-BoldOblique.ttf
2845 mona.ttf
2768 ); 2846 );
2769 2847
2770 DC::add_font $_ for @fonts; 2848 DC::add_font $_ for @fonts;
2771 2849
2772 $FONT_PROP = new_from_file DC::Font $fonts[0]; 2850 $FONT_PROP = new_from_file DC::Font $fonts[0];
2773 $FONT_FIXED = new_from_file DC::Font $fonts[1]; 2851 $FONT_FIXED = new_from_file DC::Font $fonts[1];
2774 2852
2775 $FONT_PROP->make_default; 2853 $FONT_PROP->make_default;
2776 2854
2820 2898
2821deliantra - A Deliantra MORPG game client 2899deliantra - A Deliantra MORPG game client
2822 2900
2823=head1 SYNOPSIS 2901=head1 SYNOPSIS
2824 2902
2825Just run it - no commandline arguments are supported. 2903 deliantra [--profile name] [host [user [password]]]
2904 deliantra --help
2826 2905
2827=head1 USAGE 2906=head1 USAGE
2828 2907
2829deliantra utilises OpenGL for all UI elements and the game. It is supposed to 2908The deliantra client utilises OpenGL for all UI elements and the game. It
2830be used in fullscreen mode and interactively. 2909is supposed to be used in fullscreen mode and interactively.
2831 2910
2832=head1 DEBUGGING 2911=head1 DEBUGGING
2833
2834 2912
2835CFPLUS_DEBUG - environment variable 2913CFPLUS_DEBUG - environment variable
2836 2914
2837 1 draw borders around widgets 2915 1 draw borders around widgets
2838 2 add low-level widget info to tooltips 2916 2 add low-level widget info to tooltips

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines