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.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.
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] eq '-profile') {
2792 $profile = $args[$i + 1];
2793 splice @args, $i, 2, ();
2794 $i = 0;
2795 }
2796 }
2797
2798 $CFG->{profile}{$profile} ||= {};
2747 $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;
2748 2805
2749 # convert old bindings (only default profile matters) 2806 # convert old bindings (only default profile matters)
2750 if (my $bindings = delete $PROFILE->{bindings}) { 2807 if (my $bindings = delete $PROFILE->{bindings}) {
2751 while (my ($mod, $syms) = each %$bindings) { 2808 while (my ($mod, $syms) = each %$bindings) {
2752 while (my ($sym, $cmds) = each %$syms) { 2809 while (my ($sym, $cmds) = each %$syms) {
2775 DejaVuSansMono-BoldOblique.ttf 2832 DejaVuSansMono-BoldOblique.ttf
2776 mona.ttf 2833 mona.ttf
2777 ); 2834 );
2778 2835
2779 DC::add_font $_ for @fonts; 2836 DC::add_font $_ for @fonts;
2780 2837
2781 $FONT_PROP = new_from_file DC::Font $fonts[0]; 2838 $FONT_PROP = new_from_file DC::Font $fonts[0];
2782 $FONT_FIXED = new_from_file DC::Font $fonts[1]; 2839 $FONT_FIXED = new_from_file DC::Font $fonts[1];
2783 2840
2784 $FONT_PROP->make_default; 2841 $FONT_PROP->make_default;
2785 2842

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines