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.110 by root, Mon Apr 12 02:03:33 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 {
134 DC::fatal Carp::longmess $@; 133 DC::fatal Carp::longmess $@;
135}; 134};
136 135
137my $MAX_FPS = 60; 136my $MAX_FPS = 60;
138 137
138our $DEFAULT_SERVER = "gameserver.deliantra.net";
139
139our $META_SERVER = "http://metaserver.schmorp.de/current.json"; 140our $META_SERVER = "http://metaserver.schmorp.de/current.json";
140 141
141our $LAST_REFRESH; 142our $LAST_REFRESH;
142our $NOW; 143our $NOW;
143 144
144our $CFG; 145our $CFG;
145our $PROFILE; # current profile 146our $PROFILE; # current profile
146our $FAST; # fast, low-quality mode, possibly useful for software-rendering 147our $FAST; # fast, low-quality mode, possibly useful for software-rendering
148our $DELIANTRA_DEBUG = $ENV{DELIANTRA_DEBUG} * 1;
147 149
148our $WANT_REFRESH; 150our $WANT_REFRESH;
149 151
150our $MODE_SLIDER; 152our $MODE_SLIDER;
151our $CAVEAT_LABEL; 153our $CAVEAT_LABEL;
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 = [];
800 user => $PROFILE->{user}, 807 user => $PROFILE->{user},
801 pass => $PROFILE->{password}, 808 pass => $PROFILE->{password},
802 mapw => $mapw, 809 mapw => $mapw,
803 maph => $maph, 810 maph => $maph,
804 811
812 c_version => {
813 client => "deliantra",
805 client => "$DC::VERSION $] $^O", 814 clientver => $DC::VERSION,
815 gl_vendor => DC::OpenGL::gl_vendor,
816 gl_version => DC::OpenGL::gl_version,
817 },
806 818
807 map_widget => $MAPWIDGET, 819 map_widget => $MAPWIDGET,
808 statusbox => $STATUSBOX, 820 statusbox => $STATUSBOX,
809 map => $MAP, 821 map => $MAP,
810 mapmap => $MAPMAP, 822 mapmap => $MAPMAP,
828 ; 840 ;
829} 841}
830 842
831sub start_game { 843sub start_game {
832 status "logging in..."; 844 status "logging in...";
845
846 my $server = $PROFILE->{host} || $DEFAULT_SERVER;
847 my ($host, $port) = AnyEvent::Socket::parse_hostport $server, "deliantra=13327"
848 or return status "$server: unable to parse server address, try an empty field.";
833 849
834 $LOGIN_BUTTON->set_text ("Logout"); 850 $LOGIN_BUTTON->set_text ("Logout");
835 $SETUP_DIALOG->hide; 851 $SETUP_DIALOG->hide;
836
837 my ($host, $port) = AnyEvent::Socket::parse_hostport $PROFILE->{host}, "deliantra=13327";
838 852
839 $MAP = new DC::Map; 853 $MAP = new DC::Map;
840 854
841 # hack to make SURE we find the IP address all right 855 # hack to make SURE we find the IP address all right
842 # can be removed once AnyEvent::DNS is proven stable. 856 # can be removed once AnyEvent::DNS is proven stable.
843 if ($host eq "gameserver.deliantra.net") { 857 if ($host eq "gameserver.deliantra.net") {
844 AnyEvent::DNS::a "dnstest.deliantra.net", sub { 858 AnyEvent::DNS::a "dnstest.deliantra.net", sub {
845 if ($_[0] ne "80.101.114.108") { # Perl 859 if ($_[0] ne "80.101.114.108") { # Perl
860 status "dns failure, trying differently";
861 $host = eval { Socket::inet_ntoa Socket::inet_aton "gameserver.deliantra.net" };
862 unless (defined $host) {
846 status "dns failure, using hardcoded address"; 863 status "dns failure, using hardcoded address";
847 $host = "129.13.162.95"; 864 $host = "129.13.162.95";
865 }
848 } 866 }
849 867
850 dc_connect $host, $port; 868 dc_connect $host, $port;
851 }; 869 };
852 } else { 870 } else {
1021 . "If you have a very slow system, non-accelerated drivers or plain dislike smooth scrolling, " 1039 . "If you have a very slow system, non-accelerated drivers or plain dislike smooth scrolling, "
1022 . "then disable this option. Changes take effect immdiately.", 1040 . "then disable this option. Changes take effect immdiately.",
1023 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 } 1041 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 }
1024 ); 1042 );
1025 1043
1044 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Smooth Transitions");
1045 $table->add_at (1, $row++, new DC::UI::CheckBox
1046 state => $CFG->{smooth_transitions},
1047 tooltip => "<b>Smooth Transitions</b> tries to blend the fog of war and lighting smoothly between updates. "
1048 . "If you have a very slow system, non-accelerated drivers or plain dislike smooth scrolling, "
1049 . "then disable this option. Requires Smooth Movement and OpenGL Multitexturing. Changes take effect immdiately.",
1050 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_transitions} = $value; 0 }
1051 );
1052
1053
1026 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Map Scale"); 1054 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Map Scale");
1027 $table->add_at (1, $row++, new DC::UI::Slider 1055 $table->add_at (1, $row++, new DC::UI::Slider
1028 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1], 1056 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1],
1029 tooltip => "Enlarge or shrink the displayed map. Changes are instant.", 1057 tooltip => "Enlarge or shrink the displayed map. Changes are instant.",
1030 on_changed => sub { my ($self, $value) = @_; $CFG->{map_scale} = 2 ** $value; 0 } 1058 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"); 1070 $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 1071 $table->add_at (1, $row++, new DC::UI::CheckBox
1044 state => $CFG->{fow_enable}, 1072 state => $CFG->{fow_enable},
1045 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.", 1073 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 } 1074 on_changed => sub { my ($self, $value) = @_; $CFG->{fow_enable} = $value; 0 }
1075 );
1076
1077 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "FoW Pattern");
1078 $table->add_at (1, $row++, new DC::UI::ImageButton
1079 tex => $DC::MapWidget::TEX_HIDDEN[$CFG->{fow_texture}],
1080 bg => [0.3, 0.3, 0.2],
1081 force_w => 64,
1082 force_h => 64,
1083 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.",
1084 on_activate => sub {
1085 my ($self) = @_;
1086 $CFG->{fow_texture} = ($CFG->{fow_texture} + 1) % @DC::MapWidget::TEX_HIDDEN;
1087 $self->set_texture ($DC::MapWidget::TEX_HIDDEN[$CFG->{fow_texture}]);
1088 $MAPWIDGET->update;
1089 }
1047 ); 1090 );
1048 1091
1049 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "FoW Intensity"); 1092 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "FoW Intensity");
1050 $table->add_at (1, $row++, new DC::UI::Slider 1093 $table->add_at (1, $row++, new DC::UI::Slider
1051 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256], 1094 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256],
1103 1146
1104 my $text = !$freq 1147 my $text = !$freq
1105 ? "audio is off" 1148 ? "audio is off"
1106 : "audio is enabled\n" 1149 : "audio is enabled\n"
1107 . "frequency (Hz): $freq\n" 1150 . "frequency (Hz): $freq\n"
1108 . "channels: $chans"; 1151 . "channels: $chans\n"
1152 . "chunk decoders available: " . (join ", ", DC::MixChunk::decoders) . "\n"
1153 . "music decoders available: " . (join ", ", DC::MixMusic::decoders);
1109 1154
1110 $AUDIO_INFO->set_text ($text); 1155 $AUDIO_INFO->set_text ($text);
1111} 1156}
1112 1157
1113sub audio_setup { 1158sub audio_setup {
1142 ); 1187 );
1143 1188
1144 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Background Music"); 1189 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Background Music");
1145 $table->add_at (1, $row, new DC::UI::CheckBox 1190 $table->add_at (1, $row, new DC::UI::CheckBox
1146 expand => 1, state => $CFG->{bgm_enable}, 1191 expand => 1, state => $CFG->{bgm_enable},
1147 tooltip => "If enabled, playing of background music is enabled. If disabled, no background music will be played.", 1192 tooltip => "If enabled, playing of background music is enabled. If disabled, no background music will be played. Needs server reconnect to take effect.",
1148 on_changed => sub { 1193 on_changed => sub {
1149 $CFG->{bgm_enable} = $_[1]; 1194 $CFG->{bgm_enable} = $_[1];
1150 $CONN->update_fx_want if $CONN; 1195 $CONN->update_fx_want if $CONN;
1151 audio_music_push; 1196 audio_music_push;
1152 1 1197 1
1289 &set_gauge_window_fontsize; 1334 &set_gauge_window_fontsize;
1290 1335
1291 $win 1336 $win
1292} 1337}
1293 1338
1339our $BW_WATCHER;
1340
1341sub debug_toggle($) {
1342 $DELIANTRA_DEBUG ^= $_[0];
1343
1344 if ($DELIANTRA_DEBUG & 16) {
1345 $BW_WATCHER = EV::periodic 0, 1, 0, sub {
1346 return unless $CONN;
1347 debug sprintf "%.2gKB/s", $CONN->{octets_in} / 1e3;
1348 $CONN->{octets_in} = 0;
1349 };
1350 } else {
1351 undef $BW_WATCHER;
1352 }
1353
1354}
1355
1294sub debug_setup { 1356sub debug_setup {
1295 my $table = new DC::UI::Table; 1357 my $table = new DC::UI::Table;
1296 1358
1297 $table->add_at (0, 0, new DC::UI::Label text => "Widget Borders"); 1359 $table->add_at (0, 0, new DC::UI::Label text => "Widget Borders");
1298 $table->add_at (1, 0, new DC::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 1; 0 }); 1360 $table->add_at (1, 0, new DC::UI::CheckBox on_changed => sub { debug_toggle 1; 0 });
1299 $table->add_at (0, 1, new DC::UI::Label text => "Tooltip Widget Info"); 1361 $table->add_at (0, 1, new DC::UI::Label text => "Tooltip Widget Info");
1300 $table->add_at (1, 1, new DC::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 2; 0 }); 1362 $table->add_at (1, 1, new DC::UI::CheckBox on_changed => sub { debug_toggle 2; 0 });
1301 $table->add_at (0, 2, new DC::UI::Label text => "Show FPS"); 1363 $table->add_at (0, 2, new DC::UI::Label text => "Show FPS");
1302 $table->add_at (1, 2, new DC::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 4; 0 }); 1364 $table->add_at (1, 2, new DC::UI::CheckBox on_changed => sub { debug_toggle 4; 0 });
1303 $table->add_at (0, 3, new DC::UI::Label text => "Suppress Tooltips"); 1365 $table->add_at (0, 3, new DC::UI::Label text => "Suppress Tooltips");
1304 $table->add_at (1, 3, new DC::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 8; 0 }); 1366 $table->add_at (1, 3, new DC::UI::CheckBox on_changed => sub { debug_toggle 8; 0 });
1367 $table->add_at (0, 4, new DC::UI::Label text => "Show Bandwidth");
1368 $table->add_at (1, 4, new DC::UI::CheckBox on_changed => sub { debug_toggle 16; 0 });
1369
1305 $table->add_at (0, 4, new DC::UI::Button text => "die on click(tm)", on_activate => sub { &DC::debug() } ); 1370 $table->add_at (0, 6, new DC::UI::Button text => "die on click(tm)", on_activate => sub { &DC::debug() } );
1306
1307 $table->add_at (0, 5, new DC::UI::TextEdit text => "line1\0152\0153\nµikachu\nづx゙つ゛");#d# 1371 $table->add_at (0, 7, new DC::UI::TextEdit text => "line1\0152\0153\nµikachu\nづx゙つ゛");#d#
1308 1372
1309 $table->add_at (7,7, my $t = new DC::UI::Table expand => 0); 1373 $table->add_at (7,7, my $t = new DC::UI::Table expand => 0);
1310 $t->add_at (0,0, new DC::UI::Label text => "a a", c_rowspan => 1, c_colspan => 2); 1374 $t->add_at (0,0, new DC::UI::Label text => "a a", c_rowspan => 1, c_colspan => 2);
1311 $t->add_at (2,0, new DC::UI::Label text => "b\nb", c_rowspan => 2, c_colspan => 1, ellipsise => 0 ); 1375 $t->add_at (2,0, new DC::UI::Label text => "b\nb", c_rowspan => 2, c_colspan => 1, ellipsise => 0 );
1312 $t->add_at (1,2, new DC::UI::Label text => "c c", c_rowspan => 1, c_colspan => 2); 1376 $t->add_at (1,2, new DC::UI::Label text => "c c", c_rowspan => 1, c_colspan => 2);
1633 child => (my $table = new DC::UI::Table expand => 1, col_expand => [0, 1]), 1697 child => (my $table = new DC::UI::Table expand => 1, col_expand => [0, 1]),
1634 ); 1698 );
1635 1699
1636 $table->add_at (0, 4, new DC::UI::Label align => 1, text => "Username"); 1700 $table->add_at (0, 4, new DC::UI::Label align => 1, text => "Username");
1637 $table->add_at (1, 4, new DC::UI::Entry 1701 $table->add_at (1, 4, new DC::UI::Entry
1638 text => $CFG->{profile}{default}{user}, 1702 text => $PROFILE->{user},
1639 tooltip => "The name of your character on the server. The name is case-sensitive!", 1703 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 } 1704 on_changed => sub { my ($self, $value) = @_; $PROFILE->{user} = $value; 1 }
1641 ); 1705 );
1642 1706
1643 $table->add_at (0, 5, new DC::UI::Label align => 1, text => "Password"); 1707 $table->add_at (0, 5, new DC::UI::Label align => 1, text => "Password");
1644 $table->add_at (1, 5, new DC::UI::Entry 1708 $table->add_at (1, 5, new DC::UI::Entry
1645 text => $CFG->{profile}{default}{password}, 1709 text => $PROFILE->{password},
1646 hidden => 1, 1710 hidden => 1,
1647 tooltip => "The password for your character.", 1711 tooltip => "The password for your character.",
1648 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{password} = $value; 1 } 1712 on_changed => sub { my ($self, $value) = @_; $PROFILE->{password} = $value; 1 }
1649 ); 1713 );
1650 1714
1651 $table->add_at (1, 11, $LOGIN_BUTTON = new DC::UI::Button 1715 $table->add_at (1, 11, $LOGIN_BUTTON = new DC::UI::Button
1652 expand => 1, 1716 expand => 1,
1653 text => "Login / Register", 1717 text => "Login / Register",
1689 $table->add_at (1, $row, my $vbox = new DC::UI::VBox); 1753 $table->add_at (1, $row, my $vbox = new DC::UI::VBox);
1690 1754
1691 $vbox->add ( 1755 $vbox->add (
1692 $HOST_ENTRY = new DC::UI::Entry 1756 $HOST_ENTRY = new DC::UI::Entry
1693 expand => 1, 1757 expand => 1,
1694 text => $CFG->{profile}{default}{host}, 1758 text => $PROFILE->{host},
1695 tooltip => "The hostname or ip address of the Deliantra server to connect to (e.g. <b>gameserver.deliantra.net</b>)", 1759 tooltip => "The hostname or ip address of the Deliantra server to connect to (e.g. <b>gameserver.deliantra.net</b>)",
1696 on_changed => sub { 1760 on_changed => sub {
1697 my ($self, $value) = @_; 1761 my ($self, $value) = @_;
1698 $CFG->{profile}{default}{host} = $value; 1762 $PROFILE->{host} = $value;
1699 1 1763 1
1700 } 1764 }
1701 ); 1765 );
1702 1766
1703 if (0) { #d# disabled 1767 if (0) { #d# disabled
1902 $r 1966 $r
1903} 1967}
1904 1968
1905my %SORT_ORDER = ( 1969my %SORT_ORDER = (
1906 type => sub { 1970 type => sub {
1971 use sort 'stable';
1907 sort { $a->{type} <=> $b->{type} or $a->{name} cmp $b->{name} } @_ 1972 sort { $a->{type} <=> $b->{type} or $a->{name} cmp $b->{name} } @_
1908 }, 1973 },
1909 mtime => sub { 1974 mtime => sub {
1975 use sort 'stable';
1910 my $NOW = time; 1976 my $NOW = time;
1911 sort { 1977 sort {
1912 my $atime = $a->{mtime} - $NOW; $atime = $atime < 5 * 60 ? int $atime / 60 : 6; 1978 my $atime = $a->{mtime} - $NOW; $atime = $atime < 5 * 60 ? int $atime / 60 : 6;
1913 my $btime = $b->{mtime} - $NOW; $btime = $btime < 5 * 60 ? int $btime / 60 : 6; 1979 my $btime = $b->{mtime} - $NOW; $btime = $btime < 5 * 60 ? int $btime / 60 : 6;
1914 1980
1915 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED) 1981 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED)
1916 or $btime <=> $atime 1982 or $btime <=> $atime
1917 or $a->{type} <=> $b->{type} 1983 or $a->{type} <=> $b->{type}
1918 } @_ 1984 } @_
1919 }, 1985 },
1920 weight => sub { sort { 1986 weight => sub {
1987 use sort 'stable';
1988 sort {
1921 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1) 1989 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1)
1922 or $a->{type} <=> $b->{type} 1990 or $a->{type} <=> $b->{type}
1923 } @_ }, 1991 } @_
1992 },
1924); 1993);
1925 1994
1926sub inventory_widget { 1995sub inventory_widget {
1927 my $hb = new DC::UI::HBox homogeneous => 1; 1996 my $hb = new DC::UI::HBox homogeneous => 1;
1928 1997
2442 2511
2443 $DEBUG_STATUS = new DC::UI::Label 2512 $DEBUG_STATUS = new DC::UI::Label
2444 padding => 0, 2513 padding => 0,
2445 z => 100, 2514 z => 100,
2446 force_x => "max", 2515 force_x => "max",
2447 force_y => 0; 2516 force_y => 20;
2448 $DEBUG_STATUS->show; 2517 $DEBUG_STATUS->show;
2449 2518
2450 $STATUSBOX = new DC::UI::Statusbox; 2519 $STATUSBOX = new DC::UI::Statusbox;
2451 2520
2452 $MODBOX = new DC::UI::Label 2521 $MODBOX = new DC::UI::Label
2559 2628
2560 $MODE_SLIDER->set_range ([$CFG->{sdl_mode}, 0, scalar @SDL_MODES, 1, 1]); 2629 $MODE_SLIDER->set_range ([$CFG->{sdl_mode}, 0, scalar @SDL_MODES, 1, 1]);
2561 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode}); 2630 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode});
2562 2631
2563 $CAVEAT_LABEL->set_text ("None :)"); 2632 $CAVEAT_LABEL->set_text ("None :)");
2633 $CAVEAT_LABEL->set_text ("Apple/NVIDIA Texture bug (slow)")
2634 if $DC::OpenGL::APPLE_NVIDIA_BUG;
2564 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)") 2635 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)")
2565 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL; 2636 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL;
2566 2637
2567 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 2638 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
2568} 2639}
2578my $animate_timer; 2649my $animate_timer;
2579 2650
2580my $fps = 9; 2651my $fps = 9;
2581 2652
2582sub force_refresh { 2653sub force_refresh {
2583 if ($ENV{CFPLUS_DEBUG} & 4) { 2654 if ($DELIANTRA_DEBUG & 4) {
2584 $fps = $fps * 0.98 + 1 / (($NOW - $LAST_REFRESH) || 0.1) * 0.02; 2655 $fps = $fps * 0.98 + 1 / (($NOW - $LAST_REFRESH) || 0.1) * 0.02;
2585 debug sprintf "%3.2f", $fps; 2656 debug sprintf "%3.2f", $fps;
2586 } 2657 }
2587 2658
2588 undef $WANT_REFRESH; 2659 undef $WANT_REFRESH;
2701 fullscreen => 1, 2772 fullscreen => 1,
2702 fast => 0, 2773 fast => 0,
2703 force_opengl11 => undef, 2774 force_opengl11 => undef,
2704 disable_alpha => 0, 2775 disable_alpha => 0,
2705 smooth_movement => 1, 2776 smooth_movement => 1,
2777 smooth_transitions => 1,
2706 texture_compression => 1, 2778 texture_compression => 1,
2707 map_scale => 1, 2779 map_scale => 1,
2708 fow_enable => 1, 2780 fow_enable => 1,
2709 fow_intensity => 0, 2781 fow_intensity => 0,
2782 fow_texture => 0,
2710 map_smoothing => 1, 2783 map_smoothing => 1,
2711 gui_fontsize => 1, 2784 gui_fontsize => 1,
2712 log_fontsize => 0.7, 2785 log_fontsize => 0.7,
2713 gauge_fontsize => 1, 2786 gauge_fontsize => 1,
2714 gauge_size => 0.35, 2787 gauge_size => 0.35,
2732 shift_fire_stop => 0, 2805 shift_fire_stop => 0,
2733 uitheme => "wood", 2806 uitheme => "wood",
2734 map_shift_x => -24, # arbitrary 2807 map_shift_x => -24, # arbitrary
2735 map_shift_y => +24, # arbitrary 2808 map_shift_y => +24, # arbitrary
2736 ); 2809 );
2737 2810
2738 while (my ($k, $v) = each %DEF_CFG) { 2811 while (my ($k, $v) = each %DEF_CFG) {
2739 $CFG->{$k} = $v unless exists $CFG->{$k}; 2812 $CFG->{$k} = $v unless exists $CFG->{$k};
2740 } 2813 }
2741 2814
2742 $CFG->{profile}{default}{host} ||= "gameserver.deliantra.net"; 2815 my @args = @ARGV;
2816
2817 my $profile = 'default';
2818
2819 for (my $i = 0; $i < @args; $i++) {
2820 if ($args[$i] =~ /^--?profile$/) {
2821 $profile = $args[$i + 1];
2822 splice @args, $i, 2, ();
2823 $i = 0;
2824 } elsif ($args[$i] =~ /^--?h/) {
2825 print STDERR "Usage: $0 [--profile name] [host [user [password]]]\n";
2826 exit 0;
2827 }
2828 }
2829
2830 $CFG->{profile}{$profile} ||= {};
2743 $PROFILE = $CFG->{profile}{default}; 2831 $PROFILE = $CFG->{profile}{$profile};
2832 $PROFILE->{host} ||= "gameserver.deliantra.net";
2833
2834 $PROFILE->{host} = $args[0] if @args > 0;
2835 $PROFILE->{user} = $args[1] if @args > 1;
2836 $PROFILE->{password} = $args[2] if @args > 2;
2744 2837
2745 # convert old bindings (only default profile matters) 2838 # convert old bindings (only default profile matters)
2746 if (my $bindings = delete $PROFILE->{bindings}) { 2839 if (my $bindings = delete $PROFILE->{bindings}) {
2747 while (my ($mod, $syms) = each %$bindings) { 2840 while (my ($mod, $syms) = each %$bindings) {
2748 while (my ($sym, $cmds) = each %$syms) { 2841 while (my ($sym, $cmds) = each %$syms) {
2771 DejaVuSansMono-BoldOblique.ttf 2864 DejaVuSansMono-BoldOblique.ttf
2772 mona.ttf 2865 mona.ttf
2773 ); 2866 );
2774 2867
2775 DC::add_font $_ for @fonts; 2868 DC::add_font $_ for @fonts;
2776 2869
2777 $FONT_PROP = new_from_file DC::Font $fonts[0]; 2870 $FONT_PROP = new_from_file DC::Font $fonts[0];
2778 $FONT_FIXED = new_from_file DC::Font $fonts[1]; 2871 $FONT_FIXED = new_from_file DC::Font $fonts[1];
2779 2872
2780 $FONT_PROP->make_default; 2873 $FONT_PROP->make_default;
2781 2874
2804 our $STARTUP_CANCEL = EV::idle sub { 2897 our $STARTUP_CANCEL = EV::idle sub {
2805 undef $::STARTUP_CANCEL; 2898 undef $::STARTUP_CANCEL;
2806 $startup_done->(); 2899 $startup_done->();
2807 }; 2900 };
2808 2901
2902 debug_toggle 0;
2903
2809 delete $SIG{__DIE__}; 2904 delete $SIG{__DIE__};
2810 EV::loop; 2905 EV::loop;
2811 2906
2812 DC::write_cfg if $CFG->{config_autosave}; 2907 DC::write_cfg if $CFG->{config_autosave};
2813 2908
2825 2920
2826deliantra - A Deliantra MORPG game client 2921deliantra - A Deliantra MORPG game client
2827 2922
2828=head1 SYNOPSIS 2923=head1 SYNOPSIS
2829 2924
2830Just run it - no commandline arguments are supported. 2925 deliantra [--profile name] [host [user [password]]]
2926 deliantra --help
2831 2927
2832=head1 USAGE 2928=head1 USAGE
2833 2929
2834deliantra utilises OpenGL for all UI elements and the game. It is supposed to 2930The deliantra client utilises OpenGL for all UI elements and the game. It
2835be used in fullscreen mode and interactively. 2931is supposed to be used in fullscreen mode and interactively.
2836 2932
2837=head1 DEBUGGING 2933=head1 DEBUGGING
2838 2934
2839
2840CFPLUS_DEBUG - environment variable 2935DELIANTRA_DEBUG - environment variable
2841 2936
2842 1 draw borders around widgets 2937 1 draw borders around widgets
2843 2 add low-level widget info to tooltips 2938 2 add low-level widget info to tooltips
2844 4 show fps 2939 4 show fps
2845 8 suppress tooltips 2940 8 suppress tooltips
2941 16 show bandwidth downstream
2846 2942
2847=head1 AUTHOR 2943=head1 AUTHOR
2848 2944
2849Marc Lehmann <deliantra@schmorp.de>, Robin Redeker <elmex@ta-sa.org> 2945Marc Lehmann <deliantra@schmorp.de>, Robin Redeker <elmex@ta-sa.org>
2850 2946

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines