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.94 by root, Sun Mar 29 22:28:13 2009 UTC vs.
Revision 1.103 by elmex, Sat Mar 20 01:01:16 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.
843 if ($host eq "gameserver.deliantra.net") { 852 if ($host eq "gameserver.deliantra.net") {
844 AnyEvent::DNS::a "dnstest.deliantra.net", sub { 853 AnyEvent::DNS::a "dnstest.deliantra.net", sub {
845 if ($_[0] ne "80.101.114.108") { # Perl 854 if ($_[0] ne "80.101.114.108") { # Perl
855 status "dns failure, trying differently";
856 $host = eval { Socket::inet_ntoa Socket::inet_aton "gameserver.deliantra.net" };
857 unless (defined $host) {
846 status "dns failure, using hardcoded address"; 858 status "dns failure, using hardcoded address";
847 $host = "129.13.162.95"; 859 $host = "129.13.162.95";
860 }
848 } 861 }
849 862
850 dc_connect $host, $port; 863 dc_connect $host, $port;
851 }; 864 };
852 } else { 865 } else {
1021 . "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, "
1022 . "then disable this option. Changes take effect immdiately.", 1035 . "then disable this option. Changes take effect immdiately.",
1023 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 } 1036 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 }
1024 ); 1037 );
1025 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
1026 $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");
1027 $table->add_at (1, $row++, new DC::UI::Slider 1050 $table->add_at (1, $row++, new DC::UI::Slider
1028 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1], 1051 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1],
1029 tooltip => "Enlarge or shrink the displayed map. Changes are instant.", 1052 tooltip => "Enlarge or shrink the displayed map. Changes are instant.",
1030 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 }
1042 $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");
1043 $table->add_at (1, $row++, new DC::UI::CheckBox 1066 $table->add_at (1, $row++, new DC::UI::CheckBox
1044 state => $CFG->{fow_enable}, 1067 state => $CFG->{fow_enable},
1045 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.",
1046 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 }
1047 ); 1085 );
1048 1086
1049 $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");
1050 $table->add_at (1, $row++, new DC::UI::Slider 1088 $table->add_at (1, $row++, new DC::UI::Slider
1051 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256], 1089 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256],
1103 1141
1104 my $text = !$freq 1142 my $text = !$freq
1105 ? "audio is off" 1143 ? "audio is off"
1106 : "audio is enabled\n" 1144 : "audio is enabled\n"
1107 . "frequency (Hz): $freq\n" 1145 . "frequency (Hz): $freq\n"
1108 . "channels: $chans"; 1146 . "channels: $chans\n"
1147 . "chunk decoders available: " . (join ", ", DC::MixChunk::decoders) . "\n"
1148 . "music decoders available: " . (join ", ", DC::MixMusic::decoders);
1109 1149
1110 $AUDIO_INFO->set_text ($text); 1150 $AUDIO_INFO->set_text ($text);
1111} 1151}
1112 1152
1113sub audio_setup { 1153sub audio_setup {
1633 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]),
1634 ); 1674 );
1635 1675
1636 $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");
1637 $table->add_at (1, 4, new DC::UI::Entry 1677 $table->add_at (1, 4, new DC::UI::Entry
1638 text => $CFG->{profile}{default}{user}, 1678 text => $PROFILE->{user},
1639 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!",
1640 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{user} = $value; 1 } 1680 on_changed => sub { my ($self, $value) = @_; $PROFILE->{user} = $value; 1 }
1641 ); 1681 );
1642 1682
1643 $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");
1644 $table->add_at (1, 5, new DC::UI::Entry 1684 $table->add_at (1, 5, new DC::UI::Entry
1645 text => $CFG->{profile}{default}{password}, 1685 text => $PROFILE->{password},
1646 hidden => 1, 1686 hidden => 1,
1647 tooltip => "The password for your character.", 1687 tooltip => "The password for your character.",
1648 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{password} = $value; 1 } 1688 on_changed => sub { my ($self, $value) = @_; $PROFILE->{password} = $value; 1 }
1649 ); 1689 );
1650 1690
1651 $table->add_at (1, 11, $LOGIN_BUTTON = new DC::UI::Button 1691 $table->add_at (1, 11, $LOGIN_BUTTON = new DC::UI::Button
1652 expand => 1, 1692 expand => 1,
1653 text => "Login / Register", 1693 text => "Login / Register",
1689 $table->add_at (1, $row, my $vbox = new DC::UI::VBox); 1729 $table->add_at (1, $row, my $vbox = new DC::UI::VBox);
1690 1730
1691 $vbox->add ( 1731 $vbox->add (
1692 $HOST_ENTRY = new DC::UI::Entry 1732 $HOST_ENTRY = new DC::UI::Entry
1693 expand => 1, 1733 expand => 1,
1694 text => $CFG->{profile}{default}{host}, 1734 text => $PROFILE->{host},
1695 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>)",
1696 on_changed => sub { 1736 on_changed => sub {
1697 my ($self, $value) = @_; 1737 my ($self, $value) = @_;
1698 $CFG->{profile}{default}{host} = $value; 1738 $PROFILE->{host} = $value;
1699 1 1739 1
1700 } 1740 }
1701 ); 1741 );
1702 1742
1703 if (0) { #d# disabled 1743 if (0) { #d# disabled
2559 2599
2560 $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]);
2561 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode}); 2601 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode});
2562 2602
2563 $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;
2564 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)") 2606 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)")
2565 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL; 2607 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL;
2566 2608
2567 $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]);
2568} 2610}
2701 fullscreen => 1, 2743 fullscreen => 1,
2702 fast => 0, 2744 fast => 0,
2703 force_opengl11 => undef, 2745 force_opengl11 => undef,
2704 disable_alpha => 0, 2746 disable_alpha => 0,
2705 smooth_movement => 1, 2747 smooth_movement => 1,
2748 smooth_transitions => 1,
2706 texture_compression => 1, 2749 texture_compression => 1,
2707 map_scale => 1, 2750 map_scale => 1,
2708 fow_enable => 1, 2751 fow_enable => 1,
2709 fow_intensity => 0, 2752 fow_intensity => 0,
2753 fow_texture => 0,
2710 map_smoothing => 1, 2754 map_smoothing => 1,
2711 gui_fontsize => 1, 2755 gui_fontsize => 1,
2712 log_fontsize => 0.7, 2756 log_fontsize => 0.7,
2713 gauge_fontsize => 1, 2757 gauge_fontsize => 1,
2714 gauge_size => 0.35, 2758 gauge_size => 0.35,
2732 shift_fire_stop => 0, 2776 shift_fire_stop => 0,
2733 uitheme => "wood", 2777 uitheme => "wood",
2734 map_shift_x => -24, # arbitrary 2778 map_shift_x => -24, # arbitrary
2735 map_shift_y => +24, # arbitrary 2779 map_shift_y => +24, # arbitrary
2736 ); 2780 );
2737 2781
2738 while (my ($k, $v) = each %DEF_CFG) { 2782 while (my ($k, $v) = each %DEF_CFG) {
2739 $CFG->{$k} = $v unless exists $CFG->{$k}; 2783 $CFG->{$k} = $v unless exists $CFG->{$k};
2740 } 2784 }
2741 2785
2742 $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] eq '-profile') {
2792 $profile = $args[$i + 1];
2793 splice @args, $i, 2, ();
2794 $i = 0;
2795 }
2796 }
2797
2798 $CFG->{profile}{$profile} ||= {};
2743 $PROFILE = $CFG->{profile}{default}; 2799 $PROFILE = $CFG->{profile}{$profile};
2800 $PROFILE->{host} ||= "gameserver.deliantra.net";
2801
2802 $PROFILE->{host} = $args[0] if @args > 0;
2803 $PROFILE->{user} = $args[1] if @args > 1;
2804 $PROFILE->{password} = $args[2] if @args > 2;
2744 2805
2745 # convert old bindings (only default profile matters) 2806 # convert old bindings (only default profile matters)
2746 if (my $bindings = delete $PROFILE->{bindings}) { 2807 if (my $bindings = delete $PROFILE->{bindings}) {
2747 while (my ($mod, $syms) = each %$bindings) { 2808 while (my ($mod, $syms) = each %$bindings) {
2748 while (my ($sym, $cmds) = each %$syms) { 2809 while (my ($sym, $cmds) = each %$syms) {
2771 DejaVuSansMono-BoldOblique.ttf 2832 DejaVuSansMono-BoldOblique.ttf
2772 mona.ttf 2833 mona.ttf
2773 ); 2834 );
2774 2835
2775 DC::add_font $_ for @fonts; 2836 DC::add_font $_ for @fonts;
2776 2837
2777 $FONT_PROP = new_from_file DC::Font $fonts[0]; 2838 $FONT_PROP = new_from_file DC::Font $fonts[0];
2778 $FONT_FIXED = new_from_file DC::Font $fonts[1]; 2839 $FONT_FIXED = new_from_file DC::Font $fonts[1];
2779 2840
2780 $FONT_PROP->make_default; 2841 $FONT_PROP->make_default;
2781 2842

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines