ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/bin/cfplus
(Generate patch)

Comparing deliantra/Deliantra-Client/bin/cfplus (file contents):
Revision 1.119 by root, Fri Sep 29 00:56:06 2006 UTC vs.
Revision 1.133 by root, Sun Dec 3 01:03:49 2006 UTC

1#!/opt/bin/perl 1#!/opt/bin/perl
2
3my $startup_done = sub { };
4
5# do splash-screen thingy on win32
6BEGIN {
7 if (%PAR::LibCache && $^O eq "MSWin32") {
8 while (my ($filename, $zip) = each %PAR::LibCache) {
9 $zip->extractMember ("SPLASH.bmp", "$ENV{PAR_TEMP}/SPLASH.bmp");
10 }
11
12 require Win32::GUI::SplashScreen;
13
14 Win32::GUI::SplashScreen::Show (
15 -file => "$ENV{PAR_TEMP}/SPLASH.bmp",
16 );
17
18 $startup_done = sub {
19 Win32::GUI::SplashScreen::Done (1);
20 };
21 }
22}
2 23
3use strict; 24use strict;
4use utf8; 25use utf8;
26
27use Carp 'verbose';
5 28
6# do things only needed for single-binary version (par) 29# do things only needed for single-binary version (par)
7BEGIN { 30BEGIN {
8 if (%PAR::LibCache) { 31 if (%PAR::LibCache) {
9 @INC = grep ref, @INC; # weed out all paths except pars loader refs 32 @INC = grep ref, @INC; # weed out all paths except pars loader refs
10 33
11 while (my ($filename, $zip) = each %PAR::LibCache) { 34 while (my ($filename, $zip) = each %PAR::LibCache) {
12 for ($zip->memberNames) { 35 for ($zip->memberNames) {
13 next unless /^\/root\/(.*)/; 36 next unless /^root\/(.*)/;
14 $zip->extractMember ($_, "$ENV{PAR_TEMP}/$1") 37 $zip->extractMember ($_, "$ENV{PAR_TEMP}/$1")
15 unless -e "$ENV{PAR_TEMP}/$1"; 38 unless -e "$ENV{PAR_TEMP}/$1";
16 } 39 }
17 } 40 }
18 41
45$SIG{QUIT} = sub { Carp::cluck "QUIT" }; 68$SIG{QUIT} = sub { Carp::cluck "QUIT" };
46$SIG{PIPE} = 'IGNORE'; 69$SIG{PIPE} = 'IGNORE';
47 70
48$Event::Eval = 0; 71$Event::Eval = 0;
49$Event::DIED = sub { 72$Event::DIED = sub {
50 # TODO: display dialog box or so 73 CFPlus::fatal Carp::longmess $_[1]
51 Carp::cluck $_[1];#d#TODO: remove when stable
52 return;#d#
53 CFPlus::fatal ($_[1]);
54}; 74};
55
56our $VERSION = '0.9';
57 75
58my $MAX_FPS = 60; 76my $MAX_FPS = 60;
59my $MIN_FPS = 5; # unused as of yet 77my $MIN_FPS = 5; # unused as of yet
60 78
61our $META_SERVER = "crossfire.real-time.com:13326"; 79our $META_SERVER = "http://metaserver.schmorp.de/current.json";
62 80
63our $LAST_REFRESH; 81our $LAST_REFRESH;
64our $NOW; 82our $NOW;
65 83
66our $CFG; 84our $CFG;
67our $CONN; 85our $CONN;
86our $PROFILE; # current profile
68our $FAST; # fast, low-quality mode, possibly useful for software-rendering 87our $FAST; # fast, low-quality mode, possibly useful for software-rendering
69 88
70our $WANT_REFRESH; 89our $WANT_REFRESH;
71our $CAN_REFRESH; 90our $CAN_REFRESH;
72 91
103 122
104our $INVENTORY_PAGE; 123our $INVENTORY_PAGE;
105our $STATS_PAGE; 124our $STATS_PAGE;
106our $SKILL_PAGE; 125our $SKILL_PAGE;
107our $SPELL_PAGE; 126our $SPELL_PAGE;
127our $SPELL_LIST;
108 128
109our $HELP_WINDOW; 129our $HELP_WINDOW;
110our $MESSAGE_WINDOW; 130our $MESSAGE_WINDOW;
111our $FLOORBOX; 131our $FLOORBOX;
112our $GAUGES; 132our $GAUGES;
136 $STATUSBOX->add (CFPlus::asxml $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]); 156 $STATUSBOX->add (CFPlus::asxml $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]);
137} 157}
138 158
139sub debug { 159sub debug {
140 $DEBUG_STATUS->set_text ($_[0]); 160 $DEBUG_STATUS->set_text ($_[0]);
161}
162
163sub message {
164 my ($para) = @_;
165
166 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0];
167
168 $para->{markup} = "<span foreground='#ffffff'>$time</span> $para->{markup}";
169
170 $LOGVIEW->add_paragraph ($para);
171 $LOGVIEW->scroll_to_bottom;
141} 172}
142 173
143sub destroy_query_dialog { 174sub destroy_query_dialog {
144 (delete $_[0]{query_dialog})->destroy 175 (delete $_[0]{query_dialog})->destroy
145 if $_[0]{query_dialog}; 176 if $_[0]{query_dialog};
344 status "logging in..."; 375 status "logging in...";
345 376
346 $LOGIN_BUTTON->set_text ("Logout"); 377 $LOGIN_BUTTON->set_text ("Logout");
347 $SETUP_DIALOG->hide; 378 $SETUP_DIALOG->hide;
348 379
380 $PROFILE = $CFG->{profile}{default};
381
349 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32; 382 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32;
350 383
351 my ($host, $port) = split /:/, $CFG->{profile}{default}{host}; 384 my ($host, $port) = split /:/, $PROFILE->{host};
352 385
353 $MAP = new CFPlus::Map $mapsize, $mapsize; 386 $MAP = new CFPlus::Map;
354 387
355 $CONN = eval { 388 $CONN = eval {
356 new CFPlus::Protocol 389 new CFPlus::Protocol
357 host => $host, 390 host => $host,
358 port => $port || 13327, 391 port => $port || 13327,
359 user => $CFG->{profile}{default}{user}, 392 user => $PROFILE->{user},
360 pass => $CFG->{profile}{default}{password}, 393 pass => $PROFILE->{password},
361 mapw => $mapsize, 394 mapw => $mapsize,
362 maph => $mapsize, 395 maph => $mapsize,
363 396
364 client => "cfplus $VERSION $] $^O", 397 client => "cfplus $CFPlus::VERSION $] $^O",
365 398
366 map_widget => $MAPWIDGET, 399 map_widget => $MAPWIDGET,
367 logview => $LOGVIEW, 400 logview => $LOGVIEW,
368 statusbox => $STATUSBOX, 401 statusbox => $STATUSBOX,
369 map => $MAP, 402 map => $MAP,
396sub stop_game { 429sub stop_game {
397 $LOGIN_BUTTON->set_text ("Login"); 430 $LOGIN_BUTTON->set_text ("Login");
398 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER); 431 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER);
399 $SETUP_DIALOG->show; 432 $SETUP_DIALOG->show;
400 $PL_WINDOW->hide; 433 $PL_WINDOW->hide;
401 $SPELL_PAGE->clear_spells; 434 $SPELL_LIST->clear_spells;
402 435
403 return unless $CONN; 436 return unless $CONN;
404 437
405 status "connection closed"; 438 status "connection closed";
406 439
633 $table->add (1, 1, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 2; 0 }); 666 $table->add (1, 1, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 2; 0 });
634 $table->add (0, 2, new CFPlus::UI::Label text => "Show FPS"); 667 $table->add (0, 2, new CFPlus::UI::Label text => "Show FPS");
635 $table->add (1, 2, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 4; 0 }); 668 $table->add (1, 2, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 4; 0 });
636 $table->add (0, 3, new CFPlus::UI::Label text => "Suppress Tooltips"); 669 $table->add (0, 3, new CFPlus::UI::Label text => "Suppress Tooltips");
637 $table->add (1, 3, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 8; 0 }); 670 $table->add (1, 3, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 8; 0 });
671 $table->add (0, 4, new CFPlus::UI::Button text => "die on click(tm)", on_activate => sub { die "violator" } );
638 672
639 my @default_smooth = (0.05, 0.13, 0.05, 0.13, 0.30, 0.13, 0.05, 0.13, 0.05); 673 my @default_smooth = (0.05, 0.13, 0.05, 0.13, 0.30, 0.13, 0.05, 0.13, 0.05);
640 674
641 for my $x (0..2) { 675 for my $x (0..2) {
642 for my $y (0 .. 2) { 676 for my $y (0 .. 2) {
824 858
825 my $table = $METASERVER->{table}; 859 my $table = $METASERVER->{table};
826 $table->clear; 860 $table->clear;
827 $table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list..."); 861 $table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list...");
828 862
829 my $buf; 863 my $ok = 0;
830 864
831 my $fh = new IO::Socket::INET PeerHost => $META_SERVER, Blocking => 0; 865 CFPlus::background {
866 my $ua = CFPlus::lwp_useragent;
832 867
833 unless ($fh) { 868 CFPlus::background_msg CFPlus::from_json +(CFPlus::lwp_check $ua->get ($META_SERVER))->decoded_content;
834 $label->set_text ("unable to contact metaserver: $!"); 869 } sub {
835 return; 870 my ($msg) = @_;
836 } 871 if ($msg) {
837
838 Event->io (fd => $fh, poll => 'r', cb => sub {
839 my $res = sysread $fh, $buf, 8192, length $buf;
840
841 if (!defined $res) {
842 $_[0]->w->cancel;
843 $label->set_text ("error while retrieving server list: $!");
844 } elsif ($res == 0) {
845 $_[0]->w->cancel;
846 status "server list retrieved";
847
848 utf8::decode $buf if utf8::valid $buf;
849
850 $table->clear; 872 $table->clear;
851 873
852 my @tip = ( 874 my @tip = (
853 "The current number of users logged in on the server.", 875 "The current number of users logged in on the server.",
854 "The hostname of the server.", 876 "The hostname of the server.",
864 for 0 .. $#col; 886 for 0 .. $#col;
865 887
866 my @align = qw(1 0 1 1 -1); 888 my @align = qw(1 0 1 1 -1);
867 889
868 my $y = 0; 890 my $y = 0;
869 for my $m (sort { $b->[3] <=> $a->[3] } map [split /\|/], split /\015?\012/, $buf) { 891 for my $m (
892 sort {
893 $b->{version} <=> $a->{version}
894 or $b->{users} <=> $a->{users}
895 }
896 @{ $msg->{servers} }
897 ) {
870 my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) = @$m; 898 my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) =
899 @$m{qw(ip age hostname users version description ibytes obytes uptime)};
871 900
872 for ($desc) { 901 for ($desc) {
873 s/<br>/\n/gi; 902 s/<br>/\n/gi;
874 s/<li>/\n· /gi; 903 s/<li>/\n· /gi;
875 s/<.*?>//sgi; 904 s/<.*?>//sgi;
876 s/&/&amp;/g; 905 s/&amp;/&/g;
877 s/</&lt;/g; 906 s/&lt;/</g;
878 s/>/&gt;/g; 907 s/&gt;/>/g;
879 } 908 }
880 909
881 $uptime = sprintf "%dd %02d:%02d:%02d", 910 $uptime = sprintf "%dd %02d:%02d:%02d",
882 (int $m->[8] / 86400), 911 (int $uptime / 86400),
883 (int $m->[8] / 3600) % 24, 912 (int $uptime / 3600) % 24,
884 (int $m->[8] / 60) % 60, 913 (int $uptime / 60) % 60,
885 $m->[8] % 60; 914 $uptime % 60;
886 915
887 $m = [$users, $host, $uptime, $version, $desc]; 916 $m = [$users, $host, $uptime, $version, $desc];
888 917
889 $y++; 918 $y++;
890 919
900 ), 929 ),
901 (new CFPlus::UI::Empty expand => 1), 930 (new CFPlus::UI::Empty expand => 1),
902 ]); 931 ]);
903 932
904 $table->add ($_, $y, new CFPlus::UI::Label 933 $table->add ($_, $y, new CFPlus::UI::Label
934 max_w => $::WIDTH * 0.4,
905 ellipsise => 0, 935 ellipsise => 0,
906 align => $align[$_], 936 align => $align[$_],
907 text => $m->[$_], 937 text => $m->[$_],
908 tooltip => $tip[$_], 938 tooltip => $tip[$_],
939 fg => ($m->[3] =~ /\+$/ ? [1, 1, 1] : [.7, .7, .7]),
909 can_hover => 1, 940 can_hover => 1,
910 can_events => 1, 941 can_events => 1,
911 fontsize => 0.8) 942 fontsize => 0.8)
912 for 0 .. $#$m; 943 for 0 .. $#$m;
913 } 944 }
945 } else {
946 $ok or $label->set_text ("error while contacting metaserver");
914 } 947 }
915 }); 948 };
949
916} 950}
917 951
918sub metaserver_dialog { 952sub metaserver_dialog {
919 my $vbox = new CFPlus::UI::VBox; 953 my $vbox = new CFPlus::UI::VBox;
920 my $table = new CFPlus::UI::Table; 954 my $table = new CFPlus::UI::Table;
924 title => "Server List", 958 title => "Server List",
925 name => 'metaserver_dialog', 959 name => 'metaserver_dialog',
926 x => 'center', 960 x => 'center',
927 y => 'center', 961 y => 'center',
928 z => 3, 962 z => 3,
963 force_w => $::WIDTH * 0.9,
929 force_h => $::HEIGHT * 0.4, 964 force_h => $::HEIGHT * 0.7,
930 child => $vbox, 965 child => $vbox,
931 has_close_button => 1, 966 has_close_button => 1,
932 table => $table, 967 table => $table,
933 on_visibility_change => sub { 968 on_visibility_change => sub {
934 update_metaserver ($_[0]) if $_[1]; 969 update_metaserver ($_[0]) if $_[1];
1054 $table->add (1, 13, my $saycmd = new CFPlus::UI::CheckBox 1089 $table->add (1, 13, my $saycmd = new CFPlus::UI::CheckBox
1055 state => $CFG->{show_tips}, 1090 state => $CFG->{show_tips},
1056 tooltip => "Show the <b>Tip of the day</b> window at startup?", 1091 tooltip => "Show the <b>Tip of the day</b> window at startup?",
1057 on_changed => sub { 1092 on_changed => sub {
1058 my ($self, $value) = @_; 1093 my ($self, $value) = @_;
1059 $CFG->{shop_tips} = $value; 1094 $CFG->{show_tips} = $value;
1060 0 1095 0
1061 } 1096 }
1062 ); 1097 );
1063 1098
1064 $vbox->add (new CFPlus::UI::FancyFrame 1099 $vbox->add (new CFPlus::UI::FancyFrame
1155 ["Boots" => PICKUP_BOOTS], 1190 ["Boots" => PICKUP_BOOTS],
1156 ["Gloves" => PICKUP_GLOVES], 1191 ["Gloves" => PICKUP_GLOVES],
1157 ["Cloaks" => PICKUP_CLOAK], 1192 ["Cloaks" => PICKUP_CLOAK],
1158 ], 1193 ],
1159 1194
1160 ["Readables", 2, 2, 1195 ["Readables", 2, 0,
1161 ["Spellbooks" => PICKUP_SPELLBOOK], 1196 ["Spellbooks" => PICKUP_SPELLBOOK],
1162 ["Skillscrolls" => PICKUP_SKILLSCROLL], 1197 ["Skillscrolls" => PICKUP_SKILLSCROLL],
1163 ["Normal Books/Scrolls" => PICKUP_READABLES], 1198 ["Normal Books/Scrolls" => PICKUP_READABLES],
1164 ], 1199 ],
1165 ["Misc", 2, 7, 1200 ["Misc", 2, 5,
1166 ["Food" => PICKUP_FOOD], 1201 ["Food" => PICKUP_FOOD],
1167 ["Drinks" => PICKUP_DRINK], 1202 ["Drinks" => PICKUP_DRINK],
1168 ["Valuables (Money, Gems)" => PICKUP_VALUABLES], 1203 ["Valuables (Money, Gems)" => PICKUP_VALUABLES],
1169 ["Keys" => PICKUP_KEY], 1204 ["Keys" => PICKUP_KEY],
1170 ["Magical Items" => PICKUP_MAGICAL], 1205 ["Magical Items" => PICKUP_MAGICAL],
1171 ["Potions" => PICKUP_POTION], 1206 ["Potions" => PICKUP_POTION],
1172 ["Magic Devices" => PICKUP_MAGIC_DEVICE], 1207 ["Magic Devices" => PICKUP_MAGIC_DEVICE],
1173 ["Ignore cursed" => PICKUP_NOT_CURSED], 1208 ["Ignore cursed" => PICKUP_NOT_CURSED],
1174 ["Jewelery" => PICKUP_JEWELS], 1209 ["Jewelery" => PICKUP_JEWELS],
1210 ["Flesh" => PICKUP_FLESH],
1175 ], 1211 ],
1176 ["Weight/Value ratio", 2, 17] 1212 ["Weight/Value ratio", 2, 17]
1177 ) 1213 )
1178 { 1214 {
1179 my ($title, $x, $y, @bits) = @$_; 1215 my ($title, $x, $y, @bits) = @$_;
1229 $table 1265 $table
1230} 1266}
1231 1267
1232my %SORT_ORDER = ( 1268my %SORT_ORDER = (
1233 type => undef, 1269 type => undef,
1234 mtime => sub { sort { 1270 mtime => sub {
1271 my $NOW = time;
1272 sort {
1273 my $atime = $a->{mtime} - $NOW; $atime = $atime < 5 * 60 ? int $atime / 60 : 6;
1274 my $btime = $b->{mtime} - $NOW; $btime = $btime < 5 * 60 ? int $btime / 60 : 6;
1275
1235 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED) 1276 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED)
1236 or $b->{mtime} <=> $a->{mtime} 1277 or $btime <=> $atime
1237 or $a->{type} <=> $b->{type} 1278 or $a->{type} <=> $b->{type}
1279 } @_
1238 } @_ }, 1280 },
1239 weight => sub { sort { 1281 weight => sub { sort {
1240 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1) 1282 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1)
1241 or $a->{type} <=> $b->{type} 1283 or $a->{type} <=> $b->{type}
1242 } @_ }, 1284 } @_ },
1243); 1285);
1268 #TODO# update to weigh/maxweight 1310 #TODO# update to weigh/maxweight
1269 $hb1->add ($STATWIDS->{i_weight} = new CFPlus::UI::Label align => -1); 1311 $hb1->add ($STATWIDS->{i_weight} = new CFPlus::UI::Label align => -1);
1270 1312
1271 $vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1); 1313 $vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1);
1272 $sw1->add ($INV = new CFPlus::UI::Inventory); 1314 $sw1->add ($INV = new CFPlus::UI::Inventory);
1315 $INV->set_sort_order ($SORT_ORDER{$::CFG->{inv_sort}});
1273 1316
1274 $hb->add (my $vb2 = new CFPlus::UI::VBox); 1317 $hb->add (my $vb2 = new CFPlus::UI::VBox);
1275 1318
1276 $vb2->add ($INV_RIGHT_HB = new CFPlus::UI::HBox); 1319 $vb2->add ($INV_RIGHT_HB = new CFPlus::UI::HBox);
1277 1320
1317 $ntb->add ( 1360 $ntb->add (
1318 "Skills (F3)" => $SKILL_PAGE = skill_window, 1361 "Skills (F3)" => $SKILL_PAGE = skill_window,
1319 "Shows all your Skills." 1362 "Shows all your Skills."
1320 ); 1363 );
1321 1364
1322 my $spellsw = new CFPlus::UI::ScrolledWindow (expand => 1, scroll_y => 1); 1365 my $spellsw = $SPELL_PAGE = new CFPlus::UI::ScrolledWindow (expand => 1, scroll_y => 1);
1323 $spellsw->add ($SPELL_PAGE = new CFPlus::UI::SpellList); 1366 $spellsw->add ($SPELL_LIST = new CFPlus::UI::SpellList);
1324 $ntb->add ( 1367 $ntb->add (
1325 "Spellbook (F4)" => $spellsw, 1368 "Spellbook (F4)" => $spellsw,
1326 "Displays all spells you have and lets you edit keyboard shortcuts for them." 1369 "Displays all spells you have and lets you edit keyboard shortcuts for them."
1327 ); 1370 );
1328 $ntb->add ( 1371 $ntb->add (
1346 1389
1347 my $refresh; 1390 my $refresh;
1348 $refresh = $BIND_UPD_CB = sub { 1391 $refresh = $BIND_UPD_CB = sub {
1349 $binding_list->clear (); 1392 $binding_list->clear ();
1350 1393
1394 return unless $PROFILE;
1395
1351 for my $mod (keys %{$::CFG->{profile}{default}{bindings}}) { 1396 for my $mod (keys %{$PROFILE->{bindings}}) {
1352 for my $sym (keys %{$::CFG->{profile}{default}{bindings}{$mod}}) { 1397 for my $sym (keys %{$PROFILE->{bindings}{$mod}}) {
1353 my $cmds = $::CFG->{profile}{default}{bindings}{$mod}{$sym}; 1398 my $cmds = $PROFILE->{bindings}{$mod}{$sym};
1354 next unless ref $cmds eq 'ARRAY' and @$cmds > 0; 1399 next unless ref $cmds eq 'ARRAY' and @$cmds > 0;
1355 1400
1356 my $lbl = join "; ", @$cmds; 1401 my $lbl = join "; ", @$cmds;
1357 my $nam = CFPlus::BindingEditor::keycombo_to_name ($mod, $sym); 1402 my $nam = CFPlus::BindingEditor::keycombo_to_name ($mod, $sym);
1358 $binding_list->add (my $hb = new CFPlus::UI::HBox); 1403 $binding_list->add (my $hb = new CFPlus::UI::HBox);
1359 $hb->add (new CFPlus::UI::Button 1404 $hb->add (new CFPlus::UI::Button
1360 text => "delete", 1405 text => "delete",
1361 tooltip => "Deletes the binding", 1406 tooltip => "Deletes the binding",
1362 on_activate => sub { 1407 on_activate => sub {
1363 $binding_list->remove ($hb); 1408 $binding_list->remove ($hb);
1364 delete $::CFG->{profile}{default}{bindings}{$mod}{$sym}; 1409 delete $PROFILE->{bindings}{$mod}{$sym};
1365 0 1410 0
1366 }); 1411 });
1367 1412
1368 $hb->add (new CFPlus::UI::Button 1413 $hb->add (new CFPlus::UI::Button
1369 text => "edit", 1414 text => "edit",
1370 tooltip => "Edits the binding", 1415 tooltip => "Edits the binding",
1371 on_activate => sub { 1416 on_activate => sub {
1372 $::BIND_EDITOR->set_binding ( 1417 $::BIND_EDITOR->set_binding (
1373 $mod, $sym, $::CFG->{profile}{default}{bindings}{$mod}{$sym}, 1418 $mod, $sym, $PROFILE->{bindings}{$mod}{$sym},
1374 sub { 1419 sub {
1375 my ($nmod, $nsym, $ncmds) = @_; 1420 my ($nmod, $nsym, $ncmds) = @_;
1376 $::BIND_EDITOR->cfg_unbind ($mod, $sym); 1421 $::BIND_EDITOR->cfg_unbind ($mod, $sym);
1377 $::BIND_EDITOR->cfg_bind ($nmod, $nsym, $ncmds); 1422 $::BIND_EDITOR->cfg_bind ($nmod, $nsym, $ncmds);
1378 $refresh->(); 1423 $refresh->();
1877 CFPlus::Mix_AllocateChannels 8; 1922 CFPlus::Mix_AllocateChannels 8;
1878 CFPlus::MixMusic::volume $CFG->{bgm_volume} * 128; 1923 CFPlus::MixMusic::volume $CFG->{bgm_volume} * 128;
1879 1924
1880 audio_music_finished; 1925 audio_music_finished;
1881 1926
1927 local $_;
1882 while (<$fh>) { 1928 while (<$fh>) {
1883 next if /^\s*#/; 1929 next if /^\s*#/;
1884 next if /^\s*$/; 1930 next if /^\s*$/;
1885 1931
1886 my ($file, $volume, $event) = split /\s+/, $_, 3; 1932 my ($file, $volume, $event) = split /\s+/, $_, 3;
2020 log_fontsize => 0.7, 2066 log_fontsize => 0.7,
2021 gauge_fontsize => 1, 2067 gauge_fontsize => 1,
2022 gauge_size => 0.35, 2068 gauge_size => 0.35,
2023 stat_fontsize => 0.7, 2069 stat_fontsize => 0.7,
2024 mapsize => 100, 2070 mapsize => 100,
2025 say_command => 'say', 2071 say_command => 'chat',
2026 audio_enable => 1, 2072 audio_enable => 1,
2027 bgm_enable => 1, 2073 bgm_enable => 1,
2028 bgm_volume => 0.25, 2074 bgm_volume => 0.25,
2029 face_prefetch => 0, 2075 face_prefetch => 0,
2030 output_sync => 1, 2076 output_sync => 1,
2084# } 2130# }
2085# my $t2 = Time::HiRes::time; 2131# my $t2 = Time::HiRes::time;
2086# warn $t2-$t1; 2132# warn $t2-$t1;
2087# } 2133# }
2088 2134
2135 $startup_done->();
2136
2089 video_init; 2137 video_init;
2090 audio_init; 2138 audio_init;
2091} 2139}
2092 2140
2093show_tip_of_the_day if $CFG->{show_tips}; 2141show_tip_of_the_day if $CFG->{show_tips};

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines