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.52 by root, Fri Jul 18 21:18:42 2008 UTC vs.
Revision 1.59 by root, Tue Aug 19 17:38:30 2008 UTC

140our $CONN; 140our $CONN;
141our $PROFILE; # current profile 141our $PROFILE; # current profile
142our $FAST; # fast, low-quality mode, possibly useful for software-rendering 142our $FAST; # fast, low-quality mode, possibly useful for software-rendering
143 143
144our $WANT_REFRESH; 144our $WANT_REFRESH;
145
146our $MODE_SLIDER;
147our $CAVEAT_LABEL;
145 148
146our @SDL_MODES; 149our @SDL_MODES;
147our $SDL_REINIT = 1; 150our $SDL_REINIT = 1;
148our $WIDTH; 151our $WIDTH;
149our $HEIGHT; 152our $HEIGHT;
829 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "OpenGL Info"); 832 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "OpenGL Info");
830 $table->add_at (1, $row++, new DC::UI::Label fontsize => 0.8, text => DC::OpenGL::gl_vendor . ", " . DC::OpenGL::gl_version, 833 $table->add_at (1, $row++, new DC::UI::Label fontsize => 0.8, text => DC::OpenGL::gl_vendor . ", " . DC::OpenGL::gl_version,
831 can_events => 1, 834 can_events => 1,
832 tooltip => "<tt><span size='8192'>" . (DC::OpenGL::gl_extensions) . "</span></tt>"); 835 tooltip => "<tt><span size='8192'>" . (DC::OpenGL::gl_extensions) . "</span></tt>");
833 836
837 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Caveats");
838 $table->add_at (1, $row++, $CAVEAT_LABEL = new DC::UI::Label fontsize => 0.8,
839 can_events => 1,
840 tooltip => "This field shows any known issues with your config or driver, such as "
841 . "a non-accelerated display format. You can try to work around these issues "
842 . "by selecting a different video mode, changing the settings below or "
843 . "by installing the right driver for your graphics card.");
844
834 my $vidmode_tooltip = 845 my $vidmode_tooltip =
835 "<b>Video Mode.</b> The video mode to use for fullscreen (and the window size for windowed operation). " 846 "<b>Video Mode.</b> The video mode to use for fullscreen (and the window size for windowed operation). "
836 . "The format is <i>width</i> x <i>height</i> \@ <i>depth-per-channel</i> + <i>alpha-channel</i>."; 847 . "The format is <i>width</i> x <i>height</i> \@ <i>depth-per-channel</i> + <i>alpha-channel</i>.";
837 848
838 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Video Mode"); 849 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Video Mode");
839 $table->add_at (1, $row++, my $hbox = new DC::UI::HBox); 850 $table->add_at (1, $row++, my $hbox = new DC::UI::HBox);
840 851
841 $hbox->add (my $mode_slider = new DC::UI::Slider 852 $hbox->add ($MODE_SLIDER = new DC::UI::Slider
842 force_w => $WIDTH * 0.1, expand => 1, range => [$CFG->{sdl_mode}, 0, $#SDL_MODES, 0, 1], 853 force_w => $WIDTH * 0.1, expand => 1,
854 range => [ ($CFG->{sdl_mode}) x 3 ],
843 tooltip => $vidmode_tooltip); 855 tooltip => $vidmode_tooltip);
844 $hbox->add (my $mode_label = new DC::UI::Label 856 $hbox->add (my $mode_label = new DC::UI::Label
845 height => 0.8, template => "9999x9999@9+9", 857 height => 0.8, template => "9999x9999@9+9",
846 can_events => 1, tooltip => $vidmode_tooltip); 858 can_events => 1, tooltip => $vidmode_tooltip);
847 859
848 $mode_slider->connect (changed => sub { 860 $MODE_SLIDER->connect (changed => sub {
849 my ($self, $value) = @_; 861 my ($self, $value) = @_;
850 862
851 $CFG->{sdl_mode} = $self->{range}[0] = $value = int $value; 863 $CFG->{sdl_mode} = $self->{range}[0] = $value = int $value;
852 $mode_label->set_text (sprintf '%dx%d@%d+%d', @{$SDL_MODES[$value]}); 864 $mode_label->set_text (sprintf '%dx%d@%d+%d', @{$SDL_MODES[$value]});
853 }); 865 });
854 $mode_slider->emit (changed => $mode_slider->{range}[0]); 866 $MODE_SLIDER->emit (changed => $MODE_SLIDER->{range}[0]);
855 867
856 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Fullscreen"); 868 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Fullscreen");
857 $table->add_at (1, $row++, $FULLSCREEN_ENABLE = new DC::UI::CheckBox 869 $table->add_at (1, $row++, $FULLSCREEN_ENABLE = new DC::UI::CheckBox
858 state => $CFG->{fullscreen}, 870 state => $CFG->{fullscreen},
859 tooltip => "Bring the client into fullscreen mode.", 871 tooltip => "Bring the client into fullscreen mode.",
919 on_activate => sub { 931 on_activate => sub {
920 video_shutdown (); 932 video_shutdown ();
921 video_init (); 933 video_init ();
922 0 934 0
923 } 935 }
936 );
937
938 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Smooth Movement");
939 $table->add_at (1, $row++, new DC::UI::CheckBox
940 state => $CFG->{smooth_movement},
941 tooltip => "<b>Smooth Movement</b> tries to make movement, well, smoother, but also increases the framerate. "
942 . "If you have a very slow system, non-accelerated drivers or plain dislike smooth scrolling, "
943 . "then disable this option. Changes take effect immdiately.",
944 on_changed => sub { my ($self, $value) = @_; $CFG->{smooth_movement} = $value; 0 }
924 ); 945 );
925 946
926 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Map Scale"); 947 $table->add_at (0, $row, new DC::UI::Label align => 1, text => "Map Scale");
927 $table->add_at (1, $row++, new DC::UI::Slider 948 $table->add_at (1, $row++, new DC::UI::Slider
928 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1], 949 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1],
1728 ["Magic Devices" => PICKUP_MAGIC_DEVICE], 1749 ["Magic Devices" => PICKUP_MAGIC_DEVICE],
1729 ["Ignore cursed" => PICKUP_NOT_CURSED], 1750 ["Ignore cursed" => PICKUP_NOT_CURSED],
1730 ["Jewelery" => PICKUP_JEWELS], 1751 ["Jewelery" => PICKUP_JEWELS],
1731 ["Flesh" => PICKUP_FLESH], 1752 ["Flesh" => PICKUP_FLESH],
1732 ], 1753 ],
1733 ["Weight/Value ratio", 2, 17] 1754 ["Value/Weight ratio", 2, 17]
1734 ) 1755 )
1735 { 1756 {
1736 my ($title, $x, $y, @bits) = @$_; 1757 my ($title, $x, $y, @bits) = @$_;
1737 $table->add_at ($x, $y, new DC::UI::Label text => $title, align => 1, fg => [1, 1, 0]); 1758 $table->add_at ($x, $y, new DC::UI::Label text => $title, align => 1, fg => [1, 1, 0]);
1738 1759
1763 } 1784 }
1764 1785
1765 $table->add_at (2, 18, new DC::UI::ValSlider 1786 $table->add_at (2, 18, new DC::UI::ValSlider
1766 range => [$::CFG->{pickup} & 0xF, 0, 16, 1, 1], 1787 range => [$::CFG->{pickup} & 0xF, 0, 16, 1, 1],
1767 template => ">= 99", 1788 template => ">= 99",
1789 tooltip => "Pick up items whose value/weight (silver/kg) ratio is equal or higher than this setting (which is specified in gold coins).",
1768 to_value => sub { ">= " . 5 * $_[0] }, 1790 to_value => sub { ">= " . 5 * $_[0] },
1769 on_changed => sub { 1791 on_changed => sub {
1770 my ($slider, $value) = @_; 1792 my ($slider, $value) = @_;
1771 1793
1772 $::CFG->{pickup} &= ~0xF; 1794 $::CFG->{pickup} &= ~0xF;
1828 $::CFG->{inv_sort} = $_[1]; 1850 $::CFG->{inv_sort} = $_[1];
1829 $INV->set_sort_order ($SORT_ORDER{$_[1]}); 1851 $INV->set_sort_order ($SORT_ORDER{$_[1]});
1830 }, 1852 },
1831 ); 1853 );
1832 $hb1->add (new DC::UI::Label text => "Weight: ", align => 1, expand => 1); 1854 $hb1->add (new DC::UI::Label text => "Weight: ", align => 1, expand => 1);
1833 #TODO# update to weigh/maxweight 1855 #TODO# update to weight/maxweight
1834 $hb1->add ($STATWIDS->{i_weight} = new DC::UI::Label align => 0); 1856 $hb1->add ($STATWIDS->{i_weight} = new DC::UI::Label align => 0);
1835 1857
1836 $vb1->add (my $sw1 = new DC::UI::ScrolledWindow expand => 1, scroll_y => 1); 1858 $vb1->add (my $sw1 = new DC::UI::ScrolledWindow expand => 1, scroll_y => 1);
1837 $sw1->add ($INV = new DC::UI::Inventory); 1859 $sw1->add ($INV = new DC::UI::Inventory);
1838 $INV->set_sort_order ($SORT_ORDER{$::CFG->{inv_sort}}); 1860 $INV->set_sort_order ($SORT_ORDER{$::CFG->{inv_sort}});
2180 @SDL_MODES = DC::SDL_ListModes 5, 0 unless @SDL_MODES; 2202 @SDL_MODES = DC::SDL_ListModes 5, 0 unless @SDL_MODES;
2181 @SDL_MODES or DC::fatal "Unable to find a usable video mode\n(hardware accelerated opengl fullscreen)"; 2203 @SDL_MODES or DC::fatal "Unable to find a usable video mode\n(hardware accelerated opengl fullscreen)";
2182 2204
2183 @SDL_MODES = sort { $a->[0] * $a->[1] <=> $b->[0] * $b->[1] } @SDL_MODES; 2205 @SDL_MODES = sort { $a->[0] * $a->[1] <=> $b->[0] * $b->[1] } @SDL_MODES;
2184 2206
2185 if (!exists $CFG->{sdl_mode} or $CFG->{sdl_mode} >= @SDL_MODES) { 2207 if (!exists $CFG->{sdl_mode} or $CFG->{sdl_mode} > $#SDL_MODES) {
2186 $CFG->{sdl_mode} = 0; 2208 $CFG->{sdl_mode} = 0;
2187 for (reverse 0 .. $#SDL_MODES) { 2209 for (reverse 0 .. $#SDL_MODES) {
2188 $CFG->{sdl_mode} = $_ if $SDL_MODES[$_][0] * $SDL_MODES[$_][1] >= 800 * 600; 2210 $CFG->{sdl_mode} = $_ if $SDL_MODES[$_][0] * $SDL_MODES[$_][1] >= 800 * 600;
2189 } 2211 }
2190 } 2212 }
2193 2215
2194 ($WIDTH, $HEIGHT, my ($rgb, $alpha)) = @{ $SDL_MODES[$CFG->{sdl_mode}] }; 2216 ($WIDTH, $HEIGHT, my ($rgb, $alpha)) = @{ $SDL_MODES[$CFG->{sdl_mode}] };
2195 $FULLSCREEN = $CFG->{fullscreen}; 2217 $FULLSCREEN = $CFG->{fullscreen};
2196 $FAST = $CFG->{fast}; 2218 $FAST = $CFG->{fast};
2197 2219
2220 # due to mac os x braindamage, we simply retry with !fullscreen in case of an error
2198 DC::SDL_SetVideoMode $WIDTH, $HEIGHT, $rgb, $alpha, $FULLSCREEN 2221 DC::SDL_SetVideoMode $WIDTH, $HEIGHT, $rgb, $alpha, $FULLSCREEN
2222 or DC::SDL_SetVideoMode $WIDTH, $HEIGHT, $rgb, $alpha, !$FULLSCREEN
2199 or die "SDL_SetVideoMode failed: " . (DC::SDL_GetError) . "\n"; 2223 or die "SDL_SetVideoMode failed: " . (DC::SDL_GetError) . "\n";
2200 2224
2201 $SDL_ACTIVE = 1; 2225 $SDL_ACTIVE = 1;
2202 $LAST_REFRESH = time - 0.01; 2226 $LAST_REFRESH = time - 0.01;
2203 2227
2378 2402
2379 $BUTTONBAR->show; 2403 $BUTTONBAR->show;
2380 $SETUP_DIALOG->show; 2404 $SETUP_DIALOG->show;
2381 $MESSAGE_WINDOW->show; 2405 $MESSAGE_WINDOW->show;
2382 } 2406 }
2407
2408 $MODE_SLIDER->set_range ([$CFG->{sdl_mode}, 0, $#SDL_MODES, 1, 1]);
2409 $MODE_SLIDER->emit (changed => $CFG->{sdl_mode});
2410
2411 $CAVEAT_LABEL->set_text ("None :)");
2412 $CAVEAT_LABEL->set_text ("Software Rendering (very slow)")
2413 unless DC::SDL_GL_GetAttribute DC::SDL_GL_ACCELERATED_VISUAL;
2383 2414
2384 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 2415 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
2385} 2416}
2386 2417
2387sub video_shutdown { 2418sub video_shutdown {
2486$SIG{INT} = $SIG{TERM} = sub { 2517$SIG{INT} = $SIG{TERM} = sub {
2487 EV::unloop; 2518 EV::unloop;
2488 #d# TODO calling exit here hangs the process in some futex 2519 #d# TODO calling exit here hangs the process in some futex
2489}; 2520};
2490 2521
2491{ 2522# due to mac os x + sdl combined briandamage, we need this contortion
2523sub main {
2524 {
2492 DC::Pod::load_docwiki DC::find_rcfile "docwiki.pst"; 2525 DC::Pod::load_docwiki DC::find_rcfile "docwiki.pst";
2493 2526
2494 if (-e "$Deliantra::VARDIR/client.cf") { 2527 if (-e "$Deliantra::VARDIR/client.cf") {
2495 DC::read_cfg "$Deliantra::VARDIR/client.cf"; 2528 DC::read_cfg "$Deliantra::VARDIR/client.cf";
2496 } else { 2529 } else {
2497 #TODO: compatibility cruft 2530 #TODO: compatibility cruft
2498 DC::read_cfg "$Deliantra::OLDDIR/cfplusrc"; 2531 DC::read_cfg "$Deliantra::OLDDIR/cfplusrc";
2499 print STDERR "INFO: used old configuration file\n"; 2532 print STDERR "INFO: used old configuration file\n";
2500 } 2533 }
2501 2534
2502 DC::DB::Server::run; 2535 DC::DB::Server::run;
2503 2536
2504 if ($CFG->{db_schema} < 1) { 2537 if ($CFG->{db_schema} < 1) {
2505 warn "INFO: upgrading database schema from 0 to 1, mapcache and tilecache will be lost\n"; 2538 warn "INFO: upgrading database schema from 0 to 1, mapcache and tilecache will be lost\n";
2506 DC::DB::nuke_db; 2539 DC::DB::nuke_db;
2507 $CFG->{db_schema} = 1; 2540 $CFG->{db_schema} = 1;
2508 DC::write_cfg; 2541 DC::write_cfg;
2509 } 2542 }
2510 2543
2511 DC::DB::open_db; 2544 DC::DB::open_db;
2512 2545
2513 DC::UI::set_layout ($::CFG->{layout}); 2546 DC::UI::set_layout ($::CFG->{layout});
2514 2547
2515 my %DEF_CFG = ( 2548 my %DEF_CFG = (
2516 sdl_mode => 0, 2549 sdl_mode => 0,
2517 fullscreen => 1, 2550 fullscreen => 1,
2518 fast => 0, 2551 fast => 0,
2519 force_opengl11 => undef, 2552 force_opengl11 => undef,
2520 disable_alpha => 0, 2553 disable_alpha => 0,
2554 smooth_movement => 1,
2521 texture_compression => 1, 2555 texture_compression => 1,
2522 map_scale => 1, 2556 map_scale => 1,
2523 fow_enable => 1, 2557 fow_enable => 1,
2524 fow_intensity => 0, 2558 fow_intensity => 0,
2525 map_smoothing => 1, 2559 map_smoothing => 1,
2526 gui_fontsize => 1, 2560 gui_fontsize => 1,
2527 log_fontsize => 0.7, 2561 log_fontsize => 0.7,
2528 gauge_fontsize => 1, 2562 gauge_fontsize => 1,
2529 gauge_size => 0.35, 2563 gauge_size => 0.35,
2530 stat_fontsize => 0.7, 2564 stat_fontsize => 0.7,
2531 mapsize => 100, 2565 mapsize => 100,
2532 audio_enable => 1, 2566 audio_enable => 1,
2533 audio_hw_channels => 0, 2567 audio_hw_channels => 0,
2534 audio_hw_frequency => 0, 2568 audio_hw_frequency => 0,
2535 audio_hw_chunksize => 0, 2569 audio_hw_chunksize => 0,
2536 audio_mix_channels => 8, 2570 audio_mix_channels => 8,
2537 effects_enable => 1, 2571 effects_enable => 1,
2538 effects_volume => 1, 2572 effects_volume => 1,
2539 bgm_enable => 1, 2573 bgm_enable => 1,
2540 bgm_volume => 0.5, 2574 bgm_volume => 0.5,
2541 output_rate => "", 2575 output_rate => "",
2542 pickup => 0, 2576 pickup => 0,
2543 inv_sort => "mtime", 2577 inv_sort => "mtime",
2544 default => "profile", # default profile 2578 default => "profile", # default profile
2545 show_tips => 1, 2579 show_tips => 1,
2546 logview_max_par => 1000, 2580 logview_max_par => 1000,
2547 shift_fire_stop => 0, 2581 shift_fire_stop => 0,
2548 ); 2582 );
2549 2583
2550 while (my ($k, $v) = each %DEF_CFG) { 2584 while (my ($k, $v) = each %DEF_CFG) {
2551 $CFG->{$k} = $v unless exists $CFG->{$k}; 2585 $CFG->{$k} = $v unless exists $CFG->{$k};
2552 } 2586 }
2553 2587
2554 $CFG->{profile}{default}{host} ||= "gameserver.deliantra.net"; 2588 $CFG->{profile}{default}{host} ||= "gameserver.deliantra.net";
2555 $PROFILE = $CFG->{profile}{default}; 2589 $PROFILE = $CFG->{profile}{default};
2556 2590
2557 # convert old bindings (only default profile matters) 2591 # convert old bindings (only default profile matters)
2558 if (my $bindings = delete $PROFILE->{bindings}) { 2592 if (my $bindings = delete $PROFILE->{bindings}) {
2559 while (my ($mod, $syms) = each %$bindings) { 2593 while (my ($mod, $syms) = each %$bindings) {
2560 while (my ($sym, $cmds) = each %$syms) { 2594 while (my ($sym, $cmds) = each %$syms) {
2561 push @{ $PROFILE->{macro} }, { 2595 push @{ $PROFILE->{macro} }, {
2562 accelkey => [$mod*1, $sym*1], 2596 accelkey => [$mod*1, $sym*1],
2563 action => $cmds, 2597 action => $cmds,
2598 };
2564 }; 2599 }
2565 } 2600 }
2566 } 2601 }
2567 }
2568 2602
2569 sdl_init; 2603 sdl_init;
2570 2604
2571 { 2605 {
2572 my @fonts = map DC::find_rcfile "fonts/$_", qw( 2606 my @fonts = map DC::find_rcfile "fonts/$_", qw(
2573 DejaVuSans.ttf 2607 DejaVuSans.ttf
2574 DejaVuSansMono.ttf 2608 DejaVuSansMono.ttf
2575 DejaVuSans-Bold.ttf 2609 DejaVuSans-Bold.ttf
2576 DejaVuSansMono-Bold.ttf 2610 DejaVuSansMono-Bold.ttf
2577 DejaVuSans-Oblique.ttf 2611 DejaVuSans-Oblique.ttf
2578 DejaVuSansMono-Oblique.ttf 2612 DejaVuSansMono-Oblique.ttf
2579 DejaVuSans-BoldOblique.ttf 2613 DejaVuSans-BoldOblique.ttf
2580 DejaVuSansMono-BoldOblique.ttf 2614 DejaVuSansMono-BoldOblique.ttf
2581 ); 2615 );
2582 2616
2583 DC::add_font $_ for @fonts; 2617 DC::add_font $_ for @fonts;
2584 2618
2585 $FONT_PROP = new_from_file DC::Font $fonts[0]; 2619 $FONT_PROP = new_from_file DC::Font $fonts[0];
2586 $FONT_FIXED = new_from_file DC::Font $fonts[1]; 2620 $FONT_FIXED = new_from_file DC::Font $fonts[1];
2587 2621
2588 $FONT_PROP->make_default; 2622 $FONT_PROP->make_default;
2589 2623
2590 DC::pango_init; 2624 DC::pango_init;
2591 } 2625 }
2592 2626
2593# compare mono (ft) vs. rgba (cairo) 2627# compare mono (ft) vs. rgba (cairo)
2594# ft - 1.8s, cairo 3s, even in alpha-only mode 2628# ft - 1.8s, cairo 3s, even in alpha-only mode
2595# for my $rgba (0..1) { 2629# for my $rgba (0..1) {
2596# my $t1 = Time::HiRes::time; 2630# my $t1 = Time::HiRes::time;
2601# } 2635# }
2602# my $t2 = Time::HiRes::time; 2636# my $t2 = Time::HiRes::time;
2603# warn $t2-$t1; 2637# warn $t2-$t1;
2604# } 2638# }
2605 2639
2606 video_init; 2640 video_init;
2607 audio_init; 2641 audio_init;
2608} 2642 }
2609 2643
2610show_tip_of_the_day if $CFG->{show_tips}; 2644 show_tip_of_the_day if $CFG->{show_tips};
2611 2645
2612our $STARTUP_CANCEL = EV::idle sub { 2646 our $STARTUP_CANCEL = EV::idle sub {
2613 undef $::STARTUP_CANCEL; 2647 undef $::STARTUP_CANCEL;
2614 $startup_done->(); 2648 $startup_done->();
2615}; 2649 };
2616 2650
2617delete $SIG{__DIE__}; 2651 delete $SIG{__DIE__};
2618EV::loop; 2652 EV::loop;
2619 2653
2620#video_shutdown; 2654#video_shutdown;
2621#audio_shutdown; 2655#audio_shutdown;
2622DC::OpenGL::quit; 2656 DC::OpenGL::quit;
2623DC::SDL_Quit; 2657 DC::SDL_Quit;
2624DC::DB::Server::stop; 2658 DC::DB::Server::stop;
2659}
2660
2661DC::SDL_braino; # see sub above
2625 2662
2626=head1 NAME 2663=head1 NAME
2627 2664
2628deliantra - A Deliantra MORPG game client 2665deliantra - A Deliantra MORPG game client
2629 2666
2646 4 show fps 2683 4 show fps
2647 8 suppress tooltips 2684 8 suppress tooltips
2648 2685
2649=head1 AUTHOR 2686=head1 AUTHOR
2650 2687
2651Marc Lehmann <crossfire@schmorp.de>, Robin Redeker <elmex@ta-sa.org> 2688Marc Lehmann <deliantra@schmorp.de>, Robin Redeker <elmex@ta-sa.org>
2652 2689
2653 2690
2654 2691

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines