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.93 by root, Fri Jan 23 06:39:41 2009 UTC vs.
Revision 1.113 by root, Thu Apr 22 11:26:51 2010 UTC

17 $zip->extractMember ("SPLASH.bmp", "$ENV{PAR_TEMP}/SPLASH.bmp"); 17 $zip->extractMember ("SPLASH.bmp", "$ENV{PAR_TEMP}/SPLASH.bmp");
18 } 18 }
19 19
20 require Win32::GUI::SplashScreen; 20 require Win32::GUI::SplashScreen;
21 21
22 Win32::GUI::SplashScreen::Show (
23 -file => "$ENV{PAR_TEMP}/SPLASH.bmp",
24 );
25
22 # initialise the resolver now, as vista forces us back to the desktop 26 # initialise the resolver now, as vista forces us back to the desktop
23 # when doing this. 27 # when doing this later.
24 use AnyEvent::DNS (); 28 use AnyEvent::DNS ();
25 AnyEvent::DNS::resolver; 29 AnyEvent::DNS::resolver;
26
27 Win32::GUI::SplashScreen::Show (
28 -file => "$ENV{PAR_TEMP}/SPLASH.bmp",
29 );
30 30
31 $startup_done = sub { 31 $startup_done = sub {
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;
136 DC::fatal Carp::longmess $@; 133 DC::fatal Carp::longmess $@;
137}; 134};
138 135
139my $MAX_FPS = 60; 136my $MAX_FPS = 60;
140 137
138our $DEFAULT_SERVER = "gameserver.deliantra.net";
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;
145 144
146our $CFG; 145our $CFG;
147our $PROFILE; # current profile 146our $PROFILE; # current profile
148our $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;
149 149
150our $WANT_REFRESH; 150our $WANT_REFRESH;
151 151
152our $MODE_SLIDER; 152our $MODE_SLIDER;
153our $CAVEAT_LABEL; 153our $CAVEAT_LABEL;
541 sub audio_tab_update; 541 sub audio_tab_update;
542 audio_tab_update; 542 audio_tab_update;
543} 543}
544 544
545sub audio_shutdown { 545sub audio_shutdown {
546 if ($SDL_MIXER) {
547 DC::MixMusic::halt;
548 DC::Mix_AllocateChannels 0;
549 }
550
546 undef $MUSIC_PLAYER; 551 undef $MUSIC_PLAYER;
547 undef $MUSIC_PLAYING_META; 552 undef $MUSIC_PLAYING_META;
548 undef $MUSIC_PLAYING_DATA; 553 undef $MUSIC_PLAYING_DATA;
549 554
550 $MUSIC_WANT = []; 555 $MUSIC_WANT = [];
802 user => $PROFILE->{user}, 807 user => $PROFILE->{user},
803 pass => $PROFILE->{password}, 808 pass => $PROFILE->{password},
804 mapw => $mapw, 809 mapw => $mapw,
805 maph => $maph, 810 maph => $maph,
806 811
812 c_version => {
813 client => "deliantra",
807 client => "$DC::VERSION $] $^O", 814 clientver => $DC::VERSION,
815 gl_vendor => DC::OpenGL::gl_vendor,
816 gl_version => DC::OpenGL::gl_version,
817 },
808 818
809 map_widget => $MAPWIDGET, 819 map_widget => $MAPWIDGET,
810 statusbox => $STATUSBOX, 820 statusbox => $STATUSBOX,
811 map => $MAP, 821 map => $MAP,
812 mapmap => $MAPMAP, 822 mapmap => $MAPMAP,
830 ; 840 ;
831} 841}
832 842
833sub start_game { 843sub start_game {
834 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.";
835 849
836 $LOGIN_BUTTON->set_text ("Logout"); 850 $LOGIN_BUTTON->set_text ("Logout");
837 $SETUP_DIALOG->hide; 851 $SETUP_DIALOG->hide;
838
839 my ($host, $port) = AnyEvent::Socket::parse_hostport $PROFILE->{host}, "deliantra=13327";
840 852
841 $MAP = new DC::Map; 853 $MAP = new DC::Map;
842 854
843 # hack to make SURE we find the IP address all right 855 # hack to make SURE we find the IP address all right
844 # can be removed once AnyEvent::DNS is proven stable. 856 # can be removed once AnyEvent::DNS is proven stable.
845 if ($host eq "gameserver.deliantra.net") { 857 if ($host eq "gameserver.deliantra.net") {
846 AnyEvent::DNS::a "dnstest.deliantra.net", sub { 858 AnyEvent::DNS::a "dnstest.deliantra.net", sub {
847 if ($_[0] ne "80.101.114.108") { # Perl 859 if ($_[0] ne "80.101.114.108") { # P-e-r-l
860 status "dns failure, trying differently";
861 $host = eval { Socket::inet_ntoa Socket::inet_aton "gameserver.deliantra.net" };
862 unless (defined $host) {
848 status "dns failure, using hardcoded address"; 863 status "dns failure, using hardcoded address";
849 $host = "129.13.162.95"; 864 $host = "194.126.175.154";
865 }
850 } 866 }
851 867
852 dc_connect $host, $port; 868 dc_connect $host, $port;
853 }; 869 };
854 } else { 870 } else {
1023 . "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, "
1024 . "then disable this option. Changes take effect immdiately.", 1040 . "then disable this option. Changes take effect immdiately.",
1025 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 } 1041 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 }
1026 ); 1042 );
1027 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
1028 $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");
1029 $table->add_at (1, $row++, new DC::UI::Slider 1055 $table->add_at (1, $row++, new DC::UI::Slider
1030 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1], 1056 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1],
1031 tooltip => "Enlarge or shrink the displayed map. Changes are instant.", 1057 tooltip => "Enlarge or shrink the displayed map. Changes are instant.",
1032 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 }
1044 $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");
1045 $table->add_at (1, $row++, new DC::UI::CheckBox 1071 $table->add_at (1, $row++, new DC::UI::CheckBox
1046 state => $CFG->{fow_enable}, 1072 state => $CFG->{fow_enable},
1047 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.",
1048 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 }
1049 ); 1090 );
1050 1091
1051 $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");
1052 $table->add_at (1, $row++, new DC::UI::Slider 1093 $table->add_at (1, $row++, new DC::UI::Slider
1053 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256], 1094 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256],
1104 ]); 1145 ]);
1105 1146
1106 my $text = !$freq 1147 my $text = !$freq
1107 ? "audio is off" 1148 ? "audio is off"
1108 : "audio is enabled\n" 1149 : "audio is enabled\n"
1150 . "driver: " . DC::SDL_AudioDriverName . "\n"
1109 . "frequency (Hz): $freq\n" 1151 . "frequency (Hz): $freq\n"
1110 . "channels: $chans"; 1152 . "channels: $chans\n"
1153 . "chunk decoders available: " . (join ", ", DC::MixChunk::decoders) . "\n"
1154 . "music decoders available: " . (join ", ", DC::MixMusic::decoders);
1111 1155
1112 $AUDIO_INFO->set_text ($text); 1156 $AUDIO_INFO->set_text ($text);
1113} 1157}
1114 1158
1115sub audio_setup { 1159sub audio_setup {
1144 ); 1188 );
1145 1189
1146 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Background Music"); 1190 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Background Music");
1147 $table->add_at (1, $row, new DC::UI::CheckBox 1191 $table->add_at (1, $row, new DC::UI::CheckBox
1148 expand => 1, state => $CFG->{bgm_enable}, 1192 expand => 1, state => $CFG->{bgm_enable},
1149 tooltip => "If enabled, playing of background music is enabled. If disabled, no background music will be played.", 1193 tooltip => "If enabled, playing of background music is enabled. If disabled, no background music will be played. Needs server reconnect to take effect.",
1150 on_changed => sub { 1194 on_changed => sub {
1151 $CFG->{bgm_enable} = $_[1]; 1195 $CFG->{bgm_enable} = $_[1];
1152 $CONN->update_fx_want if $CONN; 1196 $CONN->update_fx_want if $CONN;
1153 audio_music_push; 1197 audio_music_push;
1154 1 1198 1
1291 &set_gauge_window_fontsize; 1335 &set_gauge_window_fontsize;
1292 1336
1293 $win 1337 $win
1294} 1338}
1295 1339
1340our $BW_WATCHER;
1341
1342sub debug_toggle($) {
1343 $DELIANTRA_DEBUG ^= $_[0];
1344
1345 if ($DELIANTRA_DEBUG & 16) {
1346 $BW_WATCHER = EV::periodic 0, 1, 0, sub {
1347 return unless $CONN;
1348 debug sprintf "%8.2gKB/s", $CONN->{octets_in} / 1e3;
1349 $CONN->{octets_in} = 0;
1350 };
1351 } else {
1352 undef $BW_WATCHER;
1353 }
1354
1355}
1356
1296sub debug_setup { 1357sub debug_setup {
1297 my $table = new DC::UI::Table; 1358 my $table = new DC::UI::Table;
1298 1359
1299 $table->add_at (0, 0, new DC::UI::Label text => "Widget Borders"); 1360 $table->add_at (0, 0, new DC::UI::Label text => "Widget Borders");
1300 $table->add_at (1, 0, new DC::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 1; 0 }); 1361 $table->add_at (1, 0, new DC::UI::CheckBox on_changed => sub { debug_toggle 1; 0 });
1301 $table->add_at (0, 1, new DC::UI::Label text => "Tooltip Widget Info"); 1362 $table->add_at (0, 1, new DC::UI::Label text => "Tooltip Widget Info");
1302 $table->add_at (1, 1, new DC::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 2; 0 }); 1363 $table->add_at (1, 1, new DC::UI::CheckBox on_changed => sub { debug_toggle 2; 0 });
1303 $table->add_at (0, 2, new DC::UI::Label text => "Show FPS"); 1364 $table->add_at (0, 2, new DC::UI::Label text => "Show FPS");
1304 $table->add_at (1, 2, new DC::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 4; 0 }); 1365 $table->add_at (1, 2, new DC::UI::CheckBox on_changed => sub { debug_toggle 4; 0 });
1305 $table->add_at (0, 3, new DC::UI::Label text => "Suppress Tooltips"); 1366 $table->add_at (0, 3, new DC::UI::Label text => "Suppress Tooltips");
1306 $table->add_at (1, 3, new DC::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 8; 0 }); 1367 $table->add_at (1, 3, new DC::UI::CheckBox on_changed => sub { debug_toggle 8; 0 });
1368 $table->add_at (0, 4, new DC::UI::Label text => "Show Bandwidth");
1369 $table->add_at (1, 4, new DC::UI::CheckBox on_changed => sub { debug_toggle 16; 0 });
1370
1307 $table->add_at (0, 4, new DC::UI::Button text => "die on click(tm)", on_activate => sub { &DC::debug() } ); 1371 $table->add_at (0, 6, new DC::UI::Button text => "die on click(tm)", on_activate => sub { &DC::debug() } );
1308
1309 $table->add_at (0, 5, new DC::UI::TextEdit text => "line1\0152\0153\nµikachu\nづx゙つ゛");#d# 1372 $table->add_at (0, 7, new DC::UI::TextEdit text => "line1\0152\0153\nµikachu\nづx゙つ゛");#d#
1310 1373
1311 $table->add_at (7,7, my $t = new DC::UI::Table expand => 0); 1374 $table->add_at (7,7, my $t = new DC::UI::Table expand => 0);
1312 $t->add_at (0,0, new DC::UI::Label text => "a a", c_rowspan => 1, c_colspan => 2); 1375 $t->add_at (0,0, new DC::UI::Label text => "a a", c_rowspan => 1, c_colspan => 2);
1313 $t->add_at (2,0, new DC::UI::Label text => "b\nb", c_rowspan => 2, c_colspan => 1, ellipsise => 0 ); 1376 $t->add_at (2,0, new DC::UI::Label text => "b\nb", c_rowspan => 2, c_colspan => 1, ellipsise => 0 );
1314 $t->add_at (1,2, new DC::UI::Label text => "c c", c_rowspan => 1, c_colspan => 2); 1377 $t->add_at (1,2, new DC::UI::Label text => "c c", c_rowspan => 1, c_colspan => 2);
1635 child => (my $table = new DC::UI::Table expand => 1, col_expand => [0, 1]), 1698 child => (my $table = new DC::UI::Table expand => 1, col_expand => [0, 1]),
1636 ); 1699 );
1637 1700
1638 $table->add_at (0, 4, new DC::UI::Label align => 1, text => "Username"); 1701 $table->add_at (0, 4, new DC::UI::Label align => 1, text => "Username");
1639 $table->add_at (1, 4, new DC::UI::Entry 1702 $table->add_at (1, 4, new DC::UI::Entry
1640 text => $CFG->{profile}{default}{user}, 1703 text => $PROFILE->{user},
1641 tooltip => "The name of your character on the server. The name is case-sensitive!", 1704 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 } 1705 on_changed => sub { my ($self, $value) = @_; $PROFILE->{user} = $value; 1 }
1643 ); 1706 );
1644 1707
1645 $table->add_at (0, 5, new DC::UI::Label align => 1, text => "Password"); 1708 $table->add_at (0, 5, new DC::UI::Label align => 1, text => "Password");
1646 $table->add_at (1, 5, new DC::UI::Entry 1709 $table->add_at (1, 5, new DC::UI::Entry
1647 text => $CFG->{profile}{default}{password}, 1710 text => $PROFILE->{password},
1648 hidden => 1, 1711 hidden => 1,
1649 tooltip => "The password for your character.", 1712 tooltip => "The password for your character.",
1650 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{password} = $value; 1 } 1713 on_changed => sub { my ($self, $value) = @_; $PROFILE->{password} = $value; 1 }
1651 ); 1714 );
1652 1715
1653 $table->add_at (1, 11, $LOGIN_BUTTON = new DC::UI::Button 1716 $table->add_at (1, 11, $LOGIN_BUTTON = new DC::UI::Button
1654 expand => 1, 1717 expand => 1,
1655 text => "Login / Register", 1718 text => "Login / Register",
1691 $table->add_at (1, $row, my $vbox = new DC::UI::VBox); 1754 $table->add_at (1, $row, my $vbox = new DC::UI::VBox);
1692 1755
1693 $vbox->add ( 1756 $vbox->add (
1694 $HOST_ENTRY = new DC::UI::Entry 1757 $HOST_ENTRY = new DC::UI::Entry
1695 expand => 1, 1758 expand => 1,
1696 text => $CFG->{profile}{default}{host}, 1759 text => $PROFILE->{host},
1697 tooltip => "The hostname or ip address of the Deliantra server to connect to (e.g. <b>gameserver.deliantra.net</b>)", 1760 tooltip => "The hostname or ip address of the Deliantra server to connect to (e.g. <b>gameserver.deliantra.net</b>)",
1698 on_changed => sub { 1761 on_changed => sub {
1699 my ($self, $value) = @_; 1762 my ($self, $value) = @_;
1700 $CFG->{profile}{default}{host} = $value; 1763 $PROFILE->{host} = $value;
1701 1 1764 1
1702 } 1765 }
1703 ); 1766 );
1704 1767
1705 if (0) { #d# disabled 1768 if (0) { #d# disabled
1904 $r 1967 $r
1905} 1968}
1906 1969
1907my %SORT_ORDER = ( 1970my %SORT_ORDER = (
1908 type => sub { 1971 type => sub {
1972 use sort 'stable';
1909 sort { $a->{type} <=> $b->{type} or $a->{name} cmp $b->{name} } @_ 1973 sort { $a->{type} <=> $b->{type} or $a->{name} cmp $b->{name} } @_
1910 }, 1974 },
1911 mtime => sub { 1975 mtime => sub {
1976 use sort 'stable';
1912 my $NOW = time; 1977 my $NOW = time;
1913 sort { 1978 sort {
1914 my $atime = $a->{mtime} - $NOW; $atime = $atime < 5 * 60 ? int $atime / 60 : 6; 1979 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; 1980 my $btime = $b->{mtime} - $NOW; $btime = $btime < 5 * 60 ? int $btime / 60 : 6;
1916 1981
1917 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED) 1982 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED)
1918 or $btime <=> $atime 1983 or $btime <=> $atime
1919 or $a->{type} <=> $b->{type} 1984 or $a->{type} <=> $b->{type}
1920 } @_ 1985 } @_
1921 }, 1986 },
1922 weight => sub { sort { 1987 weight => sub {
1988 use sort 'stable';
1989 sort {
1923 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1) 1990 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1)
1924 or $a->{type} <=> $b->{type} 1991 or $a->{type} <=> $b->{type}
1925 } @_ }, 1992 } @_
1993 },
1926); 1994);
1927 1995
1928sub inventory_widget { 1996sub inventory_widget {
1929 my $hb = new DC::UI::HBox homogeneous => 1; 1997 my $hb = new DC::UI::HBox homogeneous => 1;
1930 1998
2444 2512
2445 $DEBUG_STATUS = new DC::UI::Label 2513 $DEBUG_STATUS = new DC::UI::Label
2446 padding => 0, 2514 padding => 0,
2447 z => 100, 2515 z => 100,
2448 force_x => "max", 2516 force_x => "max",
2449 force_y => 0; 2517 force_y => 20;
2450 $DEBUG_STATUS->show; 2518 $DEBUG_STATUS->show;
2451 2519
2452 $STATUSBOX = new DC::UI::Statusbox; 2520 $STATUSBOX = new DC::UI::Statusbox;
2453 2521
2454 $MODBOX = new DC::UI::Label 2522 $MODBOX = new DC::UI::Label
2561 2629
2562 $MODE_SLIDER->set_range ([$CFG->{sdl_mode}, 0, scalar @SDL_MODES, 1, 1]); 2630 $MODE_SLIDER->set_range ([$CFG->{sdl_mode}, 0, scalar @SDL_MODES, 1, 1]);
2563 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode}); 2631 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode});
2564 2632
2565 $CAVEAT_LABEL->set_text ("None :)"); 2633 $CAVEAT_LABEL->set_text ("None :)");
2634 $CAVEAT_LABEL->set_text ("Apple/NVIDIA Texture bug (slow)")
2635 if $DC::OpenGL::APPLE_NVIDIA_BUG;
2566 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)") 2636 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)")
2567 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL; 2637 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL;
2568 2638
2569 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 2639 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
2570} 2640}
2580my $animate_timer; 2650my $animate_timer;
2581 2651
2582my $fps = 9; 2652my $fps = 9;
2583 2653
2584sub force_refresh { 2654sub force_refresh {
2585 if ($ENV{CFPLUS_DEBUG} & 4) { 2655 if ($DELIANTRA_DEBUG & 4) {
2586 $fps = $fps * 0.98 + 1 / (($NOW - $LAST_REFRESH) || 0.1) * 0.02; 2656 $fps = $fps * 0.98 + 1 / (($NOW - $LAST_REFRESH) || 0.1) * 0.02;
2587 debug sprintf "%3.2f", $fps; 2657 debug sprintf "%3.2f", $fps;
2588 } 2658 }
2589 2659
2590 undef $WANT_REFRESH; 2660 undef $WANT_REFRESH;
2703 fullscreen => 1, 2773 fullscreen => 1,
2704 fast => 0, 2774 fast => 0,
2705 force_opengl11 => undef, 2775 force_opengl11 => undef,
2706 disable_alpha => 0, 2776 disable_alpha => 0,
2707 smooth_movement => 1, 2777 smooth_movement => 1,
2778 smooth_transitions => 1,
2708 texture_compression => 1, 2779 texture_compression => 1,
2709 map_scale => 1, 2780 map_scale => 1,
2710 fow_enable => 1, 2781 fow_enable => 1,
2711 fow_intensity => 0, 2782 fow_intensity => 0,
2783 fow_texture => 0,
2712 map_smoothing => 1, 2784 map_smoothing => 1,
2713 gui_fontsize => 1, 2785 gui_fontsize => 1,
2714 log_fontsize => 0.7, 2786 log_fontsize => 0.7,
2715 gauge_fontsize => 1, 2787 gauge_fontsize => 1,
2716 gauge_size => 0.35, 2788 gauge_size => 0.35,
2734 shift_fire_stop => 0, 2806 shift_fire_stop => 0,
2735 uitheme => "wood", 2807 uitheme => "wood",
2736 map_shift_x => -24, # arbitrary 2808 map_shift_x => -24, # arbitrary
2737 map_shift_y => +24, # arbitrary 2809 map_shift_y => +24, # arbitrary
2738 ); 2810 );
2739 2811
2740 while (my ($k, $v) = each %DEF_CFG) { 2812 while (my ($k, $v) = each %DEF_CFG) {
2741 $CFG->{$k} = $v unless exists $CFG->{$k}; 2813 $CFG->{$k} = $v unless exists $CFG->{$k};
2742 } 2814 }
2743 2815
2744 $CFG->{profile}{default}{host} ||= "gameserver.deliantra.net"; 2816 my @args = @ARGV;
2817
2818 my $profile = 'default';
2819
2820 for (my $i = 0; $i < @args; $i++) {
2821 if ($args[$i] =~ /^--?profile$/) {
2822 $profile = $args[$i + 1];
2823 splice @args, $i, 2, ();
2824 $i = 0;
2825 } elsif ($args[$i] =~ /^--?h/) {
2826 print STDERR "Usage: $0 [--profile name] [host [user [password]]]\n";
2827 exit 0;
2828 }
2829 }
2830
2831 $CFG->{profile}{$profile} ||= {};
2745 $PROFILE = $CFG->{profile}{default}; 2832 $PROFILE = $CFG->{profile}{$profile};
2833 $PROFILE->{host} ||= "gameserver.deliantra.net";
2834
2835 $PROFILE->{host} = $args[0] if @args > 0;
2836 $PROFILE->{user} = $args[1] if @args > 1;
2837 $PROFILE->{password} = $args[2] if @args > 2;
2746 2838
2747 # convert old bindings (only default profile matters) 2839 # convert old bindings (only default profile matters)
2748 if (my $bindings = delete $PROFILE->{bindings}) { 2840 if (my $bindings = delete $PROFILE->{bindings}) {
2749 while (my ($mod, $syms) = each %$bindings) { 2841 while (my ($mod, $syms) = each %$bindings) {
2750 while (my ($sym, $cmds) = each %$syms) { 2842 while (my ($sym, $cmds) = each %$syms) {
2756 } 2848 }
2757 } 2849 }
2758 2850
2759 sdl_init; 2851 sdl_init;
2760 2852
2853 $ENV{FONTCONFIG_FILE} = DC::find_rcfile "fonts/fonts.conf";
2854 $ENV{FONTCONFIG_DIR} = DC::find_rcfile "fonts";
2855
2761 { 2856 {
2762 my @fonts = map DC::find_rcfile "fonts/$_", qw( 2857 my @fonts = map DC::find_rcfile "fonts/$_", qw(
2763 DejaVuSans.ttf 2858 DejaVuSans.ttf
2764 DejaVuSansMono.ttf 2859 DejaVuSansMono.ttf
2765 DejaVuSans-Bold.ttf 2860 DejaVuSans-Bold.ttf
2766 DejaVuSansMono-Bold.ttf 2861 DejaVuSansMono-Bold.ttf
2767 DejaVuSans-Oblique.ttf 2862 DejaVuSans-Oblique.ttf
2768 DejaVuSansMono-Oblique.ttf 2863 DejaVuSansMono-Oblique.ttf
2769 DejaVuSans-BoldOblique.ttf 2864 DejaVuSans-BoldOblique.ttf
2770 DejaVuSansMono-BoldOblique.ttf 2865 DejaVuSansMono-BoldOblique.ttf
2866 mona.ttf
2771 ); 2867 );
2772 2868
2773 DC::add_font $_ for @fonts; 2869 DC::add_font $_ for @fonts;
2774 2870
2775 $FONT_PROP = new_from_file DC::Font $fonts[0]; 2871 $FONT_PROP = new_from_file DC::Font $fonts[0];
2776 $FONT_FIXED = new_from_file DC::Font $fonts[1]; 2872 $FONT_FIXED = new_from_file DC::Font $fonts[1];
2777 2873
2778 $FONT_PROP->make_default; 2874 $FONT_PROP->make_default;
2779 2875
2802 our $STARTUP_CANCEL = EV::idle sub { 2898 our $STARTUP_CANCEL = EV::idle sub {
2803 undef $::STARTUP_CANCEL; 2899 undef $::STARTUP_CANCEL;
2804 $startup_done->(); 2900 $startup_done->();
2805 }; 2901 };
2806 2902
2903 debug_toggle 0;
2904
2807 delete $SIG{__DIE__}; 2905 delete $SIG{__DIE__};
2808 EV::loop; 2906 EV::loop;
2809 2907
2810 DC::write_cfg if $CFG->{config_autosave}; 2908 DC::write_cfg if $CFG->{config_autosave};
2811 2909
2823 2921
2824deliantra - A Deliantra MORPG game client 2922deliantra - A Deliantra MORPG game client
2825 2923
2826=head1 SYNOPSIS 2924=head1 SYNOPSIS
2827 2925
2828Just run it - no commandline arguments are supported. 2926 deliantra [--profile name] [host [user [password]]]
2927 deliantra --help
2829 2928
2830=head1 USAGE 2929=head1 USAGE
2831 2930
2832deliantra utilises OpenGL for all UI elements and the game. It is supposed to 2931The deliantra client utilises OpenGL for all UI elements and the game. It
2833be used in fullscreen mode and interactively. 2932is supposed to be used in fullscreen mode and interactively.
2834 2933
2835=head1 DEBUGGING 2934=head1 DEBUGGING
2836 2935
2837
2838CFPLUS_DEBUG - environment variable 2936DELIANTRA_DEBUG - environment variable
2839 2937
2840 1 draw borders around widgets 2938 1 draw borders around widgets
2841 2 add low-level widget info to tooltips 2939 2 add low-level widget info to tooltips
2842 4 show fps 2940 4 show fps
2843 8 suppress tooltips 2941 8 suppress tooltips
2942 16 show bandwidth downstream
2844 2943
2845=head1 AUTHOR 2944=head1 AUTHOR
2846 2945
2847Marc Lehmann <deliantra@schmorp.de>, Robin Redeker <elmex@ta-sa.org> 2946Marc Lehmann <deliantra@schmorp.de>, Robin Redeker <elmex@ta-sa.org>
2848 2947

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines