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.60 by root, Tue Jun 6 02:55:50 2006 UTC vs.
Revision 1.81 by elmex, Wed Jun 28 09:42:40 2006 UTC

36 36
37use CFClient; 37use CFClient;
38use CFClient::OpenGL (); 38use CFClient::OpenGL ();
39use CFClient::Protocol; 39use CFClient::Protocol;
40use CFClient::UI; 40use CFClient::UI;
41use CFClient::BindingEditor;
41use CFClient::MapWidget; 42use CFClient::MapWidget;
42 43
43$SIG{QUIT} = sub { Carp::cluck "QUIT" }; 44$SIG{QUIT} = sub { Carp::cluck "QUIT" };
44 45
45$Event::DIED = sub { 46$Event::DIED = sub {
84our $CONSOLE; 85our $CONSOLE;
85our $METASERVER; 86our $METASERVER;
86our $LOGIN_BUTTON; 87our $LOGIN_BUTTON;
87our $QUIT_DIALOG; 88our $QUIT_DIALOG;
88our $HOST_ENTRY; 89our $HOST_ENTRY;
90our $SERVER_INFO;
89 91
90our $SETUP_DIALOG; 92our $SETUP_DIALOG;
91our $SETUP_NOTEBOOK; 93our $SETUP_NOTEBOOK;
92our $SETUP_SERVER; 94our $SETUP_SERVER;
93our $SETUP_KEYBOARD; 95our $SETUP_KEYBOARD;
114our $INV; 116our $INV;
115our $INVR; 117our $INVR;
116our $INV_RIGHT_HB; 118our $INV_RIGHT_HB;
117 119
118our $BIND_EDITOR; 120our $BIND_EDITOR;
121our $BIND_UPD_CB;
119 122
120our $PICKUP_CFG; 123our $PICKUP_CFG;
121 124
122sub status { 125sub status {
123 $STATUSBOX->add (CFClient::UI::Label::escape $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]); 126 $STATUSBOX->add (CFClient::UI::Label::escape $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]);
154 $hbox->add (new CFClient::UI::Button 157 $hbox->add (new CFClient::UI::Button
155 text => "No", 158 text => "No",
156 on_activate => sub { 159 on_activate => sub {
157 $conn->send ("reply n"); 160 $conn->send ("reply n");
158 $dialog->destroy; 161 $dialog->destroy;
162 0
159 } 163 }
160 ); 164 );
161 $hbox->add (new CFClient::UI::Button 165 $hbox->add (new CFClient::UI::Button
162 text => "Yes", 166 text => "Yes",
163 on_activate => sub { 167 on_activate => sub {
164 $conn->send ("reply y"); 168 $conn->send ("reply y");
165 destroy_query_dialog $conn; 169 destroy_query_dialog $conn;
170 0
166 }, 171 },
167 ); 172 );
168 173
169 $dialog->focus_in; 174 $dialog->grab_focus;
170 175
171 } elsif ($flags & CS_QUERY_SINGLECHAR) { 176 } elsif ($flags & CS_QUERY_SINGLECHAR) {
172 $dialog->{tooltip} = "Press a key (click on the entry to make sure it has keyboard focus)"; 177 $dialog->{tooltip} = "Press a key (click on the entry to make sure it has keyboard focus)";
173 178
174 if ($prompt =~ /Now choose a character|Press any key for the next race/i) { 179 if ($prompt =~ /Now choose a character|Press any key for the next race/i) {
184 $table->add (0, 0, new CFClient::UI::Button 189 $table->add (0, 0, new CFClient::UI::Button
185 text => "Next Race", 190 text => "Next Race",
186 on_activate => sub { 191 on_activate => sub {
187 $conn->send ("reply n"); 192 $conn->send ("reply n");
188 destroy_query_dialog $conn; 193 destroy_query_dialog $conn;
194 0
189 }, 195 },
190 ); 196 );
191 $table->add (2, 0, new CFClient::UI::Button 197 $table->add (2, 0, new CFClient::UI::Button
192 text => "Accept", 198 text => "Accept",
193 on_activate => sub { 199 on_activate => sub {
194 $conn->send ("reply d"); 200 $conn->send ("reply d");
195 destroy_query_dialog $conn; 201 destroy_query_dialog $conn;
202 0
196 }, 203 },
197 ); 204 );
198 205
199 unshift @dialog, new CFClient::UI::Label 206 unshift @dialog, new CFClient::UI::Label
200 max_w => $::WIDTH * 0.4, 207 max_w => $::WIDTH * 0.4,
230 $table->add (0, 0, new CFClient::UI::Button 237 $table->add (0, 0, new CFClient::UI::Button
231 text => "Roll Again", 238 text => "Roll Again",
232 on_activate => sub { 239 on_activate => sub {
233 $conn->send ("reply y"); 240 $conn->send ("reply y");
234 destroy_query_dialog $conn; 241 destroy_query_dialog $conn;
242 0
235 }, 243 },
236 ); 244 );
237 245
238 # center: swap stats 246 # center: swap stats
239 my ($sw1, $sw2) = map +(new CFClient::UI::Combobox 247 my ($sw1, $sw2) = map +(new CFClient::UI::Combobox
240 value => $_, 248 value => $_,
241 options => [ 249 options => [
242 [Str => 1, "Strength ($conn->{stat}{+CS_STAT_STR})"], 250 [1 => "Str", "Strength ($conn->{stat}{+CS_STAT_STR})"],
243 [Dex => 2, "Dexterity ($conn->{stat}{+CS_STAT_DEX})"], 251 [2 => "Dex", "Dexterity ($conn->{stat}{+CS_STAT_DEX})"],
244 [Con => 3, "Constitution ($conn->{stat}{+CS_STAT_CON})"], 252 [3 => "Con", "Constitution ($conn->{stat}{+CS_STAT_CON})"],
245 [Int => 4, "Intelligence ($conn->{stat}{+CS_STAT_INT})"], 253 [4 => "Int", "Intelligence ($conn->{stat}{+CS_STAT_INT})"],
246 [Wis => 5, "Wisdom ($conn->{stat}{+CS_STAT_WIS})"], 254 [5 => "Wis", "Wisdom ($conn->{stat}{+CS_STAT_WIS})"],
247 [Pow => 6, "Power ($conn->{stat}{+CS_STAT_POW})"], 255 [6 => "Pow", "Power ($conn->{stat}{+CS_STAT_POW})"],
248 [Cha => 7, "Charisma ($conn->{stat}{+CS_STAT_CHA})"], 256 [7 => "Cha", "Charisma ($conn->{stat}{+CS_STAT_CHA})"],
249 ], 257 ],
250 ), 1 .. 2; 258 ), 1 .. 2;
251 259
252 $table->add (2, 0, new CFClient::UI::Button 260 $table->add (2, 0, new CFClient::UI::Button
253 text => "Swap Stats", 261 text => "Swap Stats",
254 on_activate => sub { 262 on_activate => sub {
255 $conn->{stat_change_with} = $sw2->{value}; 263 $conn->{stat_change_with} = $sw2->{value};
256 $conn->send ("reply $sw1->{value}"); 264 $conn->send ("reply $sw1->{value}");
257 destroy_query_dialog $conn; 265 destroy_query_dialog $conn;
266 0
258 }, 267 },
259 ); 268 );
260 $table->add (2, 1, new CFClient::UI::HBox children => [$sw1, $sw2]); 269 $table->add (2, 1, new CFClient::UI::HBox children => [$sw1, $sw2]);
261 270
262 # right: accept 271 # right: accept
264 text => "Accept", 273 text => "Accept",
265 on_activate => sub { 274 on_activate => sub {
266 $conn->send ("reply n"); 275 $conn->send ("reply n");
267 $STATS_WINDOW->hide; 276 $STATS_WINDOW->hide;
268 destroy_query_dialog $conn; 277 destroy_query_dialog $conn;
278 0
269 }, 279 },
270 ); 280 );
271 281
272 unshift @dialog, new CFClient::UI::Label 282 unshift @dialog, new CFClient::UI::Label
273 max_w => $::WIDTH * 0.4, 283 max_w => $::WIDTH * 0.4,
283 293
284 push @dialog, my $entry = new CFClient::UI::Entry 294 push @dialog, my $entry = new CFClient::UI::Entry
285 on_changed => sub { 295 on_changed => sub {
286 $conn->send ("reply $_[1]"); 296 $conn->send ("reply $_[1]");
287 destroy_query_dialog $conn; 297 destroy_query_dialog $conn;
298 0
288 }, 299 },
289 ; 300 ;
290 301
291 $entry->focus_in; 302 $entry->grab_focus;
292 303
293 } else { 304 } else {
294 $dialog->{tooltip} = "Enter the reply and press return (click on the entry to make sure it has keyboard focus)"; 305 $dialog->{tooltip} = "Enter the reply and press return (click on the entry to make sure it has keyboard focus)";
295 306
296 push @dialog, my $entry = new CFClient::UI::Entry 307 push @dialog, my $entry = new CFClient::UI::Entry
297 $flags & CS_QUERY_HIDEINPUT ? (hidden => "*") : (), 308 $flags & CS_QUERY_HIDEINPUT ? (hidden => "*") : (),
298 on_activate => sub { 309 on_activate => sub {
299 $conn->send ("reply $_[1]"); 310 $conn->send ("reply $_[1]");
300 destroy_query_dialog $conn; 311 destroy_query_dialog $conn;
312 0
301 }, 313 },
302 ; 314 ;
303 315
304 $entry->focus_in; 316 $entry->grab_focus;
305 } 317 }
306 318
307 $vbox->add (@dialog); 319 $vbox->add (@dialog);
308 $dialog->show; 320 $dialog->show;
309} 321}
314 $LOGIN_BUTTON->set_text ("Logout"); 326 $LOGIN_BUTTON->set_text ("Logout");
315 $SETUP_DIALOG->hide; 327 $SETUP_DIALOG->hide;
316 328
317 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32; 329 my $mapsize = List::Util::min 32, List::Util::max 11, int $WIDTH * $CFG->{mapsize} * 0.01 / 32;
318 330
319 my ($host, $port) = split /:/, $CFG->{host}; 331 my ($host, $port) = split /:/, $CFG->{profile}{default}{host};
320 332
321 $MAP = new CFClient::Map $mapsize, $mapsize; 333 $MAP = new CFClient::Map $mapsize, $mapsize;
322 334
323 $CONN = eval { 335 $CONN = eval {
324 new CFClient::Protocol 336 new CFClient::Protocol
325 host => $host, 337 host => $host,
326 port => $port || 13327, 338 port => $port || 13327,
327 user => $CFG->{user}, 339 user => $CFG->{profile}{default}{user},
328 pass => $CFG->{password}, 340 pass => $CFG->{profile}{default}{password},
329 mapw => $mapsize, 341 mapw => $mapsize,
330 maph => $mapsize, 342 maph => $mapsize,
331 343
332 map_widget => $MAPWIDGET, 344 map_widget => $MAPWIDGET,
333 logview => $LOGVIEW, 345 logview => $LOGVIEW,
362sub stop_game { 374sub stop_game {
363 $LOGIN_BUTTON->set_text ("Login"); 375 $LOGIN_BUTTON->set_text ("Login");
364 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER); 376 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER);
365 $SETUP_DIALOG->show; 377 $SETUP_DIALOG->show;
366 $INV_WINDOW->hide; 378 $INV_WINDOW->hide;
379 $SETUP_SPELLS->clear_spells;
367 380
368 return unless $CONN; 381 return unless $CONN;
369 382
370 status "connection closed"; 383 status "connection closed";
371 384
372 destroy_query_dialog $CONN; 385 destroy_query_dialog $CONN;
373 $CONN->destroy; 386 $CONN->destroy;
374 $CONN = 0; # false, does not autovivify 387 $CONN = 0; # false, does not autovivify
388
389 undef $MAP;
375} 390}
376 391
377sub graphics_setup { 392sub graphics_setup {
378 my $vbox = new CFClient::UI::VBox; 393 my $vbox = new CFClient::UI::VBox;
379 394
397 412
398 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen"); 413 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen");
399 $table->add (1, $row++, new CFClient::UI::CheckBox 414 $table->add (1, $row++, new CFClient::UI::CheckBox
400 state => $CFG->{fullscreen}, 415 state => $CFG->{fullscreen},
401 tooltip => "Bring the client into fullscreen mode.", 416 tooltip => "Bring the client into fullscreen mode.",
402 on_changed => sub { 417 on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 }
403 my ($self, $value) = @_;
404 $CFG->{fullscreen} = $value;
405 }
406 ); 418 );
407 419
408 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fast & Ugly"); 420 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fast & Ugly");
409 $table->add (1, $row++, new CFClient::UI::CheckBox 421 $table->add (1, $row++, new CFClient::UI::CheckBox
410 state => $CFG->{fast}, 422 state => $CFG->{fast},
411 tooltip => "Lower the visual quality considerably to speed up rendering.", 423 tooltip => "Lower the visual quality considerably to speed up rendering.",
412 on_changed => sub { 424 on_changed => sub { my ($self, $value) = @_; $CFG->{fast} = $value; 0 }
413 my ($self, $value) = @_;
414 $CFG->{fast} = $value;
415 }
416 ); 425 );
417 426
418 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Map Scale"); 427 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Map Scale");
419 $table->add (1, $row++, new CFClient::UI::Slider 428 $table->add (1, $row++, new CFClient::UI::Slider
420 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1], 429 range => [(log $CFG->{map_scale}) / (log 2), -3, 1, 0, 1],
421 tooltip => "Enlarge or shrink the displayed map. Changes are instant.", 430 tooltip => "Enlarge or shrink the displayed map. Changes are instant.",
422 on_changed => sub { 431 on_changed => sub { my ($self, $value) = @_; $CFG->{map_scale} = 2 ** $value; 0 }
423 my ($self, $value) = @_;
424 $CFG->{map_scale} = 2 ** $value;
425 }
426 ); 432 );
427 433
428 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fog of War"); 434 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fog of War");
429 $table->add (1, $row++, new CFClient::UI::CheckBox 435 $table->add (1, $row++, new CFClient::UI::CheckBox
430 state => $CFG->{fow_enable}, 436 state => $CFG->{fow_enable},
431 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.", 437 tooltip => "<b>Fog-of-War</b> marks areas that cannot be seen by the player. Changes are instant.",
432 on_changed => sub { 438 on_changed => sub { my ($self, $value) = @_; $CFG->{fow_enable} = $value; 0 }
433 my ($self, $value) = @_;
434 $CFG->{fow_enable} = $value;
435 }
436 ); 439 );
437 440
438 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Intensity"); 441 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Intensity");
439 $table->add (1, $row++, new CFClient::UI::Slider 442 $table->add (1, $row++, new CFClient::UI::Slider
440 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256], 443 range => [$CFG->{fow_intensity}, 0, 1, 0, 1 / 256],
441 tooltip => "<b>Fog of War Lightness.</b> The higher the intensity, the lighter the Fog-of-War color. Changes are instant.", 444 tooltip => "<b>Fog of War Lightness.</b> The higher the intensity, the lighter the Fog-of-War color. Changes are instant.",
442 on_changed => sub { 445 on_changed => sub { my ($self, $value) = @_; $CFG->{fow_intensity} = $value; 0 }
443 my ($self, $value) = @_;
444 $CFG->{fow_intensity} = $value;
445 }
446 ); 446 );
447 447
448 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Smooth"); 448 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "FoW Smooth");
449 $table->add (1, $row++, new CFClient::UI::CheckBox 449 $table->add (1, $row++, new CFClient::UI::CheckBox
450 state => $CFG->{fow_smooth}, 450 state => $CFG->{fow_smooth},
451 tooltip => "Smooth the Fog-of-War a bit to make it more realistic. Changes are instant.", 451 tooltip => "Smooth the Fog-of-War a bit to make it more realistic. Changes are instant.",
452 on_changed => sub { 452 on_changed => sub {
453 my ($self, $value) = @_; 453 my ($self, $value) = @_;
454 $CFG->{fow_smooth} = $value; 454 $CFG->{fow_smooth} = $value;
455 status "Fog of War smoothing requires OpenGL 1.2 or higher" if $CFClient::OpenGL::GL_VERSION < 1.2; 455 status "Fog of War smoothing requires OpenGL 1.2 or higher" if $CFClient::OpenGL::GL_VERSION < 1.2;
456 0
456 } 457 }
457 ); 458 );
458 459
459 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "GUI Fontsize"); 460 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "GUI Fontsize");
460 $table->add (1, $row++, new CFClient::UI::Slider 461 $table->add (1, $row++, new CFClient::UI::Slider
461 range => [$CFG->{gui_fontsize}, 0.5, 2, 0, 0.1], 462 range => [$CFG->{gui_fontsize}, 0.5, 2, 0, 0.1],
462 tooltip => "The base font size used by most GUI elements that do not have their own setting.", 463 tooltip => "The base font size used by most GUI elements that do not have their own setting.",
463 on_changed => sub { $CFG->{gui_fontsize} = $_[1] }, 464 on_changed => sub { $CFG->{gui_fontsize} = $_[1]; 0 },
464 ); 465 );
465 466
466 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Message Fontsize"); 467 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Message Fontsize");
467 $table->add (1, $row++, new CFClient::UI::Slider 468 $table->add (1, $row++, new CFClient::UI::Slider
468 range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1], 469 range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1],
469 tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.", 470 tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.",
470 on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]) }, 471 on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]); 0 },
471 ); 472 );
472 473
473 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize"); 474 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize");
474 475
475 $table->add (1, $row++, new CFClient::UI::Slider 476 $table->add (1, $row++, new CFClient::UI::Slider
476 range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1], 477 range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1],
477 tooltip => "The font size used by the <b>statistics window</b> only. Changes are instant.", 478 tooltip => "The font size used by the <b>statistics window</b> only. Changes are instant.",
478 on_changed => sub { 479 on_changed => sub {
479 $CFG->{stat_fontsize} = $_[1]; 480 $CFG->{stat_fontsize} = $_[1];
480 &set_stats_window_fontsize; 481 &set_stats_window_fontsize;
482 0
481 } 483 }
482 ); 484 );
483 485
484 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); 486 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize");
485 $table->add (1, $row++, new CFClient::UI::Slider 487 $table->add (1, $row++, new CFClient::UI::Slider
486 range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1], 488 range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1],
487 tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.", 489 tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.",
488 on_changed => sub { 490 on_changed => sub {
489 $CFG->{gauge_fontsize} = $_[1]; 491 $CFG->{gauge_fontsize} = $_[1];
490 &set_gauge_window_fontsize; 492 &set_gauge_window_fontsize;
493 0
491 } 494 }
492 ); 495 );
493 496
494 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge size"); 497 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge size");
495 $table->add (1, $row++, new CFClient::UI::Slider 498 $table->add (1, $row++, new CFClient::UI::Slider
496 range => [$CFG->{gauge_size}, 0.2, 0.8], 499 range => [$CFG->{gauge_size}, 0.2, 0.8],
497 tooltip => "Adjust the size of the stats gauges at the bottom right. Changes are instant.", 500 tooltip => "Adjust the size of the stats gauges at the bottom right. Changes are instant.",
498 on_changed => sub { 501 on_changed => sub {
499 $CFG->{gauge_size} = $_[1]; 502 $CFG->{gauge_size} = $_[1];
500 $GAUGES->{win}->set_size ($WIDTH, int $HEIGHT * $CFG->{gauge_size}); 503 $GAUGES->{win}->set_size ($WIDTH, int $HEIGHT * $CFG->{gauge_size});
504 0
501 } 505 }
502 ); 506 );
503 507
504 $table->add (1, $row++, new CFClient::UI::Button 508 $table->add (1, $row++, new CFClient::UI::Button
505 expand => 1, align => 0, text => "Apply", 509 expand => 1, align => 0, text => "Apply",
506 tooltip => "Apply the video settings", 510 tooltip => "Apply the video settings",
507 on_activate => sub { 511 on_activate => sub {
508 video_shutdown (); 512 video_shutdown ();
509 video_init (); 513 video_init ();
514 0
510 } 515 }
511 ); 516 );
512 517
513 $vbox 518 $vbox
514} 519}
522 527
523 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Audio Enable"); 528 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Audio Enable");
524 $table->add (1, $row++, new CFClient::UI::CheckBox 529 $table->add (1, $row++, new CFClient::UI::CheckBox
525 state => $CFG->{audio_enable}, 530 state => $CFG->{audio_enable},
526 tooltip => "<b>Master Audio Enable.</b> If enabled, sound effects and music will be played. If disabled, no audio will be used and the soundcard will not be opened.", 531 tooltip => "<b>Master Audio Enable.</b> If enabled, sound effects and music will be played. If disabled, no audio will be used and the soundcard will not be opened.",
527 on_changed => sub { 532 on_changed => sub { $CFG->{audio_enable} = $_[1]; 0 }
528 $CFG->{audio_enable} = $_[1];
529 }
530 ); 533 );
531# $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Effects Volume"); 534# $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Effects Volume");
532# $table->add (1, 8, new CFClient::UI::Slider range => [$CFG->{effects_volume}, 0, 128, 1], on_changed => sub { 535# $table->add (1, 8, new CFClient::UI::Slider range => [$CFG->{effects_volume}, 0, 128, 1], on_changed => sub {
533# $CFG->{effects_volume} = $_[1]; 536# $CFG->{effects_volume} = $_[1];
534# }); 537# });
535 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Background Music"); 538 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Background Music");
536 $table->add (1, $row++, my $hbox = new CFClient::UI::HBox); 539 $table->add (1, $row++, my $hbox = new CFClient::UI::HBox);
537 $hbox->add (new CFClient::UI::CheckBox 540 $hbox->add (new CFClient::UI::CheckBox
538 expand => 1, state => $CFG->{bgm_enable}, 541 expand => 1, state => $CFG->{bgm_enable},
539 tooltip => "If enabled, playing of background music is enabled. If disabled, no background music will be played.", 542 tooltip => "If enabled, playing of background music is enabled. If disabled, no background music will be played.",
540 on_changed => sub { 543 on_changed => sub { $CFG->{bgm_enable} = $_[1]; 0 }
541 $CFG->{bgm_enable} = $_[1];
542 }
543 ); 544 );
544 $hbox->add (new CFClient::UI::Slider 545 $hbox->add (new CFClient::UI::Slider
545 expand => 1, range => [$CFG->{bgm_volume}, 0, 1, 0, 1/128], 546 expand => 1, range => [$CFG->{bgm_volume}, 0, 1, 0, 1/128],
546 tooltip => "The volume of the background music. Changes are instant.", 547 tooltip => "The volume of the background music. Changes are instant.",
547 on_changed => sub { 548 on_changed => sub { $CFG->{bgm_volume} = $_[1]; CFClient::MixMusic::volume $_[1] * 128; 0 }
548 $CFG->{bgm_volume} = $_[1];
549 CFClient::MixMusic::volume $_[1] * 128;
550 }
551 ); 549 );
552 550
553 $table->add (1, $row++, new CFClient::UI::Button 551 $table->add (1, $row++, new CFClient::UI::Button
554 expand => 1, align => 0, text => "Apply", 552 expand => 1, align => 0, text => "Apply",
555 tooltip => "Apply the audio settings", 553 tooltip => "Apply the audio settings",
556 on_activate => sub { 554 on_activate => sub {
557 audio_shutdown (); 555 audio_shutdown ();
558 audio_init (); 556 audio_init ();
557 0
559 } 558 }
560 ); 559 );
561 560
562 $vbox 561 $vbox
563} 562}
625 &set_gauge_window_fontsize; 624 &set_gauge_window_fontsize;
626 625
627 $win 626 $win
628} 627}
629 628
629sub debug_setup {
630 my $table = new CFClient::UI::Table;
631
632 $table->add (0, 0, new CFClient::UI::Label text => "Widget Borders");
633 $table->add (1, 0, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 1; 0 });
634 $table->add (0, 1, new CFClient::UI::Label text => "Tooltip Widget Info");
635 $table->add (1, 1, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 2; 0 });
636 $table->add (0, 2, new CFClient::UI::Label text => "Show FPS");
637 $table->add (1, 2, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 4; 0 });
638 $table->add (0, 3, new CFClient::UI::Label text => "Suppress Tooltips");
639 $table->add (1, 3, new CFClient::UI::CheckBox on_changed => sub { $ENV{CFPLUS_DEBUG} ^= 8; 0 });
640
641 my @default_smooth = (0.05, 0.13, 0.05, 0.13, 0.30, 0.13, 0.05, 0.13, 0.05);
642
643 for my $x (0..2) {
644 for my $y (0 .. 2) {
645 $table->add ($x + 3, $y,
646 new CFClient::UI::Entry
647 text => $default_smooth[$x * 3 + $y],
648 on_changed => sub { $MAP->{smooth_matrix}[$x * 3 + $y] = $_[1] if $MAP; 0 },
649 );
650 }
651 }
652
653
654 $table
655}
630 656
631sub stats_window { 657sub stats_window {
632 my $tgw = new CFClient::UI::FancyFrame 658 my $tgw = new CFClient::UI::FancyFrame
633 y => $HEIGHT * (2/8), 659 y => $HEIGHT * (2/8),
634 x => "max", 660 x => "max",
635 title => "Stats", 661 title => "Stats",
636 name => "stats_window"; 662 name => "stats_window",
663 has_close_button => 1;
637 664
638 $tgw->add (new CFClient::UI::Window child => my $vb = new CFClient::UI::VBox); 665 $tgw->add (new CFClient::UI::Window child => my $vb = new CFClient::UI::VBox);
639 $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1, 666 $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1,
640 can_hover => 1, can_events => 1, 667 can_hover => 1, can_events => 1,
641 tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server."); 668 tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server.");
723 ); 750 );
724 $tbl2->add ($col + 1, $row, new CFClient::UI::Image 751 $tbl2->add ($col + 1, $row, new CFClient::UI::Image
725 font => $FONT_FIXED, 752 font => $FONT_FIXED,
726 can_hover => 1, 753 can_hover => 1,
727 can_events => 1, 754 can_events => 1,
728 image => "ui/resist/resist_$_.png", 755 path => "ui/resist/resist_$_.png",
729 tooltip => $resist_names{$_}, 756 tooltip => $resist_names{$_},
730 ); 757 );
731 758
732 $row++; 759 $row++;
733 if ($row % 6 == 0) { 760 if ($row % 6 == 0) {
787 $STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED}); 814 $STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED});
788 $STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP}); 815 $STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP});
789 816
790 $STATWIDS->{m_weight}->set_text (sprintf "Max weight: %.1fkg", $stats->{+CS_STAT_WEIGHT_LIM} / 1000); 817 $STATWIDS->{m_weight}->set_text (sprintf "Max weight: %.1fkg", $stats->{+CS_STAT_WEIGHT_LIM} / 1000);
791 818
792 # TODO: replace by CS_STAT_RES_xxx constants
793 my %tbl = ( 819 my %tbl = (
794 phys => 100, 820 phys => CS_STAT_RES_PHYS,
795 magic => 101, 821 magic => CS_STAT_RES_MAG,
796 fire => 102, 822 fire => CS_STAT_RES_FIRE,
797 elec => 103, 823 elec => CS_STAT_RES_ELEC,
798 cold => 104, 824 cold => CS_STAT_RES_COLD,
799 conf => 105, 825 conf => CS_STAT_RES_CONF,
800 acid => 106, 826 acid => CS_STAT_RES_ACID,
801 drain => 107, 827 drain => CS_STAT_RES_DRAIN,
802 ghit => 108, 828 ghit => CS_STAT_RES_GHOSTHIT,
803 pois => 109, 829 pois => CS_STAT_RES_POISON,
804 slow => 110, 830 slow => CS_STAT_RES_SLOW,
805 para => 111, 831 para => CS_STAT_RES_PARA,
806 tund => 112, 832 tund => CS_STAT_TURN_UNDEAD,
807 fear => 113, 833 fear => CS_STAT_RES_FEAR,
808 depl => 113, 834 depl => CS_STAT_RES_DEPLETE,
809 deat => 115, 835 deat => CS_STAT_RES_DEATH,
810 holyw => 116, 836 holyw => CS_STAT_RES_HOLYWORD,
811 blind => 117, 837 blind => CS_STAT_RES_BLIND,
812 ); 838 );
813 839
814 $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}}) 840 $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}})
815 for keys %tbl; 841 for keys %tbl;
816} 842}
817 843
818my $METASERVER_ATIME; 844my $METASERVER_ATIME;
819 845
820sub update_metaserver { 846sub update_metaserver {
847 my ($metaserver_dialog) = @_;
848
849 $METASERVER = $metaserver_dialog
850 if defined $metaserver_dialog;
851
821 return if $METASERVER_ATIME > time; 852 return if $METASERVER_ATIME > time;
822 $METASERVER_ATIME = time + 60; 853 $METASERVER_ATIME = time + 60;
823 854
824 my $table = $METASERVER->{table}; 855 my $table = $METASERVER->{table};
825 $table->clear; 856 $table->clear;
846 877
847 utf8::decode $buf if utf8::valid $buf; 878 utf8::decode $buf if utf8::valid $buf;
848 879
849 $table->clear; 880 $table->clear;
850 881
882 my @tip = (
883 "The current number of users logged in on the server.",
884 "The hostname of the server.",
885 "The time this server has been running without being restarted.",
886 "The server software version - a '+' indicates a Crossfire+ server.",
887 "Short information about this server provided by its admins.",
888 );
851 my @col = qw(Use #Users Host Uptime Version Description); 889 my @col = qw(#Users Host Uptime Version Description);
852 $table->add ($_, 0, new CFClient::UI::Label align => 0, fg => [1, 1, 0], text => $col[$_]) 890 $table->add ($_, 0, new CFClient::UI::Label
891 can_hover => 1, can_events => 1,
892 align => 0, fg => [1, 1, 0],
893 text => $col[$_], tooltip => $tip[$_])
853 for 0 .. $#col; 894 for 0 .. $#col;
854 895
855 my @align = qw(1 0 1 1 -1); 896 my @align = qw(1 0 1 1 -1);
856 897
857 my $y = 0; 898 my $y = 0;
858 for my $m (sort { $b->[3] <=> $a->[3] } map [split /\|/], split /\015?\012/, $buf) { 899 for my $m (sort { $b->[3] <=> $a->[3] } map [split /\|/], split /\015?\012/, $buf) {
875 916
876 $m = [$users, $host, $uptime, $version, $desc]; 917 $m = [$users, $host, $uptime, $version, $desc];
877 918
878 $y++; 919 $y++;
879 920
880 $table->add (0, $y, new CFClient::UI::VBox children => [ 921 $table->add (scalar @$m, $y, new CFClient::UI::VBox children => [
881 (new CFClient::UI::Button text => "Use", on_activate => sub { 922 (new CFClient::UI::Button
923 text => "Use",
924 tooltip => "Put this server into the <b>Host:Port</b> field",
925 on_activate => sub {
882 $HOST_ENTRY->set_text ($CFG->{host} = $host); 926 $HOST_ENTRY->set_text ($CFG->{profile}{default}{host} = $host);
883 $METASERVER->toggle_visibility; 927 $METASERVER->hide;
928 0
929 },
884 }), 930 ),
885 (new CFClient::UI::Empty expand => 1), 931 (new CFClient::UI::Empty expand => 1),
886 ]); 932 ]);
887 933
888 $table->add ($_ + 1, $y, new CFClient::UI::Label 934 $table->add ($_, $y, new CFClient::UI::Label
889 ellipsise => 0, align => $align[$_], text => $m->[$_], fontsize => 0.8) 935 ellipsise => 0,
936 align => $align[$_],
937 text => $m->[$_],
938 tooltip => $tip[$_],
939 can_hover => 1,
940 can_events => 1,
941 fontsize => 0.8)
890 for 0 .. $#$m; 942 for 0 .. $#$m;
891 } 943 }
892 } 944 }
893 }); 945 });
894} 946}
895 947
896sub metaserver_dialog { 948sub metaserver_dialog {
949 my $vbox = new CFClient::UI::VBox;
950 my $table = new CFClient::UI::Table;
951 $vbox->add (new CFClient::UI::ScrolledWindow expand => 1, child => $table);
952
897 my $dialog = new CFClient::UI::FancyFrame 953 my $dialog = new CFClient::UI::FancyFrame
898 title => "Server List", 954 title => "Server List",
899 name => 'metaserver_dialog', 955 name => 'metaserver_dialog',
900 x => 'center', 956 x => 'center',
901 y => 'center', 957 y => 'center',
902 z => 3, 958 z => 3,
903 child => (my $vbox = new CFClient::UI::VBox), 959 force_h => $::HEIGHT * 0.4,
960 child => $vbox,
961 has_close_button => 1,
962 table => $table,
904 on_visibility_change => sub { 963 on_visibility_change => sub {
905 update_metaserver if $_[1]; 964 update_metaserver ($_[0]) if $_[1];
965 0
906 }, 966 },
907 ; 967 ;
908
909 $vbox->add ($dialog->{table} = new CFClient::UI::Table);
910 968
911 $dialog 969 $dialog
912} 970}
913 971
914sub server_setup { 972sub server_setup {
921 $table->add (1, 2, my $vbox = new CFClient::UI::VBox); 979 $table->add (1, 2, my $vbox = new CFClient::UI::VBox);
922 980
923 $vbox->add ( 981 $vbox->add (
924 $HOST_ENTRY = new CFClient::UI::Entry 982 $HOST_ENTRY = new CFClient::UI::Entry
925 expand => 1, 983 expand => 1,
926 text => $CFG->{host}, 984 text => $CFG->{profile}{default}{host},
927 tooltip => "The hostname or ip address of the Crossfire(+) server to connect to", 985 tooltip => "The hostname or ip address of the Crossfire(+) server to connect to",
928 on_changed => sub { 986 on_changed => sub {
929 my ($self, $value) = @_; 987 my ($self, $value) = @_;
930 $CFG->{host} = $value; 988 $CFG->{profile}{default}{host} = $value;
989 0
931 } 990 }
932 ); 991 );
933
934 $METASERVER = metaserver_dialog;
935 992
936 $vbox->add (new CFClient::UI::Button 993 $vbox->add (new CFClient::UI::Button
937 expand => 1, 994 expand => 1,
938 text => "Server List", 995 text => "Server List",
939 other => $METASERVER, 996 other => $METASERVER,
940 tooltip => "Show a list of available crossfire servers", 997 tooltip => "Show a list of available crossfire servers",
941 on_activate => sub { $METASERVER->toggle_visibility }, 998 on_activate => sub { $METASERVER->toggle_visibility; 0 },
999 on_visibility_change => sub { $METASERVER->hide unless $_[1]; 0 },
942 ); 1000 );
943 } 1001 }
944 1002
945 $table->add (0, 4, new CFClient::UI::Label valign => 0, align => 1, text => "Username"); 1003 $table->add (0, 4, new CFClient::UI::Label valign => 0, align => 1, text => "Username");
946 $table->add (1, 4, new CFClient::UI::Entry 1004 $table->add (1, 4, new CFClient::UI::Entry
947 text => $CFG->{user}, 1005 text => $CFG->{profile}{default}{user},
948 tooltip => "The name of your character on the server", 1006 tooltip => "The name of your character on the server",
949 on_changed => sub { 1007 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{user} = $value }
950 my ($self, $value) = @_;
951 $CFG->{user} = $value;
952 }
953 ); 1008 );
954 1009
955 $table->add (0, 5, new CFClient::UI::Label valign => 0, align => 1, text => "Password"); 1010 $table->add (0, 5, new CFClient::UI::Label valign => 0, align => 1, text => "Password");
956 $table->add (1, 5, new CFClient::UI::Entry 1011 $table->add (1, 5, new CFClient::UI::Entry
957 text => $CFG->{password}, 1012 text => $CFG->{profile}{default}{password},
958 hidden => 1, 1013 hidden => 1,
959 tooltip => "The password for your character", 1014 tooltip => "The password for your character",
960 on_changed => sub { 1015 on_changed => sub { my ($self, $value) = @_; $CFG->{profile}{default}{password} = $value }
961 my ($self, $value) = @_;
962 $CFG->{password} = $value;
963 }
964 ); 1016 );
965 1017
966 $table->add (0, 7, new CFClient::UI::Label valign => 0, align => 1, text => "Map Size"); 1018 $table->add (0, 7, new CFClient::UI::Label valign => 0, align => 1, text => "Map Size");
967 $table->add (1, 7, new CFClient::UI::Slider 1019 $table->add (1, 7, new CFClient::UI::Slider
968 force_w => 100, 1020 force_w => 100,
969 range => [$CFG->{mapsize}, 10, 100, 0, 1], 1021 range => [$CFG->{mapsize}, 10, 100, 0, 1],
970 tooltip => "This is the size of the portion of the map update the server sends you. " 1022 tooltip => "This is the size of the portion of the map update the server sends you. "
971 . "If you set this to a high value you will be able to see further, " 1023 . "If you set this to a high value you will be able to see further, "
972 . "but you also increase bandwidth requirements and latency. " 1024 . "but you also increase bandwidth requirements and latency. "
973 . "This option is only used once at log-in.", 1025 . "This option is only used once at log-in.",
974 on_changed => sub { 1026 on_changed => sub { my ($self, $value) = @_; $CFG->{mapsize} = $self->{range}[0] = $value = int $value; 0 },
975 my ($self, $value) = @_;
976
977 $CFG->{mapsize} = $self->{range}[0] = $value = int $value;
978 },
979 ); 1027 );
980 1028
981 $table->add (0, 8, new CFClient::UI::Label valign => 0, align => 1, text => "Face Prefetch"); 1029 $table->add (0, 8, new CFClient::UI::Label valign => 0, align => 1, text => "Face Prefetch");
982 $table->add (1, 8, new CFClient::UI::CheckBox 1030 $table->add (1, 8, new CFClient::UI::CheckBox
983 state => $CFG->{face_prefetch}, 1031 state => $CFG->{face_prefetch},
986 . "This might increase or create lag, but increases the chances " 1034 . "This might increase or create lag, but increases the chances "
987 . "of faces being ready for display when you encounter them. " 1035 . "of faces being ready for display when you encounter them. "
988 . "It also uses up server bandwidth on every connect, " 1036 . "It also uses up server bandwidth on every connect, "
989 . "so only set it if you really need to prefetch images. " 1037 . "so only set it if you really need to prefetch images. "
990 . "This option can be set and unset any time.", 1038 . "This option can be set and unset any time.",
991 on_changed => sub { $CFG->{face_prefetch} = $_[1] }, 1039 on_changed => sub { $CFG->{face_prefetch} = $_[1]; 0 },
992 ); 1040 );
993 1041
994 $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Count"); 1042 $table->add (0, 9, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Count");
995 $table->add (1, 9, new CFClient::UI::Entry 1043 $table->add (1, 9, new CFClient::UI::Entry
996 text => $CFG->{output_count}, 1044 text => $CFG->{output_count},
997 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.", 1045 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.",
998 on_changed => sub { $CFG->{output_count} = $_[1] }, 1046 on_changed => sub { $CFG->{output_count} = $_[1]; 0 },
999 ); 1047 );
1000 1048
1001 $table->add (0, 10, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Sync"); 1049 $table->add (0, 10, new CFClient::UI::Label valign => 0, align => 1, text => "Output-Sync");
1002 $table->add (1, 10, new CFClient::UI::Entry 1050 $table->add (1, 10, new CFClient::UI::Entry
1003 text => $CFG->{output_sync}, 1051 text => $CFG->{output_sync},
1004 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.", 1052 tooltip => "Should be set to 1 unless you know what you are doing. This option is only used once at log-in.",
1005 on_changed => sub { $CFG->{output_sync} = $_[1] }, 1053 on_changed => sub { $CFG->{output_sync} = $_[1]; 0 },
1006 ); 1054 );
1007 1055
1008 $table->add (1, 11, $LOGIN_BUTTON = new CFClient::UI::Button 1056 $table->add (1, 11, $LOGIN_BUTTON = new CFClient::UI::Button
1009 expand => 1, 1057 expand => 1,
1010 align => 0, 1058 align => 0,
1011 text => "Login", 1059 text => "Login",
1012 on_activate => sub { 1060 on_activate => sub {
1013 $CONN ? stop_game 1061 $CONN ? stop_game
1014 : start_game; 1062 : start_game;
1063 0
1015 }, 1064 },
1016 ); 1065 );
1017 1066
1018 $table->add (0, 12, new CFClient::UI::Label valign => 0, align => 1, text => "Chat Command"); 1067 $table->add (0, 12, new CFClient::UI::Label valign => 0, align => 1, text => "Chat Command");
1019 $table->add (1, 12, my $saycmd = new CFClient::UI::Entry 1068 $table->add (1, 12, my $saycmd = new CFClient::UI::Entry
1022 . "Usually you want to enter something like 'say' or 'shout' or 'gsay' here. " 1071 . "Usually you want to enter something like 'say' or 'shout' or 'gsay' here. "
1023 . "But you could also set it to <b>tell <i>playername</i></b> to only chat with that user.", 1072 . "But you could also set it to <b>tell <i>playername</i></b> to only chat with that user.",
1024 on_changed => sub { 1073 on_changed => sub {
1025 my ($self, $value) = @_; 1074 my ($self, $value) = @_;
1026 $CFG->{say_command} = $value; 1075 $CFG->{say_command} = $value;
1076 0
1027 } 1077 }
1028 ); 1078 );
1079
1080 $vbox->add (new CFClient::UI::Label
1081 text => "Server Info",
1082 fontsize => 1.2,
1083 padding_y => 8,
1084 fg => [1, 1, 0, 1],
1085 );
1086
1087 $vbox->add ($SERVER_INFO = new CFClient::UI::Label ellipsise => 0);
1029 1088
1030 $vbox 1089 $vbox
1031} 1090}
1032 1091
1033sub message_window { 1092sub message_window {
1038 bg => [0, 0, 0, 0.75], 1097 bg => [0, 0, 0, 0.75],
1039 x => "max", 1098 x => "max",
1040 y => 0, 1099 y => 0,
1041 force_w => $::WIDTH * 0.4, 1100 force_w => $::WIDTH * 0.4,
1042 force_h => $::HEIGHT * 0.5, 1101 force_h => $::HEIGHT * 0.5,
1043 child => (my $vbox = new CFClient::UI::VBox); 1102 child => (my $vbox = new CFClient::UI::VBox),
1103 has_close_button => 1;
1044 1104
1045 $vbox->add ($LOGVIEW); 1105 $vbox->add ($LOGVIEW);
1046 1106
1047 $vbox->add (my $input = new CFClient::UI::Entry 1107 $vbox->add (my $input = new CFClient::UI::Entry
1048 tooltip => "<b>Chat Box</b>. If you enter a text and press return/enter here, the current <i>communication command</i> " 1108 tooltip => "<b>Chat Box</b>. If you enter a text and press return/enter here, the current <i>communication command</i> "
1056 1116
1057 if ($prev_focus == $MAPWIDGET && $input->{auto_activated}) { 1117 if ($prev_focus == $MAPWIDGET && $input->{auto_activated}) {
1058 $input->{refocus_map} = 1; 1118 $input->{refocus_map} = 1;
1059 } 1119 }
1060 delete $input->{auto_activated}; 1120 delete $input->{auto_activated};
1121
1122 0
1061 }, 1123 },
1062 on_activate => sub { 1124 on_activate => sub {
1063 my ($input, $text) = @_; 1125 my ($input, $text) = @_;
1064 $input->set_text (''); 1126 $input->set_text ('');
1065 1127
1071 } 1133 }
1072 if ($input->{refocus_map}) { 1134 if ($input->{refocus_map}) {
1073 delete $input->{refocus_map}; 1135 delete $input->{refocus_map};
1074 $MAPWIDGET->focus_in 1136 $MAPWIDGET->focus_in
1075 } 1137 }
1138
1139 0
1076 }, 1140 },
1077 on_escape => sub { 1141 on_escape => sub {
1078 $MAPWIDGET->focus_in 1142 $MAPWIDGET->grab_focus;
1143
1144 0
1079 }, 1145 },
1080 ); 1146 );
1081 1147
1082 $CONSOLE = { 1148 $CONSOLE = {
1083 window => $window, 1149 window => $window,
1105 ); 1171 );
1106 $vb->add (my $hb = new CFClient::UI::HBox expand => 1); 1172 $vb->add (my $hb = new CFClient::UI::HBox expand => 1);
1107 $hb->add (new CFClient::UI::Button 1173 $hb->add (new CFClient::UI::Button
1108 text => "Ok", 1174 text => "Ok",
1109 expand => 1, 1175 expand => 1,
1110 on_activate => sub { $QUIT_DIALOG->hide }, 1176 on_activate => sub { $QUIT_DIALOG->hide; 0 },
1111 ); 1177 );
1112 $hb->add (new CFClient::UI::Button 1178 $hb->add (new CFClient::UI::Button
1113 text => "Quit anyway", 1179 text => "Quit anyway",
1114 expand => 1, 1180 expand => 1,
1115 on_activate => sub { exit }, 1181 on_activate => sub { exit },
1158 ["Potions" => PICKUP_POTION], 1224 ["Potions" => PICKUP_POTION],
1159 ["Magic Devices" => PICKUP_MAGIC_DEVICE], 1225 ["Magic Devices" => PICKUP_MAGIC_DEVICE],
1160 ["Ignore cursed" => PICKUP_NOT_CURSED], 1226 ["Ignore cursed" => PICKUP_NOT_CURSED],
1161 ["Jewelery" => PICKUP_JEWELS], 1227 ["Jewelery" => PICKUP_JEWELS],
1162 ], 1228 ],
1229 ["Weight/Value ratio", 2, 17]
1163 ) 1230 )
1164 { 1231 {
1165 my ($title, $x, $y, @bits) = @$_; 1232 my ($title, $x, $y, @bits) = @$_;
1166 $table->add ($x, $y, new CFClient::UI::Label text => $title, align => 1, fg => [1, 1, 0]); 1233 $table->add ($x, $y, new CFClient::UI::Label text => $title, align => 1, fg => [1, 1, 0]);
1167 1234
1172 $table->add ($x , $y, new CFClient::UI::Label text => $_->[0], align => 1, expand => 1); 1239 $table->add ($x , $y, new CFClient::UI::Label text => $_->[0], align => 1, expand => 1);
1173 $table->add ($x+1, $y, new CFClient::UI::CheckBox 1240 $table->add ($x+1, $y, new CFClient::UI::CheckBox
1174 state => $CFG->{pickup} & $mask, 1241 state => $CFG->{pickup} & $mask,
1175 on_changed => sub { 1242 on_changed => sub {
1176 my ($box, $value) = @_; 1243 my ($box, $value) = @_;
1244
1177 if ($value) { 1245 if ($value) {
1178 $::CFG->{pickup} |= $mask; 1246 $::CFG->{pickup} |= $mask;
1179 } else { 1247 } else {
1180 $::CFG->{pickup} = $::CFG->{pickup} & ~$mask; 1248 $::CFG->{pickup} &= ~$mask;
1181 } 1249 }
1250
1182 $::CONN->send (sprintf "command pickup %u", $::CFG->{pickup}) 1251 $::CONN->send_command ("pickup $::CFG->{pickup}")
1183 if defined $::CONN; 1252 if defined $::CONN;
1253
1254 0
1184 }); 1255 });
1185 } 1256 }
1186 } 1257 }
1258
1259 $table->add (2, 18, new CFClient::UI::ValSlider
1260 range => [0, 0, 16, 1, 1],
1261 to_value => sub { ">= " . 5 * $_[0] },
1262 on_changed => sub {
1263 my ($slider, $value) = @_;
1264
1265 $::CFG->{pickup} &= ~0x7;
1266 $::CFG->{pickup} |= int $value
1267 if $value;
1268 1;
1269 });
1270 $table->add (3, 18, new CFClient::UI::Button
1271 text => "set",
1272 on_activate => sub {
1273 $::CONN->send_command ("pickup $::CFG->{pickup}")
1274 if defined $::CONN;
1275 0
1276 });
1187 1277
1188 $table 1278 $table
1189} 1279}
1190 1280
1191sub inventory_window { 1281sub inventory_window {
1193 x => "center", 1283 x => "center",
1194 y => "center", 1284 y => "center",
1195 force_w => $WIDTH * 9/10, 1285 force_w => $WIDTH * 9/10,
1196 force_h => $HEIGHT * 9/10, 1286 force_h => $HEIGHT * 9/10,
1197 title => "Inventory", 1287 title => "Inventory",
1288 name => "inventory_window",
1289 has_close_button => 1,
1198 ; 1290 ;
1199 1291
1200 $invwin->add (my $hb = new CFClient::UI::HBox homogeneous => 1); 1292 $invwin->add (my $hb = new CFClient::UI::HBox homogeneous => 1);
1201 1293
1202 $hb->add (my $vb1 = new CFClient::UI::VBox); 1294 $hb->add (my $vb1 = new CFClient::UI::VBox);
1217 1309
1218sub spell_setup { 1310sub spell_setup {
1219 new CFClient::UI::SpellList 1311 new CFClient::UI::SpellList
1220} 1312}
1221 1313
1314sub update_bindings {
1315 $BIND_UPD_CB->() if $BIND_UPD_CB;
1316}
1317
1222sub keyboard_setup { 1318sub keyboard_setup {
1223 my $binding_list = new CFClient::UI::VBox; 1319 my $binding_list = new CFClient::UI::VBox;
1224 1320
1225 my $refresh; 1321 my $refresh;
1226 $refresh = sub { 1322 $refresh = $BIND_UPD_CB = sub {
1227 $binding_list->clear (); 1323 $binding_list->clear ();
1228 1324
1229 for my $mod (keys %{$::CFG->{bindings}}) { 1325 for my $mod (keys %{$::CFG->{profile}{default}{bindings}}) {
1230 for my $sym (keys %{$::CFG->{bindings}->{$mod}}) { 1326 for my $sym (keys %{$::CFG->{profile}{default}{bindings}{$mod}}) {
1231 my $cmds = $::CFG->{bindings}->{$mod}->{$sym}; 1327 my $cmds = $::CFG->{profile}{default}{bindings}{$mod}{$sym};
1232 next unless ref $cmds eq 'ARRAY' and @$cmds > 0; 1328 next unless ref $cmds eq 'ARRAY' and @$cmds > 0;
1233 1329
1234 my $lbl = join "; ", @$cmds; 1330 my $lbl = join "; ", @$cmds;
1235 my $nam = CFClient::Binder::keycombo_to_name ($mod, $sym); 1331 my $nam = CFClient::Binder::keycombo_to_name ($mod, $sym);
1236 $binding_list->add (my $hb = new CFClient::UI::HBox); 1332 $binding_list->add (my $hb = new CFClient::UI::HBox);
1237 $hb->add (new CFClient::UI::Button 1333 $hb->add (new CFClient::UI::Button
1238 text => "delete", 1334 text => "delete",
1239 tooltip => "Deletes the binding", 1335 tooltip => "Deletes the binding",
1240 on_activate => sub { 1336 on_activate => sub {
1241 $binding_list->remove ($hb); 1337 $binding_list->remove ($hb);
1242 delete $::CFG->{bindings}->{$mod}->{$sym}; 1338 delete $::CFG->{profile}{default}{bindings}{$mod}{$sym};
1339 0
1243 }); 1340 });
1244 1341
1245 $hb->add (new CFClient::UI::Button 1342 $hb->add (new CFClient::UI::Button
1246 text => "edit", 1343 text => "edit",
1247 tooltip => "Edits the binding", 1344 tooltip => "Edits the binding",
1248 on_activate => sub { 1345 on_activate => sub {
1249 $::BIND_EDITOR->set_binding ( 1346 $::BIND_EDITOR->set_binding (
1250 $mod, $sym, $::CFG->{bindings}->{$mod}->{$sym}, 1347 $mod, $sym, $::CFG->{profile}{default}{bindings}{$mod}{$sym},
1251 sub { 1348 sub {
1252 my ($nmod, $nsym, $ncmds) = @_; 1349 my ($nmod, $nsym, $ncmds) = @_;
1253 delete $::CFG->{bindings}->{$mod}->{$sym}; 1350 $::BIND_EDITOR->cfg_unbind ($mod, $sym);
1254 $::CFG->{bindings}->{$nmod}->{$nsym} = $ncmds; 1351 $::BIND_EDITOR->cfg_bind ($nmod, $nsym, $ncmds);
1255 $refresh->(); 1352 $refresh->();
1256 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD); 1353 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD);
1257 $SETUP_DIALOG->show; 1354 $SETUP_DIALOG->show;
1258 }, 1355 },
1259 sub { 1356 sub {
1260 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD); 1357 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD);
1261 $SETUP_DIALOG->show; 1358 $SETUP_DIALOG->show;
1262 }); 1359 });
1263 $::BIND_EDITOR->show; 1360 $::BIND_EDITOR->show;
1264 $SETUP_DIALOG->hide; 1361 $SETUP_DIALOG->hide;
1362 0
1265 }); 1363 });
1266 1364
1267 $hb->add (new CFClient::UI::Label text => "(Key: $nam)"); 1365 $hb->add (new CFClient::UI::Label text => "(Key: $nam)");
1268 $hb->add (new CFClient::UI::Label text => $lbl, expand => 1); 1366 $hb->add (new CFClient::UI::Label text => $lbl, expand => 1);
1269 } 1367 }
1270 } 1368 }
1271 }; 1369 };
1272 1370
1273 my $vb = new CFClient::UI::VBox; 1371 my $vb = new CFClient::UI::VBox;
1372 $vb->add (my $hb = new CFClient::UI::HBox);
1373 $hb->add (new CFClient::UI::Label text => "only shift-up stops fire");
1374 $hb->add (new CFClient::UI::CheckBox
1375 expand => 1,
1376 state => $CFG->{shift_fire_stop},
1377 tooltip => "If this checkbox is enabled you will stop fire only if you stop pressing shift",
1378 on_changed => sub {
1379 my ($cbox, $value) = @_;
1380 $CFG->{shift_fire_stop} = $value;
1381 0
1382 });
1383
1274 $vb->add ($binding_list); 1384 $vb->add ($binding_list);
1275 $vb->add (my $hb = new CFClient::UI::HBox); 1385 $vb->add (my $hb = new CFClient::UI::HBox);
1276 1386
1277 $hb->add (new CFClient::UI::Button 1387 $hb->add (new CFClient::UI::Button
1278 text => "record new", 1388 text => "record new",
1280 tooltip => "This button opens the binding editor with an empty binding.", 1390 tooltip => "This button opens the binding editor with an empty binding.",
1281 on_activate => sub { 1391 on_activate => sub {
1282 $::BIND_EDITOR->set_binding (undef, undef, [], 1392 $::BIND_EDITOR->set_binding (undef, undef, [],
1283 sub { 1393 sub {
1284 my ($mod, $sym, $cmds) = @_; 1394 my ($mod, $sym, $cmds) = @_;
1285 $::CFG->{bindings}->{$mod}->{$sym} = $cmds; 1395 $::BIND_EDITOR->cfg_bind ($mod, $sym, $cmds);
1286 $refresh->(); 1396 $refresh->();
1287 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD); 1397 $SETUP_NOTEBOOK->set_current_page ($SETUP_KEYBOARD);
1288 $SETUP_DIALOG->show; 1398 $SETUP_DIALOG->show;
1289 }, 1399 },
1290 sub { 1400 sub {
1292 $SETUP_DIALOG->show; 1402 $SETUP_DIALOG->show;
1293 }, 1403 },
1294 ); 1404 );
1295 $SETUP_DIALOG->hide; 1405 $SETUP_DIALOG->hide;
1296 $::BIND_EDITOR->show; 1406 $::BIND_EDITOR->show;
1407 0
1297 }, 1408 },
1298 ); 1409 );
1299 1410
1300 $hb->add (new CFClient::UI::Button 1411 $hb->add (new CFClient::UI::Button
1301 text => "close", 1412 text => "close",
1302 tooltip => "Closes the binding window", 1413 tooltip => "Closes the binding window",
1303 expand => 1, 1414 expand => 1,
1304 on_activate => sub { 1415 on_activate => sub {
1305 $SETUP_DIALOG->hide; 1416 $SETUP_DIALOG->hide;
1417 0
1306 } 1418 }
1307 ); 1419 );
1308 1420
1309 $refresh->(); 1421 $refresh->();
1310 1422
1311 $vb 1423 $vb
1312} 1424}
1313 1425
1314sub make_help_window { 1426sub help_window {
1315 my $win = new CFClient::UI::FancyFrame 1427 my $win = new CFClient::UI::FancyFrame
1316 x => 'center', 1428 x => 'center',
1317 y => 'center', 1429 y => 'center',
1318 z => 2, 1430 z => 2,
1319 name => 'doc_browser', 1431 name => 'doc_browser',
1322 title => "Documentation"; 1434 title => "Documentation";
1323 1435
1324 $win->add (my $vbox = new CFClient::UI::VBox); 1436 $win->add (my $vbox = new CFClient::UI::VBox);
1325 1437
1326 $vbox->add (my $buttons = new CFClient::UI::HBox); 1438 $vbox->add (my $buttons = new CFClient::UI::HBox);
1327 $vbox->add (my $viewer = new CFClient::UI::TextView expand => 1, fontsize => 0.8); 1439 $vbox->add (my $viewer = new CFClient::UI::TextScroller
1440 expand => 1, fontsize => 0.8, padding_x => 4);
1328 1441
1329 for ( 1442 $buttons->add (new CFClient::UI::Label text => "Choose a document to display: ");
1443 $buttons->add (my $combo = new CFClient::UI::Combobox
1444 value => undef,
1445 options => [
1330 [intro => "Introduction"], 1446 [intro => "Introduction"],
1331 [manual => "Manual"], 1447 [manual => "Main Manual"],
1448 [skill_help => "Skill Reference"],
1449 [command_help => "Command Reference"],
1332 [command_help => "Commands"], 1450 [dmcommand_help => "DM Commands"],
1333 [skill_help => "Skills"], 1451 [COPYING => "License Terms"],
1334 ) { 1452 ],
1335 my ($pod, $label) = @$_; 1453 on_changed => sub {
1454 my ($self, $pod) = @_;
1336 1455
1337 $buttons->add (new CFClient::UI::Button
1338 text => $label,
1339 on_activate => sub {
1340 my $pom = CFClient::load_pod CFClient::find_rcfile "pod/$pod.pod", 1456 my $pom = CFClient::load_pod CFClient::find_rcfile "pod/$pod.pod",
1341 doc_viewer => 1, sub { CFClient::pod_to_pango_list $_[0] }; 1457 doc_viewer => 1, sub { CFClient::pod_to_pango_list $_[0] };
1342 1458
1343 $viewer->clear; 1459 $viewer->clear;
1460
1461# $viewer->add_paragraph ([1, 1, 1, 1], ["<big>Test</big>\n\n \x{fffc} \x{fffc}\n",
1462# (new CFClient::UI::Image path => "x.png", can_hover => 1, can_events => 1),
1463# (new CFClient::UI::Label text => "üüüü", can_hover => 1, can_events => 1, tooltip => "??"),
1464# ]);#d#
1344 1465
1345 $viewer->add_paragraph ([1, 1, 1, 1], $_->[1], $_->[0]) 1466 $viewer->add_paragraph ([1, 1, 1, 1], $_->[1], $_->[0])
1346 for @$pom; 1467 for @$pom;
1347 1468
1348 $viewer->set_offset (0); 1469 $viewer->set_offset (0);
1470
1349 }, 1471 0
1472 },
1473 on_visibility_change => sub {
1474 my ($self, $visible) = @_;
1475 return unless $visible;
1476 return if $self->{value};
1477 $self->set_value ("intro");
1478 0
1479 },
1350 ); 1480 );
1351 }
1352
1353 $viewer->add_paragraph ([1, 1, 0, 1], "<big>Use one of the buttons above to display a document.</big>");
1354 1481
1355 $win 1482 $win
1356} 1483}
1357 1484
1358sub sdl_init { 1485sub sdl_init {
1395 z => 100, 1522 z => 100,
1396 force_x => "max", 1523 force_x => "max",
1397 force_y => 0; 1524 force_y => 0;
1398 $DEBUG_STATUS->show; 1525 $DEBUG_STATUS->show;
1399 1526
1400 $BIND_EDITOR = new CFClient::UI::BindEditor (x => "max", y => 0); 1527 $BIND_EDITOR = new CFClient::BindingEditor (x => "max", y => 0);
1401 1528
1402 $STATUSBOX = new CFClient::UI::Statusbox; 1529 $STATUSBOX = new CFClient::UI::Statusbox;
1403 $STATUSBOX->add ("Use <b>Alt-Enter</b> to toggle fullscreen mode", timeout => 864000, pri => -100, color => [1, 1, 1, 0.8]); 1530 $STATUSBOX->add ("Use <b>Alt-Enter</b> to toggle fullscreen mode", timeout => 864000, pri => -100, color => [1, 1, 1, 0.8]);
1404 1531
1405 (new CFClient::UI::Frame 1532 (new CFClient::UI::Frame
1425 $MAPWIDGET->connect (activate_console => sub { 1552 $MAPWIDGET->connect (activate_console => sub {
1426 my ($mapwidget, $preset) = @_; 1553 my ($mapwidget, $preset) = @_;
1427 1554
1428 if ($CONSOLE) { 1555 if ($CONSOLE) {
1429 $CONSOLE->{input}->{auto_activated} = 1; 1556 $CONSOLE->{input}->{auto_activated} = 1;
1430 $CONSOLE->{input}->focus_in; 1557 $CONSOLE->{input}->grab_focus;
1431 1558
1432 if ($preset && $CONSOLE->{input}->get_text eq '') { 1559 if ($preset && $CONSOLE->{input}->get_text eq '') {
1433 $CONSOLE->{input}->set_text ($preset); 1560 $CONSOLE->{input}->set_text ($preset);
1434 } 1561 }
1435 } 1562 }
1436 }); 1563 });
1437 $MAPWIDGET->show; 1564 $MAPWIDGET->show;
1438 $MAPWIDGET->focus_in; 1565 $MAPWIDGET->grab_focus;
1439 1566
1440 $LOGVIEW = new CFClient::UI::TextView 1567 $LOGVIEW = new CFClient::UI::TextScroller
1441 expand => 1, 1568 expand => 1,
1442 font => $FONT_FIXED, 1569 font => $FONT_FIXED,
1443 fontsize => $::CFG->{log_fontsize}, 1570 fontsize => $::CFG->{log_fontsize},
1571 indent => -4,
1444 can_hover => 1, 1572 can_hover => 1,
1445 can_events => 1, 1573 can_events => 1,
1446 tooltip => "<b>Server Log</b>. This text viewer contains all the messages sent by the server.", 1574 tooltip => "<b>Server Log</b>. This text viewer contains all the messages sent by the server.",
1447 ; 1575 ;
1448 1576
1452 x => 'center', 1580 x => 'center',
1453 y => 'center', 1581 y => 'center',
1454 z => 2, 1582 z => 2,
1455 force_w => $::WIDTH * 0.6, 1583 force_w => $::WIDTH * 0.6,
1456 force_h => $::HEIGHT * 0.6, 1584 force_h => $::HEIGHT * 0.6,
1585 has_close_button => 1,
1457 ; 1586 ;
1587
1588 $METASERVER = metaserver_dialog;
1458 1589
1459 $SETUP_DIALOG->add ($SETUP_NOTEBOOK = new CFClient::UI::Notebook expand => 1, debug => 1, 1590 $SETUP_DIALOG->add ($SETUP_NOTEBOOK = new CFClient::UI::Notebook expand => 1, debug => 1,
1460 filter => new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1); 1591 filter => new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1);
1461 1592
1462 $SETUP_NOTEBOOK->add (Server => $SETUP_SERVER = server_setup, 1593 $SETUP_NOTEBOOK->add (Server => $SETUP_SERVER = server_setup,
1466 $SETUP_NOTEBOOK->add (Graphics => graphics_setup, 1597 $SETUP_NOTEBOOK->add (Graphics => graphics_setup,
1467 "Configure the video mode, performance, fonts and other graphical aspects of the game."); 1598 "Configure the video mode, performance, fonts and other graphical aspects of the game.");
1468 $SETUP_NOTEBOOK->add (Audio => audio_setup, 1599 $SETUP_NOTEBOOK->add (Audio => audio_setup,
1469 "Configure the use of audio, sound effects and background music."); 1600 "Configure the use of audio, sound effects and background music.");
1470 $SETUP_NOTEBOOK->add (Keyboard => $SETUP_KEYBOARD = keyboard_setup, 1601 $SETUP_NOTEBOOK->add (Keyboard => $SETUP_KEYBOARD = keyboard_setup,
1471 "Lets you define, edit and delete bindings." 1602 "Lets you define, edit and delete key bindings."
1472 . "There is a shortcut for making bindings: <b>Left Control + Insert</b> opens the binding editor " 1603 . "There is a shortcut for making bindings: <b>Control-Insert</b> opens the binding editor "
1473 . "with nothing set and the recording started. After doing the actions you " 1604 . "with nothing set and the recording started. After doing the actions you "
1474 . "want to record press <b>Insert</b> and you will be asked to press a key-combo. " 1605 . "want to record press <b>Insert</b> and you will be asked to press a key-combo. "
1475 . "After pressing the combo the binding will be saved automatically and the " 1606 . "After pressing the combo the binding will be saved automatically and the "
1476 . "binding editor closes"); 1607 . "binding editor closes");
1477 $SETUP_NOTEBOOK->add (Spells => $SETUP_SPELLS = spell_setup, 1608 $SETUP_NOTEBOOK->add (Spells => $SETUP_SPELLS = spell_setup,
1478 "Displays all spells you have and lets you edit keyboard shortcuts for them."); 1609 "Displays all spells you have and lets you edit keyboard shortcuts for them.");
1610 $SETUP_NOTEBOOK->add (Debug => debug_setup,
1611 "Some debuggin' options. Do not ask.");
1479 1612
1480 $BUTTONBAR = new CFClient::UI::Buttonbar x => 0, y => 0, z => 200; # put on top 1613 $BUTTONBAR = new CFClient::UI::Buttonbar x => 0, y => 0, z => 200; # put on top
1481 1614
1482 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Setup", other => $SETUP_DIALOG, 1615 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Setup", other => $SETUP_DIALOG,
1483 tooltip => "Toggles a dialog where you can configure all aspects of this client."); 1616 tooltip => "Toggles a dialog where you can configure all aspects of this client.");
1498 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.", 1631 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.",
1499 on_activate => sub { 1632 on_activate => sub {
1500 $::CFG->{layout} = CFClient::UI::get_layout; 1633 $::CFG->{layout} = CFClient::UI::get_layout;
1501 CFClient::write_cfg "$Crossfire::VARDIR/cfplusrc"; 1634 CFClient::write_cfg "$Crossfire::VARDIR/cfplusrc";
1502 status "Configuration Saved"; 1635 status "Configuration Saved";
1636 0
1503 }, 1637 },
1504 ); 1638 );
1505 1639
1506 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => make_help_window, 1640 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => help_window,
1507 tooltip => "View Documentation"); 1641 tooltip => "View Documentation");
1508 1642
1509 $BUTTONBAR->add (new CFClient::UI::Button 1643 $BUTTONBAR->add (new CFClient::UI::Button
1510 text => "Quit", 1644 text => "Quit",
1511 tooltip => "Terminates the program", 1645 tooltip => "Terminates the program",
1513 if ($CONN) { 1647 if ($CONN) {
1514 open_quit_dialog; 1648 open_quit_dialog;
1515 } else { 1649 } else {
1516 exit; 1650 exit;
1517 } 1651 }
1652 0
1518 }, 1653 },
1519 ); 1654 );
1520 1655
1521 $BUTTONBAR->show; 1656 $BUTTONBAR->show;
1522 $SETUP_DIALOG->show; 1657 $SETUP_DIALOG->show;
1524 1659
1525 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]); 1660 $STATUSBOX->add ("Set video mode $WIDTH×$HEIGHT", timeout => 10, fg => [1, 1, 1, 0.5]);
1526} 1661}
1527 1662
1528sub video_shutdown { 1663sub video_shutdown {
1664 CFClient::OpenGL::shutdown;
1665
1529 undef $SDL_ACTIVE; 1666 undef $SDL_ACTIVE;
1530} 1667}
1531 1668
1532my @bgmusic = qw(game1.ogg game2.ogg game3.ogg game5.ogg game6.ogg ross1.ogg ross2.ogg ross3.ogg ross4.ogg ross5.ogg); #d# 1669my @bgmusic = qw(game1.ogg game2.ogg game3.ogg game5.ogg game6.ogg ross1.ogg ross2.ogg ross3.ogg ross4.ogg ross5.ogg); #d#
1533my $bgmusic;#TODO#hack#d# 1670my $bgmusic;#TODO#hack#d#
1749 1886
1750 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc"; 1887 CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc";
1751 CFClient::UI::set_layout ($::CFG->{layout}); 1888 CFClient::UI::set_layout ($::CFG->{layout});
1752 1889
1753 my %DEF_CFG = ( 1890 my %DEF_CFG = (
1754 sdl_mode => 0, 1891 sdl_mode => 0,
1755 width => 640, 1892 width => 640,
1756 height => 480, 1893 height => 480,
1757 fullscreen => 0, 1894 fullscreen => 0,
1758 fast => 0, 1895 fast => 0,
1759 map_scale => 1, 1896 map_scale => 1,
1760 fow_enable => 1, 1897 fow_enable => 1,
1761 fow_intensity => 0.45, 1898 fow_intensity => 0.45,
1762 fow_smooth => 0, 1899 fow_smooth => 0,
1763 gui_fontsize => 1, 1900 gui_fontsize => 1,
1764 log_fontsize => 0.7, 1901 log_fontsize => 0.7,
1765 gauge_fontsize=> 1, 1902 gauge_fontsize => 1,
1766 gauge_size => 0.35, 1903 gauge_size => 0.35,
1767 stat_fontsize => 0.7, 1904 stat_fontsize => 0.7,
1768 mapsize => 100, 1905 mapsize => 100,
1769 host => "crossfire.schmorp.de",
1770 say_command => 'say', 1906 say_command => 'say',
1771 audio_enable => 1, 1907 audio_enable => 1,
1772 bgm_enable => 1, 1908 bgm_enable => 1,
1773 bgm_volume => 0.25, 1909 bgm_volume => 0.25,
1774 face_prefetch => 0, 1910 face_prefetch => 0,
1775 output_sync => 1, 1911 output_sync => 1,
1776 output_count => 1, 1912 output_count => 1,
1913 pickup => 0,
1914 default => "profile", # default profile
1915 );
1777 ); 1916
1778
1779 while (my ($k, $v) = each %DEF_CFG) { 1917 while (my ($k, $v) = each %DEF_CFG) {
1780 $CFG->{$k} = $v unless exists $CFG->{$k}; 1918 $CFG->{$k} = $v unless exists $CFG->{$k};
1781 } 1919 }
1920
1921 $CFG->{profile}{default}{host} ||= "crossfire.schmorp.de";
1782 1922
1783 sdl_init; 1923 sdl_init;
1784 1924
1785 @SDL_MODES = reverse 1925 @SDL_MODES = reverse
1786 grep $_->[0] >= 640 && $_->[1] >= 480, 1926 grep $_->[0] >= 640 && $_->[1] >= 480,
1828 video_init; 1968 video_init;
1829 audio_init; 1969 audio_init;
1830} 1970}
1831 1971
1832Event::loop; 1972Event::loop;
1973#CFClient::SDL_Quit;
1974#CFClient::_exit 0;
1833 1975
1834END { CFClient::SDL_Quit } 1976END { CFClient::SDL_Quit }
1835 1977
1836=head1 NAME 1978=head1 NAME
1837 1979

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines