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.95 by root, Sun Apr 26 19:10:57 2009 UTC vs.
Revision 1.104 by root, Sat Mar 20 01:38:59 2010 UTC

133 crash "CRASH/EV::DIED: $@" => 0; 133 crash "CRASH/EV::DIED: $@" => 0;
134 DC::fatal Carp::longmess $@; 134 DC::fatal Carp::longmess $@;
135}; 135};
136 136
137my $MAX_FPS = 60; 137my $MAX_FPS = 60;
138
139our $DEFAULT_SERVER = "gameserver.deliantra.net";
138 140
139our $META_SERVER = "http://metaserver.schmorp.de/current.json"; 141our $META_SERVER = "http://metaserver.schmorp.de/current.json";
140 142
141our $LAST_REFRESH; 143our $LAST_REFRESH;
142our $NOW; 144our $NOW;
539 sub audio_tab_update; 541 sub audio_tab_update;
540 audio_tab_update; 542 audio_tab_update;
541} 543}
542 544
543sub audio_shutdown { 545sub audio_shutdown {
546 if ($SDL_MIXER) {
547 DC::MixMusic::halt;
548 DC::Mix_AllocateChannels 0;
549 }
550
544 undef $MUSIC_PLAYER; 551 undef $MUSIC_PLAYER;
545 undef $MUSIC_PLAYING_META; 552 undef $MUSIC_PLAYING_META;
546 undef $MUSIC_PLAYING_DATA; 553 undef $MUSIC_PLAYING_DATA;
547 554
548 $MUSIC_WANT = []; 555 $MUSIC_WANT = [];
828 ; 835 ;
829} 836}
830 837
831sub start_game { 838sub start_game {
832 status "logging in..."; 839 status "logging in...";
840
841 my $server = $PROFILE->{host} || $DEFAULT_SERVER;
842 my ($host, $port) = AnyEvent::Socket::parse_hostport $server, "deliantra=13327"
843 or return status "$server: unable to parse server address, try an empty field.";
833 844
834 $LOGIN_BUTTON->set_text ("Logout"); 845 $LOGIN_BUTTON->set_text ("Logout");
835 $SETUP_DIALOG->hide; 846 $SETUP_DIALOG->hide;
836
837 my ($host, $port) = AnyEvent::Socket::parse_hostport $PROFILE->{host}, "deliantra=13327";
838 847
839 $MAP = new DC::Map; 848 $MAP = new DC::Map;
840 849
841 # hack to make SURE we find the IP address all right 850 # hack to make SURE we find the IP address all right
842 # can be removed once AnyEvent::DNS is proven stable. 851 # can be removed once AnyEvent::DNS is proven stable.
1025 . "If you have a very slow system, non-accelerated drivers or plain dislike smooth scrolling, " 1034 . "If you have a very slow system, non-accelerated drivers or plain dislike smooth scrolling, "
1026 . "then disable this option. Changes take effect immdiately.", 1035 . "then disable this option. Changes take effect immdiately.",
1027 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 } 1036 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 }
1028 ); 1037 );
1029 1038
1039 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Smooth Transitions");
1040 $table->add_at (1, $row++, new DC::UI::CheckBox
1041 state => $CFG->{smooth_transitions},
1042 tooltip => "<b>Smooth Transitions</b> tries to blend the fog of war and lighting smoothly between updates. "
1043 . "If you have a very slow system, non-accelerated drivers or plain dislike smooth scrolling, "
1044 . "then disable this option. Requires Smooth Movement and OpenGL Multitexturing. Changes take effect immdiately.",
1045 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_transitions} = $value; 0 }
1046 );
1047
1048
1030 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Map Scale"); 1049 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Map Scale");
1031 $table->add_at (1, $row++, new DC::UI::Slider 1050 $table->add_at (1, $row++, new DC::UI::Slider
1032 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1], 1051 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1],
1033 tooltip => "Enlarge or shrink the displayed map. Changes are instant.", 1052 tooltip => "Enlarge or shrink the displayed map. Changes are instant.",
1034 on_changed => sub { my ($self, $value) = @_; $CFG->{map_scale} = 2 ** $value; 0 } 1053 on_changed => sub { my ($self, $value) = @_; $CFG->{map_scale} = 2 ** $value; 0 }
1046 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Fog of War"); 1065 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Fog of War");
1047 $table->add_at (1, $row++, new DC::UI::CheckBox 1066 $table->add_at (1, $row++, new DC::UI::CheckBox
1048 state => $CFG->{fow_enable}, 1067 state => $CFG->{fow_enable},
1049 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.", 1068 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.",
1050 on_changed => sub { my ($self, $value) = @_; $CFG->{fow_enable} = $value; 0 } 1069 on_changed => sub { my ($self, $value) = @_; $CFG->{fow_enable} = $value; 0 }
1070 );
1071
1072 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "FoW Pattern");
1073 $table->add_at (1, $row++, new DC::UI::ImageButton
1074 tex => $DC::MapWidget::TEX_HIDDEN[$CFG->{fow_texture}],
1075 bg => [0.3, 0.3, 0.2],
1076 force_w => 64,
1077 force_h => 64,
1078 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.",
1079 on_activate => sub {
1080 my ($self) = @_;
1081 $CFG->{fow_texture} = ($CFG->{fow_texture} + 1) % @DC::MapWidget::TEX_HIDDEN;
1082 $self->set_texture ($DC::MapWidget::TEX_HIDDEN[$CFG->{fow_texture}]);
1083 $MAPWIDGET->update;
1084 }
1051 ); 1085 );
1052 1086
1053 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "FoW Intensity"); 1087 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "FoW Intensity");
1054 $table->add_at (1, $row++, new DC::UI::Slider 1088 $table->add_at (1, $row++, new DC::UI::Slider
1055 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256], 1089 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256],
1107 1141
1108 my $text = !$freq 1142 my $text = !$freq
1109 ? "audio is off" 1143 ? "audio is off"
1110 : "audio is enabled\n" 1144 : "audio is enabled\n"
1111 . "frequency (Hz): $freq\n" 1145 . "frequency (Hz): $freq\n"
1112 . "channels: $chans"; 1146 . "channels: $chans\n"
1147 . "chunk decoders available: " . (join ", ", DC::MixChunk::decoders) . "\n"
1148 . "music decoders available: " . (join ", ", DC::MixMusic::decoders);
1113 1149
1114 $AUDIO_INFO->set_text ($text); 1150 $AUDIO_INFO->set_text ($text);
1115} 1151}
1116 1152
1117sub audio_setup { 1153sub audio_setup {
1637 child => (my $table = new DC::UI::Table expand => 1, col_expand => [0, 1]), 1673 child => (my $table = new DC::UI::Table expand => 1, col_expand => [0, 1]),
1638 ); 1674 );
1639 1675
1640 $table->add_at (0, 4, new DC::UI::Label align => 1, text => "Username"); 1676 $table->add_at (0, 4, new DC::UI::Label align => 1, text => "Username");
1641 $table->add_at (1, 4, new DC::UI::Entry 1677 $table->add_at (1, 4, new DC::UI::Entry
1642 text => $CFG->{profile}{default}{user}, 1678 text => $PROFILE->{user},
1643 tooltip => "The name of your character on the server. The name is case-sensitive!", 1679 tooltip => "The name of your character on the server. The name is case-sensitive!",
1644 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{user} = $value; 1 } 1680 on_changed => sub { my ($self, $value) = @_; $PROFILE->{user} = $value; 1 }
1645 ); 1681 );
1646 1682
1647 $table->add_at (0, 5, new DC::UI::Label align => 1, text => "Password"); 1683 $table->add_at (0, 5, new DC::UI::Label align => 1, text => "Password");
1648 $table->add_at (1, 5, new DC::UI::Entry 1684 $table->add_at (1, 5, new DC::UI::Entry
1649 text => $CFG->{profile}{default}{password}, 1685 text => $PROFILE->{password},
1650 hidden => 1, 1686 hidden => 1,
1651 tooltip => "The password for your character.", 1687 tooltip => "The password for your character.",
1652 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{password} = $value; 1 } 1688 on_changed => sub { my ($self, $value) = @_; $PROFILE->{password} = $value; 1 }
1653 ); 1689 );
1654 1690
1655 $table->add_at (1, 11, $LOGIN_BUTTON = new DC::UI::Button 1691 $table->add_at (1, 11, $LOGIN_BUTTON = new DC::UI::Button
1656 expand => 1, 1692 expand => 1,
1657 text => "Login / Register", 1693 text => "Login / Register",
1693 $table->add_at (1, $row, my $vbox = new DC::UI::VBox); 1729 $table->add_at (1, $row, my $vbox = new DC::UI::VBox);
1694 1730
1695 $vbox->add ( 1731 $vbox->add (
1696 $HOST_ENTRY = new DC::UI::Entry 1732 $HOST_ENTRY = new DC::UI::Entry
1697 expand => 1, 1733 expand => 1,
1698 text => $CFG->{profile}{default}{host}, 1734 text => $PROFILE->{host},
1699 tooltip => "The hostname or ip address of the Deliantra server to connect to (e.g. <b>gameserver.deliantra.net</b>)", 1735 tooltip => "The hostname or ip address of the Deliantra server to connect to (e.g. <b>gameserver.deliantra.net</b>)",
1700 on_changed => sub { 1736 on_changed => sub {
1701 my ($self, $value) = @_; 1737 my ($self, $value) = @_;
1702 $CFG->{profile}{default}{host} = $value; 1738 $PROFILE->{host} = $value;
1703 1 1739 1
1704 } 1740 }
1705 ); 1741 );
1706 1742
1707 if (0) { #d# disabled 1743 if (0) { #d# disabled
2563 2599
2564 $MODE_SLIDER->set_range ([$CFG->{sdl_mode}, 0, scalar @SDL_MODES, 1, 1]); 2600 $MODE_SLIDER->set_range ([$CFG->{sdl_mode}, 0, scalar @SDL_MODES, 1, 1]);
2565 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode}); 2601 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode});
2566 2602
2567 $CAVEAT_LABEL->set_text ("None :)"); 2603 $CAVEAT_LABEL->set_text ("None :)");
2604 $CAVEAT_LABEL->set_text ("Apple/NVIDIA Texture bug (slow)")
2605 if $DC::OpenGL::APPLE_NVIDIA_BUG;
2568 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)") 2606 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)")
2569 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL; 2607 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL;
2570 2608
2571 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 2609 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
2572} 2610}
2705 fullscreen => 1, 2743 fullscreen => 1,
2706 fast => 0, 2744 fast => 0,
2707 force_opengl11 => undef, 2745 force_opengl11 => undef,
2708 disable_alpha => 0, 2746 disable_alpha => 0,
2709 smooth_movement => 1, 2747 smooth_movement => 1,
2748 smooth_transitions => 1,
2710 texture_compression => 1, 2749 texture_compression => 1,
2711 map_scale => 1, 2750 map_scale => 1,
2712 fow_enable => 1, 2751 fow_enable => 1,
2713 fow_intensity => 0, 2752 fow_intensity => 0,
2753 fow_texture => 0,
2714 map_smoothing => 1, 2754 map_smoothing => 1,
2715 gui_fontsize => 1, 2755 gui_fontsize => 1,
2716 log_fontsize => 0.7, 2756 log_fontsize => 0.7,
2717 gauge_fontsize => 1, 2757 gauge_fontsize => 1,
2718 gauge_size => 0.35, 2758 gauge_size => 0.35,
2736 shift_fire_stop => 0, 2776 shift_fire_stop => 0,
2737 uitheme => "wood", 2777 uitheme => "wood",
2738 map_shift_x => -24, # arbitrary 2778 map_shift_x => -24, # arbitrary
2739 map_shift_y => +24, # arbitrary 2779 map_shift_y => +24, # arbitrary
2740 ); 2780 );
2741 2781
2742 while (my ($k, $v) = each %DEF_CFG) { 2782 while (my ($k, $v) = each %DEF_CFG) {
2743 $CFG->{$k} = $v unless exists $CFG->{$k}; 2783 $CFG->{$k} = $v unless exists $CFG->{$k};
2744 } 2784 }
2745 2785
2746 $CFG->{profile}{default}{host} ||= "gameserver.deliantra.net"; 2786 my @args = @ARGV;
2787
2788 my $profile = 'default';
2789
2790 for (my $i = 0; $i < @args; $i++) {
2791 if ($args[$i] =~ /^--?profile$/) {
2792 $profile = $args[$i + 1];
2793 splice @args, $i, 2, ();
2794 $i = 0;
2795 } elsif ($args[$i] =~ /^--?h/) {
2796 print STDERR "Usage: $0 [--profile name] [host [user [password]]]\n";
2797 exit 0;
2798 }
2799 }
2800
2801 $CFG->{profile}{$profile} ||= {};
2747 $PROFILE = $CFG->{profile}{default}; 2802 $PROFILE = $CFG->{profile}{$profile};
2803 $PROFILE->{host} ||= "gameserver.deliantra.net";
2804
2805 $PROFILE->{host} = $args[0] if @args > 0;
2806 $PROFILE->{user} = $args[1] if @args > 1;
2807 $PROFILE->{password} = $args[2] if @args > 2;
2748 2808
2749 # convert old bindings (only default profile matters) 2809 # convert old bindings (only default profile matters)
2750 if (my $bindings = delete $PROFILE->{bindings}) { 2810 if (my $bindings = delete $PROFILE->{bindings}) {
2751 while (my ($mod, $syms) = each %$bindings) { 2811 while (my ($mod, $syms) = each %$bindings) {
2752 while (my ($sym, $cmds) = each %$syms) { 2812 while (my ($sym, $cmds) = each %$syms) {
2775 DejaVuSansMono-BoldOblique.ttf 2835 DejaVuSansMono-BoldOblique.ttf
2776 mona.ttf 2836 mona.ttf
2777 ); 2837 );
2778 2838
2779 DC::add_font $_ for @fonts; 2839 DC::add_font $_ for @fonts;
2780 2840
2781 $FONT_PROP = new_from_file DC::Font $fonts[0]; 2841 $FONT_PROP = new_from_file DC::Font $fonts[0];
2782 $FONT_FIXED = new_from_file DC::Font $fonts[1]; 2842 $FONT_FIXED = new_from_file DC::Font $fonts[1];
2783 2843
2784 $FONT_PROP->make_default; 2844 $FONT_PROP->make_default;
2785 2845
2829 2889
2830deliantra - A Deliantra MORPG game client 2890deliantra - A Deliantra MORPG game client
2831 2891
2832=head1 SYNOPSIS 2892=head1 SYNOPSIS
2833 2893
2834Just run it - no commandline arguments are supported. 2894 deliantra [--profile name] [host [user [password]]]
2895 deliantra --help
2835 2896
2836=head1 USAGE 2897=head1 USAGE
2837 2898
2838deliantra utilises OpenGL for all UI elements and the game. It is supposed to 2899The deliantra client utilises OpenGL for all UI elements and the game. It
2839be used in fullscreen mode and interactively. 2900is supposed to be used in fullscreen mode and interactively.
2840 2901
2841=head1 DEBUGGING 2902=head1 DEBUGGING
2842
2843 2903
2844CFPLUS_DEBUG - environment variable 2904CFPLUS_DEBUG - environment variable
2845 2905
2846 1 draw borders around widgets 2906 1 draw borders around widgets
2847 2 add low-level widget info to tooltips 2907 2 add low-level widget info to tooltips

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines