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.121 by root, Sun Oct 1 18:17:38 2006 UTC vs.
Revision 1.135 by elmex, Tue Dec 5 16:53:29 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 75
56my $MAX_FPS = 60; 76my $MAX_FPS = 60;
57my $MIN_FPS = 5; # unused as of yet 77my $MIN_FPS = 5; # unused as of yet
58 78
59our $META_SERVER = "crossfire.real-time.com:13326"; 79our $META_SERVER = "http://metaserver.schmorp.de/current.json";
60 80
61our $LAST_REFRESH; 81our $LAST_REFRESH;
62our $NOW; 82our $NOW;
63 83
64our $CFG; 84our $CFG;
102 122
103our $INVENTORY_PAGE; 123our $INVENTORY_PAGE;
104our $STATS_PAGE; 124our $STATS_PAGE;
105our $SKILL_PAGE; 125our $SKILL_PAGE;
106our $SPELL_PAGE; 126our $SPELL_PAGE;
127our $SPELL_LIST;
107 128
108our $HELP_WINDOW; 129our $HELP_WINDOW;
109our $MESSAGE_WINDOW; 130our $MESSAGE_WINDOW;
110our $FLOORBOX; 131our $FLOORBOX;
111our $GAUGES; 132our $GAUGES;
129our $BIND_EDITOR; 150our $BIND_EDITOR;
130our $BIND_UPD_CB; 151our $BIND_UPD_CB;
131 152
132our $PICKUP_CFG; 153our $PICKUP_CFG;
133 154
155our $IN_BUILD_MODE;
156our $BUILD_BUTTON;
157
134sub status { 158sub status {
135 $STATUSBOX->add (CFPlus::asxml $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]); 159 $STATUSBOX->add (CFPlus::asxml $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]);
136} 160}
137 161
138sub debug { 162sub debug {
139 $DEBUG_STATUS->set_text ($_[0]); 163 $DEBUG_STATUS->set_text ($_[0]);
164}
165
166sub message {
167 my ($para) = @_;
168
169 my $time = sprintf "%02d:%02d:%02d", (localtime time)[2,1,0];
170
171 $para->{markup} = "<span foreground='#ffffff'>$time</span> $para->{markup}";
172
173 $LOGVIEW->add_paragraph ($para);
174 $LOGVIEW->scroll_to_bottom;
140} 175}
141 176
142sub destroy_query_dialog { 177sub destroy_query_dialog {
143 (delete $_[0]{query_dialog})->destroy 178 (delete $_[0]{query_dialog})->destroy
144 if $_[0]{query_dialog}; 179 if $_[0]{query_dialog};
349 384
350 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32; 385 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32;
351 386
352 my ($host, $port) = split /:/, $PROFILE->{host}; 387 my ($host, $port) = split /:/, $PROFILE->{host};
353 388
354 $MAP = new CFPlus::Map $mapsize, $mapsize; 389 $MAP = new CFPlus::Map;
355 390
356 $CONN = eval { 391 $CONN = eval {
357 new CFPlus::Protocol 392 new CFPlus::Protocol
358 host => $host, 393 host => $host,
359 port => $port || 13327, 394 port => $port || 13327,
397sub stop_game { 432sub stop_game {
398 $LOGIN_BUTTON->set_text ("Login"); 433 $LOGIN_BUTTON->set_text ("Login");
399 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER); 434 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER);
400 $SETUP_DIALOG->show; 435 $SETUP_DIALOG->show;
401 $PL_WINDOW->hide; 436 $PL_WINDOW->hide;
402 $SPELL_PAGE->clear_spells; 437 $SPELL_LIST->clear_spells;
403 438
404 return unless $CONN; 439 return unless $CONN;
405 440
406 status "connection closed"; 441 status "connection closed";
407 442
634 $table->add (1, 1, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 2; 0 }); 669 $table->add (1, 1, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 2; 0 });
635 $table->add (0, 2, new CFPlus::UI::Label text => "Show FPS"); 670 $table->add (0, 2, new CFPlus::UI::Label text => "Show FPS");
636 $table->add (1, 2, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 4; 0 }); 671 $table->add (1, 2, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 4; 0 });
637 $table->add (0, 3, new CFPlus::UI::Label text => "Suppress Tooltips"); 672 $table->add (0, 3, new CFPlus::UI::Label text => "Suppress Tooltips");
638 $table->add (1, 3, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 8; 0 }); 673 $table->add (1, 3, new CFPlus::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 8; 0 });
674 $table->add (0, 4, new CFPlus::UI::Button text => "die on click(tm)", on_activate => sub { die "violator" } );
639 675
640 my @default_smooth = (0.05, 0.13, 0.05, 0.13, 0.30, 0.13, 0.05, 0.13, 0.05); 676 my @default_smooth = (0.05, 0.13, 0.05, 0.13, 0.30, 0.13, 0.05, 0.13, 0.05);
641 677
642 for my $x (0..2) { 678 for my $x (0..2) {
643 for my $y (0 .. 2) { 679 for my $y (0 .. 2) {
825 861
826 my $table = $METASERVER->{table}; 862 my $table = $METASERVER->{table};
827 $table->clear; 863 $table->clear;
828 $table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list..."); 864 $table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list...");
829 865
830 my $buf; 866 my $ok = 0;
831 867
832 my $fh = new IO::Socket::INET PeerHost => $META_SERVER, Blocking => 0; 868 CFPlus::background {
869 my $ua = CFPlus::lwp_useragent;
833 870
834 unless ($fh) { 871 CFPlus::background_msg CFPlus::from_json +(CFPlus::lwp_check $ua->get ($META_SERVER))->decoded_content;
835 $label->set_text ("unable to contact metaserver: $!"); 872 } sub {
836 return; 873 my ($msg) = @_;
837 } 874 if ($msg) {
838
839 Event->io (fd => $fh, poll => 'r', cb => sub {
840 my $res = sysread $fh, $buf, 8192, length $buf;
841
842 if (!defined $res) {
843 $_[0]->w->cancel;
844 $label->set_text ("error while retrieving server list: $!");
845 } elsif ($res == 0) {
846 $_[0]->w->cancel;
847 status "server list retrieved";
848
849 utf8::decode $buf if utf8::valid $buf;
850
851 $table->clear; 875 $table->clear;
852 876
853 my @tip = ( 877 my @tip = (
854 "The current number of users logged in on the server.", 878 "The current number of users logged in on the server.",
855 "The hostname of the server.", 879 "The hostname of the server.",
865 for 0 .. $#col; 889 for 0 .. $#col;
866 890
867 my @align = qw(1 0 1 1 -1); 891 my @align = qw(1 0 1 1 -1);
868 892
869 my $y = 0; 893 my $y = 0;
870 for my $m (sort { $b->[3] <=> $a->[3] } map [split /\|/], split /\015?\012/, $buf) { 894 for my $m (
895 sort {
896 $b->{version} <=> $a->{version}
897 or $b->{users} <=> $a->{users}
898 }
899 @{ $msg->{servers} }
900 ) {
871 my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) = @$m; 901 my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) =
902 @$m{qw(ip age hostname users version description ibytes obytes uptime)};
872 903
873 for ($desc) { 904 for ($desc) {
874 s/<br>/\n/gi; 905 s/<br>/\n/gi;
875 s/<li>/\n· /gi; 906 s/<li>/\n· /gi;
876 s/<.*?>//sgi; 907 s/<.*?>//sgi;
877 s/&/&amp;/g; 908 s/&amp;/&/g;
878 s/</&lt;/g; 909 s/&lt;/</g;
879 s/>/&gt;/g; 910 s/&gt;/>/g;
880 } 911 }
881 912
882 $uptime = sprintf "%dd %02d:%02d:%02d", 913 $uptime = sprintf "%dd %02d:%02d:%02d",
883 (int $m->[8] / 86400), 914 (int $uptime / 86400),
884 (int $m->[8] / 3600) % 24, 915 (int $uptime / 3600) % 24,
885 (int $m->[8] / 60) % 60, 916 (int $uptime / 60) % 60,
886 $m->[8] % 60; 917 $uptime % 60;
887 918
888 $m = [$users, $host, $uptime, $version, $desc]; 919 $m = [$users, $host, $uptime, $version, $desc];
889 920
890 $y++; 921 $y++;
891 922
901 ), 932 ),
902 (new CFPlus::UI::Empty expand => 1), 933 (new CFPlus::UI::Empty expand => 1),
903 ]); 934 ]);
904 935
905 $table->add ($_, $y, new CFPlus::UI::Label 936 $table->add ($_, $y, new CFPlus::UI::Label
937 max_w => $::WIDTH * 0.4,
906 ellipsise => 0, 938 ellipsise => 0,
907 align => $align[$_], 939 align => $align[$_],
908 text => $m->[$_], 940 text => $m->[$_],
909 tooltip => $tip[$_], 941 tooltip => $tip[$_],
942 fg => ($m->[3] =~ /\+$/ ? [1, 1, 1] : [.7, .7, .7]),
910 can_hover => 1, 943 can_hover => 1,
911 can_events => 1, 944 can_events => 1,
912 fontsize => 0.8) 945 fontsize => 0.8)
913 for 0 .. $#$m; 946 for 0 .. $#$m;
914 } 947 }
948 } else {
949 $ok or $label->set_text ("error while contacting metaserver");
915 } 950 }
916 }); 951 };
952
917} 953}
918 954
919sub metaserver_dialog { 955sub metaserver_dialog {
920 my $vbox = new CFPlus::UI::VBox; 956 my $vbox = new CFPlus::UI::VBox;
921 my $table = new CFPlus::UI::Table; 957 my $table = new CFPlus::UI::Table;
925 title => "Server List", 961 title => "Server List",
926 name => 'metaserver_dialog', 962 name => 'metaserver_dialog',
927 x => 'center', 963 x => 'center',
928 y => 'center', 964 y => 'center',
929 z => 3, 965 z => 3,
966 force_w => $::WIDTH * 0.9,
930 force_h => $::HEIGHT * 0.4, 967 force_h => $::HEIGHT * 0.7,
931 child => $vbox, 968 child => $vbox,
932 has_close_button => 1, 969 has_close_button => 1,
933 table => $table, 970 table => $table,
934 on_visibility_change => sub { 971 on_visibility_change => sub {
935 update_metaserver ($_[0]) if $_[1]; 972 update_metaserver ($_[0]) if $_[1];
1156 ["Boots" => PICKUP_BOOTS], 1193 ["Boots" => PICKUP_BOOTS],
1157 ["Gloves" => PICKUP_GLOVES], 1194 ["Gloves" => PICKUP_GLOVES],
1158 ["Cloaks" => PICKUP_CLOAK], 1195 ["Cloaks" => PICKUP_CLOAK],
1159 ], 1196 ],
1160 1197
1161 ["Readables", 2, 2, 1198 ["Readables", 2, 0,
1162 ["Spellbooks" => PICKUP_SPELLBOOK], 1199 ["Spellbooks" => PICKUP_SPELLBOOK],
1163 ["Skillscrolls" => PICKUP_SKILLSCROLL], 1200 ["Skillscrolls" => PICKUP_SKILLSCROLL],
1164 ["Normal Books/Scrolls" => PICKUP_READABLES], 1201 ["Normal Books/Scrolls" => PICKUP_READABLES],
1165 ], 1202 ],
1166 ["Misc", 2, 7, 1203 ["Misc", 2, 5,
1167 ["Food" => PICKUP_FOOD], 1204 ["Food" => PICKUP_FOOD],
1168 ["Drinks" => PICKUP_DRINK], 1205 ["Drinks" => PICKUP_DRINK],
1169 ["Valuables (Money, Gems)" => PICKUP_VALUABLES], 1206 ["Valuables (Money, Gems)" => PICKUP_VALUABLES],
1170 ["Keys" => PICKUP_KEY], 1207 ["Keys" => PICKUP_KEY],
1171 ["Magical Items" => PICKUP_MAGICAL], 1208 ["Magical Items" => PICKUP_MAGICAL],
1172 ["Potions" => PICKUP_POTION], 1209 ["Potions" => PICKUP_POTION],
1173 ["Magic Devices" => PICKUP_MAGIC_DEVICE], 1210 ["Magic Devices" => PICKUP_MAGIC_DEVICE],
1174 ["Ignore cursed" => PICKUP_NOT_CURSED], 1211 ["Ignore cursed" => PICKUP_NOT_CURSED],
1175 ["Jewelery" => PICKUP_JEWELS], 1212 ["Jewelery" => PICKUP_JEWELS],
1213 ["Flesh" => PICKUP_FLESH],
1176 ], 1214 ],
1177 ["Weight/Value ratio", 2, 17] 1215 ["Weight/Value ratio", 2, 17]
1178 ) 1216 )
1179 { 1217 {
1180 my ($title, $x, $y, @bits) = @$_; 1218 my ($title, $x, $y, @bits) = @$_;
1230 $table 1268 $table
1231} 1269}
1232 1270
1233my %SORT_ORDER = ( 1271my %SORT_ORDER = (
1234 type => undef, 1272 type => undef,
1235 mtime => sub { sort { 1273 mtime => sub {
1274 my $NOW = time;
1275 sort {
1276 my $atime = $a->{mtime} - $NOW; $atime = $atime < 5 * 60 ? int $atime / 60 : 6;
1277 my $btime = $b->{mtime} - $NOW; $btime = $btime < 5 * 60 ? int $btime / 60 : 6;
1278
1236 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED) 1279 ($a->{flags} & F_LOCKED) <=> ($b->{flags} & F_LOCKED)
1237 or $b->{mtime} <=> $a->{mtime} 1280 or $btime <=> $atime
1238 or $a->{type} <=> $b->{type} 1281 or $a->{type} <=> $b->{type}
1282 } @_
1239 } @_ }, 1283 },
1240 weight => sub { sort { 1284 weight => sub { sort {
1241 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1) 1285 $a->{weight} * ($a->{nrof} || 1) <=> $b->{weight} * ($b->{nrof} || 1)
1242 or $a->{type} <=> $b->{type} 1286 or $a->{type} <=> $b->{type}
1243 } @_ }, 1287 } @_ },
1244); 1288);
1269 #TODO# update to weigh/maxweight 1313 #TODO# update to weigh/maxweight
1270 $hb1->add ($STATWIDS->{i_weight} = new CFPlus::UI::Label align => -1); 1314 $hb1->add ($STATWIDS->{i_weight} = new CFPlus::UI::Label align => -1);
1271 1315
1272 $vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1); 1316 $vb1->add (my $sw1 = new CFPlus::UI::ScrolledWindow expand => 1, scroll_y => 1);
1273 $sw1->add ($INV = new CFPlus::UI::Inventory); 1317 $sw1->add ($INV = new CFPlus::UI::Inventory);
1318 $INV->set_sort_order ($SORT_ORDER{$::CFG->{inv_sort}});
1274 1319
1275 $hb->add (my $vb2 = new CFPlus::UI::VBox); 1320 $hb->add (my $vb2 = new CFPlus::UI::VBox);
1276 1321
1277 $vb2->add ($INV_RIGHT_HB = new CFPlus::UI::HBox); 1322 $vb2->add ($INV_RIGHT_HB = new CFPlus::UI::HBox);
1278 1323
1318 $ntb->add ( 1363 $ntb->add (
1319 "Skills (F3)" => $SKILL_PAGE = skill_window, 1364 "Skills (F3)" => $SKILL_PAGE = skill_window,
1320 "Shows all your Skills." 1365 "Shows all your Skills."
1321 ); 1366 );
1322 1367
1323 my $spellsw = new CFPlus::UI::ScrolledWindow (expand => 1, scroll_y => 1); 1368 my $spellsw = $SPELL_PAGE = new CFPlus::UI::ScrolledWindow (expand => 1, scroll_y => 1);
1324 $spellsw->add ($SPELL_PAGE = new CFPlus::UI::SpellList); 1369 $spellsw->add ($SPELL_LIST = new CFPlus::UI::SpellList);
1325 $ntb->add ( 1370 $ntb->add (
1326 "Spellbook (F4)" => $spellsw, 1371 "Spellbook (F4)" => $spellsw,
1327 "Displays all spells you have and lets you edit keyboard shortcuts for them." 1372 "Displays all spells you have and lets you edit keyboard shortcuts for them."
1328 ); 1373 );
1329 $ntb->add ( 1374 $ntb->add (
1820 ); 1865 );
1821 1866
1822 $BUTTONBAR->add (new CFPlus::UI::Flopper text => "Help!", other => $HELP_WINDOW = help_window, 1867 $BUTTONBAR->add (new CFPlus::UI::Flopper text => "Help!", other => $HELP_WINDOW = help_window,
1823 tooltip => "View Documentation"); 1868 tooltip => "View Documentation");
1824 1869
1870
1825 $BUTTONBAR->add (new CFPlus::UI::Button 1871 $BUTTONBAR->add (new CFPlus::UI::Button
1826 text => "Quit", 1872 text => "Quit",
1827 tooltip => "Terminates the program", 1873 tooltip => "Terminates the program",
1828 on_activate => sub { 1874 on_activate => sub {
1829 if ($CONN) { 1875 if ($CONN) {
1840 } 1886 }
1841 1887
1842 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 1888 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
1843} 1889}
1844 1890
1891sub setup_build_button {
1892 my ($enabled) = @_;
1893 if ($enabled) {
1894 $BUILD_BUTTON ||= new CFPlus::UI::Button
1895 text => "Build",
1896 tooltip => "Opens the ingame builder",
1897 on_activate => sub {
1898 if ($CONN) {
1899 $CONN->send_ext_req (builder_player_items => sub {
1900 open_ingame_editor ($_[0]) if exists $_[0]->{items};
1901 });
1902 }
1903 0
1904 };
1905 $BUTTONBAR->add ($BUILD_BUTTON);
1906 } else {
1907 $BUILD_BUTTON->hide if $BUILD_BUTTON;
1908 }
1909}
1910
1911sub open_ingame_editor {
1912 my ($msg) = @_;
1913
1914 my $win = new CFPlus::UI::Toplevel
1915 x => 0,
1916 y => 'center',
1917 z => 4,
1918 name => 'builder_window',
1919 force_w => int $WIDTH * 1/4,
1920 force_h => int $HEIGHT * 3/4,
1921 title => "In game builder",
1922 has_close_button => 1;
1923
1924 my $r = new CFPlus::UI::ScrolledWindow (
1925 expand => 1,
1926 scroll_y => 1
1927 );
1928 $r->add (my $vb = new CFPlus::UI::VBox);
1929 $win->add ($r);
1930
1931
1932 $vb->add (
1933 new CFPlus::UI::Button
1934 text => "Disable build mode",
1935 on_activate => sub { $::IN_BUILD_MODE = undef }
1936 );
1937 $vb->add (
1938 new CFPlus::UI::Button
1939 text => "ERASE",
1940 on_activate => sub { $::IN_BUILD_MODE = { do_erase => 1 } }
1941 );
1942
1943 for my $itemarchname (
1944 sort {
1945 $msg->{items}->{$a}->{build_arch_name}
1946 cmp $msg->{items}->{$b}->{build_arch_name}
1947 } keys %{$msg->{items}}
1948 ) {
1949 my $info = $msg->{items}->{$itemarchname};
1950 $vb->add (
1951 new CFPlus::UI::Button text => $info->{build_arch_name},
1952 on_activate => sub {
1953 $::IN_BUILD_MODE = { item => $itemarchname, info => $info };
1954
1955 if (grep { $msg->{items}->{$itemarchname}->{$_} } qw/has_connection has_name has_text/) {
1956 build_mode_query_arch_info ();
1957 }
1958 }
1959 );
1960 }
1961
1962 $win->show;
1963}
1964
1965sub build_mode_query_arch_info {
1966 my ($iteminfo) = $::IN_BUILD_MODE;
1967 my $itemarchname = $iteminfo->{item};
1968 my $info = $iteminfo->{info};
1969
1970 my $dialog = new CFPlus::UI::Toplevel
1971 x => "center",
1972 y => "center",
1973 z => 50,
1974 force_w => int $WIDTH * 1/2,
1975 title => "Enter information for placement of '$itemarchname'",
1976 has_close_button => 1;
1977
1978 $dialog->add (my $vb = new CFPlus::UI::VBox expand => 1);
1979
1980 $vb->add (my $table = new CFPlus::UI::Table expand => 1);
1981 my $row = 0;
1982 if ($info->{has_name}) {
1983 $table->add (0, $row, new CFPlus::UI::Label text => "Name:");
1984 $table->add (1, $row++, new CFPlus::UI::Entry expand => 1, on_changed => sub { $::IN_BUILD_MODE->{name} = $_[1]; 0 });
1985 }
1986 if ($info->{has_text}) {
1987 $table->add (0, $row, new CFPlus::UI::Label text => "Text:");
1988 $table->add (1, $row++, new CFPlus::UI::Entry expand => 1, on_changed => sub { $::IN_BUILD_MODE->{text} = $_[1]; 0 });
1989 }
1990 if ($info->{has_connection}) {
1991 $table->add (0, $row, new CFPlus::UI::Label text => "Connection ID:");
1992 $table->add (1, $row++,
1993 new CFPlus::UI::Entry
1994 expand => 1,
1995 on_changed => sub { $::IN_BUILD_MODE->{connection} = $_[1]; 0 },
1996 tooltip => "Enter the connection ID here. The connection ID connects actors like a lever to a gate or a magic ear to a gate"
1997 );
1998 }
1999
2000 $vb->add (my $hb = new CFPlus::UI::HBox expand => 1);
2001 $hb->add (new CFPlus::UI::Button
2002 text => "Close",
2003 expand => 1,
2004 on_activate => sub { $dialog->hide; 0 },
2005 );
2006 $dialog->show;
2007}
2008
1845sub video_shutdown { 2009sub video_shutdown {
1846 CFPlus::OpenGL::shutdown; 2010 CFPlus::OpenGL::shutdown;
1847 2011
1848 undef $SDL_ACTIVE; 2012 undef $SDL_ACTIVE;
1849} 2013}
1880 CFPlus::Mix_AllocateChannels 8; 2044 CFPlus::Mix_AllocateChannels 8;
1881 CFPlus::MixMusic::volume $CFG->{bgm_volume} * 128; 2045 CFPlus::MixMusic::volume $CFG->{bgm_volume} * 128;
1882 2046
1883 audio_music_finished; 2047 audio_music_finished;
1884 2048
2049 local $_;
1885 while (<$fh>) { 2050 while (<$fh>) {
1886 next if /^\s*#/; 2051 next if /^\s*#/;
1887 next if /^\s*$/; 2052 next if /^\s*$/;
1888 2053
1889 my ($file, $volume, $event) = split /\s+/, $_, 3; 2054 my ($file, $volume, $event) = split /\s+/, $_, 3;
2023 log_fontsize => 0.7, 2188 log_fontsize => 0.7,
2024 gauge_fontsize => 1, 2189 gauge_fontsize => 1,
2025 gauge_size => 0.35, 2190 gauge_size => 0.35,
2026 stat_fontsize => 0.7, 2191 stat_fontsize => 0.7,
2027 mapsize => 100, 2192 mapsize => 100,
2028 say_command => 'say', 2193 say_command => 'chat',
2029 audio_enable => 1, 2194 audio_enable => 1,
2030 bgm_enable => 1, 2195 bgm_enable => 1,
2031 bgm_volume => 0.25, 2196 bgm_volume => 0.25,
2032 face_prefetch => 0, 2197 face_prefetch => 0,
2033 output_sync => 1, 2198 output_sync => 1,
2087# } 2252# }
2088# my $t2 = Time::HiRes::time; 2253# my $t2 = Time::HiRes::time;
2089# warn $t2-$t1; 2254# warn $t2-$t1;
2090# } 2255# }
2091 2256
2257 $startup_done->();
2258
2092 video_init; 2259 video_init;
2093 audio_init; 2260 audio_init;
2094} 2261}
2095 2262
2096show_tip_of_the_day if $CFG->{show_tips}; 2263show_tip_of_the_day if $CFG->{show_tips};

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines